[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.hasAnnotation
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
|
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.SymbolLightClassBase
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.classes.analyzeForLightClasses
|
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
|
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.TRANSIENT_ANNOTATION_CLASS_ID
|
||||||
import org.jetbrains.kotlin.name.JvmNames.VOLATILE_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>()
|
override val kotlinOrigin: KtCallableDeclaration? = propertySymbol.sourcePsiSafe<KtCallableDeclaration>()
|
||||||
private val propertySymbolPointer: KtSymbolPointer<KtPropertySymbol> = propertySymbol.createPointer()
|
private val propertySymbolPointer: KtSymbolPointer<KtPropertySymbol> = propertySymbol.createPointer()
|
||||||
|
|
||||||
private fun <T> withPropertySymbol(action: KtAnalysisSession.(KtPropertySymbol) -> T): T = analyzeForLightClasses(ktModule) {
|
private fun <T> withPropertySymbol(action: context (KtAnalysisSession) (KtPropertySymbol) -> T): T {
|
||||||
action(propertySymbolPointer.restoreSymbolOrThrowIfDisposed())
|
return propertySymbolPointer.withSymbol(ktModule, action)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val _returnedType: PsiType by lazyPub {
|
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.asJava.elements.KtLightIdentifier
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
|
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.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.compareSymbolPointers
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.isValid
|
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.SymbolLightParameter
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList
|
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.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.KtCallableDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -45,9 +44,7 @@ internal abstract class SymbolLightMethod<FType : KtFunctionLikeSymbol>(
|
|||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
protected val functionSymbolPointer: KtSymbolPointer<FType> = functionSymbol.createPointer() as KtSymbolPointer<FType>
|
protected val functionSymbolPointer: KtSymbolPointer<FType> = functionSymbol.createPointer() as KtSymbolPointer<FType>
|
||||||
|
|
||||||
protected fun <T> withFunctionSymbol(action: KtAnalysisSession.(FType) -> T): T = analyzeForLightClasses(ktModule) {
|
protected fun <T> withFunctionSymbol(action: KtAnalysisSession.(FType) -> T): T = functionSymbolPointer.withSymbol(ktModule, action)
|
||||||
action(functionSymbolPointer.restoreSymbolOrThrowIfDisposed())
|
|
||||||
}
|
|
||||||
|
|
||||||
private val _isVarArgs: Boolean by lazy {
|
private val _isVarArgs: Boolean by lazy {
|
||||||
functionDeclaration?.valueParameters?.any { it.isVarArg } ?: withFunctionSymbol { functionSymbol ->
|
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.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME
|
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.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.isValid
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
|
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.modifierLists.SymbolLightClassModifierList
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
|
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.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
import org.jetbrains.kotlin.psi.KtParameter
|
||||||
|
|
||||||
@@ -31,9 +30,7 @@ internal class SymbolLightSuspendContinuationParameter(
|
|||||||
private val containingMethod: SymbolLightMethodBase,
|
private val containingMethod: SymbolLightMethodBase,
|
||||||
) : SymbolLightParameterBase(containingMethod) {
|
) : SymbolLightParameterBase(containingMethod) {
|
||||||
private inline fun <T> withFunctionSymbol(crossinline action: context(KtAnalysisSession) (KtFunctionSymbol) -> T): T {
|
private inline fun <T> withFunctionSymbol(crossinline action: context(KtAnalysisSession) (KtFunctionSymbol) -> T): T {
|
||||||
return analyzeForLightClasses(ktModule) {
|
return functionSymbolPointer.withSymbol(ktModule, action)
|
||||||
action(this, functionSymbolPointer.restoreSymbolOrThrowIfDisposed())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getName(): String = SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME
|
override fun getName(): String = SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME
|
||||||
|
|||||||
+7
-2
@@ -296,8 +296,8 @@ internal fun hasTypeParameters(
|
|||||||
ktModule: KtModule,
|
ktModule: KtModule,
|
||||||
declaration: KtTypeParameterListOwner?,
|
declaration: KtTypeParameterListOwner?,
|
||||||
declarationPointer: KtSymbolPointer<KtSymbolWithTypeParameters>,
|
declarationPointer: KtSymbolPointer<KtSymbolWithTypeParameters>,
|
||||||
): Boolean = declaration?.typeParameters?.isNotEmpty() ?: analyzeForLightClasses(ktModule) {
|
): Boolean = declaration?.typeParameters?.isNotEmpty() ?: declarationPointer.withSymbol(ktModule) {
|
||||||
declarationPointer.restoreSymbolOrThrowIfDisposed().typeParameters.isNotEmpty()
|
it.typeParameters.isNotEmpty()
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun KtSymbolPointer<*>.isValid(ktModule: KtModule): Boolean = analyzeForLightClasses(ktModule) {
|
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()
|
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