package de.plushnikov.intellij.plugin.extension; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiField; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiType; import com.intellij.refactoring.rename.RenameJavaVariableProcessor; import de.plushnikov.intellij.plugin.processor.field.AccessorsInfo; import de.plushnikov.intellij.plugin.thirdparty.LombokUtils; import org.jetbrains.annotations.NotNull; import java.util.Map; public class LombokRenameFieldReferenceProcessor extends RenameJavaVariableProcessor { public LombokRenameFieldReferenceProcessor() { } @Override public boolean canProcessElement(@NotNull PsiElement element) { final boolean isPsiJavaField = element instanceof PsiField && StdFileTypes.JAVA.getLanguage().equals(element.getLanguage()); if (isPsiJavaField) { final PsiField psiField = (PsiField) element; AccessorsInfo accessorsInfo = AccessorsInfo.build(psiField); final String accessorFieldName = accessorsInfo.removePrefix(psiField.getName()); if (!psiField.getName().equals(accessorFieldName)) { return true; } } return false; } @Override public void prepareRenaming(PsiElement element, String newName, Map<PsiElement, String> allRenames) { final PsiField psiField = (PsiField) element; final PsiClass containingClass = psiField.getContainingClass(); if (null != containingClass) { final AccessorsInfo accessorsInfo = AccessorsInfo.build(psiField); final String psiFieldName = psiField.getName(); final boolean isBoolean = PsiType.BOOLEAN.equals(psiField.getType()); final String getterName = LombokUtils.toGetterName(accessorsInfo, psiFieldName, isBoolean); final String setterName = LombokUtils.toSetterName(accessorsInfo, psiFieldName, isBoolean); final PsiMethod[] psiGetterMethods = containingClass.findMethodsByName(getterName, false); final PsiMethod[] psiSetterMethods = containingClass.findMethodsByName(setterName, false); for (PsiMethod psiMethod : psiGetterMethods) { allRenames.put(psiMethod, LombokUtils.toGetterName(accessorsInfo, newName, isBoolean)); } for (PsiMethod psiMethod : psiSetterMethods) { allRenames.put(psiMethod, LombokUtils.toSetterName(accessorsInfo, newName, isBoolean)); } } } }