[SLC] drop KtAnalysisSession from SymbolLightSimpleMethod

^KT-54051
This commit is contained in:
Dmitrii Gridin
2022-11-17 09:12:39 +01:00
committed by Space Team
parent 18f0802de0
commit 029d6bb3a0
@@ -8,12 +8,16 @@ package org.jetbrains.kotlin.light.classes.symbol.methods
import com.intellij.psi.*
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.light.classes.symbol.*
import org.jetbrains.kotlin.light.classes.symbol.annotations.*
import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasInlineOnlyAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmStaticAnnotation
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightTypeParameterList
@@ -22,9 +26,8 @@ import org.jetbrains.kotlin.name.JvmNames.SYNCHRONIZED_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
import java.util.*
context(KtAnalysisSession)
internal class SymbolLightSimpleMethod(
private val functionSymbol: KtFunctionSymbol,
functionSymbol: KtFunctionSymbol,
lightMemberOrigin: LightMemberOrigin?,
containingClass: SymbolLightClassBase,
methodIndex: Int,
@@ -38,58 +41,50 @@ internal class SymbolLightSimpleMethod(
methodIndex = methodIndex,
argumentsSkipMask = argumentsSkipMask,
) {
private val _name: String by lazyPub {
functionSymbol.computeJvmMethodName(functionSymbol.name.asString(), containingClass, annotationUseSiteTarget = null)
withFunctionSymbol { functionSymbol ->
functionSymbol.computeJvmMethodName(functionSymbol.name.asString(), containingClass, annotationUseSiteTarget = null)
}
}
override fun getName(): String = _name
private val _typeParameterList: PsiTypeParameterList? by lazyPub {
hasTypeParameters().ifTrue {
SymbolLightTypeParameterList(
owner = this,
symbolWithTypeParameterList = functionSymbol,
)
withFunctionSymbol { functionSymbol ->
SymbolLightTypeParameterList(
owner = this@SymbolLightSimpleMethod,
symbolWithTypeParameterList = functionSymbol,
)
}
}
}
override fun hasTypeParameters(): Boolean =
functionSymbol.typeParameters.isNotEmpty()
override fun hasTypeParameters(): Boolean = hasTypeParameters(ktModule, functionDeclaration, functionSymbolPointer)
override fun getTypeParameterList(): PsiTypeParameterList? = _typeParameterList
override fun getTypeParameters(): Array<PsiTypeParameter> =
_typeParameterList?.typeParameters ?: PsiTypeParameter.EMPTY_ARRAY
override fun getTypeParameters(): Array<PsiTypeParameter> = _typeParameterList?.typeParameters ?: PsiTypeParameter.EMPTY_ARRAY
private fun computeAnnotations(isPrivate: Boolean): List<PsiAnnotation> {
val nullability = if (isPrivate) {
NullabilityType.Unknown
} else {
run l@{
val ktType =
when {
functionSymbol.isSuspend -> // Any?
return@l NullabilityType.Nullable
isVoidReturnType ->
return@l NullabilityType.Unknown
else ->
functionSymbol.returnType
}
getTypeNullability(ktType)
context(KtAnalysisSession)
private fun computeAnnotations(functionSymbol: KtFunctionSymbol, isPrivate: Boolean): List<PsiAnnotation> {
val nullability = when {
isPrivate -> NullabilityType.Unknown
functionSymbol.isSuspend -> /* Any? */ NullabilityType.Nullable
else -> {
val returnType = functionSymbol.returnType
if (returnType.isVoidType) NullabilityType.Unknown else getTypeNullability(returnType)
}
}
return functionSymbol.computeAnnotations(
parent = this,
parent = this@SymbolLightSimpleMethod,
nullability = nullability,
annotationUseSiteTarget = null,
)
}
private fun computeModifiers(): Set<String> {
context(KtAnalysisSession)
private fun computeModifiers(functionSymbol: KtFunctionSymbol): Set<String> {
if (functionSymbol.hasInlineOnlyAnnotation()) return setOf(PsiModifier.FINAL, PsiModifier.PRIVATE)
val finalModifier = kotlinOrigin?.hasModifier(KtTokens.FINAL_KEYWORD) == true
@@ -123,36 +118,33 @@ internal class SymbolLightSimpleMethod(
}
private val _modifierList: PsiModifierList by lazyPub {
val modifiers = computeModifiers()
val annotations = computeAnnotations(modifiers.contains(PsiModifier.PRIVATE))
SymbolLightMemberModifierList(this, modifiers, annotations)
withFunctionSymbol { functionSymbol ->
val modifiers = computeModifiers(functionSymbol)
val annotations = computeAnnotations(functionSymbol, modifiers.contains(PsiModifier.PRIVATE))
SymbolLightMemberModifierList(this@SymbolLightSimpleMethod, modifiers, annotations)
}
}
override fun getModifierList(): PsiModifierList = _modifierList
override fun isConstructor(): Boolean = false
private val isVoidReturnType: Boolean
get() = functionSymbol.returnType.run {
isUnit && nullabilityType != NullabilityType.Nullable
}
private val KtType.isVoidType: Boolean get() = isUnit && nullabilityType != NullabilityType.Nullable
private val _returnedType: PsiType by lazyPub {
val ktType = when {
functionSymbol.isSuspend -> // Any?
analysisSession.builtinTypes.NULLABLE_ANY
withFunctionSymbol { functionSymbol ->
val ktType = if (functionSymbol.isSuspend) {
analysisSession.builtinTypes.NULLABLE_ANY // Any?
} else {
functionSymbol.returnType.takeUnless { it.isVoidType } ?: return@withFunctionSymbol PsiType.VOID
}
isVoidReturnType ->
return@lazyPub PsiType.VOID
else ->
functionSymbol.returnType
}
ktType.asPsiType(
this@SymbolLightSimpleMethod,
KtTypeMappingMode.RETURN_TYPE,
containingClass.isAnnotationType
) ?: nonExistentType()
ktType.asPsiType(
this@SymbolLightSimpleMethod,
KtTypeMappingMode.RETURN_TYPE,
containingClass.isAnnotationType,
)
} ?: nonExistentType()
}
override fun getReturnType(): PsiType = _returnedType