FIR Java: make constructor annotations lazy
This commit is contained in:
@@ -466,12 +466,14 @@ class JavaSymbolProvider(
|
|||||||
|
|
||||||
if (javaConstructor != null) {
|
if (javaConstructor != null) {
|
||||||
this.typeParameters += javaConstructor.typeParameters.convertTypeParameters(javaTypeParameterStack)
|
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()) {
|
for ((index, valueParameter) in javaConstructor.valueParameters.withIndex()) {
|
||||||
valueParameters += valueParameter.toFirValueParameter(
|
valueParameters += valueParameter.toFirValueParameter(
|
||||||
this@JavaSymbolProvider.session, index, javaTypeParameterStack,
|
this@JavaSymbolProvider.session, index, javaTypeParameterStack,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
annotationBuilder = { emptyList() }
|
||||||
}
|
}
|
||||||
}.apply {
|
}.apply {
|
||||||
containingClassAttr = ownerClassBuilder.symbol.toLookupTag()
|
containingClassAttr = ownerClassBuilder.symbol.toLookupTag()
|
||||||
@@ -495,6 +497,7 @@ class JavaSymbolProvider(
|
|||||||
visibility = Visibilities.Public
|
visibility = Visibilities.Public
|
||||||
isInner = false
|
isInner = false
|
||||||
isPrimary = true
|
isPrimary = true
|
||||||
|
annotationBuilder = { emptyList() }
|
||||||
}.apply {
|
}.apply {
|
||||||
containingClassAttr = ownerClassBuilder.symbol.toLookupTag()
|
containingClassAttr = ownerClassBuilder.symbol.toLookupTag()
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-3
@@ -35,7 +35,7 @@ class FirJavaConstructor @FirImplementationDetail constructor(
|
|||||||
override var returnTypeRef: FirTypeRef,
|
override var returnTypeRef: FirTypeRef,
|
||||||
override val valueParameters: MutableList<FirValueParameter>,
|
override val valueParameters: MutableList<FirValueParameter>,
|
||||||
override val typeParameters: MutableList<FirTypeParameterRef>,
|
override val typeParameters: MutableList<FirTypeParameterRef>,
|
||||||
override val annotations: MutableList<FirAnnotationCall>,
|
annotationBuilder: () -> List<FirAnnotationCall>,
|
||||||
override var status: FirDeclarationStatus,
|
override var status: FirDeclarationStatus,
|
||||||
override var resolvePhase: FirResolvePhase,
|
override var resolvePhase: FirResolvePhase,
|
||||||
override val dispatchReceiverType: ConeKotlinType?,
|
override val dispatchReceiverType: ConeKotlinType?,
|
||||||
@@ -59,6 +59,9 @@ class FirJavaConstructor @FirImplementationDetail constructor(
|
|||||||
|
|
||||||
override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null
|
override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null
|
||||||
|
|
||||||
|
override val annotations: List<FirAnnotationCall> by lazy { annotationBuilder() }
|
||||||
|
|
||||||
|
|
||||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirJavaConstructor {
|
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirJavaConstructor {
|
||||||
valueParameters.transformInplace(transformer, data)
|
valueParameters.transformInplace(transformer, data)
|
||||||
return this
|
return this
|
||||||
@@ -101,7 +104,6 @@ class FirJavaConstructor @FirImplementationDetail constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirJavaConstructor {
|
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirJavaConstructor {
|
||||||
annotations.transformInplace(transformer, data)
|
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,6 +145,7 @@ class FirJavaConstructorBuilder : FirConstructorBuilder() {
|
|||||||
lateinit var visibility: Visibility
|
lateinit var visibility: Visibility
|
||||||
var isInner: Boolean by Delegates.notNull()
|
var isInner: Boolean by Delegates.notNull()
|
||||||
var isPrimary: Boolean by Delegates.notNull()
|
var isPrimary: Boolean by Delegates.notNull()
|
||||||
|
lateinit var annotationBuilder: () -> List<FirAnnotationCall>
|
||||||
|
|
||||||
@OptIn(FirImplementationDetail::class)
|
@OptIn(FirImplementationDetail::class)
|
||||||
override fun build(): FirJavaConstructor {
|
override fun build(): FirJavaConstructor {
|
||||||
@@ -154,7 +157,7 @@ class FirJavaConstructorBuilder : FirConstructorBuilder() {
|
|||||||
returnTypeRef,
|
returnTypeRef,
|
||||||
valueParameters,
|
valueParameters,
|
||||||
typeParameters,
|
typeParameters,
|
||||||
annotations,
|
annotationBuilder,
|
||||||
status,
|
status,
|
||||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES,
|
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES,
|
||||||
dispatchReceiverType
|
dispatchReceiverType
|
||||||
|
|||||||
Reference in New Issue
Block a user