[SLC] drop redundant properties to reduce memory consumption
^KT-56613
This commit is contained in:
committed by
Space Team
parent
6ddf32d013
commit
b565df65c4
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@@ -12,5 +12,5 @@ interface KtLightClassForFacade : KtLightClass {
|
||||
val facadeClassFqName: FqName
|
||||
val files: Collection<KtFile>
|
||||
|
||||
override fun getName() = facadeClassFqName.shortName().asString()
|
||||
override fun getName(): String = facadeClassFqName.shortName().asString()
|
||||
}
|
||||
|
||||
+4
-4
@@ -135,15 +135,15 @@ abstract class SymbolLightClassBase protected constructor(val ktModule: KtModule
|
||||
|
||||
override fun hasTypeParameters(): Boolean = PsiImplUtil.hasTypeParameters(this)
|
||||
|
||||
override fun getExtendsListTypes(): Array<PsiClassType?> = PsiClassImplUtil.getExtendsListTypes(this)
|
||||
override fun getExtendsListTypes(): Array<PsiClassType> = PsiClassImplUtil.getExtendsListTypes(this)
|
||||
|
||||
override fun getImplementsListTypes(): Array<PsiClassType?> = PsiClassImplUtil.getImplementsListTypes(this)
|
||||
override fun getImplementsListTypes(): Array<PsiClassType> = PsiClassImplUtil.getImplementsListTypes(this)
|
||||
|
||||
override fun findMethodBySignature(patternMethod: PsiMethod?, checkBases: Boolean): PsiMethod? =
|
||||
patternMethod?.let { PsiClassImplUtil.findMethodBySignature(this, it, checkBases) }
|
||||
|
||||
override fun findMethodsBySignature(patternMethod: PsiMethod?, checkBases: Boolean): Array<PsiMethod?> =
|
||||
patternMethod?.let { PsiClassImplUtil.findMethodsBySignature(this, it, checkBases) } ?: emptyArray()
|
||||
override fun findMethodsBySignature(patternMethod: PsiMethod?, checkBases: Boolean): Array<PsiMethod> =
|
||||
patternMethod?.let { PsiClassImplUtil.findMethodsBySignature(this, it, checkBases) } ?: PsiMethod.EMPTY_ARRAY
|
||||
|
||||
override fun findMethodsAndTheirSubstitutorsByName(
|
||||
@NonNls name: String?,
|
||||
|
||||
+15
-56
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.light.classes.symbol.classes
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.psi.impl.light.LightEmptyImplementsList
|
||||
import com.intellij.psi.impl.light.LightModifierList
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.scopes.KtScope
|
||||
@@ -25,7 +24,6 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.fileClasses.isJvmMultifileClassFile
|
||||
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||
import org.jetbrains.kotlin.light.classes.symbol.analyzeForLightClasses
|
||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.*
|
||||
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
|
||||
@@ -37,7 +35,7 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
class SymbolLightClassForFacade(
|
||||
internal class SymbolLightClassForFacade(
|
||||
override val facadeClassFqName: FqName,
|
||||
override val files: Collection<KtFile>,
|
||||
ktModule: KtModule,
|
||||
@@ -58,7 +56,7 @@ class SymbolLightClassForFacade(
|
||||
action(files.map { it.getFileSymbol() })
|
||||
}
|
||||
|
||||
private val firstFileInFacade by lazyPub { files.first() }
|
||||
private val firstFileInFacade: KtFile get() = files.first()
|
||||
|
||||
private val _modifierList: PsiModifierList by lazyPub {
|
||||
SymbolLightClassModifierList(
|
||||
@@ -82,7 +80,8 @@ class SymbolLightClassForFacade(
|
||||
|
||||
override fun getScope(): PsiElement = parent
|
||||
|
||||
private val _ownMethods: List<KtLightMethod> by lazyPub {
|
||||
override fun getOwnMethods(): List<PsiMethod> = _ownMethods
|
||||
private val _ownMethods: List<PsiMethod> by lazyPub {
|
||||
withFileSymbols { fileSymbols ->
|
||||
val result = mutableListOf<KtLightMethod>()
|
||||
val methodsAndProperties = sequence<KtCallableSymbol> {
|
||||
@@ -103,9 +102,7 @@ class SymbolLightClassForFacade(
|
||||
}
|
||||
}
|
||||
|
||||
private val multiFileClass: Boolean by lazyPub {
|
||||
files.size > 1 || firstFileInFacade.isJvmMultifileClassFile
|
||||
}
|
||||
private val multiFileClass: Boolean get() = files.size > 1 || firstFileInFacade.isJvmMultifileClassFile
|
||||
|
||||
context(KtAnalysisSession)
|
||||
private fun loadFieldsFromFile(
|
||||
@@ -139,7 +136,8 @@ class SymbolLightClassForFacade(
|
||||
private fun KtPropertyAccessorSymbol?.isNullOrPublic(): Boolean =
|
||||
this?.toPsiVisibilityForMember()?.let { it == PsiModifier.PUBLIC } != false
|
||||
|
||||
private val _ownFields: List<KtLightField> by lazyPub {
|
||||
override fun getOwnFields(): List<PsiField> = _ownFields
|
||||
private val _ownFields: List<PsiField> by lazyPub {
|
||||
val result = mutableListOf<KtLightField>()
|
||||
val nameGenerator = SymbolLightField.FieldNameGenerator()
|
||||
withFileSymbols { fileSymbols ->
|
||||
@@ -151,70 +149,40 @@ class SymbolLightClassForFacade(
|
||||
result
|
||||
}
|
||||
|
||||
override fun getOwnFields() = _ownFields
|
||||
|
||||
override fun getOwnMethods() = _ownMethods
|
||||
|
||||
override fun copy(): SymbolLightClassForFacade = SymbolLightClassForFacade(facadeClassFqName, files, ktModule)
|
||||
|
||||
private val packageFqName: FqName = facadeClassFqName.parent()
|
||||
|
||||
private val modifierList: PsiModifierList = LightModifierList(manager, KotlinLanguage.INSTANCE, PsiModifier.PUBLIC, PsiModifier.FINAL)
|
||||
|
||||
private val implementsList: LightEmptyImplementsList = LightEmptyImplementsList(manager)
|
||||
|
||||
private val packageClsFile = FakeFileForLightClass(
|
||||
firstFileInFacade,
|
||||
lightClass = { this },
|
||||
packageFqName = packageFqName
|
||||
packageFqName = facadeClassFqName.parent()
|
||||
)
|
||||
|
||||
override fun getParent(): PsiElement = containingFile
|
||||
|
||||
override val kotlinOrigin: KtClassOrObject? get() = null
|
||||
|
||||
val fqName: FqName get() = facadeClassFqName
|
||||
|
||||
override fun hasModifierProperty(@NonNls name: String) = modifierList.hasModifierProperty(name)
|
||||
|
||||
override fun hasModifierProperty(@NonNls name: String) = name == PsiModifier.PUBLIC || name == PsiModifier.FINAL
|
||||
override fun getExtendsList(): PsiReferenceList? = null
|
||||
|
||||
override fun isDeprecated() = false
|
||||
|
||||
override fun isInterface() = false
|
||||
|
||||
override fun isAnnotationType() = false
|
||||
|
||||
override fun isEnum() = false
|
||||
|
||||
override fun getContainingClass(): PsiClass? = null
|
||||
|
||||
override fun getContainingFile() = packageClsFile
|
||||
|
||||
override fun hasTypeParameters() = false
|
||||
|
||||
override fun getTypeParameters(): Array<out PsiTypeParameter> = PsiTypeParameter.EMPTY_ARRAY
|
||||
|
||||
override fun getTypeParameterList(): PsiTypeParameterList? = null
|
||||
|
||||
override fun getImplementsList() = implementsList
|
||||
override fun getImplementsList(): LightEmptyImplementsList = object : LightEmptyImplementsList(manager) {
|
||||
override fun getParent(): PsiElement = this@SymbolLightClassForFacade
|
||||
}
|
||||
|
||||
override fun getInterfaces(): Array<out PsiClass> = PsiClass.EMPTY_ARRAY
|
||||
|
||||
override fun getInnerClasses(): Array<out PsiClass> = PsiClass.EMPTY_ARRAY
|
||||
|
||||
override fun getOwnInnerClasses(): List<PsiClass> = listOf()
|
||||
|
||||
override fun getAllInnerClasses(): Array<PsiClass> = PsiClass.EMPTY_ARRAY
|
||||
|
||||
override fun findInnerClassByName(@NonNls name: String, checkBases: Boolean): PsiClass? = null
|
||||
|
||||
override fun isInheritorDeep(baseClass: PsiClass?, classToByPass: PsiClass?): Boolean = false
|
||||
|
||||
override fun getName() = super<KtLightClassForFacade>.getName()
|
||||
|
||||
override fun getQualifiedName() = facadeClassFqName.asString()
|
||||
|
||||
override fun getName(): String = super<KtLightClassForFacade>.getName()
|
||||
override fun getQualifiedName(): String = facadeClassFqName.asString()
|
||||
override fun getNameIdentifier(): PsiIdentifier? = null
|
||||
|
||||
override fun isValid() = files.all {
|
||||
@@ -237,9 +205,7 @@ class SymbolLightClassForFacade(
|
||||
}
|
||||
|
||||
override fun getSupers(): Array<PsiClass> = superClass?.let { arrayOf(it) } ?: PsiClass.EMPTY_ARRAY
|
||||
|
||||
override fun getSuperTypes(): Array<PsiClassType> =
|
||||
arrayOf(PsiType.getJavaLangObject(manager, resolveScope))
|
||||
override fun getSuperTypes(): Array<PsiClassType> = arrayOf(PsiType.getJavaLangObject(manager, resolveScope))
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
return this === other || other is SymbolLightClassForFacade &&
|
||||
@@ -248,18 +214,11 @@ class SymbolLightClassForFacade(
|
||||
}
|
||||
|
||||
override fun hashCode() = facadeClassFqName.hashCode()
|
||||
|
||||
override fun toString() = "${SymbolLightClassForFacade::class.java.simpleName}:$facadeClassFqName"
|
||||
|
||||
override val originKind: LightClassOriginKind get() = LightClassOriginKind.SOURCE
|
||||
|
||||
override fun getText() = firstFileInFacade.text ?: ""
|
||||
|
||||
override fun getTextRange(): TextRange = firstFileInFacade.textRange ?: TextRange.EMPTY_RANGE
|
||||
|
||||
override fun getTextOffset() = firstFileInFacade.textOffset
|
||||
|
||||
override fun getStartOffsetInParent() = firstFileInFacade.startOffsetInParent
|
||||
|
||||
override fun isWritable() = files.all { it.isWritable }
|
||||
}
|
||||
|
||||
+2
-2
@@ -53,9 +53,9 @@ internal class SymbolLightClassForInterfaceDefaultImpls(private val containingCl
|
||||
override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean =
|
||||
baseClass.qualifiedName == CommonClassNames.JAVA_LANG_OBJECT
|
||||
|
||||
override fun getExtendsListTypes(): Array<PsiClassType?> = PsiClassType.EMPTY_ARRAY
|
||||
override fun getExtendsListTypes(): Array<PsiClassType> = PsiClassType.EMPTY_ARRAY
|
||||
override fun getExtendsList(): PsiReferenceList? = null
|
||||
override fun getImplementsListTypes(): Array<PsiClassType?> = PsiClassType.EMPTY_ARRAY
|
||||
override fun getImplementsListTypes(): Array<PsiClassType> = PsiClassType.EMPTY_ARRAY
|
||||
override fun getImplementsList(): PsiReferenceList? = null
|
||||
|
||||
@Throws(IncorrectOperationException::class)
|
||||
|
||||
+1
-1
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.types.*
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightMember
|
||||
import org.jetbrains.kotlin.asJava.elements.psiType
|
||||
@@ -32,7 +33,6 @@ import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.SpecialNames
|
||||
import org.jetbrains.kotlin.psi.KtTypeParameterListOwner
|
||||
import java.util.*
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment
|
||||
|
||||
internal fun <L : Any> L.invalidAccess(): Nothing =
|
||||
error("Cls delegate shouldn't be accessed for symbol light classes! Qualified name: ${javaClass.name}")
|
||||
|
||||
Reference in New Issue
Block a user