Added automatic implementing all abstract methods.
This commit is contained in:
+21
-10
@@ -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<CallableMemberDescriptor> missingImplementations = collectMethodsToGenerate(classOrObject);
|
||||
if (missingImplementations.isEmpty()) {
|
||||
if (missingImplementations.isEmpty() && !implementAll) {
|
||||
HintManager.getInstance().showErrorHint(editor, "No methods to implement have been found");
|
||||
return;
|
||||
}
|
||||
List<DescriptorClassMember> members = membersFromDescriptors(missingImplementations);
|
||||
final MemberChooser<DescriptorClassMember> chooser = showOverrideImplementChooser(project,
|
||||
members.toArray(new DescriptorClassMember[members.size()]));
|
||||
if (chooser == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final List<DescriptorClassMember> selectedElements = chooser.getSelectedElements();
|
||||
if (selectedElements == null || selectedElements.isEmpty()) return;
|
||||
final List<DescriptorClassMember> selectedElements;
|
||||
if (implementAll) {
|
||||
selectedElements = members;
|
||||
} else {
|
||||
final MemberChooser<DescriptorClassMember> 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;
|
||||
|
||||
+9
-3
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user