3.6.x stream - Fix for 323693
diff --git a/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties b/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties
index bc48f8b..abc3057 100644
--- a/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties
+++ b/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties
@@ -15,7 +15,7 @@
#Format: compiler.name = word1 word2 word3
compiler.name = Eclipse Compiler for Java(TM)
#Format: compiler.version = 0.XXX[, other words (don't forget the comma if adding other words)]
-compiler.version = 0.A65_R36x, 3.6.1
+compiler.version = 0.A66_R36x, 3.6.1
compiler.copyright = Copyright IBM Corp 2000, 2010. All rights reserved.
### progress
diff --git a/buildnotes_jdt-core.html b/buildnotes_jdt-core.html
index eb285db..bdfa2aa 100644
--- a/buildnotes_jdt-core.html
+++ b/buildnotes_jdt-core.html
@@ -40,11 +40,24 @@
</td>
</tr>
</table>
+<a name="v_A66_R36x"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6.1 - %date% - 3.6.1
+<br>Project org.eclipse.jdt.core v_A66_R36x
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A66_R36x">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323693">323693</a>
+[1.5][compiler] Compiler fails to diagnose name clash
+
<a name="v_A65_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
-Eclipse SDK 3.6.1 - August 25, 2010 - 3.6.1
+Eclipse SDK 3.6.1 - August 25, 2010
<br>Project org.eclipse.jdt.core v_A65_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A65_R36x">cvs</a>).
<h2>What's new in this drop</h2>
diff --git a/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java b/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
index 43608f9..e7dd1db 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
@@ -152,25 +152,9 @@
MethodBinding bridge = this.type.addSyntheticBridgeMethod(originalInherited, currentMethod.original());
if (bridge != null) {
- /* https://bugs.eclipse.org/bugs/show_bug.cgi?id=322001. We used to unconditionally check here
- for name clashes between the overridden inherited method and all other "non-matching"
- inherited methods with the same method selector here.
-
- This makes no sense when the current type is concrete as the overridden method has been
- effectively replaced and is hidden in the current class and cannot contribute to a clash.
- The overriding method or the bridge may collide with an inherited method, but that is being
- checked elsewhere.
-
- As a matter of fact, this is true even for abstract types, but we do retain the name clash
- check for abstract types here for compatibility with javac.
-
- See also https://bugs.eclipse.org/bugs/show_bug.cgi?id=293615 for a very similar issue.
- */
- if (this.type.isAbstract()) {
- for (int i = 0, l = allInheritedMethods == null ? 0 : allInheritedMethods.length; i < l; i++) {
- if (allInheritedMethods[i] != null && detectInheritedNameClash(originalInherited, allInheritedMethods[i].original()))
- return;
- }
+ for (int i = 0, l = allInheritedMethods == null ? 0 : allInheritedMethods.length; i < l; i++) {
+ if (allInheritedMethods[i] != null && detectInheritedNameClash(originalInherited, allInheritedMethods[i].original()))
+ return;
}
// See if the new bridge clashes with any of the user methods of the class. For this check
// we should check for "method descriptor clash" and not just "method signature clash". Really
@@ -633,6 +617,12 @@
boolean detectInheritedNameClash(MethodBinding inherited, MethodBinding otherInherited) {
if (!inherited.areParameterErasuresEqual(otherInherited))
return false;
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=322001
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=323693
+ // When reporting a name clash between two inherited methods, we should not look for a
+ // signature clash, but instead should be looking for method descriptor clash.
+ if (inherited.returnType.erasure() != otherInherited.returnType.erasure())
+ return false;
// skip it if otherInherited is defined by a subtype of inherited's declaringClass or vice versa.
// avoid being order sensitive and check with the roles reversed also.
if (inherited.declaringClass.erasure() != otherInherited.declaringClass.erasure()) {
diff --git a/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java b/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
index 216619a..a598b14 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
@@ -517,16 +517,6 @@
if (CharOperation.equals(inheritedMethodToBridge.selector, method.selector)
&& inheritedMethodToBridge.returnType.erasure() == method.returnType.erasure()
&& inheritedMethodToBridge.areParameterErasuresEqual(method)) {
- SyntheticMethodBinding olderBridge = getSyntheticBridgeMethod(method);
- MethodBinding olderTarget;
- if (olderBridge == null || ((olderTarget = olderBridge.targetMethod) == null)) {
- return null;
- }
- if (olderTarget.returnType.erasure() != targetMethod.returnType.erasure()
- || !olderTarget.areParameterErasuresEqual(targetMethod)) {
- // https://bugs.eclipse.org/bugs/show_bug.cgi?id=83162
- this.scope.problemReporter().inheritedMethodsHaveNameClash(this, method, inheritedMethodToBridge);
- }
return null;
}
}