Store .kotlin_module files in MetadataSerializer

Compilation of top level functions/properties/typealiases results in a bunch of
different .kotlin_metadata files, so we need to store names of these files to
avoid scanning the file system in the compiler when loading code compiled by
K2MetadataCompiler.

For this, we reuse the PackageTable protobuf message, which is already used for
exactly the same purpose in the JVM back-end
This commit is contained in:
Alexander Udalov
2016-11-14 12:31:00 +03:00
parent 1d71c19b42
commit 32792c5ce4
8 changed files with 1215 additions and 74 deletions
File diff suppressed because it is too large Load Diff
@@ -19,9 +19,7 @@ package org.jetbrains.kotlin.codegen;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
import com.intellij.util.Function; import com.intellij.util.Function;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.io.DataOutputStream;
import kotlin.collections.CollectionsKt; import kotlin.collections.CollectionsKt;
import kotlin.collections.MapsKt; import kotlin.collections.MapsKt;
import kotlin.jvm.functions.Function0; import kotlin.jvm.functions.Function0;
@@ -31,7 +29,6 @@ import org.jetbrains.annotations.TestOnly;
import org.jetbrains.kotlin.backend.common.output.OutputFile; import org.jetbrains.kotlin.backend.common.output.OutputFile;
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection; import org.jetbrains.kotlin.backend.common.output.OutputFileCollection;
import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.codegen.state.GenerationState;
import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion;
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils; import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils;
import org.jetbrains.kotlin.load.kotlin.PackageParts; import org.jetbrains.kotlin.load.kotlin.PackageParts;
import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.FqName;
@@ -40,9 +37,7 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin;
import org.jetbrains.kotlin.serialization.jvm.JvmPackageTable; import org.jetbrains.kotlin.serialization.jvm.JvmPackageTable;
import org.jetbrains.org.objectweb.asm.Type; import org.jetbrains.org.objectweb.asm.Type;
import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.*; import java.util.*;
@@ -100,47 +95,28 @@ public class ClassFileFactory implements OutputFileCollection {
final JvmPackageTable.PackageTable.Builder builder = JvmPackageTable.PackageTable.newBuilder(); final JvmPackageTable.PackageTable.Builder builder = JvmPackageTable.PackageTable.newBuilder();
String outputFilePath = getMappingFileName(state.getModuleName()); String outputFilePath = getMappingFileName(state.getModuleName());
List<PackageParts> parts = new SmartList<PackageParts>(partsGroupedByPackage.values()); for (PackageParts part : ClassFileUtilsKt.addCompiledPartsAndSort(partsGroupedByPackage.values(), state)) {
part.addTo(builder);
for (PackageParts part : ClassFileUtilsKt.addCompiledPartsAndSort(parts, state)) {
PackageParts.Companion.serialize(part, builder);
} }
if (builder.getPackagePartsCount() != 0) { if (builder.getPackagePartsCount() == 0) return;
generators.put(outputFilePath, new OutAndSourceFileList(CollectionsKt.toList(packagePartSourceFiles)) {
@Override
public byte[] asBytes(ClassBuilderFactory factory) {
try {
ByteArrayOutputStream moduleMapping = new ByteArrayOutputStream(4096);
DataOutputStream dataOutStream = new DataOutputStream(moduleMapping);
int[] version = JvmMetadataVersion.INSTANCE.toArray();
dataOutStream.writeInt(version.length);
for (int number : version) {
dataOutStream.writeInt(number);
}
builder.build().writeTo(dataOutStream);
dataOutStream.flush();
return moduleMapping.toByteArray();
}
catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override generators.put(outputFilePath, new OutAndSourceFileList(CollectionsKt.toList(packagePartSourceFiles)) {
public String asText(ClassBuilderFactory factory) { @Override
try { public byte[] asBytes(ClassBuilderFactory factory) {
return new String(asBytes(factory), "UTF-8"); return ClassFileUtilsKt.serializeToByteArray(builder);
} }
catch (UnsupportedEncodingException e) {
throw new RuntimeException(e); @Override
} public String asText(ClassBuilderFactory factory) {
try {
return new String(asBytes(factory), "UTF-8");
} }
}); catch (UnsupportedEncodingException e) {
} throw new RuntimeException(e);
}
}
});
} }
@NotNull @NotNull
@@ -16,10 +16,14 @@
package org.jetbrains.kotlin.codegen package org.jetbrains.kotlin.codegen
import com.intellij.util.io.DataOutputStream
import org.jetbrains.kotlin.backend.common.output.OutputFile import org.jetbrains.kotlin.backend.common.output.OutputFile
import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion
import org.jetbrains.kotlin.load.kotlin.ModuleMapping import org.jetbrains.kotlin.load.kotlin.ModuleMapping
import org.jetbrains.kotlin.load.kotlin.PackageParts import org.jetbrains.kotlin.load.kotlin.PackageParts
import org.jetbrains.kotlin.serialization.jvm.JvmPackageTable
import java.io.ByteArrayOutputStream
fun ClassFileFactory.getClassFiles(): Iterable<OutputFile> { fun ClassFileFactory.getClassFiles(): Iterable<OutputFile> {
return asList().filterClassFiles() return asList().filterClassFiles()
@@ -29,12 +33,12 @@ fun List<OutputFile>.filterClassFiles(): Iterable<OutputFile> {
return filter { it.relativePath.endsWith(".class") } return filter { it.relativePath.endsWith(".class") }
} }
fun List<PackageParts>.addCompiledPartsAndSort(state: GenerationState): List<PackageParts> = fun Iterable<PackageParts>.addCompiledPartsAndSort(state: GenerationState): List<PackageParts> =
addCompiledParts(state).sortedBy { it.packageFqName } addCompiledParts(state).sortedBy { it.packageFqName }
private fun List<PackageParts>.addCompiledParts(state: GenerationState): List<PackageParts> { private fun Iterable<PackageParts>.addCompiledParts(state: GenerationState): List<PackageParts> {
val incrementalCache = state.incrementalCacheForThisTarget ?: return this val incrementalCache = state.incrementalCacheForThisTarget ?: return this.toList()
val moduleMappingData = incrementalCache.getModuleMappingData() ?: return this val moduleMappingData = incrementalCache.getModuleMappingData() ?: return this.toList()
val mapping = ModuleMapping.create(moduleMappingData, "<incremental>") val mapping = ModuleMapping.create(moduleMappingData, "<incremental>")
@@ -54,3 +58,16 @@ private fun List<PackageParts>.addCompiledParts(state: GenerationState): List<Pa
newPackageParts newPackageParts
} }
} }
fun JvmPackageTable.PackageTable.Builder.serializeToByteArray(): ByteArray {
val moduleMapping = ByteArrayOutputStream(4096)
val out = DataOutputStream(moduleMapping)
val version = JvmMetadataVersion.INSTANCE.toArray()
out.writeInt(version.size)
for (number in version) {
out.writeInt(number)
}
build().writeTo(out)
out.flush()
return moduleMapping.toByteArray()
}
@@ -12,6 +12,7 @@
<orderEntry type="module" module-name="cli" /> <orderEntry type="module" module-name="cli" />
<orderEntry type="module" module-name="frontend.java" /> <orderEntry type="module" module-name="frontend.java" />
<orderEntry type="module" module-name="serialization" /> <orderEntry type="module" module-name="serialization" />
<orderEntry type="module" module-name="backend" />
<orderEntry type="module" module-name="util" /> <orderEntry type="module" module-name="util" />
</component> </component>
</module> </module>
@@ -24,12 +24,15 @@ import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.codegen.JvmCodegenUtil
import org.jetbrains.kotlin.codegen.serializeToByteArray
import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
import org.jetbrains.kotlin.load.kotlin.PackageParts
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -38,6 +41,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf import org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf
import org.jetbrains.kotlin.serialization.builtins.BuiltInsSerializerExtension import org.jetbrains.kotlin.serialization.builtins.BuiltInsSerializerExtension
import org.jetbrains.kotlin.serialization.jvm.JvmPackageTable
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.io.DataOutputStream import java.io.DataOutputStream
import java.io.File import java.io.File
@@ -72,6 +76,8 @@ open class MetadataSerializer(private val dependOnOldBuiltIns: Boolean) {
protected open fun performSerialization( protected open fun performSerialization(
files: Collection<KtFile>, bindingContext: BindingContext, module: ModuleDescriptor, destDir: File files: Collection<KtFile>, bindingContext: BindingContext, module: ModuleDescriptor, destDir: File
) { ) {
val packageTable = hashMapOf<FqName, PackageParts>()
for (file in files) { for (file in files) {
val packageFqName = file.packageFqName val packageFqName = file.packageFqName
val members = arrayListOf<DeclarationDescriptor>() val members = arrayListOf<DeclarationDescriptor>()
@@ -100,10 +106,24 @@ open class MetadataSerializer(private val dependOnOldBuiltIns: Boolean) {
} }
}) })
} }
// TODO (!): store list of all such files somewhere
val destFile = File(destDir, getPackageFilePath(packageFqName, file.name)) if (members.isNotEmpty()) {
PackageSerializer(emptyList(), members, packageFqName, destFile).run() val destFile = File(destDir, getPackageFilePath(packageFqName, file.name))
PackageSerializer(emptyList(), members, packageFqName, destFile).run()
packageTable.getOrPut(packageFqName) { PackageParts(packageFqName.asString()) }.metadataParts.add(destFile.nameWithoutExtension)
}
} }
val kotlinModuleFile = File(destDir, JvmCodegenUtil.getMappingFileName(JvmCodegenUtil.getModuleName(module)))
val packageTableBytes = JvmPackageTable.PackageTable.newBuilder().apply {
for (table in packageTable.values) {
table.addTo(this)
}
}.serializeToByteArray()
kotlinModuleFile.parentFile.mkdirs()
kotlinModuleFile.writeBytes(packageTableBytes)
} }
private fun getPackageFilePath(packageFqName: FqName, fileName: String): String = private fun getPackageFilePath(packageFqName: FqName, fileName: String): String =
@@ -20,10 +20,16 @@ option java_outer_classname = "JvmPackageTable";
option optimize_for = LITE_RUNTIME; option optimize_for = LITE_RUNTIME;
message PackageTable { message PackageTable {
// Names of .class files for each package
repeated PackageParts package_parts = 1; repeated PackageParts package_parts = 1;
// Names of .kotlin_metadata files for each package
repeated PackageParts metadata_parts = 2;
} }
message PackageParts { message PackageParts {
required string package_fq_name = 1; required string package_fq_name = 1;
// Short names of files, without extension, present in this package
repeated string class_name = 2; repeated string class_name = 2;
} }
@@ -66,26 +66,32 @@ class ModuleMapping private constructor(val packageFqName2Parts: Map<String, Pac
} }
class PackageParts(val packageFqName: String) { class PackageParts(val packageFqName: String) {
// See JvmPackageTable.PackageTable.package_parts
val parts = linkedSetOf<String>() val parts = linkedSetOf<String>()
// See JvmPackageTable.PackageTable.metadata_parts
val metadataParts = linkedSetOf<String>()
override fun equals(other: Any?) = fun addTo(builder: JvmPackageTable.PackageTable.Builder) {
other is PackageParts && other.packageFqName == packageFqName && other.parts == parts if (parts.isNotEmpty()) {
builder.addPackageParts(JvmPackageTable.PackageParts.newBuilder().apply {
override fun hashCode() = packageFqName = this@PackageParts.packageFqName
packageFqName.hashCode() * 31 + parts.hashCode() addAllClassName(parts.sorted())
})
override fun toString() = }
parts.toString() if (metadataParts.isNotEmpty()) {
builder.addMetadataParts(JvmPackageTable.PackageParts.newBuilder().apply {
companion object { packageFqName = this@PackageParts.packageFqName
@JvmStatic addAllClassName(metadataParts.sorted())
fun PackageParts.serialize(builder: JvmPackageTable.PackageTable.Builder) { })
if (this.parts.isNotEmpty()) {
val packageParts = JvmPackageTable.PackageParts.newBuilder()
packageParts.packageFqName = this.packageFqName
packageParts.addAllClassName(this.parts.sorted())
builder.addPackageParts(packageParts)
}
} }
} }
override fun equals(other: Any?) =
other is PackageParts && other.packageFqName == packageFqName && other.parts == parts && other.metadataParts == metadataParts
override fun hashCode() =
(packageFqName.hashCode() * 31 + parts.hashCode()) * 31 + metadataParts.hashCode()
override fun toString() =
(parts + metadataParts).toString()
} }
@@ -14,17 +14,55 @@ public final class JvmPackageTable {
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
java.util.List<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> java.util.List<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts>
getPackagePartsList(); getPackagePartsList();
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getPackageParts(int index); org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getPackageParts(int index);
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
int getPackagePartsCount(); int getPackagePartsCount();
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
java.util.List<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts>
getMetadataPartsList();
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getMetadataParts(int index);
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
int getMetadataPartsCount();
} }
/** /**
* Protobuf type {@code org.jetbrains.kotlin.serialization.jvm.PackageTable} * Protobuf type {@code org.jetbrains.kotlin.serialization.jvm.PackageTable}
@@ -84,6 +122,14 @@ public final class JvmPackageTable {
packageParts_.add(input.readMessage(org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.PARSER, extensionRegistry)); packageParts_.add(input.readMessage(org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.PARSER, extensionRegistry));
break; break;
} }
case 18: {
if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
metadataParts_ = new java.util.ArrayList<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts>();
mutable_bitField0_ |= 0x00000002;
}
metadataParts_.add(input.readMessage(org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.PARSER, extensionRegistry));
break;
}
} }
} }
} catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) { } catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) {
@@ -95,6 +141,9 @@ public final class JvmPackageTable {
if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) { if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
packageParts_ = java.util.Collections.unmodifiableList(packageParts_); packageParts_ = java.util.Collections.unmodifiableList(packageParts_);
} }
if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
metadataParts_ = java.util.Collections.unmodifiableList(metadataParts_);
}
try { try {
unknownFieldsCodedOutput.flush(); unknownFieldsCodedOutput.flush();
} catch (java.io.IOException e) { } catch (java.io.IOException e) {
@@ -124,12 +173,20 @@ public final class JvmPackageTable {
private java.util.List<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> packageParts_; private java.util.List<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> packageParts_;
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public java.util.List<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> getPackagePartsList() { public java.util.List<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> getPackagePartsList() {
return packageParts_; return packageParts_;
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public java.util.List<? extends org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackagePartsOrBuilder> public java.util.List<? extends org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackagePartsOrBuilder>
getPackagePartsOrBuilderList() { getPackagePartsOrBuilderList() {
@@ -137,26 +194,94 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public int getPackagePartsCount() { public int getPackagePartsCount() {
return packageParts_.size(); return packageParts_.size();
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getPackageParts(int index) { public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getPackageParts(int index) {
return packageParts_.get(index); return packageParts_.get(index);
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackagePartsOrBuilder getPackagePartsOrBuilder( public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackagePartsOrBuilder getPackagePartsOrBuilder(
int index) { int index) {
return packageParts_.get(index); return packageParts_.get(index);
} }
public static final int METADATA_PARTS_FIELD_NUMBER = 2;
private java.util.List<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> metadataParts_;
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public java.util.List<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> getMetadataPartsList() {
return metadataParts_;
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public java.util.List<? extends org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackagePartsOrBuilder>
getMetadataPartsOrBuilderList() {
return metadataParts_;
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public int getMetadataPartsCount() {
return metadataParts_.size();
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getMetadataParts(int index) {
return metadataParts_.get(index);
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackagePartsOrBuilder getMetadataPartsOrBuilder(
int index) {
return metadataParts_.get(index);
}
private void initFields() { private void initFields() {
packageParts_ = java.util.Collections.emptyList(); packageParts_ = java.util.Collections.emptyList();
metadataParts_ = java.util.Collections.emptyList();
} }
private byte memoizedIsInitialized = -1; private byte memoizedIsInitialized = -1;
public final boolean isInitialized() { public final boolean isInitialized() {
@@ -170,6 +295,12 @@ public final class JvmPackageTable {
return false; return false;
} }
} }
for (int i = 0; i < getMetadataPartsCount(); i++) {
if (!getMetadataParts(i).isInitialized()) {
memoizedIsInitialized = 0;
return false;
}
}
memoizedIsInitialized = 1; memoizedIsInitialized = 1;
return true; return true;
} }
@@ -180,6 +311,9 @@ public final class JvmPackageTable {
for (int i = 0; i < packageParts_.size(); i++) { for (int i = 0; i < packageParts_.size(); i++) {
output.writeMessage(1, packageParts_.get(i)); output.writeMessage(1, packageParts_.get(i));
} }
for (int i = 0; i < metadataParts_.size(); i++) {
output.writeMessage(2, metadataParts_.get(i));
}
output.writeRawBytes(unknownFields); output.writeRawBytes(unknownFields);
} }
@@ -193,6 +327,10 @@ public final class JvmPackageTable {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeMessageSize(1, packageParts_.get(i)); .computeMessageSize(1, packageParts_.get(i));
} }
for (int i = 0; i < metadataParts_.size(); i++) {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeMessageSize(2, metadataParts_.get(i));
}
size += unknownFields.size(); size += unknownFields.size();
memoizedSerializedSize = size; memoizedSerializedSize = size;
return size; return size;
@@ -289,6 +427,8 @@ public final class JvmPackageTable {
super.clear(); super.clear();
packageParts_ = java.util.Collections.emptyList(); packageParts_ = java.util.Collections.emptyList();
bitField0_ = (bitField0_ & ~0x00000001); bitField0_ = (bitField0_ & ~0x00000001);
metadataParts_ = java.util.Collections.emptyList();
bitField0_ = (bitField0_ & ~0x00000002);
return this; return this;
} }
@@ -316,6 +456,11 @@ public final class JvmPackageTable {
bitField0_ = (bitField0_ & ~0x00000001); bitField0_ = (bitField0_ & ~0x00000001);
} }
result.packageParts_ = packageParts_; result.packageParts_ = packageParts_;
if (((bitField0_ & 0x00000002) == 0x00000002)) {
metadataParts_ = java.util.Collections.unmodifiableList(metadataParts_);
bitField0_ = (bitField0_ & ~0x00000002);
}
result.metadataParts_ = metadataParts_;
return result; return result;
} }
@@ -330,6 +475,16 @@ public final class JvmPackageTable {
packageParts_.addAll(other.packageParts_); packageParts_.addAll(other.packageParts_);
} }
}
if (!other.metadataParts_.isEmpty()) {
if (metadataParts_.isEmpty()) {
metadataParts_ = other.metadataParts_;
bitField0_ = (bitField0_ & ~0x00000002);
} else {
ensureMetadataPartsIsMutable();
metadataParts_.addAll(other.metadataParts_);
}
} }
setUnknownFields( setUnknownFields(
getUnknownFields().concat(other.unknownFields)); getUnknownFields().concat(other.unknownFields));
@@ -343,6 +498,12 @@ public final class JvmPackageTable {
return false; return false;
} }
} }
for (int i = 0; i < getMetadataPartsCount(); i++) {
if (!getMetadataParts(i).isInitialized()) {
return false;
}
}
return true; return true;
} }
@@ -376,24 +537,40 @@ public final class JvmPackageTable {
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public java.util.List<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> getPackagePartsList() { public java.util.List<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> getPackagePartsList() {
return java.util.Collections.unmodifiableList(packageParts_); return java.util.Collections.unmodifiableList(packageParts_);
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public int getPackagePartsCount() { public int getPackagePartsCount() {
return packageParts_.size(); return packageParts_.size();
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getPackageParts(int index) { public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getPackageParts(int index) {
return packageParts_.get(index); return packageParts_.get(index);
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public Builder setPackageParts( public Builder setPackageParts(
int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts value) { int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts value) {
@@ -407,6 +584,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public Builder setPackageParts( public Builder setPackageParts(
int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) { int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) {
@@ -417,6 +598,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public Builder addPackageParts(org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts value) { public Builder addPackageParts(org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts value) {
if (value == null) { if (value == null) {
@@ -429,6 +614,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public Builder addPackageParts( public Builder addPackageParts(
int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts value) { int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts value) {
@@ -442,6 +631,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public Builder addPackageParts( public Builder addPackageParts(
org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) { org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) {
@@ -452,6 +645,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public Builder addPackageParts( public Builder addPackageParts(
int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) { int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) {
@@ -462,6 +659,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public Builder addAllPackageParts( public Builder addAllPackageParts(
java.lang.Iterable<? extends org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> values) { java.lang.Iterable<? extends org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> values) {
@@ -473,6 +674,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public Builder clearPackageParts() { public Builder clearPackageParts() {
packageParts_ = java.util.Collections.emptyList(); packageParts_ = java.util.Collections.emptyList();
@@ -482,6 +687,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code> * <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1;</code>
*
* <pre>
* Names of .class files for each package
* </pre>
*/ */
public Builder removePackageParts(int index) { public Builder removePackageParts(int index) {
ensurePackagePartsIsMutable(); ensurePackagePartsIsMutable();
@@ -490,6 +699,179 @@ public final class JvmPackageTable {
return this; return this;
} }
private java.util.List<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> metadataParts_ =
java.util.Collections.emptyList();
private void ensureMetadataPartsIsMutable() {
if (!((bitField0_ & 0x00000002) == 0x00000002)) {
metadataParts_ = new java.util.ArrayList<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts>(metadataParts_);
bitField0_ |= 0x00000002;
}
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public java.util.List<org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> getMetadataPartsList() {
return java.util.Collections.unmodifiableList(metadataParts_);
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public int getMetadataPartsCount() {
return metadataParts_.size();
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getMetadataParts(int index) {
return metadataParts_.get(index);
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public Builder setMetadataParts(
int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts value) {
if (value == null) {
throw new NullPointerException();
}
ensureMetadataPartsIsMutable();
metadataParts_.set(index, value);
return this;
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public Builder setMetadataParts(
int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) {
ensureMetadataPartsIsMutable();
metadataParts_.set(index, builderForValue.build());
return this;
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public Builder addMetadataParts(org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts value) {
if (value == null) {
throw new NullPointerException();
}
ensureMetadataPartsIsMutable();
metadataParts_.add(value);
return this;
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public Builder addMetadataParts(
int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts value) {
if (value == null) {
throw new NullPointerException();
}
ensureMetadataPartsIsMutable();
metadataParts_.add(index, value);
return this;
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public Builder addMetadataParts(
org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) {
ensureMetadataPartsIsMutable();
metadataParts_.add(builderForValue.build());
return this;
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public Builder addMetadataParts(
int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) {
ensureMetadataPartsIsMutable();
metadataParts_.add(index, builderForValue.build());
return this;
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public Builder addAllMetadataParts(
java.lang.Iterable<? extends org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts> values) {
ensureMetadataPartsIsMutable();
org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll(
values, metadataParts_);
return this;
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public Builder clearMetadataParts() {
metadataParts_ = java.util.Collections.emptyList();
bitField0_ = (bitField0_ & ~0x00000002);
return this;
}
/**
* <code>repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2;</code>
*
* <pre>
* Names of .kotlin_metadata files for each package
* </pre>
*/
public Builder removeMetadataParts(int index) {
ensureMetadataPartsIsMutable();
metadataParts_.remove(index);
return this;
}
// @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.jvm.PackageTable) // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.jvm.PackageTable)
} }
@@ -521,19 +903,35 @@ public final class JvmPackageTable {
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
org.jetbrains.kotlin.protobuf.ProtocolStringList org.jetbrains.kotlin.protobuf.ProtocolStringList
getClassNameList(); getClassNameList();
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
int getClassNameCount(); int getClassNameCount();
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
java.lang.String getClassName(int index); java.lang.String getClassName(int index);
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
org.jetbrains.kotlin.protobuf.ByteString org.jetbrains.kotlin.protobuf.ByteString
getClassNameBytes(int index); getClassNameBytes(int index);
@@ -686,6 +1084,10 @@ public final class JvmPackageTable {
private org.jetbrains.kotlin.protobuf.LazyStringList className_; private org.jetbrains.kotlin.protobuf.LazyStringList className_;
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
public org.jetbrains.kotlin.protobuf.ProtocolStringList public org.jetbrains.kotlin.protobuf.ProtocolStringList
getClassNameList() { getClassNameList() {
@@ -693,18 +1095,30 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
public int getClassNameCount() { public int getClassNameCount() {
return className_.size(); return className_.size();
} }
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
public java.lang.String getClassName(int index) { public java.lang.String getClassName(int index) {
return className_.get(index); return className_.get(index);
} }
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
public org.jetbrains.kotlin.protobuf.ByteString public org.jetbrains.kotlin.protobuf.ByteString
getClassNameBytes(int index) { getClassNameBytes(int index) {
@@ -1028,6 +1442,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
public org.jetbrains.kotlin.protobuf.ProtocolStringList public org.jetbrains.kotlin.protobuf.ProtocolStringList
getClassNameList() { getClassNameList() {
@@ -1035,18 +1453,30 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
public int getClassNameCount() { public int getClassNameCount() {
return className_.size(); return className_.size();
} }
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
public java.lang.String getClassName(int index) { public java.lang.String getClassName(int index) {
return className_.get(index); return className_.get(index);
} }
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
public org.jetbrains.kotlin.protobuf.ByteString public org.jetbrains.kotlin.protobuf.ByteString
getClassNameBytes(int index) { getClassNameBytes(int index) {
@@ -1054,6 +1484,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
public Builder setClassName( public Builder setClassName(
int index, java.lang.String value) { int index, java.lang.String value) {
@@ -1067,6 +1501,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
public Builder addClassName( public Builder addClassName(
java.lang.String value) { java.lang.String value) {
@@ -1080,6 +1518,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
public Builder addAllClassName( public Builder addAllClassName(
java.lang.Iterable<java.lang.String> values) { java.lang.Iterable<java.lang.String> values) {
@@ -1091,6 +1533,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
public Builder clearClassName() { public Builder clearClassName() {
className_ = org.jetbrains.kotlin.protobuf.LazyStringArrayList.EMPTY; className_ = org.jetbrains.kotlin.protobuf.LazyStringArrayList.EMPTY;
@@ -1100,6 +1546,10 @@ public final class JvmPackageTable {
} }
/** /**
* <code>repeated string class_name = 2;</code> * <code>repeated string class_name = 2;</code>
*
* <pre>
* Short names of files, without extension, present in this package
* </pre>
*/ */
public Builder addClassNameBytes( public Builder addClassNameBytes(
org.jetbrains.kotlin.protobuf.ByteString value) { org.jetbrains.kotlin.protobuf.ByteString value) {