Bug 482663 - Infinite loop in JDT completion parser recovery/resume
Change-Id: Ife172f9ff21c684fcc8d6a271681084d98d856d9
Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.core/+/180903
Tested-by: Stephan Herrmann <stephan.herrmann@berlin.de>
Reviewed-by: Stephan Herrmann <stephan.herrmann@berlin.de>
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests18.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests18.java
index 214ca75..a3bbcbc 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests18.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests18.java
@@ -4984,4 +4984,38 @@
assertTrue(String.format("Result doesn''t contain method foo (%s)", result),
result.contains("foo[METHOD_REF]{foo(), LBug573105$Element;, ()Ljava.net.URI;, foo, null, 60}\n"));
}
+public void testBug482663() throws Exception {
+ this.workingCopies = new ICompilationUnit[1];
+ this.workingCopies[0] = getWorkingCopy(
+ "/Completion/src/CompletionParserResumeFailure.java",
+ "import java.util.Map;\n" +
+ "import java.util.stream.Stream;\n" +
+ "class Path {}\n" +
+ "public class CompletionParserResumeFailure\n" +
+ "{\n" +
+ " Stream<Path> list(Path dir) throws IOException { return null; }\n" +
+ " public void freeze()\n" +
+ " {\n" +
+ " list(null).map(p -> new Object()\n" +
+ " {\n" +
+ " public String name = p.getFileName().toString();\n" +
+ " public Map<String, Date> clients = p;\n" +
+ " });\n" +
+ " }\n" +
+ "}\n");
+ CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+ requestor.allowAllRequiredProposals();
+
+ String str = this.workingCopies[0].getSource();
+ String completeBehind = "Date";
+ int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+ this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner, new NullProgressMonitor());
+
+ assertResults(
+ "DateFormat[TYPE_REF]{java.text.DateFormat, java.text, Ljava.text.DateFormat;, null, null, 69}\n" +
+ "DateFormatSymbols[TYPE_REF]{java.text.DateFormatSymbols, java.text, Ljava.text.DateFormatSymbols;, null, null, 69}\n" +
+ "Date[TYPE_REF]{java.sql.Date, java.sql, Ljava.sql.Date;, null, null, 73}\n" +
+ "Date[TYPE_REF]{java.util.Date, java.util, Ljava.util.Date;, null, null, 73}",
+ requestor.getResults());
+}
}