From 5aa7634590fe5adf1e49ab7c9b6d80a89724ed8a Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Tue, 15 Nov 2022 19:27:33 +0100 Subject: [PATCH] [SLC] introduce restoreSymbolOrThrowIfDisposed ^KT-54051 --- .../classes/SymbolLightClassForClassOrObject.kt | 7 ++----- .../symbol/fields/SymbolLightFieldForObject.kt | 4 +--- .../symbol/fields/SymbolLightFieldForProperty.kt | 4 +--- .../kotlin/light/classes/symbol/symbolLightUtils.kt | 11 +++++++---- 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt index 0d3bc7cd169..5164ed1e4ac 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt @@ -44,15 +44,12 @@ abstract class SymbolLightClassForClassOrObject(protected val classOrObject: KtC StubBasedPsiElement> { protected fun withClassOrObjectSymbol(action: KtAnalysisSession.(KtClassOrObjectSymbol) -> T): T = analyzeForLightClasses(ktModule) { - action(classOrObject.getClassOrObjectSymbol()!!) + action(requireNotNull(classOrObject.getClassOrObjectSymbol())) } protected fun withNamedClassOrObjectSymbol(action: KtAnalysisSession.(KtNamedClassOrObjectSymbol) -> T): T = analyzeForLightClasses(ktModule) { - val namedClassOrObjectSymbol = classOrObject.getNamedClassOrObjectSymbol() - require(namedClassOrObjectSymbol != null) - - action(namedClassOrObjectSymbol) + action(requireNotNull(classOrObject.getNamedClassOrObjectSymbol())) } override val isTopLevel: Boolean get() = classOrObject.isTopLevel() diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForObject.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForObject.kt index 7e910def353..eef5f45de0c 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForObject.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForObject.kt @@ -29,9 +29,7 @@ internal class SymbolLightFieldForObject( ) : SymbolLightField(containingClass, lightMemberOrigin) { private fun withObjectDeclarationSymbol(action: KtAnalysisSession.(KtNamedClassOrObjectSymbol) -> T): T = analyzeForLightClasses(objectDeclaration) { - val namedClassOrObjectSymbol = objectDeclaration.getNamedClassOrObjectSymbol() - require(namedClassOrObjectSymbol != null) - action(namedClassOrObjectSymbol) + action(requireNotNull(objectDeclaration.getNamedClassOrObjectSymbol())) } override val kotlinOrigin: KtObjectDeclaration = objectDeclaration 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 4c565c2993e..23d92b514e3 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 @@ -44,9 +44,7 @@ internal class SymbolLightFieldForProperty( private val propertySymbolPointer: KtSymbolPointer = propertySymbol.createPointer() private fun withPropertySymbol(action: KtAnalysisSession.(KtPropertySymbol) -> T): T = analyzeForLightClasses(ktModule) { - val restoreSymbol = propertySymbolPointer.restoreSymbol() - requireNotNull(restoreSymbol) { "pointer already disposed" } - action(restoreSymbol) + action(propertySymbolPointer.restoreSymbolOrThrowIfDisposed()) } private val _returnedType: PsiType by lazyPub { 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 0fa770da712..f2860f19055 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 @@ -12,12 +12,10 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.annotations.* import org.jetbrains.kotlin.analysis.api.base.KtConstantValue import org.jetbrains.kotlin.analysis.api.components.DefaultTypeClassIds -import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol -import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol -import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol -import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol +import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithModality import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility +import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.types.* import org.jetbrains.kotlin.asJava.elements.KtLightElement import org.jetbrains.kotlin.asJava.elements.KtLightMember @@ -284,3 +282,8 @@ internal fun KtConstantValue.createPsiLiteral(parent: PsiElement): PsiExpression internal fun BitSet.copy(): BitSet = clone() as BitSet + +context(KtAnalysisSession) +internal fun KtSymbolPointer.restoreSymbolOrThrowIfDisposed(): T = requireNotNull(restoreSymbol()) { + "${this::class} pointer already disposed" +}