private PsiMethod createSetterMethod(PsiField psiField, String methodVisibility, PsiClass psiClass, PsiManager manager, PsiElementFactory elementFactory) {
final StringBuilder builder = StringBuilderSpinAllocator.alloc();
try {
final String fieldName = psiField.getName();
final PsiType psiFieldType = psiField.getType();
final String methodName = TransformationsUtil.toSetterName(fieldName, PsiType.BOOLEAN.equals(psiFieldType));
builder.append(methodVisibility);
if (builder.length() > 0) {
builder.append(' ');
}
if (psiField.hasModifierProperty(PsiModifier.STATIC)) {
builder.append(PsiModifier.STATIC).append(' ');
}
builder.append(PsiType.VOID.getCanonicalText());
builder.append(' ');
builder.append(methodName);
final Collection<String> annotationsToCopy = collectAnnotationsToCopy(psiField);
final String annotationsString = buildAnnotationsString(annotationsToCopy);
builder.append("(").append(annotationsString).append(psiFieldType.getCanonicalText()).append(' ').append(fieldName).append(')');
builder.append("{ this.").append(fieldName).append(" = ").append(fieldName).append("; }");
PsiMethod setterMethod = elementFactory.createMethodFromText(builder.toString(), psiClass);
return prepareMethod(manager, setterMethod, psiClass, psiField);