package de.plushnikov.intellij.plugin.extension;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.rename.PsiElementRenameHandler;
import com.intellij.refactoring.rename.RenameHandler;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import de.plushnikov.intellij.plugin.psi.LombokLightClassBuilder;
import de.plushnikov.intellij.plugin.psi.LombokLightFieldBuilder;
import de.plushnikov.intellij.plugin.psi.LombokLightMethodBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* "Rename"-Handler for methods generated by lombok
* At this moment it doesn't renamed anything, but forbid default rename operation
*/
public class LombokElementRenameHandler implements RenameHandler {
public boolean isAvailableOnDataContext(DataContext dataContext) {
final PsiElement element = PsiElementRenameHandler.getElement(dataContext);
return element instanceof LombokLightMethodBuilder || element instanceof LombokLightClassBuilder || element instanceof LombokLightFieldBuilder;
}
public boolean isRenaming(DataContext dataContext) {
return isAvailableOnDataContext(dataContext);
}
public void invoke(@NotNull Project project, Editor editor, PsiFile file, @Nullable DataContext dataContext) {
invokeInner(project, editor);
}
public void invoke(@NotNull Project project, @NotNull PsiElement[] elements, @Nullable DataContext dataContext) {
Editor editor = dataContext == null ? null : PlatformDataKeys.EDITOR.getData(dataContext);
invokeInner(project, editor);
}
private void invokeInner(Project project, Editor editor) {
CommonRefactoringUtil.showErrorHint(project, editor,
RefactoringBundle.getCannotRefactorMessage("This element cannot be renamed."),
RefactoringBundle.message("rename.title"), null);
}
}