[SLC] drop KtAnalysisSession from SymbolLightSimpleMethod
^KT-54051
This commit is contained in:
committed by
Space Team
parent
18f0802de0
commit
029d6bb3a0
+46
-54
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user