problemMethod = (ProblemMethodBinding) method;
ParameterizedGenericMethodBinding substitutedMethod = (ParameterizedGenericMethodBinding) problemMethod.closestMatch;
shownMethod = substitutedMethod.original();
int augmentedLength = problemMethod.parameters.length;
TypeBinding inferredTypeArgument = problemMethod.parameters[augmentedLength-2];
TypeVariableBinding typeParameter = (TypeVariableBinding) problemMethod.parameters[augmentedLength-1];
TypeBinding[] invocationArguments = new TypeBinding[augmentedLength-2]; // remove extra info from the end
System.arraycopy(problemMethod.parameters, 0, invocationArguments, 0, augmentedLength-2);
this.handle(
IProblem.GenericMethodTypeArgumentMismatch,
new String[] {
new String(shownMethod.selector),
typesAsString(shownMethod, false),
new String(shownMethod.declaringClass.readableName()),
typesAsString(invocationArguments, false),
new String(inferredTypeArgument.readableName()),
new String(typeParameter.sourceName()),
parameterBoundAsString(typeParameter, false) },
new String[] {
new String(shownMethod.selector),
typesAsString(shownMethod, true),
new String(shownMethod.declaringClass.shortReadableName()),
typesAsString(invocationArguments, true),
new String(inferredTypeArgument.shortReadableName()),
new String(typeParameter.sourceName()),
parameterBoundAsString(typeParameter, true) },
(int) (messageSend.nameSourcePosition >>> 32),
(int) messageSend.nameSourcePosition);
return;
case ProblemReasons.TypeParameterArityMismatch :