Avoid clsDelegate access from (UL-)KtLightClassForFacade
This commit is contained in:
+21
-11
@@ -48,7 +48,7 @@ open class KtLightClassForFacade constructor(
|
|||||||
files: Collection<KtFile>
|
files: Collection<KtFile>
|
||||||
) : KtLazyLightClass(manager) {
|
) : KtLazyLightClass(manager) {
|
||||||
|
|
||||||
val files: Collection<KtFile> = files.toSet() // needed for hashCode
|
val files: Collection<KtFile> = files.toSet()
|
||||||
|
|
||||||
private val firstFileInFacade by lazyPub { files.iterator().next() }
|
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 hasModifierProperty(@NonNls name: String) = modifierList.hasModifierProperty(name)
|
||||||
|
|
||||||
|
override fun getExtendsList(): PsiReferenceList? = null
|
||||||
|
|
||||||
override fun isDeprecated() = false
|
override fun isDeprecated() = false
|
||||||
|
|
||||||
override fun isInterface() = false
|
override fun isInterface() = false
|
||||||
@@ -88,33 +90,39 @@ open class KtLightClassForFacade constructor(
|
|||||||
|
|
||||||
override fun isEnum() = false
|
override fun isEnum() = false
|
||||||
|
|
||||||
override fun getContainingClass() = null
|
override fun getContainingClass(): PsiClass? = null
|
||||||
|
|
||||||
override fun getContainingFile() = packageClsFile
|
override fun getContainingFile() = packageClsFile
|
||||||
|
|
||||||
override fun hasTypeParameters() = false
|
override fun hasTypeParameters() = false
|
||||||
|
|
||||||
override fun getTypeParameters() = PsiTypeParameter.EMPTY_ARRAY
|
override fun getTypeParameters(): Array<out PsiTypeParameter> = 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 getImplementsList() = implementsList
|
||||||
|
|
||||||
override fun getImplementsListTypes() = PsiClassType.EMPTY_ARRAY
|
override fun getImplementsListTypes(): Array<out PsiClassType> = PsiClassType.EMPTY_ARRAY
|
||||||
|
|
||||||
override fun getInterfaces() = PsiClass.EMPTY_ARRAY
|
override fun getInterfaces(): Array<out PsiClass> = PsiClass.EMPTY_ARRAY
|
||||||
|
|
||||||
override fun getInnerClasses() = PsiClass.EMPTY_ARRAY
|
override fun getInnerClasses(): Array<out PsiClass> = PsiClass.EMPTY_ARRAY
|
||||||
|
|
||||||
override fun getOwnInnerClasses(): List<PsiClass> = listOf()
|
override fun getOwnInnerClasses(): List<PsiClass> = listOf()
|
||||||
|
|
||||||
override fun getAllInnerClasses() = PsiClass.EMPTY_ARRAY
|
override fun getAllInnerClasses(): Array<out PsiClass> = PsiClass.EMPTY_ARRAY
|
||||||
|
|
||||||
override fun getInitializers() = PsiClassInitializer.EMPTY_ARRAY
|
override fun getInitializers(): Array<out PsiClassInitializer> = 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()
|
override fun getName() = facadeClassFqName.shortName().asString()
|
||||||
|
|
||||||
@@ -158,6 +166,8 @@ open class KtLightClassForFacade constructor(
|
|||||||
|
|
||||||
override fun getQualifiedName() = facadeClassFqName.asString()
|
override fun getQualifiedName() = facadeClassFqName.asString()
|
||||||
|
|
||||||
|
override fun getNameIdentifier(): PsiIdentifier? = null
|
||||||
|
|
||||||
override fun isValid() = files.all { it.isValid && it.hasTopLevelCallables() && facadeClassFqName == it.javaFileFacadeFqName }
|
override fun isValid() = files.all { it.isValid && it.hasTopLevelCallables() && facadeClassFqName == it.javaFileFacadeFqName }
|
||||||
|
|
||||||
override fun copy() = KtLightClassForFacade(manager, facadeClassFqName, lightClassDataCache, files)
|
override fun copy() = KtLightClassForFacade(manager, facadeClassFqName, lightClassDataCache, files)
|
||||||
|
|||||||
+7
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.asJava.classes
|
package org.jetbrains.kotlin.asJava.classes
|
||||||
|
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
|
import com.intellij.psi.impl.PsiSuperMethodImplUtil
|
||||||
import com.intellij.psi.util.CachedValue
|
import com.intellij.psi.util.CachedValue
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder
|
import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||||
@@ -31,12 +32,16 @@ class KtUltraLightClassForFacade(
|
|||||||
return getter()
|
return getter()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getDelegate(): PsiClass = forTooComplex { super.getDelegate() }
|
||||||
|
|
||||||
override val lightClassDataCache: CachedValue<LightClassDataHolder.ForFacade>
|
override val lightClassDataCache: CachedValue<LightClassDataHolder.ForFacade>
|
||||||
get() = forTooComplex { super.lightClassDataCache }
|
get() = forTooComplex { super.lightClassDataCache }
|
||||||
|
|
||||||
override val clsDelegate: PsiClass
|
override val clsDelegate: PsiClass
|
||||||
get() = forTooComplex { super.clsDelegate }
|
get() = forTooComplex { super.clsDelegate }
|
||||||
|
|
||||||
|
override fun getScope(): PsiElement? = if (!tooComplex) parent else super.getScope()
|
||||||
|
|
||||||
private val tooComplex: Boolean by lazyPub {
|
private val tooComplex: Boolean by lazyPub {
|
||||||
filesToSupports.any { (file, support) ->
|
filesToSupports.any { (file, support) ->
|
||||||
file.declarations.any { support.isTooComplexForUltraLightGeneration(it) }
|
file.declarations.any { support.isTooComplexForUltraLightGeneration(it) }
|
||||||
@@ -81,6 +86,8 @@ class KtUltraLightClassForFacade(
|
|||||||
|
|
||||||
override fun getOwnMethods() = if (!tooComplex) ownMethodsForNotTooComplex else super.getOwnMethods()
|
override fun getOwnMethods() = if (!tooComplex) ownMethodsForNotTooComplex else super.getOwnMethods()
|
||||||
|
|
||||||
|
override fun getVisibleSignatures(): MutableCollection<HierarchicalMethodSignature> = PsiSuperMethodImplUtil.getVisibleSignatures(this)
|
||||||
|
|
||||||
override fun copy(): KtLightClassForFacade =
|
override fun copy(): KtLightClassForFacade =
|
||||||
KtUltraLightClassForFacade(manager, facadeClassFqName, lightClassDataCache, files, filesToSupports)
|
KtUltraLightClassForFacade(manager, facadeClassFqName, lightClassDataCache, files, filesToSupports)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user