Simplify class serialization in codegen
This commit is contained in:
@@ -41,7 +41,6 @@ import org.jetbrains.jet.codegen.signature.kotlin.JetMethodAnnotationWriter;
|
|||||||
import org.jetbrains.jet.codegen.state.GenerationState;
|
import org.jetbrains.jet.codegen.state.GenerationState;
|
||||||
import org.jetbrains.jet.codegen.state.JetTypeMapper;
|
import org.jetbrains.jet.codegen.state.JetTypeMapper;
|
||||||
import org.jetbrains.jet.codegen.state.JetTypeMapperMode;
|
import org.jetbrains.jet.codegen.state.JetTypeMapperMode;
|
||||||
import org.jetbrains.jet.descriptors.serialization.ClassSerializationUtil;
|
|
||||||
import org.jetbrains.jet.descriptors.serialization.DescriptorSerializer;
|
import org.jetbrains.jet.descriptors.serialization.DescriptorSerializer;
|
||||||
import org.jetbrains.jet.descriptors.serialization.NameSerializationUtil;
|
import org.jetbrains.jet.descriptors.serialization.NameSerializationUtil;
|
||||||
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
|
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
|
||||||
@@ -74,7 +73,6 @@ import static org.jetbrains.asm4.Opcodes.*;
|
|||||||
import static org.jetbrains.jet.codegen.AsmUtil.*;
|
import static org.jetbrains.jet.codegen.AsmUtil.*;
|
||||||
import static org.jetbrains.jet.codegen.CodegenUtil.*;
|
import static org.jetbrains.jet.codegen.CodegenUtil.*;
|
||||||
import static org.jetbrains.jet.codegen.binding.CodegenBinding.*;
|
import static org.jetbrains.jet.codegen.binding.CodegenBinding.*;
|
||||||
import static org.jetbrains.jet.descriptors.serialization.ClassSerializationUtil.constantSerializer;
|
|
||||||
import static org.jetbrains.jet.lang.resolve.BindingContextUtils.callableDescriptorToDeclaration;
|
import static org.jetbrains.jet.lang.resolve.BindingContextUtils.callableDescriptorToDeclaration;
|
||||||
import static org.jetbrains.jet.lang.resolve.BindingContextUtils.descriptorToDeclaration;
|
import static org.jetbrains.jet.lang.resolve.BindingContextUtils.descriptorToDeclaration;
|
||||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
|
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
|
||||||
@@ -227,33 +225,22 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
AnnotationVisitor av = v.getVisitor().visitAnnotation(JvmStdlibNames.KOTLIN_INFO_CLASS.getDescriptor(), true);
|
AnnotationVisitor av = v.getVisitor().visitAnnotation(JvmStdlibNames.KOTLIN_INFO_CLASS.getDescriptor(), true);
|
||||||
DescriptorSerializer serializer = new DescriptorSerializer();
|
DescriptorSerializer serializer = new DescriptorSerializer();
|
||||||
|
|
||||||
final ByteArrayOutputStream classStream = new ByteArrayOutputStream();
|
ProtoBuf.Class classProto = serializer.classProto(descriptor).build();
|
||||||
|
|
||||||
ClassSerializationUtil.serializeClass(descriptor, constantSerializer(serializer), new ClassSerializationUtil.Sink() {
|
|
||||||
@Override
|
|
||||||
public void writeClass(@NotNull ClassDescriptor classDescriptor, @NotNull ProtoBuf.Class classProto) {
|
|
||||||
if (classDescriptor == descriptor) {
|
|
||||||
try {
|
|
||||||
classProto.writeTo(classStream);
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
throw ExceptionUtils.rethrow(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
||||||
NameSerializationUtil.serializeNameTable(out, serializer.getNameTable());
|
|
||||||
try {
|
try {
|
||||||
|
ByteArrayOutputStream classStream = new ByteArrayOutputStream();
|
||||||
|
classProto.writeTo(classStream);
|
||||||
|
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
NameSerializationUtil.serializeNameTable(out, serializer.getNameTable());
|
||||||
out.write(classStream.toByteArray());
|
out.write(classStream.toByteArray());
|
||||||
|
|
||||||
|
av.visit("data", out.toByteArray());
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
throw ExceptionUtils.rethrow(e);
|
throw ExceptionUtils.rethrow(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
av.visit("data", out.toByteArray());
|
|
||||||
|
|
||||||
av.visitEnd();
|
av.visitEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user