FIR Java: make field annotations lazy

This commit is contained in:
Mikhail Glukhikh
2020-12-25 10:56:14 +03:00
parent 33892f3ddf
commit 56df95b8e7
3 changed files with 8 additions and 5 deletions

View File

@@ -340,7 +340,7 @@ class JavaSymbolProvider(
returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack)
isVar = !javaField.isFinal
isStatic = javaField.isStatic
addAnnotationsFrom(this@JavaSymbolProvider.session, javaField, javaTypeParameterStack)
annotationBuilder = { javaField.annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) }}
initializer = convertJavaInitializerToFir(javaField.initializerValue)
if (!javaField.isStatic) {

View File

@@ -40,7 +40,7 @@ class FirJavaField @FirImplementationDetail constructor(
override var returnTypeRef: FirTypeRef,
override var status: FirDeclarationStatus,
override val isVar: Boolean,
override val annotations: MutableList<FirAnnotationCall>,
annotationBuilder: () -> List<FirAnnotationCall>,
override val typeParameters: MutableList<FirTypeParameter>,
override var initializer: FirExpression?,
override val dispatchReceiverType: ConeKotlinType?,
@@ -58,6 +58,9 @@ class FirJavaField @FirImplementationDetail constructor(
override val origin: FirDeclarationOrigin
get() = FirDeclarationOrigin.Java
override val annotations: List<FirAnnotationCall> by lazy { annotationBuilder() }
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirField {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
return this
@@ -109,7 +112,6 @@ class FirJavaField @FirImplementationDetail constructor(
}
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirJavaField {
annotations.transformInplace(transformer, data)
return this
}
@@ -147,6 +149,7 @@ internal class FirJavaFieldBuilder : FirFieldBuilder() {
lateinit var visibility: Visibility
var isStatic: Boolean by Delegates.notNull()
var initializer: FirExpression? = null
lateinit var annotationBuilder: () -> List<FirAnnotationCall>
override var resolvePhase: FirResolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
@@ -161,7 +164,7 @@ internal class FirJavaFieldBuilder : FirFieldBuilder() {
returnTypeRef,
status,
isVar,
annotations,
annotationBuilder,
typeParameters,
initializer,
dispatchReceiverType,

View File

@@ -102,7 +102,7 @@ class FirSignatureEnhancement(
modality = firElement.modality
isVar = firElement.isVar
isStatic = firElement.isStatic
annotations += firElement.annotations
annotationBuilder = { firElement.annotations }
status = firElement.status
initializer = firElement.initializer
dispatchReceiverType = firElement.dispatchReceiverType