diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt index 48b599269ed..bcdc1051530 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt @@ -25,7 +25,6 @@ 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.hasDeprecatedAnnotation import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase -import org.jetbrains.kotlin.light.classes.symbol.classes.analyzeForLightClasses import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList import org.jetbrains.kotlin.name.JvmNames.TRANSIENT_ANNOTATION_CLASS_ID import org.jetbrains.kotlin.name.JvmNames.VOLATILE_ANNOTATION_CLASS_ID @@ -44,8 +43,8 @@ internal class SymbolLightFieldForProperty( override val kotlinOrigin: KtCallableDeclaration? = propertySymbol.sourcePsiSafe() private val propertySymbolPointer: KtSymbolPointer = propertySymbol.createPointer() - private fun withPropertySymbol(action: KtAnalysisSession.(KtPropertySymbol) -> T): T = analyzeForLightClasses(ktModule) { - action(propertySymbolPointer.restoreSymbolOrThrowIfDisposed()) + private fun withPropertySymbol(action: context (KtAnalysisSession) (KtPropertySymbol) -> T): T { + return propertySymbolPointer.withSymbol(ktModule, action) } private val _returnedType: PsiType by lazyPub { diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt index c8b70504881..4840ab72a5a 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt @@ -18,13 +18,12 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase -import org.jetbrains.kotlin.light.classes.symbol.classes.analyzeForLightClasses import org.jetbrains.kotlin.light.classes.symbol.compareSymbolPointers import org.jetbrains.kotlin.light.classes.symbol.isValid import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameter import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightSuspendContinuationParameter -import org.jetbrains.kotlin.light.classes.symbol.restoreSymbolOrThrowIfDisposed +import org.jetbrains.kotlin.light.classes.symbol.withSymbol import org.jetbrains.kotlin.psi.KtCallableDeclaration import org.jetbrains.kotlin.psi.KtDeclaration import java.util.* @@ -45,9 +44,7 @@ internal abstract class SymbolLightMethod( @Suppress("UNCHECKED_CAST") protected val functionSymbolPointer: KtSymbolPointer = functionSymbol.createPointer() as KtSymbolPointer - protected fun withFunctionSymbol(action: KtAnalysisSession.(FType) -> T): T = analyzeForLightClasses(ktModule) { - action(functionSymbolPointer.restoreSymbolOrThrowIfDisposed()) - } + protected fun withFunctionSymbol(action: KtAnalysisSession.(FType) -> T): T = functionSymbolPointer.withSymbol(ktModule, action) private val _isVarArgs: Boolean by lazy { functionDeclaration?.valueParameters?.any { it.isVarArg } ?: withFunctionSymbol { functionSymbol -> diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt index b0151fd9a5d..b6c230c0fd8 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt @@ -17,12 +17,11 @@ 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.annotations.SymbolLightSimpleAnnotation -import org.jetbrains.kotlin.light.classes.symbol.classes.analyzeForLightClasses import org.jetbrains.kotlin.light.classes.symbol.isValid 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.light.classes.symbol.withSymbol import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.psi.KtParameter @@ -31,9 +30,7 @@ internal class SymbolLightSuspendContinuationParameter( private val containingMethod: SymbolLightMethodBase, ) : SymbolLightParameterBase(containingMethod) { private inline fun withFunctionSymbol(crossinline action: context(KtAnalysisSession) (KtFunctionSymbol) -> T): T { - return analyzeForLightClasses(ktModule) { - action(this, functionSymbolPointer.restoreSymbolOrThrowIfDisposed()) - } + return functionSymbolPointer.withSymbol(ktModule, action) } override fun getName(): String = SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt index c79f679e4c6..75feee5854f 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt @@ -296,8 +296,8 @@ internal fun hasTypeParameters( ktModule: KtModule, declaration: KtTypeParameterListOwner?, declarationPointer: KtSymbolPointer, -): Boolean = declaration?.typeParameters?.isNotEmpty() ?: analyzeForLightClasses(ktModule) { - declarationPointer.restoreSymbolOrThrowIfDisposed().typeParameters.isNotEmpty() +): Boolean = declaration?.typeParameters?.isNotEmpty() ?: declarationPointer.withSymbol(ktModule) { + it.typeParameters.isNotEmpty() } internal fun KtSymbolPointer<*>.isValid(ktModule: KtModule): Boolean = analyzeForLightClasses(ktModule) { @@ -309,3 +309,8 @@ internal fun compareSymbolPointers(ktModule: KtModule, left: KtSy left.restoreSymbol() == right.restoreSymbol() } } + +internal inline fun KtSymbolPointer.withSymbol( + ktModule: KtModule, + crossinline action: context(KtAnalysisSession) (T) -> R, +): R = analyzeForLightClasses(ktModule) { action(this, restoreSymbolOrThrowIfDisposed()) }