// ISSUE: KT-44932 // WITH_STDLIB abstract class PsiElement { abstract val parent: PsiElement } class KtNameReferenceExpression(override val parent: PsiElement) : PsiElement() class OtherElement(override val parent: PsiElement) : PsiElement() class KtDotQualifiedExpression : PsiElement() { override val parent: PsiElement get() = this val psi: PsiElement = EndElement() } class EndElement : PsiElement() { override val parent: PsiElement get() = this } fun mark(element: PsiElement): String { when (element) { is KtNameReferenceExpression -> { var parent = element repeat(2) { parent = parent.parent (parent as? KtDotQualifiedExpression)?.psi?.let { return mark(it) } } } } return if (element is EndElement) "OK" else "Fail" } fun box(): String { val element = KtNameReferenceExpression(OtherElement(KtDotQualifiedExpression())) return mark(element) }