Skip to content

Commit

Permalink
[FIR] Add transformations for delegated constructor call
Browse files Browse the repository at this point in the history
  • Loading branch information
demiurg906 committed Apr 17, 2020
1 parent 30ac024 commit fa1e5f9
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down Expand Up @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down Expand Up @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,8 @@ internal class FirDelegatedConstructorCallImpl(
override fun replaceArgumentList(newArgumentList: FirArgumentList) {
argumentList = newArgumentList
}

override fun replaceConstructedTypeRef(newConstructedTypeRef: FirTypeRef) {
constructedTypeRef = newConstructedTypeRef
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}

Expand Down

0 comments on commit fa1e5f9

Please sign in to comment.