Beatify names for enum name and ordinal local variables

This commit is contained in:
Mikhael Bogdanov
2020-01-31 09:57:39 +01:00
parent cd0c45c832
commit 9e26491631
2 changed files with 31 additions and 22 deletions
@@ -787,32 +787,41 @@ public class FunctionCodegen {
shift++; shift++;
} }
boolean isEnumName = true;
KotlinTypeMapper typeMapper = state.getTypeMapper(); KotlinTypeMapper typeMapper = state.getTypeMapper();
for (int i = 0; i < params.size(); i++) { for (int i = 0; i < params.size(); i++) {
JvmMethodParameterSignature param = params.get(i); JvmMethodParameterSignature param = params.get(i);
JvmMethodParameterKind kind = param.getKind(); JvmMethodParameterKind kind = param.getKind();
String parameterName; String parameterName;
if (kind == JvmMethodParameterKind.VALUE) { switch (kind) {
ValueParameterDescriptor parameter = valueParameterIterator.next(); case VALUE:
String nameForDestructuredParameter = VariableAsmNameManglingUtils.getNameForDestructuredParameterOrNull(parameter); ValueParameterDescriptor parameter = valueParameterIterator.next();
String nameForDestructuredParameter = VariableAsmNameManglingUtils.getNameForDestructuredParameterOrNull(parameter);
parameterName = parameterName =
nameForDestructuredParameter == null nameForDestructuredParameter == null
? computeParameterName(i, parameter) ? computeParameterName(i, parameter)
: nameForDestructuredParameter; : nameForDestructuredParameter;
} break;
else if (kind == JvmMethodParameterKind.RECEIVER) { case RECEIVER:
parameterName = AsmUtil.getNameForReceiverParameter( parameterName = AsmUtil.getNameForReceiverParameter(
functionDescriptor, typeMapper.getBindingContext(), state.getLanguageVersionSettings()); functionDescriptor, typeMapper.getBindingContext(), state.getLanguageVersionSettings());
} else if (kind == JvmMethodParameterKind.OUTER) { break;
parameterName = CAPTURED_THIS_FIELD; //should be 'this$X' depending on inner class nesting case OUTER:
} parameterName = CAPTURED_THIS_FIELD; //should be 'this$X' depending on inner class nesting
else {
String lowercaseKind = kind.name().toLowerCase(); break;
parameterName = needIndexForVar(kind) case ENUM_NAME_OR_ORDINAL:
? "$" + lowercaseKind + "$" + i parameterName = isEnumName ? "$enum$name" : "$enum$ordinal";
: "$" + lowercaseKind; isEnumName = !isEnumName;
break;
default:
String lowercaseKind = kind.name().toLowerCase();
parameterName = needIndexForVar(kind)
? "$" + lowercaseKind + "$" + i
: "$" + lowercaseKind;
break;
} }
Type type = param.getAsmType(); Type type = param.getAsmType();
@@ -1,5 +1,5 @@
final class foo/Kotlin$A : foo/Kotlin { final class foo/Kotlin$A : foo/Kotlin {
void <init>(java.lang.String $enum_name_or_ordinal$0, int $enum_name_or_ordinal$1) void <init>(java.lang.String $enum$name, int $enum$ordinal)
public final void foo() public final void foo()
} }
@@ -11,10 +11,10 @@ public class foo/Kotlin : java/lang/Enum {
static void <clinit>() static void <clinit>()
private void <init>(java.lang.String $enum_name_or_ordinal$0, int $enum_name_or_ordinal$1, java.lang.String s) private void <init>(java.lang.String $enum$name, int $enum$ordinal, java.lang.String s)
@Lfoo/TypeAnn;([]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnn;([]) : METHOD_FORMAL_PARAMETER 0, null
public void <init>(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 <init>(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) public static foo.Kotlin valueOf(java.lang.String p0)