void (@NotNull Editor editor, @NotNull PsiClass aClass, @NotNull Collection<? extends PsiMethodMember> candidates, OverrideOrImplementOptions options) { try { int offset = editor.getCaretModel().getOffset(); PsiElement brace = aClass.getLBrace(); if (brace == null) { PsiClass psiClass = JavaPsiFacade.getElementFactory(aClass.getProject()).createClass("X"); brace = aClass.addRangeAfter(psiClass.getLBrace(), psiClass.getRBrace(), aClass.getLastChild()); LOG.assertTrue(brace != null, aClass.getLastChild()); } int lbraceOffset = brace.getTextOffset(); List<PsiGenerationInfo<PsiMethod>> resultMembers; if (offset <= lbraceOffset || aClass.isEnum()) { resultMembers = new ArrayList<>(); for (PsiMethodMember candidate : candidates) { ProgressManager.progress(candidate.getElement().getName()); Collection<PsiMethod> prototypes = overrideOrImplementMethod(aClass, candidate.getElement(), candidate.getSubstitutor(), options.isCopyJavaDoc(), options.isInsertOverrideWherePossible()); List<PsiGenerationInfo<PsiMethod>> infos = convert2GenerationInfos(prototypes); for (PsiGenerationInfo<PsiMethod> info : infos) { PsiElement anchor = getDefaultAnchorToOverrideOrImplement(aClass, candidate.getElement(), candidate.getSubstitutor()); info.insert(aClass, anchor, true); resultMembers.add(info); } } } else { List<PsiGenerationInfo<PsiMethod>> prototypes = overrideOrImplementMethods(aClass, candidates, options.isCopyJavaDoc(), options.isInsertOverrideWherePossible()); resultMembers = GenerateMembersUtil.insertMembersAtOffset(aClass, offset, prototypes); } if (!resultMembers.isEmpty()) { for (PsiGenerationInfo<PsiMethod> info : resultMembers) { PsiMethod method = info.getPsiMember(); if (options.isGenerateJavaDoc() && method != null && method.getDocComment() == null) { method = CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(method); if (method != null) { FixDocCommentAction.generateOrFixComment(method, method.getProject(), editor); } } } resultMembers.get(0).positionCaret(editor, true); } } catch (IncorrectOperationException e) { LOG.error(e); } }