Bug 567319 - Parser error while editor => build failures popup and
editor doesn't start

Change-Id: I9517add3382d0cf4561174b6e7e199a036583573
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 bb95d47..7cb9cfa 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 @@
 				"----------\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 02bf1d2..f3e57ae 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 @@
 }
 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