diff options
author | Stephan Herrmann | 2019-01-20 19:09:53 +0000 |
---|---|---|
committer | Stephan Herrmann | 2019-01-20 19:43:13 +0000 |
commit | 6e564d275036df6ddbdc74eed6e8e0bd0751ed8a (patch) | |
tree | 87bc9e340f9353c1bc5047e37235001adb6c1aa6 | |
parent | 643df412a50038ccac812ead22e7f91bbd7899e5 (diff) | |
download | eclipse.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>
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()); |