From 422a9613f19b6f7d8a4280575bd3e56b361d78bd Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 29 Jul 2015 10:56:28 +0300 Subject: [PATCH] More correct detection of real methods to override --- .../core/overrideImplement/OverrideMethodsHandler.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMethodsHandler.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMethodsHandler.kt index 9658f1d4e36..564bdc8de00 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMethodsHandler.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMethodsHandler.kt @@ -28,7 +28,8 @@ public class OverrideMethodsHandler : OverrideImplementMethodsHandler() { override fun collectMethodsToGenerate(descriptor: ClassDescriptor, project: Project): Collection { val result = ArrayList() for (member in descriptor.unsubstitutedMemberScope.getAllDescriptors()) { - if (member is CallableMemberDescriptor && !member.isReal()) { + if (member is CallableMemberDescriptor + && (member.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE || member.kind == CallableMemberDescriptor.Kind.DELEGATION)) { val overridden = member.overriddenDescriptors if (overridden.any { it.modality == Modality.FINAL }) continue @@ -65,11 +66,12 @@ public class OverrideMethodsHandler : OverrideImplementMethodsHandler() { return result } - private fun CallableMemberDescriptor.isReal() = kind == CallableMemberDescriptor.Kind.DECLARATION - private fun toRealSupers(immediateSuper: CallableMemberDescriptor): Collection { + if (immediateSuper.kind != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) { + return listOf(immediateSuper) + } val overridden = immediateSuper.overriddenDescriptors - if (overridden.isEmpty()) return listOf(immediateSuper) + assert(overridden.isNotEmpty()) return overridden.flatMap { toRealSupers(it) }.toSet() }