From 81f3f9b17eb861abf1d7535d9b2bd364b0ddf522 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 17 Jun 2016 17:21:59 +0300 Subject: [PATCH] make class static on unresolved 'static' method reference (IDEA-157364) --- .../daemon/impl/analysis/HighlightMethodUtil.java | 11 +++++++++++ .../afterInnerClassAsStaticMethodQualifier.java | 11 +++++++++++ .../beforeInnerClassAsStaticMethodQualifier.java | 11 +++++++++++ 3 files changed, 33 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeInnerStatic/afterInnerClassAsStaticMethodQualifier.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeInnerStatic/beforeInnerClassAsStaticMethodQualifier.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 87a13dfec4e2..42daf4dc4723 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 @@ -719,6 +719,17 @@ public class HighlightMethodUtil { PsiExpressionList list, PsiResolveHelper resolveHelper) { TextRange fixRange = getFixRange(methodCall); + final PsiExpression qualifierExpression = methodCall.getMethodExpression().getQualifierExpression(); + if (qualifierExpression instanceof PsiReferenceExpression) { + final PsiElement resolve = ((PsiReferenceExpression)qualifierExpression).resolve(); + if (resolve instanceof PsiClass && + ((PsiClass)resolve).getContainingClass() != null && + !((PsiClass)resolve).hasModifierProperty(PsiModifier.STATIC)) { + QuickFixAction.registerQuickFixAction(highlightInfo, + QUICK_FIX_FACTORY.createModifierListFix((PsiClass)resolve, PsiModifier.STATIC, true, false)); + } + } + QuickFixAction.registerQuickFixAction(highlightInfo, fixRange, QUICK_FIX_FACTORY.createCreateMethodFromUsageFix(methodCall)); QuickFixAction.registerQuickFixAction(highlightInfo, fixRange, QUICK_FIX_FACTORY.createCreateAbstractMethodFromUsageFix(methodCall)); QuickFixAction.registerQuickFixAction(highlightInfo, fixRange, QUICK_FIX_FACTORY.createCreateConstructorFromSuperFix(methodCall)); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeInnerStatic/afterInnerClassAsStaticMethodQualifier.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeInnerStatic/afterInnerClassAsStaticMethodQualifier.java new file mode 100644 index 000000000000..8ff2feeaef3b --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeInnerStatic/afterInnerClassAsStaticMethodQualifier.java @@ -0,0 +1,11 @@ +// "Make 'C2' static" "true" +class C { + + { + C2.staticMethod(); + } + + public static class C2 { + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeInnerStatic/beforeInnerClassAsStaticMethodQualifier.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeInnerStatic/beforeInnerClassAsStaticMethodQualifier.java new file mode 100644 index 000000000000..c75fdd2345a8 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeInnerStatic/beforeInnerClassAsStaticMethodQualifier.java @@ -0,0 +1,11 @@ +// "Make 'C2' static" "true" +class C { + + { + C2.staticMethod(); + } + + public class C2 { + + } +} \ No newline at end of file