Fixed outline wrong order of methods bug
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / parser / Parser.java
index cc9ce7a..b1d21e0 100644 (file)
@@ -50,7 +50,7 @@ public class Parser //extends PHPParserSuperclass
     implements ITerminalSymbols, CompilerModifiers, ParserBasicInformation {
   //internal data for the automat
   protected final static int StackIncrement = 255;
-
   protected int stateStackTop;
 
   protected int[] stack = new int[StackIncrement];
@@ -1168,7 +1168,7 @@ public class Parser //extends PHPParserSuperclass
           //              typeDecl.sourceStart, typeDecl.sourceEnd);
         }
         getNextToken();
-        interface_extends_list();
+        interface_extends_list(typeDecl);
       } else {
         typeDecl.name = new char[] { ' ' };
         throwSyntaxError("Interface name expected after keyword 'interface'.", typeDecl.sourceStart, typeDecl.sourceEnd);
@@ -1197,7 +1197,7 @@ public class Parser //extends PHPParserSuperclass
         //             /* empty */
         //     | T_EXTENDS fully_qualified_class_name
         if (token == TokenNameextends) {
-          interface_extends_list();
+          interface_extends_list(typeDecl);
           //          getNextToken();
           //          if (token != TokenNameIdentifier) {
           //            throwSyntaxError("Class name expected after keyword
@@ -1206,7 +1206,7 @@ public class Parser //extends PHPParserSuperclass
           //                    .getCurrentTokenEndPosition());
           //          }
         }
-        implements_list();
+        implements_list(typeDecl);
       } else {
         typeDecl.name = new char[] { ' ' };
         throwSyntaxError("Class name expected after keyword 'class'.", typeDecl.sourceStart, typeDecl.sourceEnd);
@@ -1260,7 +1260,21 @@ public class Parser //extends PHPParserSuperclass
     }
   }
 
-  private void interface_extends_list() {
+  private void class_extends(TypeDeclaration typeDecl) {
+    // /* empty */
+    // | T_EXTENDS interface_list
+    if (token == TokenNameextends) {
+      getNextToken();
+
+      if (token == TokenNameIdentifier) {
+        getNextToken();
+      } else {
+        throwSyntaxError("Class name expected after keyword 'extends'.");
+      }
+    }
+  } 
+  
+  private void interface_extends_list(TypeDeclaration typeDecl) {
     // /* empty */
     // | T_EXTENDS interface_list
     if (token == TokenNameextends) {
@@ -1269,11 +1283,11 @@ public class Parser //extends PHPParserSuperclass
     }
   }
 
-  private void implements_list() {
+  private void implements_list(TypeDeclaration typeDecl) {
     // /* empty */
     // | T_IMPLEMENTS interface_list
     if (token == TokenNameimplements) {
-      getNextToken();
+      getNextToken(); 
       interface_list();
     }
   }
@@ -1519,9 +1533,10 @@ public class Parser //extends PHPParserSuperclass
           typeDecl.methods = new AbstractMethodDeclaration[] { methodDecl };
         } else {
           AbstractMethodDeclaration[] newMethods;
-          System.arraycopy(typeDecl.methods, 0, newMethods = new AbstractMethodDeclaration[typeDecl.methods.length + 1], 1,
+          System.arraycopy(typeDecl.methods, 0, 
+              newMethods = new AbstractMethodDeclaration[typeDecl.methods.length + 1], 0,
               typeDecl.methods.length);
-          newMethods[0] = methodDecl;
+          newMethods[typeDecl.methods.length] = methodDecl;
           typeDecl.methods = newMethods;
         }
         if ((typeDecl.modifiers & AccAbstract) == AccAbstract) {
@@ -3414,7 +3429,11 @@ public class Parser //extends PHPParserSuperclass
               problemReporter.phpIncludeNotExistWarning(args, literal.sourceStart, literal.sourceEnd, referenceContext,
                   compilationUnit.compilationResult);
             } else {
-              impt.setFile( PHPFileUtil.createFile(path, project) );
+              try {
+                impt.setFile( PHPFileUtil.createFile(path, project) );
+              } catch (Exception e) {
+                // the file is outside of the workspace
+              }
             }
           }
         }