[FIR] Add transformations for delegated constructor call

This commit is contained in:
Dmitriy Novozhilov
2020-04-15 12:57:29 +03:00
parent 30ac024011
commit fa1e5f9593
7 changed files with 26 additions and 4 deletions
@@ -104,6 +104,10 @@ class FirJavaConstructor @FirImplementationDetail constructor(
return this
}
override fun <D> transformDelegatedConstructor(transformer: FirTransformer<D>, data: D): FirJavaConstructor {
return this
}
override var containerSource: DeserializedContainerSource? = null
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) {
@@ -52,4 +52,6 @@ abstract class FirConstructor : FirPureAbstractElement(), FirFunction<FirConstru
abstract override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirConstructor
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirConstructor
abstract fun <D> transformDelegatedConstructor(transformer: FirTransformer<D>, data: D): FirConstructor
}
@@ -69,7 +69,7 @@ internal class FirConstructorImpl(
transformValueParameters(transformer, data)
transformStatus(transformer, data)
transformAnnotations(transformer, data)
delegatedConstructor = delegatedConstructor?.transformSingle(transformer, data)
transformDelegatedConstructor(transformer, data)
body = body?.transformSingle(transformer, data)
return this
}
@@ -104,6 +104,11 @@ internal class FirConstructorImpl(
return this
}
override fun <D> transformDelegatedConstructor(transformer: FirTransformer<D>, data: D): FirConstructorImpl {
delegatedConstructor = delegatedConstructor?.transformSingle(transformer, data)
return this
}
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
resolvePhase = newResolvePhase
}
@@ -69,7 +69,7 @@ internal class FirPrimaryConstructor(
transformValueParameters(transformer, data)
transformStatus(transformer, data)
transformAnnotations(transformer, data)
delegatedConstructor = delegatedConstructor?.transformSingle(transformer, data)
transformDelegatedConstructor(transformer, data)
body = body?.transformSingle(transformer, data)
return this
}
@@ -104,6 +104,11 @@ internal class FirPrimaryConstructor(
return this
}
override fun <D> transformDelegatedConstructor(transformer: FirTransformer<D>, data: D): FirPrimaryConstructor {
delegatedConstructor = delegatedConstructor?.transformSingle(transformer, data)
return this
}
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
resolvePhase = newResolvePhase
}
@@ -27,6 +27,8 @@ abstract class FirDelegatedConstructorCall : FirPureAbstractElement(), FirResolv
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitDelegatedConstructorCall(this, data)
abstract fun replaceConstructedTypeRef(newConstructedTypeRef: FirTypeRef)
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirDelegatedConstructorCall
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirDelegatedConstructorCall
@@ -58,4 +58,8 @@ internal class FirDelegatedConstructorCallImpl(
override fun replaceArgumentList(newArgumentList: FirArgumentList) {
argumentList = newArgumentList
}
override fun replaceConstructedTypeRef(newConstructedTypeRef: FirTypeRef) {
constructedTypeRef = newConstructedTypeRef
}
}
@@ -338,13 +338,13 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
parentArg(callableMemberDeclaration, "F", constructor)
+annotations
+symbol("FirConstructorSymbol")
+field("delegatedConstructor", delegatedConstructorCall, nullable = true)
+field("delegatedConstructor", delegatedConstructorCall, nullable = true).withTransform()
+body(nullable = true)
+booleanField("isPrimary")
}
delegatedConstructorCall.configure {
+field("constructedTypeRef", typeRef)
+field("constructedTypeRef", typeRef, withReplace = true)
generateBooleanFields("this", "super")
}