diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/OperatorModifierInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/OperatorModifierInspection.kt index 1923f609a86..86467645bfb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/OperatorModifierInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/OperatorModifierInspection.kt @@ -28,17 +28,20 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.DiagnosticWithParameters2 +import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde 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.JetTokens -import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.JetClassOrObject +import org.jetbrains.kotlin.psi.JetModifierListOwner +import org.jetbrains.kotlin.psi.JetNamedFunction +import org.jetbrains.kotlin.psi.JetVisitorVoid import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.OverrideResolver import org.jetbrains.kotlin.resolve.dataClassUtils.isComponentLike -import org.jetbrains.kotlin.resolve.source.PsiSourceElement import org.jetbrains.kotlin.types.expressions.OperatorConventions public class OperatorModifierInspection : AbstractKotlinInspection() { @@ -122,8 +125,9 @@ private class AddModifierLocalQuickFix() : LocalQuickFix { object OperatorModifierFixFactory : JetSingleIntentionActionFactory() { override fun createAction(diagnostic: Diagnostic): IntentionAction? { - val param = (diagnostic as? DiagnosticWithParameters2<*, *, *>)?.a as? FunctionDescriptor ?: return null - val target = (param.source as? PsiSourceElement)?.psi as? JetDeclaration ?: return null + 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 {} } } diff --git a/idea/testData/quickfix/modifiers/operatorModifierInherited.kt b/idea/testData/quickfix/modifiers/operatorModifierInherited.kt new file mode 100644 index 00000000000..63a4a5878f6 --- /dev/null +++ b/idea/testData/quickfix/modifiers/operatorModifierInherited.kt @@ -0,0 +1,10 @@ +// "Add 'operator' modifier" "true" +open class Foo { + fun get(idx: Int): Any = 5 +} + +object Bar : Foo() + +fun test(): Any { + return Bar[5] +} diff --git a/idea/testData/quickfix/modifiers/operatorModifierInherited.kt.after b/idea/testData/quickfix/modifiers/operatorModifierInherited.kt.after new file mode 100644 index 00000000000..be505556dff --- /dev/null +++ b/idea/testData/quickfix/modifiers/operatorModifierInherited.kt.after @@ -0,0 +1,10 @@ +// "Add 'operator' modifier" "true" +open class Foo { + operator fun get(idx: Int): Any = 5 +} + +object Bar : Foo() + +fun test(): Any { + return Bar[5] +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 1e2b1fc220e..cc8b038d680 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -4427,6 +4427,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("operatorModifierInherited.kt") + public void testOperatorModifierInherited() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/modifiers/operatorModifierInherited.kt"); + doTest(fileName); + } + @TestMetadata("packageMemberCannotBeProtected.kt") public void testPackageMemberCannotBeProtected() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/modifiers/packageMemberCannotBeProtected.kt");