### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: model/org/eclipse/jdt/internal/core/BinaryMethod.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryMethod.java,v retrieving revision 1.107 diff -u -r1.107 BinaryMethod.java --- model/org/eclipse/jdt/internal/core/BinaryMethod.java 7 Sep 2010 03:17:29 -0000 1.107 +++ model/org/eclipse/jdt/internal/core/BinaryMethod.java 25 Nov 2010 04:16:09 -0000 @@ -28,10 +28,12 @@ /* package */ class BinaryMethod extends BinaryMember implements IMethod { /** * The parameter type signatures of the method - stored locally - * to perform equality test. null indicates no + * to perform equality test. CharOperation.NO_STRINGS indicates no * parameters. */ protected String[] parameterTypes; + protected String [] erasedParamaterTypes; // lazily initialized via call to getErasedParameterTypes + /** * The parameter names for the method. */ @@ -52,7 +54,7 @@ } public boolean equals(Object o) { if (!(o instanceof BinaryMethod)) return false; - return super.equals(o) && Util.equalArraysOrNull(this.parameterTypes, ((BinaryMethod)o).parameterTypes); + return super.equals(o) && Util.equalArraysOrNull(getErasedParameterTypes(), ((BinaryMethod)o).getErasedParameterTypes()); } public IAnnotation[] getAnnotations() throws JavaModelException { IBinaryMethod info = (IBinaryMethod) getElementInfo(); @@ -372,6 +374,29 @@ return this.parameterTypes; } +// https://bugs.eclipse.org/bugs/show_bug.cgi?id=299384 +private String [] getErasedParameterTypes() { + if (this.erasedParamaterTypes == null) { + int paramCount = this.parameterTypes.length; + String [] erasedTypes = new String [paramCount]; + boolean erasureNeeded = false; + for (int i = 0; i < paramCount; i++) { + String parameterType = this.parameterTypes[i]; + if (parameterType.indexOf(Signature.C_GENERIC_START, 0) >= 0) { + erasedTypes[i] = new String(Signature.getTypeErasure(parameterType.toCharArray())); + erasureNeeded = true; + } else { + erasedTypes[i] = parameterType; + } + } + this.erasedParamaterTypes = erasureNeeded ? erasedTypes : this.parameterTypes; + } + return this.erasedParamaterTypes; +} +private String getErasedParameterType(int index) { + return getErasedParameterTypes()[index]; +} + public ITypeParameter getTypeParameter(String typeParameterName) { return new TypeParameter(this, typeParameterName); } @@ -446,7 +471,7 @@ public int hashCode() { int hash = super.hashCode(); for (int i = 0, length = this.parameterTypes.length; i < length; i++) { - hash = Util.combineHashCodes(hash, this.parameterTypes[i].hashCode()); + hash = Util.combineHashCodes(hash, getErasedParameterType(i).hashCode()); } return hash; } #P org.eclipse.jdt.core.tests.model Index: src/org/eclipse/jdt/core/tests/model/ResolveTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ResolveTests.java,v retrieving revision 1.95 diff -u -r1.95 ResolveTests.java --- src/org/eclipse/jdt/core/tests/model/ResolveTests.java 19 Nov 2010 14:21:59 -0000 1.95 +++ src/org/eclipse/jdt/core/tests/model/ResolveTests.java 25 Nov 2010 04:16:11 -0000 @@ -2610,7 +2610,7 @@ ); } // https://bugs.eclipse.org/bugs/show_bug.cgi?id=299384 -public void _testCodeSelectInHybrid1415Projects() throws CoreException, IOException { +public void testCodeSelectInHybrid1415Projects() throws CoreException, IOException { String jarName = "bug299384.jar"; String srcName = "bug299384_src.zip"; try { @@ -2641,7 +2641,7 @@ assertElementsEqual( "Unexpected elements", - "TestSuite(java.lang.Class) [in TestSuite [in TestSuite.class [in [in bug299384.jar [in Resolve]]]]]", + "TestSuite(java.lang.Class) [in TestSuite [in TestSuite.class [in [in bug299384.jar [in Resolve]]]]]", elements ); } finally {