### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core.tests.model Index: src/org/eclipse/jdt/core/tests/dom/ASTConverterRecoveryTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterRecoveryTest.java,v retrieving revision 1.12 diff -u -r1.12 ASTConverterRecoveryTest.java --- src/org/eclipse/jdt/core/tests/dom/ASTConverterRecoveryTest.java 27 Jun 2008 16:02:37 -0000 1.12 +++ src/org/eclipse/jdt/core/tests/dom/ASTConverterRecoveryTest.java 22 Jul 2008 12:11:51 -0000 @@ -514,7 +514,8 @@ Statement statement2 = forStatement.getBody(); assertTrue("Not an empty statement", statement2.getNodeType() == ASTNode.EMPTY_STATEMENT); //$NON-NLS-1$ EmptyStatement emptyStatement = (EmptyStatement)statement2; - checkSourceRange(emptyStatement, "i", source); //$NON-NLS-1$ + assertEquals("Wrong start position", fragment.getStartPosition() + fragment.getLength(), emptyStatement.getStartPosition()); + assertEquals("Wrong length", 0, emptyStatement.getLength()); assertTrue("Not flag as RECOVERED", (emptyStatement.getFlags() & ASTNode.RECOVERED) != 0); } @@ -951,4 +952,40 @@ checkSourceRange(message, "(\"aa\"", source); //$NON-NLS-1$ assertTrue("Not flag as RECOVERED", (message.getFlags() & ASTNode.RECOVERED) != 0); } + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=239117 + public void test0018() throws JavaModelException { + this.workingCopies = new ICompilationUnit[0]; + + ASTResult result = this.buildMarkedAST( + "/Converter/src/p/X.java", + "package p;\n" + + "public class X {\n" + + " void m(Object var) {\n" + + " if (1==1 && var.equals(1)[*1*][*1*] {\n" + + " }\n" + + " }\n" + + "}"); + + assertASTResult( + "===== AST =====\n" + + "package p;\n" + + "public class X {\n" + + " void m( Object var){\n" + + " if (1 == 1 && var.equals(1)) [*1*];[*1*]\n" + + " }\n" + + "}\n" + + "\n" + + "===== Details =====\n" + + "1:EMPTY_STATEMENT,[77,0],,RECOVERED,[N/A]\n" + + "===== Problems =====\n" + + "1. ERROR in /Converter/src/p/X.java (at line 4)\n" + + " if (1==1 && var.equals(1) {\n" + + " ^^^^^^\n" + + "The method equals(Object) in the type Object is not applicable for the arguments (int)\n" + + "2. ERROR in /Converter/src/p/X.java (at line 4)\n" + + " if (1==1 && var.equals(1) {\n" + + " ^\n" + + "Syntax error, insert \") Statement\" to complete BlockStatements\n", + result); + } } #P org.eclipse.jdt.core Index: compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java,v retrieving revision 1.389 diff -u -r1.389 Parser.java --- compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java 3 Jul 2008 09:05:25 -0000 1.389 +++ compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java 22 Jul 2008 12:11:59 -0000 @@ -2895,7 +2895,7 @@ return; } } - pushOnAstStack(new EmptyStatement(this.endStatementPosition, this.endStatementPosition)); + pushOnAstStack(new EmptyStatement(this.endPosition + 1, this.endStatementPosition)); } } protected void consumeEmptySwitchBlock() {