"add operator modifier" fix handles fake overrides

#KT-9347 Fixed
This commit is contained in:
Dmitry Jemerov
2015-10-01 21:12:39 +02:00
parent 8fd9d181de
commit 870b640008
4 changed files with 34 additions and 4 deletions
@@ -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 {}
}
}
@@ -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<caret>[5]
}
@@ -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<caret>[5]
}
@@ -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");