diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt index e5711ec62b2..99044c82efb 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt @@ -54,7 +54,10 @@ interface LightMemberOrigin : LightElementOrigin { val auxiliaryOriginalElement: KtDeclaration? get() = null fun isValid(): Boolean + fun isEquivalentTo(other: LightMemberOrigin?): Boolean + fun isEquivalentTo(other: PsiElement?): Boolean + fun copy(): LightMemberOrigin } @@ -68,7 +71,11 @@ data class LightMemberOriginForDeclaration( override fun isEquivalentTo(other: LightMemberOrigin?): Boolean { if (other !is LightMemberOriginForDeclaration) return false - return originalElement.isEquivalentTo(other.originalElement) + return isEquivalentTo(other.originalElement) + } + + override fun isEquivalentTo(other: PsiElement?): Boolean { + return originalElement.isEquivalentTo(other) } override fun copy(): LightMemberOrigin { diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMemberImpl.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMemberImpl.kt index f1f8f2de009..e553931faa1 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMemberImpl.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMemberImpl.kt @@ -70,13 +70,9 @@ abstract class KtLightMemberImpl( } override fun isEquivalentTo(another: PsiElement?): Boolean { - if (lightMemberOrigin?.originalElement?.isEquivalentTo(another) == true) return true - - val isEquivalentByOrigin = - another is KtLightMember<*> && - lightMemberOrigin?.isEquivalentTo(another.lightMemberOrigin) == true - - return isEquivalentByOrigin || this == another + return this == another || + lightMemberOrigin?.isEquivalentTo(another) == true || + another is KtLightMember<*> && lightMemberOrigin?.isEquivalentTo(another.lightMemberOrigin) == true } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/LightMemberOriginForCompiledElement.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/LightMemberOriginForCompiledElement.kt index 4c84a0ba17c..59f3d47d99d 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/LightMemberOriginForCompiledElement.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/LightMemberOriginForCompiledElement.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.caches.lightClasses +import com.intellij.psi.PsiElement import com.intellij.psi.PsiField import com.intellij.psi.PsiMember import com.intellij.psi.PsiMethod @@ -48,6 +49,14 @@ interface LightMemberOriginForCompiledElement : LightMemberOrigin override val originKind: JvmDeclarationOriginKind get() = JvmDeclarationOriginKind.OTHER + override fun isEquivalentTo(other: PsiElement?): Boolean { + return when (other) { + is KtDeclaration -> originalElement?.isEquivalentTo(other) ?: false + is PsiMember -> member.isEquivalentTo(other) + else -> false + } + } + override fun isValid(): Boolean = member.isValid }