diff options
2 files changed, 35 insertions, 2 deletions
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionsYieldTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionsYieldTest.java index bb95d47818..7cb9cfa4f4 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionsYieldTest.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionsYieldTest.java @@ -5925,4 +5925,37 @@ public class SwitchExpressionsYieldTest extends AbstractRegressionTest { "----------\n" ); } + public void testBug567112_001() { + runNegativeTest( + new String[] { + "X.java", + "import java.util.ArrayList;\n"+ + "\n"+ + "public class X {\n"+ + " public void foo() {\n"+ + " new ArrayList<>().stream().filter(p -> p != null)\n"+ + " switch (\"\") {\n"+ + " case \"\":\n"+ + " }\n"+ + " }\n"+ + "}" + }, + "----------\n" + + "1. ERROR in X.java (at line 5)\n" + + " new ArrayList<>().stream().filter(p -> p != null)\n" + + " ^^^^^\n" + + "Syntax error on tokens, delete these tokens\n" + + "----------\n" + + "2. ERROR in X.java (at line 8)\n" + + " }\n" + + " ^\n" + + "Syntax error, insert \")\" to complete Expression\n" + + "----------\n" + + "3. ERROR in X.java (at line 8)\n" + + " }\n" + + " ^\n" + + "Syntax error, insert \";\" to complete BlockStatements\n" + + "----------\n" + ); + } } diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Scanner.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Scanner.java index 02bf1d262f..f3e57aeb33 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Scanner.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Scanner.java @@ -5631,8 +5631,8 @@ private VanguardParser getNewVanguardParser(char[] src) { } int disambiguatedToken(int token) { final VanguardParser parser = getVanguardParser(); - if (token == TokenNameARROW && mayBeAtCaseLabelExpr()) { - assert this.caseStartPosition < this.startPosition; + if (token == TokenNameARROW && mayBeAtCaseLabelExpr() && this.caseStartPosition < this.startPosition) { + // this.caseStartPosition > this.startPositionpossible on recovery - bother only about correct ones. int nSz = this.startPosition - this.caseStartPosition; // add fake token of TokenNameCOLON, call vanguard on this modified source // TODO: Inefficient method due to redoing of the same source, investigate alternate |