Unified copying of property and method proto data.

This commit is contained in:
Evgeny Gerashchenko
2014-02-19 23:25:44 +04:00
parent 733de56178
commit 9f8a16fb1a
2 changed files with 24 additions and 7 deletions
@@ -23,6 +23,7 @@ import org.jetbrains.asm4.Type;
import org.jetbrains.asm4.commons.Method; import org.jetbrains.asm4.commons.Method;
import org.jetbrains.jet.descriptors.serialization.*; import org.jetbrains.jet.descriptors.serialization.*;
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPropertyDescriptor; 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.descriptors.*;
import org.jetbrains.jet.lang.resolve.kotlin.SignatureDeserializer; import org.jetbrains.jet.lang.resolve.kotlin.SignatureDeserializer;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -68,9 +69,18 @@ public class JavaSerializerExtension extends SerializerExtension {
) { ) {
SignatureSerializer signatureSerializer = new SignatureSerializer(nameTable); SignatureSerializer signatureSerializer = new SignatureSerializer(nameTable);
if (callable instanceof FunctionDescriptor) { if (callable instanceof FunctionDescriptor) {
Method method = bindings.get(METHOD_FOR_FUNCTION, (FunctionDescriptor) callable); JavaProtoBuf.JavaMethodSignature signature;
if (method != null) { if (callable instanceof DeserializedSimpleFunctionDescriptor) {
proto.setExtension(JavaProtoBuf.methodSignature, signatureSerializer.methodSignature(method)); 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) { else if (callable instanceof PropertyDescriptor) {
@@ -133,6 +143,15 @@ public class JavaSerializerExtension extends SerializerExtension {
this.nameTable = nameTable; 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 @NotNull
public JavaProtoBuf.JavaMethodSignature methodSignature(@NotNull Method method) { public JavaProtoBuf.JavaMethodSignature methodSignature(@NotNull Method method) {
JavaProtoBuf.JavaMethodSignature.Builder signature = JavaProtoBuf.JavaMethodSignature.newBuilder(); JavaProtoBuf.JavaMethodSignature.Builder signature = JavaProtoBuf.JavaMethodSignature.newBuilder();
@@ -65,7 +65,6 @@ import java.util.*;
import static org.jetbrains.asm4.Opcodes.*; import static org.jetbrains.asm4.Opcodes.*;
import static org.jetbrains.jet.codegen.AsmUtil.asmDescByFqNameWithoutInnerClasses; import static org.jetbrains.jet.codegen.AsmUtil.asmDescByFqNameWithoutInnerClasses;
import static org.jetbrains.jet.codegen.AsmUtil.asmTypeByFqNameWithoutInnerClasses; 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.descriptors.serialization.NameSerializationUtil.createNameResolver;
import static org.jetbrains.jet.lang.resolve.java.PackageClassUtils.getPackageClassFqName; 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"); throw new IllegalStateException("shouldn't be called");
} }
}); }
);
v.getClassBuilder().getSerializationBindings().put(METHOD_FOR_FUNCTION, function, signature.getAsmMethod());
} }
else if (member instanceof DeserializedPropertyDescriptor) { else if (member instanceof DeserializedPropertyDescriptor) {
PropertyCodegen propertyCodegen = new PropertyCodegen( PropertyCodegen propertyCodegen = new PropertyCodegen(