RefactoringActionHandler (@NotNull RefactoringSupportProvider provider, final PsiElement element) { abstract class ContextAwareChangeSignatureHandler implements RefactoringActionHandler, ContextAwareActionHandler {} return new ContextAwareChangeSignatureHandler() { @Override public boolean isAvailableForQuickList(@NotNull Editor editor, @NotNull PsiFile file, @NotNull DataContext dataContext) { return findTargetMember(element) != null; } @Override public void invoke(@NotNull Project project, Editor editor, PsiFile file, DataContext dataContext) { editor.getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE); final PsiElement targetMember = findTargetMember(element); if (targetMember == null) { final ChangeSignatureHandler handler = getChangeSignatureHandler(file); if (handler != null) { final String notFoundMessage = handler.getTargetNotFoundMessage(); if (notFoundMessage != null) { CommonRefactoringUtil.showErrorHint(project, editor, notFoundMessage, RefactoringBundle .message("changeSignature.refactoring.name"), null); } } return; } final ChangeSignatureHandler handler = getChangeSignatureHandler(targetMember); if (handler == null) return; handler.invoke(project, new PsiElement[]{targetMember}, dataContext); } @Override public void invoke(@NotNull Project project, PsiElement @NotNull [] elements, DataContext dataContext) { if (elements.length != 1) return; final PsiElement targetMember = findTargetMember(elements[0]); if (targetMember == null) return; final ChangeSignatureHandler handler = getChangeSignatureHandler(targetMember); if (handler == null) return; handler.invoke(project, new PsiElement[]{targetMember}, dataContext); } }; }