diff --git a/.idea/dictionaries/sergej_jaskiewicz.xml b/.idea/dictionaries/sergej_jaskiewicz.xml
new file mode 100644
index 00000000000..26916ae882d
--- /dev/null
+++ b/.idea/dictionaries/sergej_jaskiewicz.xml
@@ -0,0 +1,7 @@
+
+
+
+ unmuted
+
+
+
\ No newline at end of file
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt
index ad0de3ebedc..606780aed09 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.types.*
+import org.jetbrains.kotlin.ir.util.CustomKotlinLikeDumpStrategy.Modifiers
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.Variance
@@ -55,7 +56,8 @@ private inline fun dumpKotlinLike(
return sb.toString()
}
-class KotlinLikeDumpOptions(
+data class KotlinLikeDumpOptions(
+ val customDumpStrategy: CustomKotlinLikeDumpStrategy = CustomKotlinLikeDumpStrategy.Default,
val printRegionsPerFile: Boolean = false,
val printFileName: Boolean = true,
val printFilePath: Boolean = true,
@@ -66,6 +68,7 @@ class KotlinLikeDumpOptions(
val printFakeOverridesStrategy: FakeOverridesStrategy = FakeOverridesStrategy.ALL,
val bodyPrintingStrategy: BodyPrintingStrategy = BodyPrintingStrategy.PRINT_BODIES,
val printElseAsTrue: Boolean = false,
+ val printUnitReturnType: Boolean = false,
val stableOrder: Boolean = false,
/*
TODO add more options:
@@ -99,6 +102,49 @@ enum class BodyPrintingStrategy {
PRINT_BODIES,
}
+/**
+ * An interface for customizing the Kotlin-like dump.
+ * It allows to e.g. skip certain declarations or annotations from the dump, or print arbitrary text before and after each IR element.
+ */
+interface CustomKotlinLikeDumpStrategy {
+
+ fun shouldPrintAnnotation(annotation: IrConstructorCall, container: IrAnnotationContainer): Boolean = true
+
+ fun willPrintElement(element: IrElement, container: IrDeclaration?, printer: Printer): Boolean = true
+
+ fun didPrintElement(element: IrElement, container: IrDeclaration?, printer: Printer) {}
+
+ fun transformModifiersForDeclaration(declaration: IrDeclaration, modifiers: Modifiers): Modifiers = modifiers
+
+ data class Modifiers(
+ val visibility: DescriptorVisibility = DescriptorVisibilities.DEFAULT_VISIBILITY,
+ val isExpect: Boolean = false,
+ val modality: Modality? = null,
+ val isExternal: Boolean = false,
+ val isOverride: Boolean = false,
+ val isFakeOverride: Boolean = false,
+ val isLateinit: Boolean = false,
+ val isTailrec: Boolean = false,
+ val isSuspend: Boolean = false,
+ val isInner: Boolean = false,
+ val isInline: Boolean = false,
+ val isValue: Boolean = false,
+ val isData: Boolean = false,
+ val isCompanion: Boolean = false,
+ val isFunInterface: Boolean = false,
+ val classKind: ClassKind? = null,
+ val isInfix: Boolean = false,
+ val isOperator: Boolean = false,
+ val isVararg: Boolean = false,
+ val isCrossinline: Boolean = false,
+ val isNoinline: Boolean = false,
+ val isHidden: Boolean = false,
+ val isAssignable: Boolean = false,
+ )
+
+ object Default : CustomKotlinLikeDumpStrategy
+}
+
// TODO_ conventions:
// TODO support -- for unsupported nodes
// TODO no test -- for the cases with no test(s)
@@ -183,6 +229,15 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
return classTypes.sortedBy(IrType::render) + interfaceTypes.sortedBy(IrType::render)
}
+ private inline fun wrap(element: IrElement, container: IrDeclaration?, block: () -> Unit) {
+ if (!options.customDumpStrategy.willPrintElement(element, container, p)) return
+ try {
+ block()
+ } finally {
+ options.customDumpStrategy.didPrintElement(element, container, p)
+ }
+ }
+
override fun visitElement(element: IrElement, data: IrDeclaration?) {
val e = "/* ERROR: unsupported element type: " + element.javaClass.simpleName + " */"
if (element is IrExpression) {
@@ -194,13 +249,13 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
}
- override fun visitModuleFragment(declaration: IrModuleFragment, data: IrDeclaration?) {
+ override fun visitModuleFragment(declaration: IrModuleFragment, data: IrDeclaration?) = wrap(declaration, data) {
p.println("// MODULE: ${declaration.name.asString()}")
declaration.acceptChildren(this, null)
}
@OptIn(ObsoleteDescriptorBasedAPI::class)
- override fun visitFile(declaration: IrFile, data: IrDeclaration?) {
+ override fun visitFile(declaration: IrFile, data: IrDeclaration?) = wrap(declaration, data) {
if (options.printRegionsPerFile) p.println("//region block: ${declaration.name}")
if (options.printFileName) p.println("// FILE: ${declaration.name}")
@@ -217,7 +272,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
if (options.printRegionsPerFile) p.println("//endregion")
}
- override fun visitClass(declaration: IrClass, data: IrDeclaration?) {
+ override fun visitClass(declaration: IrClass, data: IrDeclaration?) = wrap(declaration, data) {
// TODO omit super class for enums, annotations?
// TODO omit Companion name for companion objects?
// TODO do we need to print info about `thisReceiver`?
@@ -228,26 +283,19 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
declaration.run {
printModifiersWithNoIndent(
- visibility,
- isExpect,
- modality,
- isExternal,
- isOverride = INAPPLICABLE,
- isFakeOverride = INAPPLICABLE,
- isLateinit = INAPPLICABLE,
- isTailrec = INAPPLICABLE,
- isVararg = INAPPLICABLE,
- isSuspend = INAPPLICABLE,
- isInner,
- isInline = false,
- isValue,
- isData,
- isCompanion,
- isFun,
- kind,
- isInfix = INAPPLICABLE,
- isOperator = INAPPLICABLE,
- isInterfaceMember = INAPPLICABLE
+ this,
+ Modifiers(
+ visibility = visibility,
+ isExpect = isExpect,
+ modality = modality,
+ isExternal = isExternal,
+ isInner = isInner,
+ isValue = isValue,
+ isData = isData,
+ isCompanion = isCompanion,
+ isFunInterface = isFun,
+ classKind = kind,
+ ),
)
}
@@ -305,62 +353,43 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
operator
data
*/
- private fun printModifiersWithNoIndent(
- visibility: DescriptorVisibility,
- isExpect: Boolean,
- modality: Modality?,
- isExternal: Boolean,
- isOverride: Boolean,
- isFakeOverride: Boolean,
- isLateinit: Boolean,
- isTailrec: Boolean,
- isVararg: Boolean,
- isSuspend: Boolean,
- isInner: Boolean,
- isInline: Boolean,
- isValue: Boolean,
- isData: Boolean,
- isCompanion: Boolean,
- isFunInterface: Boolean,
- classKind: ClassKind?,
- isInfix: Boolean,
- isOperator: Boolean,
- isInterfaceMember: Boolean,
- ) {
- printVisibility(visibility)
- p(isExpect, "expect") // TODO actual?
- val defaultModality = when {
- isInterfaceMember || (isOverride || isFakeOverride) && modality == Modality.OPEN ->
- Modality.OPEN
- classKind == ClassKind.INTERFACE ->
- Modality.ABSTRACT
- else ->
- Modality.FINAL
+ private fun printModifiersWithNoIndent(declaration: IrDeclaration, modifiers: Modifiers) =
+ options.customDumpStrategy.transformModifiersForDeclaration(declaration, modifiers).run {
+ val isInterfaceMember = declaration is IrOverridableMember && (declaration.parent as? IrClass)?.isInterface == true
+ printVisibility(visibility)
+ p(isExpect, "expect") // TODO actual?
+ val defaultModality = when {
+ isInterfaceMember || (isOverride || isFakeOverride) && modality == Modality.OPEN ->
+ Modality.OPEN
+ classKind == ClassKind.INTERFACE ->
+ Modality.ABSTRACT
+ else ->
+ Modality.FINAL
+ }
+ p(modality, defaultModality) { name.lowercase() }
+ p(isExternal, "external")
+ p(isFakeOverride, customModifier("fake"))
+ p(isOverride, "override")
+ p(isLateinit, "lateinit")
+ p(isTailrec, "tailrec")
+ printParameterModifiersWithNoIndent(
+ isVararg,
+ isCrossinline,
+ isNoinline,
+ isHidden,
+ isAssignable,
+ )
+ p(isSuspend, "suspend")
+ p(isInner, "inner")
+ p(isInline, "inline")
+ p(isValue, "value")
+ p(isData, "data")
+ p(isCompanion, "companion")
+ p(isFunInterface, "fun")
+ p(classKind) { name.lowercase().replace('_', ' ') + if (this == ClassKind.ENUM_ENTRY) " class" else "" }
+ p(isInfix, "infix")
+ p(isOperator, "operator")
}
- p(modality, defaultModality) { name.lowercase() }
- p(isExternal, "external")
- p(isFakeOverride, customModifier("fake"))
- p(isOverride, "override")
- p(isLateinit, "lateinit")
- p(isTailrec, "tailrec")
- printParameterModifiersWithNoIndent(
- isVararg,
- isCrossinline = INAPPLICABLE,
- isNoinline = INAPPLICABLE,
- isHidden = INAPPLICABLE,
- isAssignable = INAPPLICABLE
- )
- p(isSuspend, "suspend")
- p(isInner, "inner")
- p(isInline, "inline")
- p(isValue, "value")
- p(isData, "data")
- p(isCompanion, "companion")
- p(isFunInterface, "fun")
- p(classKind) { name.lowercase().replace('_', ' ') + if (this == ClassKind.ENUM_ENTRY) " class" else "" }
- p(isInfix, "infix")
- p(isOperator, "operator")
- }
private fun printVisibility(visibility: DescriptorVisibility) {
// TODO don't print visibility if it's not changed in override?
@@ -412,15 +441,18 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p(this, Variance.INVARIANT) { label }
}
+ private fun filterAnnotations(annotations: List, container: IrAnnotationContainer): List =
+ annotations.filter { options.customDumpStrategy.shouldPrintAnnotation(it, container) }
+
private fun IrAnnotationContainer.printAnnotationsWithNoIndent() {
- annotations.forEach {
+ filterAnnotations(annotations, this).forEach {
it.printAnAnnotationWithNoIndent()
p.printWithNoIndent(" ")
}
}
private fun IrAnnotationContainer.printlnAnnotations(prefix: String = "") {
- annotations.forEach {
+ filterAnnotations(annotations, this).forEach {
p.printIndent()
it.printAnAnnotationWithNoIndent(prefix)
p.printlnWithNoIndent()
@@ -513,7 +545,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
}
- override fun visitTypeAlias(declaration: IrTypeAlias, data: IrDeclaration?) {
+ override fun visitTypeAlias(declaration: IrTypeAlias, data: IrDeclaration?) = wrap(declaration, data) {
declaration.printlnAnnotations()
p.printIndent()
@@ -529,7 +561,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p.printlnWithNoIndent()
}
- override fun visitEnumEntry(declaration: IrEnumEntry, data: IrDeclaration?) {
+ override fun visitEnumEntry(declaration: IrEnumEntry, data: IrDeclaration?) = wrap(declaration, data) {
// TODO better rendering for enum entries
declaration.correspondingClass?.let { p.println() }
@@ -551,7 +583,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p.println()
}
- override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: IrDeclaration?) {
+ override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: IrDeclaration?) = wrap(declaration, data) {
// TODO no tests, looks like IrAnonymousInitializer has annotations accidentally.
declaration.printlnAnnotations()
p.printIndent()
@@ -569,6 +601,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
override fun visitSimpleFunction(declaration: IrSimpleFunction, data: IrDeclaration?) {
declaration.printSimpleFunction(
+ data,
"fun ",
declaration.name.asString(),
printTypeParametersAndExtensionReceiver = true,
@@ -577,7 +610,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p.printlnWithNoIndent()
}
- override fun visitConstructor(declaration: IrConstructor, data: IrDeclaration?) {
+ override fun visitConstructor(declaration: IrConstructor, data: IrDeclaration?) = wrap(declaration, data) {
// TODO name?
// TODO is it worth to merge code for IrConstructor and IrSimpleFunction?
// TODO dispatchReceiverParameter -- outer `this` for inner classes
@@ -588,26 +621,13 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
declaration.run {
printModifiersWithNoIndent(
- visibility,
- isExpect,
- modality = INAPPLICABLE_N,
- isExternal,
- isOverride = INAPPLICABLE,
- isFakeOverride = INAPPLICABLE,
- isLateinit = INAPPLICABLE,
- isTailrec = INAPPLICABLE,
- isVararg = INAPPLICABLE,
- isSuspend = INAPPLICABLE,
- isInner = INAPPLICABLE,
- isInline,
- isValue = INAPPLICABLE,
- isData = INAPPLICABLE,
- isCompanion = INAPPLICABLE,
- isFunInterface = INAPPLICABLE,
- classKind = INAPPLICABLE_N,
- isInfix = INAPPLICABLE,
- isOperator = INAPPLICABLE,
- isInterfaceMember = INAPPLICABLE
+ this,
+ Modifiers(
+ visibility = visibility,
+ isExpect = isExpect,
+ isExternal = isExternal,
+ isInline = isInline,
+ ),
)
}
@@ -628,6 +648,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
private fun IrSimpleFunction.printSimpleFunction(
+ data: IrDeclaration?,
keyword: String,
name: String,
printTypeParametersAndExtensionReceiver: Boolean,
@@ -645,64 +666,58 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
return
}
- printlnAnnotations()
- p.print("")
+ wrap(this, data) {
+ printlnAnnotations()
+ p.print("")
- run {
printModifiersWithNoIndent(
- visibility,
- isExpect,
- modality,
- isExternal,
- isOverride = overriddenSymbols.isNotEmpty(),
- isFakeOverride,
- isLateinit = INAPPLICABLE,
- isTailrec,
- isVararg = INAPPLICABLE,
- isSuspend,
- isInner = INAPPLICABLE,
- isInline,
- isValue = INAPPLICABLE,
- isData = INAPPLICABLE,
- isCompanion = INAPPLICABLE,
- isFunInterface = INAPPLICABLE,
- classKind = INAPPLICABLE_N,
- isInfix,
- isOperator,
- isInterfaceMember = (this@printSimpleFunction.parent as? IrClass)?.isInterface == true
+ this,
+ Modifiers(
+ visibility = visibility,
+ isExpect = isExpect,
+ modality = modality,
+ isExternal = isExternal,
+ isOverride = overriddenSymbols.isNotEmpty(),
+ isFakeOverride = isFakeOverride,
+ isLateinit = isTailrec,
+ isSuspend = isSuspend,
+ isInline = isInline,
+ isInfix = isInfix,
+ isOperator = isOperator,
+ ),
)
- }
- p.printWithNoIndent(keyword)
+ p.printWithNoIndent(keyword)
- if (printTypeParametersAndExtensionReceiver) printTypeParametersWithNoIndent(postfix = " ")
+ if (printTypeParametersAndExtensionReceiver) printTypeParametersWithNoIndent(postfix = " ")
- if (printTypeParametersAndExtensionReceiver) {
- extensionReceiverParameter?.printExtensionReceiverParameter()
- }
-
- p.printWithNoIndent(name)
-
- if (printSignatureAndBody) {
- printValueParametersWithNoIndent()
-
- if (!returnType.isUnit()) {
- p.printWithNoIndent(": ")
- returnType.printTypeWithNoIndent()
+ if (printTypeParametersAndExtensionReceiver) {
+ extensionReceiverParameter?.printExtensionReceiverParameter()
}
- printWhereClauseIfNeededWithNoIndent()
- body?.let {
- if (options.bodyPrintingStrategy == BodyPrintingStrategy.PRINT_BODIES) {
- p.printWithNoIndent(" ")
+ p.printWithNoIndent(name)
+
+ if (printSignatureAndBody) {
+ printValueParametersWithNoIndent()
+
+ if (options.printUnitReturnType || !returnType.isUnit()) {
+ p.printWithNoIndent(": ")
+ returnType.printTypeWithNoIndent()
}
- it.accept(this@KotlinLikeDumper, null)
+ printWhereClauseIfNeededWithNoIndent()
+
+ body?.let {
+ if (options.bodyPrintingStrategy == BodyPrintingStrategy.PRINT_BODIES) {
+ p.printWithNoIndent(" ")
+ }
+ it.accept(this@KotlinLikeDumper, null)
+ }
+
}
- }
-
- if (!printSignatureAndBody || body == null || options.bodyPrintingStrategy != BodyPrintingStrategy.PRINT_BODIES) {
- p.printlnWithNoIndent()
+ if (!printSignatureAndBody || body == null || options.bodyPrintingStrategy != BodyPrintingStrategy.PRINT_BODIES) {
+ p.printlnWithNoIndent()
+ }
}
}
@@ -747,17 +762,17 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
}
- override fun visitTypeParameter(declaration: IrTypeParameter, data: IrDeclaration?) {
+ override fun visitTypeParameter(declaration: IrTypeParameter, data: IrDeclaration?) = wrap(declaration, data) {
declaration.printATypeParameterWithNoIndent()
if (declaration.superTypes.size > 1) declaration.printWhereClauseTypesWithNoIndent(true)
}
- override fun visitValueParameter(declaration: IrValueParameter, data: IrDeclaration?) {
+ override fun visitValueParameter(declaration: IrValueParameter, data: IrDeclaration?) = wrap(declaration, data) {
// TODO index?
declaration.printAValueParameterWithNoIndent(data)
}
- override fun visitProperty(declaration: IrProperty, data: IrDeclaration?) {
+ override fun visitProperty(declaration: IrProperty, data: IrDeclaration?) = wrap(declaration, data) {
if (options.printFakeOverridesStrategy == FakeOverridesStrategy.NONE && declaration.isFakeOverride) return
declaration.printlnAnnotations()
@@ -767,29 +782,21 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
// modifiers that could be different between accessors and property have a comment
declaration.run {
printModifiersWithNoIndent(
- // accessors by default have same visibility, but the can define own value
- visibility,
- isExpect,
- modality,
- isExternal,
- // couldn't be different for getter, possible for set, but it's invalid kotlin
- isOverride = getter?.overriddenSymbols?.isNotEmpty() == true,
- isFakeOverride,
- isLateinit,
- isTailrec = INAPPLICABLE,
- isVararg = INAPPLICABLE,
- isSuspend = getter?.isSuspend == true,
- isInner = INAPPLICABLE,
- // could be used on property if all accessors have same state, otherwise must be defined on each accessor
- isInline = false,
- isValue = INAPPLICABLE,
- isData = INAPPLICABLE,
- isCompanion = INAPPLICABLE,
- isFunInterface = INAPPLICABLE,
- classKind = INAPPLICABLE_N,
- isInfix = INAPPLICABLE,
- isOperator = INAPPLICABLE,
- isInterfaceMember = (declaration.parent as? IrClass)?.isInterface == true
+ this,
+ Modifiers(
+ // accessors by default have same visibility, but the can define own value
+ visibility = visibility,
+ isExpect = isExpect,
+ modality = modality,
+ isExternal = isExternal,
+ // couldn't be different for getter, possible for set, but it's invalid kotlin
+ isOverride = getter?.overriddenSymbols?.isNotEmpty() == true,
+ isFakeOverride = isFakeOverride,
+ isLateinit = isLateinit,
+ isSuspend = getter?.isSuspend == true,
+ // could be used on property if all accessors have same state, otherwise must be defined on each accessor
+ isInline = false,
+ ),
)
}
@@ -852,44 +859,35 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
// TODO generate better name for set parameter ``?
- declaration.getter?.printAccessor("get")
- declaration.setter?.printAccessor("set")
+ declaration.getter?.printAccessor("get", declaration)
+ declaration.setter?.printAccessor("set", declaration)
p.popIndent()
p.printlnWithNoIndent()
}
- private fun IrSimpleFunction.printAccessor(s: String) {
+ private fun IrSimpleFunction.printAccessor(s: String, property: IrDeclaration) {
val isDefaultAccessor = origin != IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR
- printSimpleFunction("", s, printTypeParametersAndExtensionReceiver = false, printSignatureAndBody = isDefaultAccessor)
+ printSimpleFunction(
+ property,
+ keyword = "",
+ name = s,
+ printTypeParametersAndExtensionReceiver = false,
+ printSignatureAndBody = isDefaultAccessor,
+ )
}
- override fun visitField(declaration: IrField, data: IrDeclaration?) {
+ override fun visitField(declaration: IrField, data: IrDeclaration?) = wrap(declaration, data) {
declaration.printlnAnnotations()
p.printIndent()
declaration.run {
printModifiersWithNoIndent(
- visibility,
- isExpect = INAPPLICABLE,
- modality = INAPPLICABLE_N,
- isExternal,
- isOverride = INAPPLICABLE,
- isFakeOverride = INAPPLICABLE,
- isLateinit = INAPPLICABLE,
- isTailrec = INAPPLICABLE,
- isVararg = INAPPLICABLE,
- isSuspend = INAPPLICABLE,
- isInner = INAPPLICABLE,
- isInline = INAPPLICABLE,
- isValue = INAPPLICABLE,
- isData = INAPPLICABLE,
- isCompanion = INAPPLICABLE,
- isFunInterface = INAPPLICABLE,
- classKind = INAPPLICABLE_N,
- isInfix = INAPPLICABLE,
- isOperator = INAPPLICABLE,
- isInterfaceMember = (declaration.parent as? IrClass)?.isInterface == true
+ this,
+ Modifiers(
+ visibility = visibility,
+ isExternal = isExternal,
+ ),
)
}
@@ -919,7 +917,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p.printlnWithNoIndent()
}
- override fun visitVariable(declaration: IrVariable, data: IrDeclaration?) {
+ override fun visitVariable(declaration: IrVariable, data: IrDeclaration?) = wrap(declaration, data) {
declaration.printlnAnnotations()
p.printIndent()
@@ -933,7 +931,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
}
- override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, data: IrDeclaration?) {
+ override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, data: IrDeclaration?) = wrap(declaration, data) {
declaration.printlnAnnotations()
p.printIndent()
@@ -946,8 +944,8 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
declaration.delegate.accept(this, declaration)
p.printlnWithNoIndent()
- declaration.getter.printAccessor("get")
- declaration.setter?.printAccessor("set")
+ declaration.getter.printAccessor("get", declaration)
+ declaration.setter?.printAccessor("set", declaration)
p.popIndent()
p.printlnWithNoIndent()
@@ -961,7 +959,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
type.printTypeWithNoIndent()
}
- private fun printBody(body: Body, data: IrDeclaration?, actuallyPrint: () -> Unit) {
+ private fun printBody(body: Body, data: IrDeclaration?, actuallyPrint: () -> Unit) = wrap(body, data) {
when (options.bodyPrintingStrategy) {
BodyPrintingStrategy.NO_BODIES -> {}
BodyPrintingStrategy.PRINT_ONLY_LOCAL_CLASSES_AND_FUNCTIONS -> body.acceptChildren(
@@ -1006,11 +1004,11 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
}
- override fun visitComposite(expression: IrComposite, data: IrDeclaration?) {
+ override fun visitComposite(expression: IrComposite, data: IrDeclaration?) = wrap(expression, data) {
expression.printStatementContainer("// COMPOSITE {", "// }", data, withIndentation = false)
}
- override fun visitBlock(expression: IrBlock, data: IrDeclaration?) {
+ override fun visitBlock(expression: IrBlock, data: IrDeclaration?) = wrap(expression, data) {
// TODO special blocks using `origin`
// TODO inlineFunctionSymbol for IrReturnableBlock
// TODO no tests for IrReturnableBlock?
@@ -1050,7 +1048,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
}
- override fun visitCall(expression: IrCall, data: IrDeclaration?) {
+ override fun visitCall(expression: IrCall, data: IrDeclaration?) = wrap(expression, data) {
// TODO process specially builtin symbols
expression.printMemberAccessExpressionWithNoIndent(
expression.symbol.safeName,
@@ -1061,7 +1059,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
)
}
- override fun visitConstructorCall(expression: IrConstructorCall, data: IrDeclaration?) {
+ override fun visitConstructorCall(expression: IrConstructorCall, data: IrDeclaration?) = wrap(expression, data) {
expression.printMemberAccessExpressionWithNoIndent(
expression.symbol.safeParentClassName,
expression.symbol.safeValueParameters,
@@ -1164,12 +1162,12 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
if (wrapArguments) p.printWithNoIndent("*/")
}
- override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: IrDeclaration?) {
+ override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: IrDeclaration?) = wrap(expression, data) {
// TODO skip call to Any?
expression.printConstructorCallWithNoIndent(data)
}
- override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: IrDeclaration?) {
+ override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: IrDeclaration?) = wrap(expression, data) {
// TODO skip call to Enum?
expression.printConstructorCallWithNoIndent(data)
}
@@ -1202,7 +1200,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
)
}
- override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: IrDeclaration?) {
+ override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: IrDeclaration?) = wrap(expression, data) {
// TODO assert that `expression.classSymbol.owner == data.parentAsClass
// TODO better rendering
p.printlnWithNoIndent("/* () */")
@@ -1216,6 +1214,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
// TODO don't print visibility?
p.withholdIndentOnce()
expression.function.printSimpleFunction(
+ data,
"fun ",
expression.function.name.asString(),
printTypeParametersAndExtensionReceiver = true,
@@ -1223,11 +1222,11 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
)
}
- override fun visitGetField(expression: IrGetField, data: IrDeclaration?) {
+ override fun visitGetField(expression: IrGetField, data: IrDeclaration?) = wrap(expression, data) {
expression.printFieldAccess(data)
}
- override fun visitSetField(expression: IrSetField, data: IrDeclaration?) {
+ override fun visitSetField(expression: IrSetField, data: IrDeclaration?) = wrap(expression, data) {
expression.printFieldAccess(data)
p.printWithNoIndent(" = ")
expression.value.accept(this, data)
@@ -1252,27 +1251,27 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p.printWithNoIndent("#" + symbol.safeName)
}
- override fun visitGetValue(expression: IrGetValue, data: IrDeclaration?) {
+ override fun visitGetValue(expression: IrGetValue, data: IrDeclaration?) = wrap(expression, data) {
p.printWithNoIndent(expression.symbol.safeName)
}
- override fun visitSetValue(expression: IrSetValue, data: IrDeclaration?) {
+ override fun visitSetValue(expression: IrSetValue, data: IrDeclaration?) = wrap(expression, data) {
p.printWithNoIndent(expression.symbol.safeName + " = ")
expression.value.accept(this, data)
}
- override fun visitGetObjectValue(expression: IrGetObjectValue, data: IrDeclaration?) {
+ override fun visitGetObjectValue(expression: IrGetObjectValue, data: IrDeclaration?) = wrap(expression, data) {
// TODO what if symbol is unbound?
expression.symbol.defaultType.printTypeWithNoIndent()
}
- override fun visitGetEnumValue(expression: IrGetEnumValue, data: IrDeclaration?) {
+ override fun visitGetEnumValue(expression: IrGetEnumValue, data: IrDeclaration?) = wrap(expression, data) {
p.printWithNoIndent(expression.symbol.safeParentClassName)
p.printWithNoIndent(".")
p.printWithNoIndent(expression.symbol.safeName)
}
- override fun visitRawFunctionReference(expression: IrRawFunctionReference, data: IrDeclaration?) {
+ override fun visitRawFunctionReference(expression: IrRawFunctionReference, data: IrDeclaration?) = wrap(expression, data) {
// TODO support
// TODO no test
// it's not valid kotlin
@@ -1280,7 +1279,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
super.visitRawFunctionReference(expression, data)
}
- override fun visitReturn(expression: IrReturn, data: IrDeclaration?) {
+ override fun visitReturn(expression: IrReturn, data: IrDeclaration?) = wrap(expression, data) {
// TODO label
// TODO optionally don't print Unit when return type of returnTargetSymbol is Unit
p.printWithNoIndent("return ")
@@ -1292,7 +1291,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
expression.value.accept(this, data)
}
- override fun visitStringConcatenation(expression: IrStringConcatenation, data: IrDeclaration?) {
+ override fun visitStringConcatenation(expression: IrStringConcatenation, data: IrDeclaration?) = wrap(expression, data) {
// TODO use triple quotes when possible?
// TODO optionally each argument at a separate line, another option add a wrapping
expression.arguments.forEachIndexed { i, e ->
@@ -1301,7 +1300,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
}
- override fun visitConst(expression: IrConst<*>, data: IrDeclaration?) {
+ override fun visitConst(expression: IrConst<*>, data: IrDeclaration?) = wrap(expression, data) {
val kind = expression.kind
val (prefix, postfix) = when (kind) {
@@ -1330,7 +1329,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p.printWithNoIndent(prefix, safeValue, postfix)
}
- override fun visitVararg(expression: IrVararg, data: IrDeclaration?) {
+ override fun visitVararg(expression: IrVararg, data: IrDeclaration?) = wrap(expression, data) {
// TODO better rendering?
// TODO varargElementType
// it's not valid kotlin
@@ -1342,12 +1341,12 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p.printWithNoIndent("]")
}
- override fun visitSpreadElement(spread: IrSpreadElement, data: IrDeclaration?) {
+ override fun visitSpreadElement(spread: IrSpreadElement, data: IrDeclaration?) = wrap(spread, data) {
p.printWithNoIndent("*")
spread.expression.accept(this, data)
}
- override fun visitTypeOperator(expression: IrTypeOperatorCall, data: IrDeclaration?) {
+ override fun visitTypeOperator(expression: IrTypeOperatorCall, data: IrDeclaration?) = wrap(expression, data) {
val (operator, after) = when (expression.operator) {
IrTypeOperator.CAST -> "as" to ""
IrTypeOperator.IMPLICIT_CAST -> "/*as" to " */"
@@ -1369,7 +1368,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
- override fun visitWhen(expression: IrWhen, data: IrDeclaration?) {
+ override fun visitWhen(expression: IrWhen, data: IrDeclaration?) = wrap(expression, data) {
// TODO print if when possible?
p.printlnWithNoIndent("when {")
p.pushIndent()
@@ -1380,7 +1379,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p.print("}")
}
- override fun visitBranch(branch: IrBranch, data: IrDeclaration?) {
+ override fun visitBranch(branch: IrBranch, data: IrDeclaration?) = wrap(branch, data) {
p.printIndent()
branch.condition.accept(this, data)
p.printWithNoIndent(" -> ")
@@ -1388,7 +1387,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p.println()
}
- override fun visitElseBranch(branch: IrElseBranch, data: IrDeclaration?) {
+ override fun visitElseBranch(branch: IrElseBranch, data: IrDeclaration?) = wrap(branch, data) {
p.printIndent()
if ((branch.condition as? IrConst<*>)?.value == true) {
p.printWithNoIndent(if (options.printElseAsTrue) "true" else "else")
@@ -1408,7 +1407,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
}
- override fun visitWhileLoop(loop: IrWhileLoop, data: IrDeclaration?) {
+ override fun visitWhileLoop(loop: IrWhileLoop, data: IrDeclaration?) = wrap(loop, data) {
loop.printLabel()
p.printWithNoIndent("while (")
@@ -1418,7 +1417,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
loop.body?.accept(this, data)
}
- override fun visitDoWhileLoop(loop: IrDoWhileLoop, data: IrDeclaration?) {
+ override fun visitDoWhileLoop(loop: IrDoWhileLoop, data: IrDeclaration?) = wrap(loop, data) {
loop.printLabel()
p.printWithNoIndent("do")
@@ -1431,7 +1430,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
- override fun visitBreakContinue(jump: IrBreakContinue, data: IrDeclaration?) {
+ override fun visitBreakContinue(jump: IrBreakContinue, data: IrDeclaration?) = wrap(jump, data) {
// TODO render loop reference
p.printWithNoIndent(if (jump is IrContinue) "continue" else "break")
jump.label?.let {
@@ -1440,7 +1439,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
}
- override fun visitTry(aTry: IrTry, data: IrDeclaration?) {
+ override fun visitTry(aTry: IrTry, data: IrDeclaration?) = wrap(aTry, data) {
p.printWithNoIndent("try ")
aTry.tryResult.accept(this, data)
p.printlnWithNoIndent()
@@ -1453,7 +1452,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
}
- override fun visitCatch(aCatch: IrCatch, data: IrDeclaration?) {
+ override fun visitCatch(aCatch: IrCatch, data: IrDeclaration?) = wrap(aCatch, data) {
p.print("catch (")
aCatch.catchParameter.run {
p.printWithNoIndent(name.asString())
@@ -1465,31 +1464,32 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p.printlnWithNoIndent()
}
- override fun visitGetClass(expression: IrGetClass, data: IrDeclaration?) {
+ override fun visitGetClass(expression: IrGetClass, data: IrDeclaration?) = wrap(expression, data) {
expression.argument.accept(this, data)
p.printWithNoIndent("::class")
}
- override fun visitClassReference(expression: IrClassReference, data: IrDeclaration?) {
+ override fun visitClassReference(expression: IrClassReference, data: IrDeclaration?) = wrap(expression, data) {
// TODO use classType
p.printWithNoIndent(expression.symbol.safeName)
p.printWithNoIndent("::class")
}
- override fun visitFunctionReference(expression: IrFunctionReference, data: IrDeclaration?) {
+ override fun visitFunctionReference(expression: IrFunctionReference, data: IrDeclaration?) = wrap(expression, data) {
// TODO reflectionTarget
expression.printCallableReferenceWithNoIndent(expression.symbol.safeValueParameters, data)
}
- override fun visitPropertyReference(expression: IrPropertyReference, data: IrDeclaration?) {
+ override fun visitPropertyReference(expression: IrPropertyReference, data: IrDeclaration?) = wrap(expression, data) {
// TODO do we need additional fields (field, getter, setter)?
expression.printCallableReferenceWithNoIndent(emptyList(), data)
}
- override fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference, data: IrDeclaration?) {
- // TODO do we need additional fields (delegate, getter, setter)?
- expression.printCallableReferenceWithNoIndent(emptyList(), data)
- }
+ override fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference, data: IrDeclaration?) =
+ wrap(expression, data) {
+ // TODO do we need additional fields (delegate, getter, setter)?
+ expression.printCallableReferenceWithNoIndent(emptyList(), data)
+ }
private fun IrCallableReference<*>.printCallableReferenceWithNoIndent(valueParameters: List, data: IrDeclaration?) {
// TODO where from to get type arguments for a class?
@@ -1512,7 +1512,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
)
}
- override fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression, data: IrDeclaration?) {
+ override fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression, data: IrDeclaration?) = wrap(expression, data) {
// TODO marker to show that it's dynamic call
val s = when (val op = expression.operator) {
IrDynamicOperator.ARRAY_ACCESS -> "[" to "]"
@@ -1547,23 +1547,23 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p.printWithNoIndent(s.second)
}
- override fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression, data: IrDeclaration?) {
+ override fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression, data: IrDeclaration?) = wrap(expression, data) {
expression.receiver.accept(this, data)
p.printWithNoIndent(".")
p.printWithNoIndent(expression.memberName)
}
- override fun visitErrorDeclaration(declaration: IrErrorDeclaration, data: IrDeclaration?) {
+ override fun visitErrorDeclaration(declaration: IrErrorDeclaration, data: IrDeclaration?) = wrap(declaration, data) {
// TODO declaration.printlnAnnotations()
p.println("/* ErrorDeclaration */")
}
- override fun visitErrorExpression(expression: IrErrorExpression, data: IrDeclaration?) {
+ override fun visitErrorExpression(expression: IrErrorExpression, data: IrDeclaration?) = wrap(expression, data) {
// TODO description
p.printWithNoIndent("error(\"\") /* ErrorExpression */")
}
- override fun visitErrorCallExpression(expression: IrErrorCallExpression, data: IrDeclaration?) {
+ override fun visitErrorCallExpression(expression: IrErrorCallExpression, data: IrDeclaration?) = wrap(expression, data) {
// TODO description
// TODO better rendering
p.printWithNoIndent("error(\"\") /* ErrorCallExpression */")
@@ -1595,8 +1595,6 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
private companion object {
- private const val INAPPLICABLE = false
- private val INAPPLICABLE_N = null
private const val CUSTOM_MODIFIER_START = "/* "
private const val CUSTOM_MODIFIER_END = " */"
}
diff --git a/compiler/testData/ir/irText/classes/47424.sig.kt.txt b/compiler/testData/ir/irText/classes/47424.sig.kt.txt
new file mode 100644
index 00000000000..524d565fc76
--- /dev/null
+++ b/compiler/testData/ir/irText/classes/47424.sig.kt.txt
@@ -0,0 +1,87 @@
+package com.example
+
+// CHECK:
+// Mangled name: com.example.Aa
+// Public signature: com.example/Aa|null[0]
+interface Aa {
+
+}
+
+// CHECK:
+// Mangled name: com.example.Ab
+// Public signature: com.example/Ab|null[0]
+interface Ab> : Aa {
+
+}
+
+// CHECK:
+// Mangled name: com.example.Ba
+// Public signature: com.example/Ba|null[0]
+interface Ba {
+
+}
+
+// CHECK:
+// Mangled name: com.example.Bb
+// Public signature: com.example/Bb|null[0]
+interface Bb> : Ab, Ba {
+
+}
+
+// CHECK:
+// Mangled name: com.example.C
+// Public signature: com.example/C|null[0]
+interface C : Ca, Cb {
+
+ // CHECK:
+ // Mangled name: com.example.C{}b
+ // Public signature: com.example/C.b|772347207915745207[0]
+ abstract /* fake */ override val b: Bb<*>
+ // CHECK JVM_IR:
+ // Mangled name: com.example.C#(){}com.example.Bb<*>
+ // Public signature: com.example/C.b.|8945515346267380674[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: com.example.C#(){}
+ // Public signature: com.example/C.b.|812004636995167743[0]
+ abstract /* fake */ override get(): Bb<*>
+
+}
+
+// CHECK:
+// Mangled name: com.example.Ca
+// Public signature: com.example/Ca|null[0]
+interface Ca {
+
+ // CHECK:
+ // Mangled name: com.example.Ca{}b
+ // Public signature: com.example/Ca.b|772347207915745207[0]
+ abstract val b: Ba
+ // CHECK JVM_IR:
+ // Mangled name: com.example.Ca#(){}com.example.Ba
+ // Public signature: com.example/Ca.b.|-5371331002991031414[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: com.example.Ca#(){}
+ // Public signature: com.example/Ca.b.|812004636995167743[0]
+ abstract get
+
+}
+
+// CHECK:
+// Mangled name: com.example.Cb
+// Public signature: com.example/Cb|null[0]
+interface Cb {
+
+ // CHECK:
+ // Mangled name: com.example.Cb{}b
+ // Public signature: com.example/Cb.b|772347207915745207[0]
+ abstract val b: Bb<*>
+ // CHECK JVM_IR:
+ // Mangled name: com.example.Cb#(){}com.example.Bb<*>
+ // Public signature: com.example/Cb.b.|8945515346267380674[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: com.example.Cb#(){}
+ // Public signature: com.example/Cb.b.|812004636995167743[0]
+ abstract get
+
+}
+
diff --git a/compiler/testData/ir/irText/classes/abstractMembers.sig.kt.txt b/compiler/testData/ir/irText/classes/abstractMembers.sig.kt.txt
new file mode 100644
index 00000000000..6b1d9a00c91
--- /dev/null
+++ b/compiler/testData/ir/irText/classes/abstractMembers.sig.kt.txt
@@ -0,0 +1,84 @@
+// CHECK:
+// Mangled name: AbstractClass
+// Public signature: /AbstractClass|null[0]
+abstract class AbstractClass {
+ // CHECK:
+ // Mangled name: AbstractClass#(){}
+ // Public signature: /AbstractClass.|-5645683436151566731[0]
+ constructor() /* primary */
+
+ // CHECK:
+ // Mangled name: AbstractClass#abstractFun(){}
+ // Public signature: /AbstractClass.abstractFun|-8137574360252002020[0]
+ abstract fun abstractFun(): Unit
+
+ // CHECK:
+ // Mangled name: AbstractClass{}abstractVal
+ // Public signature: /AbstractClass.abstractVal|2000751617811374017[0]
+ abstract val abstractVal: Int
+ // CHECK JVM_IR:
+ // Mangled name: AbstractClass#(){}kotlin.Int
+ // Public signature: /AbstractClass.abstractVal.|1560246296064696993[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: AbstractClass#(){}
+ // Public signature: /AbstractClass.abstractVal.|-836793625462255519[0]
+ abstract get
+
+ // CHECK:
+ // Mangled name: AbstractClass{}abstractVar
+ // Public signature: /AbstractClass.abstractVar|-2520811489168320452[0]
+ abstract var abstractVar: Int
+ // CHECK JVM_IR:
+ // Mangled name: AbstractClass#(){}kotlin.Int
+ // Public signature: /AbstractClass.abstractVar.|-3718567610021314347[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: AbstractClass#(){}
+ // Public signature: /AbstractClass.abstractVar.|7559126596100066971[0]
+ abstract get
+ // CHECK:
+ // Mangled name: AbstractClass#(kotlin.Int){}
+ // Public signature: /AbstractClass.abstractVar.|-250114380965539035[0]
+ abstract set
+
+}
+
+// CHECK:
+// Mangled name: Interface
+// Public signature: /Interface|null[0]
+interface Interface {
+
+ // CHECK:
+ // Mangled name: Interface#abstractFun(){}
+ // Public signature: /Interface.abstractFun|-8137574360252002020[0]
+ abstract fun abstractFun(): Unit
+
+ // CHECK:
+ // Mangled name: Interface{}abstractVal
+ // Public signature: /Interface.abstractVal|2000751617811374017[0]
+ abstract val abstractVal: Int
+ // CHECK JVM_IR:
+ // Mangled name: Interface#(){}kotlin.Int
+ // Public signature: /Interface.abstractVal.|1560246296064696993[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Interface#(){}
+ // Public signature: /Interface.abstractVal.|-836793625462255519[0]
+ abstract get
+
+ // CHECK:
+ // Mangled name: Interface{}abstractVar
+ // Public signature: /Interface.abstractVar|-2520811489168320452[0]
+ abstract var abstractVar: Int
+ // CHECK JVM_IR:
+ // Mangled name: Interface#(){}kotlin.Int
+ // Public signature: /Interface.abstractVar.|-3718567610021314347[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Interface#(){}
+ // Public signature: /Interface.abstractVar.|7559126596100066971[0]
+ abstract get
+ // CHECK:
+ // Mangled name: Interface#(kotlin.Int){}
+ // Public signature: /Interface.abstractVar.|-250114380965539035[0]
+ abstract set
+
+}
+
diff --git a/compiler/testData/ir/irText/classes/annotationClasses.sig.kt.txt b/compiler/testData/ir/irText/classes/annotationClasses.sig.kt.txt
new file mode 100644
index 00000000000..6c7a166f73c
--- /dev/null
+++ b/compiler/testData/ir/irText/classes/annotationClasses.sig.kt.txt
@@ -0,0 +1,92 @@
+// CHECK:
+// Mangled name: Test1
+// Public signature: /Test1|null[0]
+open annotation class Test1 : Annotation {
+ // CHECK:
+ // Mangled name: Test1{}x
+ // Public signature: /Test1.x|-8060530855978347579[0]
+ val x: Int
+ // CHECK JVM_IR:
+ // Mangled name: Test1#(){}kotlin.Int
+ // Public signature: /Test1.x.|4966956098150895696[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#(){}
+ // Public signature: /Test1.x.|1482705010654679335[0]
+ get
+
+ // CHECK:
+ // Mangled name: Test1#(kotlin.Int){}
+ // Public signature: /Test1.|-5182794243525578284[0]
+ constructor(x: Int) /* primary */
+
+}
+
+// CHECK:
+// Mangled name: Test2
+// Public signature: /Test2|null[0]
+open annotation class Test2 : Annotation {
+ // CHECK:
+ // Mangled name: Test2{}x
+ // Public signature: /Test2.x|-8060530855978347579[0]
+ val x: Int
+ // CHECK JVM_IR:
+ // Mangled name: Test2#(){}kotlin.Int
+ // Public signature: /Test2.x.|4966956098150895696[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test2#(){}
+ // Public signature: /Test2.x.|1482705010654679335[0]
+ get
+
+ // CHECK:
+ // Mangled name: Test2#(kotlin.Int){}
+ // Public signature: /Test2.|-5182794243525578284[0]
+ constructor(x: Int) /* primary */
+
+}
+
+// CHECK:
+// Mangled name: Test3
+// Public signature: /Test3|null[0]
+open annotation class Test3 : Annotation {
+ // CHECK:
+ // Mangled name: Test3{}x
+ // Public signature: /Test3.x|-8060530855978347579[0]
+ val x: Test1
+ // CHECK JVM_IR:
+ // Mangled name: Test3#(){}Test1
+ // Public signature: /Test3.x.|-2232578314937133118[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test3#(){}
+ // Public signature: /Test3.x.|1482705010654679335[0]
+ get
+
+ // CHECK:
+ // Mangled name: Test3#(Test1){}
+ // Public signature: /Test3.|-2039475164068253223[0]
+ constructor(x: Test1) /* primary */
+
+}
+
+// CHECK:
+// Mangled name: Test4
+// Public signature: /Test4|null[0]
+open annotation class Test4 : Annotation {
+ // CHECK:
+ // Mangled name: Test4{}xs
+ // Public signature: /Test4.xs|1063330853857063704[0]
+ val xs: IntArray
+ // CHECK JVM_IR:
+ // Mangled name: Test4#(){}kotlin.IntArray
+ // Public signature: /Test4.xs.|5887559004820637749[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test4#(){}
+ // Public signature: /Test4.xs.|-6958094100501701183[0]
+ get
+
+ // CHECK:
+ // Mangled name: Test4#(kotlin.IntArray...){}
+ // Public signature: /Test4.|3304157197881351514[0]
+ constructor(vararg xs: Int) /* primary */
+
+}
+
diff --git a/compiler/testData/ir/irText/classes/argumentReorderingInDelegatingConstructorCall.sig.kt.txt b/compiler/testData/ir/irText/classes/argumentReorderingInDelegatingConstructorCall.sig.kt.txt
new file mode 100644
index 00000000000..9c64a28ccc4
--- /dev/null
+++ b/compiler/testData/ir/irText/classes/argumentReorderingInDelegatingConstructorCall.sig.kt.txt
@@ -0,0 +1,109 @@
+// CHECK:
+// Mangled name: Base
+// Public signature: /Base|null[0]
+open class Base {
+ // CHECK:
+ // Mangled name: Base{}x
+ // Public signature: /Base.x|-8060530855978347579[0]
+ val x: Int
+ // CHECK JVM_IR:
+ // Mangled name: Base#(){}kotlin.Int
+ // Public signature: /Base.x.|4966956098150895696[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Base#(){}
+ // Public signature: /Base.x.|1482705010654679335[0]
+ get
+
+ // CHECK:
+ // Mangled name: Base{}y
+ // Public signature: /Base.y|3625903257357557171[0]
+ val y: Int
+ // CHECK JVM_IR:
+ // Mangled name: Base#(){}kotlin.Int
+ // Public signature: /Base.y.|-6745575372101973707[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Base#(){}
+ // Public signature: /Base.y.|-7902422373892128922[0]
+ get
+
+ // CHECK:
+ // Mangled name: Base#(kotlin.Int;kotlin.Int){}
+ // Public signature: /Base.|-7691762014320324121[0]
+ constructor(x: Int, y: Int) /* primary */
+
+}
+
+// CHECK:
+// Mangled name: Test1
+// Public signature: /Test1|null[0]
+class Test1 : Base {
+ // CHECK:
+ // Mangled name: Test1#(kotlin.Int;kotlin.Int){}
+ // Public signature: /Test1.|-7691762014320324121[0]
+ constructor(xx: Int, yy: Int) /* primary */
+
+ // CHECK:
+ // Mangled name: Test1{}x
+ // Public signature: /Test1.x|-8060530855978347579[0]
+ /* fake */ override val x: Int
+ // CHECK JVM_IR:
+ // Mangled name: Test1#(){}kotlin.Int
+ // Public signature: /Test1.x.|4966956098150895696[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#(){}
+ // Public signature: /Test1.x.|1482705010654679335[0]
+ /* fake */ override get(): Int
+
+ // CHECK:
+ // Mangled name: Test1{}y
+ // Public signature: /Test1.y|3625903257357557171[0]
+ /* fake */ override val y: Int
+ // CHECK JVM_IR:
+ // Mangled name: Test1#(){}kotlin.Int
+ // Public signature: /Test1.y.|-6745575372101973707[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#(){}
+ // Public signature: /Test1.y.|-7902422373892128922[0]
+ /* fake */ override get(): Int
+
+}
+
+// CHECK:
+// Mangled name: Test2
+// Public signature: /Test2|null[0]
+class Test2 : Base {
+ // CHECK:
+ // Mangled name: Test2#(kotlin.Int;kotlin.Int){}
+ // Public signature: /Test2.|-7691762014320324121[0]
+ constructor(xx: Int, yy: Int)
+ // CHECK:
+ // Mangled name: Test2#(kotlin.Int;kotlin.Int;kotlin.Any){}
+ // Public signature: /Test2.|-2775945437722696135[0]
+ constructor(xxx: Int, yyy: Int, a: Any)
+
+ // CHECK:
+ // Mangled name: Test2{}x
+ // Public signature: /Test2.x|-8060530855978347579[0]
+ /* fake */ override val x: Int
+ // CHECK JVM_IR:
+ // Mangled name: Test2#(){}kotlin.Int
+ // Public signature: /Test2.x.|4966956098150895696[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test2#(){}
+ // Public signature: /Test2.x.|1482705010654679335[0]
+ /* fake */ override get(): Int
+
+ // CHECK:
+ // Mangled name: Test2{}y
+ // Public signature: /Test2.y|3625903257357557171[0]
+ /* fake */ override val y: Int
+ // CHECK JVM_IR:
+ // Mangled name: Test2#(){}kotlin.Int
+ // Public signature: /Test2.y.|-6745575372101973707[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test2#(){}
+ // Public signature: /Test2.y.|-7902422373892128922[0]
+ /* fake */ override get(): Int
+
+}
+
diff --git a/compiler/testData/ir/irText/classes/clashingFakeOverrideSignatures.sig.kt.txt b/compiler/testData/ir/irText/classes/clashingFakeOverrideSignatures.sig.kt.txt
new file mode 100644
index 00000000000..a10a7c7dac9
--- /dev/null
+++ b/compiler/testData/ir/irText/classes/clashingFakeOverrideSignatures.sig.kt.txt
@@ -0,0 +1,233 @@
+// CHECK:
+// Mangled name: Base
+// Public signature: /Base|null[0]
+open class Base {
+ // CHECK:
+ // Mangled name: Base#(){}
+ // Public signature: /Base.|-5645683436151566731[0]
+ constructor() /* primary */
+
+ // CHECK:
+ // Mangled name: Base#foo(1:0){}
+ // Public signature: /Base.foo|-701456291278879981[0]
+ fun foo(x: T): Unit
+
+ // CHECK:
+ // Mangled name: Base#foo(kotlin.String){}
+ // Public signature: /Base.foo|1351044947738582195[0]
+ fun foo(y: String): Unit
+
+ // CHECK:
+ // Mangled name: Base@1:0{}bar
+ // Public signature: /Base.bar|2723903059187474703[0]
+ val T.bar: Int
+ // CHECK JVM_IR:
+ // Mangled name: Base#@1:0(){}kotlin.Int
+ // Public signature: /Base.bar.|-3456944057375693285[0]
+ get(): Int
+
+ // CHECK:
+ // Mangled name: Base@kotlin.String{}bar
+ // Public signature: /Base.bar|-1423076340722422780[0]
+ val String.bar: Int
+ // CHECK JVM_IR:
+ // Mangled name: Base#@kotlin.String(){}kotlin.Int
+ // Public signature: /Base.bar.|-1735437823545695148[0]
+ get(): Int
+
+}
+
+// CHECK:
+// Mangled name: BaseXY
+// Public signature: /BaseXY|null[0]
+open class BaseXY {
+ // CHECK:
+ // Mangled name: BaseXY#(){}
+ // Public signature: /BaseXY.|-5645683436151566731[0]
+ constructor() /* primary */
+
+ // CHECK:
+ // Mangled name: BaseXY#foo(1:0;kotlin.String){}
+ // Public signature: /BaseXY.foo|-6449444608569619796[0]
+ fun foo(x: X, y: String): Unit
+
+ // CHECK:
+ // Mangled name: BaseXY#foo(kotlin.String;1:1){}
+ // Public signature: /BaseXY.foo|1702475903058974856[0]
+ fun foo(x: String, y: Y): Unit
+
+}
+
+// CHECK:
+// Mangled name: Derived
+// Public signature: /Derived|null[0]
+open class Derived : Base {
+ // CHECK:
+ // Mangled name: Derived#(){}
+ // Public signature: /Derived.|-5645683436151566731[0]
+ constructor() /* primary */
+
+ // CHECK:
+ // Mangled name: Derived#foo(kotlin.String){}
+ // Public signature: /Derived.foo|1351044947738582195[0]
+ /* fake */ override fun foo(x: String): Unit
+
+ // CHECK:
+ // Mangled name: Derived#foo(kotlin.String){}
+ // Public signature: /Derived.foo|1351044947738582195[0]
+ /* fake */ override fun foo(y: String): Unit
+
+ // CHECK:
+ // Mangled name: Derived@kotlin.String{}bar
+ // Public signature: /Derived.bar|-1423076340722422780[0]
+ /* fake */ override val String.bar: Int
+ // CHECK JVM_IR:
+ // Mangled name: Derived#@kotlin.String(){}kotlin.Int
+ // Public signature: /Derived.bar.|-1735437823545695148[0]
+ /* fake */ override get(): Int
+
+ // CHECK:
+ // Mangled name: Derived@kotlin.String{}bar
+ // Public signature: /Derived.bar|-1423076340722422780[0]
+ /* fake */ override val String.bar: Int
+ // CHECK JVM_IR:
+ // Mangled name: Derived#@kotlin.String(){}kotlin.Int
+ // Public signature: /Derived.bar.|-1735437823545695148[0]
+ /* fake */ override get(): Int
+
+}
+
+// CHECK:
+// Mangled name: Derived2
+// Public signature: /Derived2|null[0]
+class Derived2 : Derived {
+ // CHECK:
+ // Mangled name: Derived2#(){}
+ // Public signature: /Derived2.|-5645683436151566731[0]
+ constructor() /* primary */
+
+ // CHECK:
+ // Mangled name: Derived2#foo(kotlin.String){}
+ // Public signature: /Derived2.foo|1351044947738582195[0]
+ /* fake */ override fun foo(x: String): Unit
+
+ // CHECK:
+ // Mangled name: Derived2#foo(kotlin.String){}
+ // Public signature: /Derived2.foo|1351044947738582195[0]
+ /* fake */ override fun foo(y: String): Unit
+
+ // CHECK:
+ // Mangled name: Derived2@kotlin.String{}bar
+ // Public signature: /Derived2.bar|-1423076340722422780[0]
+ /* fake */ override val String.bar: Int
+ // CHECK JVM_IR:
+ // Mangled name: Derived2#@kotlin.String(){}kotlin.Int
+ // Public signature: /Derived2.bar.|-1735437823545695148[0]
+ /* fake */ override get(): Int
+
+ // CHECK:
+ // Mangled name: Derived2@kotlin.String{}bar
+ // Public signature: /Derived2.bar|-1423076340722422780[0]
+ /* fake */ override val String.bar: Int
+ // CHECK JVM_IR:
+ // Mangled name: Derived2#@kotlin.String(){}kotlin.Int
+ // Public signature: /Derived2.bar.|-1735437823545695148[0]
+ /* fake */ override get(): Int
+
+}
+
+// CHECK:
+// Mangled name: DerivedXY
+// Public signature: /DerivedXY|null[0]
+class DerivedXY : BaseXY {
+ // CHECK:
+ // Mangled name: DerivedXY#(){}
+ // Public signature: /DerivedXY.|-5645683436151566731[0]
+ constructor() /* primary */
+
+ // CHECK:
+ // Mangled name: DerivedXY#foo(kotlin.String;kotlin.String){}
+ // Public signature: /DerivedXY.foo|-3768462707108232911[0]
+ /* fake */ override fun foo(x: String, y: String): Unit
+
+ // CHECK:
+ // Mangled name: DerivedXY#foo(kotlin.String;kotlin.String){}
+ // Public signature: /DerivedXY.foo|-3768462707108232911[0]
+ /* fake */ override fun foo(x: String, y: String): Unit
+
+}
+
+// CHECK:
+// Mangled name: Outer
+// Public signature: /Outer|null[0]
+open class Outer {
+ // CHECK:
+ // Mangled name: Outer.Inner
+ // Public signature: /Outer.Inner|null[0]
+ open inner class Inner {
+ // CHECK:
+ // Mangled name: Outer.Inner#(){}
+ // Public signature: /Outer.Inner.|-5645683436151566731[0]
+ constructor() /* primary */
+
+ // CHECK:
+ // Mangled name: Outer.Inner#foo(2:0){}
+ // Public signature: /Outer.Inner.foo|5312251114282969214[0]
+ fun foo(x: T): Unit
+
+ // CHECK:
+ // Mangled name: Outer.Inner#foo(kotlin.String){}
+ // Public signature: /Outer.Inner.foo|1351044947738582195[0]
+ fun foo(y: String): Unit
+
+ }
+
+ // CHECK:
+ // Mangled name: Outer#(){}
+ // Public signature: /Outer.|-5645683436151566731[0]
+ constructor() /* primary */
+
+}
+
+// CHECK:
+// Mangled name: OuterDerived
+// Public signature: /OuterDerived|null[0]
+class OuterDerived : Outer {
+ // CHECK:
+ // Mangled name: OuterDerived.InnerDerived
+ // Public signature: /OuterDerived.InnerDerived|null[0]
+ inner class InnerDerived : Inner {
+ // CHECK:
+ // Mangled name: OuterDerived.InnerDerived#(){}
+ // Public signature: /OuterDerived.InnerDerived.|-5645683436151566731[0]
+ constructor() /* primary */
+
+ // CHECK:
+ // Mangled name: OuterDerived.InnerDerived#foo(kotlin.String){}
+ // Public signature: /OuterDerived.InnerDerived.foo|1351044947738582195[0]
+ /* fake */ override fun foo(x: String): Unit
+
+ // CHECK:
+ // Mangled name: OuterDerived.InnerDerived#foo(kotlin.String){}
+ // Public signature: /OuterDerived.InnerDerived.foo|1351044947738582195[0]
+ /* fake */ override fun foo(y: String): Unit
+
+ }
+
+ // CHECK:
+ // Mangled name: OuterDerived#(){}
+ // Public signature: /OuterDerived.|-5645683436151566731[0]
+ constructor() /* primary */
+
+}
+
+// CHECK:
+// Mangled name: #outerFun(){}
+// Public signature: /outerFun|-7637205853782391556[0]
+fun outerFun(): Unit
+
+// CHECK:
+// Mangled name: #test(Base;Derived;Derived2){}
+// Public signature: /test|4797523954931916574[0]
+fun test(b: Base, d: Derived, d2: Derived2): Unit
+
diff --git a/compiler/testData/ir/irText/classes/classMembers.sig.kt.txt b/compiler/testData/ir/irText/classes/classMembers.sig.kt.txt
new file mode 100644
index 00000000000..c0a161114e7
--- /dev/null
+++ b/compiler/testData/ir/irText/classes/classMembers.sig.kt.txt
@@ -0,0 +1,142 @@
+// CHECK:
+// Mangled name: C
+// Public signature: /C|null[0]
+class C {
+ // CHECK:
+ // Mangled name: C{}y
+ // Public signature: /C.y|3625903257357557171[0]
+ val y: Int
+ // CHECK JVM_IR:
+ // Mangled name: C#(){}kotlin.Int
+ // Public signature: /C.y.|-6745575372101973707[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: C#(){}
+ // Public signature: /C.y.|-7902422373892128922[0]
+ get
+
+ // CHECK:
+ // Mangled name: C{}z
+ // Public signature: /C.z|7549650372729116193[0]
+ var z: Int
+ // CHECK JVM_IR:
+ // Mangled name: C#(){}kotlin.Int
+ // Public signature: /C.z.|373477940260174794[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: C#(){}
+ // Public signature: /C.z.|4925813204745917177[0]
+ get
+ // CHECK:
+ // Mangled name: C#(kotlin.Int){}
+ // Public signature: /C.z.|8486465404430625584[0]
+ set
+
+ // CHECK:
+ // Mangled name: C{}property
+ // Public signature: /C.property|4634558160746314112[0]
+ val property: Int
+ // CHECK JVM_IR:
+ // Mangled name: C#(){}kotlin.Int
+ // Public signature: /C.property.|2853131919076574313[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: C#(){}
+ // Public signature: /C.property.|4838831487146901942[0]
+ get
+
+ // CHECK:
+ // Mangled name: C.NestedClass
+ // Public signature: /C.NestedClass|null[0]
+ class NestedClass {
+ // CHECK:
+ // Mangled name: C.NestedClass#(){}
+ // Public signature: /C.NestedClass.|-5645683436151566731[0]
+ constructor() /* primary */
+
+ // CHECK:
+ // Mangled name: C.NestedClass#function(){}
+ // Public signature: /C.NestedClass.function|-3322893411126713785[0]
+ fun function(): Unit
+
+ // CHECK:
+ // Mangled name: C.NestedClass#memberExtensionFunction@kotlin.Int(){}
+ // Public signature: /C.NestedClass.memberExtensionFunction|4691153119931446820[0]
+ fun Int.memberExtensionFunction(): Unit
+
+ }
+
+ // CHECK:
+ // Mangled name: C.NestedInterface
+ // Public signature: /C.NestedInterface|null[0]
+ interface NestedInterface {
+
+ // CHECK:
+ // Mangled name: C.NestedInterface#bar(){}
+ // Public signature: /C.NestedInterface.bar|496682602797471549[0]
+ fun bar(): Unit
+
+ // CHECK:
+ // Mangled name: C.NestedInterface#foo(){}
+ // Public signature: /C.NestedInterface.foo|-1041209573719867811[0]
+ abstract fun foo(): Unit
+
+ }
+
+ // CHECK:
+ // Mangled name: C.Companion
+ // Public signature: /C.Companion|null[0]
+ companion object Companion {
+ // CHECK:
+ // Mangled name: C.Companion#(){}
+ // Public signature: /C.Companion.|-5645683436151566731[0]
+ private constructor() /* primary */
+
+ }
+
+ // CHECK:
+ // Mangled name: C#(){}
+ // Public signature: /C.|-5645683436151566731[0]
+ constructor()
+ // CHECK:
+ // Mangled name: C#(kotlin.Int;kotlin.Int;kotlin.Int){}
+ // Public signature: /C.|3555954663887180339[0]
+ constructor(x: Int, y: Int, z: Int) /* primary */
+
+ // CHECK:
+ // Mangled name: C#function(){}
+ // Public signature: /C.function|-3322893411126713785[0]
+ fun function(): Unit
+
+ // CHECK:
+ // Mangled name: C#memberExtensionFunction@kotlin.Int(){}
+ // Public signature: /C.memberExtensionFunction|4691153119931446820[0]
+ fun Int.memberExtensionFunction(): Unit
+
+ // CHECK:
+ // Mangled name: C{}propertyWithGet
+ // Public signature: /C.propertyWithGet|3309863354483039401[0]
+ val propertyWithGet: Int
+ // CHECK JVM_IR:
+ // Mangled name: C#(){}kotlin.Int
+ // Public signature: /C.propertyWithGet.|-1283372725192636165[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: C#(){}
+ // Public signature: /C.propertyWithGet.|5182559010864477179[0]
+ get(): Int
+
+ // CHECK:
+ // Mangled name: C{}propertyWithGetAndSet
+ // Public signature: /C.propertyWithGetAndSet|9136157132489204883[0]
+ var propertyWithGetAndSet: Int
+ // CHECK JVM_IR:
+ // Mangled name: C#(){}kotlin.Int
+ // Public signature: /C.propertyWithGetAndSet.|2703109318737687323[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: C#(){}
+ // Public signature: /C.propertyWithGetAndSet.|6534309127249044994[0]
+ get(): Int
+ // CHECK:
+ // Mangled name: C#(kotlin.Int){}
+ // Public signature: /C.propertyWithGetAndSet.|-6849583414558768890[0]
+ set(value: Int): Unit
+
+}
+
diff --git a/compiler/testData/ir/irText/classes/classes.kt b/compiler/testData/ir/irText/classes/classes.kt
index 3526ee243f1..9b8254c6945 100644
--- a/compiler/testData/ir/irText/classes/classes.kt
+++ b/compiler/testData/ir/irText/classes/classes.kt
@@ -1,6 +1,9 @@
// IGNORE_BACKEND: JS_IR
// IGNORE_BACKEND: JS_IR_ES6
+// MUTE_SIGNATURE_COMPARISON_K2: ANY
+// ^ KT-57777
+
class TestClass
interface TestInterface
diff --git a/compiler/testData/ir/irText/classes/classes.sig.kt.txt b/compiler/testData/ir/irText/classes/classes.sig.kt.txt
new file mode 100644
index 00000000000..64ce3f29162
--- /dev/null
+++ b/compiler/testData/ir/irText/classes/classes.sig.kt.txt
@@ -0,0 +1,142 @@
+// CHECK:
+// Mangled name: TestAnnotationClass
+// Public signature: /TestAnnotationClass|null[0]
+open annotation class TestAnnotationClass : Annotation {
+ // CHECK:
+ // Mangled name: TestAnnotationClass#(){}
+ // Public signature: /TestAnnotationClass.|-5645683436151566731[0]
+ constructor() /* primary */
+
+}
+
+// CHECK:
+// Mangled name: TestClass
+// Public signature: /TestClass|null[0]
+class TestClass {
+ // CHECK:
+ // Mangled name: TestClass#(){}
+ // Public signature: /TestClass.|-5645683436151566731[0]
+ constructor() /* primary */
+
+}
+
+// CHECK:
+// Mangled name: TestEnumClass
+// Public signature: /TestEnumClass|null[0]
+enum class TestEnumClass : Enum {
+ // CHECK:
+ // Mangled name: TestEnumClass#(){}
+ // Public signature: /TestEnumClass.|-5645683436151566731[0]
+ private constructor() /* primary */
+ // CHECK JVM_IR:
+ // Mangled name: TestEnumClass#valueOf#static(kotlin.String){}TestEnumClass
+ // Public signature: /TestEnumClass.valueOf|3258702714702284561[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: TestEnumClass#valueOf#static(kotlin.String){}
+ // Public signature: /TestEnumClass.valueOf|-4683474617854611729[0]
+ fun valueOf(value: String): TestEnumClass
+
+ // CHECK JVM_IR:
+ // Mangled name: TestEnumClass#values#static(){}kotlin.Array
+ // Public signature: /TestEnumClass.values|2819729310351736077[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: TestEnumClass#values#static(){}
+ // Public signature: /TestEnumClass.values|-8715569000920726747[0]
+ fun values(): Array
+
+ // CHECK JVM_IR:
+ // Mangled name: TestEnumClass#clone(){}kotlin.Any
+ // Public signature: /TestEnumClass.clone|-6903128697527593263[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: TestEnumClass#compareTo(TestEnumClass){}
+ // Public signature: /TestEnumClass.compareTo|5404150121610277282[0]
+ protected /* fake */ override fun clone(): Any
+
+ // CHECK JVM_IR:
+ // Mangled name: TestEnumClass#compareTo(TestEnumClass){}kotlin.Int
+ // Public signature: /TestEnumClass.compareTo|-9135154948806454387[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: TestEnumClass#equals(kotlin.Any?){}
+ // Public signature: /TestEnumClass.equals|4638265728071529943[0]
+ /* fake */ override operator fun compareTo(other: TestEnumClass): Int
+
+ // CHECK JVM_IR:
+ // Mangled name: TestEnumClass#equals(kotlin.Any?){}kotlin.Boolean
+ // Public signature: /TestEnumClass.equals|722809408929142791[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: TestEnumClass#hashCode(){}
+ // Public signature: /TestEnumClass.hashCode|3409210261493131192[0]
+ /* fake */ override operator fun equals(other: Any?): Boolean
+
+ // CHECK JVM_IR:
+ // Mangled name: TestEnumClass#hashCode(){}kotlin.Int
+ // Public signature: /TestEnumClass.hashCode|-8048879360829830756[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: TestEnumClass#toString(){}
+ // Public signature: /TestEnumClass.toString|-1522858123163872138[0]
+ /* fake */ override fun hashCode(): Int
+
+ // CHECK JVM_IR:
+ // Mangled name: TestEnumClass#toString(){}kotlin.String
+ // Public signature: /TestEnumClass.toString|6958853723545266802[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: TestEnumClass#static{}entries
+ // Public signature: /TestEnumClass.entries|-5134227801081826149[0]
+ /* fake */ override fun toString(): String
+
+ // CHECK:
+ // Mangled name: TestEnumClass#static{}entries
+ // Public signature: /TestEnumClass.entries|-5134227801081826149[0]
+ val entries: EnumEntries
+ // CHECK JVM_IR:
+ // Mangled name: TestEnumClass##static(){}kotlin.enums.EnumEntries
+ // Public signature: /TestEnumClass.entries.|-5859730592340272958[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: TestEnumClass{}name
+ // Public signature: /TestEnumClass.name|4231860309499509769[0]
+ get(): EnumEntries
+
+ // CHECK:
+ // Mangled name: TestEnumClass{}name
+ // Public signature: /TestEnumClass.name|4231860309499509769[0]
+ /* fake */ override val name: String
+ // CHECK JVM_IR:
+ // Mangled name: TestEnumClass#(){}kotlin.String
+ // Public signature: /TestEnumClass.name.|-8006111524522882650[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: TestEnumClass{}ordinal
+ // Public signature: /TestEnumClass.ordinal|1912745122988592376[0]
+ /* fake */ override get(): String
+
+ // CHECK:
+ // Mangled name: TestEnumClass{}ordinal
+ // Public signature: /TestEnumClass.ordinal|1912745122988592376[0]
+ /* fake */ override val ordinal: Int
+ // CHECK JVM_IR:
+ // Mangled name: TestEnumClass#(){}kotlin.Int
+ // Public signature: /TestEnumClass.ordinal.|-6902664390061762634[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: TestInterface
+ // Public signature: /TestInterface|null[0]
+ /* fake */ override get(): Int
+
+}
+
+// CHECK:
+// Mangled name: TestInterface
+// Public signature: /TestInterface|null[0]
+interface TestInterface {
+
+}
+
+// CHECK:
+// Mangled name: TestObject
+// Public signature: /TestObject|null[0]
+object TestObject {
+ // CHECK:
+ // Mangled name: TestObject#(){}
+ // Public signature: /TestObject.|-5645683436151566731[0]
+ private constructor() /* primary */
+
+}
+
diff --git a/compiler/testData/ir/irText/classes/cloneable.sig.kt.txt b/compiler/testData/ir/irText/classes/cloneable.sig.kt.txt
new file mode 100644
index 00000000000..5a27d888f34
--- /dev/null
+++ b/compiler/testData/ir/irText/classes/cloneable.sig.kt.txt
@@ -0,0 +1,69 @@
+// CHECK:
+// Mangled name: A
+// Public signature: /A|null[0]
+class A : Cloneable {
+ // CHECK:
+ // Mangled name: A#(){}
+ // Public signature: /A.|-5645683436151566731[0]
+ constructor() /* primary */
+ // CHECK JVM_IR:
+ // Mangled name: A#clone(){}kotlin.Any
+ // Public signature: /A.clone|-6903128697527593263[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: A#clone(){}
+ // Public signature: /A.clone|-2406852056970293187[0]
+ protected /* fake */ override fun clone(): Any
+
+}
+
+// CHECK:
+// Mangled name: C
+// Public signature: /C|null[0]
+class C : I {
+ // CHECK:
+ // Mangled name: C#(){}
+ // Public signature: /C.|-5645683436151566731[0]
+ constructor() /* primary */
+ // CHECK JVM_IR:
+ // Mangled name: C#clone(){}kotlin.Any
+ // Public signature: /C.clone|-6903128697527593263[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: C#clone(){}
+ // Public signature: /C.clone|-2406852056970293187[0]
+ protected /* fake */ override fun clone(): Any
+
+}
+
+// CHECK:
+// Mangled name: OC
+// Public signature: /OC|null[0]
+class OC : I {
+ // CHECK:
+ // Mangled name: OC#(){}
+ // Public signature: /OC.|-5645683436151566731[0]
+ constructor() /* primary */
+
+ // CHECK JVM_IR:
+ // Mangled name: OC#clone(){}OC
+ // Public signature: /OC.clone|8389954697594281582[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: OC#clone(){}
+ // Public signature: /OC.clone|-2406852056970293187[0]
+ protected override fun clone(): OC
+
+}
+
+// CHECK:
+// Mangled name: I
+// Public signature: /I|null[0]
+interface I : Cloneable {
+ // CHECK JVM_IR:
+ // Mangled name: I#clone(){}kotlin.Any
+ // Public signature: /I.clone|-6903128697527593263[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: I#clone(){}
+ // Public signature: /I.clone|-2406852056970293187[0]
+ protected /* fake */ override fun clone(): Any
+
+}
+
diff --git a/compiler/testData/ir/irText/classes/companionObject.sig.kt.txt b/compiler/testData/ir/irText/classes/companionObject.sig.kt.txt
new file mode 100644
index 00000000000..d249341cb35
--- /dev/null
+++ b/compiler/testData/ir/irText/classes/companionObject.sig.kt.txt
@@ -0,0 +1,44 @@
+// CHECK:
+// Mangled name: Test1
+// Public signature: /Test1|null[0]
+class Test1 {
+ // CHECK:
+ // Mangled name: Test1.Companion
+ // Public signature: /Test1.Companion|null[0]
+ companion object Companion {
+ // CHECK:
+ // Mangled name: Test1.Companion#(){}
+ // Public signature: /Test1.Companion.|-5645683436151566731[0]
+ private constructor() /* primary */
+
+ }
+
+ // CHECK:
+ // Mangled name: Test1#(){}
+ // Public signature: /Test1.|-5645683436151566731[0]
+ constructor() /* primary */
+
+}
+
+// CHECK:
+// Mangled name: Test2
+// Public signature: /Test2|null[0]
+class Test2 {
+ // CHECK:
+ // Mangled name: Test2.Named
+ // Public signature: /Test2.Named|null[0]
+ companion object Named {
+ // CHECK:
+ // Mangled name: Test2.Named#(){}
+ // Public signature: /Test2.Named.|-5645683436151566731[0]
+ private constructor() /* primary */
+
+ }
+
+ // CHECK:
+ // Mangled name: Test2#(){}
+ // Public signature: /Test2.|-5645683436151566731[0]
+ constructor() /* primary */
+
+}
+
diff --git a/compiler/testData/ir/irText/classes/dataClasses/dataClassWithArrayMembers.kt b/compiler/testData/ir/irText/classes/dataClasses/dataClassWithArrayMembers.kt
index 8a8663dfd93..8d2d71e7d5d 100644
--- a/compiler/testData/ir/irText/classes/dataClasses/dataClassWithArrayMembers.kt
+++ b/compiler/testData/ir/irText/classes/dataClasses/dataClassWithArrayMembers.kt
@@ -1,3 +1,6 @@
+// MUTE_SIGNATURE_COMPARISON_K2: JVM_IR
+// ^ KT-57429
+
data class Test1(
val stringArray: Array,
val charArray: CharArray,
@@ -16,4 +19,4 @@ data class Test2(
data class Test3(
val anyArrayN: Array?
-)
\ No newline at end of file
+)
diff --git a/compiler/testData/ir/irText/classes/dataClasses/dataClassWithArrayMembers.sig.kt.txt b/compiler/testData/ir/irText/classes/dataClasses/dataClassWithArrayMembers.sig.kt.txt
new file mode 100644
index 00000000000..4a2ae1720ae
--- /dev/null
+++ b/compiler/testData/ir/irText/classes/dataClasses/dataClassWithArrayMembers.sig.kt.txt
@@ -0,0 +1,346 @@
+// CHECK:
+// Mangled name: Test1
+// Public signature: /Test1|null[0]
+data class Test1 {
+ // CHECK:
+ // Mangled name: Test1{}stringArray
+ // Public signature: /Test1.stringArray|3224078221487065108[0]
+ val stringArray: Array
+ // CHECK JVM_IR:
+ // Mangled name: Test1#(){}kotlin.Array
+ // Public signature: /Test1.stringArray.|3372814522015375360[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#(){}
+ // Public signature: /Test1.stringArray.|-999420313937698549[0]
+ get
+
+ // CHECK:
+ // Mangled name: Test1{}charArray
+ // Public signature: /Test1.charArray|-5349931751208968301[0]
+ val charArray: CharArray
+ // CHECK JVM_IR:
+ // Mangled name: Test1#(){}kotlin.CharArray
+ // Public signature: /Test1.charArray.|-3365262090570994726[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#(){}
+ // Public signature: /Test1.charArray.|-8841051727055591008[0]
+ get
+
+ // CHECK:
+ // Mangled name: Test1{}booleanArray
+ // Public signature: /Test1.booleanArray|7605527965651232515[0]
+ val booleanArray: BooleanArray
+ // CHECK JVM_IR:
+ // Mangled name: Test1#(){}kotlin.BooleanArray
+ // Public signature: /Test1.booleanArray.|-2975190751408552199[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#(){}
+ // Public signature: /Test1.booleanArray.|-1483974669542225092[0]
+ get
+
+ // CHECK:
+ // Mangled name: Test1{}byteArray
+ // Public signature: /Test1.byteArray|-2314777124899298189[0]
+ val byteArray: ByteArray
+ // CHECK JVM_IR:
+ // Mangled name: Test1#(){}kotlin.ByteArray
+ // Public signature: /Test1.byteArray.|-4531821776506226927[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#(){}
+ // Public signature: /Test1.byteArray.|1184466848294423218[0]
+ get
+
+ // CHECK:
+ // Mangled name: Test1{}shortArray
+ // Public signature: /Test1.shortArray|3516401755230006906[0]
+ val shortArray: ShortArray
+ // CHECK JVM_IR:
+ // Mangled name: Test1#(){}kotlin.ShortArray
+ // Public signature: /Test1.shortArray.|3616346085964569365[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#(){}
+ // Public signature: /Test1.shortArray.|6916129091578524572[0]
+ get
+
+ // CHECK:
+ // Mangled name: Test1{}intArray
+ // Public signature: /Test1.intArray|-5845507301569286943[0]
+ val intArray: IntArray
+ // CHECK JVM_IR:
+ // Mangled name: Test1#(){}kotlin.IntArray
+ // Public signature: /Test1.intArray.|540017735713660266[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#(){}
+ // Public signature: /Test1.intArray.|8581538667026869746[0]
+ get
+
+ // CHECK:
+ // Mangled name: Test1{}longArray
+ // Public signature: /Test1.longArray|-261136028309834719[0]
+ val longArray: LongArray
+ // CHECK JVM_IR:
+ // Mangled name: Test1#(){}kotlin.LongArray
+ // Public signature: /Test1.longArray.|-1197859177727725361[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#(){}
+ // Public signature: /Test1.longArray.|7513485594208747900[0]
+ get
+
+ // CHECK:
+ // Mangled name: Test1{}floatArray
+ // Public signature: /Test1.floatArray|-863616440006860352[0]
+ val floatArray: FloatArray
+ // CHECK JVM_IR:
+ // Mangled name: Test1#(){}kotlin.FloatArray
+ // Public signature: /Test1.floatArray.|379636537041432797[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#(){}
+ // Public signature: /Test1.floatArray.|-7251674888770048121[0]
+ get
+
+ // CHECK:
+ // Mangled name: Test1{}doubleArray
+ // Public signature: /Test1.doubleArray|-3027997348205759511[0]
+ val doubleArray: DoubleArray
+ // CHECK JVM_IR:
+ // Mangled name: Test1#(){}kotlin.DoubleArray
+ // Public signature: /Test1.doubleArray.|5171225634314785003[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#(){}
+ // Public signature: /Test1.doubleArray.|-8332107536960256489[0]
+ get
+
+ // CHECK:
+ // Mangled name: Test1#(kotlin.Array;kotlin.CharArray;kotlin.BooleanArray;kotlin.ByteArray;kotlin.ShortArray;kotlin.IntArray;kotlin.LongArray;kotlin.FloatArray;kotlin.DoubleArray){}
+ // Public signature: /Test1.|-2901047261480922149[0]
+ constructor(stringArray: Array, charArray: CharArray, booleanArray: BooleanArray, byteArray: ByteArray, shortArray: ShortArray, intArray: IntArray, longArray: LongArray, floatArray: FloatArray, doubleArray: DoubleArray) /* primary */
+ // CHECK JVM_IR:
+ // Mangled name: Test1#component1(){}kotlin.Array
+ // Public signature: /Test1.component1|2673462985803256369[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#component1(){}
+ // Public signature: /Test1.component1|162597135895221648[0]
+ operator fun component1(): Array
+
+ // CHECK JVM_IR:
+ // Mangled name: Test1#component2(){}kotlin.CharArray
+ // Public signature: /Test1.component2|-8172205221988991671[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#component2(){}
+ // Public signature: /Test1.component2|3796717572321500973[0]
+ operator fun component2(): CharArray
+
+ // CHECK JVM_IR:
+ // Mangled name: Test1#component3(){}kotlin.BooleanArray
+ // Public signature: /Test1.component3|8179741844146192752[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#component3(){}
+ // Public signature: /Test1.component3|-7448948688383327918[0]
+ operator fun component3(): BooleanArray
+
+ // CHECK JVM_IR:
+ // Mangled name: Test1#component4(){}kotlin.ByteArray
+ // Public signature: /Test1.component4|-1739414106658456946[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#component4(){}
+ // Public signature: /Test1.component4|-5228865120014592696[0]
+ operator fun component4(): ByteArray
+
+ // CHECK JVM_IR:
+ // Mangled name: Test1#component5(){}kotlin.ShortArray
+ // Public signature: /Test1.component5|-3423229537519330548[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#component5(){}
+ // Public signature: /Test1.component5|-6761990273390998797[0]
+ operator fun component5(): ShortArray
+
+ // CHECK JVM_IR:
+ // Mangled name: Test1#component6(){}kotlin.IntArray
+ // Public signature: /Test1.component6|-2300576074023927975[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#component6(){}
+ // Public signature: /Test1.component6|-341469160952212663[0]
+ operator fun component6(): IntArray
+
+ // CHECK JVM_IR:
+ // Mangled name: Test1#component7(){}kotlin.LongArray
+ // Public signature: /Test1.component7|-867169008637195949[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#component7(){}
+ // Public signature: /Test1.component7|-5566060557311180434[0]
+ operator fun component7(): LongArray
+
+ // CHECK JVM_IR:
+ // Mangled name: Test1#component8(){}kotlin.FloatArray
+ // Public signature: /Test1.component8|4154428752572134259[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#component8(){}
+ // Public signature: /Test1.component8|-536160406046914439[0]
+ operator fun component8(): FloatArray
+
+ // CHECK JVM_IR:
+ // Mangled name: Test1#component9(){}kotlin.DoubleArray
+ // Public signature: /Test1.component9|-6146261915259686298[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#component9(){}
+ // Public signature: /Test1.component9|4077304044778180766[0]
+ operator fun component9(): DoubleArray
+
+ // CHECK JVM_IR:
+ // Mangled name: Test1#copy(kotlin.Array;kotlin.CharArray;kotlin.BooleanArray;kotlin.ByteArray;kotlin.ShortArray;kotlin.IntArray;kotlin.LongArray;kotlin.FloatArray;kotlin.DoubleArray){}Test1
+ // Public signature: /Test1.copy|3580547657034916048[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#copy(kotlin.Array;kotlin.CharArray;kotlin.BooleanArray;kotlin.ByteArray;kotlin.ShortArray;kotlin.IntArray;kotlin.LongArray;kotlin.FloatArray;kotlin.DoubleArray){}
+ // Public signature: /Test1.copy|-3582680923088795384[0]
+ fun copy(stringArray: Array, charArray: CharArray, booleanArray: BooleanArray, byteArray: ByteArray, shortArray: ShortArray, intArray: IntArray, longArray: LongArray, floatArray: FloatArray, doubleArray: DoubleArray): Test1
+
+ // CHECK JVM_IR:
+ // Mangled name: Test1#equals(kotlin.Any?){}kotlin.Boolean
+ // Public signature: /Test1.equals|722809408929142791[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#equals(kotlin.Any?){}
+ // Public signature: /Test1.equals|4638265728071529943[0]
+ override operator fun equals(other: Any?): Boolean
+
+ // CHECK JVM_IR:
+ // Mangled name: Test1#hashCode(){}kotlin.Int
+ // Public signature: /Test1.hashCode|-8048879360829830756[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#hashCode(){}
+ // Public signature: /Test1.hashCode|3409210261493131192[0]
+ override fun hashCode(): Int
+
+ // CHECK JVM_IR:
+ // Mangled name: Test1#toString(){}kotlin.String
+ // Public signature: /Test1.toString|6958853723545266802[0]
+ // CHECK JS_IR NATIVE:
+ // Mangled name: Test1#toString(){}
+ // Public signature: /Test1.toString|-1522858123163872138[0]
+ override fun toString(): String
+
+}
+
+// CHECK:
+// Mangled name: Test2
+// Public signature: /Test2|null[0]
+data class Test2