Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2021-05-22 12:10:40 +0000
committerStephan Herrmann2021-05-22 17:18:15 +0000
commitf405e82c76aed68376e8e17e0ebf3b01f613d19e (patch)
treea46c5c35b8798b50b75f0d4e0095454e9bf8ad3c
parentab1ffb380751852391d86fb1a800aba9a8443c16 (diff)
downloadeclipse.jdt.core-f405e82c76aed68376e8e17e0ebf3b01f613d19e.tar.gz
eclipse.jdt.core-f405e82c76aed68376e8e17e0ebf3b01f613d19e.tar.xz
eclipse.jdt.core-f405e82c76aed68376e8e17e0ebf3b01f613d19e.zip
Bug 482663 - Infinite loop in JDT completion parser recovery/resumeI20210523-1800I20210523-0600I20210522-1800
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>
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests18.java34
1 files changed, 34 insertions, 0 deletions
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 214ca75a0e..a3bbcbcc7d 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 @@ public void testBug573105_OnLambdaParamAtMethodInvocationInsideLambdaInCondition
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());
+}
}

Back to the top