From 9e264916314e6bf2b064383fe68607f4ce82afff Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Fri, 31 Jan 2020 09:57:39 +0100 Subject: [PATCH] Beatify names for enum name and ordinal local variables --- .../kotlin/codegen/FunctionCodegen.java | 47 +++++++++++-------- .../typeAnnotations/enumClassConstructor.txt | 6 +-- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java index 4eaa398455e..a2e58cc8174 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java @@ -787,32 +787,41 @@ public class FunctionCodegen { shift++; } + boolean isEnumName = true; KotlinTypeMapper typeMapper = state.getTypeMapper(); for (int i = 0; i < params.size(); i++) { JvmMethodParameterSignature param = params.get(i); JvmMethodParameterKind kind = param.getKind(); String parameterName; - if (kind == JvmMethodParameterKind.VALUE) { - ValueParameterDescriptor parameter = valueParameterIterator.next(); - String nameForDestructuredParameter = VariableAsmNameManglingUtils.getNameForDestructuredParameterOrNull(parameter); + switch (kind) { + case VALUE: + ValueParameterDescriptor parameter = valueParameterIterator.next(); + String nameForDestructuredParameter = VariableAsmNameManglingUtils.getNameForDestructuredParameterOrNull(parameter); - parameterName = - nameForDestructuredParameter == null - ? computeParameterName(i, parameter) - : nameForDestructuredParameter; - } - else if (kind == JvmMethodParameterKind.RECEIVER) { - parameterName = AsmUtil.getNameForReceiverParameter( - functionDescriptor, typeMapper.getBindingContext(), state.getLanguageVersionSettings()); - } else if (kind == JvmMethodParameterKind.OUTER) { - parameterName = CAPTURED_THIS_FIELD; //should be 'this$X' depending on inner class nesting - } - else { - String lowercaseKind = kind.name().toLowerCase(); - parameterName = needIndexForVar(kind) - ? "$" + lowercaseKind + "$" + i - : "$" + lowercaseKind; + parameterName = + nameForDestructuredParameter == null + ? computeParameterName(i, parameter) + : nameForDestructuredParameter; + break; + case RECEIVER: + parameterName = AsmUtil.getNameForReceiverParameter( + functionDescriptor, typeMapper.getBindingContext(), state.getLanguageVersionSettings()); + break; + case OUTER: + parameterName = CAPTURED_THIS_FIELD; //should be 'this$X' depending on inner class nesting + + break; + case ENUM_NAME_OR_ORDINAL: + parameterName = isEnumName ? "$enum$name" : "$enum$ordinal"; + isEnumName = !isEnumName; + break; + default: + String lowercaseKind = kind.name().toLowerCase(); + parameterName = needIndexForVar(kind) + ? "$" + lowercaseKind + "$" + i + : "$" + lowercaseKind; + break; } Type type = param.getAsmType(); diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/enumClassConstructor.txt b/compiler/testData/codegen/asmLike/typeAnnotations/enumClassConstructor.txt index 7e9da6e1a59..4b0fd945f43 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/enumClassConstructor.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/enumClassConstructor.txt @@ -1,5 +1,5 @@ final class foo/Kotlin$A : foo/Kotlin { - void (java.lang.String $enum_name_or_ordinal$0, int $enum_name_or_ordinal$1) + void (java.lang.String $enum$name, int $enum$ordinal) public final void foo() } @@ -11,10 +11,10 @@ public class foo/Kotlin : java/lang/Enum { static void () - private void (java.lang.String $enum_name_or_ordinal$0, int $enum_name_or_ordinal$1, java.lang.String s) + private void (java.lang.String $enum$name, int $enum$ordinal, java.lang.String s) @Lfoo/TypeAnn;([]) : METHOD_FORMAL_PARAMETER 0, null - public void (java.lang.String $enum_name_or_ordinal$0, int $enum_name_or_ordinal$1, java.lang.String s, kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker) + public void (java.lang.String $enum$name, int $enum$ordinal, java.lang.String s, kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker) public static foo.Kotlin valueOf(java.lang.String p0)