Improved support for comment folding
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / text / folding / DefaultJavaFoldingStructureProvider.java
index a15d39c..77a19ac 100644 (file)
@@ -37,6 +37,7 @@ 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.internal.compiler.parser.Scanner;
 import net.sourceforge.phpdt.internal.ui.text.DocumentCharacterIterator;
 import net.sourceforge.phpdt.ui.IWorkingCopyManager;
 import net.sourceforge.phpdt.ui.PreferenceConstants;
@@ -384,7 +385,7 @@ public class DefaultJavaFoldingStructureProvider implements IProjectionListener,
 
        private boolean fCollapseJavadoc = false;
 
-//     private boolean fCollapseImportContainer = true;
+       // private boolean fCollapseImportContainer = true;
 
        private boolean fCollapseInnerTypes = true;
 
@@ -484,7 +485,7 @@ public class DefaultJavaFoldingStructureProvider implements IProjectionListener,
                                                ICompilationUnit unit = (ICompilationUnit) fInput;
                                                synchronized (unit) {
                                                        try {
-//                                                             unit.reconcile(ICompilationUnit.NO_AST, false, null, null);
+                                                               // unit.reconcile(ICompilationUnit.NO_AST, false, null, null);
                                                                unit.reconcile();
                                                        } catch (JavaModelException x) {
                                                        }
@@ -517,7 +518,8 @@ public class DefaultJavaFoldingStructureProvider implements IProjectionListener,
        private void initializePreferences() {
                IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
                fCollapseInnerTypes = store.getBoolean(PreferenceConstants.EDITOR_FOLDING_INNERTYPES);
-//             fCollapseImportContainer = store.getBoolean(PreferenceConstants.EDITOR_FOLDING_IMPORTS);
+               // fCollapseImportContainer =
+               // store.getBoolean(PreferenceConstants.EDITOR_FOLDING_IMPORTS);
                fCollapseJavadoc = store.getBoolean(PreferenceConstants.EDITOR_FOLDING_JAVADOC);
                fCollapseMethods = store.getBoolean(PreferenceConstants.EDITOR_FOLDING_METHODS);
                fCollapseHeaderComments = store.getBoolean(PreferenceConstants.EDITOR_FOLDING_HEADERS);
@@ -525,7 +527,7 @@ public class DefaultJavaFoldingStructureProvider implements IProjectionListener,
 
        private Map computeAdditions(IParent parent) {
                Map map = new LinkedHashMap(); // use a linked map to maintain ordering of
-                                                                                                                                               // comments
+               // comments
                try {
                        computeAdditions(parent.getChildren(), map);
                } catch (JavaModelException x) {
@@ -553,10 +555,10 @@ public class DefaultJavaFoldingStructureProvider implements IProjectionListener,
                boolean collapse = false;
                switch (element.getElementType()) {
 
-//             case IJavaElement.IMPORT_CONTAINER:
-//                     collapse = fAllowCollapsing && fCollapseImportContainer;
-//                     createProjection = true;
-//                     break;
+               // case IJavaElement.IMPORT_CONTAINER:
+               // collapse = fAllowCollapsing && fCollapseImportContainer;
+               // createProjection = true;
+               // break;
                case IJavaElement.TYPE:
                        collapse = fAllowCollapsing && fCollapseInnerTypes && isInnerType((IType) element);
                        createProjection = true;
@@ -637,28 +639,30 @@ public class DefaultJavaFoldingStructureProvider implements IProjectionListener,
                                        }
                                }
 
-                               IScanner scanner = ToolFactory.createScanner(true, false, false, false);
-                               scanner.setSource(contents.toCharArray());
                                final int shift = range.getOffset();
                                int start = shift;
-                               while (true) {
+                               if (element instanceof IType) {
+                                       Scanner scanner = ToolFactory.createScanner(true, false, false, false);
+                                       scanner.setSource(contents.toCharArray());
+                                       scanner.setPHPMode(true);
 
                                        int token = scanner.getNextToken();
-                                       start = shift + scanner.getCurrentTokenStartPosition();
+                                       while (token != ITerminalSymbols.TokenNameEOF) {
 
-                                       switch (token) {
-                                       case ITerminalSymbols.TokenNameCOMMENT_PHPDOC:
-                                       case ITerminalSymbols.TokenNameCOMMENT_BLOCK: {
-                                               int end = shift + scanner.getCurrentTokenEndPosition() + 1;
-                                               regions.add(new Region(start, end - start));
-                                       }
-                                       case ITerminalSymbols.TokenNameCOMMENT_LINE:
-                                               continue;
-                                       }
+                                               token = scanner.getNextToken();
+                                               start = shift + scanner.getCurrentTokenStartPosition();
 
-                                       break;
+                                               switch (token) {
+                                               case ITerminalSymbols.TokenNameCOMMENT_PHPDOC:
+                                               case ITerminalSymbols.TokenNameCOMMENT_BLOCK: {
+                                                       int end = shift + scanner.getCurrentTokenEndPosition() + 1;
+                                                       regions.add(new Region(start, end - start));
+                                               }
+                                               case ITerminalSymbols.TokenNameCOMMENT_LINE:
+                                                       continue;
+                                               }
+                                       }
                                }
-
                                regions.add(new Region(start, shift + range.getLength() - start));
 
                                if (regions.size() > 0) {
@@ -666,6 +670,7 @@ public class DefaultJavaFoldingStructureProvider implements IProjectionListener,
                                        regions.toArray(result);
                                        return result;
                                }
+
                        }
                } catch (JavaModelException e) {
                } catch (InvalidInputException e) {