diff options
author | Stephan Herrmann | 2018-04-22 14:03:28 +0000 |
---|---|---|
committer | Stephan Herrmann | 2018-04-22 21:29:22 +0000 |
commit | 235a3d96bce67e31626ffca69b9b34eaacd105d9 (patch) | |
tree | 3790f881fe704a39b85819a67bc0d485fd93cd4f | |
parent | 5f9e19120475da127f861041f430cef1eacbf048 (diff) | |
download | eclipse.jdt.core-235a3d96bce67e31626ffca69b9b34eaacd105d9.tar.gz eclipse.jdt.core-235a3d96bce67e31626ffca69b9b34eaacd105d9.tar.xz eclipse.jdt.core-235a3d96bce67e31626ffca69b9b34eaacd105d9.zip |
Bug 533644 - JDK10: Incorrect Name clash errorI20180422-2000
Change-Id: I1742895bf1088ced5d70f24cab0e1641e3542bdd
2 files changed, 61 insertions, 4 deletions
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_9.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_9.java index 1054dd2bd4..51058691a2 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_9.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_9.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2017 IBM Corporation. + * Copyright (c) 2016, 2018 IBM Corporation. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -620,6 +620,53 @@ public void testBug521815b() { "The import a.b.X.Inner is never used\n" + "----------\n"); } +public void testBug533644() { + runConformTest( + new String[] { + "q/JobDetail.java", + "package q;\n" + + "import java.io.Serializable;\n" + + "public interface JobDetail extends Serializable, Cloneable { }\n", + "q/Scheduler.java", + "package q;\n" + + "import java.util.Map;\n" + + "import java.util.Set;\n" + + "public interface Scheduler {\n" + + " void scheduleJobs(Map<JobDetail, Set<? extends Trigger>> triggersAndJobs, boolean replace) throws SchedulerException;\n" + + "}\n", + "q/SchedulerException.java", + "package q;\n" + + "public class SchedulerException extends Exception {\n" + + " private static final long serialVersionUID = 174841398690789156L;\n" + + "}\n", + "q/Trigger.java", + "package q;\n" + + "import java.io.Serializable;\n" + + "public interface Trigger extends Serializable, Cloneable, Comparable<Trigger> {\n" + + " public static final long serialVersionUID = -3904243490805975570L;\n" + + "}\n" + }); + Runner runner = new Runner(); + runner.shouldFlushOutputDirectory = false; + runner.testFiles = new String[] { + "ForwardingScheduler.java", + "import java.util.Map;\n" + + "import java.util.Set;\n" + + "\n" + + "import q.JobDetail;\n" + + "import q.Scheduler;\n" + + "import q.SchedulerException;\n" + + "import q.Trigger;\n" + + "\n" + + "public class ForwardingScheduler implements Scheduler {\n" + + " @Override\n" + + " public void scheduleJobs(Map<JobDetail, Set<? extends Trigger>> triggersAndJobs, boolean replace)\n" + + " throws SchedulerException {\n" + + " }\n" + + "}\n" + }; + runner.runConformTest(); +} public static Class<GenericsRegressionTest_9> testClass() { return GenericsRegressionTest_9.class; } 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 307e13a3e5..27e8107fb9 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 @@ -773,9 +773,19 @@ private PackageBinding computePackageFrom(char[][] constantPoolName, boolean isM } } if (packageBinding instanceof SplitPackageBinding) { - PackageBinding incarnation = ((SplitPackageBinding) packageBinding).getIncarnation(this.module); - if (incarnation != null) - packageBinding = incarnation; + PackageBinding candidate = null; + // select from incarnations the unique package containing CUs, if any: + for (PackageBinding incarnation : ((SplitPackageBinding) packageBinding).incarnations) { + if (incarnation.hasCompilationUnit(false)) { + if (candidate != null) { + candidate = null; + break; // likely to report "accessible from more than one module" downstream + } + candidate = incarnation; + } + } + if (candidate != null) + return candidate; } return packageBinding; } |