Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2019-06-07 14:58:30 +0000
committerStephan Herrmann2019-07-02 14:25:31 +0000
commit1fbf13c28311e9090a4ae402b14adbc440f874ec (patch)
tree9a25525de352e1b137729d7186177b0a19878a8b /org.eclipse.jdt.core.tests.compiler
parent5d58390bf2fb018a53c69e075d1416a113301107 (diff)
downloadeclipse.jdt.core-1fbf13c28311e9090a4ae402b14adbc440f874ec.tar.gz
eclipse.jdt.core-1fbf13c28311e9090a4ae402b14adbc440f874ec.tar.xz
eclipse.jdt.core-1fbf13c28311e9090a4ae402b14adbc440f874ec.zip
Bug 547181 - [9][impl] Reconsider representation and lookup of packages
(SplitPackageBinding) - early creation of plain PB into MB.declaredPackages: - from CUS.buildTypeBindins() -> PVS.resolvePackageReference() - includes early application of add-exports - later add all (plain) packages with CUs associated to this module - avoid passing elements of MD.declaredPackages to clients - let MD.analyseReferencedPackages be responsible for error reporting - unify severity determination after bug 521497 - sketch of package scanning for auto modules (may be incomplete) - add a search for inaccessible package/type for better error reporting - when limit-modules present distinguish inaccessible vs. unobservable - improve package scan in ClasspathMultiDirectory - refactoring to avoid some "instanceof SplitPackageBinding" - apply add-reads early, too - throw ISE if reentrance still happens in package lookup (TESTING) - throw ISE if add-reads is applied when packages already exist - remove MB.isPackageLookupActive and related code Refactoring: introduce PlainPackageBinding for more precise typechecking Change-Id: I5f96bc7a487adfff75737a66096598e1c638c4d9
Diffstat (limited to 'org.eclipse.jdt.core.tests.compiler')
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/InMemoryNameEnvironment9.java9
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ModuleCompilationTests.java54
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/PackageBindingTest.java5
3 files changed, 62 insertions, 6 deletions
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/InMemoryNameEnvironment9.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/InMemoryNameEnvironment9.java
index c329fba5f7..8464c36880 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/InMemoryNameEnvironment9.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/InMemoryNameEnvironment9.java
@@ -71,8 +71,13 @@ public class InMemoryNameEnvironment9 extends InMemoryNameEnvironment implements
}
@Override
- public char[][] getModulesDeclaringPackage(char[][] parentPackageName, char[] name, char[] moduleName) {
- return collect(env -> env.getModulesDeclaringPackage(parentPackageName, name, moduleName), char[][]::new);
+ public char[][] getModulesDeclaringPackage(char[][] packageName, char[] moduleName) {
+ return collect(env -> env.getModulesDeclaringPackage(packageName, moduleName), char[][]::new);
+ }
+
+ @Override
+ public char[][] listPackages(char[] moduleName) {
+ return collect(env -> env.listPackages(moduleName), char[][]::new);
}
@Override
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ModuleCompilationTests.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ModuleCompilationTests.java
index cddbcf6388..b69c75b599 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ModuleCompilationTests.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ModuleCompilationTests.java
@@ -1086,8 +1086,8 @@ public class ModuleCompilationTests extends AbstractBatchCompilerTest {
"----------\n" +
"1. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/src/mod.two/q/Y.java (at line 3)\n" +
" java.sql.Connection con = p.X.getConnection();\n" +
- " ^\n" +
- "p cannot be resolved\n" +
+ " ^^^\n" +
+ "The type p.X is not accessible\n" +
"----------\n" +
"1 problem (1 error)\n",
false,
@@ -5393,4 +5393,54 @@ public void testBug521362_emptyFile() {
runConformModuleTest(files, buffer, "Could not invoke method java.lang.module.ModuleDescriptor.Version.parse(), cannot validate module version.\n", "", false);
}
}
+ public void testPackageTypeConflict2() {
+ File outputDirectory = new File(OUTPUT_DIR);
+ Util.flushDirectoryContent(outputDirectory);
+ String out = "bin";
+ String directory = OUTPUT_DIR + File.separator + "src";
+
+ String moduleLoc = directory + File.separator + "mod.one";
+ List<String> files = new ArrayList<>();
+ writeFileCollecting(files, moduleLoc, "module-info.java",
+ "module mod.one { \n" +
+ " exports p1.p2;\n" +
+ "}");
+ writeFileCollecting(files, moduleLoc + File.separator + "p1" + File.separator + "p2", "t3.java",
+ "package p1.p2;\n" +
+ "public class t3 {\n" +
+ "}\n");
+
+ moduleLoc = directory + File.separator + "mod.two";
+ writeFileCollecting(files, moduleLoc, "module-info.java",
+ "module mod.two { \n" +
+ " exports p1.p2.t3;\n" +
+ " requires mod.one;\n" +
+ "}");
+ writeFileCollecting(files, moduleLoc + File.separator + "p1" + File.separator + "p2" + File.separator + "t3", "t4.java",
+ "package p1.p2.t3;\n" +
+ "public class t4 {\n" +
+ "}\n");
+
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("-d " + OUTPUT_DIR + File.separator + out )
+ .append(" -9 ")
+ .append(" -classpath \"")
+ .append(Util.getJavaClassLibsAsString())
+ .append("\" ")
+ .append(" --module-source-path " + "\"" + directory + "\"");
+
+ runNegativeModuleTest(
+ files,
+ buffer,
+ "",
+ "----------\n" +
+ "1. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/src/mod.two/p1/p2/t3/t4.java (at line 1)\n" +
+ " package p1.p2.t3;\n" +
+ " ^^^^^^^^\n" +
+ "The package p1.p2.t3 collides with a type\n" +
+ "----------\n" +
+ "1 problem (1 error)\n",
+ false,
+ "package p1.p2.t3 clashes with class of same name");
+ }
}
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/PackageBindingTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/PackageBindingTest.java
index b8e7a88340..61a6e061d9 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/PackageBindingTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/PackageBindingTest.java
@@ -20,6 +20,7 @@ import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.compiler.lookup.Binding;
import org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
import org.eclipse.jdt.internal.compiler.lookup.PackageBinding;
+import org.eclipse.jdt.internal.compiler.lookup.PlainPackageBinding;
import org.eclipse.jdt.internal.core.INameEnvironmentWithProgress;
public class PackageBindingTest extends AbstractCompilerTest
@@ -36,7 +37,7 @@ public class PackageBindingTest extends AbstractCompilerTest
public void _test01() {
NameEnvironmentDummy nameEnv = new NameEnvironmentDummy(true);
- PackageBinding packageBinding = new PackageBinding(new LookupEnvironment(null, new CompilerOptions(), null, nameEnv));
+ PlainPackageBinding packageBinding = new PlainPackageBinding(new LookupEnvironment(null, new CompilerOptions(), null, nameEnv));
Binding resultBinding = packageBinding.getTypeOrPackage("java.lang".toCharArray(), null, false);
assertNotNull(resultBinding);
@@ -53,7 +54,7 @@ public class PackageBindingTest extends AbstractCompilerTest
NameEnvironmentDummy nameEnv = new NameEnvironmentDummy(false);
LookupEnvironment environment = new LookupEnvironment(null, new CompilerOptions(), null, nameEnv);
- PackageBinding packageBinding = new PackageBinding(environment);
+ PlainPackageBinding packageBinding = new PlainPackageBinding(environment);
Binding resultBinding = packageBinding.getTypeOrPackage("java.lang.String".toCharArray(), environment.module, false);
assertNull(resultBinding); // (not implemented)

Back to the top