[SLC] introduce restoreSymbolOrThrowIfDisposed
^KT-54051
This commit is contained in:
committed by
Space Team
parent
6aaed07a93
commit
5aa7634590
+2
-5
@@ -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()
|
||||
|
||||
+1
-3
@@ -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
|
||||
|
||||
+1
-3
@@ -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 {
|
||||
|
||||
+7
-4
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user