From 3430c6e7f19b3a427ed0427f71607aa1627b9f34 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 5 Jan 2018 17:07:39 +0100 Subject: [PATCH] disable parameter can be local for overridden methods (IDEA-159001) --- .../ParameterCanBeLocalInspectionBase.java | 3 +- .../afterFor.java | 2 +- .../afterIf.java | 2 +- .../afterJavadocRef.java | 2 +- .../afterSimple.java | 2 +- .../afterUpdateCallers.java | 2 +- .../afterUpdateCallers1.java | 2 +- .../beforeFor.java | 2 +- .../beforeIf.java | 2 +- .../beforeJavadocRef.java | 2 +- .../beforeOverriden.java | 14 +++++++++ .../beforeSimple.java | 2 +- .../beforeUpdateCallers.java | 2 +- .../beforeUpdateCallers1.java | 2 +- .../ConvertParameterToLocalVariableTest.java | 29 +++++-------------- 15 files changed, 36 insertions(+), 34 deletions(-) create mode 100644 java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeOverriden.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/ParameterCanBeLocalInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/ParameterCanBeLocalInspectionBase.java index bab1d0779ac0..7114507bbd9d 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/ParameterCanBeLocalInspectionBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/ParameterCanBeLocalInspectionBase.java @@ -6,6 +6,7 @@ import com.intellij.codeInspection.*; import com.intellij.psi.*; import com.intellij.psi.controlFlow.*; import com.intellij.psi.search.searches.SuperMethodsSearch; +import com.siyeh.ig.psiutils.MethodUtils; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -92,7 +93,7 @@ public class ParameterCanBeLocalInspectionBase extends AbstractBaseJavaLocalInsp public ProblemDescriptor[] checkMethod(@NotNull PsiMethod method, @NotNull InspectionManager manager, boolean isOnTheFly) { final Collection parameters = filterFinal(method.getParameterList().getParameters()); final PsiCodeBlock body = method.getBody(); - if (body == null || parameters.isEmpty() || isOverrides(method)) { + if (body == null || parameters.isEmpty() || isOverrides(method) || MethodUtils.isOverridden(method)) { return ProblemDescriptor.EMPTY_ARRAY; } diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterFor.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterFor.java index ce8711eb6de5..b0b1b428a968 100644 --- a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterFor.java +++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterFor.java @@ -1,4 +1,4 @@ -// "Convert to local variable" "true" +// "Convert to local" "true" class Temp { public Temp() { for (int i = 0; i < 10; i++) { diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterIf.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterIf.java index e6d8f7518700..fb0ca96b9529 100644 --- a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterIf.java +++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterIf.java @@ -1,4 +1,4 @@ -// "Convert to local variable" "true" +// "Convert to local" "true" class Temp { public boolean flag; diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterJavadocRef.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterJavadocRef.java index 2b9f5cb7579b..d5e4bef444bb 100644 --- a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterJavadocRef.java +++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterJavadocRef.java @@ -1,4 +1,4 @@ -// "Convert to local variable" "true" +// "Convert to local" "true" class Temp { /** */ diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterSimple.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterSimple.java index f692ff1cafbc..0668130ddaaf 100644 --- a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterSimple.java +++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterSimple.java @@ -1,4 +1,4 @@ -// "Convert to local variable" "true" +// "Convert to local" "true" class Temp { void test() { diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers.java index bbda71138d59..4588da0d0739 100644 --- a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers.java +++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers.java @@ -1,4 +1,4 @@ -// "Convert to local variable" "true" +// "Convert to local" "true" class Temp { void foo() { diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers1.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers1.java index b9c031872b39..134f176c0616 100644 --- a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers1.java +++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers1.java @@ -1,4 +1,4 @@ -// "Convert to local variable" "true" +// "Convert to local" "true" class Temp { void foo(int k) { diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeFor.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeFor.java index 598b23780897..6296690218f9 100644 --- a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeFor.java +++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeFor.java @@ -1,4 +1,4 @@ -// "Convert to local variable" "true" +// "Convert to local" "true" class Temp { public Temp(int p) { for (int i = 0; i < 10; i++) { diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeIf.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeIf.java index 6dc3bb16c1ac..b6d5e3f0dca0 100644 --- a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeIf.java +++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeIf.java @@ -1,4 +1,4 @@ -// "Convert to local variable" "true" +// "Convert to local" "true" class Temp { public boolean flag; diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeJavadocRef.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeJavadocRef.java index bbd5b5ff6903..a419661955cf 100644 --- a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeJavadocRef.java +++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeJavadocRef.java @@ -1,4 +1,4 @@ -// "Convert to local variable" "true" +// "Convert to local" "true" class Temp { /** * @param x diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeOverriden.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeOverriden.java new file mode 100644 index 000000000000..0c0d8e2d890e --- /dev/null +++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeOverriden.java @@ -0,0 +1,14 @@ +// "Convert to local" "false" +class A { + void foo(int i) { + i = 3; + System.out.println("i = " + i); + } +} + +class B extends A { + @Override + void foo(int i) { + System.out.println("i = " + i); // becomes uncompilable + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeSimple.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeSimple.java index cf03ce27246c..82ac31b566a0 100644 --- a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeSimple.java +++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeSimple.java @@ -1,4 +1,4 @@ -// "Convert to local variable" "true" +// "Convert to local" "true" class Temp { void test(int p) { diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers.java index 441d50330569..65f123eb3122 100644 --- a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers.java +++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers.java @@ -1,4 +1,4 @@ -// "Convert to local variable" "true" +// "Convert to local" "true" class Temp { void foo(int x) { diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers1.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers1.java index e84b3737f8ca..5b85e973f048 100644 --- a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers1.java +++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers1.java @@ -1,4 +1,4 @@ -// "Convert to local variable" "true" +// "Convert to local" "true" class Temp { void foo(int x, int k) { diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/ConvertParameterToLocalVariableTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/ConvertParameterToLocalVariableTest.java index 262749df8375..fbbea7676f43 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/ConvertParameterToLocalVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/ConvertParameterToLocalVariableTest.java @@ -17,14 +17,9 @@ package com.intellij.java.codeInspection; import com.intellij.JavaTestUtil; -import com.intellij.codeInsight.daemon.quickFix.ActionHint; import com.intellij.codeInsight.daemon.quickFix.LightQuickFixParameterizedTestCase; -import com.intellij.codeInspection.InspectionManager; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.codeInspection.ProblemHighlightType; +import com.intellij.codeInspection.LocalInspectionTool; import com.intellij.codeInspection.varScopeCanBeNarrowed.ParameterCanBeLocalInspection; -import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -35,25 +30,17 @@ public class ConvertParameterToLocalVariableTest extends LightQuickFixParameteri return JavaTestUtil.getJavaTestDataPath() + "/inspection"; } + @NotNull + @Override + protected LocalInspectionTool[] configureLocalInspectionTools() { + return new LocalInspectionTool[]{new ParameterCanBeLocalInspection()}; + } + + public void test() { doAllTests(); } - @Override - protected void doAction(@NotNull final ActionHint actionHint, final String testFullPath, final String testName) { - - final LocalQuickFix fix = new ParameterCanBeLocalInspection.ConvertParameterToLocalQuickFix(); - final int offset = getEditor().getCaretModel().getOffset(); - final PsiElement psiElement = getFile().findElementAt(offset); - assert psiElement != null; - final InspectionManager manager = InspectionManager.getInstance(getProject()); - final ProblemDescriptor descriptor = manager.createProblemDescriptor(psiElement, "", fix, ProblemHighlightType.LIKE_UNUSED_SYMBOL, true); - fix.applyFix(getProject(), descriptor); - final String expectedFilePath = getBasePath() + "/after" + testName; - checkResultByFile("In file :" + expectedFilePath, expectedFilePath, false); - } - - @Override @NonNls protected String getBasePath() {