From cf0f061db59ce932dd0772f8e6eb2f5a46b05a16 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Wed, 15 Sep 2021 16:03:47 +0200 Subject: [PATCH] [Commonizer] Implement two phased re-approximation ^KT-48288 --- .../org/jetbrains/kotlin/commonizer/facade.kt | 3 --- .../ReApproximationCirNodeTransformer.kt | 18 +++++++++++++++--- .../kotlin/commonizer/tree/mergeCirTree.kt | 6 +++--- .../kotlin/commonizer/utils/commonizedGroup.kt | 4 ---- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/facade.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/facade.kt index 22ab97598ce..2720be2266c 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/facade.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/facade.kt @@ -65,14 +65,11 @@ internal fun commonizeTarget( InlineTypeAliasCirNodeTransformer(parameters.storageManager, classifiers).invoke(mergedTree) - /* ReApproximationCirNodeTransformer( parameters.storageManager, classifiers, SignatureBuildingContextProvider(classifiers, typeAliasInvariant = true, skipArguments = false) ).invoke(mergedTree) - */ - ReApproximationCirNodeTransformer( parameters.storageManager, classifiers, SignatureBuildingContextProvider(classifiers, typeAliasInvariant = true, skipArguments = true) diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/transformer/ReApproximationCirNodeTransformer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/transformer/ReApproximationCirNodeTransformer.kt index 70bb40bee38..54524912133 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/transformer/ReApproximationCirNodeTransformer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/transformer/ReApproximationCirNodeTransformer.kt @@ -68,7 +68,11 @@ internal class ReApproximationCirNodeTransformer( buildFunctionNode(storageManager, parent.targetDeclarations.size, classifiers, ParentNode(parent)) } - newNode.targetDeclarations.setIfAbsent(index, functionAtIndex) + // Move declaration + if (newNode.targetDeclarations[index] == null) { + function.targetDeclarations[index] = null + newNode.targetDeclarations[index] = functionAtIndex + } } private operator fun invoke(parent: CirNodeWithMembers<*, *>, property: CirPropertyNode, index: Int, context: CirMemberContext) { @@ -81,7 +85,11 @@ internal class ReApproximationCirNodeTransformer( buildPropertyNode(storageManager, parent.targetDeclarations.size, classifiers, ParentNode(parent)) } - newNode.targetDeclarations.setIfAbsent(index, propertyAtIndex) + // Move declaration + if (newNode.targetDeclarations[index] == null) { + property.targetDeclarations[index] = null + newNode.targetDeclarations[index] = propertyAtIndex + } } private operator fun invoke( @@ -98,6 +106,10 @@ internal class ReApproximationCirNodeTransformer( buildClassConstructorNode(storageManager, parent.targetDeclarations.size, classifiers, ParentNode(parent)) } - newNode.targetDeclarations.setIfAbsent(index, constructorAtIndex) + // Move declaration + if (newNode.targetDeclarations[index] == null) { + constructor.targetDeclarations[index] = null + newNode.targetDeclarations[index] = constructorAtIndex + } } } diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/mergeCirTree.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/mergeCirTree.kt index 474b1367f12..8241bd992c4 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/mergeCirTree.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/mergeCirTree.kt @@ -87,7 +87,7 @@ internal fun CirNodeWithMembers<*, *>.buildFunction( buildFunctionNode(context.storageManager, context.targets, context.classifiers, ParentNode(parent)) } /* Multiple type substitutions could in result in the same commonization result */ - functionNode.targetDeclarations.setIfAbsent(context.targetIndex, function) + functionNode.targetDeclarations.set(context.targetIndex, function) } internal fun CirNodeWithMembers<*, *>.buildProperty( @@ -99,7 +99,7 @@ internal fun CirNodeWithMembers<*, *>.buildProperty( buildPropertyNode(context.storageManager, context.targets, context.classifiers, ParentNode(parent)) } /* Multiple type substitutions could in result in the same commonization result */ - propertyNode.targetDeclarations.setIfAbsent(context.targetIndex, property) + propertyNode.targetDeclarations.set(context.targetIndex, property) } internal fun CirClassNode.buildConstructor( @@ -111,7 +111,7 @@ internal fun CirClassNode.buildConstructor( buildClassConstructorNode(context.storageManager, context.targets, context.classifiers, ParentNode(parent)) } /* Multiple type substitutions could in result in the same commonization result */ - constructorNode.targetDeclarations.setIfAbsent(context.targetIndex, constructor) + constructorNode.targetDeclarations.set(context.targetIndex, constructor) } internal fun CirPackageNode.buildTypeAlias(context: TargetBuildingContext, treeTypeAlias: CirTreeTypeAlias) { diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/utils/commonizedGroup.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/utils/commonizedGroup.kt index 8e397e16e05..c356c6f8b45 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/utils/commonizedGroup.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/utils/commonizedGroup.kt @@ -31,8 +31,4 @@ class CommonizedGroup( elements[index] = value } - - fun setIfAbsent(index: Int, value: T?) { - if (this[index] == null) set(index, value) - } }