From 1cfb8f2aef41b605fafac9ebaab1bb6b06ff71fc Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 19 Oct 2016 12:07:24 +0300 Subject: [PATCH] Use OverridingUtil#overrides instead of CodegenUtil#doesOverride This may be more correct in case of complex cross-module inheritance, where overridability should be detected by structural equality of signatures instead of referential equality of constructed descriptors (no test added because it's not so easy to come up with an example) --- .../src/org/jetbrains/kotlin/backend/common/CodegenUtil.kt | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.kt b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.kt index 6d649450bf9..6b1f1e638db 100644 --- a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.kt +++ b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.MemberComparator +import org.jetbrains.kotlin.resolve.OverridingUtil import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.isDynamic @@ -58,7 +59,7 @@ object CodegenUtil { // this is the actual member of delegateExpressionType that we are delegating to (scope.getContributedFunctions(name, NoLookupLocation.FROM_BACKEND) + scope.getContributedVariables(name, NoLookupLocation.FROM_BACKEND)) - .firstOrNull { doesOverride(it, overriddenDescriptor) } + .firstOrNull { it == overriddenDescriptor || OverridingUtil.overrides(it, overriddenDescriptor) } } assert(actualDelegates.size <= 1) { "Many delegates found for $delegatingMember: $actualDelegates" } @@ -67,10 +68,6 @@ object CodegenUtil { } } - private fun doesOverride(overrideCandidate: CallableMemberDescriptor, overriddenDescriptor: CallableMemberDescriptor) = - (listOf(overrideCandidate.original) + DescriptorUtils.getAllOverriddenDescriptors(overrideCandidate)) - .contains(overriddenDescriptor.original) - @JvmStatic fun getDelegatePropertyIfAny( expression: KtExpression, classDescriptor: ClassDescriptor, bindingContext: BindingContext