diff options
author | Stephan Herrmann | 2019-02-14 20:26:06 +0000 |
---|---|---|
committer | Stephan Herrmann | 2019-02-14 20:26:06 +0000 |
commit | 46390363cfd3003b683a7a4fcf6b40da4f877f1d (patch) | |
tree | da9f4bdfdf3cd5df37242144b54ed2e222e27065 | |
parent | f6fff1a722a8bd4870014d160c0fef71185b719b (diff) | |
download | eclipse.jdt.core-I20190214-1800.tar.gz eclipse.jdt.core-I20190214-1800.tar.xz eclipse.jdt.core-I20190214-1800.zip |
Bug 544432 - [9] Eclipse compiler error "The type com.a.A is notI20190217-0600I20190216-1800I20190216-0600I20190215-1800I20190215-0630I20190215-0055I20190214-1800
accessible" while javac works
Change-Id: I9b0985187b14356aef6300312265793343a1e812
Signed-off-by: Stephan Herrmann <stephan.herrmann@berlin.de>
2 files changed, 57 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 725f615ff1..b80de70c73 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 @@ -7992,6 +7992,53 @@ public class ModuleBuilderTests extends ModifyingResourceTests { Util.flushDirectoryContent(outputDir); } } + + public void testBug544432() throws CoreException { + IJavaProject prjA = createJava9Project("A"); + IJavaProject prjB = createJava9Project("B"); + try { + createFolder("A/src/com/a"); + createFile("A/src/com/a/A.java", + "package com.a;\n" + + "\n" + + "public class A {}\n"); + createFile("A/src/module-info.java", + "open module com.a {\n" + + " exports com.a;\n" + + "}\n"); + + addModularProjectEntry(prjB, prjA); + createFolder("B/src/com/a/b"); + String bPath = "B/src/com/a/b/B.java"; + String bSource = + "package com.a.b;\n" + + "import com.a.A;\n" + + "public class B {\n" + + " \n" + + " public static void main(String[] args) {\n" + + " A a = new A();\n" + + " System.out.println(a);\n" + + " }\n" + + "}\n"; + createFile(bPath, bSource); + createFile("B/src/module-info.java", + "open module com.a.b {\n" + + " requires com.a;\n" + + "}\n"); + getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, null); + assertNoErrors(); + + this.problemRequestor.initialize(bSource.toCharArray()); + getCompilationUnit(bPath).getWorkingCopy(this.wcOwner, null); + assertProblems("unexpected problems", + "----------\n" + + "----------\n", + this.problemRequestor); + } finally { + deleteProject(prjA); + deleteProject(prjB); + } + } 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/ModuleBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java index 32df973735..3b31a807a4 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 @@ -564,8 +564,16 @@ public class ModuleBinding extends Binding implements IUpdatableModule { declaringModuleNames = moduleEnv.getUniqueModulesDeclaringPackage(parentName, name, nameForLookup()); if (declaringModuleNames != null) { if (CharOperation.containsEqual(declaringModuleNames, this.moduleName)) { - // declared here, not yet known, so create it now: - binding = new PackageBinding(subPkgCompoundName, parent, this.environment, this); + if (parent instanceof SplitPackageBinding) { + // parent.getPackage0() may have been too shy, so drill into the split: + PackageBinding singleParent = ((SplitPackageBinding) parent).getIncarnation(this); + if (singleParent != null) + binding = singleParent.getPackage0(name); + } + if (binding == null) { + // declared here, not yet known, so create it now: + binding = new PackageBinding(subPkgCompoundName, parent, this.environment, this); + } } else if (considerRequiredModules) { // visible but foreign (when current is unnamed or auto): for (char[] declaringModuleName : declaringModuleNames) { |