From 479cd228548f08c54f8d7936a9ee444c95ad68ac Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 23 May 2019 12:12:37 +0200 Subject: [PATCH] interface methods: adjust fixes to add/delete body (IDEA-212082) GitOrigin-RevId: 4ecf568f2b8ed16ec0d11a56feaf2043b244302f --- .../daemon/impl/analysis/HighlightMethodUtil.java | 9 +++++++-- .../quickFix/modifier18/afterAddBodyForStaticMethod.java | 7 +++++++ .../quickFix/modifier18/afterMakeNonDefault.java | 6 ++++++ .../modifier18/beforeAddBodyForStaticMethod.java | 5 +++++ .../beforeDeleteBodyForDefaultMethodInClass.java | 6 ++++++ .../quickFix/modifier18/beforeMakeNonDefault.java | 6 ++++++ 6 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/afterAddBodyForStaticMethod.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/afterMakeNonDefault.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeAddBodyForStaticMethod.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeDeleteBodyForDefaultMethodInClass.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeMakeNonDefault.java 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