FIR Java: make field annotations lazy
This commit is contained in:
@@ -340,7 +340,7 @@ class JavaSymbolProvider(
|
|||||||
returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack)
|
returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack)
|
||||||
isVar = !javaField.isFinal
|
isVar = !javaField.isFinal
|
||||||
isStatic = javaField.isStatic
|
isStatic = javaField.isStatic
|
||||||
addAnnotationsFrom(this@JavaSymbolProvider.session, javaField, javaTypeParameterStack)
|
annotationBuilder = { javaField.annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) }}
|
||||||
initializer = convertJavaInitializerToFir(javaField.initializerValue)
|
initializer = convertJavaInitializerToFir(javaField.initializerValue)
|
||||||
|
|
||||||
if (!javaField.isStatic) {
|
if (!javaField.isStatic) {
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class FirJavaField @FirImplementationDetail constructor(
|
|||||||
override var returnTypeRef: FirTypeRef,
|
override var returnTypeRef: FirTypeRef,
|
||||||
override var status: FirDeclarationStatus,
|
override var status: FirDeclarationStatus,
|
||||||
override val isVar: Boolean,
|
override val isVar: Boolean,
|
||||||
override val annotations: MutableList<FirAnnotationCall>,
|
annotationBuilder: () -> List<FirAnnotationCall>,
|
||||||
override val typeParameters: MutableList<FirTypeParameter>,
|
override val typeParameters: MutableList<FirTypeParameter>,
|
||||||
override var initializer: FirExpression?,
|
override var initializer: FirExpression?,
|
||||||
override val dispatchReceiverType: ConeKotlinType?,
|
override val dispatchReceiverType: ConeKotlinType?,
|
||||||
@@ -58,6 +58,9 @@ class FirJavaField @FirImplementationDetail constructor(
|
|||||||
override val origin: FirDeclarationOrigin
|
override val origin: FirDeclarationOrigin
|
||||||
get() = FirDeclarationOrigin.Java
|
get() = FirDeclarationOrigin.Java
|
||||||
|
|
||||||
|
override val annotations: List<FirAnnotationCall> by lazy { annotationBuilder() }
|
||||||
|
|
||||||
|
|
||||||
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirField {
|
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirField {
|
||||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||||
return this
|
return this
|
||||||
@@ -109,7 +112,6 @@ class FirJavaField @FirImplementationDetail constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirJavaField {
|
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirJavaField {
|
||||||
annotations.transformInplace(transformer, data)
|
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,6 +149,7 @@ internal class FirJavaFieldBuilder : FirFieldBuilder() {
|
|||||||
lateinit var visibility: Visibility
|
lateinit var visibility: Visibility
|
||||||
var isStatic: Boolean by Delegates.notNull()
|
var isStatic: Boolean by Delegates.notNull()
|
||||||
var initializer: FirExpression? = null
|
var initializer: FirExpression? = null
|
||||||
|
lateinit var annotationBuilder: () -> List<FirAnnotationCall>
|
||||||
|
|
||||||
override var resolvePhase: FirResolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
override var resolvePhase: FirResolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||||
|
|
||||||
@@ -161,7 +164,7 @@ internal class FirJavaFieldBuilder : FirFieldBuilder() {
|
|||||||
returnTypeRef,
|
returnTypeRef,
|
||||||
status,
|
status,
|
||||||
isVar,
|
isVar,
|
||||||
annotations,
|
annotationBuilder,
|
||||||
typeParameters,
|
typeParameters,
|
||||||
initializer,
|
initializer,
|
||||||
dispatchReceiverType,
|
dispatchReceiverType,
|
||||||
|
|||||||
+1
-1
@@ -102,7 +102,7 @@ class FirSignatureEnhancement(
|
|||||||
modality = firElement.modality
|
modality = firElement.modality
|
||||||
isVar = firElement.isVar
|
isVar = firElement.isVar
|
||||||
isStatic = firElement.isStatic
|
isStatic = firElement.isStatic
|
||||||
annotations += firElement.annotations
|
annotationBuilder = { firElement.annotations }
|
||||||
status = firElement.status
|
status = firElement.status
|
||||||
initializer = firElement.initializer
|
initializer = firElement.initializer
|
||||||
dispatchReceiverType = firElement.dispatchReceiverType
|
dispatchReceiverType = firElement.dispatchReceiverType
|
||||||
|
|||||||
Reference in New Issue
Block a user