void (final GrField selectedValue, final GrMethod constructor, final Project project) { List<GrParameterInfo> parameters = new ArrayList<>(); GrParameter[] constructorParameters = constructor.getParameters(); for (int i = 0; i < constructorParameters.length; i++) { parameters.add(new GrParameterInfo(constructorParameters[i], i)); } final String[] suggestedNames = JavaCodeStyleManager.getInstance(project).suggestVariableName(VariableKind.PARAMETER, selectedValue.getName(), null, null).names; final DefaultGroovyVariableNameValidator nameValidator = new DefaultGroovyVariableNameValidator(constructor, Collections.emptyList(), false); String parameterName = ContainerUtil.find(suggestedNames, name -> !nameValidator.validateName(name, false).isEmpty()); if (parameterName == null) { parameterName = nameValidator.validateName(suggestedNames[0], true); } parameters.add(new GrParameterInfo(parameterName, "null", "", selectedValue.getTypeGroovy(), NEW_PARAMETER, false)); PsiClassType[] exceptionTypes = constructor.getThrowsList().getReferencedTypes(); ThrownExceptionInfo[] thrownExceptionInfos = new ThrownExceptionInfo[exceptionTypes.length]; for (int i = 0; i < exceptionTypes.length; i++) { thrownExceptionInfos[i] = new JavaThrownExceptionInfo(i, exceptionTypes[i]); } final GrChangeInfoImpl grChangeInfo = new GrChangeInfoImpl(constructor, null, null, constructor.getName(), parameters, thrownExceptionInfos, false); final String finalParameterName = parameterName; final GrChangeSignatureProcessor processor = new GrChangeSignatureProcessor(project, grChangeInfo) { @Override protected void performRefactoring(UsageInfo @NotNull [] usages) { super.performRefactoring(usages); final GrOpenBlock block = constructor.getBlock(); LOG.assertTrue(block != null); final GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(project); final String text; if (StringUtil.equals(selectedValue.getName(), finalParameterName)) { text = "this." + selectedValue.getName() + " = " + finalParameterName; } else { text = selectedValue.getName() + " = " + finalParameterName; } final GrStatement assignment = factory.createStatementFromText(text); final GrStatement statement = block.addStatementBefore(assignment, null); final GrReferenceExpression ref = (GrReferenceExpression)((GrAssignmentExpression)statement).getLValue(); if (!PsiManager.getInstance(project).areElementsEquivalent(ref.resolve(), selectedValue)) { PsiUtil.qualifyMemberReference(ref, selectedValue, selectedValue.getName()); } } }; processor.run(); }