@Override public int compare(MethodBinding first, MethodBinding second) { boolean firstParamsAssignableFromSecond = first.areParametersCompatibleWith( second.parameters ); boolean secondParamsAssignableFromFirst = second.areParametersCompatibleWith( first.parameters ); if ( firstParamsAssignableFromSecond != secondParamsAssignableFromFirst ) { return firstParamsAssignableFromSecond ? 1 : -1; } if ( TypeBinding.equalsEquals( first.returnType, second.returnType ) ) { return 0; } boolean firstReturnTypeAssignableFromSecond = second.returnType.isCompatibleWith( first.returnType ); return firstReturnTypeAssignableFromSecond ? 1 : -1; } }
protected final MethodBinding mostSpecificInterfaceMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificInterfaceMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificInterfaceMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificInterfaceMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificInterfaceMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificInterfaceMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificInterfaceMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificInterfaceMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificInterfaceMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificInterfaceMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificInterfaceMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificClassMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { MethodBinding previous = null; nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; if (previous != null && method.declaringClass != previous.declaringClass) break; // cannot answer a method farther up the hierarchy than the first method found if (!method.isStatic()) previous = method; // no ambiguity for static methods for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificClassMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { MethodBinding previous = null; nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; if (previous != null && method.declaringClass != previous.declaringClass) break; // cannot answer a method farther up the hierarchy than the first method found if (!method.isStatic()) previous = method; // no ambiguity for static methods for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificClassMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { MethodBinding previous = null; nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; if (previous != null && TypeBinding.notEquals(method.declaringClass, previous.declaringClass)) break; // cannot answer a method farther up the hierarchy than the first method found if (!method.isStatic()) previous = method; // no ambiguity for static methods for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificClassMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { MethodBinding previous = null; nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; if (previous != null && TypeBinding.notEquals(method.declaringClass, previous.declaringClass)) break; // cannot answer a method farther up the hierarchy than the first method found if (!method.isStatic()) previous = method; // no ambiguity for static methods for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificClassMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { MethodBinding previous = null; nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; if (previous != null && TypeBinding.notEquals(method.declaringClass, previous.declaringClass)) break; // cannot answer a method farther up the hierarchy than the first method found if (!method.isStatic()) previous = method; // no ambiguity for static methods for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificClassMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { MethodBinding previous = null; nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; if (previous != null && TypeBinding.notEquals(method.declaringClass, previous.declaringClass)) break; // cannot answer a method farther up the hierarchy than the first method found if (!method.isStatic()) previous = method; // no ambiguity for static methods for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificClassMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { MethodBinding previous = null; nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; if (previous != null && TypeBinding.notEquals(method.declaringClass, previous.declaringClass)) break; // cannot answer a method farther up the hierarchy than the first method found if (!method.isStatic()) previous = method; // no ambiguity for static methods for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }
protected final MethodBinding mostSpecificClassMethodBinding(MethodBinding[] visible, int visibleSize, InvocationSite invocationSite) { MethodBinding previous = null; nextVisible : for (int i = 0; i < visibleSize; i++) { MethodBinding method = visible[i]; if (previous != null && TypeBinding.notEquals(method.declaringClass, previous.declaringClass)) break; // cannot answer a method farther up the hierarchy than the first method found if (!method.isStatic()) previous = method; // no ambiguity for static methods for (int j = 0; j < visibleSize; j++) { if (i == j) continue; if (!visible[j].areParametersCompatibleWith(method.parameters)) continue nextVisible; } compilationUnitScope().recordTypeReferences(method.thrownExceptions); return method; } return new ProblemMethodBinding(visible[0], visible[0].selector, visible[0].parameters, ProblemReasons.Ambiguous); }