fSelectionDescription= new GroupDescription("selection");
selectionDescription= new GroupDescription(); setSelectionDescription(selectionDescription);
	protected void modifySignature(ASTRewrite rewrite, MethodDeclaration methodDecl, boolean isInDifferentCU) throws CoreException {		if (isInDifferentCU) {			fSelectionDescription= new GroupDescription("selection"); //$NON-NLS-1$		}				List parameters= methodDecl.parameters();		// create a copy to not loose the indexes		SingleVariableDeclaration[] oldParameters= (SingleVariableDeclaration[]) parameters.toArray(new SingleVariableDeclaration[parameters.size()]);		AST ast= methodDecl.getAST();		int k= 0; // index over the oldParameters		ArrayList createdVariables= new ArrayList();		ArrayList usedNames= new ArrayList();		IVariableBinding[] declaredFields= fSenderBinding.getDeclaringClass().getDeclaredFields();		for (int i= 0; i < declaredFields.length; i++) { // avoid to take parameter names that are equal to field names			usedNames.add(declaredFields[i].getName());		}						for (int i= 0; i < fParameterChanges.length; i++) {			ChangeDescription curr= fParameterChanges[i];			if (curr == null) {				usedNames.add(oldParameters[k].getName().getIdentifier());				k++;			} else if (curr instanceof InsertDescription) {				InsertDescription desc= (InsertDescription) curr;				SingleVariableDeclaration newNode= ast.newSingleVariableDeclaration();				String type= addImport(desc.type);				newNode.setType(ASTNodeFactory.newType(ast, type));								// set name later				newNode.setProperty(NAME_SUGGESTION, desc.name);				createdVariables.add(newNode);								rewrite.markAsInserted(newNode, fSelectionDescription);				parameters.add(i, newNode);			} else if (curr instanceof RemoveDescription) {				rewrite.markAsRemoved(oldParameters[k], fSelectionDescription);				k++;			} else if (curr instanceof EditDescription) {				EditDescription desc= (EditDescription) curr;				SingleVariableDeclaration newNode= ast.newSingleVariableDeclaration();				String type= addImport(desc.type);				newNode.setType(ASTNodeFactory.newType(ast, type));				//	set name later				newNode.setProperty(NAME_SUGGESTION, desc.name);								rewrite.markAsReplaced(oldParameters[k], newNode);				createdVariables.add(newNode);				k++;			} else if (curr instanceof SwapDescription) {				SingleVariableDeclaration decl1= oldParameters[k];				SingleVariableDeclaration decl2= oldParameters[((SwapDescription) curr).index];								rewrite.markAsReplaced(decl1, rewrite.createCopy(decl2), fSelectionDescription);				rewrite.markAsReplaced(decl2, rewrite.createCopy(decl1), fSelectionDescription);								usedNames.add(decl1.getName().getIdentifier());				k++;				}		}				if (!createdVariables.isEmpty() && methodDecl.getBody() != null) {			// avoid take a name of a local variable inside			CompilationUnit root= (CompilationUnit) methodDecl.getRoot();			IBinding[] bindings= (new ScopeAnalyzer(root)).getDeclarationsAfter(methodDecl.getBody().getStartPosition(), ScopeAnalyzer.VARIABLES);			for (int i= 0; i < bindings.length; i++) {				usedNames.add(bindings[i].getName());			}		}				// set names for new parameters		for (int i= 0; i < createdVariables.size(); i++) {			SingleVariableDeclaration var= (SingleVariableDeclaration) createdVariables.get(i);			String suggestedName= (String) var.getProperty(NAME_SUGGESTION);			String name;			String[] excludedNames= (String[]) usedNames.toArray(new String[usedNames.size()]);			if (suggestedName == null) {				Type type= var.getType();				int dim= 0;				if (type.isArrayType()) {					dim= ((ArrayType) type).getDimensions();					type= ((ArrayType) type).getElementType();				}				name= NamingConventions.suggestArgumentNames(getCompilationUnit().getJavaProject(), "", ASTNodes.asString(type), dim, excludedNames)[0]; //$NON-NLS-1$			} else {				name= StubUtility.guessArgumentName(getCompilationUnit().getJavaProject(), suggestedName, excludedNames);			}			var.setName(ast.newSimpleName(name));			usedNames.add(name);		}				}