FIR Java: make constructor annotations lazy

This commit is contained in:
Mikhail Glukhikh
2020-12-25 11:07:48 +03:00
parent 56df95b8e7
commit c8c34ebf17
2 changed files with 10 additions and 4 deletions
@@ -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()
}
@@ -35,7 +35,7 @@ class FirJavaConstructor @FirImplementationDetail constructor(
override var returnTypeRef: FirTypeRef,
override val valueParameters: MutableList<FirValueParameter>,
override val typeParameters: MutableList<FirTypeParameterRef>,
override val annotations: MutableList<FirAnnotationCall>,
annotationBuilder: () -> List<FirAnnotationCall>,
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<FirAnnotationCall> by lazy { annotationBuilder() }
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirJavaConstructor {
valueParameters.transformInplace(transformer, data)
return this
@@ -101,7 +104,6 @@ class FirJavaConstructor @FirImplementationDetail constructor(
}
override fun <D> transformAnnotations(transformer: FirTransformer<D>, 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<FirAnnotationCall>
@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