improved PHP parser
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / core / CompilationUnit.java
index 2fb069d..d150dd3 100644 (file)
@@ -16,7 +16,10 @@ import java.util.Map;
 
 import net.sourceforge.phpdt.core.IBuffer;
 import net.sourceforge.phpdt.core.IBufferFactory;
+import net.sourceforge.phpdt.core.ICodeAssist;
+import net.sourceforge.phpdt.core.ICodeCompletionRequestor;
 import net.sourceforge.phpdt.core.ICompilationUnit;
+import net.sourceforge.phpdt.core.IImportContainer;
 import net.sourceforge.phpdt.core.IImportDeclaration;
 import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.IJavaModelStatusConstants;
@@ -42,6 +45,7 @@ import net.sourceforge.phpdt.internal.compiler.IProblemFactory;
 import net.sourceforge.phpdt.internal.compiler.SourceElementParser;
 import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions;
 import net.sourceforge.phpdt.internal.compiler.problem.DefaultProblemFactory;
+import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
 import net.sourceforge.phpdt.internal.core.util.Util;
 import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
 
@@ -60,7 +64,6 @@ import org.eclipse.core.runtime.Path;
 public class CompilationUnit extends Openable implements ICompilationUnit,
     net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit {
   public WorkingCopyOwner owner;
-
   /**
    * Constructs a handle to a compilation unit with the given name in the specified package for the specified owner
    * 
@@ -193,7 +196,6 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
     // update timestamp (might be IResource.NULL_STAMP if original does not exist)
 
     unitInfo.timestamp = ((IFile) underlyingResource).getModificationStamp();
-
     // compute other problems if needed
     CompilationUnitDeclaration compilationUnitDeclaration = null;
     try {
@@ -206,7 +208,7 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
 
       //               if (info instanceof ASTHolderCUInfo) {
       //                       int astLevel = ((ASTHolderCUInfo) info).astLevel;
-      //                       org.eclipse.jdt.core.dom.CompilationUnit cu = AST.convertCompilationUnit(astLevel, unit, contents, options, pm);
+      //                       net.sourceforge.phpdt.core.dom.CompilationUnit cu = AST.convertCompilationUnit(astLevel, unit, contents, options, pm);
       //                       ((ASTHolderCUInfo) info).ast = cu;
       //               }
     } finally {
@@ -222,7 +224,7 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
   // * @see ICodeAssist#codeComplete(int, ICompletionRequestor)
   // */
   //public void codeComplete(int offset, ICompletionRequestor requestor) throws JavaModelException {
-  //   codeComplete(this, isWorkingCopy() ? (org.eclipse.jdt.internal.compiler.env.ICompilationUnit) getOriginalElement() : this,
+  //   codeComplete(this, isWorkingCopy() ? (net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit) getOriginalElement() : this,
   // offset, requestor);
   //}
   /**
@@ -303,8 +305,8 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
   //           String source = ""; //$NON-NLS-1$
   //           if (pkg.getElementName().length() > 0) {
   //                   //not the default package...add the package declaration
-  //                   source = "package " + pkg.getElementName() + ";" + org.eclipse.jdt.internal.compiler.util.ProjectPrefUtil.LINE_SEPARATOR +
-  // org.eclipse.jdt.internal.compiler.util.ProjectPrefUtil.LINE_SEPARATOR; //$NON-NLS-1$ //$NON-NLS-2$
+  //                   source = "package " + pkg.getElementName() + ";" + net.sourceforge.phpdt.internal.compiler.util.ProjectPrefUtil.LINE_SEPARATOR +
+  // net.sourceforge.phpdt.internal.compiler.util.ProjectPrefUtil.LINE_SEPARATOR; //$NON-NLS-1$ //$NON-NLS-2$
   //           }
   //           CreateCompilationUnitOperation op = new CreateCompilationUnitOperation(pkg, fName, source, force);
   //           runOperation(op, monitor);
@@ -534,7 +536,7 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
   }
 
   /**
-   * @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getContents()
+   * @see net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit#getContents()
    */
   public char[] getContents() {
     try {
@@ -582,47 +584,68 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
   public char[] getFileName() {
     return getElementName().toCharArray();
   }
+  /*
+   * @see JavaElement
+   */
+  public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner workingCopyOwner) {
+       switch (token.charAt(0)) {
+               case JEM_COUNT:
+                       return getHandleUpdatingCountFromMemento(memento, workingCopyOwner);
+               case JEM_IMPORTDECLARATION:
+                       JavaElement container = (JavaElement)getImportContainer();
+                       return container.getHandleFromMemento(token, memento, workingCopyOwner);
+               case JEM_PACKAGEDECLARATION:
+                       String pkgName = memento.nextToken();
+                       JavaElement pkgDecl = (JavaElement)getPackageDeclaration(pkgName);
+                       return pkgDecl.getHandleFromMemento(memento, workingCopyOwner);
+               case JEM_TYPE:
+                       String typeName = memento.nextToken();
+                       JavaElement type = (JavaElement)getType(typeName);
+                       return type.getHandleFromMemento(memento, workingCopyOwner);
+       }
+       return null;
+  }
 
   /**
    * @see JavaElement#getHandleMementoDelimiter()
    */
   protected char getHandleMementoDelimiter() {
-    return JavaElement.JEM_COMPILATIONUNIT;
+       return JavaElement.JEM_COMPILATIONUNIT;
   }
-
   /**
    * @see ICompilationUnit#getImport(String)
    */
   public IImportDeclaration getImport(String importName) {
-    return new ImportDeclaration((ImportContainer) getImportContainer(), importName);
+       return new ImportDeclaration((ImportContainer)getImportContainer(), importName);
   }
-
   /**
    * @see ICompilationUnit#getImportContainer()
    */
-  public ImportContainer getImportContainer() {
-    return new ImportContainer(this);
+  public IImportContainer getImportContainer() {
+       return new ImportContainer(this);
   }
 
+
   /**
    * @see ICompilationUnit#getImports()
    */
-  //public IImportDeclaration[] getImports() throws JavaModelException {
-  //   IImportContainer container= getImportContainer();
-  //   if (container.exists()) {
-  //           IJavaElement[] elements= container.getChildren();
-  //           IImportDeclaration[] imprts= new IImportDeclaration[elements.length];
-  //           System.arraycopy(elements, 0, imprts, 0, elements.length);
-  //           return imprts;
-  //   } else if (!exists()) {
-  //                   throw newNotPresentException();
-  //   } else {
-  //           return new IImportDeclaration[0];
-  //   }
-  //
-  //}
+  public IImportDeclaration[] getImports() throws JavaModelException {
+       IImportContainer container= getImportContainer();
+       if (container.exists()) {
+               IJavaElement[] elements= container.getChildren();
+               IImportDeclaration[] imprts= new IImportDeclaration[elements.length];
+               System.arraycopy(elements, 0, imprts, 0, elements.length);
+               return imprts;
+       } else if (!exists()) {
+                       throw newNotPresentException();
+       } else {
+               return new IImportDeclaration[0];
+       }
+
+  }
   /**
-   * @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getMainTypeName()
+   * @see net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit#getMainTypeName()
    */
   public char[] getMainTypeName() {
     String name = getElementName();
@@ -684,7 +707,7 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
   }
 
   /**
-   * @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getPackageName()
+   * @see net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit#getPackageName()
    */
   public char[][] getPackageName() {
     return null;
@@ -1015,7 +1038,7 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
     //         ASTHolderCUInfo info = new ASTHolderCUInfo();
     //         info.astLevel = astLevel;
     //         openWhenClosed(info, monitor);
-    //         org.eclipse.jdt.core.dom.CompilationUnit result = info.ast;
+    //         net.sourceforge.phpdt.core.dom.CompilationUnit result = info.ast;
     //         info.ast = null;
     //         return result;
     // } else {
@@ -1166,7 +1189,7 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
    * @see ICompilationUnit#reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor)
    * @since 3.0
    */
-  //public org.eclipse.jdt.core.dom.CompilationUnit reconcile(
+  //public net.sourceforge.phpdt.core.dom.CompilationUnit reconcile(
   public Object reconcile(int astLevel, boolean forceProblemDetection, WorkingCopyOwner workingCopyOwner, IProgressMonitor monitor)
       throws JavaModelException {