[FIR] Add transformDelegate for FirProperty

This commit is contained in:
Dmitriy Novozhilov
2020-02-26 10:50:02 +03:00
parent e8b0ce00e1
commit cda8177502
14 changed files with 45 additions and 3 deletions
@@ -116,6 +116,10 @@ class FirJavaField @FirImplementationDetail constructor(
}
override fun replaceReceiverTypeRef(newReceiverTypeRef: FirTypeRef?) {}
override fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirField {
return this
}
}
@FirBuilderDsl
@@ -134,6 +134,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
assert(variable.isLocal)
val resolutionMode = withExpectedType(variable.returnTypeRef)
variable.transformInitializer(transformer, resolutionMode)
.transformDelegate(transformer, resolutionMode)
.transformOtherChildren(transformer, resolutionMode)
.transformInitializer(integerLiteralTypeApproximator, null)
if (variable.initializer != null) {
@@ -150,6 +151,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
val data = withExpectedType(returnTypeRef)
return transformReturnTypeRef(transformer, data)
.transformInitializer(transformer, data)
.transformDelegate(transformer, data)
.transformOtherChildren(transformer, data)
}
@@ -49,6 +49,8 @@ abstract class FirEnumEntry : FirVariable<FirEnumEntry>(), FirCallableMemberDecl
abstract override fun <D> transformInitializer(transformer: FirTransformer<D>, data: D): FirEnumEntry
abstract override fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirEnumEntry
abstract override fun <D> transformGetter(transformer: FirTransformer<D>, data: D): FirEnumEntry
abstract override fun <D> transformSetter(transformer: FirTransformer<D>, data: D): FirEnumEntry
@@ -49,6 +49,8 @@ abstract class FirField : FirVariable<FirField>(), FirCallableMemberDeclaration<
abstract override fun <D> transformInitializer(transformer: FirTransformer<D>, data: D): FirField
abstract override fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirField
abstract override fun <D> transformGetter(transformer: FirTransformer<D>, data: D): FirField
abstract override fun <D> transformSetter(transformer: FirTransformer<D>, data: D): FirField
@@ -54,6 +54,8 @@ abstract class FirProperty : FirVariable<FirProperty>(), FirTypeParametersOwner,
abstract override fun <D> transformInitializer(transformer: FirTransformer<D>, data: D): FirProperty
abstract override fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirProperty
abstract override fun <D> transformGetter(transformer: FirTransformer<D>, data: D): FirProperty
abstract override fun <D> transformSetter(transformer: FirTransformer<D>, data: D): FirProperty
@@ -49,6 +49,8 @@ abstract class FirValueParameter : FirVariable<FirValueParameter>() {
abstract override fun <D> transformInitializer(transformer: FirTransformer<D>, data: D): FirValueParameter
abstract override fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirValueParameter
abstract override fun <D> transformGetter(transformer: FirTransformer<D>, data: D): FirValueParameter
abstract override fun <D> transformSetter(transformer: FirTransformer<D>, data: D): FirValueParameter
@@ -47,6 +47,8 @@ abstract class FirVariable<F : FirVariable<F>> : FirPureAbstractElement(), FirCa
abstract fun <D> transformInitializer(transformer: FirTransformer<D>, data: D): FirVariable<F>
abstract fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirVariable<F>
abstract fun <D> transformGetter(transformer: FirTransformer<D>, data: D): FirVariable<F>
abstract fun <D> transformSetter(transformer: FirTransformer<D>, data: D): FirVariable<F>
@@ -65,6 +65,7 @@ internal class FirDefaultSetterValueParameter(
transformReturnTypeRef(transformer, data)
transformReceiverTypeRef(transformer, data)
transformInitializer(transformer, data)
transformDelegate(transformer, data)
transformGetter(transformer, data)
transformSetter(transformer, data)
transformOtherChildren(transformer, data)
@@ -86,6 +87,11 @@ internal class FirDefaultSetterValueParameter(
return this
}
override fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirDefaultSetterValueParameter {
delegate = delegate?.transformSingle(transformer, data)
return this
}
override fun <D> transformGetter(transformer: FirTransformer<D>, data: D): FirDefaultSetterValueParameter {
getter = getter?.transformSingle(transformer, data)
return this
@@ -97,7 +103,6 @@ internal class FirDefaultSetterValueParameter(
}
override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): FirDefaultSetterValueParameter {
delegate = delegate?.transformSingle(transformer, data)
annotations.transformInplace(transformer, data)
defaultValue = defaultValue?.transformSingle(transformer, data)
return this
@@ -82,6 +82,10 @@ internal class FirEnumEntryImpl(
return this
}
override fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirEnumEntryImpl {
return this
}
override fun <D> transformGetter(transformer: FirTransformer<D>, data: D): FirEnumEntryImpl {
return this
}
@@ -79,6 +79,10 @@ internal class FirFieldImpl(
return this
}
override fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirFieldImpl {
return this
}
override fun <D> transformGetter(transformer: FirTransformer<D>, data: D): FirFieldImpl {
return this
}
@@ -76,6 +76,7 @@ internal class FirPropertyImpl(
transformReturnTypeRef(transformer, data)
transformReceiverTypeRef(transformer, data)
transformInitializer(transformer, data)
transformDelegate(transformer, data)
transformGetter(transformer, data)
transformSetter(transformer, data)
transformControlFlowGraphReference(transformer, data)
@@ -99,6 +100,11 @@ internal class FirPropertyImpl(
return this
}
override fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirPropertyImpl {
delegate = delegate?.transformSingle(transformer, data)
return this
}
override fun <D> transformGetter(transformer: FirTransformer<D>, data: D): FirPropertyImpl {
getter = getter?.transformSingle(transformer, data)
return this
@@ -120,7 +126,6 @@ internal class FirPropertyImpl(
}
override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): FirPropertyImpl {
delegate = delegate?.transformSingle(transformer, data)
annotations.transformInplace(transformer, data)
typeParameters.transformInplace(transformer, data)
return this
@@ -76,6 +76,10 @@ open class FirValueParameterImpl @FirImplementationDetail constructor(
return this
}
override fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirValueParameterImpl {
return this
}
override fun <D> transformGetter(transformer: FirTransformer<D>, data: D): FirValueParameterImpl {
return this
}
@@ -112,6 +112,10 @@ class FirSyntheticProperty(
throw AssertionError("Transformation of synthetic property isn't supported")
}
override fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirProperty {
throw AssertionError("Transformation of synthetic property isn't supported")
}
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
resolvePhase = newResolvePhase
}
@@ -337,7 +337,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+name
+symbol("FirVariableSymbol", "F")
+initializer.withTransform()
+field("delegate", expression, nullable = true)
+field("delegate", expression, nullable = true).withTransform()
+field("delegateFieldSymbol", delegateFieldSymbolType, "F", nullable = true)
generateBooleanFields("var", "val")
+field("getter", propertyAccessor, nullable = true).withTransform()