diff options
| author | Stephan Herrmann | 2021-05-22 12:10:40 +0000 |
|---|---|---|
| committer | Stephan Herrmann | 2021-05-22 17:18:15 +0000 |
| commit | f405e82c76aed68376e8e17e0ebf3b01f613d19e (patch) | |
| tree | a46c5c35b8798b50b75f0d4e0095454e9bf8ad3c | |
| parent | ab1ffb380751852391d86fb1a800aba9a8443c16 (diff) | |
| download | eclipse.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.java | 34 |
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()); +} } |
