[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:
committed by
Dmitry Savvinov
parent
c49791f8bb
commit
21cc93860b
+3
-1
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.psi.*
|
|||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
import org.jetbrains.kotlin.resolve.DescriptorEquivalenceForOverrides
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||||
@@ -123,7 +124,8 @@ class KotlinPsiUnifier(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun matchDescriptors(d1: DeclarationDescriptor?, d2: DeclarationDescriptor?): Boolean {
|
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
|
if (d1 == null || d2 == null) return false
|
||||||
|
|
||||||
val decl1 = DescriptorToSourceUtils.descriptorToDeclaration(d1) as? KtDeclaration
|
val decl1 = DescriptorToSourceUtils.descriptorToDeclaration(d1) as? KtDeclaration
|
||||||
|
|||||||
Reference in New Issue
Block a user