[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.
|
* 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 facadeClassFqName: FqName
|
||||||
val files: Collection<KtFile>
|
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 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? =
|
override fun findMethodBySignature(patternMethod: PsiMethod?, checkBases: Boolean): PsiMethod? =
|
||||||
patternMethod?.let { PsiClassImplUtil.findMethodBySignature(this, it, checkBases) }
|
patternMethod?.let { PsiClassImplUtil.findMethodBySignature(this, it, checkBases) }
|
||||||
|
|
||||||
override fun findMethodsBySignature(patternMethod: PsiMethod?, checkBases: Boolean): Array<PsiMethod?> =
|
override fun findMethodsBySignature(patternMethod: PsiMethod?, checkBases: Boolean): Array<PsiMethod> =
|
||||||
patternMethod?.let { PsiClassImplUtil.findMethodsBySignature(this, it, checkBases) } ?: emptyArray()
|
patternMethod?.let { PsiClassImplUtil.findMethodsBySignature(this, it, checkBases) } ?: PsiMethod.EMPTY_ARRAY
|
||||||
|
|
||||||
override fun findMethodsAndTheirSubstitutorsByName(
|
override fun findMethodsAndTheirSubstitutorsByName(
|
||||||
@NonNls name: String?,
|
@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.openapi.util.TextRange
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.impl.light.LightEmptyImplementsList
|
import com.intellij.psi.impl.light.LightEmptyImplementsList
|
||||||
import com.intellij.psi.impl.light.LightModifierList
|
|
||||||
import org.jetbrains.annotations.NonNls
|
import org.jetbrains.annotations.NonNls
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||||
import org.jetbrains.kotlin.analysis.api.scopes.KtScope
|
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.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
import org.jetbrains.kotlin.fileClasses.isJvmMultifileClassFile
|
import org.jetbrains.kotlin.fileClasses.isJvmMultifileClassFile
|
||||||
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
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.analyzeForLightClasses
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.*
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.*
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
|
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.KtClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
|
||||||
class SymbolLightClassForFacade(
|
internal class SymbolLightClassForFacade(
|
||||||
override val facadeClassFqName: FqName,
|
override val facadeClassFqName: FqName,
|
||||||
override val files: Collection<KtFile>,
|
override val files: Collection<KtFile>,
|
||||||
ktModule: KtModule,
|
ktModule: KtModule,
|
||||||
@@ -58,7 +56,7 @@ class SymbolLightClassForFacade(
|
|||||||
action(files.map { it.getFileSymbol() })
|
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 {
|
private val _modifierList: PsiModifierList by lazyPub {
|
||||||
SymbolLightClassModifierList(
|
SymbolLightClassModifierList(
|
||||||
@@ -82,7 +80,8 @@ class SymbolLightClassForFacade(
|
|||||||
|
|
||||||
override fun getScope(): PsiElement = parent
|
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 ->
|
withFileSymbols { fileSymbols ->
|
||||||
val result = mutableListOf<KtLightMethod>()
|
val result = mutableListOf<KtLightMethod>()
|
||||||
val methodsAndProperties = sequence<KtCallableSymbol> {
|
val methodsAndProperties = sequence<KtCallableSymbol> {
|
||||||
@@ -103,9 +102,7 @@ class SymbolLightClassForFacade(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val multiFileClass: Boolean by lazyPub {
|
private val multiFileClass: Boolean get() = files.size > 1 || firstFileInFacade.isJvmMultifileClassFile
|
||||||
files.size > 1 || firstFileInFacade.isJvmMultifileClassFile
|
|
||||||
}
|
|
||||||
|
|
||||||
context(KtAnalysisSession)
|
context(KtAnalysisSession)
|
||||||
private fun loadFieldsFromFile(
|
private fun loadFieldsFromFile(
|
||||||
@@ -139,7 +136,8 @@ class SymbolLightClassForFacade(
|
|||||||
private fun KtPropertyAccessorSymbol?.isNullOrPublic(): Boolean =
|
private fun KtPropertyAccessorSymbol?.isNullOrPublic(): Boolean =
|
||||||
this?.toPsiVisibilityForMember()?.let { it == PsiModifier.PUBLIC } != false
|
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 result = mutableListOf<KtLightField>()
|
||||||
val nameGenerator = SymbolLightField.FieldNameGenerator()
|
val nameGenerator = SymbolLightField.FieldNameGenerator()
|
||||||
withFileSymbols { fileSymbols ->
|
withFileSymbols { fileSymbols ->
|
||||||
@@ -151,70 +149,40 @@ class SymbolLightClassForFacade(
|
|||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getOwnFields() = _ownFields
|
|
||||||
|
|
||||||
override fun getOwnMethods() = _ownMethods
|
|
||||||
|
|
||||||
override fun copy(): SymbolLightClassForFacade = SymbolLightClassForFacade(facadeClassFqName, files, ktModule)
|
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(
|
private val packageClsFile = FakeFileForLightClass(
|
||||||
firstFileInFacade,
|
firstFileInFacade,
|
||||||
lightClass = { this },
|
lightClass = { this },
|
||||||
packageFqName = packageFqName
|
packageFqName = facadeClassFqName.parent()
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun getParent(): PsiElement = containingFile
|
override fun getParent(): PsiElement = containingFile
|
||||||
|
|
||||||
override val kotlinOrigin: KtClassOrObject? get() = null
|
override val kotlinOrigin: KtClassOrObject? get() = null
|
||||||
|
override fun hasModifierProperty(@NonNls name: String) = name == PsiModifier.PUBLIC || name == PsiModifier.FINAL
|
||||||
val fqName: FqName get() = facadeClassFqName
|
|
||||||
|
|
||||||
override fun hasModifierProperty(@NonNls name: String) = modifierList.hasModifierProperty(name)
|
|
||||||
|
|
||||||
override fun getExtendsList(): PsiReferenceList? = null
|
override fun getExtendsList(): PsiReferenceList? = null
|
||||||
|
|
||||||
override fun isDeprecated() = false
|
override fun isDeprecated() = false
|
||||||
|
|
||||||
override fun isInterface() = false
|
override fun isInterface() = false
|
||||||
|
|
||||||
override fun isAnnotationType() = false
|
override fun isAnnotationType() = false
|
||||||
|
|
||||||
override fun isEnum() = false
|
override fun isEnum() = false
|
||||||
|
|
||||||
override fun getContainingClass(): PsiClass? = 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(): Array<out PsiTypeParameter> = PsiTypeParameter.EMPTY_ARRAY
|
override fun getTypeParameters(): Array<out PsiTypeParameter> = PsiTypeParameter.EMPTY_ARRAY
|
||||||
|
|
||||||
override fun getTypeParameterList(): PsiTypeParameterList? = null
|
override fun getTypeParameterList(): PsiTypeParameterList? = null
|
||||||
|
override fun getImplementsList(): LightEmptyImplementsList = object : LightEmptyImplementsList(manager) {
|
||||||
override fun getImplementsList() = implementsList
|
override fun getParent(): PsiElement = this@SymbolLightClassForFacade
|
||||||
|
}
|
||||||
|
|
||||||
override fun getInterfaces(): Array<out PsiClass> = PsiClass.EMPTY_ARRAY
|
override fun getInterfaces(): Array<out PsiClass> = PsiClass.EMPTY_ARRAY
|
||||||
|
|
||||||
override fun getInnerClasses(): Array<out PsiClass> = 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(): Array<PsiClass> = PsiClass.EMPTY_ARRAY
|
override fun getAllInnerClasses(): Array<PsiClass> = PsiClass.EMPTY_ARRAY
|
||||||
|
|
||||||
override fun findInnerClassByName(@NonNls name: String, checkBases: Boolean): PsiClass? = null
|
override fun findInnerClassByName(@NonNls name: String, checkBases: Boolean): PsiClass? = null
|
||||||
|
|
||||||
override fun isInheritorDeep(baseClass: PsiClass?, classToByPass: PsiClass?): Boolean = false
|
override fun isInheritorDeep(baseClass: PsiClass?, classToByPass: PsiClass?): Boolean = false
|
||||||
|
override fun getName(): String = super<KtLightClassForFacade>.getName()
|
||||||
override fun getName() = super<KtLightClassForFacade>.getName()
|
override fun getQualifiedName(): String = facadeClassFqName.asString()
|
||||||
|
|
||||||
override fun getQualifiedName() = facadeClassFqName.asString()
|
|
||||||
|
|
||||||
override fun getNameIdentifier(): PsiIdentifier? = null
|
override fun getNameIdentifier(): PsiIdentifier? = null
|
||||||
|
|
||||||
override fun isValid() = files.all {
|
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 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 {
|
override fun equals(other: Any?): Boolean {
|
||||||
return this === other || other is SymbolLightClassForFacade &&
|
return this === other || other is SymbolLightClassForFacade &&
|
||||||
@@ -248,18 +214,11 @@ class SymbolLightClassForFacade(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun hashCode() = facadeClassFqName.hashCode()
|
override fun hashCode() = facadeClassFqName.hashCode()
|
||||||
|
|
||||||
override fun toString() = "${SymbolLightClassForFacade::class.java.simpleName}:$facadeClassFqName"
|
override fun toString() = "${SymbolLightClassForFacade::class.java.simpleName}:$facadeClassFqName"
|
||||||
|
|
||||||
override val originKind: LightClassOriginKind get() = LightClassOriginKind.SOURCE
|
override val originKind: LightClassOriginKind get() = LightClassOriginKind.SOURCE
|
||||||
|
|
||||||
override fun getText() = firstFileInFacade.text ?: ""
|
override fun getText() = firstFileInFacade.text ?: ""
|
||||||
|
|
||||||
override fun getTextRange(): TextRange = firstFileInFacade.textRange ?: TextRange.EMPTY_RANGE
|
override fun getTextRange(): TextRange = firstFileInFacade.textRange ?: TextRange.EMPTY_RANGE
|
||||||
|
|
||||||
override fun getTextOffset() = firstFileInFacade.textOffset
|
override fun getTextOffset() = firstFileInFacade.textOffset
|
||||||
|
|
||||||
override fun getStartOffsetInParent() = firstFileInFacade.startOffsetInParent
|
override fun getStartOffsetInParent() = firstFileInFacade.startOffsetInParent
|
||||||
|
|
||||||
override fun isWritable() = files.all { it.isWritable }
|
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 =
|
override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean =
|
||||||
baseClass.qualifiedName == CommonClassNames.JAVA_LANG_OBJECT
|
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 getExtendsList(): PsiReferenceList? = null
|
||||||
override fun getImplementsListTypes(): Array<PsiClassType?> = PsiClassType.EMPTY_ARRAY
|
override fun getImplementsListTypes(): Array<PsiClassType> = PsiClassType.EMPTY_ARRAY
|
||||||
override fun getImplementsList(): PsiReferenceList? = null
|
override fun getImplementsList(): PsiReferenceList? = null
|
||||||
|
|
||||||
@Throws(IncorrectOperationException::class)
|
@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.symbols.pointers.KtSymbolPointer
|
||||||
import org.jetbrains.kotlin.analysis.api.types.*
|
import org.jetbrains.kotlin.analysis.api.types.*
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
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.KtLightElement
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMember
|
import org.jetbrains.kotlin.asJava.elements.KtLightMember
|
||||||
import org.jetbrains.kotlin.asJava.elements.psiType
|
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.name.SpecialNames
|
||||||
import org.jetbrains.kotlin.psi.KtTypeParameterListOwner
|
import org.jetbrains.kotlin.psi.KtTypeParameterListOwner
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment
|
|
||||||
|
|
||||||
internal fun <L : Any> L.invalidAccess(): Nothing =
|
internal fun <L : Any> L.invalidAccess(): Nothing =
|
||||||
error("Cls delegate shouldn't be accessed for symbol light classes! Qualified name: ${javaClass.name}")
|
error("Cls delegate shouldn't be accessed for symbol light classes! Qualified name: ${javaClass.name}")
|
||||||
|
|||||||
Reference in New Issue
Block a user