[SLC] drop KtAnalysisSession from SymbolLightSuspendContinuationParameter

^KT-54051
This commit is contained in:
Dmitrii Gridin
2022-11-17 10:26:00 +01:00
committed by Space Team
parent af1d882c74
commit 935f770819
3 changed files with 28 additions and 21 deletions
@@ -21,7 +21,7 @@ internal abstract class SymbolLightMemberBase<T : PsiMember>(
override val lightMemberOrigin: LightMemberOrigin?,
private val containingClass: SymbolLightClassBase,
) : KtLightElementBase(containingClass), PsiMember, KtLightMember<T> {
protected val ktModule: KtModule get() = containingClass.ktModule
val ktModule: KtModule get() = containingClass.ktModule
override fun hasModifierProperty(name: String): Boolean = modifierList?.hasModifierProperty(name) ?: false
@@ -76,8 +76,9 @@ internal abstract class SymbolLightMethod<FType : KtFunctionLikeSymbol>(
if ((functionSymbol as? KtFunctionSymbol)?.isSuspend == true) {
builder.addParameter(
@Suppress("UNCHECKED_CAST")
SymbolLightSuspendContinuationParameter(
functionSymbol = functionSymbol,
functionSymbolPointer = functionSymbolPointer as KtSymbolPointer<KtFunctionSymbol>,
containingMethod = this@SymbolLightMethod,
)
)
@@ -10,48 +10,52 @@ import com.intellij.psi.PsiModifierList
import com.intellij.psi.PsiType
import org.jetbrains.annotations.NotNull
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.analyze
import org.jetbrains.kotlin.analysis.api.components.buildClassType
import org.jetbrains.kotlin.analysis.api.lifetime.isValid
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.isPrivateOrPrivateToThis
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME
import org.jetbrains.kotlin.light.classes.symbol.SymbolLightIdentifier
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolLightSimpleAnnotation
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
import org.jetbrains.kotlin.light.classes.symbol.restoreSymbolOrThrowIfDisposed
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.psi.KtParameter
context(KtAnalysisSession)
internal class SymbolLightSuspendContinuationParameter(
private val functionSymbol: KtFunctionSymbol,
private val functionSymbolPointer: KtSymbolPointer<KtFunctionSymbol>,
private val containingMethod: SymbolLightMethodBase,
) : SymbolLightParameterBase(containingMethod) {
private val ktModule get() = containingMethod.ktModule
private inline fun <T> withFunctionSymbol(crossinline action: context(KtAnalysisSession) (KtFunctionSymbol) -> T): T {
return analyze(ktModule) {
action(this, functionSymbolPointer.restoreSymbolOrThrowIfDisposed())
}
}
override fun getName(): String = SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME
override fun getNameIdentifier(): PsiIdentifier = _identifier
private val _identifier: PsiIdentifier by lazyPub {
SymbolLightIdentifier(this, functionSymbol)
}
override fun getNameIdentifier(): PsiIdentifier? = null
override fun getType(): PsiType = _type
private val _type by lazyPub {
buildClassType(StandardClassIds.Continuation) { argument(functionSymbol.returnType) }
.asPsiType(this)
?: nonExistentType()
withFunctionSymbol { functionSymbol ->
buildClassType(StandardClassIds.Continuation) { argument(functionSymbol.returnType) }.asPsiType(this) ?: nonExistentType()
}
}
override fun isVarArgs(): Boolean = false
override fun getModifierList(): PsiModifierList = _modifierList
private val _modifierList: PsiModifierList by lazyPub {
private val _modifierList: PsiModifierList by lazy {
val lazyAnnotations = lazy {
if (functionSymbol.visibility.isPrivateOrPrivateToThis())
if (withFunctionSymbol { it.visibility.isPrivateOrPrivateToThis() })
emptyList()
else
listOf(SymbolLightSimpleAnnotation(NotNull::class.java.name, this@SymbolLightSuspendContinuationParameter))
@@ -64,11 +68,13 @@ internal class SymbolLightSuspendContinuationParameter(
override val kotlinOrigin: KtParameter? = null
override fun equals(other: Any?): Boolean =
this === other ||
(other is SymbolLightSuspendContinuationParameter && functionSymbol == other.functionSymbol)
override fun equals(other: Any?): Boolean = this === other ||
other is SymbolLightSuspendContinuationParameter &&
containingMethod == other.containingMethod
override fun hashCode(): Int = functionSymbol.hashCode() * 31 + containingMethod.hashCode()
override fun hashCode(): Int = name.hashCode() * 31 + containingMethod.hashCode()
override fun isValid(): Boolean = super.isValid() && functionSymbol.isValid()
override fun isValid(): Boolean = super.isValid() && analyze(ktModule) {
functionSymbolPointer.restoreSymbol() != null
}
}