3m9 compatible;
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / core / ReconcileWorkingCopyOperation.java
index b796ae9..cf966f9 100644 (file)
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.core;
 
+import java.util.Map;
+
 import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.IJavaModelStatus;
 import net.sourceforge.phpdt.core.IJavaModelStatusConstants;
 import net.sourceforge.phpdt.core.IProblemRequestor;
 import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
+import net.sourceforge.phpdt.internal.core.util.Util;
+import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
 
 /**
  * Reconcile a working copy and signal the changes through a delta.
  */
 public class ReconcileWorkingCopyOperation extends JavaModelOperation {
                
+       boolean createAST;
+       int astLevel;
        boolean forceProblemDetection;
+       WorkingCopyOwner workingCopyOwner;
+//     org.eclipse.jdt.core.dom.CompilationUnit ast;
        
        public ReconcileWorkingCopyOperation(IJavaElement workingCopy, boolean forceProblemDetection) {
                super(new IJavaElement[] {workingCopy});
                this.forceProblemDetection = forceProblemDetection;
        }
+       public ReconcileWorkingCopyOperation(IJavaElement workingCopy, boolean creatAST, int astLevel, boolean forceProblemDetection, WorkingCopyOwner workingCopyOwner) {
+               super(new IJavaElement[] {workingCopy});
+               this.createAST = creatAST;
+               this.astLevel = astLevel;
+               this.forceProblemDetection = forceProblemDetection;
+               this.workingCopyOwner = workingCopyOwner;
+       }
        /**
         * @exception JavaModelException if setting the source
         *      of the original compilation unit fails
@@ -78,12 +94,12 @@ public class ReconcileWorkingCopyOperation extends JavaModelOperation {
 //     }
        protected void executeOperation() throws JavaModelException {
          // TODO jsurfer optimize for PHP
-               if (fMonitor != null){
-                       if (fMonitor.isCanceled()) return;
-                       fMonitor.beginTask(Util.bind("element.reconciling"), 10); //$NON-NLS-1$
+               if (progressMonitor != null){
+                       if (progressMonitor.isCanceled()) return;
+                       progressMonitor.beginTask(Util.bind("element.reconciling"), 10); //$NON-NLS-1$
                }
        
-               WorkingCopy workingCopy = getWorkingCopy();
+               CompilationUnit workingCopy = getWorkingCopy();
 //             boolean wasConsistent = workingCopy.isConsistent();
 //             JavaElementDeltaBuilder deltaBuilder = null;
        
@@ -98,18 +114,33 @@ public class ReconcileWorkingCopyOperation extends JavaModelOperation {
 //             
 //                     }
        
-                       if (fMonitor != null) fMonitor.worked(2);
+                       if (progressMonitor != null) progressMonitor.worked(2);
                        
                        // force problem detection? - if structure was consistent
                        if (forceProblemDetection){
-                               if (fMonitor != null && fMonitor.isCanceled()) return;
-               
-                               IProblemRequestor problemRequestor = workingCopy.problemRequestor;
+                               if (progressMonitor != null && progressMonitor.isCanceled()) return;
+                               CompilationUnitDeclaration unit = null;
+                               try {
+                               IProblemRequestor problemRequestor = workingCopy.getPerWorkingCopyInfo();
                                if (problemRequestor != null && problemRequestor.isActive()){
                                        problemRequestor.beginReporting();
-                                       CompilationUnitProblemFinder.process(workingCopy, problemRequestor, fMonitor);
+                                       char[] contents = workingCopy.getContents();
+                                       unit = CompilationUnitProblemFinder.process(workingCopy, contents, this.workingCopyOwner, problemRequestor, false/*don't cleanup cu*/, this.progressMonitor);
+                                       
+                                       CompilationUnitProblemFinder.process(workingCopy, problemRequestor, progressMonitor);
                                        problemRequestor.endReporting();
                                }
+                               if (progressMonitor != null) progressMonitor.worked(1);
+                               if (this.createAST && unit != null) {
+//                                     Map options = workingCopy.getJavaProject().getOptions(true);
+//                                     this.ast = AST.convertCompilationUnit(this.astLevel, unit, contents, options, this.progressMonitor);
+                                       if (progressMonitor != null) progressMonitor.worked(1);
+                               }
+                               } finally {
+                               if (unit != null) {
+                                   unit.cleanUp();
+                               }
+                           }
                        }
                        
                        // register the deltas
@@ -119,14 +150,14 @@ public class ReconcileWorkingCopyOperation extends JavaModelOperation {
 //                             }
 //                     }
                } finally {
-                       if (fMonitor != null) fMonitor.done();
+                       if (progressMonitor != null) progressMonitor.done();
                }
        }
        /**
         * Returns the working copy this operation is working on.
         */
-       protected WorkingCopy getWorkingCopy() {
-               return (WorkingCopy)getElementToProcess();
+       protected CompilationUnit getWorkingCopy() {
+               return (CompilationUnit)getElementToProcess();
        }
        /**
         * @see JavaModelOperation#isReadOnly
@@ -134,17 +165,17 @@ public class ReconcileWorkingCopyOperation extends JavaModelOperation {
        public boolean isReadOnly() {
                return true;
        }
+       
        protected IJavaModelStatus verify() {
                IJavaModelStatus status = super.verify();
                if (!status.isOK()) {
                        return status;
                }
-               WorkingCopy workingCopy = getWorkingCopy();
-               if (workingCopy.useCount == 0) {
+               CompilationUnit workingCopy = getWorkingCopy();
+               if (!workingCopy.isWorkingCopy()) {
                        return new JavaModelStatus(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, workingCopy); //was destroyed
                }
                return status;
        }
 
-
 }