### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: search/org/eclipse/jdt/internal/core/search/matching/MethodLocator.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MethodLocator.java,v retrieving revision 1.77 diff -u -r1.77 MethodLocator.java --- search/org/eclipse/jdt/internal/core/search/matching/MethodLocator.java 6 Nov 2007 11:07:49 -0000 1.77 +++ search/org/eclipse/jdt/internal/core/search/matching/MethodLocator.java 8 Nov 2007 12:30:14 -0000 @@ -635,7 +635,7 @@ if (method.declaringClass == null || this.allSuperDeclaringTypeNames == null) { declaringLevel = INACCURATE_MATCH; } else { - if (resolveLevelAsSuperInvocation(methodReceiverType)) { + if (resolveLevelAsSuperInvocation(methodReceiverType, method.parameters)) { declaringLevel = methodLevel // since this is an ACCURATE_MATCH so return the possibly weaker match | SUPER_INVOCATION_FLAVOR; // this is an overridden method => add flavor to returned level } @@ -723,7 +723,7 @@ * Return whether the given type binding or one of its possible super interfaces * matches a type in the declaring type names hierarchy. */ -protected boolean resolveLevelAsSuperInvocation(ReferenceBinding type) { +protected boolean resolveLevelAsSuperInvocation(ReferenceBinding type, TypeBinding[] argumentTypes) { char[][] compoundName = type.compoundName; for (int i = 0, max = this.allSuperDeclaringTypeNames.length; i < max; i++) { if (CharOperation.equals(this.allSuperDeclaringTypeNames[i], compoundName)) { @@ -736,8 +736,25 @@ ReferenceBinding[] interfaces = type.superInterfaces(); if (interfaces == null) return false; for (int i = 0; i < interfaces.length; i++) { - if (resolveLevelAsSuperInvocation(interfaces[i])) { - return true; + // need to verify if method may be overridden + MethodBinding[] methods = interfaces[i].getMethods(this.pattern.selector); + for (int j=0, length=methods.length; j