K2: use MutableOrEmptyList for annotations storage in FIR elements
This commit is contained in:
committed by
Space Team
parent
be5394e211
commit
582b640bec
@@ -108,8 +108,6 @@ abstract class FirJavaFacade(
|
||||
variance = INVARIANT
|
||||
isReified = false
|
||||
javaTypeParameterStack.addParameter(this@toFirTypeParameter, symbol)
|
||||
// TODO: should be lazy (in case annotations refer to the containing class)
|
||||
annotations.addFromJava(session, this@toFirTypeParameter, javaTypeParameterStack)
|
||||
this.containingDeclarationSymbol = containingDeclarationSymbol
|
||||
for (upperBound in this@toFirTypeParameter.upperBounds) {
|
||||
bounds += upperBound.toFirJavaTypeRef(session, javaTypeParameterStack)
|
||||
@@ -119,6 +117,9 @@ abstract class FirJavaFacade(
|
||||
type = ConeFlexibleType(builtinTypes.anyType.type, builtinTypes.nullableAnyType.type)
|
||||
}
|
||||
}
|
||||
}.apply {
|
||||
// TODO: should be lazy (in case annotations refer to the containing class)
|
||||
addAnnotationsFromJava(session, this@toFirTypeParameter, javaTypeParameterStack)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,7 +182,7 @@ abstract class FirJavaFacade(
|
||||
// 1. Resolve annotations
|
||||
// 2. Enhance type parameter bounds - may refer to each other, take default nullability from annotations
|
||||
// 3. Enhance super types - may refer to type parameter bounds, take default nullability from annotations
|
||||
firJavaClass.annotations.addFromJava(session, javaClass, javaTypeParameterStack)
|
||||
firJavaClass.addAnnotationsFromJava(session, javaClass, javaTypeParameterStack)
|
||||
|
||||
enhancement.enhanceTypeParameterBoundsAfterFirstRound(firJavaClass.typeParameters, initialBounds)
|
||||
|
||||
@@ -511,10 +512,10 @@ abstract class FirJavaFacade(
|
||||
returnTypeRef = returnType.toFirJavaTypeRef(session, javaTypeParameterStack)
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
origin = javaOrigin(javaField.isFromSource)
|
||||
// TODO: check if this works properly with annotations that take the enum class as an argument
|
||||
annotations.addFromJava(session, javaField, javaTypeParameterStack)
|
||||
}.apply {
|
||||
containingClassForStaticMemberAttr = ConeClassLikeLookupTagImpl(classId)
|
||||
// TODO: check if this works properly with annotations that take the enum class as an argument
|
||||
addAnnotationsFromJava(session, javaField, javaTypeParameterStack)
|
||||
}
|
||||
else -> buildJavaField {
|
||||
source = javaField.toSourceElement()
|
||||
|
||||
@@ -11,8 +11,10 @@ import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.FirImplementationDetail
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.MutableOrEmptyList
|
||||
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.FirRegularClassBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
@@ -36,7 +38,7 @@ class FirJavaClass @FirImplementationDetail internal constructor(
|
||||
override var resolvePhase: FirResolvePhase,
|
||||
override val name: Name,
|
||||
override val origin: FirDeclarationOrigin.Java,
|
||||
override val annotations: MutableList<FirAnnotation>,
|
||||
override var annotations: MutableOrEmptyList<FirAnnotation>,
|
||||
override var status: FirDeclarationStatus,
|
||||
override val classKind: ClassKind,
|
||||
override val declarations: MutableList<FirDeclaration>,
|
||||
@@ -108,6 +110,10 @@ class FirJavaClass @FirImplementationDetail internal constructor(
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
|
||||
annotations = newAnnotations.toMutableOrEmpty()
|
||||
}
|
||||
|
||||
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirJavaClass {
|
||||
annotations.transformInplace(transformer, data)
|
||||
return this
|
||||
@@ -152,7 +158,7 @@ class FirJavaClassBuilder : FirRegularClassBuilder(), FirAnnotationContainerBuil
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES,
|
||||
name,
|
||||
origin = javaOrigin(isFromSource),
|
||||
annotations,
|
||||
annotations.toMutableOrEmpty(),
|
||||
status,
|
||||
classKind,
|
||||
declarations,
|
||||
|
||||
@@ -105,6 +105,10 @@ class FirJavaConstructor @FirImplementationDetail constructor(
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
|
||||
throw AssertionError("Mutating annotations for FirJava* is not supported")
|
||||
}
|
||||
|
||||
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirJavaConstructor {
|
||||
return this
|
||||
}
|
||||
|
||||
@@ -125,6 +125,10 @@ class FirJavaField @FirImplementationDetail constructor(
|
||||
returnTypeRef = newReturnTypeRef
|
||||
}
|
||||
|
||||
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
|
||||
throw AssertionError("Mutating annotations for FirJava* is not supported")
|
||||
}
|
||||
|
||||
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirJavaField {
|
||||
return this
|
||||
}
|
||||
|
||||
@@ -139,6 +139,10 @@ class FirJavaMethod @FirImplementationDetail constructor(
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
|
||||
throw AssertionError("Mutating annotations for FirJava* is not supported")
|
||||
}
|
||||
|
||||
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirSimpleFunction {
|
||||
return this
|
||||
}
|
||||
|
||||
+4
@@ -142,6 +142,10 @@ class FirJavaValueParameter @FirImplementationDetail constructor(
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
|
||||
throw AssertionError("Mutating annotations for FirJava* is not supported")
|
||||
}
|
||||
|
||||
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirValueParameter {
|
||||
return this
|
||||
}
|
||||
|
||||
+3
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.java.deserialization
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.ThreadSafeMutableState
|
||||
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
|
||||
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.getDeprecationsProvider
|
||||
@@ -144,7 +145,7 @@ class JvmClassFileBasedSymbolProvider(
|
||||
kotlinClass: KotlinClassFinder.Result.KotlinClass,
|
||||
symbol: FirRegularClassSymbol
|
||||
) {
|
||||
val annotations = symbol.fir.annotations as MutableList<FirAnnotation>
|
||||
val annotations = mutableListOf<FirAnnotation>()
|
||||
kotlinClass.kotlinJvmBinaryClass.loadClassAnnotations(
|
||||
object : KotlinJvmBinaryClass.AnnotationVisitor {
|
||||
override fun visitAnnotation(classId: ClassId, source: SourceElement): KotlinJvmBinaryClass.AnnotationArgumentVisitor? {
|
||||
@@ -156,6 +157,7 @@ class JvmClassFileBasedSymbolProvider(
|
||||
},
|
||||
kotlinClass.byteContent,
|
||||
)
|
||||
symbol.fir.replaceAnnotations(annotations.toMutableOrEmpty())
|
||||
symbol.fir.replaceDeprecationsProvider(symbol.fir.getDeprecationsProvider(session.firCachesFactory))
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.java
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||
@@ -48,12 +49,14 @@ internal fun JavaAnnotationOwner.convertAnnotationsToFir(
|
||||
session: FirSession, javaTypeParameterStack: JavaTypeParameterStack
|
||||
): List<FirAnnotation> = annotations.convertAnnotationsToFir(session, javaTypeParameterStack)
|
||||
|
||||
internal fun MutableList<FirAnnotation>.addFromJava(
|
||||
internal fun FirAnnotationContainer.addAnnotationsFromJava(
|
||||
session: FirSession,
|
||||
javaAnnotationOwner: JavaAnnotationOwner,
|
||||
javaTypeParameterStack: JavaTypeParameterStack
|
||||
) {
|
||||
javaAnnotationOwner.annotations.mapTo(this) { it.toFirAnnotationCall(session, javaTypeParameterStack) }
|
||||
val annotations = mutableListOf<FirAnnotation>()
|
||||
javaAnnotationOwner.annotations.mapTo(annotations) { it.toFirAnnotationCall(session, javaTypeParameterStack) }
|
||||
replaceAnnotations(annotations)
|
||||
}
|
||||
|
||||
internal fun JavaValueParameter.toFirValueParameter(
|
||||
|
||||
@@ -49,6 +49,10 @@ class FirJavaTypeRef(
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
|
||||
throw AssertionError("Mutating annotations for FirJava* is not supported")
|
||||
}
|
||||
|
||||
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirUserTypeRef {
|
||||
return this
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user