public void invoke( @NotNull final Project project, @NotNull PsiElement[] elements, DataContext dataContext) { if (elements.length != 1) return; myProject = project; mySubclass = (PsiClass) elements[0]; if (!CommonRefactoringUtil.checkReadOnlyStatus(project, mySubclass)) return; Editor editor = dataContext != null ? PlatformDataKeys.EDITOR.getData(dataContext) : null; if (mySubclass.isInterface()) { String message = RefactoringBundle.getCannotRefactorMessage( RefactoringBundle.message("superclass.cannot.be.extracted.from.an.interface")); CommonRefactoringUtil.showErrorHint( project, editor, message, REFACTORING_NAME, HelpID.EXTRACT_SUPERCLASS); return; } if (mySubclass.isEnum()) { String message = RefactoringBundle.getCannotRefactorMessage( RefactoringBundle.message("superclass.cannot.be.extracted.from.an.enum")); CommonRefactoringUtil.showErrorHint( project, editor, message, REFACTORING_NAME, HelpID.EXTRACT_SUPERCLASS); return; } final List<MemberInfo> memberInfos = MemberInfo.extractClassMembers( mySubclass, new MemberInfo.Filter<PsiMember>() { public boolean includeMember(PsiMember element) { return true; } }, false); final ExtractSuperclassDialog dialog = new ExtractSuperclassDialog( project, mySubclass, memberInfos, ExtractSuperclassHandler.this); dialog.show(); if (!dialog.isOK() || !dialog.isExtractSuperclass()) return; CommandProcessor.getInstance() .executeCommand( myProject, new Runnable() { public void run() { final Runnable action = new Runnable() { public void run() { doRefactoring(project, mySubclass, dialog); } }; ApplicationManager.getApplication().runWriteAction(action); } }, REFACTORING_NAME, null); }