From de2d0de27f52b1a0e0b8dea38b5846ae63393b74 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 27 Aug 2018 13:12:22 +0300 Subject: [PATCH] make static: remove inappropriate modifiers, add method body if needed (IDEA-197813) --- .../daemon/impl/quickfix/ModifierFix.java | 17 +++++++++++++---- .../modifier/afterAbstractToBeStatic.java | 11 +++++++++++ .../modifier/beforeAbstractToBeStatic.java | 10 ++++++++++ .../modifier18/afterDefaultMakeStatic.java | 12 ++++++++++++ .../modifier18/beforeDefaultMakeStatic.java | 12 ++++++++++++ 5 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterAbstractToBeStatic.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeAbstractToBeStatic.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/afterDefaultMakeStatic.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeDefaultMakeStatic.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ModifierFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ModifierFix.java index 054047a1f505..7ee82bf5e111 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ModifierFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ModifierFix.java @@ -192,8 +192,8 @@ public class ModifierFix extends LocalQuickFixAndIntentionActionOnPsiElement { ApplicationManager.getApplication().runWriteAction(() -> { changeModifierList(modifierList); if (myShouldHave && owner instanceof PsiMethod) { + final PsiMethod method = (PsiMethod)owner; if (PsiModifier.ABSTRACT.equals(myModifier)) { - final PsiMethod method = (PsiMethod)owner; final PsiClass aClass = method.getContainingClass(); if (aClass != null && !aClass.hasModifierProperty(PsiModifier.ABSTRACT)) { PsiModifierList classModifierList = aClass.getModifierList(); @@ -203,13 +203,22 @@ public class ModifierFix extends LocalQuickFixAndIntentionActionOnPsiElement { } } else if (PsiModifier.PUBLIC.equals(myModifier) && - ((PsiMethod)owner).getBody() != null && - !((PsiMethod)owner).hasModifierProperty(PsiModifier.STATIC)) { - PsiClass containingClass = ((PsiMethod)owner).getContainingClass(); + method.getBody() != null && + !method.hasModifierProperty(PsiModifier.STATIC)) { + PsiClass containingClass = method.getContainingClass(); if (containingClass != null && containingClass.isInterface()) { modifierList.setModifierProperty(PsiModifier.DEFAULT, true); } } + else if (PsiModifier.STATIC.equals(myModifier)) { + if (method.hasModifierProperty(PsiModifier.DEFAULT)) { + modifierList.setModifierProperty(PsiModifier.DEFAULT, false); + } + else if (method.hasModifierProperty(PsiModifier.ABSTRACT)) { + PsiUtil.setModifierProperty(method, PsiModifier.ABSTRACT, false); + CreateFromUsageUtils.setupMethodBody(method); + } + } } UndoUtil.markPsiFileForUndo(containingFile); }); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterAbstractToBeStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterAbstractToBeStatic.java new file mode 100644 index 000000000000..3612c484a221 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterAbstractToBeStatic.java @@ -0,0 +1,11 @@ +// "Make 'foo' static" "true" +abstract class F { + static void foo() { + } +} + +class B { + { + F.foo(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeAbstractToBeStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeAbstractToBeStatic.java new file mode 100644 index 000000000000..26fdbd3928e0 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeAbstractToBeStatic.java @@ -0,0 +1,10 @@ +// "Make 'foo' static" "true" +abstract class F { + abstract void foo(); +} + +class B { + { + F.foo(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/afterDefaultMakeStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/afterDefaultMakeStatic.java new file mode 100644 index 000000000000..ca5df0dd8f7d --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/afterDefaultMakeStatic.java @@ -0,0 +1,12 @@ +// "Make 'foo' static" "true" +interface I { + static void foo() { + System.out.println(); + } +} + +class B { + { + I.foo(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeDefaultMakeStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeDefaultMakeStatic.java new file mode 100644 index 000000000000..d5c92a9019fd --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier18/beforeDefaultMakeStatic.java @@ -0,0 +1,12 @@ +// "Make 'foo' static" "true" +interface I { + default void foo() { + System.out.println(); + } +} + +class B { + { + I.foo(); + } +} \ No newline at end of file