diff --git a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/java/source/JavaElementPsiSourceWithSmartPointer.kt b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/java/source/JavaElementPsiSourceWithSmartPointer.kt index d1e5bc4dfda..f99d3f5dd14 100644 --- a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/java/source/JavaElementPsiSourceWithSmartPointer.kt +++ b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/java/source/JavaElementPsiSourceWithSmartPointer.kt @@ -15,10 +15,19 @@ internal class JavaElementPsiSourceWithSmartPointer( override val factory: JavaElementSourceFactory, ) : JavaElementPsiSource() { + // is used only for the purposes of equals/hashCode to avoid underlying PCE + private val originalPsi: PSI = psi + override val psi: PSI get() { return pointer.element ?: error("Cannot restore a PsiElement from $pointer") } + + override fun equals(other: Any?): Boolean { + return if (other === this) true else other is JavaElementPsiSourceWithSmartPointer<*> && originalPsi == other.originalPsi + } + + override fun hashCode(): Int = originalPsi.hashCode() } diff --git a/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/source/JavaElementPsiSource.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/source/JavaElementPsiSource.kt index 4581642664b..2bc7032973f 100644 --- a/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/source/JavaElementPsiSource.kt +++ b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/source/JavaElementPsiSource.kt @@ -18,6 +18,12 @@ class JavaElementPsiSourceWithFixedPsi( override val factory: JavaElementSourceFactory get() = JavaElementSourceFactory.getInstance(psi.project) + override fun equals(other: Any?): Boolean { + return if (other === this) true else other is JavaElementPsiSourceWithFixedPsi<*> && psi == other.psi + } + + override fun hashCode(): Int = psi.hashCode() + override fun toString(): String { return psi.toString() }