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.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();
@@ -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(