[FIR] Add transformSuperTypeRefs to FirClass

This commit is contained in:
Dmitriy Novozhilov
2020-04-28 11:53:27 +03:00
parent bad4497970
commit bb645a7962
9 changed files with 33 additions and 5 deletions
@@ -81,11 +81,16 @@ class FirJavaClass @FirImplementationDetail internal constructor(
typeParameters.transformInplace(transformer, data)
transformDeclarations(transformer, data)
status = status.transformSingle(transformer, data)
superTypeRefs.transformInplace(transformer, data)
transformSuperTypeRefs(transformer, data)
transformAnnotations(transformer, data)
return this
}
override fun <D> transformSuperTypeRefs(transformer: FirTransformer<D>, data: D): FirRegularClass {
superTypeRefs.transformInplace(transformer, data)
return this
}
override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirJavaClass {
status = status.transformSingle(transformer, data)
return this
@@ -44,6 +44,8 @@ abstract class FirAnonymousObject : FirClass<FirAnonymousObject>, FirExpression(
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef)
abstract override fun <D> transformSuperTypeRefs(transformer: FirTransformer<D>, data: D): FirAnonymousObject
abstract override fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirAnonymousObject
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirAnonymousObject
@@ -40,6 +40,8 @@ interface FirClass<F : FirClass<F>> : FirClassLikeDeclaration<F>, FirStatement,
fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>)
fun <D> transformSuperTypeRefs(transformer: FirTransformer<D>, data: D): FirClass<F>
fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirClass<F>
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirClass<F>
@@ -54,5 +54,7 @@ abstract class FirRegularClass : FirPureAbstractElement(), FirMemberDeclaration,
abstract fun <D> transformCompanionObject(transformer: FirTransformer<D>, data: D): FirRegularClass
abstract override fun <D> transformSuperTypeRefs(transformer: FirTransformer<D>, data: D): FirRegularClass
abstract fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirRegularClass
}
@@ -57,5 +57,7 @@ abstract class FirSealedClass : FirRegularClass() {
abstract override fun <D> transformCompanionObject(transformer: FirTransformer<D>, data: D): FirSealedClass
abstract override fun <D> transformSuperTypeRefs(transformer: FirTransformer<D>, data: D): FirSealedClass
abstract override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirSealedClass
}
@@ -57,7 +57,7 @@ internal class FirAnonymousObjectImpl(
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAnonymousObjectImpl {
typeParameters.transformInplace(transformer, data)
superTypeRefs.transformInplace(transformer, data)
transformSuperTypeRefs(transformer, data)
transformDeclarations(transformer, data)
transformAnnotations(transformer, data)
typeRef = typeRef.transformSingle(transformer, data)
@@ -65,6 +65,11 @@ internal class FirAnonymousObjectImpl(
return this
}
override fun <D> transformSuperTypeRefs(transformer: FirTransformer<D>, data: D): FirAnonymousObjectImpl {
superTypeRefs.transformInplace(transformer, data)
return this
}
override fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirAnonymousObjectImpl {
declarations.transformInplace(transformer, data)
return this
@@ -66,7 +66,7 @@ internal class FirClassImpl(
transformStatus(transformer, data)
transformDeclarations(transformer, data)
companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion }
superTypeRefs.transformInplace(transformer, data)
transformSuperTypeRefs(transformer, data)
transformControlFlowGraphReference(transformer, data)
return this
}
@@ -91,6 +91,11 @@ internal class FirClassImpl(
return this
}
override fun <D> transformSuperTypeRefs(transformer: FirTransformer<D>, data: D): FirClassImpl {
superTypeRefs.transformInplace(transformer, data)
return this
}
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirClassImpl {
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
return this
@@ -69,7 +69,7 @@ internal class FirSealedClassImpl(
transformStatus(transformer, data)
transformDeclarations(transformer, data)
companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion }
superTypeRefs.transformInplace(transformer, data)
transformSuperTypeRefs(transformer, data)
transformControlFlowGraphReference(transformer, data)
return this
}
@@ -94,6 +94,11 @@ internal class FirSealedClassImpl(
return this
}
override fun <D> transformSuperTypeRefs(transformer: FirTransformer<D>, data: D): FirSealedClassImpl {
superTypeRefs.transformInplace(transformer, data)
return this
}
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirSealedClassImpl {
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
return this
@@ -230,7 +230,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
parentArg(classLikeDeclaration, "F", "F")
+symbol("FirClassSymbol", "F")
+classKind
+superTypeRefs(withReplace = true)
+superTypeRefs(withReplace = true).withTransform()
+declarations.withTransform()
+annotations
+scopeProvider