More correct detection of real methods to override
This commit is contained in:
+6
-4
@@ -28,7 +28,8 @@ public class OverrideMethodsHandler : OverrideImplementMethodsHandler() {
|
|||||||
override fun collectMethodsToGenerate(descriptor: ClassDescriptor, project: Project): Collection<OverrideMemberChooserObject> {
|
override fun collectMethodsToGenerate(descriptor: ClassDescriptor, project: Project): Collection<OverrideMemberChooserObject> {
|
||||||
val result = ArrayList<OverrideMemberChooserObject>()
|
val result = ArrayList<OverrideMemberChooserObject>()
|
||||||
for (member in descriptor.unsubstitutedMemberScope.getAllDescriptors()) {
|
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
|
val overridden = member.overriddenDescriptors
|
||||||
if (overridden.any { it.modality == Modality.FINAL }) continue
|
if (overridden.any { it.modality == Modality.FINAL }) continue
|
||||||
|
|
||||||
@@ -65,11 +66,12 @@ public class OverrideMethodsHandler : OverrideImplementMethodsHandler() {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun CallableMemberDescriptor.isReal() = kind == CallableMemberDescriptor.Kind.DECLARATION
|
|
||||||
|
|
||||||
private fun toRealSupers(immediateSuper: CallableMemberDescriptor): Collection<CallableMemberDescriptor> {
|
private fun toRealSupers(immediateSuper: CallableMemberDescriptor): Collection<CallableMemberDescriptor> {
|
||||||
|
if (immediateSuper.kind != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||||
|
return listOf(immediateSuper)
|
||||||
|
}
|
||||||
val overridden = immediateSuper.overriddenDescriptors
|
val overridden = immediateSuper.overriddenDescriptors
|
||||||
if (overridden.isEmpty()) return listOf(immediateSuper)
|
assert(overridden.isNotEmpty())
|
||||||
return overridden.flatMap { toRealSupers(it) }.toSet()
|
return overridden.flatMap { toRealSupers(it) }.toSet()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user