[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) typeParameters.transformInplace(transformer, data)
transformDeclarations(transformer, data) transformDeclarations(transformer, data)
status = status.transformSingle(transformer, data) status = status.transformSingle(transformer, data)
superTypeRefs.transformInplace(transformer, data) transformSuperTypeRefs(transformer, data)
transformAnnotations(transformer, data) transformAnnotations(transformer, data)
return this 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 { override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirJavaClass {
status = status.transformSingle(transformer, data) status = status.transformSingle(transformer, data)
return this return this
@@ -44,6 +44,8 @@ abstract class FirAnonymousObject : FirClass<FirAnonymousObject>, FirExpression(
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef) 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> transformDeclarations(transformer: FirTransformer<D>, data: D): FirAnonymousObject
abstract override fun <D> transformAnnotations(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 replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>)
fun <D> transformSuperTypeRefs(transformer: FirTransformer<D>, data: D): FirClass<F>
fun <D> transformDeclarations(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> 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 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 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> 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 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 { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAnonymousObjectImpl {
typeParameters.transformInplace(transformer, data) typeParameters.transformInplace(transformer, data)
superTypeRefs.transformInplace(transformer, data) transformSuperTypeRefs(transformer, data)
transformDeclarations(transformer, data) transformDeclarations(transformer, data)
transformAnnotations(transformer, data) transformAnnotations(transformer, data)
typeRef = typeRef.transformSingle(transformer, data) typeRef = typeRef.transformSingle(transformer, data)
@@ -65,6 +65,11 @@ internal class FirAnonymousObjectImpl(
return this 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 { override fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirAnonymousObjectImpl {
declarations.transformInplace(transformer, data) declarations.transformInplace(transformer, data)
return this return this
@@ -66,7 +66,7 @@ internal class FirClassImpl(
transformStatus(transformer, data) transformStatus(transformer, data)
transformDeclarations(transformer, data) transformDeclarations(transformer, data)
companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion } companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion }
superTypeRefs.transformInplace(transformer, data) transformSuperTypeRefs(transformer, data)
transformControlFlowGraphReference(transformer, data) transformControlFlowGraphReference(transformer, data)
return this return this
} }
@@ -91,6 +91,11 @@ internal class FirClassImpl(
return this 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 { override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirClassImpl {
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data) controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
return this return this
@@ -69,7 +69,7 @@ internal class FirSealedClassImpl(
transformStatus(transformer, data) transformStatus(transformer, data)
transformDeclarations(transformer, data) transformDeclarations(transformer, data)
companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion } companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion }
superTypeRefs.transformInplace(transformer, data) transformSuperTypeRefs(transformer, data)
transformControlFlowGraphReference(transformer, data) transformControlFlowGraphReference(transformer, data)
return this return this
} }
@@ -94,6 +94,11 @@ internal class FirSealedClassImpl(
return this 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 { override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirSealedClassImpl {
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data) controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
return this return this
@@ -230,7 +230,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
parentArg(classLikeDeclaration, "F", "F") parentArg(classLikeDeclaration, "F", "F")
+symbol("FirClassSymbol", "F") +symbol("FirClassSymbol", "F")
+classKind +classKind
+superTypeRefs(withReplace = true) +superTypeRefs(withReplace = true).withTransform()
+declarations.withTransform() +declarations.withTransform()
+annotations +annotations
+scopeProvider +scopeProvider