diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtClassLikeSymbol.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtClassLikeSymbol.kt index b18047d7142..f7fc5a2ed3e 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtClassLikeSymbol.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtClassLikeSymbol.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.* import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.types.Variance sealed class KtClassifierSymbol : KtSymbol, KtNamedSymbol @@ -16,6 +17,8 @@ abstract class KtTypeParameterSymbol : KtClassifierSymbol(), KtNamedSymbol { abstract override fun createPointer(): KtSymbolPointer abstract val upperBounds: List + abstract val variance: Variance + abstract val isReified: Boolean } sealed class KtClassLikeSymbol : KtClassifierSymbol(), KtNamedSymbol, KtSymbolWithKind { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt index 2097e0ade50..97a2dd5def3 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolP import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.Variance internal class KtFirTypeParameterSymbol( fir: FirTypeParameter, @@ -34,6 +35,9 @@ internal class KtFirTypeParameterSymbol( fir.bounds.map { type -> builder.buildKtType(type) } } + override val variance: Variance get() = firRef.withFir { it.variance } + override val isReified: Boolean get() = firRef.withFir { it.isReified } + override fun createPointer(): KtSymbolPointer { KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it } TODO("Creating symbols for library type parameters is not supported yet") diff --git a/idea/idea-frontend-fir/testData/symbolsByPsi/classWithTypeParams.kt b/idea/idea-frontend-fir/testData/symbolsByPsi/classWithTypeParams.kt index d16cb086018..2273ecc0a0a 100644 --- a/idea/idea-frontend-fir/testData/symbolsByPsi/classWithTypeParams.kt +++ b/idea/idea-frontend-fir/testData/symbolsByPsi/classWithTypeParams.kt @@ -4,14 +4,18 @@ class A { // SYMBOLS: /* KtFirTypeParameterSymbol: + isReified: false name: T origin: SOURCE upperBounds: [kotlin/Any?] + variance: INVARIANT KtFirTypeParameterSymbol: + isReified: false name: R origin: SOURCE upperBounds: [kotlin/Any?] + variance: INVARIANT KtFirClassOrObjectSymbol: annotations: [] diff --git a/idea/idea-frontend-fir/testData/symbolsByPsi/functionWithTypeParams.kt b/idea/idea-frontend-fir/testData/symbolsByPsi/functionWithTypeParams.kt index 90968f67a11..05223aa7c30 100644 --- a/idea/idea-frontend-fir/testData/symbolsByPsi/functionWithTypeParams.kt +++ b/idea/idea-frontend-fir/testData/symbolsByPsi/functionWithTypeParams.kt @@ -3,9 +3,11 @@ fun foo(x: X) {} // SYMBOLS: /* KtFirTypeParameterSymbol: + isReified: false name: X origin: SOURCE upperBounds: [kotlin/Any?] + variance: INVARIANT KtFirFunctionValueParameterSymbol: annotatedType: [] X