[FIR] Don't generate replace and transform in implementations with kind = Interface
This commit is contained in:
@@ -67,6 +67,10 @@ class FirJavaClass internal constructor(
|
||||
supertypesComputationStatus = newSupertypesComputationStatus
|
||||
}
|
||||
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
declarations.forEach { it.accept(visitor, data) }
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
|
||||
@@ -20,6 +20,8 @@ import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.PARAMETER_MO
|
||||
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.PLATFORM_MODIFIER
|
||||
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.PROPERTY_MODIFIER
|
||||
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.VISIBILITY_MODIFIER
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
class Modifier(
|
||||
override val psi: PsiElement? = null,
|
||||
@@ -155,4 +157,10 @@ class Modifier(
|
||||
fun hasActual(): Boolean {
|
||||
return platformModifiers.contains(PlatformModifier.ACTUAL) || platformModifiers.contains(PlatformModifier.IMPL)
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAbstractAnnotatedElement {
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
+8
@@ -9,6 +9,8 @@ import com.intellij.lang.LighterASTNode
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
|
||||
class TypeModifier(
|
||||
@@ -26,4 +28,10 @@ class TypeModifier(
|
||||
fun hasNoAnnotations(): Boolean {
|
||||
return annotations.isEmpty()
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAbstractAnnotatedElement {
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
+8
@@ -11,6 +11,8 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
|
||||
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.REIFICATION_MODIFIER
|
||||
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.VARIANCE_MODIFIER
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
|
||||
class TypeParameterModifier(
|
||||
@@ -40,4 +42,10 @@ class TypeParameterModifier(
|
||||
fun hasReified(): Boolean {
|
||||
return reificationModifier == ReificationModifier.REIFIED
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAbstractAnnotatedElement {
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
+8
@@ -10,6 +10,8 @@ import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
|
||||
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.VARIANCE_MODIFIER
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
|
||||
class TypeProjectionModifier(
|
||||
@@ -32,4 +34,10 @@ class TypeProjectionModifier(
|
||||
else -> Variance.INVARIANT
|
||||
}
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAbstractAnnotatedElement {
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
+3
-19
@@ -29,25 +29,9 @@ interface FirModifiableClass : FirClass, FirAbstractAnnotatedElement {
|
||||
override val superTypeRefs: MutableList<FirTypeRef>
|
||||
override val declarations: MutableList<FirDeclaration>
|
||||
override val annotations: MutableList<FirAnnotationCall>
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
superTypeRefs.forEach { it.accept(visitor, data) }
|
||||
declarations.forEach { it.accept(visitor, data) }
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
}
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableClass
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableClass {
|
||||
superTypeRefs.transformInplace(transformer, data)
|
||||
declarations.transformInplace(transformer, data)
|
||||
annotations.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase)
|
||||
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
override fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>) {
|
||||
superTypeRefs.clear()
|
||||
superTypeRefs.addAll(newSuperTypeRefs)
|
||||
}
|
||||
override fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>)
|
||||
}
|
||||
|
||||
+5
-39
@@ -46,47 +46,13 @@ interface FirModifiableConstructor : FirConstructor, FirModifiableTypeParameters
|
||||
override val symbol: FirConstructorSymbol
|
||||
override var delegatedConstructor: FirDelegatedConstructorCall?
|
||||
override val isPrimary: Boolean
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
returnTypeRef.accept(visitor, data)
|
||||
receiverTypeRef?.accept(visitor, data)
|
||||
controlFlowGraphReference.accept(visitor, data)
|
||||
typeParameters.forEach { it.accept(visitor, data) }
|
||||
valueParameters.forEach { it.accept(visitor, data) }
|
||||
body?.accept(visitor, data)
|
||||
status.accept(visitor, data)
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
delegatedConstructor?.accept(visitor, data)
|
||||
}
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableConstructor
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableConstructor {
|
||||
transformReturnTypeRef(transformer, data)
|
||||
receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data)
|
||||
transformControlFlowGraphReference(transformer, data)
|
||||
typeParameters.transformInplace(transformer, data)
|
||||
transformValueParameters(transformer, data)
|
||||
body = body?.transformSingle(transformer, data)
|
||||
status = status.transformSingle(transformer, data)
|
||||
annotations.transformInplace(transformer, data)
|
||||
delegatedConstructor = delegatedConstructor?.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirModifiableConstructor
|
||||
|
||||
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirModifiableConstructor {
|
||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirModifiableConstructor
|
||||
|
||||
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirModifiableConstructor {
|
||||
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirModifiableConstructor
|
||||
|
||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirModifiableConstructor {
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase)
|
||||
}
|
||||
|
||||
+5
-35
@@ -37,43 +37,13 @@ interface FirModifiableFunction<F : FirFunction<F>> : FirFunction<F>, FirAbstra
|
||||
override val symbol: FirFunctionSymbol<F>
|
||||
override val valueParameters: MutableList<FirValueParameter>
|
||||
override var body: FirBlock?
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
returnTypeRef.accept(visitor, data)
|
||||
receiverTypeRef?.accept(visitor, data)
|
||||
controlFlowGraphReference.accept(visitor, data)
|
||||
typeParameters.forEach { it.accept(visitor, data) }
|
||||
valueParameters.forEach { it.accept(visitor, data) }
|
||||
body?.accept(visitor, data)
|
||||
}
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableFunction<F>
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableFunction<F> {
|
||||
annotations.transformInplace(transformer, data)
|
||||
transformReturnTypeRef(transformer, data)
|
||||
receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data)
|
||||
transformControlFlowGraphReference(transformer, data)
|
||||
typeParameters.transformInplace(transformer, data)
|
||||
transformValueParameters(transformer, data)
|
||||
body = body?.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirModifiableFunction<F>
|
||||
|
||||
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirModifiableFunction<F> {
|
||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirModifiableFunction<F>
|
||||
|
||||
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirModifiableFunction<F> {
|
||||
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirModifiableFunction<F>
|
||||
|
||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirModifiableFunction<F> {
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase)
|
||||
}
|
||||
|
||||
+1
-8
@@ -18,12 +18,5 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
interface FirModifiableTypeParametersOwner : FirTypeParametersOwner {
|
||||
override val psi: PsiElement?
|
||||
override val typeParameters: MutableList<FirTypeParameter>
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
typeParameters.forEach { it.accept(visitor, data) }
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableTypeParametersOwner {
|
||||
typeParameters.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableTypeParametersOwner
|
||||
}
|
||||
|
||||
+6
-39
@@ -40,48 +40,15 @@ interface FirModifiableVariable<F : FirVariable<F>> : FirVariable<F>, FirAbstra
|
||||
override var getter: FirPropertyAccessor?
|
||||
override var setter: FirPropertyAccessor?
|
||||
override val annotations: MutableList<FirAnnotationCall>
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
returnTypeRef.accept(visitor, data)
|
||||
receiverTypeRef?.accept(visitor, data)
|
||||
initializer?.accept(visitor, data)
|
||||
delegate?.accept(visitor, data)
|
||||
getter?.accept(visitor, data)
|
||||
setter?.accept(visitor, data)
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
}
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableVariable<F>
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableVariable<F> {
|
||||
transformReturnTypeRef(transformer, data)
|
||||
transformGetter(transformer, data)
|
||||
transformSetter(transformer, data)
|
||||
transformOtherChildren(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirModifiableVariable<F>
|
||||
|
||||
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirModifiableVariable<F> {
|
||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformGetter(transformer: FirTransformer<D>, data: D): FirModifiableVariable<F>
|
||||
|
||||
override fun <D> transformGetter(transformer: FirTransformer<D>, data: D): FirModifiableVariable<F> {
|
||||
getter = getter?.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformSetter(transformer: FirTransformer<D>, data: D): FirModifiableVariable<F>
|
||||
|
||||
override fun <D> transformSetter(transformer: FirTransformer<D>, data: D): FirModifiableVariable<F> {
|
||||
setter = setter?.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): FirModifiableVariable<F>
|
||||
|
||||
override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): FirModifiableVariable<F> {
|
||||
receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data)
|
||||
initializer = initializer?.transformSingle(transformer, data)
|
||||
delegate = delegate?.transformSingle(transformer, data)
|
||||
annotations.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase)
|
||||
}
|
||||
|
||||
@@ -25,33 +25,11 @@ interface FirAbstractLoop : FirLoop, FirAbstractAnnotatedElement {
|
||||
override var block: FirBlock
|
||||
override var condition: FirExpression
|
||||
override var label: FirLabel?
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
block.accept(visitor, data)
|
||||
condition.accept(visitor, data)
|
||||
label?.accept(visitor, data)
|
||||
}
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAbstractLoop
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAbstractLoop {
|
||||
transformBlock(transformer, data)
|
||||
transformCondition(transformer, data)
|
||||
transformOtherChildren(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformBlock(transformer: FirTransformer<D>, data: D): FirAbstractLoop
|
||||
|
||||
override fun <D> transformBlock(transformer: FirTransformer<D>, data: D): FirAbstractLoop {
|
||||
block = block.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformCondition(transformer: FirTransformer<D>, data: D): FirAbstractLoop
|
||||
|
||||
override fun <D> transformCondition(transformer: FirTransformer<D>, data: D): FirAbstractLoop {
|
||||
condition = condition.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): FirAbstractLoop {
|
||||
annotations.transformInplace(transformer, data)
|
||||
label = label?.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): FirAbstractLoop
|
||||
}
|
||||
|
||||
+2
-13
@@ -25,18 +25,7 @@ interface FirAbstractLoopJump : FirLoopJump, FirAbstractAnnotatedElement {
|
||||
override var typeRef: FirTypeRef
|
||||
override val annotations: MutableList<FirAnnotationCall>
|
||||
override var target: FirTarget<FirLoop>
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
typeRef.accept(visitor, data)
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
}
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAbstractLoopJump
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAbstractLoopJump {
|
||||
typeRef = typeRef.transformSingle(transformer, data)
|
||||
annotations.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
typeRef = newTypeRef
|
||||
}
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef)
|
||||
}
|
||||
|
||||
+2
-14
@@ -21,19 +21,7 @@ interface FirCallWithArgumentList : FirCall, FirAbstractAnnotatedElement {
|
||||
override val psi: PsiElement?
|
||||
override val annotations: MutableList<FirAnnotationCall>
|
||||
override val arguments: MutableList<FirExpression>
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
arguments.forEach { it.accept(visitor, data) }
|
||||
}
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirCallWithArgumentList
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirCallWithArgumentList {
|
||||
annotations.transformInplace(transformer, data)
|
||||
transformArguments(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformArguments(transformer: FirTransformer<D>, data: D): FirCallWithArgumentList {
|
||||
arguments.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformArguments(transformer: FirTransformer<D>, data: D): FirCallWithArgumentList
|
||||
}
|
||||
|
||||
+4
-34
@@ -24,41 +24,11 @@ interface FirModifiableQualifiedAccess : FirQualifiedAccessWithoutCallee, FirAbs
|
||||
override var explicitReceiver: FirExpression?
|
||||
override var dispatchReceiver: FirExpression
|
||||
override var extensionReceiver: FirExpression
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
explicitReceiver?.accept(visitor, data)
|
||||
if (dispatchReceiver !== explicitReceiver) {
|
||||
dispatchReceiver.accept(visitor, data)
|
||||
}
|
||||
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
|
||||
extensionReceiver.accept(visitor, data)
|
||||
}
|
||||
}
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableQualifiedAccess
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableQualifiedAccess {
|
||||
annotations.transformInplace(transformer, data)
|
||||
explicitReceiver = explicitReceiver?.transformSingle(transformer, data)
|
||||
if (dispatchReceiver !== explicitReceiver) {
|
||||
dispatchReceiver = dispatchReceiver.transformSingle(transformer, data)
|
||||
}
|
||||
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
|
||||
extensionReceiver = extensionReceiver.transformSingle(transformer, data)
|
||||
}
|
||||
return this
|
||||
}
|
||||
override fun <D> transformExplicitReceiver(transformer: FirTransformer<D>, data: D): FirModifiableQualifiedAccess
|
||||
|
||||
override fun <D> transformExplicitReceiver(transformer: FirTransformer<D>, data: D): FirModifiableQualifiedAccess {
|
||||
explicitReceiver = explicitReceiver?.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirModifiableQualifiedAccess
|
||||
|
||||
override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirModifiableQualifiedAccess {
|
||||
dispatchReceiver = dispatchReceiver.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformExtensionReceiver(transformer: FirTransformer<D>, data: D): FirModifiableQualifiedAccess {
|
||||
extensionReceiver = extensionReceiver.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformExtensionReceiver(transformer: FirTransformer<D>, data: D): FirModifiableQualifiedAccess
|
||||
}
|
||||
|
||||
@@ -18,12 +18,5 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
interface FirAbstractAnnotatedElement : FirAnnotationContainer {
|
||||
override val psi: PsiElement?
|
||||
override val annotations: MutableList<FirAnnotationCall>
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAbstractAnnotatedElement {
|
||||
annotations.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAbstractAnnotatedElement
|
||||
}
|
||||
|
||||
+137
-102
@@ -261,7 +261,9 @@ fun PrintWriter.printImplementation(implementation: Implementation) {
|
||||
val fieldsWithoutDefault = allFields.filter { it.defaultValue == null && !it.isLateinit }
|
||||
val fieldsWithDefault = allFields.filter { it.defaultValue != null || it.isLateinit }
|
||||
|
||||
if (kind != Implementation.Kind.Interface && fieldsWithoutDefault.isNotEmpty()) {
|
||||
val isInterface = kind == Implementation.Kind.Interface
|
||||
|
||||
if (!isInterface && fieldsWithoutDefault.isNotEmpty()) {
|
||||
println("(")
|
||||
fieldsWithoutDefault.forEachIndexed { i, field ->
|
||||
val end = if (i == fieldsWithoutDefault.size - 1) "" else ","
|
||||
@@ -276,7 +278,7 @@ fun PrintWriter.printImplementation(implementation: Implementation) {
|
||||
}
|
||||
println(" {")
|
||||
|
||||
if (kind == Implementation.Kind.Interface) {
|
||||
if (isInterface) {
|
||||
allFields.forEach { printField(it, isImplementation = true, override = true, end = "") }
|
||||
} else {
|
||||
fieldsWithDefault.forEach {
|
||||
@@ -288,7 +290,7 @@ fun PrintWriter.printImplementation(implementation: Implementation) {
|
||||
}
|
||||
|
||||
element.allFields.filter { it.type.contains("Symbol") }
|
||||
.takeIf { it.isNotEmpty() && kind != Implementation.Kind.Interface && !element.type.contains("Reference")}
|
||||
.takeIf { it.isNotEmpty() && !isInterface && !element.type.contains("Reference")}
|
||||
?.let { symbolFields ->
|
||||
indent(1)
|
||||
println("init {")
|
||||
@@ -301,21 +303,24 @@ fun PrintWriter.printImplementation(implementation: Implementation) {
|
||||
println()
|
||||
}
|
||||
|
||||
indent(1)
|
||||
print("override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {")
|
||||
|
||||
fun Field.acceptString(): String = "${name}${call()}accept(visitor, data)"
|
||||
if (!isInterface) {
|
||||
|
||||
if (element.allFirFields.isNotEmpty()) {
|
||||
println()
|
||||
for (field in allFields.filter { it.isFirType }) {
|
||||
if (field.withGetter || !field.needAcceptAndTransform) continue
|
||||
when (field.name) {
|
||||
"explicitReceiver" -> {
|
||||
val explicitReceiver = implementation["explicitReceiver"]!!
|
||||
val dispatchReceiver = implementation["dispatchReceiver"]!!
|
||||
val extensionReceiver = implementation["extensionReceiver"]!!
|
||||
println("""
|
||||
indent(1)
|
||||
print("override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {")
|
||||
|
||||
|
||||
if (element.allFirFields.isNotEmpty()) {
|
||||
println()
|
||||
for (field in allFields.filter { it.isFirType }) {
|
||||
if (field.withGetter || !field.needAcceptAndTransform) continue
|
||||
when (field.name) {
|
||||
"explicitReceiver" -> {
|
||||
val explicitReceiver = implementation["explicitReceiver"]!!
|
||||
val dispatchReceiver = implementation["dispatchReceiver"]!!
|
||||
val extensionReceiver = implementation["extensionReceiver"]!!
|
||||
println(
|
||||
"""
|
||||
| ${explicitReceiver.acceptString()}
|
||||
| if (dispatchReceiver !== explicitReceiver) {
|
||||
| ${dispatchReceiver.acceptString()}
|
||||
@@ -323,115 +328,135 @@ fun PrintWriter.printImplementation(implementation: Implementation) {
|
||||
| if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
|
||||
| ${extensionReceiver.acceptString()}
|
||||
| }
|
||||
""".trimMargin())
|
||||
}
|
||||
|
||||
"dispatchReceiver", "extensionReceiver", "subjectVariable" -> {}
|
||||
"companionObject" -> {}
|
||||
|
||||
else -> {
|
||||
if (type == "FirClassImpl" && field.name == "declarations") {
|
||||
indent(2)
|
||||
println("(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.forEach { it.accept(visitor, data) }")
|
||||
""".trimMargin()
|
||||
)
|
||||
}
|
||||
if (type == "FirWhenExpressionImpl" && field.name == "subject") {
|
||||
println(
|
||||
"""
|
||||
|
||||
"dispatchReceiver", "extensionReceiver", "subjectVariable" -> {
|
||||
}
|
||||
"companionObject" -> {
|
||||
}
|
||||
|
||||
else -> {
|
||||
if (type == "FirClassImpl" && field.name == "declarations") {
|
||||
indent(2)
|
||||
println("(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.forEach { it.accept(visitor, data) }")
|
||||
}
|
||||
if (type == "FirWhenExpressionImpl" && field.name == "subject") {
|
||||
println(
|
||||
"""
|
||||
| if (subjectVariable != null) {
|
||||
| subjectVariable.accept(visitor, data)
|
||||
| } else {
|
||||
| subject?.accept(visitor, data)
|
||||
| }
|
||||
""".trimMargin()
|
||||
)
|
||||
} else {
|
||||
indent(2)
|
||||
when (field.origin) {
|
||||
is FirField -> {
|
||||
println(field.acceptString())
|
||||
}
|
||||
)
|
||||
} else {
|
||||
indent(2)
|
||||
when (field.origin) {
|
||||
is FirField -> {
|
||||
println(field.acceptString())
|
||||
}
|
||||
|
||||
is FieldList -> {
|
||||
println("${field.name}.forEach { it.accept(visitor, data) }")
|
||||
}
|
||||
is FieldList -> {
|
||||
println("${field.name}.forEach { it.accept(visitor, data) }")
|
||||
}
|
||||
|
||||
else -> throw IllegalStateException()
|
||||
else -> throw IllegalStateException()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
indent()
|
||||
}
|
||||
indent()
|
||||
println("}")
|
||||
println()
|
||||
}
|
||||
println("}")
|
||||
println()
|
||||
|
||||
indent()
|
||||
println("override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): $typeWithArguments {")
|
||||
for (field in allFields) {
|
||||
when {
|
||||
!field.isMutable || !field.isFirType || field.withGetter || !field.needAcceptAndTransform -> {}
|
||||
field.name == "explicitReceiver" -> {
|
||||
val explicitReceiver = implementation["explicitReceiver"]!!
|
||||
val dispatchReceiver = implementation["dispatchReceiver"]!!
|
||||
val extensionReceiver = implementation["extensionReceiver"]!!
|
||||
if (explicitReceiver.isMutable) {
|
||||
indent(2)
|
||||
println("explicitReceiver = explicitReceiver${explicitReceiver.call()}transformSingle(transformer, data)")
|
||||
print("override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): $typeWithArguments")
|
||||
if (!isInterface) {
|
||||
println(" {")
|
||||
for (field in allFields) {
|
||||
when {
|
||||
!field.isMutable || !field.isFirType || field.withGetter || !field.needAcceptAndTransform -> {
|
||||
}
|
||||
if (dispatchReceiver.isMutable) {
|
||||
println("""
|
||||
field.name == "explicitReceiver" -> {
|
||||
val explicitReceiver = implementation["explicitReceiver"]!!
|
||||
val dispatchReceiver = implementation["dispatchReceiver"]!!
|
||||
val extensionReceiver = implementation["extensionReceiver"]!!
|
||||
if (explicitReceiver.isMutable) {
|
||||
indent(2)
|
||||
println("explicitReceiver = explicitReceiver${explicitReceiver.call()}transformSingle(transformer, data)")
|
||||
}
|
||||
if (dispatchReceiver.isMutable) {
|
||||
println(
|
||||
"""
|
||||
| if (dispatchReceiver !== explicitReceiver) {
|
||||
| dispatchReceiver = dispatchReceiver.transformSingle(transformer, data)
|
||||
| }
|
||||
""".trimMargin())
|
||||
}
|
||||
if (extensionReceiver.isMutable) {
|
||||
println("""
|
||||
""".trimMargin()
|
||||
)
|
||||
}
|
||||
if (extensionReceiver.isMutable) {
|
||||
println(
|
||||
"""
|
||||
| if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
|
||||
| extensionReceiver = extensionReceiver.transformSingle(transformer, data)
|
||||
| }
|
||||
""".trimMargin())
|
||||
""".trimMargin()
|
||||
)
|
||||
}
|
||||
}
|
||||
field.name in setOf("dispatchReceiver", "extensionReceiver") -> {
|
||||
}
|
||||
type == "FirClassImpl" && field.name == "declarations" -> {
|
||||
indent(2)
|
||||
println("(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.transformInplace(transformer, data)")
|
||||
indent(2)
|
||||
println("declarations.transformInplace(transformer, data)")
|
||||
}
|
||||
field.name == "companionObject" -> {
|
||||
indent(2)
|
||||
println("companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion }")
|
||||
}
|
||||
field.needsSeparateTransform -> {
|
||||
indent(2)
|
||||
println("transform${field.name.capitalize()}(transformer, data)")
|
||||
}
|
||||
!element.needTransformOtherChildren -> {
|
||||
indent(2)
|
||||
field.transform()
|
||||
}
|
||||
else -> {
|
||||
}
|
||||
}
|
||||
field.name in setOf("dispatchReceiver", "extensionReceiver") -> {}
|
||||
type == "FirClassImpl" && field.name == "declarations" -> {
|
||||
indent(2)
|
||||
println("(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.transformInplace(transformer, data)")
|
||||
indent(2)
|
||||
println("declarations.transformInplace(transformer, data)")
|
||||
}
|
||||
field.name == "companionObject" -> {
|
||||
indent(2)
|
||||
println("companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion }")
|
||||
}
|
||||
field.needsSeparateTransform -> {
|
||||
indent(2)
|
||||
println("transform${field.name.capitalize()}(transformer, data)")
|
||||
}
|
||||
!element.needTransformOtherChildren -> {
|
||||
indent(2)
|
||||
field.transform()
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
if (element.needTransformOtherChildren) {
|
||||
if (element.needTransformOtherChildren) {
|
||||
indent(2)
|
||||
println("transformOtherChildren(transformer, data)")
|
||||
}
|
||||
indent(2)
|
||||
println("transformOtherChildren(transformer, data)")
|
||||
println("return this")
|
||||
indent()
|
||||
println("}")
|
||||
} else {
|
||||
println()
|
||||
}
|
||||
indent(2)
|
||||
println("return this")
|
||||
indent()
|
||||
println("}")
|
||||
|
||||
for (field in allFields) {
|
||||
if (!field.needsSeparateTransform) continue
|
||||
println()
|
||||
indent()
|
||||
print("override ${field.transformFunctionDeclaration(typeWithArguments)} {")
|
||||
println()
|
||||
print("override ${field.transformFunctionDeclaration(typeWithArguments)}")
|
||||
if (isInterface) {
|
||||
println()
|
||||
continue
|
||||
}
|
||||
println(" {")
|
||||
if (field.isMutable && field.isFirType) {
|
||||
// TODO: replace with smth normal
|
||||
if (type == "FirWhenExpressionImpl" && field.name == "subject") {
|
||||
@@ -456,24 +481,34 @@ fun PrintWriter.printImplementation(implementation: Implementation) {
|
||||
if (element.needTransformOtherChildren) {
|
||||
println()
|
||||
indent()
|
||||
println("override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): $typeWithArguments {")
|
||||
for (field in allFields) {
|
||||
if (!field.isMutable || !field.isFirType || field.name == "subjectVariable") continue
|
||||
if (!field.needsSeparateTransform) {
|
||||
indent(2)
|
||||
field.transform()
|
||||
print("override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): $typeWithArguments")
|
||||
if (isInterface) {
|
||||
println()
|
||||
} else {
|
||||
println(" {")
|
||||
for (field in allFields) {
|
||||
if (!field.isMutable || !field.isFirType || field.name == "subjectVariable") continue
|
||||
if (!field.needsSeparateTransform) {
|
||||
indent(2)
|
||||
field.transform()
|
||||
}
|
||||
}
|
||||
indent(2)
|
||||
println("return this")
|
||||
indent()
|
||||
println("}")
|
||||
}
|
||||
indent(2)
|
||||
println("return this")
|
||||
indent()
|
||||
println("}")
|
||||
}
|
||||
|
||||
for (field in allFields.filter { it.withReplace }) {
|
||||
println()
|
||||
indent()
|
||||
print("override ${field.replaceFunctionDeclaration()} {")
|
||||
print("override ${field.replaceFunctionDeclaration()}")
|
||||
if (isInterface) {
|
||||
println()
|
||||
continue
|
||||
}
|
||||
print(" {")
|
||||
if (!field.isMutable) {
|
||||
println("}")
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user