diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt index 39906ca2664..a18653df7d8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt @@ -57,7 +57,8 @@ class MakeOverriddenMemberOpenFix(declaration: KtDeclaration) : KotlinQuickFixAc for (overriddenDescriptor in getAllDeclaredNonOverridableOverriddenDescriptors(descriptor)) { assert(overriddenDescriptor.kind == DECLARATION) { "Can only be applied to declarations." } val overriddenMember = DescriptorToSourceUtils.descriptorToDeclaration(overriddenDescriptor) - if (overriddenMember == null || !overriddenMember.canRefactor() || overriddenMember !is KtCallableDeclaration) { + if (overriddenMember == null || !overriddenMember.canRefactor() || overriddenMember !is KtCallableDeclaration || + overriddenMember.modifierList?.hasModifier(OPEN_KEYWORD) == true) { return false } val containingDeclarationName = overriddenDescriptor.containingDeclaration.name.asString() diff --git a/idea/testData/quickfix/override/overridingOpenMethodInFinalClass.kt b/idea/testData/quickfix/override/overridingOpenMethodInFinalClass.kt new file mode 100644 index 00000000000..4e199577ad2 --- /dev/null +++ b/idea/testData/quickfix/override/overridingOpenMethodInFinalClass.kt @@ -0,0 +1,11 @@ +// "Make A.foo open" "false" +// ACTION: Convert to expression body +// ERROR: 'foo' in 'A' is final and cannot be overridden +// ERROR: This type is final, so it cannot be inherited from +class A() { + open fun foo() {} +} + +class B : A() { + override fun foo() { } +} \ 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 c0dc733186c..984de2855e2 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -7505,6 +7505,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("overridingOpenMethodInFinalClass.kt") + public void testOverridingOpenMethodInFinalClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/override/overridingOpenMethodInFinalClass.kt"); + doTest(fileName); + } + @TestMetadata("parameterNameChangedAmbiguousRename.kt") public void testParameterNameChangedAmbiguousRename() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/override/parameterNameChangedAmbiguousRename.kt");