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 (<get-?> for property
accessors, <anonymous> for local functions/lambdas)
This commit is contained in:
Alexander Udalov
2013-12-23 20:56:31 +04:00
parent 8e753e6efd
commit 135accea1d
@@ -30,6 +30,7 @@ import org.jetbrains.jet.codegen.signature.JvmMethodParameterKind;
import org.jetbrains.jet.codegen.signature.JvmMethodParameterSignature; import org.jetbrains.jet.codegen.signature.JvmMethodParameterSignature;
import org.jetbrains.jet.codegen.signature.JvmMethodSignature; import org.jetbrains.jet.codegen.signature.JvmMethodSignature;
import org.jetbrains.jet.lang.descriptors.*; 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.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingContextUtils; import org.jetbrains.jet.lang.resolve.BindingContextUtils;
@@ -547,13 +548,24 @@ public class JetTypeMapper extends BindingTraceAware {
} }
@NotNull @NotNull
public JvmMethodSignature mapSignature(@NotNull FunctionDescriptor f, boolean needGenericSignature, @NotNull OwnerKind kind) { private static String mapFunctionName(@NotNull FunctionDescriptor descriptor) {
String name = f.getName().asString(); if (descriptor instanceof PropertyAccessorDescriptor) {
if (f instanceof PropertyAccessorDescriptor) { return getPropertyAccessorName(((PropertyAccessorDescriptor) descriptor).getCorrespondingProperty(),
boolean isGetter = f instanceof PropertyGetterDescriptor; descriptor instanceof PropertyGetterDescriptor);
name = getPropertyAccessorName(((PropertyAccessorDescriptor) f).getCorrespondingProperty(), isGetter);
} }
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 @NotNull
@@ -563,7 +575,7 @@ public class JetTypeMapper extends BindingTraceAware {
@NotNull @NotNull
public JvmMethodSignature mapSignature(@NotNull FunctionDescriptor f) { public JvmMethodSignature mapSignature(@NotNull FunctionDescriptor f) {
return mapSignature(f.getName(), f); return mapSignature(mapFunctionName(f), f, false, OwnerKind.IMPLEMENTATION);
} }
@NotNull @NotNull