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.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(
|
||||||
|
|||||||
Reference in New Issue
Block a user