[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 com.intellij.psi.*
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
|
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.analysis.api.types.KtTypeMappingMode
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.*
|
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.classes.SymbolLightClassBase
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
|
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightTypeParameterList
|
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 org.jetbrains.kotlin.utils.addToStdlib.ifTrue
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
context(KtAnalysisSession)
|
|
||||||
internal class SymbolLightSimpleMethod(
|
internal class SymbolLightSimpleMethod(
|
||||||
private val functionSymbol: KtFunctionSymbol,
|
functionSymbol: KtFunctionSymbol,
|
||||||
lightMemberOrigin: LightMemberOrigin?,
|
lightMemberOrigin: LightMemberOrigin?,
|
||||||
containingClass: SymbolLightClassBase,
|
containingClass: SymbolLightClassBase,
|
||||||
methodIndex: Int,
|
methodIndex: Int,
|
||||||
@@ -38,58 +41,50 @@ internal class SymbolLightSimpleMethod(
|
|||||||
methodIndex = methodIndex,
|
methodIndex = methodIndex,
|
||||||
argumentsSkipMask = argumentsSkipMask,
|
argumentsSkipMask = argumentsSkipMask,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val _name: String by lazyPub {
|
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
|
override fun getName(): String = _name
|
||||||
|
|
||||||
private val _typeParameterList: PsiTypeParameterList? by lazyPub {
|
private val _typeParameterList: PsiTypeParameterList? by lazyPub {
|
||||||
hasTypeParameters().ifTrue {
|
hasTypeParameters().ifTrue {
|
||||||
SymbolLightTypeParameterList(
|
withFunctionSymbol { functionSymbol ->
|
||||||
owner = this,
|
SymbolLightTypeParameterList(
|
||||||
symbolWithTypeParameterList = functionSymbol,
|
owner = this@SymbolLightSimpleMethod,
|
||||||
)
|
symbolWithTypeParameterList = functionSymbol,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hasTypeParameters(): Boolean =
|
override fun hasTypeParameters(): Boolean = hasTypeParameters(ktModule, functionDeclaration, functionSymbolPointer)
|
||||||
functionSymbol.typeParameters.isNotEmpty()
|
|
||||||
|
|
||||||
override fun getTypeParameterList(): PsiTypeParameterList? = _typeParameterList
|
override fun getTypeParameterList(): PsiTypeParameterList? = _typeParameterList
|
||||||
override fun getTypeParameters(): Array<PsiTypeParameter> =
|
override fun getTypeParameters(): Array<PsiTypeParameter> = _typeParameterList?.typeParameters ?: PsiTypeParameter.EMPTY_ARRAY
|
||||||
_typeParameterList?.typeParameters ?: PsiTypeParameter.EMPTY_ARRAY
|
|
||||||
|
|
||||||
private fun computeAnnotations(isPrivate: Boolean): List<PsiAnnotation> {
|
context(KtAnalysisSession)
|
||||||
val nullability = if (isPrivate) {
|
private fun computeAnnotations(functionSymbol: KtFunctionSymbol, isPrivate: Boolean): List<PsiAnnotation> {
|
||||||
NullabilityType.Unknown
|
val nullability = when {
|
||||||
} else {
|
isPrivate -> NullabilityType.Unknown
|
||||||
run l@{
|
functionSymbol.isSuspend -> /* Any? */ NullabilityType.Nullable
|
||||||
val ktType =
|
else -> {
|
||||||
when {
|
val returnType = functionSymbol.returnType
|
||||||
functionSymbol.isSuspend -> // Any?
|
if (returnType.isVoidType) NullabilityType.Unknown else getTypeNullability(returnType)
|
||||||
return@l NullabilityType.Nullable
|
|
||||||
|
|
||||||
isVoidReturnType ->
|
|
||||||
return@l NullabilityType.Unknown
|
|
||||||
|
|
||||||
else ->
|
|
||||||
functionSymbol.returnType
|
|
||||||
}
|
|
||||||
getTypeNullability(ktType)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return functionSymbol.computeAnnotations(
|
return functionSymbol.computeAnnotations(
|
||||||
parent = this,
|
parent = this@SymbolLightSimpleMethod,
|
||||||
nullability = nullability,
|
nullability = nullability,
|
||||||
annotationUseSiteTarget = null,
|
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)
|
if (functionSymbol.hasInlineOnlyAnnotation()) return setOf(PsiModifier.FINAL, PsiModifier.PRIVATE)
|
||||||
|
|
||||||
val finalModifier = kotlinOrigin?.hasModifier(KtTokens.FINAL_KEYWORD) == true
|
val finalModifier = kotlinOrigin?.hasModifier(KtTokens.FINAL_KEYWORD) == true
|
||||||
@@ -123,36 +118,33 @@ internal class SymbolLightSimpleMethod(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val _modifierList: PsiModifierList by lazyPub {
|
private val _modifierList: PsiModifierList by lazyPub {
|
||||||
val modifiers = computeModifiers()
|
withFunctionSymbol { functionSymbol ->
|
||||||
val annotations = computeAnnotations(modifiers.contains(PsiModifier.PRIVATE))
|
val modifiers = computeModifiers(functionSymbol)
|
||||||
SymbolLightMemberModifierList(this, modifiers, annotations)
|
val annotations = computeAnnotations(functionSymbol, modifiers.contains(PsiModifier.PRIVATE))
|
||||||
|
SymbolLightMemberModifierList(this@SymbolLightSimpleMethod, modifiers, annotations)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getModifierList(): PsiModifierList = _modifierList
|
override fun getModifierList(): PsiModifierList = _modifierList
|
||||||
|
|
||||||
override fun isConstructor(): Boolean = false
|
override fun isConstructor(): Boolean = false
|
||||||
|
|
||||||
private val isVoidReturnType: Boolean
|
private val KtType.isVoidType: Boolean get() = isUnit && nullabilityType != NullabilityType.Nullable
|
||||||
get() = functionSymbol.returnType.run {
|
|
||||||
isUnit && nullabilityType != NullabilityType.Nullable
|
|
||||||
}
|
|
||||||
|
|
||||||
private val _returnedType: PsiType by lazyPub {
|
private val _returnedType: PsiType by lazyPub {
|
||||||
val ktType = when {
|
withFunctionSymbol { functionSymbol ->
|
||||||
functionSymbol.isSuspend -> // Any?
|
val ktType = if (functionSymbol.isSuspend) {
|
||||||
analysisSession.builtinTypes.NULLABLE_ANY
|
analysisSession.builtinTypes.NULLABLE_ANY // Any?
|
||||||
|
} else {
|
||||||
|
functionSymbol.returnType.takeUnless { it.isVoidType } ?: return@withFunctionSymbol PsiType.VOID
|
||||||
|
}
|
||||||
|
|
||||||
isVoidReturnType ->
|
ktType.asPsiType(
|
||||||
return@lazyPub PsiType.VOID
|
this@SymbolLightSimpleMethod,
|
||||||
|
KtTypeMappingMode.RETURN_TYPE,
|
||||||
else ->
|
containingClass.isAnnotationType,
|
||||||
functionSymbol.returnType
|
)
|
||||||
}
|
} ?: nonExistentType()
|
||||||
ktType.asPsiType(
|
|
||||||
this@SymbolLightSimpleMethod,
|
|
||||||
KtTypeMappingMode.RETURN_TYPE,
|
|
||||||
containingClass.isAnnotationType
|
|
||||||
) ?: nonExistentType()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getReturnType(): PsiType = _returnedType
|
override fun getReturnType(): PsiType = _returnedType
|
||||||
|
|||||||
Reference in New Issue
Block a user