Minor, move byte arrays logic to ClassData/PackageData
This commit is contained in:
@@ -41,7 +41,9 @@ 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.*;
|
import org.jetbrains.jet.descriptors.serialization.ClassData;
|
||||||
|
import org.jetbrains.jet.descriptors.serialization.DescriptorSerializer;
|
||||||
|
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
@@ -61,16 +63,14 @@ import org.jetbrains.jet.lang.types.JetType;
|
|||||||
import org.jetbrains.jet.lang.types.TypeUtils;
|
import org.jetbrains.jet.lang.types.TypeUtils;
|
||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
import org.jetbrains.jet.lexer.JetTokens;
|
import org.jetbrains.jet.lexer.JetTokens;
|
||||||
import org.jetbrains.jet.utils.ExceptionUtils;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static org.jetbrains.asm4.Opcodes.*;
|
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.NameSerializationUtil.createNameResolver;
|
||||||
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.*;
|
||||||
@@ -220,26 +220,14 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void writeKotlinInfo() {
|
private void writeKotlinInfo() {
|
||||||
AnnotationVisitor av = v.getVisitor().visitAnnotation(JvmStdlibNames.KOTLIN_INFO_CLASS.getDescriptor(), true);
|
|
||||||
|
|
||||||
DescriptorSerializer serializer = new DescriptorSerializer(new JavaSerializerExtension(typeMapper));
|
DescriptorSerializer serializer = new DescriptorSerializer(new JavaSerializerExtension(typeMapper));
|
||||||
|
|
||||||
ProtoBuf.Class classProto = serializer.classProto(descriptor).build();
|
ProtoBuf.Class classProto = serializer.classProto(descriptor).build();
|
||||||
|
|
||||||
try {
|
ClassData data = new ClassData(createNameResolver(serializer.getNameTable()), classProto);
|
||||||
ByteArrayOutputStream classStream = new ByteArrayOutputStream();
|
|
||||||
classProto.writeTo(classStream);
|
|
||||||
|
|
||||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
||||||
NameSerializationUtil.serializeNameTable(out, serializer.getNameTable());
|
|
||||||
out.write(classStream.toByteArray());
|
|
||||||
|
|
||||||
av.visit("data", out.toByteArray());
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
throw ExceptionUtils.rethrow(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
AnnotationVisitor av = v.getVisitor().visitAnnotation(JvmStdlibNames.KOTLIN_INFO_CLASS.getDescriptor(), true);
|
||||||
|
av.visit("data", data.toBytes());
|
||||||
av.visitEnd();
|
av.visitEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import org.jetbrains.jet.codegen.context.CodegenContext;
|
|||||||
import org.jetbrains.jet.codegen.context.FieldOwnerContext;
|
import org.jetbrains.jet.codegen.context.FieldOwnerContext;
|
||||||
import org.jetbrains.jet.codegen.state.GenerationState;
|
import org.jetbrains.jet.codegen.state.GenerationState;
|
||||||
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.PackageData;
|
||||||
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
|
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||||
@@ -45,15 +45,13 @@ import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames;
|
|||||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.utils.ExceptionUtils;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.jetbrains.asm4.Opcodes.*;
|
import static org.jetbrains.asm4.Opcodes.*;
|
||||||
|
import static org.jetbrains.jet.descriptors.serialization.NameSerializationUtil.createNameResolver;
|
||||||
import static org.jetbrains.jet.lang.resolve.BindingContext.DECLARATION_TO_DESCRIPTOR;
|
import static org.jetbrains.jet.lang.resolve.BindingContext.DECLARATION_TO_DESCRIPTOR;
|
||||||
import static org.jetbrains.jet.lang.resolve.BindingContextUtils.getNotNull;
|
import static org.jetbrains.jet.lang.resolve.BindingContextUtils.getNotNull;
|
||||||
|
|
||||||
@@ -160,19 +158,11 @@ public class NamespaceCodegen extends MemberCodegen {
|
|||||||
|
|
||||||
if (!writeAnnotation) return;
|
if (!writeAnnotation) return;
|
||||||
|
|
||||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
PackageData data = new PackageData(createNameResolver(serializer.getNameTable()), packageProto.build());
|
||||||
|
|
||||||
NameSerializationUtil.serializeNameTable(stream, serializer.getNameTable());
|
AnnotationVisitor av = v.getClassBuilder().newAnnotation(JvmStdlibNames.KOTLIN_INFO_CLASS.getDescriptor(), true);
|
||||||
try {
|
av.visit("data", data.toBytes());
|
||||||
packageProto.build().writeTo(stream);
|
av.visitEnd();
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
throw ExceptionUtils.rethrow(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
AnnotationVisitor kotlinInfo = v.getClassBuilder().newAnnotation(JvmStdlibNames.KOTLIN_INFO_CLASS.getDescriptor(), true);
|
|
||||||
kotlinInfo.visit("data", stream.toByteArray());
|
|
||||||
kotlinInfo.visitEnd();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generate(JetFile file) {
|
private void generate(JetFile file) {
|
||||||
|
|||||||
+14
@@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.jet.utils.ExceptionUtils;
|
import org.jetbrains.jet.utils.ExceptionUtils;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public final class ClassData {
|
public final class ClassData {
|
||||||
@@ -55,4 +56,17 @@ public final class ClassData {
|
|||||||
public ProtoBuf.Class getClassProto() {
|
public ProtoBuf.Class getClassProto() {
|
||||||
return classProto;
|
return classProto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public byte[] toBytes() {
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream result = new ByteArrayOutputStream();
|
||||||
|
NameSerializationUtil.serializeNameResolver(result, nameResolver);
|
||||||
|
classProto.writeTo(result);
|
||||||
|
return result.toByteArray();
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
throw ExceptionUtils.rethrow(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+10
@@ -36,6 +36,16 @@ public class NameResolver {
|
|||||||
this.qualifiedNames = qualifiedNames;
|
this.qualifiedNames = qualifiedNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public ProtoBuf.SimpleNameTable getSimpleNameTable() {
|
||||||
|
return simpleNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public ProtoBuf.QualifiedNameTable getQualifiedNameTable() {
|
||||||
|
return qualifiedNames;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Name getName(int index) {
|
public Name getName(int index) {
|
||||||
String name = simpleNames.getName(index);
|
String name = simpleNames.getName(index);
|
||||||
|
|||||||
+15
-8
@@ -39,12 +39,21 @@ public class NameSerializationUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void serializeNameTable(@NotNull OutputStream out, @NotNull NameTable nameTable) {
|
public static void serializeNameResolver(@NotNull OutputStream out, @NotNull NameResolver nameResolver) {
|
||||||
try {
|
serializeNameTable(out, nameResolver.getSimpleNameTable(), nameResolver.getQualifiedNameTable());
|
||||||
ProtoBuf.SimpleNameTable simpleNamesProto = toSimpleNameTable(nameTable);
|
}
|
||||||
simpleNamesProto.writeDelimitedTo(out);
|
|
||||||
|
|
||||||
ProtoBuf.QualifiedNameTable qualifiedNameTable = toQualifiedNameTable(nameTable);
|
public static void serializeNameTable(@NotNull OutputStream out, @NotNull NameTable nameTable) {
|
||||||
|
serializeNameTable(out, toSimpleNameTable(nameTable), toQualifiedNameTable(nameTable));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void serializeNameTable(
|
||||||
|
@NotNull OutputStream out,
|
||||||
|
@NotNull ProtoBuf.SimpleNameTable simpleNameTable,
|
||||||
|
@NotNull ProtoBuf.QualifiedNameTable qualifiedNameTable
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
simpleNameTable.writeDelimitedTo(out);
|
||||||
qualifiedNameTable.writeDelimitedTo(out);
|
qualifiedNameTable.writeDelimitedTo(out);
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
@@ -72,8 +81,6 @@ public class NameSerializationUtil {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static NameResolver createNameResolver(@NotNull NameTable table) {
|
public static NameResolver createNameResolver(@NotNull NameTable table) {
|
||||||
return new NameResolver(
|
return new NameResolver(toSimpleNameTable(table), toQualifiedNameTable(table));
|
||||||
toSimpleNameTable(table),
|
|
||||||
toQualifiedNameTable(table));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+21
-5
@@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.jet.utils.ExceptionUtils;
|
import org.jetbrains.jet.utils.ExceptionUtils;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public final class PackageData {
|
public final class PackageData {
|
||||||
@@ -41,16 +42,31 @@ public final class PackageData {
|
|||||||
|
|
||||||
private final ProtoBuf.Package packageProto;
|
private final ProtoBuf.Package packageProto;
|
||||||
|
|
||||||
public PackageData(@NotNull NameResolver resolver, @NotNull ProtoBuf.Package proto) {
|
public PackageData(@NotNull NameResolver nameResolver, @NotNull ProtoBuf.Package packageProto) {
|
||||||
nameResolver = resolver;
|
this.nameResolver = nameResolver;
|
||||||
packageProto = proto;
|
this.packageProto = packageProto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public NameResolver getNameResolver() {
|
||||||
|
return nameResolver;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public ProtoBuf.Package getPackageProto() {
|
public ProtoBuf.Package getPackageProto() {
|
||||||
return packageProto;
|
return packageProto;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NameResolver getNameResolver() {
|
@NotNull
|
||||||
return nameResolver;
|
public byte[] toBytes() {
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream result = new ByteArrayOutputStream();
|
||||||
|
NameSerializationUtil.serializeNameResolver(result, nameResolver);
|
||||||
|
packageProto.writeTo(result);
|
||||||
|
return result.toByteArray();
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
throw ExceptionUtils.rethrow(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user