[AA FIR] support symbol pointer for property from constructor
^KT-54311 ^KT-54311
This commit is contained in:
committed by
Space Team
parent
fe93f49ff7
commit
bbe1aa61af
+11
-5
@@ -19,14 +19,12 @@ import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.requireOwnerPointe
|
||||
import org.jetbrains.kotlin.analysis.api.fir.utils.cached
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyGetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.UnsupportedSymbolKind
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointerDelegator
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
@@ -127,7 +125,15 @@ internal class KtFirKotlinPropertySymbol(
|
||||
override val hasSetter: Boolean get() = withValidityAssertion { firSymbol.setterSymbol != null }
|
||||
|
||||
override fun createPointer(): KtSymbolPointer<KtKotlinPropertySymbol> = withValidityAssertion {
|
||||
KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it }
|
||||
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtVariableLikeSymbol>(this)?.let { psiPointer ->
|
||||
return symbolPointerDelegator(psiPointer) {
|
||||
when (it) {
|
||||
is KtKotlinPropertySymbol -> it
|
||||
is KtValueParameterSymbol -> it.generatedPrimaryConstructorProperty
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return when (val kind = symbolKind) {
|
||||
KtSymbolKind.TOP_LEVEL -> KtFirTopLevelPropertySymbolPointer(firSymbol.callableId, firSymbol.createSignature())
|
||||
|
||||
+11
@@ -38,3 +38,14 @@ public inline fun <S : KtSymbol> symbolPointer(crossinline getSymbol: (KtAnalysi
|
||||
@Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol")
|
||||
override fun restoreSymbol(analysisSession: KtAnalysisSession): S? = getSymbol(analysisSession)
|
||||
}
|
||||
|
||||
public inline fun <T : KtSymbol, R : KtSymbol> symbolPointerDelegator(
|
||||
pointer: KtSymbolPointer<T>,
|
||||
crossinline transformer: context(KtAnalysisSession) (T) -> R?,
|
||||
): KtSymbolPointer<R> = object : KtSymbolPointer<R>() {
|
||||
@Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol")
|
||||
override fun restoreSymbol(analysisSession: KtAnalysisSession): R? = with(analysisSession) {
|
||||
val symbol = pointer.restoreSymbol() ?: return null
|
||||
transformer(this, symbol)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// DO_NOT_CHECK_SYMBOL_RESTORE
|
||||
// DO_NOT_CHECK_SYMBOL_RESTORE_K1
|
||||
|
||||
class A(val abc: Int) {
|
||||
fun check() {
|
||||
|
||||
Reference in New Issue
Block a user