improved PHP parser
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / core / JavaModel.java
index daa7f05..e184748 100644 (file)
@@ -18,7 +18,11 @@ import java.util.Map;
 import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.IJavaModel;
 import net.sourceforge.phpdt.core.IJavaProject;
+import net.sourceforge.phpdt.core.IOpenable;
 import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
+import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
+import net.sourceforge.phpdt.internal.core.util.Util;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
@@ -59,7 +63,22 @@ public class JavaModel extends Openable implements IJavaModel {
  * @exception Error if called more than once
  */
 protected JavaModel() throws Error {
-       super(JAVA_MODEL, null, "" /*workspace has empty name*/); //$NON-NLS-1$
+       super(null, "" /*workspace has empty name*/); //$NON-NLS-1$
+}
+protected boolean buildStructure(OpenableElementInfo info, IProgressMonitor pm, Map newElements, IResource underlyingResource) /*throws JavaModelException*/ {
+
+       // determine my children
+       IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+       for (int i = 0, max = projects.length; i < max; i++) {
+               IProject project = projects[i];
+               if (JavaProject.hasJavaNature(project)) {
+                       info.addChild(getJavaProject(project));
+               }
+       }
+
+       newElements.put(this, info);
+       
+       return true;
 }
 /*
  * @see IJavaModel
@@ -99,7 +118,7 @@ public void copy(IJavaElement[] elements, IJavaElement[] containers, IJavaElemen
 /**
  * Returns a new element info for this element.
  */
-protected OpenableElementInfo createElementInfo() {
+protected Object createElementInfo() {
        return new JavaModelInfo();
 }
 
@@ -130,7 +149,12 @@ public IJavaProject findJavaProject(IProject project) {
        }
        return null;
 }
-
+/**
+ * @see IJavaElement
+ */
+public int getElementType() {
+       return JAVA_MODEL;
+}
 /**
  * Flushes the cache of external files known to be existing.
  */
@@ -332,6 +356,22 @@ protected boolean generateInfos(
 //     }
 //     return type;
 //}
+
+
+/*
+ * @see JavaElement
+ */
+public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner owner) {
+       switch (token.charAt(0)) {
+               case JEM_COUNT:
+                       return getHandleUpdatingCountFromMemento(memento, owner);
+               case JEM_JAVAPROJECT:
+                       String projectName = memento.nextToken();
+                       JavaElement project = (JavaElement)getJavaProject(projectName);
+                       return project.getHandleFromMemento(memento, owner);
+       }
+       return null;
+}
 /**
  * @see JavaElement#getHandleMemento()
  */
@@ -346,6 +386,7 @@ protected char getHandleMementoDelimiter(){
        Assert.isTrue(false, "Should not be called"); //$NON-NLS-1$
        return 0;
 }
+
 /**
  * @see IJavaModel
  */
@@ -477,7 +518,8 @@ protected void runOperation(MultiOperation op, IJavaElement[] elements, IJavaEle
                        op.setInsertBefore(elements[i], siblings[i]);
                }
        }
-       runOperation(op, monitor);
+//     runOperation(op, monitor);
+       op.runOperation(monitor);
 }
 /**
  * @private Debugging purposes