[SLC] drop KtAnalysisSession from SymbolLightSuspendContinuationParameter
^KT-54051
This commit is contained in:
committed by
Space Team
parent
af1d882c74
commit
935f770819
+1
-1
@@ -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
|
||||
|
||||
|
||||
+2
-1
@@ -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,
|
||||
)
|
||||
)
|
||||
|
||||
+25
-19
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user