[SLC] introduce some utils
^KT-54051
This commit is contained in:
committed by
Space Team
parent
de8a19d085
commit
e7b1206466
+2
-3
@@ -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<KtCallableDeclaration>()
|
||||
private val propertySymbolPointer: KtSymbolPointer<KtPropertySymbol> = propertySymbol.createPointer()
|
||||
|
||||
private fun <T> withPropertySymbol(action: KtAnalysisSession.(KtPropertySymbol) -> T): T = analyzeForLightClasses(ktModule) {
|
||||
action(propertySymbolPointer.restoreSymbolOrThrowIfDisposed())
|
||||
private fun <T> withPropertySymbol(action: context (KtAnalysisSession) (KtPropertySymbol) -> T): T {
|
||||
return propertySymbolPointer.withSymbol(ktModule, action)
|
||||
}
|
||||
|
||||
private val _returnedType: PsiType by lazyPub {
|
||||
|
||||
+2
-5
@@ -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<FType : KtFunctionLikeSymbol>(
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
protected val functionSymbolPointer: KtSymbolPointer<FType> = functionSymbol.createPointer() as KtSymbolPointer<FType>
|
||||
|
||||
protected fun <T> withFunctionSymbol(action: KtAnalysisSession.(FType) -> T): T = analyzeForLightClasses(ktModule) {
|
||||
action(functionSymbolPointer.restoreSymbolOrThrowIfDisposed())
|
||||
}
|
||||
protected fun <T> withFunctionSymbol(action: KtAnalysisSession.(FType) -> T): T = functionSymbolPointer.withSymbol(ktModule, action)
|
||||
|
||||
private val _isVarArgs: Boolean by lazy {
|
||||
functionDeclaration?.valueParameters?.any { it.isVarArg } ?: withFunctionSymbol { functionSymbol ->
|
||||
|
||||
+2
-5
@@ -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 <T> 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
|
||||
|
||||
+7
-2
@@ -296,8 +296,8 @@ internal fun hasTypeParameters(
|
||||
ktModule: KtModule,
|
||||
declaration: KtTypeParameterListOwner?,
|
||||
declarationPointer: KtSymbolPointer<KtSymbolWithTypeParameters>,
|
||||
): 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 <T : KtSymbol> compareSymbolPointers(ktModule: KtModule, left: KtSy
|
||||
left.restoreSymbol() == right.restoreSymbol()
|
||||
}
|
||||
}
|
||||
|
||||
internal inline fun <T : KtSymbol, R> KtSymbolPointer<T>.withSymbol(
|
||||
ktModule: KtModule,
|
||||
crossinline action: context(KtAnalysisSession) (T) -> R,
|
||||
): R = analyzeForLightClasses(ktModule) { action(this, restoreSymbolOrThrowIfDisposed()) }
|
||||
|
||||
Reference in New Issue
Block a user