diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt index 295d0b2dc61..c084a2ea84b 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt @@ -43,7 +43,7 @@ abstract class KotlinAbstractUElement(private val givenParent: UElement?) : Kotl protected open fun convertParent(): UElement? { @Suppress("DEPRECATION") val psi = psi //TODO: `psi` is deprecated but it seems that it couldn't be simply replaced for this case - var parent = psi?.parent ?: psi?.containingFile + var parent = psi?.parent ?: sourcePsi?.parent ?: psi?.containingFile if (psi is KtLightClassForLocalDeclaration) { val originParent = psi.kotlinOrigin.parent diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt.183 b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt.183 index 3fb23d1fa99..1ec365012ab 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt.183 +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt.183 @@ -43,7 +43,7 @@ abstract class KotlinAbstractUElement(private val givenParent: UElement?) : Kotl protected open fun convertParent(): UElement? { @Suppress("DEPRECATION") val psi = psi //TODO: `psi` is deprecated but it seems that it couldn't be simply replaced for this case - var parent = psi?.parent ?: psi?.containingFile + var parent = psi?.parent ?: sourcePsi?.parent ?: psi?.containingFile if (psi is KtLightClassForLocalDeclaration) { val originParent = psi.kotlinOrigin.parent diff --git a/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt b/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt index 4563e290f3c..373fd344446 100644 --- a/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt +++ b/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt @@ -133,6 +133,20 @@ class KotlinDetachedUastTest : KotlinLightCodeInsightFixtureTestCase() { } + fun testAnonymousInnerClassWithIDELightClasses() { + + val detachedClass = myFixture.configureByText("MyClass.kt",""" + class MyClass() { + private val obj = object : MyClass() {} + } + """) + + val anonymousClass = detachedClass.findUElementByTextFromPsi("object : MyClass() {}") + .let { uObjectLiteralExpression -> uObjectLiteralExpression.declaration } + TestCase.assertEquals("UClass (name = null), UObjectLiteralExpression, UField (name = obj), UClass (name = MyClass), UFile (package = )", generateSequence(anonymousClass, { it.uastParent }).joinToString { it.asLogString() }) + + } + } fun T?.orFail(msg: String): T = this ?: error(msg) \ No newline at end of file