From 6ca3a9fe9f3d7ed67932913a33f3340ce745b61b Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 8 Oct 2015 21:05:40 +0200 Subject: [PATCH] quickfix to add 'infix' modifier --- .../kotlin/idea/inspections/OperatorModifierInspection.kt | 5 +++-- .../jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt | 6 ++++-- idea/testData/quickfix/modifiers/infixModifier.kt | 8 ++++++++ idea/testData/quickfix/modifiers/infixModifier.kt.after | 8 ++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 6 ++++++ 5 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 idea/testData/quickfix/modifiers/infixModifier.kt create mode 100644 idea/testData/quickfix/modifiers/infixModifier.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/OperatorModifierInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/OperatorModifierInspection.kt index 63a52a1f075..333f8498e0e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/OperatorModifierInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/OperatorModifierInspection.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.idea.quickfix.AddModifierFix import org.jetbrains.kotlin.idea.quickfix.CleanupFix import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor +import org.jetbrains.kotlin.lexer.JetModifierKeywordToken import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.JetClassOrObject import org.jetbrains.kotlin.psi.JetModifierListOwner @@ -124,11 +125,11 @@ private class AddModifierLocalQuickFix() : LocalQuickFix { } } -object OperatorModifierFixFactory : JetSingleIntentionActionFactory() { +class ModifierFixFactory(val token: JetModifierKeywordToken) : JetSingleIntentionActionFactory() { override fun createAction(diagnostic: Diagnostic): IntentionAction? { val functionDescriptor = (diagnostic as? DiagnosticWithParameters2<*, *, *>)?.a as? FunctionDescriptor ?: return null val target = DescriptorToSourceUtilsIde.getAnyDeclaration(diagnostic.psiFile.project, functionDescriptor) as? JetModifierListOwner ?: return null - return object : AddModifierFix(target, JetTokens.OPERATOR_KEYWORD), CleanupFix {} + return object : AddModifierFix(target, token), CleanupFix {} } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt index 0e4067b2323..0b53da64d9e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticFactory import org.jetbrains.kotlin.diagnostics.Errors.* import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMembersHandler import org.jetbrains.kotlin.idea.inspections.AddReflectionQuickFix -import org.jetbrains.kotlin.idea.inspections.OperatorModifierFixFactory +import org.jetbrains.kotlin.idea.inspections.ModifierFixFactory import org.jetbrains.kotlin.idea.intentions.IntroduceBackingPropertyFix import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable.* import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.CreateClassFromCallWithConstructorCalleeActionFactory @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createVariable.CreateP import org.jetbrains.kotlin.idea.quickfix.migration.MigrateTypeParameterListFix import org.jetbrains.kotlin.idea.quickfix.replaceWith.DeprecatedSymbolUsageFix import org.jetbrains.kotlin.idea.quickfix.replaceWith.DeprecatedSymbolUsageInWholeProjectFix +import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.lexer.JetTokens.* import org.jetbrains.kotlin.psi.JetClass import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm @@ -331,7 +332,8 @@ public class QuickFixRegistrar : QuickFixContributor { BACKING_FIELD_USAGE_DEPRECATED.registerFactory(MigrateBackingFieldUsageFix) BACKING_FIELD_USAGE_DEPRECATED.registerFactory(IntroduceBackingPropertyFix) - OPERATOR_MODIFIER_REQUIRED.registerFactory(OperatorModifierFixFactory) + OPERATOR_MODIFIER_REQUIRED.registerFactory(ModifierFixFactory(JetTokens.OPERATOR_KEYWORD)) + INFIX_MODIFIER_REQUIRED.registerFactory(ModifierFixFactory(JetTokens.INFIX_KEYWORD)) UNDERSCORE_IS_DEPRECATED.registerFactory(RenameUnderscoreFix) diff --git a/idea/testData/quickfix/modifiers/infixModifier.kt b/idea/testData/quickfix/modifiers/infixModifier.kt new file mode 100644 index 00000000000..66a71a38083 --- /dev/null +++ b/idea/testData/quickfix/modifiers/infixModifier.kt @@ -0,0 +1,8 @@ +// "Add 'infix' modifier" "true" +class A { + fun xyzzy(i: Int) {} +} + +fun foo() { + A() xyzzy 5 +} \ No newline at end of file diff --git a/idea/testData/quickfix/modifiers/infixModifier.kt.after b/idea/testData/quickfix/modifiers/infixModifier.kt.after new file mode 100644 index 00000000000..3f47b32fa9f --- /dev/null +++ b/idea/testData/quickfix/modifiers/infixModifier.kt.after @@ -0,0 +1,8 @@ +// "Add 'infix' modifier" "true" +class A { + infix fun xyzzy(i: Int) {} +} + +fun foo() { + A() xyzzy 5 +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index ea8a4f51c4a..11264cccc90 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -4397,6 +4397,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("infixModifier.kt") + public void testInfixModifier() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/modifiers/infixModifier.kt"); + doTest(fileName); + } + @TestMetadata("nestedClassNotAllowed.kt") public void testNestedClassNotAllowed() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/modifiers/nestedClassNotAllowed.kt");