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++;
}
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();
@@ -1,5 +1,5 @@
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()
}
@@ -11,10 +11,10 @@ public class foo/Kotlin : java/lang/Enum {
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
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)