X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java index abb27ea..b1d21e0 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java @@ -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]; @@ -167,7 +167,9 @@ public class Parser //extends PHPParserSuperclass public void initializeScanner() { this.scanner = new Scanner(false /* comment */, false /* whitespace */, this.options .getSeverity(CompilerOptions.NonExternalizedString) != ProblemSeverities.Ignore /* nls */, false, false, - this.options.taskTags/* taskTags */, this.options.taskPriorites/* taskPriorities */); + this.options.taskTags/* taskTags */, + this.options.taskPriorites/* taskPriorities */, + true/*isTaskCaseSensitive*/); } /** @@ -208,6 +210,12 @@ public class Parser //extends PHPParserSuperclass throw new SyntaxError(1, 0, " ", error); } + private void reportSyntaxError(String error) { + int problemStartPosition = scanner.getCurrentTokenStartPosition(); + int problemEndPosition = scanner.getCurrentTokenEndPosition(); + reportSyntaxError(error, problemStartPosition, problemEndPosition + 1); + } + private void reportSyntaxError(String error, int problemStartPosition, int problemEndPosition) { problemReporter.phpParsingError(new String[] { error }, problemStartPosition, problemEndPosition, referenceContext, compilationUnit.compilationResult); @@ -1160,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); @@ -1189,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 @@ -1198,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); @@ -1252,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) { @@ -1261,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(); } } @@ -1511,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) { @@ -1682,7 +1705,7 @@ public class Parser //extends PHPParserSuperclass } } else { // TokenNamedefault getNextToken(); - if (token == TokenNameCOLON) { + if (token == TokenNameCOLON || token == TokenNameSEMICOLON) { getNextToken(); if (token == TokenNameRBRACE) { // empty default case @@ -3406,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 + } } } }