diff options
author | Stephan Herrmann | 2019-02-12 23:09:45 +0000 |
---|---|---|
committer | Stephan Herrmann | 2019-02-12 23:09:45 +0000 |
commit | 7411c5d64b4f841347cb94c0ae326a6cb0df5581 (patch) | |
tree | 8a75db4098fd7a05e1984eec61376d92623ff405 | |
parent | c0a450d6d478972de7ffb4ec43ebd4a908dfbbbc (diff) | |
download | eclipse.jdt.core-7411c5d64b4f841347cb94c0ae326a6cb0df5581.tar.gz eclipse.jdt.core-7411c5d64b4f841347cb94c0ae326a6cb0df5581.tar.xz eclipse.jdt.core-7411c5d64b4f841347cb94c0ae326a6cb0df5581.zip |
not accessable."
Change-Id: I8f395c4ccb270c7c86d2016761221095f1d94dec
Signed-off-by: Stephan Herrmann <stephan.herrmann@berlin.de>
4 files changed, 96 insertions, 10 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java index 755fbfc24a..df6e565b35 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java @@ -620,6 +620,15 @@ public abstract class AbstractJavaModelTests extends SuiteOfTestCases { exported); addClasspathEntry(project, entry); } + + protected void addModularProjectEntry(IJavaProject project, IJavaProject depProject) throws JavaModelException { + addClasspathEntry(project, newModularProjectEntry(depProject)); + } + + protected IClasspathEntry newModularProjectEntry(IJavaProject depProject) { + return JavaCore.newProjectEntry(depProject.getPath(), null, false, moduleAttribute(), false); + } + protected void assertSortedElementsEqual(String message, String expected, IJavaElement[] elements) { sortElements(elements); assertElementsEqual(message, expected, elements); 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 8242823b45..725f615ff1 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 @@ -41,7 +41,6 @@ import org.eclipse.jdt.core.IModuleDescription; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.IProblemRequestor; import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.WorkingCopyOwner; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.CompilationUnit; @@ -103,12 +102,6 @@ public class ModuleBuilderTests extends ModifyingResourceTests { deleteProject("P1"); } - void addModularProjectEntry(IJavaProject project, IJavaProject depProject) throws JavaModelException { - addClasspathEntry(project, newModularProjectEntry(depProject)); - } - IClasspathEntry newModularProjectEntry(IJavaProject depProject) { - return JavaCore.newProjectEntry(depProject.getPath(), null, false, moduleAttribute(), false); - } // Test that the java.base found as a module package fragment root in the project public void test001() throws CoreException { try { diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java index 16166b5a8d..7c7f99d85c 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java @@ -570,4 +570,83 @@ public void testBug543092b() throws Exception { deleteProject(p); } } +public void testBug544017() throws CoreException { + if (!isJRE9) { + System.err.println("Test "+getName()+" requires a JRE 9"); + return; + } + IJavaProject testa = createJava9Project("testa"); + IJavaProject testb = createJava9Project("testb"); + IJavaProject testmain = createJava9Project("testmain"); + try { + createFolder("testb/src/com/example/sub/b"); + createFile("testb/src/com/example/sub/b/B.java", + "package com.example.sub.b;\n" + + "public class B {\n" + + " public static void main(String[] args) {\n" + + " System.out.println(\"B\");\n" + + " }\n" + + "}\n"); + createFile("testb/src/module-info.java", + "open module com.example.sub.b {\n" + + " exports com.example.sub.b;\n" + + "}\n"); + + addModularProjectEntry(testa, testb); + createFolder("testa/src/com/example/sub/a"); + createFile("testa/src/com/example/sub/a/A.java", + "package com.example.sub.a;\n" + + "public class A {\n" + + " public static void main(String[] args) {\n" + + " System.out.println(\"A\");\n" + + " }\n" + + "}\n"); + createFile("testa/src/module-info.java", + "open module com.example.sub.a {\n" + + " exports com.example.sub.a;\n" + + " requires com.example.sub.b;\n" + + "}\n"); + + addModularProjectEntry(testmain, testa); + addModularProjectEntry(testmain, testb); + createFolder("testmain/src/com/example"); + createFile("testmain/src/module-info.java", + "open module com.example {\n" + + " requires com.example.sub.a;\n" + + " requires com.example.sub.b;\n" + + "}\n"); + String pathExample = "testmain/src/com/example/Example.java"; + String sourceExample = + "package com.example;\n" + + "import com.example.sub.a.A;\n" + + "import com.example.sub.b.B;\n" + + "\n" + + "public class Example {\n" + + " public static void main(String[] args) {\n" + + " A.main(null);\n" + + " B.main(null);\n" + + " }\n" + + "}\n"; + createFile(pathExample, sourceExample); + + getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, null); + IMarker[] markers = testmain.getProject().findMarkers(null, true, IResource.DEPTH_INFINITE); + assertMarkers("markers in testmain", + "", + markers); + + ICompilationUnit wc = getCompilationUnit(pathExample).getWorkingCopy(this.wcOwner, null); + wc.getBuffer().append(" "); + this.problemRequestor.initialize((sourceExample+" ").toCharArray()); + wc.reconcile(AST_INTERNAL_JLS11, true, this.wcOwner, null); + assertProblems("Expecting no problems", + "----------\n" + + "----------\n", + this.problemRequestor); + } finally { + deleteProject(testa); + deleteProject(testb); + deleteProject(testmain); + } +} } diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java index 44235199f0..32df973735 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java @@ -513,7 +513,7 @@ public class ModuleBinding extends Binding implements IUpdatableModule { // remember: if (binding != null) { this.environment.knownPackages.put(name, binding); - binding = addPackage(binding, false); + binding = addPackage(binding, false); // no further lookup needed, binding is already complete (split?) } else { this.environment.knownPackages.put(name, LookupEnvironment.TheNotFoundPackage); } @@ -595,6 +595,8 @@ public class ModuleBinding extends Binding implements IUpdatableModule { // enrich with split-siblings from visible modules: if (considerRequiredModules) { + if (parent != null && binding != null) + parent.addPackage(binding, this); // preliminarily add to avoid creating duplicates, will be updated below binding = combineWithPackagesFromOtherRelevantModules(binding, subPkgCompoundName, declaringModuleNames); } if (binding == null || !binding.isValidBinding()) { @@ -607,10 +609,13 @@ public class ModuleBinding extends Binding implements IUpdatableModule { return null; } // remember - if (parentName.length == 0) + if (parentName.length == 0) { binding.environment.knownPackages.put(name, binding); - else if (parent != null) + } else if (parent != null) { binding = parent.addPackage(binding, this); + } + if (packageMayBeIncomplete) + return binding; return addPackage(binding, false); } |