diff options
author | Stephan Herrmann | 2019-06-07 14:58:30 +0000 |
---|---|---|
committer | Stephan Herrmann | 2019-07-02 14:25:31 +0000 |
commit | 1fbf13c28311e9090a4ae402b14adbc440f874ec (patch) | |
tree | 9a25525de352e1b137729d7186177b0a19878a8b /org.eclipse.jdt.core.tests.compiler | |
parent | 5d58390bf2fb018a53c69e075d1416a113301107 (diff) | |
download | eclipse.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')
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) |