[FIR] Make FirTypeParameter.containingDeclarationSymbol not null
Also fix initializing this property in all places
This commit is contained in:
committed by
teamcity
parent
35a2a6bcec
commit
18fc2802e5
+1
-4
@@ -45,10 +45,7 @@ internal class KtFirSymbolContainingDeclarationProvider(
|
|||||||
}
|
}
|
||||||
return when (symbol) {
|
return when (symbol) {
|
||||||
is KtFirTypeParameterSymbol -> {
|
is KtFirTypeParameterSymbol -> {
|
||||||
symbol.firSymbol.containingDeclarationSymbol?.let { containingDeclaration ->
|
firSymbolBuilder.buildSymbol(symbol.firSymbol.containingDeclarationSymbol) as KtSymbolWithKind
|
||||||
firSymbolBuilder.buildSymbol(containingDeclaration) as KtSymbolWithKind
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
is KtSymbolWithKind -> when (symbol.origin) {
|
is KtSymbolWithKind -> when (symbol.origin) {
|
||||||
KtSymbolOrigin.SOURCE, KtSymbolOrigin.SOURCE_MEMBER_GENERATED ->
|
KtSymbolOrigin.SOURCE, KtSymbolOrigin.SOURCE_MEMBER_GENERATED ->
|
||||||
|
|||||||
+1
-1
@@ -73,7 +73,7 @@ class FirTypeDeserializer(
|
|||||||
origin = FirDeclarationOrigin.Library
|
origin = FirDeclarationOrigin.Library
|
||||||
this.name = name
|
this.name = name
|
||||||
this.symbol = symbol
|
this.symbol = symbol
|
||||||
this.containingDeclarationSymbol = containingSymbol
|
this.containingDeclarationSymbol = containingSymbol ?: error("Top-level type parameter ???")
|
||||||
variance = proto.variance.convertVariance()
|
variance = proto.variance.convertVariance()
|
||||||
isReified = proto.reified
|
isReified = proto.reified
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.fir.resolve.constructType
|
|||||||
import org.jetbrains.kotlin.fir.resolve.defaultType
|
import org.jetbrains.kotlin.fir.resolve.defaultType
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||||
@@ -89,7 +90,10 @@ class FirJavaFacade(
|
|||||||
return classId.relativeClassName.topLevelName() in knownNames
|
return classId.relativeClassName.topLevelName() in knownNames
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun JavaTypeParameter.toFirTypeParameter(javaTypeParameterStack: JavaTypeParameterStack): FirTypeParameter {
|
private fun JavaTypeParameter.toFirTypeParameter(
|
||||||
|
javaTypeParameterStack: JavaTypeParameterStack,
|
||||||
|
containingDeclarationSymbol: FirBasedSymbol<*>
|
||||||
|
): FirTypeParameter {
|
||||||
return buildTypeParameter {
|
return buildTypeParameter {
|
||||||
moduleData = baseModuleData
|
moduleData = baseModuleData
|
||||||
origin = FirDeclarationOrigin.Java
|
origin = FirDeclarationOrigin.Java
|
||||||
@@ -101,6 +105,7 @@ class FirJavaFacade(
|
|||||||
javaTypeParameterStack.addParameter(this@toFirTypeParameter, symbol)
|
javaTypeParameterStack.addParameter(this@toFirTypeParameter, symbol)
|
||||||
// TODO: should be lazy (in case annotations refer to the containing class)
|
// TODO: should be lazy (in case annotations refer to the containing class)
|
||||||
annotations.addFromJava(session, this@toFirTypeParameter, javaTypeParameterStack)
|
annotations.addFromJava(session, this@toFirTypeParameter, javaTypeParameterStack)
|
||||||
|
this.containingDeclarationSymbol = containingDeclarationSymbol
|
||||||
for (upperBound in this@toFirTypeParameter.upperBounds) {
|
for (upperBound in this@toFirTypeParameter.upperBounds) {
|
||||||
bounds += upperBound.toFirJavaTypeRef(session, javaTypeParameterStack)
|
bounds += upperBound.toFirJavaTypeRef(session, javaTypeParameterStack)
|
||||||
}
|
}
|
||||||
@@ -113,8 +118,12 @@ class FirJavaFacade(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun List<JavaTypeParameter>.convertTypeParameters(stack: JavaTypeParameterStack): List<FirTypeParameter> =
|
private fun List<JavaTypeParameter>.convertTypeParameters(
|
||||||
map { it.toFirTypeParameter(stack) }
|
stack: JavaTypeParameterStack,
|
||||||
|
containingDeclarationSymbol: FirBasedSymbol<*>
|
||||||
|
): List<FirTypeParameter> {
|
||||||
|
return map { it.toFirTypeParameter(stack, containingDeclarationSymbol) }
|
||||||
|
}
|
||||||
|
|
||||||
private fun JavaClass.hasMetadataAnnotation(): Boolean =
|
private fun JavaClass.hasMetadataAnnotation(): Boolean =
|
||||||
annotations.any { it.classId?.asSingleFqName() == JvmAnnotationNames.METADATA_FQ_NAME }
|
annotations.any { it.classId?.asSingleFqName() == JvmAnnotationNames.METADATA_FQ_NAME }
|
||||||
@@ -235,7 +244,7 @@ class FirJavaFacade(
|
|||||||
val effectiveVisibility = parentEffectiveVisibility.lowerBound(selfEffectiveVisibility, session.typeContext)
|
val effectiveVisibility = parentEffectiveVisibility.lowerBound(selfEffectiveVisibility, session.typeContext)
|
||||||
parentClassEffectiveVisibilityCache[classSymbol] = effectiveVisibility
|
parentClassEffectiveVisibilityCache[classSymbol] = effectiveVisibility
|
||||||
|
|
||||||
val classTypeParameters = javaClass.typeParameters.convertTypeParameters(javaTypeParameterStack)
|
val classTypeParameters = javaClass.typeParameters.convertTypeParameters(javaTypeParameterStack, classSymbol)
|
||||||
typeParameters += classTypeParameters
|
typeParameters += classTypeParameters
|
||||||
if (!isStatic && parentClassSymbol != null) {
|
if (!isStatic && parentClassSymbol != null) {
|
||||||
typeParameters += parentClassSymbol.fir.typeParameters.map {
|
typeParameters += parentClassSymbol.fir.typeParameters.map {
|
||||||
@@ -445,7 +454,7 @@ class FirJavaFacade(
|
|||||||
name = methodName
|
name = methodName
|
||||||
returnTypeRef = returnType.toFirJavaTypeRef(session, javaTypeParameterStack)
|
returnTypeRef = returnType.toFirJavaTypeRef(session, javaTypeParameterStack)
|
||||||
isStatic = javaMethod.isStatic
|
isStatic = javaMethod.isStatic
|
||||||
typeParameters += javaMethod.typeParameters.convertTypeParameters(javaTypeParameterStack)
|
typeParameters += javaMethod.typeParameters.convertTypeParameters(javaTypeParameterStack, methodSymbol)
|
||||||
for ((index, valueParameter) in javaMethod.valueParameters.withIndex()) {
|
for ((index, valueParameter) in javaMethod.valueParameters.withIndex()) {
|
||||||
valueParameters += valueParameter.toFirValueParameter(session, moduleData, index, javaTypeParameterStack)
|
valueParameters += valueParameter.toFirValueParameter(session, moduleData, index, javaTypeParameterStack)
|
||||||
}
|
}
|
||||||
@@ -526,7 +535,7 @@ class FirJavaFacade(
|
|||||||
typeParameters += classTypeParameters.map { buildConstructedClassTypeParameterRef { symbol = it.symbol } }
|
typeParameters += classTypeParameters.map { buildConstructedClassTypeParameterRef { symbol = it.symbol } }
|
||||||
|
|
||||||
if (javaConstructor != null) {
|
if (javaConstructor != null) {
|
||||||
this.typeParameters += javaConstructor.typeParameters.convertTypeParameters(javaTypeParameterStack)
|
this.typeParameters += javaConstructor.typeParameters.convertTypeParameters(javaTypeParameterStack, constructorSymbol)
|
||||||
annotationBuilder = { javaConstructor.convertAnnotationsToFir(session, javaTypeParameterStack) }
|
annotationBuilder = { javaConstructor.convertAnnotationsToFir(session, javaTypeParameterStack) }
|
||||||
for ((index, valueParameter) in javaConstructor.valueParameters.withIndex()) {
|
for ((index, valueParameter) in javaConstructor.valueParameters.withIndex()) {
|
||||||
valueParameters += valueParameter.toFirValueParameter(session, moduleData, index, javaTypeParameterStack)
|
valueParameters += valueParameter.toFirValueParameter(session, moduleData, index, javaTypeParameterStack)
|
||||||
|
|||||||
@@ -142,6 +142,7 @@ class FirSamResolverImpl(
|
|||||||
variance = Variance.INVARIANT
|
variance = Variance.INVARIANT
|
||||||
isReified = false
|
isReified = false
|
||||||
annotations += declaredTypeParameter.annotations
|
annotations += declaredTypeParameter.annotations
|
||||||
|
containingDeclarationSymbol = symbol
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -158,7 +158,7 @@ private fun createToFreshVariableSubstitutorAndAddInitialConstraints(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun FirTypeParameter.getTypeParameterFromExpandedClass(index: Int, session: FirSession): FirTypeParameter {
|
private fun FirTypeParameter.getTypeParameterFromExpandedClass(index: Int, session: FirSession): FirTypeParameter {
|
||||||
val containingDeclaration = containingDeclarationSymbol?.fir
|
val containingDeclaration = containingDeclarationSymbol.fir
|
||||||
if (containingDeclaration is FirRegularClass) {
|
if (containingDeclaration is FirRegularClass) {
|
||||||
return containingDeclaration.typeParameters.elementAtOrNull(index)?.symbol?.fir ?: this
|
return containingDeclaration.typeParameters.elementAtOrNull(index)?.symbol?.fir ?: this
|
||||||
} else if (containingDeclaration is FirTypeAlias) {
|
} else if (containingDeclaration is FirTypeAlias) {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ abstract class FirTypeParameter : FirTypeParameterRef, FirDeclaration() {
|
|||||||
abstract override val attributes: FirDeclarationAttributes
|
abstract override val attributes: FirDeclarationAttributes
|
||||||
abstract val name: Name
|
abstract val name: Name
|
||||||
abstract override val symbol: FirTypeParameterSymbol
|
abstract override val symbol: FirTypeParameterSymbol
|
||||||
abstract val containingDeclarationSymbol: FirBasedSymbol<*>?
|
abstract val containingDeclarationSymbol: FirBasedSymbol<*>
|
||||||
abstract val variance: Variance
|
abstract val variance: Variance
|
||||||
abstract val isReified: Boolean
|
abstract val isReified: Boolean
|
||||||
abstract val bounds: List<FirTypeRef>
|
abstract val bounds: List<FirTypeRef>
|
||||||
|
|||||||
+1
-1
@@ -37,7 +37,7 @@ class FirTypeParameterBuilder : FirAnnotationContainerBuilder {
|
|||||||
var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
|
var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
|
||||||
lateinit var name: Name
|
lateinit var name: Name
|
||||||
lateinit var symbol: FirTypeParameterSymbol
|
lateinit var symbol: FirTypeParameterSymbol
|
||||||
var containingDeclarationSymbol: FirBasedSymbol<*>? = null
|
lateinit var containingDeclarationSymbol: FirBasedSymbol<*>
|
||||||
lateinit var variance: Variance
|
lateinit var variance: Variance
|
||||||
var isReified: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
|
var isReified: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
|
||||||
val bounds: MutableList<FirTypeRef> = mutableListOf()
|
val bounds: MutableList<FirTypeRef> = mutableListOf()
|
||||||
|
|||||||
+1
-1
@@ -33,7 +33,7 @@ internal class FirTypeParameterImpl(
|
|||||||
override val attributes: FirDeclarationAttributes,
|
override val attributes: FirDeclarationAttributes,
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override val symbol: FirTypeParameterSymbol,
|
override val symbol: FirTypeParameterSymbol,
|
||||||
override val containingDeclarationSymbol: FirBasedSymbol<*>?,
|
override val containingDeclarationSymbol: FirBasedSymbol<*>,
|
||||||
override val variance: Variance,
|
override val variance: Variance,
|
||||||
override val isReified: Boolean,
|
override val isReified: Boolean,
|
||||||
override val bounds: MutableList<FirTypeRef>,
|
override val bounds: MutableList<FirTypeRef>,
|
||||||
|
|||||||
+1
-1
@@ -37,7 +37,7 @@ class FirTypeParameterSymbol : FirClassifierSymbol<FirTypeParameter>() {
|
|||||||
val isReified: Boolean
|
val isReified: Boolean
|
||||||
get() = fir.isReified
|
get() = fir.isReified
|
||||||
|
|
||||||
val containingDeclarationSymbol: FirBasedSymbol<*>?
|
val containingDeclarationSymbol: FirBasedSymbol<*>
|
||||||
get() = fir.containingDeclarationSymbol
|
get() = fir.containingDeclarationSymbol
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -294,7 +294,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
|||||||
typeParameter.configure {
|
typeParameter.configure {
|
||||||
+name
|
+name
|
||||||
+symbol("FirTypeParameterSymbol")
|
+symbol("FirTypeParameterSymbol")
|
||||||
+field("containingDeclarationSymbol", firBasedSymbolType, "*", nullable = true).apply {
|
+field("containingDeclarationSymbol", firBasedSymbolType, "*").apply {
|
||||||
withBindThis = false
|
withBindThis = false
|
||||||
}
|
}
|
||||||
+field(varianceType)
|
+field(varianceType)
|
||||||
|
|||||||
Reference in New Issue
Block a user