[SLC] reduce amount usages of analyzeForLightClasses

^KT-56046
This commit is contained in:
Dmitrii Gridin
2023-01-26 20:57:14 +01:00
committed by Space Team
parent dd5d858ad5
commit 58236b8bbd
3 changed files with 37 additions and 38 deletions
@@ -130,8 +130,8 @@ internal class SymbolLightAccessorMethod private constructor(
private val isParameter: Boolean get() = containingPropertyDeclaration == null || containingPropertyDeclaration is KtParameter private val isParameter: Boolean get() = containingPropertyDeclaration == null || containingPropertyDeclaration is KtParameter
override fun computeThrowsList(builder: LightReferenceListBuilder) { override fun computeThrowsList(builder: LightReferenceListBuilder) {
analyzeForLightClasses(ktModule) { propertyAccessorSymbolPointer.withSymbol(ktModule) { accessorSymbol ->
propertyAccessorSymbol().computeThrowsList( accessorSymbol.computeThrowsList(
builder, builder,
accessorSite, accessorSite,
this@SymbolLightAccessorMethod, this@SymbolLightAccessorMethod,
@@ -148,8 +148,7 @@ internal class SymbolLightAccessorMethod private constructor(
val modality = if (containingClass.isInterface) { val modality = if (containingClass.isInterface) {
PsiModifier.ABSTRACT PsiModifier.ABSTRACT
} else { } else {
analyzeForLightClasses(ktModule) { containingPropertySymbolPointer.withSymbol(ktModule) { propertySymbol ->
val propertySymbol = propertySymbol()
propertySymbol.computeSimpleModality()?.takeUnless { it.isSuppressedFinalModifier(containingClass, propertySymbol) } propertySymbol.computeSimpleModality()?.takeUnless { it.isSuppressedFinalModifier(containingClass, propertySymbol) }
} }
} }
@@ -201,8 +200,8 @@ internal class SymbolLightAccessorMethod private constructor(
!modifierList.hasModifierProperty(PsiModifier.PRIVATE) !modifierList.hasModifierProperty(PsiModifier.PRIVATE)
if (nullabilityApplicable) { if (nullabilityApplicable) {
analyzeForLightClasses(ktModule) { containingPropertySymbolPointer.withSymbol(ktModule) { propertySymbol ->
getTypeNullability(propertySymbol().returnType) getTypeNullability(propertySymbol.returnType)
} }
} else { } else {
NullabilityType.Unknown NullabilityType.Unknown
@@ -233,8 +232,9 @@ internal class SymbolLightAccessorMethod private constructor(
private val _returnedType: PsiType by lazyPub { private val _returnedType: PsiType by lazyPub {
if (!isGetter) return@lazyPub PsiType.VOID if (!isGetter) return@lazyPub PsiType.VOID
analyzeForLightClasses(ktModule) {
propertySymbol().returnType.asPsiType( containingPropertySymbolPointer.withSymbol(ktModule) { propertySymbol ->
propertySymbol.returnType.asPsiType(
this@SymbolLightAccessorMethod, this@SymbolLightAccessorMethod,
allowErrorTypes = true, allowErrorTypes = true,
KtTypeMappingMode.RETURN_TYPE, KtTypeMappingMode.RETURN_TYPE,
@@ -270,18 +270,16 @@ internal class SymbolLightAccessorMethod private constructor(
private val _parametersList by lazyPub { private val _parametersList by lazyPub {
val parameterPopulator: (LightParameterListBuilder) -> Unit = if (!isGetter) { val parameterPopulator: (LightParameterListBuilder) -> Unit = if (!isGetter) {
{ builder -> { builder ->
analyzeForLightClasses(ktModule) { propertyAccessorSymbolPointer.withSymbol(ktModule) { accessorSymbol ->
val propertyParameter = (propertyAccessorSymbol() as? KtPropertySetterSymbol)?.parameter val setterParameter = (accessorSymbol as? KtPropertySetterSymbol)?.parameter ?: return@withSymbol
if (propertyParameter != null) { builder.addParameter(
builder.addParameter( SymbolLightSetterParameter(
SymbolLightSetterParameter( ktAnalysisSession = this,
ktAnalysisSession = this, containingPropertySymbolPointer = containingPropertySymbolPointer,
containingPropertySymbolPointer = containingPropertySymbolPointer, parameterSymbol = setterParameter,
parameterSymbol = propertyParameter, containingMethod = this@SymbolLightAccessorMethod,
containingMethod = this@SymbolLightAccessorMethod,
)
) )
} )
} }
} }
} else { } else {
@@ -301,7 +299,13 @@ internal class SymbolLightAccessorMethod private constructor(
super.isValid() && propertyAccessorDeclaration?.isValid ?: propertyAccessorSymbolPointer.isValid(ktModule) super.isValid() && propertyAccessorDeclaration?.isValid ?: propertyAccessorSymbolPointer.isValid(ktModule)
private val _isOverride: Boolean by lazyPub { private val _isOverride: Boolean by lazyPub {
if (isTopLevel) false else analyzeForLightClasses(ktModule) { propertyAccessorSymbol().isOverride } if (isTopLevel) {
false
} else {
propertyAccessorSymbolPointer.withSymbol(ktModule) { accessorSymbol ->
accessorSymbol.isOverride
}
}
} }
override fun isOverride(): Boolean = _isOverride override fun isOverride(): Boolean = _isOverride
@@ -309,8 +313,8 @@ internal class SymbolLightAccessorMethod private constructor(
private val _defaultValue: PsiAnnotationMemberValue? by lazyPub { private val _defaultValue: PsiAnnotationMemberValue? by lazyPub {
if (!containingClass.isAnnotationType) return@lazyPub null if (!containingClass.isAnnotationType) return@lazyPub null
analyzeForLightClasses(ktModule) { containingPropertySymbolPointer.withSymbol(ktModule) { propertySymbol ->
when (val initializer = propertySymbol().initializer) { when (val initializer = propertySymbol.initializer) {
is KtConstantInitializerValue -> initializer.constant.createPsiLiteral(this@SymbolLightAccessorMethod) is KtConstantInitializerValue -> initializer.constant.createPsiLiteral(this@SymbolLightAccessorMethod)
is KtConstantValueForAnnotation -> initializer.annotationValue.toAnnotationMemberValue(this@SymbolLightAccessorMethod) is KtConstantValueForAnnotation -> initializer.annotationValue.toAnnotationMemberValue(this@SymbolLightAccessorMethod)
is KtNonConstantInitializerValue -> null is KtNonConstantInitializerValue -> null
@@ -12,10 +12,9 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithModality
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility 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.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.light.classes.symbol.analyzeForLightClasses
import org.jetbrains.kotlin.light.classes.symbol.computeSimpleModality import org.jetbrains.kotlin.light.classes.symbol.computeSimpleModality
import org.jetbrains.kotlin.light.classes.symbol.restoreSymbolOrThrowIfDisposed
import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForMember import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForMember
import org.jetbrains.kotlin.light.classes.symbol.withSymbol
import org.jetbrains.kotlin.utils.keysToMap import org.jetbrains.kotlin.utils.keysToMap
import java.util.concurrent.atomic.AtomicReference import java.util.concurrent.atomic.AtomicReference
@@ -54,8 +53,8 @@ internal class LazyModifiersBox(
ktModule: KtModule, ktModule: KtModule,
declarationPointer: KtSymbolPointer<KtSymbolWithVisibility>, declarationPointer: KtSymbolPointer<KtSymbolWithVisibility>,
): PersistentMap<String, Boolean> { ): PersistentMap<String, Boolean> {
val visibility = analyzeForLightClasses(ktModule) { val visibility = declarationPointer.withSymbol(ktModule) {
declarationPointer.restoreSymbolOrThrowIfDisposed().toPsiVisibilityForMember() it.toPsiVisibilityForMember()
} }
return VISIBILITY_MODIFIERS_MAP.with(visibility) return VISIBILITY_MODIFIERS_MAP.with(visibility)
@@ -65,8 +64,8 @@ internal class LazyModifiersBox(
ktModule: KtModule, ktModule: KtModule,
declarationPointer: KtSymbolPointer<KtSymbolWithModality>, declarationPointer: KtSymbolPointer<KtSymbolWithModality>,
): PersistentMap<String, Boolean> { ): PersistentMap<String, Boolean> {
val modality = analyzeForLightClasses(ktModule) { val modality = declarationPointer.withSymbol(ktModule) {
declarationPointer.restoreSymbolOrThrowIfDisposed().computeSimpleModality() it.computeSimpleModality()
} }
return MODALITY_MODIFIERS_MAP.with(modality) return MODALITY_MODIFIERS_MAP.with(modality)
@@ -29,21 +29,17 @@ internal class SymbolLightParameterForReceiver private constructor(
methodName: String, methodName: String,
method: SymbolLightMethodBase, method: SymbolLightMethodBase,
) : SymbolLightParameterBase(method) { ) : SymbolLightParameterBase(method) {
private inline fun <T> withReceiverSymbol(crossinline action: context(KtAnalysisSession) (KtReceiverParameterSymbol) -> T): T { private inline fun <T> withReceiverSymbol(crossinline action: context(KtAnalysisSession) (KtReceiverParameterSymbol) -> T): T =
return analyzeForLightClasses(ktModule) { receiverPointer.withSymbol(ktModule, action)
action(this, receiverPointer.restoreSymbolOrThrowIfDisposed())
}
}
companion object { companion object {
fun tryGet( fun tryGet(
callableSymbolPointer: KtSymbolPointer<KtCallableSymbol>, callableSymbolPointer: KtSymbolPointer<KtCallableSymbol>,
method: SymbolLightMethodBase method: SymbolLightMethodBase
): SymbolLightParameterForReceiver? = analyzeForLightClasses(method.ktModule) { ): SymbolLightParameterForReceiver? = callableSymbolPointer.withSymbol(method.ktModule) { callableSymbol ->
val callableSymbol = callableSymbolPointer.restoreSymbolOrThrowIfDisposed() if (callableSymbol !is KtNamedSymbol) return@withSymbol null
if (callableSymbol !is KtNamedSymbol) return@analyzeForLightClasses null if (!callableSymbol.isExtension) return@withSymbol null
if (!callableSymbol.isExtension) return@analyzeForLightClasses null val receiverSymbol = callableSymbol.receiverParameter ?: return@withSymbol null
val receiverSymbol = callableSymbol.receiverParameter ?: return@analyzeForLightClasses null
SymbolLightParameterForReceiver( SymbolLightParameterForReceiver(
receiverPointer = receiverSymbol.createPointer(), receiverPointer = receiverSymbol.createPointer(),