[SLC] introduce restoreSymbolOrThrowIfDisposed

^KT-54051
This commit is contained in:
Dmitrii Gridin
2022-11-15 19:27:33 +01:00
committed by Space Team
parent 6aaed07a93
commit 5aa7634590
4 changed files with 11 additions and 15 deletions
@@ -44,15 +44,12 @@ abstract class SymbolLightClassForClassOrObject(protected val classOrObject: KtC
StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>> {
protected fun <T> withClassOrObjectSymbol(action: KtAnalysisSession.(KtClassOrObjectSymbol) -> T): T =
analyzeForLightClasses(ktModule) {
action(classOrObject.getClassOrObjectSymbol()!!)
action(requireNotNull(classOrObject.getClassOrObjectSymbol()))
}
protected fun <T> 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()
@@ -29,9 +29,7 @@ internal class SymbolLightFieldForObject(
) : SymbolLightField(containingClass, lightMemberOrigin) {
private fun <T> 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
@@ -44,9 +44,7 @@ internal class SymbolLightFieldForProperty(
private val propertySymbolPointer: KtSymbolPointer<KtPropertySymbol> = propertySymbol.createPointer()
private fun <T> 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 {
@@ -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 <T : KtSymbol> KtSymbolPointer<T>.restoreSymbolOrThrowIfDisposed(): T = requireNotNull(restoreSymbol()) {
"${this::class} pointer already disposed"
}