improved PHP parser
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / ui / wizards / NewTypeWizardPage.java
index 6fa222c..8105380 100644 (file)
@@ -14,18 +14,22 @@ import java.util.ArrayList;
 import java.util.List;
 
 import net.sourceforge.phpdt.core.Flags;
+import net.sourceforge.phpdt.core.IBuffer;
 import net.sourceforge.phpdt.core.ICompilationUnit;
 import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.IPackageFragment;
+import net.sourceforge.phpdt.core.IPackageFragmentRoot;
+import net.sourceforge.phpdt.core.ISourceRange;
 import net.sourceforge.phpdt.core.IType;
 import net.sourceforge.phpdt.core.ToolFactory;
 import net.sourceforge.phpdt.core.compiler.IScanner;
 import net.sourceforge.phpdt.core.compiler.ITerminalSymbols;
 import net.sourceforge.phpdt.core.compiler.InvalidInputException;
 import net.sourceforge.phpdt.externaltools.internal.ui.StatusInfo;
-import net.sourceforge.phpdt.internal.corext.template.Template;
-import net.sourceforge.phpdt.internal.corext.template.Templates;
+import net.sourceforge.phpdt.internal.corext.codemanipulation.StubUtility;
 import net.sourceforge.phpdt.internal.corext.template.php.JavaContext;
+import net.sourceforge.phpdt.internal.corext.template.php.Templates;
+import net.sourceforge.phpdt.internal.corext.util.JavaModelUtil;
 import net.sourceforge.phpdt.internal.ui.PHPUiImages;
 import net.sourceforge.phpdt.internal.ui.util.SWTUtil;
 import net.sourceforge.phpdt.internal.ui.wizards.NewWizardMessages;
@@ -41,10 +45,19 @@ import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.Separator;
 import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.StringButtonDialogField;
 import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.StringButtonStatusDialogField;
 import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.StringDialogField;
+import net.sourceforge.phpdt.ui.CodeGeneration;
+import net.sourceforge.phpdt.ui.PreferenceConstants;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.templates.Template;
+import org.eclipse.jface.text.templates.TemplateException;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Image;
@@ -65,8 +78,8 @@ import org.eclipse.swt.widgets.Control;
  * example usage of <code>NewTypeWizardPage</code>.
  * </p>
  * 
- * @see org.eclipse.jdt.ui.wizards.NewClassWizardPage
- * @see org.eclipse.jdt.ui.wizards.NewInterfaceWizardPage
+ * @see net.sourceforge.phpdt.ui.wizards.NewClassWizardPage
+ * @see net.sourceforge.phpdt.ui.wizards.NewInterfaceWizardPage
  * 
  * @since 2.0
  */
@@ -170,7 +183,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
   private SelectionButtonDialogFieldGroup fAccMdfButtons;
   private SelectionButtonDialogFieldGroup fOtherMdfButtons;
 
-  //   private IType fCreatedType;
+  private IType fCreatedType;
 
   protected IStatus fEnclosingTypeStatus;
   protected IStatus fPackageStatus;
@@ -194,7 +207,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
    */
   public NewTypeWizardPage(boolean isClass, String pageName) {
     super(pageName);
-    //         fCreatedType= null;
+    fCreatedType= null;
 
     fIsClass = isClass;
 
@@ -395,7 +408,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 
     Button button = fEnclosingTypeDialogField.getChangeControl(composite);
     gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-    gd.heightHint = SWTUtil.getButtonHeigthHint(button);
+    gd.heightHint = SWTUtil.getButtonHeightHint(button);
     gd.widthHint = SWTUtil.getButtonWidthHint(button);
     button.setLayoutData(gd);
   }
@@ -588,7 +601,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
   // -------- update message ----------------          
 
   /*
-   * @see org.eclipse.jdt.ui.wizards.NewContainerWizardPage#handleFieldChanged(String)
+   * @see net.sourceforge.phpdt.ui.wizards.NewContainerWizardPage#handleFieldChanged(String)
    */
   protected void handleFieldChanged(String fieldName) {
     super.handleFieldChanged(fieldName);
@@ -1274,14 +1287,14 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
    * 
    * @param monitor a progress monitor to report progress.
    */
-//  public void createType(IProgressMonitor monitor) throws CoreException, InterruptedException {
-//    if (monitor == null) {
-//      monitor = new NullProgressMonitor();
-//    }
-//
-//    monitor.beginTask(NewWizardMessages.getString("NewTypeWizardPage.operationdesc"), 10); //$NON-NLS-1$
-//    ICompilationUnit createdWorkingCopy = null;
-//    try {
+  public void createType(IProgressMonitor monitor) throws CoreException, InterruptedException {
+    if (monitor == null) {
+      monitor = new NullProgressMonitor();
+    }
+
+    monitor.beginTask(NewWizardMessages.getString("NewTypeWizardPage.operationdesc"), 10); //$NON-NLS-1$
+    ICompilationUnit createdWorkingCopy = null;
+    try {
 //      IPackageFragmentRoot root = getPackageFragmentRoot();
 //      IPackageFragment pack = getPackageFragment();
 //      if (pack == null) {
@@ -1292,39 +1305,39 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 //        String packName = pack.getElementName();
 //        pack = root.createPackageFragment(packName, true, null);
 //      }
-//
-//      monitor.worked(1);
-//
-//      String clName = getTypeName();
-//
-//      boolean isInnerClass = isEnclosingTypeSelected();
-//
-//      IType createdType;
+
+      monitor.worked(1);
+
+      String clName = getTypeName();
+
+      boolean isInnerClass = isEnclosingTypeSelected();
+
+      IType createdType;
 //      ImportsStructure imports;
-//      int indent = 0;
-//
-//      IPreferenceStore store = PreferenceConstants.getPreferenceStore();
+      int indent = 0;
+
+      IPreferenceStore store = PreferenceConstants.getPreferenceStore();
 //      String[] prefOrder = JavaPreferencesSettings.getImportOrderPreference(store);
 //      int threshold = JavaPreferencesSettings.getImportNumberThreshold(store);
 //
-//      String lineDelimiter = null;
+      String lineDelimiter = null;
 //      if (!isInnerClass) {
-//        lineDelimiter = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+        lineDelimiter = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 //
-//        ICompilationUnit parentCU = pack.createCompilationUnit(clName + ".java", "", false, new SubProgressMonitor(monitor, 2)); //$NON-NLS-1$ //$NON-NLS-2$
+//         ICompilationUnit parentCU = pack.createCompilationUnit(clName + ".php", "", false, new SubProgressMonitor(monitor, 2)); //$NON-NLS-1$ //$NON-NLS-2$
 //        createdWorkingCopy = (ICompilationUnit) parentCU.getSharedWorkingCopy(null, JavaUI.getBufferFactory(), null);
 //
 //        imports = new ImportsStructure(createdWorkingCopy, prefOrder, threshold, false);
 //        // add an import that will be removed again. Having this import solves 14661
 //        imports.addImport(pack.getElementName(), getTypeName());
 //
-//        String typeContent = constructTypeStub(new ImportsManager(imports), lineDelimiter);
-//
+          String typeContent = constructTypeStub(lineDelimiter);//new ImportsManager(imports), lineDelimiter);
+
 //        String cuContent = constructCUContent(parentCU, typeContent, lineDelimiter);
-//
+
 //        createdWorkingCopy.getBuffer().setContents(cuContent);
 //
-//        createdType = createdWorkingCopy.getType(clName);
+        createdType = createdWorkingCopy.getType(clName);
 //      } else {
 //        IType enclosingType = getEnclosingType();
 //
@@ -1363,41 +1376,41 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 //      // add imports for superclass/interfaces, so types can be resolved correctly
 //      imports.create(false, new SubProgressMonitor(monitor, 1));
 //
-//      ICompilationUnit cu = createdType.getCompilationUnit();
-//      synchronized (cu) {
-//        cu.reconcile();
-//      }
+      ICompilationUnit cu = createdType.getCompilationUnit();
+      synchronized (cu) {
+        cu.reconcile();
+      }
 //      createTypeMembers(createdType, new ImportsManager(imports), new SubProgressMonitor(monitor, 1));
 //
 //      // add imports
 //      imports.create(false, new SubProgressMonitor(monitor, 1));
-//
-//      synchronized (cu) {
-//        cu.reconcile();
-//      }
-//      ISourceRange range = createdType.getSourceRange();
-//
-//      IBuffer buf = cu.getBuffer();
-//      String originalContent = buf.getText(range.getOffset(), range.getLength());
-//      String formattedContent = StubUtility.codeFormat(originalContent, indent, lineDelimiter);
-//      buf.replace(range.getOffset(), range.getLength(), formattedContent);
-//      if (!isInnerClass) {
-//        String fileComment = getFileComment(cu);
-//        if (fileComment != null && fileComment.length() > 0) {
-//          buf.replace(0, 0, fileComment + lineDelimiter);
-//        }
-//        cu.commit(false, new SubProgressMonitor(monitor, 1));
-//      } else {
-//        monitor.worked(1);
-//      }
-//      fCreatedType = createdType;
-//    } finally {
-//      if (createdWorkingCopy != null) {
-//        createdWorkingCopy.destroy();
-//      }
-//      monitor.done();
-//    }
-//  }
+
+      synchronized (cu) {
+        cu.reconcile();
+      }
+      ISourceRange range = createdType.getSourceRange();
+
+      IBuffer buf = cu.getBuffer();
+      String originalContent = buf.getText(range.getOffset(), range.getLength());
+      String formattedContent = StubUtility.codeFormat(originalContent, indent, lineDelimiter);
+      buf.replace(range.getOffset(), range.getLength(), formattedContent);
+      if (!isInnerClass) {
+        String fileComment = getFileComment(cu);
+        if (fileComment != null && fileComment.length() > 0) {
+          buf.replace(0, 0, fileComment + lineDelimiter);
+        }
+        cu.commit(false, new SubProgressMonitor(monitor, 1));
+      } else {
+        monitor.worked(1);
+      }
+      fCreatedType = createdType;
+    } finally {
+      if (createdWorkingCopy != null) {
+        createdWorkingCopy.destroy();
+      }
+      monitor.done();
+    }
+  }
 
   /**
    * Uses the New Java file template from the code template page to generate a
@@ -1445,9 +1458,9 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
    * @return the created type
    * @see #createType(IProgressMonitor)
    */
-  //   public IType getCreatedType() {
-  //           return fCreatedType;
-  //   }
+       public IType getCreatedType() {
+               return fCreatedType;
+       }
 
   // ---- construct cu body----------------
 
@@ -1483,25 +1496,25 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
   /*
    * Called from createType to construct the source for this type
    */
-  //   private String constructTypeStub(ImportsManager imports, String lineDelimiter) {        
-  //           StringBuffer buf= new StringBuffer();
-  //                   
-  //           int modifiers= getModifiers();
-  //           buf.append(Flags.toString(modifiers));
-  //           if (modifiers != 0) {
-  //                   buf.append(' ');
-  //           }
-  //           buf.append(fIsClass ? "class " : "interface "); //$NON-NLS-2$ //$NON-NLS-1$
-  //           buf.append(getTypeName());
-  //           writeSuperClass(buf, imports);
-  //           writeSuperInterfaces(buf, imports);     
-  //           buf.append('{');
-  //           buf.append(lineDelimiter);
-  //           buf.append(lineDelimiter);
-  //           buf.append('}');
-  //           buf.append(lineDelimiter);
-  //           return buf.toString();
-  //   }
+       private String constructTypeStub(String lineDelimiter) { // ImportsManager imports, String lineDelimiter) {     
+               StringBuffer buf= new StringBuffer();
+                       
+               int modifiers= getModifiers();
+               buf.append(Flags.toString(modifiers));
+               if (modifiers != 0) {
+                       buf.append(' ');
+               }
+               buf.append(fIsClass ? "class " : "interface "); //$NON-NLS-2$ //$NON-NLS-1$
+               buf.append(getTypeName());
+//             writeSuperClass(buf, imports);
+//             writeSuperInterfaces(buf, imports);     
+               buf.append('{');
+               buf.append(lineDelimiter);
+               buf.append(lineDelimiter);
+               buf.append('}');
+               buf.append(lineDelimiter);
+               return buf.toString();
+       }
 
   /**
    * @deprecated Overwrite createTypeMembers(IType, IImportsManager, IProgressMonitor) instead
@@ -1572,24 +1585,24 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
    * @return the type comment or <code>null</code> if a type comment 
    * is not desired
    */
-  //   protected String getTypeComment(ICompilationUnit parentCU) {
-  //           if (PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.CODEGEN_ADD_COMMENTS)) {
-  //                   try {
-  //                           StringBuffer typeName= new StringBuffer();
-  //                           if (isEnclosingTypeSelected()) {
-  //                                   typeName.append(JavaModelUtil.getTypeQualifiedName(getEnclosingType())).append('.');
-  //                           }
-  //                           typeName.append(getTypeName());
-  //                           String comment= CodeGeneration.getTypeComment(parentCU, typeName.toString(), String.valueOf('\n'));
-  //                           if (comment != null && isValidComment(comment)) {
-  //                                   return comment;
-  //                           }
-  //                   } catch (CoreException e) {
-  //                           PHPeclipsePlugin.log(e);
-  //                   }
-  //           }
-  //           return null;
-  //   }
+       protected String getTypeComment(ICompilationUnit parentCU) {
+               if (PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.CODEGEN_ADD_COMMENTS)) {
+                       try {
+                               StringBuffer typeName= new StringBuffer();
+                               if (isEnclosingTypeSelected()) {
+                                       typeName.append(JavaModelUtil.getTypeQualifiedName(getEnclosingType())).append('.');
+                               }
+                               typeName.append(getTypeName());
+                               String comment= CodeGeneration.getTypeComment(parentCU, typeName.toString(), String.valueOf('\n'));
+                               if (comment != null && isValidComment(comment)) {
+                                       return comment;
+                               }
+                       } catch (CoreException e) {
+                               PHPeclipsePlugin.log(e);
+                       }
+               }
+               return null;
+       }
 
   /**
    * @deprecated Use getTemplate(String,ICompilationUnit,int)
@@ -1614,10 +1627,16 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
     try {
       Template[] templates = Templates.getInstance().getTemplates(name);
       if (templates.length > 0) {
-        return JavaContext.evaluateTemplate(templates[0], parentCU, pos);
+          return JavaContext.evaluateTemplate(templates[0], parentCU, pos);
       }
     } catch (CoreException e) {
       PHPeclipsePlugin.log(e);
+    } catch (BadLocationException e1) {
+      // TODO Auto-generated catch block
+      e1.printStackTrace();
+    } catch (TemplateException e1) {
+      // TODO Auto-generated catch block
+      e1.printStackTrace();
     }
     return null;
   }