Override Members: Allow overriding virtual synthetic members (e.g. equals(), hashCode(), toString(), etc.) in data classes

#KT-15563 Fixed
This commit is contained in:
Alexey Sedunov
2017-01-10 20:26:56 +03:00
parent 862966fd33
commit 8c882f0d27
5 changed files with 15 additions and 3 deletions
@@ -27,8 +27,7 @@ class OverrideMembersHandler(private val preferConstructorParameters: Boolean =
override fun collectMembersToGenerate(descriptor: ClassDescriptor, project: Project): Collection<OverrideMemberChooserObject> {
val result = ArrayList<OverrideMemberChooserObject>()
for (member in descriptor.unsubstitutedMemberScope.getContributedDescriptors()) {
if (member is CallableMemberDescriptor
&& (member.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE || member.kind == CallableMemberDescriptor.Kind.DELEGATION)) {
if (member is CallableMemberDescriptor && (member.kind != CallableMemberDescriptor.Kind.DECLARATION)) {
val overridden = member.overriddenDescriptors
if (overridden.any { it.modality == Modality.FINAL || Visibilities.isPrivate(it.visibility.normalize()) }) continue
@@ -52,7 +51,7 @@ class OverrideMembersHandler(private val preferConstructorParameters: Boolean =
nonAbstractRealSupers
}
else {
listOf(realSupers.first())
listOf(realSupers.firstOrNull() ?: continue)
}
for (realSuper in realSupersToUse) {