From ac858497213d8af217e9005551bff7d6fea24334 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Fri, 24 May 2019 22:34:09 +0300 Subject: [PATCH] Avoid access to delegate from KtUltraLightClass --- .../kotlin/asJava/classes/ultraLightClass.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt index 65c6d657f84..4e78b205f6f 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt @@ -51,15 +51,20 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor @VisibleForTesting var isClsDelegateLoaded = false - override fun findLightClassData(): LightClassData = super.findLightClassData().also { + private inline fun forTooComplex(getter: () -> T): T { if (!isClsDelegateLoaded) { isClsDelegateLoaded = true check(tooComplex) { "Cls delegate shouldn't be loaded for not too complex ultra-light classes! Qualified name: $qualifiedName" } } + return getter() } + override fun findLightClassData(): LightClassData = forTooComplex { super.findLightClassData() } + + override fun getDelegate(): PsiClass = forTooComplex { super.getDelegate() } + private fun allSuperTypes() = getDescriptor()?.typeConstructor?.supertypes.orEmpty().asSequence() @@ -360,5 +365,11 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor override fun getParent(): PsiElement? = if (tooComplex) super.getParent() else containingClass ?: containingFile override fun getScope(): PsiElement? = if (tooComplex) super.getScope() else parent + + override fun isInheritorDeep(baseClass: PsiClass?, classToByPass: PsiClass?): Boolean { + //TODO: Implement inheritor deep to avoid access to clsDelegate + return super.isInheritorDeep(baseClass, classToByPass) + } + override fun copy(): KtLightClassImpl = KtUltraLightClass(classOrObject.copy() as KtClassOrObject, support) }