41 lines
997 B
Kotlin
Vendored
41 lines
997 B
Kotlin
Vendored
// 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)
|
|
}
|