[Invariant Fix] Fix KotlinPsiUnifier after types refinement introduction

Refined types with non-trivial substitution may result in different
descriptors instances
See PsiUnifierTestGenerated$Equivalence$Expressions.testArrayAccess
This commit is contained in:
Denis Zharkov
2019-04-25 16:07:22 +03:00
committed by Dmitry Savvinov
parent c49791f8bb
commit 21cc93860b
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorEquivalenceForOverrides
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
@@ -123,7 +124,8 @@ class KotlinPsiUnifier(
}
private fun matchDescriptors(d1: DeclarationDescriptor?, d2: DeclarationDescriptor?): Boolean {
if (d1 == d2 || d2 in declarationPatternsToTargets[d1] || d1 in declarationPatternsToTargets[d2]) return true
if (DescriptorEquivalenceForOverrides.areEquivalent(d1, d2)) return true
if (d2 in declarationPatternsToTargets[d1] || d1 in declarationPatternsToTargets[d2]) return true
if (d1 == null || d2 == null) return false
val decl1 = DescriptorToSourceUtils.descriptorToDeclaration(d1) as? KtDeclaration