From 36f42e702957402cbd1f1dc1ae88c2f119e40399 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 7 Feb 2012 21:15:38 +0400 Subject: [PATCH] Added automatic implementing all abstract methods. --- .../OverrideImplementMethodsHandler.java | 31 +++++++++++++------ .../AnonymousTemplateEditingListener.java | 12 +++++-- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java index f7491ecee45..04f659faad2 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java @@ -153,24 +153,30 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns return classOrObject != null; } - @Override - public void invoke(@NotNull final Project project, @NotNull final Editor editor, @NotNull PsiFile file) { + public void invoke(@NotNull final Project project, @NotNull final Editor editor, @NotNull PsiFile file, + boolean implementAll) { final PsiElement elementAtCaret = file.findElementAt(editor.getCaretModel().getOffset()); final JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, JetClassOrObject.class); Set missingImplementations = collectMethodsToGenerate(classOrObject); - if (missingImplementations.isEmpty()) { + if (missingImplementations.isEmpty() && !implementAll) { HintManager.getInstance().showErrorHint(editor, "No methods to implement have been found"); return; } List members = membersFromDescriptors(missingImplementations); - final MemberChooser chooser = showOverrideImplementChooser(project, - members.toArray(new DescriptorClassMember[members.size()])); - if (chooser == null) { - return; - } - final List selectedElements = chooser.getSelectedElements(); - if (selectedElements == null || selectedElements.isEmpty()) return; + final List selectedElements; + if (implementAll) { + selectedElements = members; + } else { + final MemberChooser chooser = showOverrideImplementChooser(project, + members.toArray(new DescriptorClassMember[members.size()])); + if (chooser == null) { + return; + } + + selectedElements = chooser.getSelectedElements(); + if (selectedElements == null || selectedElements.isEmpty()) return; + } new WriteCommandAction(project, file) { protected void run(final Result result) throws Throwable { @@ -180,6 +186,11 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns } + @Override + public void invoke(@NotNull final Project project, @NotNull final Editor editor, @NotNull PsiFile file) { + invoke(project, editor, file, false); + } + @Override public boolean startInWriteAction() { return false; diff --git a/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/AnonymousTemplateEditingListener.java b/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/AnonymousTemplateEditingListener.java index 781203e34c9..8b4329f7f55 100644 --- a/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/AnonymousTemplateEditingListener.java +++ b/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/AnonymousTemplateEditingListener.java @@ -16,6 +16,7 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetReferenceExpression; import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.plugin.codeInsight.ImplementMethodsHandler; import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade; import java.util.HashMap; @@ -60,9 +61,14 @@ class AnonymousTemplateEditingListener extends TemplateEditingAdapter { public void templateFinished(Template template, boolean brokenOff) { ourAddedListeners.remove(editor); - if (classDescriptor != null && classDescriptor.getKind() == ClassKind.CLASS) { - int placeToInsert = classRef.getTextRange().getEndOffset(); - PsiDocumentManager.getInstance(psiFile.getProject()).getDocument(psiFile).insertString(placeToInsert, "()"); + if (classDescriptor != null) { + if (classDescriptor.getKind() == ClassKind.CLASS) { + int placeToInsert = classRef.getTextRange().getEndOffset(); + PsiDocumentManager.getInstance(psiFile.getProject()).getDocument(psiFile).insertString(placeToInsert, "()"); + editor.getCaretModel().moveToOffset(placeToInsert + 1); + } + + new ImplementMethodsHandler().invoke(psiFile.getProject(), editor, psiFile, true); } }