Do not suggest "Make overridden member open" for already open ones

So #KT-18148 Fixed
This commit is contained in:
fitermay
2017-05-31 23:16:02 -04:00
committed by Mikhail Glukhikh
parent cbccf932a7
commit 0dced8d29c
3 changed files with 19 additions and 1 deletions
@@ -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()
@@ -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<caret> fun foo() { }
}
@@ -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");