View | Details | Raw Unified | Return to bug 156491 | Differences between
and this patch

Collapse All | Expand All

(-)search/org/eclipse/jdt/internal/core/search/matching/MethodLocator.java (-4 / +5 lines)
Lines 621-633 Link Here
621
	if (qualifiedPattern == null) return methodLevel; // since any declaring class will do
621
	if (qualifiedPattern == null) return methodLevel; // since any declaring class will do
622
622
623
	int declaringLevel;
623
	int declaringLevel;
624
	if (isVirtualInvoke(method, messageSend) && !(messageSend.actualReceiverType instanceof ArrayBinding)) {
624
	if (isVirtualInvoke(method, messageSend) && (messageSend.actualReceiverType instanceof ReferenceBinding)) {
625
		declaringLevel = resolveLevelAsSubtype(qualifiedPattern, method.declaringClass);
625
		ReferenceBinding methodReceiverType = (ReferenceBinding) messageSend.actualReceiverType;
626
		declaringLevel = resolveLevelAsSubtype(qualifiedPattern, methodReceiverType);
626
		if (declaringLevel == IMPOSSIBLE_MATCH) {
627
		if (declaringLevel == IMPOSSIBLE_MATCH) {
627
			if (method.declaringClass == null || this.allSuperDeclaringTypeNames == null) {
628
			if (this.allSuperDeclaringTypeNames == null) {
628
				declaringLevel = INACCURATE_MATCH;
629
				declaringLevel = INACCURATE_MATCH;
629
			} else {
630
			} else {
630
				char[][] compoundName = method.declaringClass.compoundName;
631
				char[][] compoundName = methodReceiverType.compoundName;
631
				for (int i = 0, max = this.allSuperDeclaringTypeNames.length; i < max; i++)
632
				for (int i = 0, max = this.allSuperDeclaringTypeNames.length; i < max; i++)
632
					if (CharOperation.equals(this.allSuperDeclaringTypeNames[i], compoundName))
633
					if (CharOperation.equals(this.allSuperDeclaringTypeNames[i], compoundName))
633
						return methodLevel; // since this is an ACCURATE_MATCH so return the possibly weaker match
634
						return methodLevel; // since this is an ACCURATE_MATCH so return the possibly weaker match

Return to bug 156491