[FIR] Add transform declaration and companion to regular class

This commit is contained in:
Dmitriy Novozhilov
2020-04-13 11:55:08 +03:00
parent a01bbbb0a0
commit d718b596bc
9 changed files with 50 additions and 4 deletions
@@ -77,7 +77,7 @@ class FirJavaClass @FirImplementationDetail internal constructor(
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirJavaClass {
typeParameters.transformInplace(transformer, data)
declarations.transformInplace(transformer, data)
transformDeclarations(transformer, data)
status = status.transformSingle(transformer, data)
superTypeRefs.transformInplace(transformer, data)
transformAnnotations(transformer, data)
@@ -97,6 +97,15 @@ class FirJavaClass @FirImplementationDetail internal constructor(
annotations.transformInplace(transformer, data)
return this
}
override fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirJavaClass {
declarations.transformInplace(transformer, data)
return this
}
override fun <D> transformCompanionObject(transformer: FirTransformer<D>, data: D): FirJavaClass {
return this
}
}
@FirBuilderDsl
@@ -37,6 +37,8 @@ abstract class FirAnonymousObject : FirClass<FirAnonymousObject>, FirExpression(
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnonymousObject(this, data)
abstract override fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirAnonymousObject
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirAnonymousObject
abstract fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirAnonymousObject
@@ -37,5 +37,7 @@ interface FirClass<F : FirClass<F>> : FirClassLikeDeclaration<F>, FirStatement,
fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>)
fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirClass<F>
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirClass<F>
}
@@ -47,5 +47,9 @@ abstract class FirRegularClass : FirPureAbstractElement(), FirMemberDeclaration,
abstract override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirRegularClass
abstract override fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirRegularClass
abstract fun <D> transformCompanionObject(transformer: FirTransformer<D>, data: D): FirRegularClass
abstract fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirRegularClass
}
@@ -48,5 +48,9 @@ abstract class FirSealedClass : FirRegularClass() {
abstract override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirSealedClass
abstract override fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirSealedClass
abstract override fun <D> transformCompanionObject(transformer: FirTransformer<D>, data: D): FirSealedClass
abstract override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirSealedClass
}
@@ -56,13 +56,18 @@ internal class FirAnonymousObjectImpl(
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAnonymousObjectImpl {
typeParameters.transformInplace(transformer, data)
superTypeRefs.transformInplace(transformer, data)
declarations.transformInplace(transformer, data)
transformDeclarations(transformer, data)
transformAnnotations(transformer, data)
typeRef = typeRef.transformSingle(transformer, data)
transformControlFlowGraphReference(transformer, data)
return this
}
override fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirAnonymousObjectImpl {
declarations.transformInplace(transformer, data)
return this
}
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirAnonymousObjectImpl {
annotations.transformInplace(transformer, data)
return this
@@ -79,6 +79,16 @@ internal class FirClassImpl(
return this
}
override fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirClassImpl {
declarations.transformInplace(transformer, data)
return this
}
override fun <D> transformCompanionObject(transformer: FirTransformer<D>, data: D): FirClassImpl {
companionObject = companionObject?.transformSingle(transformer, data)
return this
}
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirClassImpl {
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
return this
@@ -82,6 +82,16 @@ internal class FirSealedClassImpl(
return this
}
override fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirSealedClassImpl {
declarations.transformInplace(transformer, data)
return this
}
override fun <D> transformCompanionObject(transformer: FirTransformer<D>, data: D): FirSealedClassImpl {
companionObject = companionObject?.transformSingle(transformer, data)
return this
}
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirSealedClassImpl {
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
return this
@@ -229,7 +229,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+symbol("FirClassSymbol", "F")
+classKind
+superTypeRefs(withReplace = true)
+declarations
+declarations.withTransform()
+annotations
+scopeProvider
}
@@ -238,7 +238,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
parentArg(klass, "F", regularClass)
+name
+symbol("FirRegularClassSymbol")
+field("companionObject", regularClass, nullable = true)
+field("companionObject", regularClass, nullable = true).withTransform()
+booleanField("hasLazyNestedClassifiers")
+superTypeRefs(withReplace = true)
+controlFlowGraphReferenceField