String[] arg= new String[] { getMethodSignature(methodDecl, isDifferentCU), getTypeNames(changeTypes) };
String[] arg= new String[] { ASTResolving.getMethodSignature(methodDecl, isDifferentCU), getTypeNames(changeTypes) };
	private static void doMoreArguments(IInvocationContext context, IProblemLocation problem, ASTNode invocationNode, List arguments, ITypeBinding[] argTypes, IMethodBinding methodRef, Collection proposals) throws CoreException {		ITypeBinding[] paramTypes= methodRef.getParameterTypes();		int k= 0, nSkipped= 0;		int diff= argTypes.length - paramTypes.length;		int[] indexSkipped= new int[diff];		for (int i= 0; i < argTypes.length; i++) {			if (k < paramTypes.length && TypeRules.canAssign(argTypes[i], paramTypes[k])) {				k++; // match			} else {				if (nSkipped >= diff) {					return; // too different				} 				indexSkipped[nSkipped++]= i;			}		}		ICompilationUnit cu= context.getCompilationUnit();		CompilationUnit astRoot= context.getASTRoot();			// remove arguments		{			ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST());						for (int i= diff - 1; i >= 0; i--) {				rewrite.remove((Expression) arguments.get(indexSkipped[i]), null);			}			String[] arg= new String[] { getMethodSignature(methodRef, false) };			String label;			if (diff == 1) {				label= CorrectionMessages.getFormattedString("UnresolvedElementsSubProcessor.removeargument.description", arg); //$NON-NLS-1$			} else {				label= CorrectionMessages.getFormattedString("UnresolvedElementsSubProcessor.removearguments.description", arg); //$NON-NLS-1$			}						Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_REMOVE);			ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, cu, rewrite, 8, image);			proposals.add(proposal);						}				IMethodBinding methodDecl= methodRef.getMethodDeclaration();		ITypeBinding declaringType= methodDecl.getDeclaringClass();				// add parameters		if (!declaringType.isFromSource()) {			return;		}		ICompilationUnit targetCU= ASTResolving.findCompilationUnitForBinding(cu, astRoot, declaringType);		if (targetCU != null) {			boolean isDifferentCU= !cu.equals(targetCU);						if (isImplicitConstructor(methodDecl, targetCU)) {				return;			}						ChangeDescription[] changeDesc= new ChangeDescription[argTypes.length];			ITypeBinding[] changeTypes= new ITypeBinding[diff];			for (int i= diff - 1; i >= 0; i--) {				int idx= indexSkipped[i];				Expression arg= (Expression) arguments.get(idx);				String name= arg instanceof SimpleName ? ((SimpleName) arg).getIdentifier() : null;				ITypeBinding newType= Bindings.normalizeTypeBinding(argTypes[idx]);				if (newType == null) {					newType= astRoot.getAST().resolveWellKnownType("java.lang.Object"); //$NON-NLS-1$				}				if (!ASTResolving.isUseableTypeInContext(newType, methodDecl, false)) {					return;				}				changeDesc[idx]= new InsertDescription(newType, name);				changeTypes[i]= newType;			}			String[] arg= new String[] { getMethodSignature(methodDecl, isDifferentCU), getTypeNames(changeTypes) };			String label;			if (methodDecl.isConstructor()) {				if (diff == 1) {					label= CorrectionMessages.getFormattedString("UnresolvedElementsSubProcessor.addparam.constr.description", arg); //$NON-NLS-1$				} else {					label= CorrectionMessages.getFormattedString("UnresolvedElementsSubProcessor.addparams.constr.description", arg); //$NON-NLS-1$				}			} else {				if (diff == 1) {					label= CorrectionMessages.getFormattedString("UnresolvedElementsSubProcessor.addparam.description", arg); //$NON-NLS-1$				} else {					label= CorrectionMessages.getFormattedString("UnresolvedElementsSubProcessor.addparams.description", arg); //$NON-NLS-1$				}			}				Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_ADD);			ChangeMethodSignatureProposal proposal= new ChangeMethodSignatureProposal(label, targetCU, invocationNode, methodDecl, changeDesc, null, 5, image);			proposals.add(proposal);		}	}