Wire KotlinTypeRefiner in areCallableDescriptorsEquivalent

See the issue for details

^KT-41218 Fixed
This commit is contained in:
Dmitry Savvinov
2020-08-22 15:20:45 +03:00
parent 421efaa565
commit 5649cbc2e1
14 changed files with 61 additions and 17 deletions
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.resolve
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.resolve.OverridingUtil.OverrideCompatibilityInfo
import org.jetbrains.kotlin.types.checker.KotlinTypeRefiner
object DescriptorEquivalenceForOverrides {
@@ -40,7 +41,8 @@ object DescriptorEquivalenceForOverrides {
a,
b,
allowCopiesFromTheSameDeclaration = allowCopiesFromTheSameDeclaration,
distinguishExpectsAndNonExpects = distinguishExpectsAndNonExpects
distinguishExpectsAndNonExpects = distinguishExpectsAndNonExpects,
kotlinTypeRefiner = KotlinTypeRefiner.Default
)
a is PackageFragmentDescriptor && b is PackageFragmentDescriptor -> (a).fqName == (b).fqName
@@ -79,7 +81,8 @@ object DescriptorEquivalenceForOverrides {
b: CallableDescriptor,
allowCopiesFromTheSameDeclaration: Boolean,
distinguishExpectsAndNonExpects: Boolean = true,
ignoreReturnType: Boolean = false
ignoreReturnType: Boolean = false,
kotlinTypeRefiner: KotlinTypeRefiner
): Boolean {
if (a == b) return true
if (a.name != b.name) return false
@@ -94,7 +97,7 @@ object DescriptorEquivalenceForOverrides {
if (!ownersEquivalent(a, b, { _, _ -> false }, allowCopiesFromTheSameDeclaration)) return false
val overridingUtil = OverridingUtil.createWithEqualityAxioms eq@{ c1, c2 ->
val overridingUtil = OverridingUtil.create(kotlinTypeRefiner) eq@{ c1, c2 ->
if (c1 == c2) return@eq true
val d1 = c1.declarationDescriptor
@@ -77,6 +77,14 @@ public class OverridingUtil {
return new OverridingUtil(DEFAULT_TYPE_CONSTRUCTOR_EQUALITY, kotlinTypeRefiner);
}
@NotNull
public static OverridingUtil create(
@NotNull KotlinTypeRefiner kotlinTypeRefiner,
@NotNull KotlinTypeChecker.TypeConstructorEquality equalityAxioms
) {
return new OverridingUtil(equalityAxioms, kotlinTypeRefiner);
}
private final KotlinTypeRefiner kotlinTypeRefiner;
private final KotlinTypeChecker.TypeConstructorEquality equalityAxioms;