From 135accea1d7c33827e2528e1f5fb3b0e0feaf560 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 23 Dec 2013 20:56:31 +0400 Subject: [PATCH] Extract and use name-mapping method in JetTypeMapper It doesn't ever make sense to create JVM method signatures with names that come directly from descriptors; we need to map some of them ( for property accessors, for local functions/lambdas) --- .../jet/codegen/state/JetTypeMapper.java | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java index e04a761de81..dbb0c40db8c 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java @@ -30,6 +30,7 @@ import org.jetbrains.jet.codegen.signature.JvmMethodParameterKind; import org.jetbrains.jet.codegen.signature.JvmMethodParameterSignature; import org.jetbrains.jet.codegen.signature.JvmMethodSignature; import org.jetbrains.jet.lang.descriptors.*; +import org.jetbrains.jet.lang.descriptors.impl.AnonymousFunctionDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; @@ -547,13 +548,24 @@ public class JetTypeMapper extends BindingTraceAware { } @NotNull - public JvmMethodSignature mapSignature(@NotNull FunctionDescriptor f, boolean needGenericSignature, @NotNull OwnerKind kind) { - String name = f.getName().asString(); - if (f instanceof PropertyAccessorDescriptor) { - boolean isGetter = f instanceof PropertyGetterDescriptor; - name = getPropertyAccessorName(((PropertyAccessorDescriptor) f).getCorrespondingProperty(), isGetter); + private static String mapFunctionName(@NotNull FunctionDescriptor descriptor) { + if (descriptor instanceof PropertyAccessorDescriptor) { + return getPropertyAccessorName(((PropertyAccessorDescriptor) descriptor).getCorrespondingProperty(), + descriptor instanceof PropertyGetterDescriptor); } - return mapSignature(name, f, needGenericSignature, kind); + else if (isLocalNamedFun(descriptor) || + descriptor instanceof AnonymousFunctionDescriptor || + descriptor instanceof ExpressionAsFunctionDescriptor) { + return "invoke"; + } + else { + return descriptor.getName().asString(); + } + } + + @NotNull + public JvmMethodSignature mapSignature(@NotNull FunctionDescriptor f, boolean needGenericSignature, @NotNull OwnerKind kind) { + return mapSignature(mapFunctionName(f), f, needGenericSignature, kind); } @NotNull @@ -563,7 +575,7 @@ public class JetTypeMapper extends BindingTraceAware { @NotNull public JvmMethodSignature mapSignature(@NotNull FunctionDescriptor f) { - return mapSignature(f.getName(), f); + return mapSignature(mapFunctionName(f), f, false, OwnerKind.IMPLEMENTATION); } @NotNull