[AA FIR] support symbol pointer for property from constructor

^KT-54311
^KT-54311
This commit is contained in:
Dmitrii Gridin
2022-11-10 14:54:54 +01:00
committed by Space Team
parent fe93f49ff7
commit bbe1aa61af
3 changed files with 23 additions and 6 deletions
@@ -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())
@@ -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,4 +1,4 @@
// DO_NOT_CHECK_SYMBOL_RESTORE
// DO_NOT_CHECK_SYMBOL_RESTORE_K1
class A(val abc: Int) {
fun check() {