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 9abea2e942c2..a7ae91fd10f7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/ConstructorInsertHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/ConstructorInsertHandler.java @@ -22,11 +22,13 @@ 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.Collection; +import java.util.Iterator; import java.util.List; /** @@ -221,6 +223,15 @@ public class ConstructorInsertHandler implements InsertHandler candidatesToImplement = OverrideImplementUtil.getMethodsToOverrideImplement(aClass, true); + if (PsiUtil.isLanguageLevel8OrHigher(aClass)) { + for (Iterator iterator = candidatesToImplement.iterator(); iterator.hasNext(); ) { + final CandidateInfo candidate = iterator.next(); + final PsiElement element = candidate.getElement(); + if (element instanceof PsiMethod && ((PsiMethod)element).hasModifierProperty(PsiModifier.DEFAULT)) { + iterator.remove(); + } + } + } boolean invokeOverride = candidatesToImplement.isEmpty(); if (invokeOverride){ OverrideImplementUtil.chooseAndOverrideOrImplementMethods(project, editor, aClass, false); diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IgnoreDefaultMethods-out.java b/java/java-tests/testData/codeInsight/completion/smartType/IgnoreDefaultMethods-out.java new file mode 100644 index 000000000000..f6b90f287be6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/IgnoreDefaultMethods-out.java @@ -0,0 +1,18 @@ +interface Predicate { + public boolean test(T t); + public default Predicate and(Predicate p) { + return null; + } +} + + +public class Test1 { + { + Predicate p = new Predicate() { + @Override + public boolean test(Object o) { + return false; //To change body of implemented methods use File | Settings | File Templates. + } + }; + } +} diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IgnoreDefaultMethods.java b/java/java-tests/testData/codeInsight/completion/smartType/IgnoreDefaultMethods.java new file mode 100644 index 000000000000..ea35c5cb45c5 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/IgnoreDefaultMethods.java @@ -0,0 +1,13 @@ +interface Predicate { + public boolean test(T t); + public default Predicate and(Predicate p) { + return null; + } +} + + +public class Test1 { + { + Predicate p = new Predic + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType18CompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType18CompletionTest.java index 06beba331d5c..f8ea1ba949bc 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType18CompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType18CompletionTest.java @@ -17,7 +17,6 @@ package com.intellij.codeInsight.completion; import com.intellij.JavaTestUtil; import com.intellij.codeInsight.lookup.Lookup; -import com.intellij.codeInsight.lookup.LookupElementPresentation; import com.intellij.testFramework.LightProjectDescriptor; import org.jetbrains.annotations.NotNull; @@ -63,6 +62,10 @@ public class SmartType18CompletionTest extends LightFixtureCompletionTestCase { doTest(); } + public void testIgnoreDefaultMethods() { + doTest(); + } + private void doTest() { configureByFile("/" + getTestName(false) + ".java"); assertNotNull(myItems);