diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/ConstructorInsertHandler.java b/java/java-impl/src/com/intellij/codeInsight/completion/ConstructorInsertHandler.java index b4abb4ee4e7d..ca4d5ea0a7de 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/ConstructorInsertHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/ConstructorInsertHandler.java @@ -5,13 +5,11 @@ import com.intellij.codeInsight.ExpectedTypesProvider; import com.intellij.codeInsight.generation.GenerateMembersUtil; import com.intellij.codeInsight.generation.OverrideImplementUtil; import com.intellij.codeInsight.generation.PsiGenerationInfo; -import com.intellij.codeInsight.generation.PsiMethodMember; import com.intellij.codeInsight.lookup.Lookup; import com.intellij.codeInsight.lookup.LookupElementDecorator; import com.intellij.codeInsight.lookup.LookupItem; import com.intellij.codeInsight.lookup.PsiTypeLookupItem; import com.intellij.featureStatistics.FeatureUsageTracker; -import com.intellij.ide.util.MemberChooser; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.command.UndoConfirmationPolicy; @@ -24,12 +22,10 @@ import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.impl.source.PostprocessReformattingAspect; import com.intellij.psi.infos.CandidateInfo; import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -224,7 +220,7 @@ public class ConstructorInsertHandler implements InsertHandler candidatesToImplement = OverrideImplementUtil.getMethodsToOverrideImplement(aClass, true); boolean invokeOverride = candidatesToImplement.isEmpty(); if (invokeOverride){ - chooseAndOverrideMethodsInAdapter(project, editor, aClass); + OverrideImplementUtil.chooseAndOverrideOrImplementMethods(project, editor, aClass, false); } else{ ApplicationManager.getApplication().runWriteAction(new Runnable() { @@ -247,59 +243,4 @@ public class ConstructorInsertHandler implements InsertHandler methods = new ArrayList(); - for (final PsiMethod method : allBaseMethods) { - if (OverrideImplementUtil.isOverridable(method)) { - methods.add(new PsiMethodMember(method, PsiSubstitutor.UNKNOWN)); - } - } - - boolean canInsertOverride = PsiUtil.isLanguageLevel5OrHigher(aClass) && (PsiUtil.isLanguageLevel6OrHigher(aClass) || !aClass.isInterface()); - final PsiMethodMember[] array = methods.toArray(new PsiMethodMember[methods.size()]); - final MemberChooser chooser = new MemberChooser(array, false, true, project, canInsertOverride); - chooser.setTitle(CompletionBundle.message("completion.smarttype.select.methods.to.override")); - chooser.setCopyJavadocVisible(true); - - chooser.show(); - List selected = chooser.getSelectedElements(); - if (selected == null || selected.isEmpty()) return; - - - try{ - final List> prototypes = OverrideImplementUtil.overrideOrImplementMethods(aClass, selected, chooser.isCopyJavadoc(), chooser.isInsertOverrideAnnotation()); - - final int offset = editor.getCaretModel().getOffset(); - - ApplicationManager.getApplication().runWriteAction(new Runnable() { - public void run() { - try{ - for (PsiGenerationInfo prototype : prototypes) { - PsiStatement[] statements = prototype.getPsiMember().getBody().getStatements(); - if (statements.length > 0 && PsiType.VOID.equals(prototype.getPsiMember().getReturnType())) { - statements[0].delete(); // remove "super(..)" call - } - } - - List> resultMembers = GenerateMembersUtil.insertMembersAtOffset(aClass.getContainingFile(), offset, prototypes); - resultMembers.get(0).positionCaret(editor, true); - } - catch(IncorrectOperationException e){ - LOG.error(e); - } - } - }); - } - catch(IncorrectOperationException ioe){ - LOG.error(ioe); - } - } - - } diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java index 8047c2579ffe..5bbfb33efc75 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java @@ -521,7 +521,7 @@ public class OverrideImplementUtil { chooseAndOverrideOrImplementMethods(project, editor, aClass, true); } - private static void chooseAndOverrideOrImplementMethods(final Project project, + public static void chooseAndOverrideOrImplementMethods(final Project project, final Editor editor, final PsiClass aClass, final boolean toImplement){ diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfAnonymousClasses-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfAnonymousClasses-out.java index eb27e9eea8ae..0b2d9e76e1c3 100644 --- a/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfAnonymousClasses-out.java +++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfAnonymousClasses-out.java @@ -1,6 +1,30 @@ class MyClass { public void foo() { MyDD d = new MyDD() { + @Override + public int hashCode() { + return super.hashCode(); //To change body of overridden methods use File | Settings | File Templates. + } + + @Override + public boolean equals(Object obj) { + return super.equals(obj); //To change body of overridden methods use File | Settings | File Templates. + } + + @Override + protected Object clone() throws CloneNotSupportedException { + return super.clone(); //To change body of overridden methods use File | Settings | File Templates. + } + + @Override + public String toString() { + return super.toString(); //To change body of overridden methods use File | Settings | File Templates. + } + + @Override + protected void finalize() throws Throwable { + super.finalize(); //To change body of overridden methods use File | Settings | File Templates. + } }; } } diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewAnonymousFunction-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NewAnonymousFunction-out.java index 77e97ce582be..3a4d6fb06f81 100644 --- a/java/java-tests/testData/codeInsight/completion/smartType/NewAnonymousFunction-out.java +++ b/java/java-tests/testData/codeInsight/completion/smartType/NewAnonymousFunction-out.java @@ -1,5 +1,29 @@ interface Function { } class A { private static final Function a = new Function() { - }; + @Override + public int hashCode() { + return super.hashCode(); //To change body of overridden methods use File | Settings | File Templates. + } + + @Override + public boolean equals(Object obj) { + return super.equals(obj); //To change body of overridden methods use File | Settings | File Templates. + } + + @Override + protected Object clone() throws CloneNotSupportedException { + return super.clone(); //To change body of overridden methods use File | Settings | File Templates. + } + + @Override + public String toString() { + return super.toString(); //To change body of overridden methods use File | Settings | File Templates. + } + + @Override + protected void finalize() throws Throwable { + super.finalize(); //To change body of overridden methods use File | Settings | File Templates. + } + }; } \ No newline at end of file