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;
 				}
 			}