PsiField (PsiParameter parameter, PsiMethod constructor, boolean isFinal) { final String parameterName = parameter.getName(); PsiType type = parameter.getType(); if (type instanceof PsiEllipsisType) type = ((PsiEllipsisType)type).toArrayType(); try { final JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(getMethod().getProject()); String fieldName = uniqueFieldName(styleManager.suggestVariableName( VariableKind.FIELD, styleManager.variableNameToPropertyName(parameterName, VariableKind.PARAMETER), null, type).names); PsiField field = myElementFactory.createField(fieldName, type); final PsiModifierList modifierList = field.getModifierList(); LOG.assertTrue(modifierList != null); if (NullableNotNullManager.isNullable(parameter)) { final String annotationName = NullableNotNullManager.getInstance(myProject).getDefaultNullable(); modifierList.addAfter(myElementFactory.createAnnotationFromText("@" + annotationName, field), null); } modifierList.setModifierProperty(PsiModifier.FINAL, isFinal); final PsiCodeBlock methodBody = constructor.getBody(); LOG.assertTrue(methodBody != null); @NonNls final String stmtText; if (Comparing.strEqual(parameterName, fieldName)) { stmtText = "this." + fieldName + " = " + parameterName + ";"; } else { stmtText = fieldName + " = " + parameterName + ";"; } PsiStatement assignmentStmt = myElementFactory.createStatementFromText(stmtText, methodBody); assignmentStmt = (PsiStatement)CodeStyleManager.getInstance(constructor.getProject()).reformat(assignmentStmt); methodBody.add(assignmentStmt); field = (PsiField)myInnerClass.add(field); return field; } catch (IncorrectOperationException e) { LOG.error(e); } return null; }