void (final Object[] selection) { for (Object o : selection) { if (!((PsiElement)o).isValid()) return; } CommandProcessor.getInstance().executeCommand(myProject, () -> { final LinkedHashSet<PsiClass> classes = new LinkedHashSet<>(); for (final Object o : selection) { if (o instanceof PsiEnumConstant) { classes.add(ApplicationManager.getApplication().runWriteAction(new Computable<>() { @Override public PsiClass compute() { return ((PsiEnumConstant)o).getOrCreateInitializingClass(); } })); } else { classes.add((PsiClass)o); } } if (!FileModificationService.getInstance().preparePsiElementsForWrite(classes)) return; ApplicationManager.getApplication().runWriteAction(() -> { for (PsiClass psiClass : classes) { try { OverrideImplementUtil.overrideOrImplement(psiClass, myMethod); } catch (IncorrectOperationException e) { LOG.error(e); } } }); }, JavaBundle.message("intention.implement.abstract.method.command.name"), null); }