void (@NotNull final Project project, final PsiElement @NotNull [] elements, final DataContext dataContext) { if (elements.length != 1 || !(elements[0] instanceof PsiMethod method)) return; String message = null; if (!method.getManager().isInProject(method)) { message = JavaRefactoringBundle.message("move.method.is.not.supported.for.non.project.methods"); } else if (method.isConstructor()) { message = JavaRefactoringBundle.message("move.method.is.not.supported.for.constructors"); } else if (method.getLanguage()!= JavaLanguage.INSTANCE) { message = JavaRefactoringBundle.message("move.method.is.not.supported.for.0", method.getLanguage().getDisplayName()); } else { final PsiClass containingClass = method.getContainingClass(); if (containingClass != null && mentionTypeParameters(method)) { message = JavaRefactoringBundle.message("move.method.is.not.supported.for.generic.classes"); } else if (method.findSuperMethods().length > 0 || OverridingMethodsSearch.search(method).toArray(PsiMethod.EMPTY_ARRAY).length > 0) { message = RefactoringBundle.message("move.method.is.not.supported.when.method.is.part.of.inheritance.hierarchy"); } else { final Set<PsiClass> classes = MoveInstanceMembersUtil.getThisClassesToMembers(method).keySet(); for (PsiClass aClass : classes) { if (aClass instanceof JspClass) { message = JavaRefactoringBundle.message("synthetic.jsp.class.is.referenced.in.the.method"); Editor editor = CommonDataKeys.EDITOR.getData(dataContext); CommonRefactoringUtil.showErrorHint(project, editor, message, getRefactoringName(), HelpID.MOVE_INSTANCE_METHOD); break; } } } } if (message != null) { showErrorHint(project, dataContext, message); return; } final List<PsiVariable> suitableVariables = new ArrayList<>(); message = collectSuitableVariables(method, suitableVariables); if (message != null) { final String unableToMakeStaticMessage = MakeStaticHandler.validateTarget(method); if (unableToMakeStaticMessage != null) { showErrorHint(project, dataContext, message); } else { final String suggestToMakeStaticMessage = JavaRefactoringBundle.message("move.instance.method.handler.make.method.static", method.getName()); if (Messages .showYesNoCancelDialog(project, message + ". " + suggestToMakeStaticMessage, getRefactoringName(), Messages.getErrorIcon()) == Messages.YES) { MakeStaticHandler.invoke(method); } } return; } new MoveInstanceMethodDialog( method, suitableVariables.toArray(new PsiVariable[0])).show(); }