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" +}