if (branchStatement && statement != null) {
// reportSyntaxError("Unreachable code", statement.sourceStart,
// statement.sourceEnd);
- problemReporter.unreachableCode(new String(scanner.getCurrentIdentifierSource()), statement.sourceStart,
+ if (! (statement instanceof BreakStatement)) {
+ /* don't give an error for break statement following return statement
+ Technically it's unreachable code, but in switch-case it's recommended to
+ avoid accidental fall-through later when editing the code */
+ problemReporter.unreachableCode(new String(scanner.getCurrentIdentifierSource()), statement.sourceStart,
statement.sourceEnd, referenceContext, compilationUnit.compilationResult);
+ }
}
if ((token == TokenNameRBRACE) || (token == TokenNamecase) || (token == TokenNamedefault) || (token == TokenNameelse)
|| (token == TokenNameelseif) || (token == TokenNameendif) || (token == TokenNameendfor)
// | T_EXTENDS interface_list
if (token == TokenNameextends) {
getNextToken();
- interface_list();
+ class_list(typeDecl);
}
}
// | T_IMPLEMENTS interface_list
if (token == TokenNameimplements) {
getNextToken();
- interface_list();
+ interface_list(typeDecl);
}
}
- private void interface_list() {
+ private void class_list(TypeDeclaration typeDecl) {
+ // class_list:
+ // fully_qualified_class_name
+ do {
+ if (token == TokenNameIdentifier) {
+ char[] ident = scanner.getCurrentIdentifierSource();
+ // TODO make this code working better:
+ // SingleTypeReference ref = ParserUtil.getTypeReference(scanner,
+ // includesList, ident);
+ // if (ref != null) {
+ // typeDecl.superclass = ref;
+ // }
+ getNextToken();
+ } else {
+ throwSyntaxError("Classname expected after keyword 'extends'.");
+ }
+ if (token == TokenNameCOMMA) {
+ reportSyntaxError("No multiple inheritence allowed. Expected token 'implements' or '{'.");
+ getNextToken();
+ continue;
+ } else {
+ break;
+ }
+ } while (true);
+ }
+
+ private void interface_list(TypeDeclaration typeDecl) {
// interface_list:
// fully_qualified_class_name
// | interface_list ',' fully_qualified_class_name
if (token == TokenNameIdentifier) {
getNextToken();
} else {
- throwSyntaxError("Interface name expected after keyword 'implements'.");
+ throwSyntaxError("Interfacename expected after keyword 'implements'.");
}
if (token != TokenNameCOMMA) {
return;
variable(true, false);
} else if (token == TokenNameDOLLAR) {
variable(false, false);
+ } else if (token == TokenNameIdentifier) {
+ identifier(true, true);
} else {
if (token == TokenNamelist) {
getNextToken();
String ext = file.getRawLocation().getFileExtension();
int fileExtensionLength = ext == null ? 0 : ext.length() + 1;
+ IFile f = PHPFileUtil.createFile(path, project);
+
impt.tokens = CharOperation.splitOn('/', filePath.toCharArray(), 0, filePath.length() - fileExtensionLength);
- impt.setFile(PHPFileUtil.createFile(path, project));
+ impt.setFile(f);
} catch (Exception e) {
// the file is outside of the workspace
}