From 3889b70f1eb0c2e953f7db71b3dab091c00d0e04 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Fri, 24 May 2019 22:04:01 +0300 Subject: [PATCH] Avoid clsDelegate access from (UL-)KtLightClassForFacade --- .../asJava/classes/KtLightClassForFacade.kt | 32 ++++++++++++------- .../classes/ultraKtLightClassForFacade.kt | 7 ++++ 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForFacade.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForFacade.kt index f4c44f33c91..cf0e04eaf68 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForFacade.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForFacade.kt @@ -48,7 +48,7 @@ open class KtLightClassForFacade constructor( files: Collection ) : KtLazyLightClass(manager) { - val files: Collection = files.toSet() // needed for hashCode + val files: Collection = files.toSet() private val firstFileInFacade by lazyPub { files.iterator().next() } @@ -80,6 +80,8 @@ open class KtLightClassForFacade constructor( override fun hasModifierProperty(@NonNls name: String) = modifierList.hasModifierProperty(name) + override fun getExtendsList(): PsiReferenceList? = null + override fun isDeprecated() = false override fun isInterface() = false @@ -88,33 +90,39 @@ open class KtLightClassForFacade constructor( override fun isEnum() = false - override fun getContainingClass() = null + override fun getContainingClass(): PsiClass? = null override fun getContainingFile() = packageClsFile override fun hasTypeParameters() = false - override fun getTypeParameters() = PsiTypeParameter.EMPTY_ARRAY + override fun getTypeParameters(): Array = PsiTypeParameter.EMPTY_ARRAY - override fun getTypeParameterList() = null + override fun getTypeParameterList(): PsiTypeParameterList? = null - override fun getDocComment() = null + override fun getDocComment(): Nothing? = null override fun getImplementsList() = implementsList - override fun getImplementsListTypes() = PsiClassType.EMPTY_ARRAY + override fun getImplementsListTypes(): Array = PsiClassType.EMPTY_ARRAY - override fun getInterfaces() = PsiClass.EMPTY_ARRAY + override fun getInterfaces(): Array = PsiClass.EMPTY_ARRAY - override fun getInnerClasses() = PsiClass.EMPTY_ARRAY + override fun getInnerClasses(): Array = PsiClass.EMPTY_ARRAY override fun getOwnInnerClasses(): List = listOf() - override fun getAllInnerClasses() = PsiClass.EMPTY_ARRAY + override fun getAllInnerClasses(): Array = PsiClass.EMPTY_ARRAY - override fun getInitializers() = PsiClassInitializer.EMPTY_ARRAY + override fun getInitializers(): Array = PsiClassInitializer.EMPTY_ARRAY - override fun findInnerClassByName(@NonNls name: String, checkBases: Boolean) = null + override fun findInnerClassByName(@NonNls name: String, checkBases: Boolean): PsiClass? = null + + override fun isInheritorDeep(baseClass: PsiClass?, classToByPass: PsiClass?): Boolean = false + + override fun getLBrace(): PsiElement? = null + + override fun getRBrace(): PsiElement? = null override fun getName() = facadeClassFqName.shortName().asString() @@ -158,6 +166,8 @@ open class KtLightClassForFacade constructor( override fun getQualifiedName() = facadeClassFqName.asString() + override fun getNameIdentifier(): PsiIdentifier? = null + override fun isValid() = files.all { it.isValid && it.hasTopLevelCallables() && facadeClassFqName == it.javaFileFacadeFqName } override fun copy() = KtLightClassForFacade(manager, facadeClassFqName, lightClassDataCache, files) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraKtLightClassForFacade.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraKtLightClassForFacade.kt index c5eea320377..b9243ada0af 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraKtLightClassForFacade.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraKtLightClassForFacade.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.asJava.classes import com.intellij.psi.* +import com.intellij.psi.impl.PsiSuperMethodImplUtil import com.intellij.psi.util.CachedValue import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder import org.jetbrains.kotlin.asJava.elements.KtLightField @@ -31,12 +32,16 @@ class KtUltraLightClassForFacade( return getter() } + override fun getDelegate(): PsiClass = forTooComplex { super.getDelegate() } + override val lightClassDataCache: CachedValue get() = forTooComplex { super.lightClassDataCache } override val clsDelegate: PsiClass get() = forTooComplex { super.clsDelegate } + override fun getScope(): PsiElement? = if (!tooComplex) parent else super.getScope() + private val tooComplex: Boolean by lazyPub { filesToSupports.any { (file, support) -> file.declarations.any { support.isTooComplexForUltraLightGeneration(it) } @@ -81,6 +86,8 @@ class KtUltraLightClassForFacade( override fun getOwnMethods() = if (!tooComplex) ownMethodsForNotTooComplex else super.getOwnMethods() + override fun getVisibleSignatures(): MutableCollection = PsiSuperMethodImplUtil.getVisibleSignatures(this) + override fun copy(): KtLightClassForFacade = KtUltraLightClassForFacade(manager, facadeClassFqName, lightClassDataCache, files, filesToSupports) } \ No newline at end of file