diff --git a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties index 55dfd98eae5..8d2266dfaa0 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties +++ b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties @@ -28,6 +28,7 @@ remove.elvis.operator=Remove elvis operator remove.redundant.nullable=Remove redundant '?' remove.supertype.nullable=Remove '?' remove.nullable.family=Remove '?' +remove.spread.sign=Remove '*' remove.useless.import=Remove useless import for ''{0}'' remove.useless.import.family=Remove Useless Umport replace.operation.in.binary.expression=Replace operation in a binary expression diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java index f6283ce9eed..f3f05f6a98d 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java @@ -83,6 +83,8 @@ public class QuickFixes { factories.put(NON_ABSTRACT_FUNCTION_WITH_NO_BODY, addAbstractModifierFactory); factories.put(NON_ABSTRACT_FUNCTION_WITH_NO_BODY, addFunctionBodyFactory); + factories.put(NON_VARARG_SPREAD, RemoveSpreadFix.createFactory()); + factories.put(NON_MEMBER_FUNCTION_NO_BODY, addFunctionBodyFactory); factories.put(NOTHING_TO_OVERRIDE, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OVERRIDE_KEYWORD)); diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/RemoveSpreadFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/RemoveSpreadFix.java new file mode 100644 index 00000000000..ba7797ccece --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/RemoveSpreadFix.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.quickfix; + +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.impl.source.tree.LeafPsiElement; +import com.intellij.util.IncorrectOperationException; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.diagnostics.Diagnostic; +import org.jetbrains.jet.lexer.JetTokens; +import org.jetbrains.jet.plugin.JetBundle; + +public class RemoveSpreadFix extends JetIntentionAction{ + private final LeafPsiElement spreadSign; + + public RemoveSpreadFix(@NotNull LeafPsiElement element) { + super(element); + spreadSign = element; + } + + @NotNull + @Override + public String getText() { + return JetBundle.message("remove.spread.sign"); + } + + @NotNull + @Override + public String getFamilyName() { + return JetBundle.message("remove.spread.sign"); + } + + @Override + public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException { + spreadSign.delete(); + } + + public static JetIntentionActionFactory createFactory() { + return new JetIntentionActionFactory() { + @Override + public JetIntentionAction createAction(Diagnostic diagnostic) { + PsiElement element = diagnostic.getPsiElement(); + if ((element instanceof LeafPsiElement) && ((LeafPsiElement) element).getElementType() == JetTokens.MUL) { + return new RemoveSpreadFix((LeafPsiElement) element); + } + else return null; + } + }; + } +} diff --git a/idea/testData/quickfix/checkArguments/afterNonVarargSpread.kt b/idea/testData/quickfix/checkArguments/afterNonVarargSpread.kt new file mode 100644 index 00000000000..e88ea016f23 --- /dev/null +++ b/idea/testData/quickfix/checkArguments/afterNonVarargSpread.kt @@ -0,0 +1,12 @@ +// "Remove '*'" "true" +fun join(x : Int, vararg a : String) : String { + val b = StringBuilder(x.toString()) + for (s in a) { + b.append(s) + } + return b.toString() +} + +fun main(args : Array) { + join(1, "2") +} \ No newline at end of file diff --git a/idea/testData/quickfix/checkArguments/beforeNonVarargSpread.kt b/idea/testData/quickfix/checkArguments/beforeNonVarargSpread.kt new file mode 100644 index 00000000000..9dedc29bfce --- /dev/null +++ b/idea/testData/quickfix/checkArguments/beforeNonVarargSpread.kt @@ -0,0 +1,12 @@ +// "Remove '*'" "true" +fun join(x : Int, vararg a : String) : String { + val b = StringBuilder(x.toString()) + for (s in a) { + b.append(s) + } + return b.toString() +} + +fun main(args : Array) { + join(*1, "2") +} \ 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 89c900a81e7..6271df80345 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java @@ -31,7 +31,7 @@ import org.jetbrains.jet.plugin.quickfix.AbstractQuickFixTest; /** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @TestMetadata("idea/testData/quickfix") -@InnerTestClasses({QuickFixTestGenerated.Abstract.class, QuickFixTestGenerated.AddStarProjections.class, QuickFixTestGenerated.AutoImports.class, QuickFixTestGenerated.Expressions.class, QuickFixTestGenerated.Migration.class, QuickFixTestGenerated.Modifiers.class, QuickFixTestGenerated.Nullables.class, QuickFixTestGenerated.Override.class, QuickFixTestGenerated.SupertypeInitialization.class, QuickFixTestGenerated.TypeAddition.class, QuickFixTestGenerated.TypeImports.class, QuickFixTestGenerated.TypeProjection.class, QuickFixTestGenerated.UselessImports.class, QuickFixTestGenerated.Variables.class, QuickFixTestGenerated.When.class}) +@InnerTestClasses({QuickFixTestGenerated.Abstract.class, QuickFixTestGenerated.AddStarProjections.class, QuickFixTestGenerated.AutoImports.class, QuickFixTestGenerated.CheckArguments.class, QuickFixTestGenerated.Expressions.class, QuickFixTestGenerated.Migration.class, QuickFixTestGenerated.Modifiers.class, QuickFixTestGenerated.Nullables.class, QuickFixTestGenerated.Override.class, QuickFixTestGenerated.SupertypeInitialization.class, QuickFixTestGenerated.TypeAddition.class, QuickFixTestGenerated.TypeImports.class, QuickFixTestGenerated.TypeProjection.class, QuickFixTestGenerated.UselessImports.class, QuickFixTestGenerated.Variables.class, QuickFixTestGenerated.When.class}) public class QuickFixTestGenerated extends AbstractQuickFixTest { public void testAllFilesPresentInQuickfix() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix"), Pattern.compile("^before(\\w+)\\.kt$"), true); @@ -310,6 +310,19 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { } + @TestMetadata("idea/testData/quickfix/checkArguments") + public static class CheckArguments extends AbstractQuickFixTest { + public void testAllFilesPresentInCheckArguments() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/checkArguments"), Pattern.compile("^before(\\w+)\\.kt$"), true); + } + + @TestMetadata("beforeNonVarargSpread.kt") + public void testNonVarargSpread() throws Exception { + doTest("idea/testData/quickfix/checkArguments/beforeNonVarargSpread.kt"); + } + + } + @TestMetadata("idea/testData/quickfix/expressions") public static class Expressions extends AbstractQuickFixTest { public void testAllFilesPresentInExpressions() throws Exception { @@ -955,6 +968,7 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { suite.addTestSuite(Abstract.class); suite.addTest(AddStarProjections.innerSuite()); suite.addTestSuite(AutoImports.class); + suite.addTestSuite(CheckArguments.class); suite.addTestSuite(Expressions.class); suite.addTestSuite(Migration.class); suite.addTest(Modifiers.innerSuite());