String paramName= StubUtility.guessArgumentName(project, accessName, excludedNames);
String paramName= StubUtility.guessArgumentName(project, accessName, (String[]) excludedNames);
	public void run(IProgressMonitor monitor) throws CoreException, OperationCanceledException {		try {			if (monitor == null) {				monitor= new NullProgressMonitor();			}						monitor.setTaskName(CodeGenerationMessages.getString("AddCustomConstructorOperation.description")); //$NON-NLS-1$			monitor.beginTask("", 40); //$NON-NLS-1$						monitor.worked(1);						ImportsStructure imports= new ImportsStructure(fType.getCompilationUnit(), fSettings.importOrder, fSettings.importThreshold, true);			ITypeHierarchy hierarchy= fType.newSupertypeHierarchy(new SubProgressMonitor(monitor, 1));			monitor.worked(2);						// Only calculating one constructor here			String defaultConstructor= genOverrideConstructorStub(fSuperConstructor, fType, hierarchy, fSettings, imports, fOmitSuper);								int closingBraceIndex= defaultConstructor.lastIndexOf('}'); //$NON-NLS-1$			IScanner scanner= ToolFactory.createScanner(true, false, false, false);			scanner.setSource(defaultConstructor.toCharArray());			TokenScanner tokenScanner= new TokenScanner(scanner);			int closingParenIndex= tokenScanner.getTokenStartOffset(ITerminalSymbols.TokenNameRPAREN, 0);			monitor.worked(7);			String[] params= new String[fSelected.length];			String[] superConstructorParamNames= fSuperConstructor.getParameterNames();			String[] excludedNames= new String[superConstructorParamNames.length + params.length];			ArrayList superNames= new ArrayList(superConstructorParamNames.length);			for (int i= 0; i < superConstructorParamNames.length; i++) {				superNames.add(superConstructorParamNames[i]);				excludedNames[i]= superConstructorParamNames[i];			}						StringBuffer buf= new StringBuffer(defaultConstructor.substring(0, closingParenIndex));									if (superConstructorParamNames.length > 0)				buf.append(", "); //$NON-NLS-1$							monitor.worked(5);							for (int i= 0; i < fSelected.length; i++) {				buf.append(Signature.toString(fSelected[i].getTypeSignature()));								buf.append(" "); //$NON-NLS-1$				IJavaProject project= fSelected[i].getJavaProject();				String accessName= NamingConventions.removePrefixAndSuffixForFieldName(project, fSelected[i].getElementName(), fSelected[i].getFlags());				if (accessName.length() > 0) {					char first= accessName.charAt(0);					if (Character.isLowerCase(first)) {						accessName= Character.toUpperCase(first) + accessName.substring(1);					}				}				// Allow no collisions with super constructor parameter names				String paramName= StubUtility.guessArgumentName(project, accessName, excludedNames);				excludedNames[superConstructorParamNames.length + i]= paramName;				params[i]= paramName;				buf.append(paramName);				if (i < fSelected.length - 1)					buf.append(", "); //$NON-NLS-1$							}			monitor.worked(10);						buf.append(defaultConstructor.substring(closingParenIndex, closingBraceIndex));						for (int i= 0; i < fSelected.length; i++) {				String fieldName= fSelected[i].getElementName();				boolean isStatic= Flags.isStatic(fSelected[i].getFlags());				if (isStatic) {					buf.append(fSelected[i].getParent().getElementName());					buf.append("."); //$NON-NLS-1$				}					else if ((fSettings.useKeywordThis) || params[i].equals(fieldName) || superNames.contains(fieldName))					buf.append("this."); //$NON-NLS-1$								buf.append(fieldName);				buf.append(" = "); //$NON-NLS-1$				buf.append(params[i]);				buf.append(";\n"); //$NON-NLS-1$			}			buf.append("}"); //$NON-NLS-1$			monitor.worked(10);						String lineDelim= StubUtility.getLineDelimiterUsed(fType);			int indent= StubUtility.getIndentUsed(fType) + 1;						String formattedContent= CodeFormatterUtil.format(CodeFormatterUtil.K_CLASS_BODY_DECLARATIONS, buf.toString(), indent, null, lineDelim) + lineDelim;			fConstructorCreated= fType.createMethod(formattedContent, fInsertPosition, true, null);			monitor.worked(5);					imports.create(fDoSave, null);			monitor.worked(1);		} finally {			monitor.done();		}	}