From 32792c5ce4a492e09ea228e29851e1180b3a7cc7 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 14 Nov 2016 12:31:00 +0300 Subject: [PATCH] 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 --- .../jvm/DebugJvmPackageTable.java | 679 +++++++++++++++++- .../kotlin/codegen/ClassFileFactory.java | 60 +- .../kotlin/codegen/classFileUtils.kt | 25 +- .../builtins-serializer.iml | 1 + .../serialization/MetadataSerializer.kt | 26 +- .../src/jvm_package_table.proto | 6 + .../kotlin/load/kotlin/ModuleMapping.kt | 42 +- .../serialization/jvm/JvmPackageTable.java | 450 ++++++++++++ 8 files changed, 1215 insertions(+), 74 deletions(-) diff --git a/build-common/test/org/jetbrains/kotlin/serialization/jvm/DebugJvmPackageTable.java b/build-common/test/org/jetbrains/kotlin/serialization/jvm/DebugJvmPackageTable.java index ca1af3b4371..0da1e91bbca 100644 --- a/build-common/test/org/jetbrains/kotlin/serialization/jvm/DebugJvmPackageTable.java +++ b/build-common/test/org/jetbrains/kotlin/serialization/jvm/DebugJvmPackageTable.java @@ -14,27 +14,91 @@ public final class DebugJvmPackageTable { /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ java.util.List getPackagePartsList(); /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts getPackageParts(int index); /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ int getPackagePartsCount(); /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ java.util.List getPackagePartsOrBuilderList(); /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackagePartsOrBuilder getPackagePartsOrBuilder( int index); + + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + java.util.List + getMetadataPartsList(); + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts getMetadataParts(int index); + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + int getMetadataPartsCount(); + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + java.util.List + getMetadataPartsOrBuilderList(); + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackagePartsOrBuilder getMetadataPartsOrBuilder( + int index); } /** * Protobuf type {@code org.jetbrains.kotlin.serialization.jvm.PackageTable} @@ -96,6 +160,14 @@ public final class DebugJvmPackageTable { packageParts_.add(input.readMessage(org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.PARSER, extensionRegistry)); break; } + case 18: { + if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) { + metadataParts_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000002; + } + metadataParts_.add(input.readMessage(org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.PARSER, extensionRegistry)); + break; + } } } } catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) { @@ -107,6 +179,9 @@ public final class DebugJvmPackageTable { if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) { packageParts_ = java.util.Collections.unmodifiableList(packageParts_); } + if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) { + metadataParts_ = java.util.Collections.unmodifiableList(metadataParts_); + } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); } @@ -142,12 +217,20 @@ public final class DebugJvmPackageTable { private java.util.List packageParts_; /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ public java.util.List getPackagePartsList() { return packageParts_; } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ public java.util.List getPackagePartsOrBuilderList() { @@ -155,26 +238,94 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ public int getPackagePartsCount() { return packageParts_.size(); } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts getPackageParts(int index) { return packageParts_.get(index); } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackagePartsOrBuilder getPackagePartsOrBuilder( int index) { return packageParts_.get(index); } + public static final int METADATA_PARTS_FIELD_NUMBER = 2; + private java.util.List metadataParts_; + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + public java.util.List getMetadataPartsList() { + return metadataParts_; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + public java.util.List + getMetadataPartsOrBuilderList() { + return metadataParts_; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + public int getMetadataPartsCount() { + return metadataParts_.size(); + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts getMetadataParts(int index) { + return metadataParts_.get(index); + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackagePartsOrBuilder getMetadataPartsOrBuilder( + int index) { + return metadataParts_.get(index); + } + private void initFields() { packageParts_ = java.util.Collections.emptyList(); + metadataParts_ = java.util.Collections.emptyList(); } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -188,6 +339,12 @@ public final class DebugJvmPackageTable { return false; } } + for (int i = 0; i < getMetadataPartsCount(); i++) { + if (!getMetadataParts(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } memoizedIsInitialized = 1; return true; } @@ -198,6 +355,9 @@ public final class DebugJvmPackageTable { for (int i = 0; i < packageParts_.size(); i++) { output.writeMessage(1, packageParts_.get(i)); } + for (int i = 0; i < metadataParts_.size(); i++) { + output.writeMessage(2, metadataParts_.get(i)); + } getUnknownFields().writeTo(output); } @@ -211,6 +371,10 @@ public final class DebugJvmPackageTable { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .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 += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -321,6 +485,7 @@ public final class DebugJvmPackageTable { private void maybeForceBuilderInitialization() { if (org.jetbrains.kotlin.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { getPackagePartsFieldBuilder(); + getMetadataPartsFieldBuilder(); } } private static Builder create() { @@ -335,6 +500,12 @@ public final class DebugJvmPackageTable { } else { packagePartsBuilder_.clear(); } + if (metadataPartsBuilder_ == null) { + metadataParts_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + } else { + metadataPartsBuilder_.clear(); + } return this; } @@ -371,6 +542,15 @@ public final class DebugJvmPackageTable { } else { result.packageParts_ = packagePartsBuilder_.build(); } + if (metadataPartsBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002)) { + metadataParts_ = java.util.Collections.unmodifiableList(metadataParts_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.metadataParts_ = metadataParts_; + } else { + result.metadataParts_ = metadataPartsBuilder_.build(); + } onBuilt(); return result; } @@ -412,6 +592,32 @@ public final class DebugJvmPackageTable { } } } + if (metadataPartsBuilder_ == null) { + if (!other.metadataParts_.isEmpty()) { + if (metadataParts_.isEmpty()) { + metadataParts_ = other.metadataParts_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureMetadataPartsIsMutable(); + metadataParts_.addAll(other.metadataParts_); + } + onChanged(); + } + } else { + if (!other.metadataParts_.isEmpty()) { + if (metadataPartsBuilder_.isEmpty()) { + metadataPartsBuilder_.dispose(); + metadataPartsBuilder_ = null; + metadataParts_ = other.metadataParts_; + bitField0_ = (bitField0_ & ~0x00000002); + metadataPartsBuilder_ = + org.jetbrains.kotlin.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getMetadataPartsFieldBuilder() : null; + } else { + metadataPartsBuilder_.addAllMessages(other.metadataParts_); + } + } + } this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -423,6 +629,12 @@ public final class DebugJvmPackageTable { return false; } } + for (int i = 0; i < getMetadataPartsCount(); i++) { + if (!getMetadataParts(i).isInitialized()) { + + return false; + } + } return true; } @@ -459,6 +671,10 @@ public final class DebugJvmPackageTable { /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public java.util.List getPackagePartsList() { if (packagePartsBuilder_ == null) { @@ -469,6 +685,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public int getPackagePartsCount() { if (packagePartsBuilder_ == null) { @@ -479,6 +699,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts getPackageParts(int index) { if (packagePartsBuilder_ == null) { @@ -489,6 +713,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder setPackageParts( int index, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts value) { @@ -506,6 +734,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder setPackageParts( int index, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder builderForValue) { @@ -520,6 +752,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder addPackageParts(org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts value) { if (packagePartsBuilder_ == null) { @@ -536,6 +772,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder addPackageParts( int index, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts value) { @@ -553,6 +793,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder addPackageParts( org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder builderForValue) { @@ -567,6 +811,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder addPackageParts( int index, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder builderForValue) { @@ -581,6 +829,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder addAllPackageParts( java.lang.Iterable values) { @@ -596,6 +848,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder clearPackageParts() { if (packagePartsBuilder_ == null) { @@ -609,6 +865,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder removePackageParts(int index) { if (packagePartsBuilder_ == null) { @@ -622,6 +882,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder getPackagePartsBuilder( int index) { @@ -629,6 +893,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackagePartsOrBuilder getPackagePartsOrBuilder( int index) { @@ -639,6 +907,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public java.util.List getPackagePartsOrBuilderList() { @@ -650,6 +922,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder addPackagePartsBuilder() { return getPackagePartsFieldBuilder().addBuilder( @@ -657,6 +933,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder addPackagePartsBuilder( int index) { @@ -665,6 +945,10 @@ public final class DebugJvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public java.util.List getPackagePartsBuilderList() { @@ -685,6 +969,318 @@ public final class DebugJvmPackageTable { return packagePartsBuilder_; } + private java.util.List metadataParts_ = + java.util.Collections.emptyList(); + private void ensureMetadataPartsIsMutable() { + if (!((bitField0_ & 0x00000002) == 0x00000002)) { + metadataParts_ = new java.util.ArrayList(metadataParts_); + bitField0_ |= 0x00000002; + } + } + + private org.jetbrains.kotlin.protobuf.RepeatedFieldBuilder< + org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackagePartsOrBuilder> metadataPartsBuilder_; + + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public java.util.List getMetadataPartsList() { + if (metadataPartsBuilder_ == null) { + return java.util.Collections.unmodifiableList(metadataParts_); + } else { + return metadataPartsBuilder_.getMessageList(); + } + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public int getMetadataPartsCount() { + if (metadataPartsBuilder_ == null) { + return metadataParts_.size(); + } else { + return metadataPartsBuilder_.getCount(); + } + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts getMetadataParts(int index) { + if (metadataPartsBuilder_ == null) { + return metadataParts_.get(index); + } else { + return metadataPartsBuilder_.getMessage(index); + } + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder setMetadataParts( + int index, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts value) { + if (metadataPartsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMetadataPartsIsMutable(); + metadataParts_.set(index, value); + onChanged(); + } else { + metadataPartsBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder setMetadataParts( + int index, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder builderForValue) { + if (metadataPartsBuilder_ == null) { + ensureMetadataPartsIsMutable(); + metadataParts_.set(index, builderForValue.build()); + onChanged(); + } else { + metadataPartsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder addMetadataParts(org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts value) { + if (metadataPartsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMetadataPartsIsMutable(); + metadataParts_.add(value); + onChanged(); + } else { + metadataPartsBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder addMetadataParts( + int index, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts value) { + if (metadataPartsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMetadataPartsIsMutable(); + metadataParts_.add(index, value); + onChanged(); + } else { + metadataPartsBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder addMetadataParts( + org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder builderForValue) { + if (metadataPartsBuilder_ == null) { + ensureMetadataPartsIsMutable(); + metadataParts_.add(builderForValue.build()); + onChanged(); + } else { + metadataPartsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder addMetadataParts( + int index, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder builderForValue) { + if (metadataPartsBuilder_ == null) { + ensureMetadataPartsIsMutable(); + metadataParts_.add(index, builderForValue.build()); + onChanged(); + } else { + metadataPartsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder addAllMetadataParts( + java.lang.Iterable values) { + if (metadataPartsBuilder_ == null) { + ensureMetadataPartsIsMutable(); + org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll( + values, metadataParts_); + onChanged(); + } else { + metadataPartsBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder clearMetadataParts() { + if (metadataPartsBuilder_ == null) { + metadataParts_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + metadataPartsBuilder_.clear(); + } + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder removeMetadataParts(int index) { + if (metadataPartsBuilder_ == null) { + ensureMetadataPartsIsMutable(); + metadataParts_.remove(index); + onChanged(); + } else { + metadataPartsBuilder_.remove(index); + } + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder getMetadataPartsBuilder( + int index) { + return getMetadataPartsFieldBuilder().getBuilder(index); + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackagePartsOrBuilder getMetadataPartsOrBuilder( + int index) { + if (metadataPartsBuilder_ == null) { + return metadataParts_.get(index); } else { + return metadataPartsBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public java.util.List + getMetadataPartsOrBuilderList() { + if (metadataPartsBuilder_ != null) { + return metadataPartsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(metadataParts_); + } + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder addMetadataPartsBuilder() { + return getMetadataPartsFieldBuilder().addBuilder( + org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.getDefaultInstance()); + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder addMetadataPartsBuilder( + int index) { + return getMetadataPartsFieldBuilder().addBuilder( + index, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.getDefaultInstance()); + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public java.util.List + getMetadataPartsBuilderList() { + return getMetadataPartsFieldBuilder().getBuilderList(); + } + private org.jetbrains.kotlin.protobuf.RepeatedFieldBuilder< + org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackagePartsOrBuilder> + getMetadataPartsFieldBuilder() { + if (metadataPartsBuilder_ == null) { + metadataPartsBuilder_ = new org.jetbrains.kotlin.protobuf.RepeatedFieldBuilder< + org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackageParts.Builder, org.jetbrains.kotlin.serialization.jvm.DebugJvmPackageTable.PackagePartsOrBuilder>( + metadataParts_, + ((bitField0_ & 0x00000002) == 0x00000002), + getParentForChildren(), + isClean()); + metadataParts_ = null; + } + return metadataPartsBuilder_; + } + // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.jvm.PackageTable) } @@ -716,19 +1312,35 @@ public final class DebugJvmPackageTable { /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ org.jetbrains.kotlin.protobuf.ProtocolStringList getClassNameList(); /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ int getClassNameCount(); /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ java.lang.String getClassName(int index); /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ org.jetbrains.kotlin.protobuf.ByteString getClassNameBytes(int index); @@ -889,6 +1501,10 @@ public final class DebugJvmPackageTable { private org.jetbrains.kotlin.protobuf.LazyStringList className_; /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ public org.jetbrains.kotlin.protobuf.ProtocolStringList getClassNameList() { @@ -896,18 +1512,30 @@ public final class DebugJvmPackageTable { } /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ public int getClassNameCount() { return className_.size(); } /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ public java.lang.String getClassName(int index) { return className_.get(index); } /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ public org.jetbrains.kotlin.protobuf.ByteString getClassNameBytes(int index) { @@ -1268,6 +1896,10 @@ public final class DebugJvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public org.jetbrains.kotlin.protobuf.ProtocolStringList getClassNameList() { @@ -1275,18 +1907,30 @@ public final class DebugJvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public int getClassNameCount() { return className_.size(); } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public java.lang.String getClassName(int index) { return className_.get(index); } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public org.jetbrains.kotlin.protobuf.ByteString getClassNameBytes(int index) { @@ -1294,6 +1938,10 @@ public final class DebugJvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public Builder setClassName( int index, java.lang.String value) { @@ -1307,6 +1955,10 @@ public final class DebugJvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public Builder addClassName( java.lang.String value) { @@ -1320,6 +1972,10 @@ public final class DebugJvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public Builder addAllClassName( java.lang.Iterable values) { @@ -1331,6 +1987,10 @@ public final class DebugJvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public Builder clearClassName() { className_ = org.jetbrains.kotlin.protobuf.LazyStringArrayList.EMPTY; @@ -1340,6 +2000,10 @@ public final class DebugJvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public Builder addClassNameBytes( org.jetbrains.kotlin.protobuf.ByteString value) { @@ -1384,12 +2048,13 @@ public final class DebugJvmPackageTable { java.lang.String[] descriptorData = { "\n=core/descriptor.loader.java/src/jvm_pa" + "ckage_table.debug.proto\022&org.jetbrains.k" + - "otlin.serialization.jvm\"[\n\014PackageTable\022" + - "K\n\rpackage_parts\030\001 \003(\01324.org.jetbrains.k" + - "otlin.serialization.jvm.PackageParts\";\n\014" + - "PackageParts\022\027\n\017package_fq_name\030\001 \002(\t\022\022\n" + - "\nclass_name\030\002 \003(\tB\026B\024DebugJvmPackageTabl" + - "e" + "otlin.serialization.jvm\"\251\001\n\014PackageTable" + + "\022K\n\rpackage_parts\030\001 \003(\01324.org.jetbrains." + + "kotlin.serialization.jvm.PackageParts\022L\n" + + "\016metadata_parts\030\002 \003(\01324.org.jetbrains.ko" + + "tlin.serialization.jvm.PackageParts\";\n\014P" + + "ackageParts\022\027\n\017package_fq_name\030\001 \002(\t\022\022\n\n" + + "class_name\030\002 \003(\tB\026B\024DebugJvmPackageTable" }; org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -1408,7 +2073,7 @@ public final class DebugJvmPackageTable { internal_static_org_jetbrains_kotlin_serialization_jvm_PackageTable_fieldAccessorTable = new org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_org_jetbrains_kotlin_serialization_jvm_PackageTable_descriptor, - new java.lang.String[] { "PackageParts", }); + new java.lang.String[] { "PackageParts", "MetadataParts", }); internal_static_org_jetbrains_kotlin_serialization_jvm_PackageParts_descriptor = getDescriptor().getMessageTypes().get(1); internal_static_org_jetbrains_kotlin_serialization_jvm_PackageParts_fieldAccessorTable = new diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java index b91c6f1d96d..ee7d6702a60 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java @@ -19,9 +19,7 @@ package org.jetbrains.kotlin.codegen; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.util.Function; -import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.io.DataOutputStream; import kotlin.collections.CollectionsKt; import kotlin.collections.MapsKt; 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.OutputFileCollection; 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.PackageParts; 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.org.objectweb.asm.Type; -import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.*; @@ -100,47 +95,28 @@ public class ClassFileFactory implements OutputFileCollection { final JvmPackageTable.PackageTable.Builder builder = JvmPackageTable.PackageTable.newBuilder(); String outputFilePath = getMappingFileName(state.getModuleName()); - List parts = new SmartList(partsGroupedByPackage.values()); - - for (PackageParts part : ClassFileUtilsKt.addCompiledPartsAndSort(parts, state)) { - PackageParts.Companion.serialize(part, builder); + for (PackageParts part : ClassFileUtilsKt.addCompiledPartsAndSort(partsGroupedByPackage.values(), state)) { + part.addTo(builder); } - if (builder.getPackagePartsCount() != 0) { - 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); - } - } + if (builder.getPackagePartsCount() == 0) return; - @Override - public String asText(ClassBuilderFactory factory) { - try { - return new String(asBytes(factory), "UTF-8"); - } - catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } + generators.put(outputFilePath, new OutAndSourceFileList(CollectionsKt.toList(packagePartSourceFiles)) { + @Override + public byte[] asBytes(ClassBuilderFactory factory) { + return ClassFileUtilsKt.serializeToByteArray(builder); + } + + @Override + public String asText(ClassBuilderFactory factory) { + try { + return new String(asBytes(factory), "UTF-8"); } - }); - } + catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + }); } @NotNull diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/classFileUtils.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/classFileUtils.kt index ea11f4e1e5a..c0a03150f49 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/classFileUtils.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/classFileUtils.kt @@ -16,10 +16,14 @@ package org.jetbrains.kotlin.codegen +import com.intellij.util.io.DataOutputStream import org.jetbrains.kotlin.backend.common.output.OutputFile 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.PackageParts +import org.jetbrains.kotlin.serialization.jvm.JvmPackageTable +import java.io.ByteArrayOutputStream fun ClassFileFactory.getClassFiles(): Iterable { return asList().filterClassFiles() @@ -29,12 +33,12 @@ fun List.filterClassFiles(): Iterable { return filter { it.relativePath.endsWith(".class") } } -fun List.addCompiledPartsAndSort(state: GenerationState): List = +fun Iterable.addCompiledPartsAndSort(state: GenerationState): List = addCompiledParts(state).sortedBy { it.packageFqName } -private fun List.addCompiledParts(state: GenerationState): List { - val incrementalCache = state.incrementalCacheForThisTarget ?: return this - val moduleMappingData = incrementalCache.getModuleMappingData() ?: return this +private fun Iterable.addCompiledParts(state: GenerationState): List { + val incrementalCache = state.incrementalCacheForThisTarget ?: return this.toList() + val moduleMappingData = incrementalCache.getModuleMappingData() ?: return this.toList() val mapping = ModuleMapping.create(moduleMappingData, "") @@ -54,3 +58,16 @@ private fun List.addCompiledParts(state: GenerationState): List + \ No newline at end of file diff --git a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/MetadataSerializer.kt b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/MetadataSerializer.kt index 3eb9f1c0d7b..d19f4061976 100644 --- a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/MetadataSerializer.kt +++ b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/MetadataSerializer.kt @@ -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.CompilerMessageSeverity 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.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor 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.FqName 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.serialization.builtins.BuiltInsProtoBuf import org.jetbrains.kotlin.serialization.builtins.BuiltInsSerializerExtension +import org.jetbrains.kotlin.serialization.jvm.JvmPackageTable import java.io.ByteArrayOutputStream import java.io.DataOutputStream import java.io.File @@ -72,6 +76,8 @@ open class MetadataSerializer(private val dependOnOldBuiltIns: Boolean) { protected open fun performSerialization( files: Collection, bindingContext: BindingContext, module: ModuleDescriptor, destDir: File ) { + val packageTable = hashMapOf() + for (file in files) { val packageFqName = file.packageFqName val members = arrayListOf() @@ -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)) - PackageSerializer(emptyList(), members, packageFqName, destFile).run() + + if (members.isNotEmpty()) { + 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 = diff --git a/core/descriptor.loader.java/src/jvm_package_table.proto b/core/descriptor.loader.java/src/jvm_package_table.proto index 7dc49d015be..6c4f5dacefc 100644 --- a/core/descriptor.loader.java/src/jvm_package_table.proto +++ b/core/descriptor.loader.java/src/jvm_package_table.proto @@ -20,10 +20,16 @@ option java_outer_classname = "JvmPackageTable"; option optimize_for = LITE_RUNTIME; message PackageTable { + // Names of .class files for each package repeated PackageParts package_parts = 1; + + // Names of .kotlin_metadata files for each package + repeated PackageParts metadata_parts = 2; } message PackageParts { required string package_fq_name = 1; + + // Short names of files, without extension, present in this package repeated string class_name = 2; } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/ModuleMapping.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/ModuleMapping.kt index f0d8cfb51f4..e1cb2a4b907 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/ModuleMapping.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/ModuleMapping.kt @@ -66,26 +66,32 @@ class ModuleMapping private constructor(val packageFqName2Parts: Map() + // See JvmPackageTable.PackageTable.metadata_parts + val metadataParts = linkedSetOf() - override fun equals(other: Any?) = - other is PackageParts && other.packageFqName == packageFqName && other.parts == parts - - override fun hashCode() = - packageFqName.hashCode() * 31 + parts.hashCode() - - override fun toString() = - parts.toString() - - companion object { - @JvmStatic - 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) - } + fun addTo(builder: JvmPackageTable.PackageTable.Builder) { + if (parts.isNotEmpty()) { + builder.addPackageParts(JvmPackageTable.PackageParts.newBuilder().apply { + packageFqName = this@PackageParts.packageFqName + addAllClassName(parts.sorted()) + }) + } + if (metadataParts.isNotEmpty()) { + builder.addMetadataParts(JvmPackageTable.PackageParts.newBuilder().apply { + packageFqName = this@PackageParts.packageFqName + addAllClassName(metadataParts.sorted()) + }) } } + + 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() } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/serialization/jvm/JvmPackageTable.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/serialization/jvm/JvmPackageTable.java index e1a7a391816..df4ed62cee1 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/serialization/jvm/JvmPackageTable.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/serialization/jvm/JvmPackageTable.java @@ -14,17 +14,55 @@ public final class JvmPackageTable { /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ java.util.List getPackagePartsList(); /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getPackageParts(int index); /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ int getPackagePartsCount(); + + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + java.util.List + getMetadataPartsList(); + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getMetadataParts(int index); + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + int getMetadataPartsCount(); } /** * 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)); break; } + case 18: { + if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) { + metadataParts_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000002; + } + metadataParts_.add(input.readMessage(org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.PARSER, extensionRegistry)); + break; + } } } } catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) { @@ -95,6 +141,9 @@ public final class JvmPackageTable { if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) { packageParts_ = java.util.Collections.unmodifiableList(packageParts_); } + if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) { + metadataParts_ = java.util.Collections.unmodifiableList(metadataParts_); + } try { unknownFieldsCodedOutput.flush(); } catch (java.io.IOException e) { @@ -124,12 +173,20 @@ public final class JvmPackageTable { private java.util.List packageParts_; /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ public java.util.List getPackagePartsList() { return packageParts_; } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ public java.util.List getPackagePartsOrBuilderList() { @@ -137,26 +194,94 @@ public final class JvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ public int getPackagePartsCount() { return packageParts_.size(); } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getPackageParts(int index) { return packageParts_.get(index); } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+     * Names of .class files for each package
+     * 
*/ public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackagePartsOrBuilder getPackagePartsOrBuilder( int index) { return packageParts_.get(index); } + public static final int METADATA_PARTS_FIELD_NUMBER = 2; + private java.util.List metadataParts_; + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + public java.util.List getMetadataPartsList() { + return metadataParts_; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + public java.util.List + getMetadataPartsOrBuilderList() { + return metadataParts_; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + public int getMetadataPartsCount() { + return metadataParts_.size(); + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getMetadataParts(int index) { + return metadataParts_.get(index); + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+     * Names of .kotlin_metadata files for each package
+     * 
+ */ + public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackagePartsOrBuilder getMetadataPartsOrBuilder( + int index) { + return metadataParts_.get(index); + } + private void initFields() { packageParts_ = java.util.Collections.emptyList(); + metadataParts_ = java.util.Collections.emptyList(); } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -170,6 +295,12 @@ public final class JvmPackageTable { return false; } } + for (int i = 0; i < getMetadataPartsCount(); i++) { + if (!getMetadataParts(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } memoizedIsInitialized = 1; return true; } @@ -180,6 +311,9 @@ public final class JvmPackageTable { for (int i = 0; i < packageParts_.size(); i++) { output.writeMessage(1, packageParts_.get(i)); } + for (int i = 0; i < metadataParts_.size(); i++) { + output.writeMessage(2, metadataParts_.get(i)); + } output.writeRawBytes(unknownFields); } @@ -193,6 +327,10 @@ public final class JvmPackageTable { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .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(); memoizedSerializedSize = size; return size; @@ -289,6 +427,8 @@ public final class JvmPackageTable { super.clear(); packageParts_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000001); + metadataParts_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); return this; } @@ -316,6 +456,11 @@ public final class JvmPackageTable { bitField0_ = (bitField0_ & ~0x00000001); } result.packageParts_ = packageParts_; + if (((bitField0_ & 0x00000002) == 0x00000002)) { + metadataParts_ = java.util.Collections.unmodifiableList(metadataParts_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.metadataParts_ = metadataParts_; return result; } @@ -330,6 +475,16 @@ public final class JvmPackageTable { packageParts_.addAll(other.packageParts_); } + } + if (!other.metadataParts_.isEmpty()) { + if (metadataParts_.isEmpty()) { + metadataParts_ = other.metadataParts_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureMetadataPartsIsMutable(); + metadataParts_.addAll(other.metadataParts_); + } + } setUnknownFields( getUnknownFields().concat(other.unknownFields)); @@ -343,6 +498,12 @@ public final class JvmPackageTable { return false; } } + for (int i = 0; i < getMetadataPartsCount(); i++) { + if (!getMetadataParts(i).isInitialized()) { + + return false; + } + } return true; } @@ -376,24 +537,40 @@ public final class JvmPackageTable { /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public java.util.List getPackagePartsList() { return java.util.Collections.unmodifiableList(packageParts_); } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public int getPackagePartsCount() { return packageParts_.size(); } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getPackageParts(int index) { return packageParts_.get(index); } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder setPackageParts( int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts value) { @@ -407,6 +584,10 @@ public final class JvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder setPackageParts( int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) { @@ -417,6 +598,10 @@ public final class JvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder addPackageParts(org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts value) { if (value == null) { @@ -429,6 +614,10 @@ public final class JvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder addPackageParts( int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts value) { @@ -442,6 +631,10 @@ public final class JvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder addPackageParts( org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) { @@ -452,6 +645,10 @@ public final class JvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder addPackageParts( int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) { @@ -462,6 +659,10 @@ public final class JvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder addAllPackageParts( java.lang.Iterable values) { @@ -473,6 +674,10 @@ public final class JvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder clearPackageParts() { packageParts_ = java.util.Collections.emptyList(); @@ -482,6 +687,10 @@ public final class JvmPackageTable { } /** * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts package_parts = 1; + * + *
+       * Names of .class files for each package
+       * 
*/ public Builder removePackageParts(int index) { ensurePackagePartsIsMutable(); @@ -490,6 +699,179 @@ public final class JvmPackageTable { return this; } + private java.util.List metadataParts_ = + java.util.Collections.emptyList(); + private void ensureMetadataPartsIsMutable() { + if (!((bitField0_ & 0x00000002) == 0x00000002)) { + metadataParts_ = new java.util.ArrayList(metadataParts_); + bitField0_ |= 0x00000002; + } + } + + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public java.util.List getMetadataPartsList() { + return java.util.Collections.unmodifiableList(metadataParts_); + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public int getMetadataPartsCount() { + return metadataParts_.size(); + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts getMetadataParts(int index) { + return metadataParts_.get(index); + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + 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; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder setMetadataParts( + int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) { + ensureMetadataPartsIsMutable(); + metadataParts_.set(index, builderForValue.build()); + + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder addMetadataParts(org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts value) { + if (value == null) { + throw new NullPointerException(); + } + ensureMetadataPartsIsMutable(); + metadataParts_.add(value); + + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + 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; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder addMetadataParts( + org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) { + ensureMetadataPartsIsMutable(); + metadataParts_.add(builderForValue.build()); + + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder addMetadataParts( + int index, org.jetbrains.kotlin.serialization.jvm.JvmPackageTable.PackageParts.Builder builderForValue) { + ensureMetadataPartsIsMutable(); + metadataParts_.add(index, builderForValue.build()); + + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder addAllMetadataParts( + java.lang.Iterable values) { + ensureMetadataPartsIsMutable(); + org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll( + values, metadataParts_); + + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder clearMetadataParts() { + metadataParts_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + + return this; + } + /** + * repeated .org.jetbrains.kotlin.serialization.jvm.PackageParts metadata_parts = 2; + * + *
+       * Names of .kotlin_metadata files for each package
+       * 
+ */ + public Builder removeMetadataParts(int index) { + ensureMetadataPartsIsMutable(); + metadataParts_.remove(index); + + return this; + } + // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.jvm.PackageTable) } @@ -521,19 +903,35 @@ public final class JvmPackageTable { /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ org.jetbrains.kotlin.protobuf.ProtocolStringList getClassNameList(); /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ int getClassNameCount(); /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ java.lang.String getClassName(int index); /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ org.jetbrains.kotlin.protobuf.ByteString getClassNameBytes(int index); @@ -686,6 +1084,10 @@ public final class JvmPackageTable { private org.jetbrains.kotlin.protobuf.LazyStringList className_; /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ public org.jetbrains.kotlin.protobuf.ProtocolStringList getClassNameList() { @@ -693,18 +1095,30 @@ public final class JvmPackageTable { } /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ public int getClassNameCount() { return className_.size(); } /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ public java.lang.String getClassName(int index) { return className_.get(index); } /** * repeated string class_name = 2; + * + *
+     * Short names of files, without extension, present in this package
+     * 
*/ public org.jetbrains.kotlin.protobuf.ByteString getClassNameBytes(int index) { @@ -1028,6 +1442,10 @@ public final class JvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public org.jetbrains.kotlin.protobuf.ProtocolStringList getClassNameList() { @@ -1035,18 +1453,30 @@ public final class JvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public int getClassNameCount() { return className_.size(); } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public java.lang.String getClassName(int index) { return className_.get(index); } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public org.jetbrains.kotlin.protobuf.ByteString getClassNameBytes(int index) { @@ -1054,6 +1484,10 @@ public final class JvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public Builder setClassName( int index, java.lang.String value) { @@ -1067,6 +1501,10 @@ public final class JvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public Builder addClassName( java.lang.String value) { @@ -1080,6 +1518,10 @@ public final class JvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public Builder addAllClassName( java.lang.Iterable values) { @@ -1091,6 +1533,10 @@ public final class JvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public Builder clearClassName() { className_ = org.jetbrains.kotlin.protobuf.LazyStringArrayList.EMPTY; @@ -1100,6 +1546,10 @@ public final class JvmPackageTable { } /** * repeated string class_name = 2; + * + *
+       * Short names of files, without extension, present in this package
+       * 
*/ public Builder addClassNameBytes( org.jetbrains.kotlin.protobuf.ByteString value) {