From 86e434195ecfbcb88a32357df819567a1f9993e4 Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Thu, 28 May 2020 17:00:28 +0300 Subject: [PATCH] Uast: `UastKotlinPsiVariable` made `isEquivalentTo` it's physical PSI (KT-39174) --- .../uast/kotlin/psi/UastKotlinPsiVariable.kt | 2 ++ .../tests/KotlinUastResolveApiTest.kt | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/psi/UastKotlinPsiVariable.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/psi/UastKotlinPsiVariable.kt index ada8500e3fe..f352053bc26 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/psi/UastKotlinPsiVariable.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/psi/UastKotlinPsiVariable.kt @@ -67,6 +67,8 @@ class UastKotlinPsiVariable private constructor( return ktElement == (other as? UastKotlinPsiVariable)?.ktElement } + override fun isEquivalentTo(another: PsiElement?): Boolean = this == another || ktElement.isEquivalentTo(another) + override fun hashCode() = ktElement.hashCode() companion object { diff --git a/plugins/uast-kotlin/tests/KotlinUastResolveApiTest.kt b/plugins/uast-kotlin/tests/KotlinUastResolveApiTest.kt index 924ecbac62e..c47f8821433 100644 --- a/plugins/uast-kotlin/tests/KotlinUastResolveApiTest.kt +++ b/plugins/uast-kotlin/tests/KotlinUastResolveApiTest.kt @@ -5,14 +5,13 @@ package org.jetbrains.uast.test.kotlin -import com.intellij.psi.PsiClassType -import com.intellij.psi.PsiMethod -import com.intellij.psi.PsiType +import com.intellij.psi.* import com.intellij.testFramework.LightProjectDescriptor import junit.framework.TestCase import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner +import org.jetbrains.kotlin.utils.addToStdlib.cast import org.jetbrains.uast.* import org.jetbrains.uast.kotlin.KotlinUFunctionCallExpression import org.jetbrains.uast.test.env.kotlin.findElementByText @@ -37,7 +36,16 @@ class KotlinUastResolveApiTest : KotlinLightCodeInsightFixtureTestCase() { ) val refs = file.findUElementByTextFromPsi("s.toUpperCase()") - TestCase.assertNotNull((refs.receiver.getExpressionType() as PsiClassType).resolve()) + val receiver = refs.receiver + TestCase.assertEquals(CommonClassNames.JAVA_LANG_STRING, (receiver.getExpressionType() as PsiClassType).resolve()!!.qualifiedName!!) + val resolve = receiver.cast().resolve() + + val variable = file.findUElementByTextFromPsi("val s = \"abc\"") + TestCase.assertEquals(resolve, variable.javaPsi) + TestCase.assertTrue( + "resolved expression $resolve should be equivalent to ${variable.sourcePsi}", + PsiManager.getInstance(project).areElementsEquivalent(resolve, variable.sourcePsi) + ) } fun testMultiResolve() {