diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java index c39b450e6ff0..7e78a95db2f9 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java @@ -1255,7 +1255,6 @@ public class HighlightMethodUtil { if (hasNoBody) { if (isExtension) { description = JavaErrorMessages.message("extension.method.should.have.a.body"); - additionalFixes.add(QUICK_FIX_FACTORY.createAddMethodBodyFix(method)); } else if (isInterface) { if (isStatic && languageLevel.isAtLeast(LanguageLevel.JDK_1_8)) { @@ -1265,6 +1264,9 @@ public class HighlightMethodUtil { description = "Private methods in interfaces should have a body"; } } + if (description != null) { + additionalFixes.add(QUICK_FIX_FACTORY.createAddMethodBodyFix(method)); + } } else if (isInterface) { if (!isExtension && !isStatic && !isPrivate) { @@ -1280,6 +1282,7 @@ public class HighlightMethodUtil { } else if (isExtension) { description = JavaErrorMessages.message("extension.method.in.class"); + additionalFixes.add(QUICK_FIX_FACTORY.createModifierListFix(method, PsiModifier.DEFAULT, false, false)); } else if (method.hasModifierProperty(PsiModifier.ABSTRACT)) { description = JavaErrorMessages.message("abstract.methods.cannot.have.a.body"); @@ -1292,7 +1295,9 @@ public class HighlightMethodUtil { TextRange textRange = HighlightNamesUtil.getMethodDeclarationTextRange(method); HighlightInfo info = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(textRange).descriptionAndTooltip(description).create(); if (!hasNoBody) { - QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createDeleteMethodBodyFix(method)); + if (!isExtension) { + QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createDeleteMethodBodyFix(method)); + } QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createPushDownMethodFix()); } if (method.hasModifierProperty(PsiModifier.ABSTRACT) && !isInterface) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/afterAddBodyForStaticMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/afterAddBodyForStaticMethod.java new file mode 100644 index 000000000000..b637bf7cdb17 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/afterAddBodyForStaticMethod.java @@ -0,0 +1,7 @@ +// "Add method body" "true" + +interface Some { + public static void m() { + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/afterMakeNonDefault.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/afterMakeNonDefault.java new file mode 100644 index 000000000000..713849c841af --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/afterMakeNonDefault.java @@ -0,0 +1,6 @@ +// "Make 'm' not default" "true" + +class Some { + public void m() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeAddBodyForStaticMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeAddBodyForStaticMethod.java new file mode 100644 index 000000000000..b8de5dbf19d2 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeAddBodyForStaticMethod.java @@ -0,0 +1,5 @@ +// "Add method body" "true" + +interface Some { + public static void m(); +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeDeleteBodyForDefaultMethodInClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeDeleteBodyForDefaultMethodInClass.java new file mode 100644 index 000000000000..827efcb39232 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeDeleteBodyForDefaultMethodInClass.java @@ -0,0 +1,6 @@ +// "Delete method body" "false" + +class Some { + public default void m() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeMakeNonDefault.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeMakeNonDefault.java new file mode 100644 index 000000000000..edf2b5a7fbdb --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeMakeNonDefault.java @@ -0,0 +1,6 @@ +// "Make 'm' not default" "true" + +class Some { + public default void m() { + } +} \ No newline at end of file