From 15648da2b4628fdcf96c27a51cea5687bdbb7dfa Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Fri, 30 Jul 2021 15:04:12 +0300 Subject: [PATCH] [PIR] Use simple fast hashCode --- .../PersistentIrAnonymousInitializer.kt | 3 +++ .../persistent/PersistentIrClass.kt | 22 +++++-------------- .../persistent/PersistentIrConstructor.kt | 3 +++ .../persistent/PersistentIrEnumEntry.kt | 3 +++ .../persistent/PersistentIrField.kt | 3 +++ .../persistent/PersistentIrFunctionCommon.kt | 3 +++ .../PersistentIrLocalDelegatedProperty.kt | 3 +++ .../persistent/PersistentIrPropertyCommon.kt | 3 +++ .../persistent/PersistentIrTypeAlias.kt | 3 +++ .../persistent/PersistentIrTypeParameter.kt | 3 +++ .../persistent/PersistentIrValueParameter.kt | 3 +++ .../PersistentIrGenerator.kt | 8 +++++++ .../persistent/PersistentIrDeclarationBase.kt | 10 +++++++-- .../persistent/PersistentIrBlockBody.kt | 5 +++++ .../persistent/PersistentIrExpressionBody.kt | 5 +++++ 15 files changed, 62 insertions(+), 18 deletions(-) diff --git a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrAnonymousInitializer.kt b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrAnonymousInitializer.kt index 7a64c9c2ac8..9335dcdc455 100644 --- a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrAnonymousInitializer.kt +++ b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrAnonymousInitializer.kt @@ -45,6 +45,9 @@ internal class PersistentIrAnonymousInitializer( override var originField: IrDeclarationOrigin = origin override var removedOn: Int = Int.MAX_VALUE override var annotationsField: List = emptyList() + private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++ + override fun hashCode(): Int = hashCodeValue + override fun equals(other: Any?): Boolean = (this === other) @ObsoleteDescriptorBasedAPI override val descriptor: ClassDescriptor diff --git a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrClass.kt b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrClass.kt index 1bf1581657a..a58a7794c60 100644 --- a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrClass.kt +++ b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrClass.kt @@ -5,23 +5,9 @@ package org.jetbrains.kotlin.ir.declarations.persistent -import java.util.ArrayList -import java.util.Collections -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.descriptors.DescriptorVisibility -import org.jetbrains.kotlin.descriptors.InlineClassRepresentation -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.SourceElement +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI -import org.jetbrains.kotlin.ir.declarations.IrAttributeContainer -import org.jetbrains.kotlin.ir.declarations.IrClass -import org.jetbrains.kotlin.ir.declarations.IrDeclaration -import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin -import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent -import org.jetbrains.kotlin.ir.declarations.IrTypeParameter -import org.jetbrains.kotlin.ir.declarations.IrValueParameter -import org.jetbrains.kotlin.ir.declarations.MetadataSource +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.ClassCarrier import org.jetbrains.kotlin.ir.expressions.IrConstructorCall @@ -32,6 +18,7 @@ import org.jetbrains.kotlin.ir.types.IrSimpleType import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.name.Name +import java.util.* // Auto-generated by compiler/ir/ir.tree.persistent/generator/src/org/jetbrains/kotlin/ir/persistentIrGenerator/Main.kt. DO NOT EDIT! @@ -72,6 +59,9 @@ internal class PersistentIrClass( override var originField: IrDeclarationOrigin = origin override var removedOn: Int = Int.MAX_VALUE override var annotationsField: List = emptyList() + private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++ + override fun hashCode(): Int = hashCodeValue + override fun equals(other: Any?): Boolean = (this === other) @ObsoleteDescriptorBasedAPI override val descriptor: ClassDescriptor diff --git a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrConstructor.kt b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrConstructor.kt index 20f108780c3..003c8aaa9db 100644 --- a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrConstructor.kt +++ b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrConstructor.kt @@ -63,6 +63,9 @@ internal class PersistentIrConstructor( override var originField: IrDeclarationOrigin = origin override var removedOn: Int = Int.MAX_VALUE override var annotationsField: List = emptyList() + private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++ + override fun hashCode(): Int = hashCodeValue + override fun equals(other: Any?): Boolean = (this === other) override var returnTypeFieldField: IrType = returnType diff --git a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrEnumEntry.kt b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrEnumEntry.kt index 5c3cdd2a885..fa5c57aba4a 100644 --- a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrEnumEntry.kt +++ b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrEnumEntry.kt @@ -48,6 +48,9 @@ internal class PersistentIrEnumEntry( override var originField: IrDeclarationOrigin = origin override var removedOn: Int = Int.MAX_VALUE override var annotationsField: List = emptyList() + private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++ + override fun hashCode(): Int = hashCodeValue + override fun equals(other: Any?): Boolean = (this === other) @ObsoleteDescriptorBasedAPI override val descriptor: ClassDescriptor diff --git a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrField.kt b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrField.kt index 015ff0489d0..8c003b5238d 100644 --- a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrField.kt +++ b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrField.kt @@ -55,6 +55,9 @@ internal class PersistentIrField( override var originField: IrDeclarationOrigin = origin override var removedOn: Int = Int.MAX_VALUE override var annotationsField: List = emptyList() + private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++ + override fun hashCode(): Int = hashCodeValue + override fun equals(other: Any?): Boolean = (this === other) @ObsoleteDescriptorBasedAPI override val descriptor: PropertyDescriptor diff --git a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunctionCommon.kt b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunctionCommon.kt index b307f8a0d88..3c8917a152c 100644 --- a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunctionCommon.kt +++ b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunctionCommon.kt @@ -61,6 +61,9 @@ internal abstract class PersistentIrFunctionCommon( override var originField: IrDeclarationOrigin = origin override var removedOn: Int = Int.MAX_VALUE override var annotationsField: List = emptyList() + private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++ + override fun hashCode(): Int = hashCodeValue + override fun equals(other: Any?): Boolean = (this === other) override var returnTypeFieldField: IrType = returnType diff --git a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrLocalDelegatedProperty.kt b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrLocalDelegatedProperty.kt index 3c8a50e0dad..9692247f5ce 100644 --- a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrLocalDelegatedProperty.kt +++ b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrLocalDelegatedProperty.kt @@ -53,6 +53,9 @@ internal class PersistentIrLocalDelegatedProperty( override var originField: IrDeclarationOrigin = origin override var removedOn: Int = Int.MAX_VALUE override var annotationsField: List = emptyList() + private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++ + override fun hashCode(): Int = hashCodeValue + override fun equals(other: Any?): Boolean = (this === other) @ObsoleteDescriptorBasedAPI override val descriptor: VariableDescriptorWithAccessors diff --git a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrPropertyCommon.kt b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrPropertyCommon.kt index 21ec0c951e0..e483830390c 100644 --- a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrPropertyCommon.kt +++ b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrPropertyCommon.kt @@ -54,6 +54,9 @@ internal abstract class PersistentIrPropertyCommon( override var originField: IrDeclarationOrigin = origin override var removedOn: Int = Int.MAX_VALUE override var annotationsField: List = emptyList() + private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++ + override fun hashCode(): Int = hashCodeValue + override fun equals(other: Any?): Boolean = (this === other) override var backingFieldField: IrField? = null diff --git a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeAlias.kt b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeAlias.kt index a5e692db1bd..0bfa98d2ce1 100644 --- a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeAlias.kt +++ b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeAlias.kt @@ -52,6 +52,9 @@ internal class PersistentIrTypeAlias( override var originField: IrDeclarationOrigin = origin override var removedOn: Int = Int.MAX_VALUE override var annotationsField: List = emptyList() + private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++ + override fun hashCode(): Int = hashCodeValue + override fun equals(other: Any?): Boolean = (this === other) @ObsoleteDescriptorBasedAPI override val descriptor: TypeAliasDescriptor diff --git a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeParameter.kt b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeParameter.kt index 846dcbc253f..fb06d4f9f95 100644 --- a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeParameter.kt +++ b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeParameter.kt @@ -50,6 +50,9 @@ internal class PersistentIrTypeParameter( override var originField: IrDeclarationOrigin = origin override var removedOn: Int = Int.MAX_VALUE override var annotationsField: List = emptyList() + private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++ + override fun hashCode(): Int = hashCodeValue + override fun equals(other: Any?): Boolean = (this === other) @ObsoleteDescriptorBasedAPI override val descriptor: TypeParameterDescriptor diff --git a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt index b210002a64b..25492e324c3 100644 --- a/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt +++ b/compiler/ir/ir.tree.persistent/gen/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt @@ -58,6 +58,9 @@ internal class PersistentIrValueParameter( override var originField: IrDeclarationOrigin = origin override var removedOn: Int = Int.MAX_VALUE override var annotationsField: List = emptyList() + private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++ + override fun hashCode(): Int = hashCodeValue + override fun equals(other: Any?): Boolean = (this === other) override var defaultValueField: IrExpressionBody? = null diff --git a/compiler/ir/ir.tree.persistent/generator/src/org/jetbrains/kotlin/ir/persistentIrGenerator/PersistentIrGenerator.kt b/compiler/ir/ir.tree.persistent/generator/src/org/jetbrains/kotlin/ir/persistentIrGenerator/PersistentIrGenerator.kt index 8f0fd51b0a4..80165e567d7 100644 --- a/compiler/ir/ir.tree.persistent/generator/src/org/jetbrains/kotlin/ir/persistentIrGenerator/PersistentIrGenerator.kt +++ b/compiler/ir/ir.tree.persistent/generator/src/org/jetbrains/kotlin/ir/persistentIrGenerator/PersistentIrGenerator.kt @@ -131,6 +131,13 @@ internal object PersistentIrGenerator { +"symbol.bind(this)" ) + // import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrDeclarationBase.Companion.hashCodeCounter + + val hashCodeValue = "private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++" + val hashCodeImplementation = "override fun hashCode(): Int = hashCodeValue" + val equalsImplementation = "override fun equals(other: Any?): Boolean = (this === other)" + val hashCodeAndEqualsImpl = +"$hashCodeValue\n$hashCodeImplementation\n$equalsImplementation" + // Proto types val protoValueParameterType = import("IrValueParameter", protoPackage, "ProtoIrValueParameter") @@ -222,6 +229,7 @@ internal object PersistentIrGenerator { originField, removedOn, annotationsField, + hashCodeAndEqualsImpl ) val typeParametersField = Field( diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrDeclarationBase.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrDeclarationBase.kt index 5b87ada0784..803e5c2831c 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrDeclarationBase.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrDeclarationBase.kt @@ -7,7 +7,10 @@ package org.jetbrains.kotlin.ir.declarations.persistent import org.jetbrains.kotlin.ir.IrElement -import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.IrDeclaration +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin +import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent +import org.jetbrains.kotlin.ir.declarations.IrSymbolOwner import org.jetbrains.kotlin.ir.declarations.persistent.carriers.BodyCarrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.DeclarationCarrier @@ -20,7 +23,6 @@ import org.jetbrains.kotlin.utils.addToStdlib.cast interface PersistentIrDeclarationBase : PersistentIrElementBase, IrDeclaration, DeclarationCarrier { var removedOn: Int - override var parentField: IrDeclarationParent? override var parentSymbolField: IrSymbol? @@ -68,6 +70,10 @@ interface PersistentIrDeclarationBase : PersistentIrElem factory.stageController.lazyLower(this) } } + + companion object { + var hashCodeCounter = 0 + } } interface PersistentIrElementBase : IrElement, Carrier { diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrBlockBody.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrBlockBody.kt index 15b82da46d9..746d76e0112 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrBlockBody.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrBlockBody.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.ir.expressions.persistent import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrBodyBase +import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrDeclarationBase import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.expressions.IrBlockBody @@ -44,4 +45,8 @@ internal class PersistentIrBlockBody( override val statements: MutableList get() = checkEnabled { statementsField } + + private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++ + override fun hashCode(): Int = hashCodeValue + override fun equals(other: Any?): Boolean = (this === other) } diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrExpressionBody.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrExpressionBody.kt index aed229f8ea3..c2bea677211 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrExpressionBody.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrExpressionBody.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.expressions.persistent import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrBodyBase +import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrDeclarationBase import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.expressions.IrExpression @@ -49,4 +50,8 @@ internal class PersistentIrExpressionBody private constructor( set(e) { checkEnabled { expressionField = e } } + + private val hashCodeValue: Int = PersistentIrDeclarationBase.hashCodeCounter++ + override fun hashCode(): Int = hashCodeValue + override fun equals(other: Any?): Boolean = (this === other) }