From 1df285161117e4f8d81c84cc3c765e20214e3f91 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 9 Dec 2021 00:46:36 +0100 Subject: [PATCH] IR: use names $this/$receiver for receivers in copied static functions Similarly to the other places in the IR backend (e.g. see `copyValueParametersToStatic` in the same file). In JVM IR, these names are used for example for receiver parameters of methods copied to DefaultImpls classes. Since Java stub code generated by kapt mentions them, it fixes a few issues in tests on kapt + JVM IR (KT-49682). --- .../kotlin/backend/common/ir/IrUtils.kt | 4 +- .../testData/converter/defaultImpls.kt | 2 - .../testData/converter/defaultImpls_ir.txt | 69 +++++++++++++++++++ .../testData/codegen/Sealed.ir.txt | 2 +- 4 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 plugins/kapt3/kapt3-compiler/testData/converter/defaultImpls_ir.txt diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt index f33e3994ef7..eb49cfc15ba 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt @@ -538,14 +538,14 @@ fun IrFactory.createStaticFunctionWithReceivers( var offset = 0 val dispatchReceiver = oldFunction.dispatchReceiverParameter?.copyTo( this, - name = Name.identifier("this"), + name = Name.identifier("\$this"), index = offset++, type = remap(dispatchReceiverType!!), origin = IrDeclarationOrigin.MOVED_DISPATCH_RECEIVER ) val extensionReceiver = oldFunction.extensionReceiverParameter?.copyTo( this, - name = Name.identifier("receiver"), + name = Name.identifier("\$receiver"), index = offset++, origin = IrDeclarationOrigin.MOVED_EXTENSION_RECEIVER, remapTypeMap = typeParameterMap diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/defaultImpls.kt b/plugins/kapt3/kapt3-compiler/testData/converter/defaultImpls.kt index 600cf17d93d..98cf0e78e4f 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/defaultImpls.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/defaultImpls.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND: JVM_IR - interface IntfWithoutDefaultImpls interface IntfWithDefaultImpls { diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/defaultImpls_ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/defaultImpls_ir.txt new file mode 100644 index 00000000000..7f7a2bde5c8 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/defaultImpls_ir.txt @@ -0,0 +1,69 @@ +import java.lang.System; + +@kotlin.Metadata() +public abstract interface Intf { + public static final int WHITE = 2; + @org.jetbrains.annotations.NotNull() + public static final Intf.Companion Companion = null; + + public abstract int getColor(); + + @kotlin.Metadata() + public static final class Companion { + private static final int BLACK = 1; + public static final int WHITE = 2; + + private Companion() { + super(); + } + + public final int getBLACK() { + return 0; + } + } + + @kotlin.Metadata() + public static final class DefaultImpls { + + public DefaultImpls() { + super(); + } + + public static int getColor(@org.jetbrains.annotations.NotNull() + Intf $this) { + return 0; + } + } +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public abstract interface IntfWithDefaultImpls { + + public abstract void a(); + + @kotlin.Metadata() + public static final class DefaultImpls { + + public DefaultImpls() { + super(); + } + + public static void a(@org.jetbrains.annotations.NotNull() + IntfWithDefaultImpls $this) { + } + } +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public abstract interface IntfWithoutDefaultImpls { +} diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.ir.txt b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.ir.txt index 02f71a2e760..a3e59ec592a 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.ir.txt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.ir.txt @@ -876,7 +876,7 @@ public final class X$Companion : java/lang/Object { } public final class X$DefaultImpls : java/lang/Object { - public static void def(X this) + public static void def(X $this) } public abstract interface X : java/lang/Object {