Unified copying of property and method proto data.
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user