void (@NotNull PsiElement psiElement, @NotNull ActionContext context, @NotNull ModPsiUpdater updater) { GrCodeReferenceElement ref = (GrCodeReferenceElement)psiElement; final GrAnonymousClassDefinition anonymous = (GrAnonymousClassDefinition)ref.getParent(); final GrNewExpression newExpr = (GrNewExpression)anonymous.getParent(); final PsiElement resolved = ref.resolve(); assert resolved instanceof PsiClass;// && ((PsiClass)resolved).isInterface(); GrTypeDefinitionBody body = anonymous.getBody(); assert body != null; List<Pair<PsiMethod, GrOpenBlock>> methods = new ArrayList<>(); for (GrMethod method : body.getMethods()) { methods.add(new Pair<>(method, method.getBlock())); } final PsiClass iface = (PsiClass)resolved; final Collection<CandidateInfo> collection = OverrideImplementExploreUtil.getMethodsToOverrideImplement(anonymous, true); for (CandidateInfo info : collection) { methods.add(new Pair<>((PsiMethod)info.getElement(), null)); } StringBuilder buffer = new StringBuilder(); if (methods.size() == 1) { final Pair<PsiMethod, GrOpenBlock> pair = methods.get(0); appendClosureTextByMethod(pair.getFirst(), buffer, pair.getSecond(), newExpr); if (!GroovyConfigUtils.getInstance().isVersionAtLeast(psiElement, GroovyConfigUtils.GROOVY2_2)) { buffer.append(" as ").append(iface.getQualifiedName()); } } else { buffer.append("["); buffer.append("\n"); for (Pair<PsiMethod, GrOpenBlock> pair : methods) { final PsiMethod method = pair.getFirst(); final GrOpenBlock block = pair.getSecond(); buffer.append(method.getName()).append(": "); appendClosureTextByMethod(method, buffer, block, newExpr); buffer.append(",\n"); } if (!methods.isEmpty()) { buffer.delete(buffer.length() - 2, buffer.length()); buffer.append('\n'); } buffer.append("]"); buffer.append(" as ").append(iface.getQualifiedName()); } createAndAdjustNewExpression(context.project(), newExpr, buffer); }