From a30a351fbb23386361507e4df60a98d3ee0a16be Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 14 Jun 2022 00:59:31 +0200 Subject: [PATCH] IR: make casts to nullable types in transformChildren stricter --- .../jetbrains/kotlin/ir/declarations/IrEnumEntry.kt | 2 +- .../kotlin/ir/declarations/IrLocalDelegatedProperty.kt | 2 +- .../org/jetbrains/kotlin/ir/declarations/IrProperty.kt | 2 +- .../src/org/jetbrains/kotlin/ir/generator/IrTree.kt | 8 ++------ .../org/jetbrains/kotlin/ir/generator/model/Model.kt | 7 ++----- .../kotlin/ir/generator/model/Transformations.kt | 2 -- .../jetbrains/kotlin/ir/generator/print/Elements.kt | 10 ++-------- 7 files changed, 9 insertions(+), 24 deletions(-) diff --git a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt index dd0d17a238a..a7189ebaa2f 100644 --- a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt @@ -39,6 +39,6 @@ abstract class IrEnumEntry : IrDeclarationBase(), IrDeclarationWithName { override fun transformChildren(transformer: IrElementTransformer, data: D) { initializerExpression = initializerExpression?.transform(transformer, data) - correspondingClass = correspondingClass?.transform(transformer, data) as? IrClass + correspondingClass = correspondingClass?.transform(transformer, data) as IrClass? } } diff --git a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt index ff6d8b05edd..23ee6333c07 100644 --- a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt @@ -48,6 +48,6 @@ abstract class IrLocalDelegatedProperty : IrDeclarationBase(), IrDeclarationWith override fun transformChildren(transformer: IrElementTransformer, data: D) { delegate = delegate.transform(transformer, data) as IrVariable getter = getter.transform(transformer, data) as IrSimpleFunction - setter = setter?.transform(transformer, data) as? IrSimpleFunction + setter = setter?.transform(transformer, data) as IrSimpleFunction? } } diff --git a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrProperty.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrProperty.kt index c7397ea523d..a9216ed066d 100644 --- a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrProperty.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrProperty.kt @@ -54,7 +54,7 @@ abstract class IrProperty : IrDeclarationBase(), IrPossiblyExternalDeclaration, } override fun transformChildren(transformer: IrElementTransformer, data: D) { - backingField = backingField?.transform(transformer, data) as? IrField + backingField = backingField?.transform(transformer, data) as IrField? getter = getter?.transform(transformer, data) as IrSimpleFunction? setter = setter?.transform(transformer, data) as IrSimpleFunction? } diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt index 6b2b4d484dc..6cf338a2b09 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt @@ -380,12 +380,8 @@ object IrTree : AbstractTreeBuilder() { +field("isExpect", boolean) +field("isFakeOverride", boolean) +field("backingField", field, mutable = true, nullable = true, isChild = true) - +field("getter", simpleFunction, mutable = true, nullable = true, isChild = true) { - strictCastInTransformChildren = true - } - +field("setter", simpleFunction, mutable = true, nullable = true, isChild = true) { - strictCastInTransformChildren = true - } + +field("getter", simpleFunction, mutable = true, nullable = true, isChild = true) + +field("setter", simpleFunction, mutable = true, nullable = true, isChild = true) } //TODO: make IrScript as IrPackageFragment, because script is used as a file, not as a class diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt index 6a449d91ed2..991e63f39af 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt @@ -75,7 +75,6 @@ sealed class Field( val nullable: Boolean, val mutable: Boolean, val isChild: Boolean, - val strictCastInTransformChildren: Boolean, ) { abstract val type: TypeRef abstract val baseDefaultValue: CodeBlock? @@ -97,10 +96,9 @@ class SingleField( nullable: Boolean, mutable: Boolean, isChild: Boolean, - strictCastInTransformChildren: Boolean, override val baseDefaultValue: CodeBlock?, override val baseGetter: CodeBlock?, -) : Field(config, name, nullable, mutable, isChild, strictCastInTransformChildren) { +) : Field(config, name, nullable, mutable, isChild) { override val transformable: Boolean get() = mutable } @@ -113,11 +111,10 @@ class ListField( nullable: Boolean, mutable: Boolean, isChild: Boolean, - strictCastInTransformChildren: Boolean, override val transformable: Boolean, override val baseDefaultValue: CodeBlock?, override val baseGetter: CodeBlock?, -) : Field(config, name, nullable, mutable, isChild, strictCastInTransformChildren) { +) : Field(config, name, nullable, mutable, isChild) { override val type: TypeRef get() = listType.withArgs(elementType) } diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Transformations.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Transformations.kt index 026b6438a15..e29a0c4bf16 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Transformations.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Transformations.kt @@ -28,7 +28,6 @@ fun config2model(config: Config): Model { fc.nullable, fc.mutable, fc.isChild, - fc.strictCastInTransformChildren, fc.baseDefaultValue, fc.baseGetter ) @@ -45,7 +44,6 @@ fun config2model(config: Config): Model { fc.nullable, fc.mutability == ListFieldConfig.Mutability.Var, fc.isChild, - fc.strictCastInTransformChildren, fc.mutability != ListFieldConfig.Mutability.Immutable, fc.baseDefaultValue, fc.baseGetter diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Elements.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Elements.kt index 523b509fc29..609ba3b0e03 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Elements.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Elements.kt @@ -157,14 +157,8 @@ fun printElements(generationPath: File, model: Model) = sequence { if (child is SingleField) { val elRef = child.type as ElementRef if (!elRef.element.transform) { - append(" as") - if (child.strictCastInTransformChildren) { - append(" %T") - if (child.nullable) append("?") - } else { - if (child.nullable) append("?") - append(" %T") - } + append(" as %T") + if (child.nullable) append("?") args.add(elRef.toPoet()) } }