[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.fir.utils.cached
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||||
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.markers.KtSymbolKind
|
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.KtPsiBasedSymbolPointer
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
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.UnsupportedSymbolKind
|
||||||
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointerDelegator
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
@@ -127,7 +125,15 @@ internal class KtFirKotlinPropertySymbol(
|
|||||||
override val hasSetter: Boolean get() = withValidityAssertion { firSymbol.setterSymbol != null }
|
override val hasSetter: Boolean get() = withValidityAssertion { firSymbol.setterSymbol != null }
|
||||||
|
|
||||||
override fun createPointer(): KtSymbolPointer<KtKotlinPropertySymbol> = withValidityAssertion {
|
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) {
|
return when (val kind = symbolKind) {
|
||||||
KtSymbolKind.TOP_LEVEL -> KtFirTopLevelPropertySymbolPointer(firSymbol.callableId, firSymbol.createSignature())
|
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")
|
@Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol")
|
||||||
override fun restoreSymbol(analysisSession: KtAnalysisSession): S? = getSymbol(analysisSession)
|
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) {
|
class A(val abc: Int) {
|
||||||
fun check() {
|
fun check() {
|
||||||
|
|||||||
Reference in New Issue
Block a user