From 90a0c9bb25f64c33ee1adfdc93636109a35cdb7a Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Tue, 25 May 2021 10:45:24 -0700 Subject: [PATCH] FIR IDE: quickfix to add `override` keyword Also enables more tests that covers previous quickfixes --- .../tests/subtyping/extensionOnLocalClasses.fir.kt | 9 +++++++++ .../kotlin/generators/tests/idea/GenerateTests.kt | 1 + .../kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt | 4 ++++ .../org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt | 1 + idea/testData/checker/Override.fir.kt | 2 +- idea/testData/quickfix/override/changeToInvocation.kt | 1 + .../quickfix/override/overriddingMultipleFinalMethods.kt | 1 + .../quickfix/override/overridingDelegatedMethod.kt | 1 + .../testData/quickfix/override/overridingFakeOverride.kt | 1 + idea/testData/quickfix/override/overridingFinalMethod.kt | 3 ++- .../quickfix/override/overridingFinalMethodInLocal.kt | 3 ++- .../quickfix/override/overridingFinalProperty.kt | 3 ++- ...parameterNameChangedMultipleOverrideRenamePossible.kt | 1 + .../override/parameterNameChangedRenamePossible.kt | 1 + 14 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/subtyping/extensionOnLocalClasses.fir.kt diff --git a/compiler/testData/diagnostics/tests/subtyping/extensionOnLocalClasses.fir.kt b/compiler/testData/diagnostics/tests/subtyping/extensionOnLocalClasses.fir.kt new file mode 100644 index 00000000000..a822a9cfe93 --- /dev/null +++ b/compiler/testData/diagnostics/tests/subtyping/extensionOnLocalClasses.fir.kt @@ -0,0 +1,9 @@ +package foo.bar + +fun test() { + class A { + inner class B + } + + fun A.B.foo() {} +} diff --git a/generators/idea-generator/tests/org/jetbrains/kotlin/generators/tests/idea/GenerateTests.kt b/generators/idea-generator/tests/org/jetbrains/kotlin/generators/tests/idea/GenerateTests.kt index c3f863e7cdd..a49b5539718 100644 --- a/generators/idea-generator/tests/org/jetbrains/kotlin/generators/tests/idea/GenerateTests.kt +++ b/generators/idea-generator/tests/org/jetbrains/kotlin/generators/tests/idea/GenerateTests.kt @@ -1172,6 +1172,7 @@ fun main(args: Array) { model("quickfix/lateinit", pattern = pattern, filenameStartsLowerCase = true) model("quickfix/modifiers", pattern = pattern, filenameStartsLowerCase = true, recursive = false) model("quickfix/nullables/unsafeInfixCall", pattern = pattern, filenameStartsLowerCase = true) + model("quickfix/override", pattern = pattern, filenameStartsLowerCase = true, recursive = false) model("quickfix/override/typeMismatchOnOverride", pattern = pattern, filenameStartsLowerCase = true, recursive = false) model("quickfix/replaceInfixOrOperatorCall", pattern = pattern, filenameStartsLowerCase = true) model("quickfix/replaceWithDotCall", pattern = pattern, filenameStartsLowerCase = true) diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt index dd56f612621..ffb1fcdefba 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt @@ -62,6 +62,10 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() { KtFirDiagnostic.AbstractClassMemberNotImplemented::class, AddModifierFix.addAbstractModifier ) + registerPsiQuickFixes( + KtFirDiagnostic.VirtualMemberHidden::class, + AddModifierFix.addOverrideModifier + ) registerPsiQuickFixes(KtFirDiagnostic.ValOrVarOnLoopParameter::class, RemoveValVarFromParameterFix) registerPsiQuickFixes(KtFirDiagnostic.ValOrVarOnFunParameter::class, RemoveValVarFromParameterFix) registerPsiQuickFixes(KtFirDiagnostic.ValOrVarOnCatchParameter::class, RemoveValVarFromParameterFix) diff --git a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt index 55bd5fa324e..c59758a53db 100644 --- a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt @@ -111,6 +111,7 @@ open class AddModifierFix( val addOpenToContainingClass = AddModifierFix.createFactory(KtTokens.OPEN_KEYWORD, KtClassOrObject::class.java) val addFinalToProperty = AddModifierFix.createFactory(KtTokens.FINAL_KEYWORD, KtProperty::class.java) val addInnerModifier = createFactory(KtTokens.INNER_KEYWORD) + val addOverrideModifier = createFactory(KtTokens.OVERRIDE_KEYWORD) private val modalityModifiers: Set = setOf(KtTokens.ABSTRACT_KEYWORD, KtTokens.OPEN_KEYWORD, KtTokens.FINAL_KEYWORD) diff --git a/idea/testData/checker/Override.fir.kt b/idea/testData/checker/Override.fir.kt index 427574a8206..ab97b6850f9 100644 --- a/idea/testData/checker/Override.fir.kt +++ b/idea/testData/checker/Override.fir.kt @@ -26,7 +26,7 @@ package override } class MyIllegalClass4 : MyTrait, MyAbstractClass() { - fun foo() {} + fun foo() {} override fun other() {} } diff --git a/idea/testData/quickfix/override/changeToInvocation.kt b/idea/testData/quickfix/override/changeToInvocation.kt index 88924e45826..fbceb728bbf 100644 --- a/idea/testData/quickfix/override/changeToInvocation.kt +++ b/idea/testData/quickfix/override/changeToInvocation.kt @@ -5,3 +5,4 @@ open class A { } class B : A {} +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/override/overriddingMultipleFinalMethods.kt b/idea/testData/quickfix/override/overriddingMultipleFinalMethods.kt index 9aaf95e59ca..9181572d01b 100644 --- a/idea/testData/quickfix/override/overriddingMultipleFinalMethods.kt +++ b/idea/testData/quickfix/override/overriddingMultipleFinalMethods.kt @@ -18,3 +18,4 @@ interface Z { class B : A(), X, Y, Z { override fun foo() {} } +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/override/overridingDelegatedMethod.kt b/idea/testData/quickfix/override/overridingDelegatedMethod.kt index 993b3e47594..d78454dea78 100644 --- a/idea/testData/quickfix/override/overridingDelegatedMethod.kt +++ b/idea/testData/quickfix/override/overridingDelegatedMethod.kt @@ -16,3 +16,4 @@ class B(y: XX) : A(y) { override fun foo() { } } +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/override/overridingFakeOverride.kt b/idea/testData/quickfix/override/overridingFakeOverride.kt index 87b23e8534e..b16b51afc1c 100644 --- a/idea/testData/quickfix/override/overridingFakeOverride.kt +++ b/idea/testData/quickfix/override/overridingFakeOverride.kt @@ -16,3 +16,4 @@ class B() : Y { override fun foo() { } } +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/override/overridingFinalMethod.kt b/idea/testData/quickfix/override/overridingFinalMethod.kt index 5b35e3eedcb..fe52b800084 100644 --- a/idea/testData/quickfix/override/overridingFinalMethod.kt +++ b/idea/testData/quickfix/override/overridingFinalMethod.kt @@ -5,4 +5,5 @@ open class A { class B : A() { override fun foo() {} -} \ No newline at end of file +} +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/override/overridingFinalMethodInLocal.kt b/idea/testData/quickfix/override/overridingFinalMethodInLocal.kt index b30fed9b3d2..33a56b435ca 100644 --- a/idea/testData/quickfix/override/overridingFinalMethodInLocal.kt +++ b/idea/testData/quickfix/override/overridingFinalMethodInLocal.kt @@ -7,4 +7,5 @@ fun test() { val some = object : A() { override fun foo() {} } -} \ No newline at end of file +} +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/override/overridingFinalProperty.kt b/idea/testData/quickfix/override/overridingFinalProperty.kt index e9067c0a8c3..31f9e20052e 100644 --- a/idea/testData/quickfix/override/overridingFinalProperty.kt +++ b/idea/testData/quickfix/override/overridingFinalProperty.kt @@ -5,4 +5,5 @@ open class A { class B : A() { override var x = 24; -} \ No newline at end of file +} +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/override/parameterNameChangedMultipleOverrideRenamePossible.kt b/idea/testData/quickfix/override/parameterNameChangedMultipleOverrideRenamePossible.kt index 7dd8db03d05..b13eb00c017 100644 --- a/idea/testData/quickfix/override/parameterNameChangedMultipleOverrideRenamePossible.kt +++ b/idea/testData/quickfix/override/parameterNameChangedMultipleOverrideRenamePossible.kt @@ -13,3 +13,4 @@ class B : A(), X { return agr } } +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/override/parameterNameChangedRenamePossible.kt b/idea/testData/quickfix/override/parameterNameChangedRenamePossible.kt index 08b7ccda2f0..31611f27376 100644 --- a/idea/testData/quickfix/override/parameterNameChangedRenamePossible.kt +++ b/idea/testData/quickfix/override/parameterNameChangedRenamePossible.kt @@ -9,3 +9,4 @@ class B : A() { return agr } } +/* IGNORE_FIR */