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;
|
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 PsiElement elementAtCaret = file.findElementAt(editor.getCaretModel().getOffset());
|
||||||
final JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, JetClassOrObject.class);
|
final JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, JetClassOrObject.class);
|
||||||
Set<CallableMemberDescriptor> missingImplementations = collectMethodsToGenerate(classOrObject);
|
Set<CallableMemberDescriptor> missingImplementations = collectMethodsToGenerate(classOrObject);
|
||||||
if (missingImplementations.isEmpty()) {
|
if (missingImplementations.isEmpty() && !implementAll) {
|
||||||
HintManager.getInstance().showErrorHint(editor, "No methods to implement have been found");
|
HintManager.getInstance().showErrorHint(editor, "No methods to implement have been found");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
List<DescriptorClassMember> members = membersFromDescriptors(missingImplementations);
|
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();
|
final List<DescriptorClassMember> selectedElements;
|
||||||
if (selectedElements == null || selectedElements.isEmpty()) return;
|
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) {
|
new WriteCommandAction(project, file) {
|
||||||
protected void run(final Result result) throws Throwable {
|
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
|
@Override
|
||||||
public boolean startInWriteAction() {
|
public boolean startInWriteAction() {
|
||||||
return false;
|
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.JetFile;
|
||||||
import org.jetbrains.jet.lang.psi.JetReferenceExpression;
|
import org.jetbrains.jet.lang.psi.JetReferenceExpression;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
|
import org.jetbrains.jet.plugin.codeInsight.ImplementMethodsHandler;
|
||||||
import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade;
|
import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -60,9 +61,14 @@ class AnonymousTemplateEditingListener extends TemplateEditingAdapter {
|
|||||||
public void templateFinished(Template template, boolean brokenOff) {
|
public void templateFinished(Template template, boolean brokenOff) {
|
||||||
ourAddedListeners.remove(editor);
|
ourAddedListeners.remove(editor);
|
||||||
|
|
||||||
if (classDescriptor != null && classDescriptor.getKind() == ClassKind.CLASS) {
|
if (classDescriptor != null) {
|
||||||
int placeToInsert = classRef.getTextRange().getEndOffset();
|
if (classDescriptor.getKind() == ClassKind.CLASS) {
|
||||||
PsiDocumentManager.getInstance(psiFile.getProject()).getDocument(psiFile).insertString(placeToInsert, "()");
|
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