Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2018-11-15 22:12:32 +0000
committerStephan Herrmann2018-11-15 22:12:32 +0000
commit4ca6ea52439bbf09da333dd0c955ea1b885c2b9d (patch)
treeb940a756377a2304fa03a406a5b80d56d469dc69
parentdd3a278b906114fedcdb46af8aca43eac75b3bfe (diff)
downloadeclipse.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
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java75
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java4
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;
}

Back to the top