package org.elixir_lang.refactoring.module_attribute.rename;
import com.intellij.lang.Language;
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.psi.PsiNamedElement;
import com.intellij.refactoring.rename.inplace.VariableInplaceRenameHandler;
import com.intellij.refactoring.rename.inplace.VariableInplaceRenamer;
import org.elixir_lang.psi.AtUnqualifiedNoParenthesesCall;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* A custom rename handler, so that {@link #createRenamer(PsiElement, Editor)} can be return {@link Inplace}, so
* {@link Inplace#isIdentifier(String, Language)} won't use {@link com.intellij.lang.refactoring.NamesValidator}, whose
* {@link com.intellij.lang.refactoring.NamesValidator#isIdentifier(String, Project)} can't be customized to the
* element.
*/
public class Handler extends VariableInplaceRenameHandler {
/*
* Static Methods
*/
static boolean isAvailable(@Nullable PsiElement element) {
return element instanceof AtUnqualifiedNoParenthesesCall;
}
/*
* Instance Methods
*/
@Nullable
@Override
protected VariableInplaceRenamer createRenamer(@NotNull PsiElement elementToRename, Editor editor) {
return new Inplace((PsiNamedElement)elementToRename, editor);
}
@Override
protected boolean isAvailable(@Nullable PsiElement element, @NotNull Editor editor, PsiFile file) {
return editor.getSettings().isVariableInplaceRenameEnabled() && isAvailable(element);
}
}