From ef93a71e78cd96bfed6a65e954e1a344807c38e3 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 10 Oct 2014 22:21:34 +0400 Subject: [PATCH] Made "Remove val/var from parameter" quick fix local. --- .../jetbrains/jet/plugin/JetBundle.properties | 2 +- .../plugin/quickfix/QuickFixRegistrar.java | 8 +- .../RemoveValVarFromParametersFix.java | 73 +++++++------------ .../migration/afterValVarFromParameters.kt | 18 ----- .../migration/beforeValVarFromParameters.kt | 18 ----- .../afterCatchParameter.kt | 8 ++ .../afterFunParameter.kt | 3 + .../afterLoopParameter.kt | 6 ++ .../beforeCatchParameter.kt | 8 ++ .../beforeConstructorParameter.kt | 3 + .../beforeFunParameter.kt | 3 + .../beforeLoopParameter.kt | 6 ++ .../quickfix/QuickFixTestGenerated.java | 42 +++++++++-- 13 files changed, 105 insertions(+), 93 deletions(-) delete mode 100644 idea/testData/quickfix/migration/afterValVarFromParameters.kt delete mode 100644 idea/testData/quickfix/migration/beforeValVarFromParameters.kt create mode 100644 idea/testData/quickfix/variables/removeValVarFromParameter/afterCatchParameter.kt create mode 100644 idea/testData/quickfix/variables/removeValVarFromParameter/afterFunParameter.kt create mode 100644 idea/testData/quickfix/variables/removeValVarFromParameter/afterLoopParameter.kt create mode 100644 idea/testData/quickfix/variables/removeValVarFromParameter/beforeCatchParameter.kt create mode 100644 idea/testData/quickfix/variables/removeValVarFromParameter/beforeConstructorParameter.kt create mode 100644 idea/testData/quickfix/variables/removeValVarFromParameter/beforeFunParameter.kt create mode 100644 idea/testData/quickfix/variables/removeValVarFromParameter/beforeLoopParameter.kt diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties b/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties index 0b5ffe4cb42..95f42359bcc 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties @@ -171,7 +171,7 @@ options.kotlin.attribute.descriptor.smart.cast=Smart-cast value options.kotlin.attribute.descriptor.label=Label change.to.function.invocation=Change to function invocation migrate.sure=Replace sure() calls by !! in project -remove.val.var.from.parameter=Remove val/var from function, loop and catch parameters in project +remove.val.var.from.parameter=Remove ''{0}'' from parameter add.override.to.equals.hashCode.toString=Add 'override' to equals, hashCode, toString in project add.when.else.branch.action.family.name=Add Else Branch add.when.else.branch.action=Add else branch diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixRegistrar.java b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixRegistrar.java index 1c51c136b49..fbafc609ce1 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixRegistrar.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixRegistrar.java @@ -141,10 +141,10 @@ public class QuickFixRegistrar { QuickFixes.actions.put(VAL_REASSIGNMENT, changeVariableMutabilityFix); QuickFixes.actions.put(VAR_OVERRIDDEN_BY_VAL, changeVariableMutabilityFix); - RemoveValVarFromParametersFix removeValVarFromParametersFix = new RemoveValVarFromParametersFix(); - QuickFixes.actions.put(VAL_OR_VAR_ON_FUN_PARAMETER, removeValVarFromParametersFix); - QuickFixes.actions.put(VAL_OR_VAR_ON_LOOP_PARAMETER, removeValVarFromParametersFix); - QuickFixes.actions.put(VAL_OR_VAR_ON_CATCH_PARAMETER, removeValVarFromParametersFix); + JetSingleIntentionActionFactory removeValVarFromParameterFixFactory = RemoveValVarFromParametersFix.createFactory(); + QuickFixes.factories.put(VAL_OR_VAR_ON_FUN_PARAMETER, removeValVarFromParameterFixFactory); + QuickFixes.factories.put(VAL_OR_VAR_ON_LOOP_PARAMETER, removeValVarFromParameterFixFactory); + QuickFixes.factories.put(VAL_OR_VAR_ON_CATCH_PARAMETER, removeValVarFromParameterFixFactory); QuickFixes.factories.put(VIRTUAL_MEMBER_HIDDEN, AddOverrideToEqualsHashCodeToStringFix.createFactory()); diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/RemoveValVarFromParametersFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/RemoveValVarFromParametersFix.java index 9d1c33b3105..c08dd97a2b9 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/RemoveValVarFromParametersFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/RemoveValVarFromParametersFix.java @@ -20,69 +20,52 @@ import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.lang.ASTNode; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; import com.intellij.psi.TokenType; +import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.diagnostics.Diagnostic; +import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.psi.JetParameter; import org.jetbrains.jet.plugin.JetBundle; -import org.jetbrains.jet.plugin.project.PluginJetFilesProvider; -import java.util.Collection; +public class RemoveValVarFromParametersFix extends JetIntentionAction { + public RemoveValVarFromParametersFix(@NotNull JetParameter element) { + super(element); + } -public class RemoveValVarFromParametersFix implements IntentionAction { @NotNull @Override public String getText() { - return JetBundle.message("remove.val.var.from.parameter"); + ASTNode valOrVarNode = element.getValOrVarNode(); + return JetBundle.message("remove.val.var.from.parameter", valOrVarNode != null ? valOrVarNode.getText() : "null"); } @NotNull @Override public String getFamilyName() { - return JetBundle.message("remove.val.var.from.parameter"); + return JetBundle.message("remove.val.var.from.parameter", "val/var"); } @Override - public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { - return file.getManager().isInProject(file); + protected void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { + ASTNode valOrVarNode = element.getValOrVarNode(); + if (valOrVarNode == null) return; + + ASTNode whitespace = valOrVarNode.getTreeNext(); + assert whitespace.getElementType() == TokenType.WHITE_SPACE; + + element.getNode().removeRange(valOrVarNode, whitespace.getTreeNext()); } - @Override - public void invoke(@NotNull Project project, Editor editor, PsiFile file) { - // TODO after M6, this quick fix should remove val/var only for current parameter - Collection files = PluginJetFilesProvider.allFilesInProject(project); - for (JetFile jetFile : files) { - jetFile.acceptChildren(new JetVisitorVoid() { - @Override - public void visitParameter(@NotNull JetParameter parameter) { - visitJetElement(parameter); // run recursively for children - - PsiElement parent = parameter.getParent(); - if (parent != null && parent.getParent() instanceof JetClass) { - return; // constructor parameter - } - - ASTNode valOrVarNode = parameter.getValOrVarNode(); - if (valOrVarNode != null) { - ASTNode whitespace = valOrVarNode.getTreeNext(); - assert whitespace.getElementType() == TokenType.WHITE_SPACE; - - parameter.getNode().removeRange(valOrVarNode, whitespace.getTreeNext()); - } - } - - @Override - public void visitJetElement(@NotNull JetElement element) { - element.acceptChildren(this); - } - }); - } - } - - @Override - public boolean startInWriteAction() { - return true; + public static JetSingleIntentionActionFactory createFactory() { + return new JetSingleIntentionActionFactory() { + @Nullable + @Override + public IntentionAction createAction(@NotNull Diagnostic diagnostic) { + return new RemoveValVarFromParametersFix((JetParameter) diagnostic.getPsiElement().getParent()); + } + }; } } diff --git a/idea/testData/quickfix/migration/afterValVarFromParameters.kt b/idea/testData/quickfix/migration/afterValVarFromParameters.kt deleted file mode 100644 index 2ebcc27260e..00000000000 --- a/idea/testData/quickfix/migration/afterValVarFromParameters.kt +++ /dev/null @@ -1,18 +0,0 @@ -// "Remove val/var from function, loop and catch parameters in project" "true" - -class Class(a: Int, val b: Int, var c: Int, vararg val d: Int) { - -} - -fun f(a: Int, b: Int, c: Int, vararg d: Int) { - for (i in d) { - } - for (i in d) { - } - - try { - } catch (e: Exception) { - } catch (e: Exception) { - } catch (e: Exception) { - } -} \ No newline at end of file diff --git a/idea/testData/quickfix/migration/beforeValVarFromParameters.kt b/idea/testData/quickfix/migration/beforeValVarFromParameters.kt deleted file mode 100644 index 65273b9740e..00000000000 --- a/idea/testData/quickfix/migration/beforeValVarFromParameters.kt +++ /dev/null @@ -1,18 +0,0 @@ -// "Remove val/var from function, loop and catch parameters in project" "true" - -class Class(a: Int, val b: Int, var c: Int, vararg val d: Int) { - -} - -fun f(a: Int, val b: Int, var c: Int, vararg val d: Int) { - for (val i in d) { - } - for (var i in d) { - } - - try { - } catch (val e: Exception) { - } catch (var e: Exception) { - } catch (e: Exception) { - } -} \ No newline at end of file diff --git a/idea/testData/quickfix/variables/removeValVarFromParameter/afterCatchParameter.kt b/idea/testData/quickfix/variables/removeValVarFromParameter/afterCatchParameter.kt new file mode 100644 index 00000000000..dc0da560c69 --- /dev/null +++ b/idea/testData/quickfix/variables/removeValVarFromParameter/afterCatchParameter.kt @@ -0,0 +1,8 @@ +// "Remove 'val' from parameter" "true" +fun f() { + try { + + } catch (e: Exception) { + + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/variables/removeValVarFromParameter/afterFunParameter.kt b/idea/testData/quickfix/variables/removeValVarFromParameter/afterFunParameter.kt new file mode 100644 index 00000000000..38cc3c37bde --- /dev/null +++ b/idea/testData/quickfix/variables/removeValVarFromParameter/afterFunParameter.kt @@ -0,0 +1,3 @@ +// "Remove 'val' from parameter" "true" +fun f(x: String) { +} \ No newline at end of file diff --git a/idea/testData/quickfix/variables/removeValVarFromParameter/afterLoopParameter.kt b/idea/testData/quickfix/variables/removeValVarFromParameter/afterLoopParameter.kt new file mode 100644 index 00000000000..85d04a36ef1 --- /dev/null +++ b/idea/testData/quickfix/variables/removeValVarFromParameter/afterLoopParameter.kt @@ -0,0 +1,6 @@ +// "Remove 'val' from parameter" "true" +fun f(list: List) { + for (x in list) { + + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/variables/removeValVarFromParameter/beforeCatchParameter.kt b/idea/testData/quickfix/variables/removeValVarFromParameter/beforeCatchParameter.kt new file mode 100644 index 00000000000..d148425f8a7 --- /dev/null +++ b/idea/testData/quickfix/variables/removeValVarFromParameter/beforeCatchParameter.kt @@ -0,0 +1,8 @@ +// "Remove 'val' from parameter" "true" +fun f() { + try { + + } catch (val e: Exception) { + + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/variables/removeValVarFromParameter/beforeConstructorParameter.kt b/idea/testData/quickfix/variables/removeValVarFromParameter/beforeConstructorParameter.kt new file mode 100644 index 00000000000..5a8b691b9bf --- /dev/null +++ b/idea/testData/quickfix/variables/removeValVarFromParameter/beforeConstructorParameter.kt @@ -0,0 +1,3 @@ +// "Remove 'val' from parameter" "false" +class C(val x: String) { +} \ No newline at end of file diff --git a/idea/testData/quickfix/variables/removeValVarFromParameter/beforeFunParameter.kt b/idea/testData/quickfix/variables/removeValVarFromParameter/beforeFunParameter.kt new file mode 100644 index 00000000000..4b4d077e77d --- /dev/null +++ b/idea/testData/quickfix/variables/removeValVarFromParameter/beforeFunParameter.kt @@ -0,0 +1,3 @@ +// "Remove 'val' from parameter" "true" +fun f(val x: String) { +} \ No newline at end of file diff --git a/idea/testData/quickfix/variables/removeValVarFromParameter/beforeLoopParameter.kt b/idea/testData/quickfix/variables/removeValVarFromParameter/beforeLoopParameter.kt new file mode 100644 index 00000000000..67a2528231c --- /dev/null +++ b/idea/testData/quickfix/variables/removeValVarFromParameter/beforeLoopParameter.kt @@ -0,0 +1,6 @@ +// "Remove 'val' from parameter" "true" +fun f(list: List) { + for (val x in list) { + + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java index 400c28644d4..d12086b3ac9 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java @@ -1799,12 +1799,6 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/migration"), Pattern.compile("^before(\\w+)\\.kt$"), true); } - @TestMetadata("beforeValVarFromParameters.kt") - public void testValVarFromParameters() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/migration/beforeValVarFromParameters.kt"); - doTest(fileName); - } - } @TestMetadata("idea/testData/quickfix/modifiers") @@ -3746,7 +3740,7 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { @TestMetadata("idea/testData/quickfix/variables") @TestDataPath("$PROJECT_ROOT") - @InnerTestClasses({Variables.ChangeMutability.class, Variables.ChangeToBackingField.class, Variables.ChangeToFunctionInvocation.class, Variables.ChangeToPropertyName.class}) + @InnerTestClasses({Variables.ChangeMutability.class, Variables.ChangeToBackingField.class, Variables.ChangeToFunctionInvocation.class, Variables.ChangeToPropertyName.class, Variables.RemoveValVarFromParameter.class}) @RunWith(org.jetbrains.jet.JUnit3RunnerWithInners.class) public static class Variables extends AbstractQuickFixTest { public void testAllFilesPresentInVariables() throws Exception { @@ -3883,6 +3877,40 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { } + @TestMetadata("idea/testData/quickfix/variables/removeValVarFromParameter") + @TestDataPath("$PROJECT_ROOT") + @RunWith(org.jetbrains.jet.JUnit3RunnerWithInners.class) + public static class RemoveValVarFromParameter extends AbstractQuickFixTest { + public void testAllFilesPresentInRemoveValVarFromParameter() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/variables/removeValVarFromParameter"), Pattern.compile("^before(\\w+)\\.kt$"), true); + } + + @TestMetadata("beforeCatchParameter.kt") + public void testCatchParameter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/variables/removeValVarFromParameter/beforeCatchParameter.kt"); + doTest(fileName); + } + + @TestMetadata("beforeConstructorParameter.kt") + public void testConstructorParameter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/variables/removeValVarFromParameter/beforeConstructorParameter.kt"); + doTest(fileName); + } + + @TestMetadata("beforeFunParameter.kt") + public void testFunParameter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/variables/removeValVarFromParameter/beforeFunParameter.kt"); + doTest(fileName); + } + + @TestMetadata("beforeLoopParameter.kt") + public void testLoopParameter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/variables/removeValVarFromParameter/beforeLoopParameter.kt"); + doTest(fileName); + } + + } + } @TestMetadata("idea/testData/quickfix/when")