Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2019-01-20 19:09:53 +0000
committerStephan Herrmann2019-01-20 19:43:13 +0000
commit6e564d275036df6ddbdc74eed6e8e0bd0751ed8a (patch)
tree87bc9e340f9353c1bc5047e37235001adb6c1aa6
parent643df412a50038ccac812ead22e7f91bbd7899e5 (diff)
downloadeclipse.jdt.core-6e564d275036df6ddbdc74eed6e8e0bd0751ed8a.tar.gz
eclipse.jdt.core-6e564d275036df6ddbdc74eed6e8e0bd0751ed8a.tar.xz
eclipse.jdt.core-6e564d275036df6ddbdc74eed6e8e0bd0751ed8a.zip
Bug 543195 - NPE when running unit test via "Run As" on project orI20190121-1800I20190121-1415I20190120-1800
source folder Change-Id: Icf67cac8af038f33358a968884a076539b784f4a Signed-off-by: Stephan Herrmann <stephan.herrmann@berlin.de>
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java77
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java3
2 files changed, 79 insertions, 1 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 cecea2825e..5b27b3fb5e 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
@@ -7634,6 +7634,83 @@ public class ModuleBuilderTests extends ModifyingResourceTests {
deleteProject(test);
}
}
+ public void testBug543195() throws CoreException {
+ IJavaProject pj1 = createJava9Project("p1");
+ IJavaProject pj2 = createJava9Project("p2");
+ IJavaProject ptest = createJava9Project("ptest");
+ try {
+ addModularProjectEntry(pj2, pj1);
+ addModularProjectEntry(ptest, pj2);
+
+ createFolder("p1/src/p");
+ createFile("p1/src/p/Missing.java",
+ "package p;\n" +
+ "public class Missing {\n" +
+ " public void miss() {}\n" +
+ "}\n");
+ createFile("p1/src/module-info.java",
+ "module p1 {\n" +
+ " exports p;\n" +
+ "}\n");
+
+ createFolder("p2/src/q");
+ createFile("p2/src/q/API.java",
+ "package q;\n" +
+ "public class API extends p.Missing {}\n");
+ createFile("p2/src/q/API2.java",
+ "package q;\n" +
+ "public class API2 extends API {}\n");
+ createFile("p2/src/module-info.java",
+ "module p2 {\n" +
+ " requires p1;\n" +
+ " exports q;\n" +
+ "}\n");
+ getWorkspace().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, null);
+
+ deleteFile("p1/bin/p/Missing.class");
+ pj1.getProject().close(null);
+
+ createFolder("ptest/src/p/r");
+ createFile("ptest/src/p/r/P.java", "package p.r;\n public class P {}\n");
+ createFolder("ptest/src/t");
+ createFile("ptest/src/t/Test1.java",
+ "package t;\n" +
+ "import q.API2;\n" +
+ "public class Test1 {\n" +
+ " void m(API2 a) {\n" +
+ " a.miss();\n" +
+ " }\n" +
+ "}\n");
+ String test2Path = "ptest/src/t/Test2.java";
+ String test2Content =
+ "package t;\n" +
+ "import p.Missing;\n" +
+ "public class Test2 {}\n";
+ createFile(test2Path, test2Content);
+ ptest.getProject().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, null);
+ IMarker[] markers = ptest.getProject().findMarkers(null, true, IResource.DEPTH_INFINITE);
+ sortMarkers(markers);
+ assertMarkers("unexpected markers",
+ "The import p.Missing cannot be resolved\n" +
+ "The method miss() is undefined for the type API2",
+ markers);
+
+ this.problemRequestor.initialize(test2Content.toCharArray());
+ getCompilationUnit(test2Path).getWorkingCopy(this.wcOwner, null);
+ assertProblems("unexpected problems",
+ "----------\n" +
+ "1. ERROR in /ptest/src/t/Test2.java (at line 2)\n" +
+ " import p.Missing;\n" +
+ " ^^^^^^^^^\n" +
+ "The import p.Missing cannot be resolved\n" +
+ "----------\n",
+ this.problemRequestor);
+ } finally {
+ deleteProject(pj1);
+ deleteProject(pj2);
+ deleteProject(ptest);
+ }
+ }
protected void assertNoErrors() throws CoreException {
for (IProject p : getWorkspace().getRoot().getProjects()) {
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 e06463c6b8..27a8af6ed1 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
@@ -408,7 +408,8 @@ private static NameEnvironmentAnswer fromSplitPackageOrOracle(IModuleAwareNameEn
if (binding != null && binding.isValidBinding()) {
if (binding instanceof UnresolvedReferenceBinding)
binding = ((UnresolvedReferenceBinding) binding).resolve(module.environment, false);
- return new NameEnvironmentAnswer(binding, module);
+ if (binding.isValidBinding())
+ return new NameEnvironmentAnswer(binding, module);
}
}
return moduleEnv.findType(name, packageBinding.compoundName, module.nameForLookup());

Back to the top