From 9f8a16fb1a6c2a4942fb4a18854a5fb13aa39d4a Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 19 Feb 2014 23:25:44 +0400 Subject: [PATCH] Unified copying of property and method proto data. --- .../jet/codegen/JavaSerializerExtension.java | 25 ++++++++++++++++--- .../jetbrains/jet/codegen/PackageCodegen.java | 6 ++--- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/JavaSerializerExtension.java b/compiler/backend/src/org/jetbrains/jet/codegen/JavaSerializerExtension.java index ec637dafe28..1e9a798e1c8 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/JavaSerializerExtension.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/JavaSerializerExtension.java @@ -23,6 +23,7 @@ import org.jetbrains.asm4.Type; import org.jetbrains.asm4.commons.Method; import org.jetbrains.jet.descriptors.serialization.*; import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPropertyDescriptor; +import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedSimpleFunctionDescriptor; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.kotlin.SignatureDeserializer; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -68,9 +69,18 @@ public class JavaSerializerExtension extends SerializerExtension { ) { SignatureSerializer signatureSerializer = new SignatureSerializer(nameTable); if (callable instanceof FunctionDescriptor) { - Method method = bindings.get(METHOD_FOR_FUNCTION, (FunctionDescriptor) callable); - if (method != null) { - proto.setExtension(JavaProtoBuf.methodSignature, signatureSerializer.methodSignature(method)); + JavaProtoBuf.JavaMethodSignature signature; + if (callable instanceof DeserializedSimpleFunctionDescriptor) { + DeserializedSimpleFunctionDescriptor deserialized = (DeserializedSimpleFunctionDescriptor) callable; + signature = signatureSerializer.copyMethodSignature( + deserialized.getProto().getExtension(JavaProtoBuf.methodSignature), deserialized.getNameResolver()); + } + else { + Method method = bindings.get(METHOD_FOR_FUNCTION, (FunctionDescriptor) callable); + signature = method != null ? signatureSerializer.methodSignature(method) : null; + } + if (signature != null) { + proto.setExtension(JavaProtoBuf.methodSignature, signature); } } else if (callable instanceof PropertyDescriptor) { @@ -133,6 +143,15 @@ public class JavaSerializerExtension extends SerializerExtension { this.nameTable = nameTable; } + @NotNull + public JavaProtoBuf.JavaMethodSignature copyMethodSignature( + @NotNull JavaProtoBuf.JavaMethodSignature signature, + @NotNull NameResolver nameResolver + ) { + Method method = new SignatureDeserializer(nameResolver).methodSignature(signature); + return methodSignature(method); + } + @NotNull public JavaProtoBuf.JavaMethodSignature methodSignature(@NotNull Method method) { JavaProtoBuf.JavaMethodSignature.Builder signature = JavaProtoBuf.JavaMethodSignature.newBuilder(); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java index 3f4fbcc8191..2a09143afcb 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java @@ -65,7 +65,6 @@ import java.util.*; import static org.jetbrains.asm4.Opcodes.*; import static org.jetbrains.jet.codegen.AsmUtil.asmDescByFqNameWithoutInnerClasses; import static org.jetbrains.jet.codegen.AsmUtil.asmTypeByFqNameWithoutInnerClasses; -import static org.jetbrains.jet.codegen.JvmSerializationBindings.METHOD_FOR_FUNCTION; import static org.jetbrains.jet.descriptors.serialization.NameSerializationUtil.createNameResolver; import static org.jetbrains.jet.lang.resolve.java.PackageClassUtils.getPackageClassFqName; @@ -167,9 +166,8 @@ public class PackageCodegen extends GenerationStateAware { ) { throw new IllegalStateException("shouldn't be called"); } - }); - - v.getClassBuilder().getSerializationBindings().put(METHOD_FOR_FUNCTION, function, signature.getAsmMethod()); + } + ); } else if (member instanceof DeserializedPropertyDescriptor) { PropertyCodegen propertyCodegen = new PropertyCodegen(