diff options
author | Stephan Herrmann | 2018-11-15 22:12:32 +0000 |
---|---|---|
committer | Stephan Herrmann | 2018-11-15 22:12:32 +0000 |
commit | 4ca6ea52439bbf09da333dd0c955ea1b885c2b9d (patch) | |
tree | b940a756377a2304fa03a406a5b80d56d469dc69 | |
parent | dd3a278b906114fedcdb46af8aca43eac75b3bfe (diff) | |
download | eclipse.jdt.core-4ca6ea52439bbf09da333dd0c955ea1b885c2b9d.tar.gz eclipse.jdt.core-4ca6ea52439bbf09da333dd0c955ea1b885c2b9d.tar.xz eclipse.jdt.core-4ca6ea52439bbf09da333dd0c955ea1b885c2b9d.zip |
Bug 541015 - Module-related NPE Compiling Java 11 codeI20181117-0600I20181116-1800
Change-Id: I3ec5fe8575cbd11d80618c14658ce7b7b37cc95b
2 files changed, 77 insertions, 2 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java index c07c66a33d..63276624ab 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java @@ -7141,6 +7141,81 @@ public class ModuleBuilderTests extends ModifyingResourceTests { deleteProject("Bug540788.vulkan.demo"); } } + public void testBug541015() throws Exception { + try { + IJavaProject m1 = createJava9Project("m1", new String[] { "src" }); + createSourceFiles(m1, + new String[] { + "src/module-info.java", + "module m1 { exports org.p1; }\n", + "src/org/p1/T1.java", + "package org.p1;\n" + + "public class T1 {}\n" + }); + IJavaProject m2 = createJava9Project("m2", new String[] { "src" }); + createSourceFiles(m2, + new String[] { + "src/module-info.java", + "module m2 { exports org.p1; }\n", + "src/org/p1/T1.java", + "package org.p1;\n" + + "public class T1 {}\n" + }); + IJavaProject m3 = createJava9Project("m3", new String[] { "src" }); + createSourceFiles(m3, + new String[] { + "src/module-info.java", + "module m3 { exports org.p1; }\n", + "src/org/p1/T1.java", + "package org.p1;\n" + + "public class T1 {}\n" + }); + IJavaProject unnamed = createJava9Project("unnamed", new String[] { "src" }); + String testSource = "package test;\n" + + "import org.p1.T1;\n" + + "public class Test {\n" + + " T1 t1;\n" + + "}\n"; + createSourceFiles(unnamed, + new String[] { + "src/test/Test.java", + testSource + }); + addModularProjectEntry(unnamed, m1); + addModularProjectEntry(unnamed, m2); + addModularProjectEntry(unnamed, m3); + + getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, null); + IMarker[] markers = unnamed.getProject().findMarkers(null, true, IResource.DEPTH_INFINITE); + assertMarkers("Unexpected markers", + "The import org.p1.T1 cannot be resolved\n" + + "T1 cannot be resolved to a type", + markers); + + char[] sourceChars = testSource.toCharArray(); + this.problemRequestor.initialize(sourceChars); + getCompilationUnit("/unnamed/src/test/Test.java").getWorkingCopy(this.wcOwner, null); + assertProblems( + "Unexpected problems", + "----------\n" + + "1. ERROR in /unnamed/src/test/Test.java (at line 2)\n" + + " import org.p1.T1;\n" + + " ^^^^^^^^^\n" + + "The import org.p1.T1 cannot be resolved\n" + + "----------\n" + + "2. ERROR in /unnamed/src/test/Test.java (at line 4)\n" + + " T1 t1;\n" + + " ^^\n" + + "T1 cannot be resolved to a type\n" + + "----------\n", + this.problemRequestor); + } finally { + deleteProject("m1"); + deleteProject("m2"); + deleteProject("m3"); + deleteProject("unnamed"); + } + } protected void assertNoErrors() throws CoreException { for (IProject p : getWorkspace().getRoot().getProjects()) { int maxSeverity = p.findMaxProblemSeverity(null, true, IResource.DEPTH_INFINITE); diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java index f9f9ba350d..7c37358a0b 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java @@ -300,6 +300,8 @@ ReferenceBinding askForType(PackageBinding packageBinding, char[] name, ModuleBi ReferenceBinding candidate = null; for (NameEnvironmentAnswer answer : answers) { if (answer == null) continue; + if (candidate != null && candidate.problemId() == ProblemReasons.Ambiguous) + return candidate; // saw enough ModuleBinding answerModule = answer.moduleBinding != null ? answer.moduleBinding : this.UnNamedModule; PackageBinding answerPackage = packageBinding; @@ -343,8 +345,6 @@ ReferenceBinding askForType(PackageBinding packageBinding, char[] name, ModuleBi continue; } candidate = combine(candidate, answerPackage.getType0(name), clientModule); - if (candidate != null && candidate.problemId() == ProblemReasons.Ambiguous) - return candidate; // saw enough } return candidate; } |