From fa1e5f95936bd9d8e000f0c50ef0c279c484a5b6 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 15 Apr 2020 12:57:29 +0300 Subject: [PATCH] [FIR] Add transformations for delegated constructor call --- .../kotlin/fir/java/declarations/FirJavaConstructor.kt | 4 ++++ .../jetbrains/kotlin/fir/declarations/FirConstructor.kt | 2 ++ .../kotlin/fir/declarations/impl/FirConstructorImpl.kt | 7 ++++++- .../kotlin/fir/declarations/impl/FirPrimaryConstructor.kt | 7 ++++++- .../kotlin/fir/expressions/FirDelegatedConstructorCall.kt | 2 ++ .../expressions/impl/FirDelegatedConstructorCallImpl.kt | 4 ++++ .../kotlin/fir/tree/generator/NodeConfigurator.kt | 4 ++-- 7 files changed, 26 insertions(+), 4 deletions(-) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt index ed21d10e2772b..9ca37ad439512 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt @@ -104,6 +104,10 @@ class FirJavaConstructor @FirImplementationDetail constructor( return this } + override fun transformDelegatedConstructor(transformer: FirTransformer, data: D): FirJavaConstructor { + return this + } + override var containerSource: DeserializedContainerSource? = null override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) { diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirConstructor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirConstructor.kt index a62abdaa75fac..6b9d24c66f3c3 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirConstructor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirConstructor.kt @@ -52,4 +52,6 @@ abstract class FirConstructor : FirPureAbstractElement(), FirFunction transformStatus(transformer: FirTransformer, data: D): FirConstructor abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirConstructor + + abstract fun transformDelegatedConstructor(transformer: FirTransformer, data: D): FirConstructor } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt index a0b2d3b6becc5..d152eabb9977e 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt @@ -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 transformDelegatedConstructor(transformer: FirTransformer, data: D): FirConstructorImpl { + delegatedConstructor = delegatedConstructor?.transformSingle(transformer, data) + return this + } + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { resolvePhase = newResolvePhase } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirPrimaryConstructor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirPrimaryConstructor.kt index 622e800bda70b..8059754c1c327 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirPrimaryConstructor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirPrimaryConstructor.kt @@ -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 transformDelegatedConstructor(transformer: FirTransformer, data: D): FirPrimaryConstructor { + delegatedConstructor = delegatedConstructor?.transformSingle(transformer, data) + return this + } + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { resolvePhase = newResolvePhase } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt index 36cc97c81d207..de01dd25141a4 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt @@ -27,6 +27,8 @@ abstract class FirDelegatedConstructorCall : FirPureAbstractElement(), FirResolv override fun accept(visitor: FirVisitor, data: D): R = visitor.visitDelegatedConstructorCall(this, data) + abstract fun replaceConstructedTypeRef(newConstructedTypeRef: FirTypeRef) + abstract override fun transformCalleeReference(transformer: FirTransformer, data: D): FirDelegatedConstructorCall abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirDelegatedConstructorCall diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt index 284bd0504a618..7738278e1eb27 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt @@ -58,4 +58,8 @@ internal class FirDelegatedConstructorCallImpl( override fun replaceArgumentList(newArgumentList: FirArgumentList) { argumentList = newArgumentList } + + override fun replaceConstructedTypeRef(newConstructedTypeRef: FirTypeRef) { + constructedTypeRef = newConstructedTypeRef + } } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index c169c24c47554..def131610acc1 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -338,13 +338,13 @@ object NodeConfigurator : AbstractFieldConfigurator(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") }