Move utilities from NameSerializationUtil to meaningful places
This commit is contained in:
@@ -62,6 +62,8 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature;
|
||||
import org.jetbrains.kotlin.serialization.ClassData;
|
||||
import org.jetbrains.kotlin.serialization.DescriptorSerializer;
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf;
|
||||
import org.jetbrains.kotlin.serialization.StringTable;
|
||||
import org.jetbrains.kotlin.serialization.deserialization.NameResolver;
|
||||
import org.jetbrains.kotlin.serialization.jvm.BitEncoding;
|
||||
import org.jetbrains.kotlin.types.JetType;
|
||||
import org.jetbrains.kotlin.types.checker.JetTypeChecker;
|
||||
@@ -81,7 +83,6 @@ import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.
|
||||
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
|
||||
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.DiagnosticsPackage.*;
|
||||
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin.NO_ORIGIN;
|
||||
import static org.jetbrains.kotlin.serialization.NameSerializationUtil.createNameResolver;
|
||||
import static org.jetbrains.kotlin.types.Variance.INVARIANT;
|
||||
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
||||
|
||||
@@ -240,7 +241,9 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
|
||||
ProtoBuf.Class classProto = serializer.classProto(descriptor).build();
|
||||
|
||||
ClassData data = new ClassData(createNameResolver(serializer.getStringTable()), classProto);
|
||||
StringTable strings = serializer.getStringTable();
|
||||
NameResolver nameResolver = new NameResolver(strings.serializeSimpleNames(), strings.serializeQualifiedNames());
|
||||
ClassData data = new ClassData(nameResolver, classProto);
|
||||
|
||||
AnnotationVisitor av = v.getVisitor().visitAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_CLASS), true);
|
||||
av.visit(JvmAnnotationNames.ABI_VERSION_FIELD_NAME, JvmAbi.VERSION);
|
||||
|
||||
@@ -52,6 +52,8 @@ import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||
import org.jetbrains.kotlin.serialization.DescriptorSerializer;
|
||||
import org.jetbrains.kotlin.serialization.PackageData;
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf;
|
||||
import org.jetbrains.kotlin.serialization.StringTable;
|
||||
import org.jetbrains.kotlin.serialization.deserialization.NameResolver;
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor;
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor;
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedSimpleFunctionDescriptor;
|
||||
@@ -71,7 +73,6 @@ import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.K_PACKAGE_TYPE;
|
||||
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.getType;
|
||||
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.DiagnosticsPackage.*;
|
||||
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin.NO_ORIGIN;
|
||||
import static org.jetbrains.kotlin.serialization.NameSerializationUtil.createNameResolver;
|
||||
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
||||
|
||||
public class PackageCodegen {
|
||||
@@ -278,7 +279,9 @@ public class PackageCodegen {
|
||||
|
||||
if (packageProto.getMemberCount() == 0) return;
|
||||
|
||||
PackageData data = new PackageData(createNameResolver(serializer.getStringTable()), packageProto);
|
||||
StringTable strings = serializer.getStringTable();
|
||||
NameResolver nameResolver = new NameResolver(strings.serializeSimpleNames(), strings.serializeQualifiedNames());
|
||||
PackageData data = new PackageData(nameResolver, packageProto);
|
||||
|
||||
AnnotationVisitor av = v.newAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_PACKAGE), true);
|
||||
av.visit(JvmAnnotationNames.ABI_VERSION_FIELD_NAME, JvmAbi.VERSION);
|
||||
|
||||
@@ -16,34 +16,35 @@
|
||||
|
||||
package org.jetbrains.kotlin.serialization.builtins
|
||||
|
||||
import java.io.File
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.serialization.*
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import java.io.ByteArrayOutputStream
|
||||
import org.jetbrains.kotlin.builtins.BuiltInsSerializationUtil
|
||||
import com.intellij.openapi.Disposable
|
||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.utils.recursePostOrder
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade
|
||||
import org.jetbrains.kotlin.context.GlobalContext
|
||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters
|
||||
import org.jetbrains.kotlin.analyzer.ModuleContent
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.builtins.BuiltInsSerializationUtil
|
||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.cli.jvm.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.resolve.constants.NullValue
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.context.GlobalContext
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.classId
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.serialization.DescriptorSerializer
|
||||
import org.jetbrains.kotlin.serialization.NameSerializationUtil
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.utils.recursePostOrder
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.File
|
||||
|
||||
public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) {
|
||||
private var totalSize = 0
|
||||
@@ -121,7 +122,7 @@ public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) {
|
||||
val classifierDescriptors = DescriptorSerializer.sort(packageView.getMemberScope().getDescriptors(DescriptorKindFilter.CLASSIFIERS))
|
||||
|
||||
serializeClasses(classifierDescriptors, serializer) {
|
||||
(classDescriptor, classProto) ->
|
||||
classDescriptor, classProto ->
|
||||
val stream = ByteArrayOutputStream()
|
||||
classProto.writeTo(stream)
|
||||
write(destDir, getFileName(classDescriptor), stream)
|
||||
@@ -134,7 +135,8 @@ public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) {
|
||||
write(destDir, BuiltInsSerializationUtil.getPackageFilePath(fqName), packageStream)
|
||||
|
||||
val nameStream = ByteArrayOutputStream()
|
||||
NameSerializationUtil.serializeStringTable(nameStream, serializer.getStringTable())
|
||||
val strings = serializer.getStringTable()
|
||||
NameSerializationUtil.serializeStringTable(nameStream, strings.serializeSimpleNames(), strings.serializeQualifiedNames())
|
||||
write(destDir, BuiltInsSerializationUtil.getStringTableFilePath(fqName), nameStream)
|
||||
}
|
||||
|
||||
|
||||
@@ -25,13 +25,9 @@ import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.serialization.ClassData
|
||||
import org.jetbrains.kotlin.serialization.NameSerializationUtil
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder
|
||||
import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents
|
||||
import org.jetbrains.kotlin.serialization.deserialization.FlexibleTypeCapabilitiesDeserializer
|
||||
import org.jetbrains.kotlin.serialization.deserialization.LocalClassResolverImpl
|
||||
import org.jetbrains.kotlin.serialization.deserialization.*
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import java.io.InputStream
|
||||
@@ -46,13 +42,13 @@ public class BuiltinsPackageFragment(
|
||||
|
||||
private val extensionRegistry: ExtensionRegistryLite
|
||||
|
||||
;{
|
||||
init {
|
||||
extensionRegistry = ExtensionRegistryLite.newInstance()
|
||||
BuiltInsProtoBuf.registerAllExtensions(extensionRegistry)
|
||||
extensionRegistry
|
||||
}
|
||||
|
||||
private val nameResolver = NameSerializationUtil.deserializeNameResolver(
|
||||
private val nameResolver = NameResolver.read(
|
||||
getStream(BuiltInsSerializationUtil.getStringTableFilePath(fqName))
|
||||
)
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ public final class ClassData {
|
||||
public static ClassData read(@NotNull byte[] bytes, @NotNull ExtensionRegistryLite registry) {
|
||||
try {
|
||||
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
|
||||
NameResolver nameResolver = NameSerializationUtil.deserializeNameResolver(in);
|
||||
NameResolver nameResolver = NameResolver.read(in);
|
||||
ProtoBuf.Class classProto = ProtoBuf.Class.parseFrom(in, registry);
|
||||
return new ClassData(nameResolver, classProto);
|
||||
}
|
||||
@@ -40,7 +40,6 @@ public final class ClassData {
|
||||
}
|
||||
|
||||
private final NameResolver nameResolver;
|
||||
|
||||
private final ProtoBuf.Class classProto;
|
||||
|
||||
public ClassData(@NotNull NameResolver nameResolver, @NotNull ProtoBuf.Class classProto) {
|
||||
|
||||
+1
-41
@@ -21,34 +21,17 @@ import org.jetbrains.kotlin.serialization.deserialization.NameResolver;
|
||||
import org.jetbrains.kotlin.utils.UtilsPackage;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
|
||||
public class NameSerializationUtil {
|
||||
private NameSerializationUtil() {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static NameResolver deserializeNameResolver(@NotNull InputStream in) {
|
||||
try {
|
||||
ProtoBuf.StringTable simpleNames = ProtoBuf.StringTable.parseDelimitedFrom(in);
|
||||
ProtoBuf.QualifiedNameTable qualifiedNames = ProtoBuf.QualifiedNameTable.parseDelimitedFrom(in);
|
||||
return new NameResolver(simpleNames, qualifiedNames);
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw UtilsPackage.rethrow(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void serializeNameResolver(@NotNull OutputStream out, @NotNull NameResolver nameResolver) {
|
||||
serializeStringTable(out, nameResolver.getStringTable(), nameResolver.getQualifiedNameTable());
|
||||
}
|
||||
|
||||
public static void serializeStringTable(@NotNull OutputStream out, @NotNull StringTable stringTable) {
|
||||
serializeStringTable(out, toStringTable(stringTable), toQualifiedNameTable(stringTable));
|
||||
}
|
||||
|
||||
private static void serializeStringTable(
|
||||
public static void serializeStringTable(
|
||||
@NotNull OutputStream out,
|
||||
@NotNull ProtoBuf.StringTable stringTable,
|
||||
@NotNull ProtoBuf.QualifiedNameTable qualifiedNameTable
|
||||
@@ -61,27 +44,4 @@ public class NameSerializationUtil {
|
||||
throw UtilsPackage.rethrow(e);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static ProtoBuf.StringTable toStringTable(@NotNull StringTable stringTable) {
|
||||
ProtoBuf.StringTable.Builder simpleNames = ProtoBuf.StringTable.newBuilder();
|
||||
for (String simpleName : stringTable.getStrings()) {
|
||||
simpleNames.addString(simpleName);
|
||||
}
|
||||
return simpleNames.build();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static ProtoBuf.QualifiedNameTable toQualifiedNameTable(@NotNull StringTable stringTable) {
|
||||
ProtoBuf.QualifiedNameTable.Builder qualifiedNames = ProtoBuf.QualifiedNameTable.newBuilder();
|
||||
for (ProtoBuf.QualifiedNameTable.QualifiedName.Builder qName : stringTable.getFqNames()) {
|
||||
qualifiedNames.addQualifiedName(qName);
|
||||
}
|
||||
return qualifiedNames.build();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static NameResolver createNameResolver(@NotNull StringTable table) {
|
||||
return new NameResolver(toStringTable(table), toQualifiedNameTable(table));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public final class PackageData {
|
||||
public static PackageData read(@NotNull byte[] bytes, @NotNull ExtensionRegistryLite registry) {
|
||||
try {
|
||||
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
|
||||
NameResolver nameResolver = NameSerializationUtil.deserializeNameResolver(in);
|
||||
NameResolver nameResolver = NameResolver.read(in);
|
||||
ProtoBuf.Package packageProto = ProtoBuf.Package.parseFrom(in, registry);
|
||||
return new PackageData(nameResolver, packageProto);
|
||||
}
|
||||
@@ -40,7 +40,6 @@ public final class PackageData {
|
||||
}
|
||||
|
||||
private final NameResolver nameResolver;
|
||||
|
||||
private final ProtoBuf.Package packageProto;
|
||||
|
||||
public PackageData(@NotNull NameResolver nameResolver, @NotNull ProtoBuf.Package packageProto) {
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.serialization;
|
||||
|
||||
import kotlin.Function1;
|
||||
import kotlin.KotlinPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.ClassOrPackageFragmentDescriptor;
|
||||
@@ -26,8 +24,6 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.jetbrains.kotlin.serialization.ProtoBuf.QualifiedNameTable.QualifiedName;
|
||||
|
||||
public class StringTable {
|
||||
@@ -66,21 +62,6 @@ public class StringTable {
|
||||
this.extension = extension;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<String> getStrings() {
|
||||
return strings.getAllInternedObjects();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<QualifiedName.Builder> getFqNames() {
|
||||
return KotlinPackage.map(qualifiedNames.getAllInternedObjects(), new Function1<FqNameProto, QualifiedName.Builder>() {
|
||||
@Override
|
||||
public QualifiedName.Builder invoke(FqNameProto proto) {
|
||||
return proto.fqName;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public int getSimpleNameIndex(@NotNull Name name) {
|
||||
return getStringIndex(name.asString());
|
||||
}
|
||||
@@ -136,4 +117,22 @@ public class StringTable {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public ProtoBuf.StringTable serializeSimpleNames() {
|
||||
ProtoBuf.StringTable.Builder builder = ProtoBuf.StringTable.newBuilder();
|
||||
for (String simpleName : strings.getAllInternedObjects()) {
|
||||
builder.addString(simpleName);
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public ProtoBuf.QualifiedNameTable serializeQualifiedNames() {
|
||||
ProtoBuf.QualifiedNameTable.Builder builder = ProtoBuf.QualifiedNameTable.newBuilder();
|
||||
for (FqNameProto fqName : qualifiedNames.getAllInternedObjects()) {
|
||||
builder.addQualifiedName(fqName.fqName);
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
}
|
||||
|
||||
+15
@@ -21,12 +21,27 @@ import org.jetbrains.kotlin.name.ClassId;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf;
|
||||
import org.jetbrains.kotlin.utils.UtilsPackage;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import static org.jetbrains.kotlin.serialization.ProtoBuf.QualifiedNameTable.QualifiedName;
|
||||
|
||||
public class NameResolver {
|
||||
@NotNull
|
||||
public static NameResolver read(@NotNull InputStream in) {
|
||||
try {
|
||||
ProtoBuf.StringTable simpleNames = ProtoBuf.StringTable.parseDelimitedFrom(in);
|
||||
ProtoBuf.QualifiedNameTable qualifiedNames = ProtoBuf.QualifiedNameTable.parseDelimitedFrom(in);
|
||||
return new NameResolver(simpleNames, qualifiedNames);
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw UtilsPackage.rethrow(e);
|
||||
}
|
||||
}
|
||||
|
||||
private final ProtoBuf.StringTable strings;
|
||||
private final ProtoBuf.QualifiedNameTable qualifiedNames;
|
||||
|
||||
|
||||
+6
-6
@@ -39,8 +39,10 @@ public class KotlinJavaScriptSerializer() {
|
||||
val contentMap = hashMapOf<String, ByteArray>()
|
||||
|
||||
DescriptorUtils.getPackagesFqNames(moduleDescriptor).forEach {
|
||||
fqName -> serializePackage(moduleDescriptor, fqName) {
|
||||
(fileName, stream) -> contentMap[fileName] = stream.toByteArray()
|
||||
fqName ->
|
||||
serializePackage(moduleDescriptor, fqName) {
|
||||
fileName, stream ->
|
||||
contentMap[fileName] = stream.toByteArray()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,9 +53,6 @@ public class KotlinJavaScriptSerializer() {
|
||||
fun serializePackage(module: ModuleDescriptor, fqName: FqName, writeFun: (String, ByteArrayOutputStream) -> Unit) {
|
||||
val packageView = module.getPackage(fqName) ?: error("No package resolved in $module")
|
||||
|
||||
// TODO: perform some kind of validation? At the moment not possible because DescriptorValidator is in compiler-tests
|
||||
// DescriptorValidator.validate(packageView)
|
||||
|
||||
val skip: (DeclarationDescriptor) -> Boolean = { DescriptorUtils.getContainingModule(it) != module}
|
||||
|
||||
val serializer = DescriptorSerializer.createTopLevel(BuiltInsSerializerExtension)
|
||||
@@ -75,7 +74,8 @@ public class KotlinJavaScriptSerializer() {
|
||||
writeFun(BuiltInsSerializationUtil.getPackageFilePath(fqName), packageStream)
|
||||
|
||||
val nameStream = ByteArrayOutputStream()
|
||||
NameSerializationUtil.serializeStringTable(nameStream, serializer.getStringTable())
|
||||
val strings = serializer.getStringTable()
|
||||
NameSerializationUtil.serializeStringTable(nameStream, strings.serializeSimpleNames(), strings.serializeQualifiedNames())
|
||||
writeFun(BuiltInsSerializationUtil.getStringTableFilePath(fqName), nameStream)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user