diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt index 7cead9209b8..60113e053cb 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt @@ -466,12 +466,14 @@ class JavaSymbolProvider( if (javaConstructor != null) { this.typeParameters += javaConstructor.typeParameters.convertTypeParameters(javaTypeParameterStack) - addAnnotationsFrom(this@JavaSymbolProvider.session, javaConstructor, javaTypeParameterStack) + annotationBuilder = { javaConstructor.annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) } } for ((index, valueParameter) in javaConstructor.valueParameters.withIndex()) { valueParameters += valueParameter.toFirValueParameter( this@JavaSymbolProvider.session, index, javaTypeParameterStack, ) } + } else { + annotationBuilder = { emptyList() } } }.apply { containingClassAttr = ownerClassBuilder.symbol.toLookupTag() @@ -495,6 +497,7 @@ class JavaSymbolProvider( visibility = Visibilities.Public isInner = false isPrimary = true + annotationBuilder = { emptyList() } }.apply { containingClassAttr = ownerClassBuilder.symbol.toLookupTag() } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt index 262f4a8f8d7..3175cadd03e 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt @@ -35,7 +35,7 @@ class FirJavaConstructor @FirImplementationDetail constructor( override var returnTypeRef: FirTypeRef, override val valueParameters: MutableList, override val typeParameters: MutableList, - override val annotations: MutableList, + annotationBuilder: () -> List, override var status: FirDeclarationStatus, override var resolvePhase: FirResolvePhase, override val dispatchReceiverType: ConeKotlinType?, @@ -59,6 +59,9 @@ class FirJavaConstructor @FirImplementationDetail constructor( override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null + override val annotations: List by lazy { annotationBuilder() } + + override fun transformValueParameters(transformer: FirTransformer, data: D): FirJavaConstructor { valueParameters.transformInplace(transformer, data) return this @@ -101,7 +104,6 @@ class FirJavaConstructor @FirImplementationDetail constructor( } override fun transformAnnotations(transformer: FirTransformer, data: D): FirJavaConstructor { - annotations.transformInplace(transformer, data) return this } @@ -143,6 +145,7 @@ class FirJavaConstructorBuilder : FirConstructorBuilder() { lateinit var visibility: Visibility var isInner: Boolean by Delegates.notNull() var isPrimary: Boolean by Delegates.notNull() + lateinit var annotationBuilder: () -> List @OptIn(FirImplementationDetail::class) override fun build(): FirJavaConstructor { @@ -154,7 +157,7 @@ class FirJavaConstructorBuilder : FirConstructorBuilder() { returnTypeRef, valueParameters, typeParameters, - annotations, + annotationBuilder, status, resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES, dispatchReceiverType