From c011bf61fec898d47e86f6c2328c6a9fe52606e9 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 19 Jul 2018 15:11:30 +0200 Subject: [PATCH] Support multiple version requirements on single element --- .../incremental/ProtoCompareGenerated.kt | 102 +- .../incremental/protoDifferenceUtils.kt | 2 +- .../kotlin/metadata/DebugProtoBuf.java | 949 +++++++++++++----- .../serialization/JvmSerializerExtension.kt | 12 +- .../kotlin/resolve/deprecationUtil.kt | 43 +- .../serialization/DescriptorSerializer.kt | 48 +- .../requireKotlin/library/a.kt | 27 + .../requireKotlin/output.txt | 37 + .../requireKotlin/source.kt | 6 + .../CompileKotlinAgainstCustomBinariesTest.kt | 4 + .../AbstractVersionRequirementTest.kt | 4 +- .../deserialization/MemberDeserializer.kt | 5 +- .../DeserializedClassDescriptor.kt | 2 +- .../DeserializedMemberDescriptor.kt | 2 +- core/metadata/src/metadata.proto | 10 +- .../jetbrains/kotlin/metadata/ProtoBuf.java | 939 ++++++++++++----- .../deserialization/VersionRequirement.kt | 18 +- .../src/kotlinx/metadata/impl/readers.kt | 27 +- .../src/kotlinx/metadata/impl/writers.kt | 10 +- .../stdlib/src/kotlin/internal/Annotations.kt | 1 + .../org/jetbrains/kotlin/kotlinp/printers.kt | 32 +- .../kotlinp/testData/VersionRequirement.txt | 2 +- 22 files changed, 1681 insertions(+), 601 deletions(-) create mode 100644 compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/library/a.kt create mode 100644 compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/output.txt create mode 100644 compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt diff --git a/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt b/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt index e215c00a57b..16b60180688 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt @@ -177,10 +177,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR if (!checkEquals(old.typeTable, new.typeTable)) return false } - if (old.hasVersionRequirement() != new.hasVersionRequirement()) return false - if (old.hasVersionRequirement()) { - if (old.versionRequirement != new.versionRequirement) return false - } + if (!checkEqualsClassVersionRequirement(old, new)) return false if (old.hasVersionRequirementTable() != new.hasVersionRequirementTable()) return false if (old.hasVersionRequirementTable()) { @@ -251,7 +248,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR ENUM_ENTRY_LIST, SEALED_SUBCLASS_FQ_NAME_LIST, TYPE_TABLE, - VERSION_REQUIREMENT, + VERSION_REQUIREMENT_LIST, VERSION_REQUIREMENT_TABLE, JVM_EXT_CLASS_MODULE_NAME, JVM_EXT_CLASS_LOCAL_VARIABLE_LIST, @@ -302,10 +299,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR if (!checkEquals(old.typeTable, new.typeTable)) result.add(ProtoBufClassKind.TYPE_TABLE) } - if (old.hasVersionRequirement() != new.hasVersionRequirement()) result.add(ProtoBufClassKind.VERSION_REQUIREMENT) - if (old.hasVersionRequirement()) { - if (old.versionRequirement != new.versionRequirement) result.add(ProtoBufClassKind.VERSION_REQUIREMENT) - } + if (!checkEqualsClassVersionRequirement(old, new)) result.add(ProtoBufClassKind.VERSION_REQUIREMENT_LIST) if (old.hasVersionRequirementTable() != new.hasVersionRequirementTable()) result.add(ProtoBufClassKind.VERSION_REQUIREMENT_TABLE) if (old.hasVersionRequirementTable()) { @@ -404,10 +398,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR if (!checkEquals(old.typeTable, new.typeTable)) return false } - if (old.hasVersionRequirement() != new.hasVersionRequirement()) return false - if (old.hasVersionRequirement()) { - if (old.versionRequirement != new.versionRequirement) return false - } + if (!checkEqualsFunctionVersionRequirement(old, new)) return false if (old.hasContract() != new.hasContract()) return false if (old.hasContract()) { @@ -510,10 +501,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR if (old.setterFlags != new.setterFlags) return false } - if (old.hasVersionRequirement() != new.hasVersionRequirement()) return false - if (old.hasVersionRequirement()) { - if (old.versionRequirement != new.versionRequirement) return false - } + if (!checkEqualsPropertyVersionRequirement(old, new)) return false if (old.hasExtension(JvmProtoBuf.propertySignature) != new.hasExtension(JvmProtoBuf.propertySignature)) return false if (old.hasExtension(JvmProtoBuf.propertySignature)) { @@ -603,10 +591,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR if (!checkEqualsTypeAliasAnnotation(old, new)) return false - if (old.hasVersionRequirement() != new.hasVersionRequirement()) return false - if (old.hasVersionRequirement()) { - if (old.versionRequirement != new.versionRequirement) return false - } + if (!checkEqualsTypeAliasVersionRequirement(old, new)) return false return true } @@ -788,10 +773,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR if (!checkEqualsConstructorValueParameter(old, new)) return false - if (old.hasVersionRequirement() != new.hasVersionRequirement()) return false - if (old.hasVersionRequirement()) { - if (old.versionRequirement != new.versionRequirement) return false - } + if (!checkEqualsConstructorVersionRequirement(old, new)) return false if (old.hasExtension(JvmProtoBuf.constructorSignature) != new.hasExtension(JvmProtoBuf.constructorSignature)) return false if (old.hasExtension(JvmProtoBuf.constructorSignature)) { @@ -1262,6 +1244,16 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR return true } + open fun checkEqualsClassVersionRequirement(old: ProtoBuf.Class, new: ProtoBuf.Class): Boolean { + if (old.versionRequirementCount != new.versionRequirementCount) return false + + for(i in 0..old.versionRequirementCount - 1) { + if (old.getVersionRequirement(i) != new.getVersionRequirement(i)) return false + } + + return true + } + open fun checkEqualsFunctionTypeParameter(old: ProtoBuf.Function, new: ProtoBuf.Function): Boolean { if (old.typeParameterCount != new.typeParameterCount) return false @@ -1282,6 +1274,16 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR return true } + open fun checkEqualsFunctionVersionRequirement(old: ProtoBuf.Function, new: ProtoBuf.Function): Boolean { + if (old.versionRequirementCount != new.versionRequirementCount) return false + + for(i in 0..old.versionRequirementCount - 1) { + if (old.getVersionRequirement(i) != new.getVersionRequirement(i)) return false + } + + return true + } + open fun checkEqualsPropertyTypeParameter(old: ProtoBuf.Property, new: ProtoBuf.Property): Boolean { if (old.typeParameterCount != new.typeParameterCount) return false @@ -1292,6 +1294,16 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR return true } + open fun checkEqualsPropertyVersionRequirement(old: ProtoBuf.Property, new: ProtoBuf.Property): Boolean { + if (old.versionRequirementCount != new.versionRequirementCount) return false + + for(i in 0..old.versionRequirementCount - 1) { + if (old.getVersionRequirement(i) != new.getVersionRequirement(i)) return false + } + + return true + } + open fun checkEqualsTypeAliasTypeParameter(old: ProtoBuf.TypeAlias, new: ProtoBuf.TypeAlias): Boolean { if (old.typeParameterCount != new.typeParameterCount) return false @@ -1312,6 +1324,16 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR return true } + open fun checkEqualsTypeAliasVersionRequirement(old: ProtoBuf.TypeAlias, new: ProtoBuf.TypeAlias): Boolean { + if (old.versionRequirementCount != new.versionRequirementCount) return false + + for(i in 0..old.versionRequirementCount - 1) { + if (old.getVersionRequirement(i) != new.getVersionRequirement(i)) return false + } + + return true + } + open fun checkEqualsTypeTableType(old: ProtoBuf.TypeTable, new: ProtoBuf.TypeTable): Boolean { if (old.typeCount != new.typeCount) return false @@ -1372,6 +1394,16 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR return true } + open fun checkEqualsConstructorVersionRequirement(old: ProtoBuf.Constructor, new: ProtoBuf.Constructor): Boolean { + if (old.versionRequirementCount != new.versionRequirementCount) return false + + for(i in 0..old.versionRequirementCount - 1) { + if (old.getVersionRequirement(i) != new.getVersionRequirement(i)) return false + } + + return true + } + open fun checkEqualsAnnotationArgument(old: ProtoBuf.Annotation, new: ProtoBuf.Annotation): Boolean { if (old.argumentCount != new.argumentCount) return false @@ -1562,8 +1594,8 @@ fun ProtoBuf.Class.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> hashCode = 31 * hashCode + typeTable.hashCode(stringIndexes, fqNameIndexes) } - if (hasVersionRequirement()) { - hashCode = 31 * hashCode + versionRequirement + for(i in 0..versionRequirementCount - 1) { + hashCode = 31 * hashCode + getVersionRequirement(i) } if (hasVersionRequirementTable()) { @@ -1642,8 +1674,8 @@ fun ProtoBuf.Function.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) hashCode = 31 * hashCode + typeTable.hashCode(stringIndexes, fqNameIndexes) } - if (hasVersionRequirement()) { - hashCode = 31 * hashCode + versionRequirement + for(i in 0..versionRequirementCount - 1) { + hashCode = 31 * hashCode + getVersionRequirement(i) } if (hasContract()) { @@ -1726,8 +1758,8 @@ fun ProtoBuf.Property.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) hashCode = 31 * hashCode + setterFlags } - if (hasVersionRequirement()) { - hashCode = 31 * hashCode + versionRequirement + for(i in 0..versionRequirementCount - 1) { + hashCode = 31 * hashCode + getVersionRequirement(i) } if (hasExtension(JvmProtoBuf.propertySignature)) { @@ -1802,8 +1834,8 @@ fun ProtoBuf.TypeAlias.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int hashCode = 31 * hashCode + getAnnotation(i).hashCode(stringIndexes, fqNameIndexes) } - if (hasVersionRequirement()) { - hashCode = 31 * hashCode + versionRequirement + for(i in 0..versionRequirementCount - 1) { + hashCode = 31 * hashCode + getVersionRequirement(i) } return hashCode @@ -1960,8 +1992,8 @@ fun ProtoBuf.Constructor.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (I hashCode = 31 * hashCode + getValueParameter(i).hashCode(stringIndexes, fqNameIndexes) } - if (hasVersionRequirement()) { - hashCode = 31 * hashCode + versionRequirement + for(i in 0..versionRequirementCount - 1) { + hashCode = 31 * hashCode + getVersionRequirement(i) } if (hasExtension(JvmProtoBuf.constructorSignature)) { diff --git a/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt b/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt index d18fd42074d..42cec42d59e 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt @@ -223,7 +223,7 @@ class DifferenceCalculatorForClass( ProtoBufClassKind.TYPE_TABLE -> { // TODO } - ProtoCompareGenerated.ProtoBufClassKind.VERSION_REQUIREMENT, + ProtoCompareGenerated.ProtoBufClassKind.VERSION_REQUIREMENT_LIST, ProtoCompareGenerated.ProtoBufClassKind.VERSION_REQUIREMENT_TABLE -> { // TODO } diff --git a/build-common/test/org/jetbrains/kotlin/metadata/DebugProtoBuf.java b/build-common/test/org/jetbrains/kotlin/metadata/DebugProtoBuf.java index 1a6c7d65a60..587a59cea7e 100644 --- a/build-common/test/org/jetbrains/kotlin/metadata/DebugProtoBuf.java +++ b/build-common/test/org/jetbrains/kotlin/metadata/DebugProtoBuf.java @@ -10185,21 +10185,29 @@ public final class DebugProtoBuf { org.jetbrains.kotlin.metadata.DebugProtoBuf.TypeTableOrBuilder getTypeTableOrBuilder(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - boolean hasVersionRequirement(); + java.util.List getVersionRequirementList(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - int getVersionRequirement(); + int getVersionRequirementCount(); + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + int getVersionRequirement(int index); /** * optional .org.jetbrains.kotlin.metadata.VersionRequirementTable version_requirement_table = 32; @@ -10415,13 +10423,29 @@ public final class DebugProtoBuf { break; } case 248: { - bitField0_ |= 0x00000010; - versionRequirement_ = input.readInt32(); + if (!((mutable_bitField0_ & 0x00004000) == 0x00004000)) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00004000; + } + versionRequirement_.add(input.readInt32()); + break; + } + case 250: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00004000) == 0x00004000) && input.getBytesUntilLimit() > 0) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00004000; + } + while (input.getBytesUntilLimit() > 0) { + versionRequirement_.add(input.readInt32()); + } + input.popLimit(limit); break; } case 258: { org.jetbrains.kotlin.metadata.DebugProtoBuf.VersionRequirementTable.Builder subBuilder = null; - if (((bitField0_ & 0x00000020) == 0x00000020)) { + if (((bitField0_ & 0x00000010) == 0x00000010)) { subBuilder = versionRequirementTable_.toBuilder(); } versionRequirementTable_ = input.readMessage(org.jetbrains.kotlin.metadata.DebugProtoBuf.VersionRequirementTable.PARSER, extensionRegistry); @@ -10429,7 +10453,7 @@ public final class DebugProtoBuf { subBuilder.mergeFrom(versionRequirementTable_); versionRequirementTable_ = subBuilder.buildPartial(); } - bitField0_ |= 0x00000020; + bitField0_ |= 0x00000010; break; } } @@ -10470,6 +10494,9 @@ public final class DebugProtoBuf { if (((mutable_bitField0_ & 0x00001000) == 0x00001000)) { sealedSubclassFqName_ = java.util.Collections.unmodifiableList(sealedSubclassFqName_); } + if (((mutable_bitField0_ & 0x00004000) == 0x00004000)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); } @@ -11042,26 +11069,37 @@ public final class DebugProtoBuf { } public static final int VERSION_REQUIREMENT_FIELD_NUMBER = 31; - private int versionRequirement_; + private java.util.List versionRequirement_; /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000010) == 0x00000010); + public java.util.List + getVersionRequirementList() { + return versionRequirement_; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); } public static final int VERSION_REQUIREMENT_TABLE_FIELD_NUMBER = 32; @@ -11070,7 +11108,7 @@ public final class DebugProtoBuf { * optional .org.jetbrains.kotlin.metadata.VersionRequirementTable version_requirement_table = 32; */ public boolean hasVersionRequirementTable() { - return ((bitField0_ & 0x00000020) == 0x00000020); + return ((bitField0_ & 0x00000010) == 0x00000010); } /** * optional .org.jetbrains.kotlin.metadata.VersionRequirementTable version_requirement_table = 32; @@ -11100,7 +11138,7 @@ public final class DebugProtoBuf { enumEntry_ = java.util.Collections.emptyList(); sealedSubclassFqName_ = java.util.Collections.emptyList(); typeTable_ = org.jetbrains.kotlin.metadata.DebugProtoBuf.TypeTable.getDefaultInstance(); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); versionRequirementTable_ = org.jetbrains.kotlin.metadata.DebugProtoBuf.VersionRequirementTable.getDefaultInstance(); } private byte memoizedIsInitialized = -1; @@ -11229,10 +11267,10 @@ public final class DebugProtoBuf { if (((bitField0_ & 0x00000008) == 0x00000008)) { output.writeMessage(30, typeTable_); } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeInt32(31, versionRequirement_); + for (int i = 0; i < versionRequirement_.size(); i++) { + output.writeInt32(31, versionRequirement_.get(i)); } - if (((bitField0_ & 0x00000020) == 0x00000020)) { + if (((bitField0_ & 0x00000010) == 0x00000010)) { output.writeMessage(32, versionRequirementTable_); } extensionWriter.writeUntil(19000, output); @@ -11331,11 +11369,16 @@ public final class DebugProtoBuf { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(30, typeTable_); } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += org.jetbrains.kotlin.protobuf.CodedOutputStream - .computeInt32Size(31, versionRequirement_); + { + int dataSize = 0; + for (int i = 0; i < versionRequirement_.size(); i++) { + dataSize += org.jetbrains.kotlin.protobuf.CodedOutputStream + .computeInt32SizeNoTag(versionRequirement_.get(i)); + } + size += dataSize; + size += 2 * getVersionRequirementList().size(); } - if (((bitField0_ & 0x00000020) == 0x00000020)) { + if (((bitField0_ & 0x00000010) == 0x00000010)) { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(32, versionRequirementTable_); } @@ -11527,7 +11570,7 @@ public final class DebugProtoBuf { typeTableBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00002000); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00004000); if (versionRequirementTableBuilder_ == null) { versionRequirementTable_ = org.jetbrains.kotlin.metadata.DebugProtoBuf.VersionRequirementTable.getDefaultInstance(); @@ -11661,12 +11704,13 @@ public final class DebugProtoBuf { } else { result.typeTable_ = typeTableBuilder_.build(); } - if (((from_bitField0_ & 0x00004000) == 0x00004000)) { - to_bitField0_ |= 0x00000010; + if (((bitField0_ & 0x00004000) == 0x00004000)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + bitField0_ = (bitField0_ & ~0x00004000); } result.versionRequirement_ = versionRequirement_; if (((from_bitField0_ & 0x00008000) == 0x00008000)) { - to_bitField0_ |= 0x00000020; + to_bitField0_ |= 0x00000010; } if (versionRequirementTableBuilder_ == null) { result.versionRequirementTable_ = versionRequirementTable_; @@ -11913,8 +11957,15 @@ public final class DebugProtoBuf { if (other.hasTypeTable()) { mergeTypeTable(other.getTypeTable()); } - if (other.hasVersionRequirement()) { - setVersionRequirement(other.getVersionRequirement()); + if (!other.versionRequirement_.isEmpty()) { + if (versionRequirement_.isEmpty()) { + versionRequirement_ = other.versionRequirement_; + bitField0_ = (bitField0_ & ~0x00004000); + } else { + ensureVersionRequirementIsMutable(); + versionRequirement_.addAll(other.versionRequirement_); + } + onChanged(); } if (other.hasVersionRequirementTable()) { mergeVersionRequirementTable(other.getVersionRequirementTable()); @@ -14141,50 +14192,96 @@ public final class DebugProtoBuf { return typeTableBuilder_; } - private int versionRequirement_ ; - /** - * optional int32 version_requirement = 31; - * - *
-       * Index into the VersionRequirementTable
-       * 
- */ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00004000) == 0x00004000); + private java.util.List versionRequirement_ = java.util.Collections.emptyList(); + private void ensureVersionRequirementIsMutable() { + if (!((bitField0_ & 0x00004000) == 0x00004000)) { + versionRequirement_ = new java.util.ArrayList(versionRequirement_); + bitField0_ |= 0x00004000; + } } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public java.util.List + getVersionRequirementList() { + return java.util.Collections.unmodifiableList(versionRequirement_); } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public Builder setVersionRequirement(int value) { - bitField0_ |= 0x00004000; - versionRequirement_ = value; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder setVersionRequirement( + int index, int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.set(index, value); onChanged(); return this; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addVersionRequirement(int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.add(value); + onChanged(); + return this; + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addAllVersionRequirement( + java.lang.Iterable values) { + ensureVersionRequirementIsMutable(); + org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll( + values, versionRequirement_); + onChanged(); + return this; + } + /** + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ public Builder clearVersionRequirement() { + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00004000); - versionRequirement_ = 0; onChanged(); return this; } @@ -17018,21 +17115,29 @@ public final class DebugProtoBuf { int index); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - boolean hasVersionRequirement(); + java.util.List getVersionRequirementList(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - int getVersionRequirement(); + int getVersionRequirementCount(); + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + int getVersionRequirement(int index); } /** * Protobuf type {@code org.jetbrains.kotlin.metadata.Constructor} @@ -17101,8 +17206,24 @@ public final class DebugProtoBuf { break; } case 248: { - bitField0_ |= 0x00000002; - versionRequirement_ = input.readInt32(); + if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000004; + } + versionRequirement_.add(input.readInt32()); + break; + } + case 250: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000004; + } + while (input.getBytesUntilLimit() > 0) { + versionRequirement_.add(input.readInt32()); + } + input.popLimit(limit); break; } } @@ -17116,6 +17237,9 @@ public final class DebugProtoBuf { if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) { valueParameter_ = java.util.Collections.unmodifiableList(valueParameter_); } + if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); } @@ -17211,32 +17335,43 @@ public final class DebugProtoBuf { } public static final int VERSION_REQUIREMENT_FIELD_NUMBER = 31; - private int versionRequirement_; + private java.util.List versionRequirement_; /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000002) == 0x00000002); + public java.util.List + getVersionRequirementList() { + return versionRequirement_; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); } private void initFields() { flags_ = 6; valueParameter_ = java.util.Collections.emptyList(); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -17270,8 +17405,8 @@ public final class DebugProtoBuf { for (int i = 0; i < valueParameter_.size(); i++) { output.writeMessage(2, valueParameter_.get(i)); } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeInt32(31, versionRequirement_); + for (int i = 0; i < versionRequirement_.size(); i++) { + output.writeInt32(31, versionRequirement_.get(i)); } extensionWriter.writeUntil(19000, output); getUnknownFields().writeTo(output); @@ -17291,9 +17426,14 @@ public final class DebugProtoBuf { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(2, valueParameter_.get(i)); } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += org.jetbrains.kotlin.protobuf.CodedOutputStream - .computeInt32Size(31, versionRequirement_); + { + int dataSize = 0; + for (int i = 0; i < versionRequirement_.size(); i++) { + dataSize += org.jetbrains.kotlin.protobuf.CodedOutputStream + .computeInt32SizeNoTag(versionRequirement_.get(i)); + } + size += dataSize; + size += 2 * getVersionRequirementList().size(); } size += extensionsSerializedSize(); size += getUnknownFields().getSerializedSize(); @@ -17423,7 +17563,7 @@ public final class DebugProtoBuf { } else { valueParameterBuilder_.clear(); } - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000004); return this; } @@ -17466,8 +17606,9 @@ public final class DebugProtoBuf { } else { result.valueParameter_ = valueParameterBuilder_.build(); } - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000002; + if (((bitField0_ & 0x00000004) == 0x00000004)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + bitField0_ = (bitField0_ & ~0x00000004); } result.versionRequirement_ = versionRequirement_; result.bitField0_ = to_bitField0_; @@ -17515,8 +17656,15 @@ public final class DebugProtoBuf { } } } - if (other.hasVersionRequirement()) { - setVersionRequirement(other.getVersionRequirement()); + if (!other.versionRequirement_.isEmpty()) { + if (versionRequirement_.isEmpty()) { + versionRequirement_ = other.versionRequirement_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureVersionRequirementIsMutable(); + versionRequirement_.addAll(other.versionRequirement_); + } + onChanged(); } this.mergeExtensionFields(other); this.mergeUnknownFields(other.getUnknownFields()); @@ -17852,50 +18000,96 @@ public final class DebugProtoBuf { return valueParameterBuilder_; } - private int versionRequirement_ ; - /** - * optional int32 version_requirement = 31; - * - *
-       * Index into the VersionRequirementTable
-       * 
- */ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000004) == 0x00000004); + private java.util.List versionRequirement_ = java.util.Collections.emptyList(); + private void ensureVersionRequirementIsMutable() { + if (!((bitField0_ & 0x00000004) == 0x00000004)) { + versionRequirement_ = new java.util.ArrayList(versionRequirement_); + bitField0_ |= 0x00000004; + } } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public java.util.List + getVersionRequirementList() { + return java.util.Collections.unmodifiableList(versionRequirement_); } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public Builder setVersionRequirement(int value) { - bitField0_ |= 0x00000004; - versionRequirement_ = value; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder setVersionRequirement( + int index, int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.set(index, value); onChanged(); return this; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addVersionRequirement(int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.add(value); + onChanged(); + return this; + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addAllVersionRequirement( + java.lang.Iterable values) { + ensureVersionRequirementIsMutable(); + org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll( + values, versionRequirement_); + onChanged(); + return this; + } + /** + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ public Builder clearVersionRequirement() { + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000004); - versionRequirement_ = 0; onChanged(); return this; } @@ -18077,21 +18271,29 @@ public final class DebugProtoBuf { org.jetbrains.kotlin.metadata.DebugProtoBuf.TypeTableOrBuilder getTypeTableOrBuilder(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - boolean hasVersionRequirement(); + java.util.List getVersionRequirementList(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - int getVersionRequirement(); + int getVersionRequirementCount(); + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + int getVersionRequirement(int index); /** * optional .org.jetbrains.kotlin.metadata.Contract contract = 32; @@ -18240,13 +18442,29 @@ public final class DebugProtoBuf { break; } case 248: { - bitField0_ |= 0x00000100; - versionRequirement_ = input.readInt32(); + if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000400; + } + versionRequirement_.add(input.readInt32()); + break; + } + case 250: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00000400) == 0x00000400) && input.getBytesUntilLimit() > 0) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000400; + } + while (input.getBytesUntilLimit() > 0) { + versionRequirement_.add(input.readInt32()); + } + input.popLimit(limit); break; } case 258: { org.jetbrains.kotlin.metadata.DebugProtoBuf.Contract.Builder subBuilder = null; - if (((bitField0_ & 0x00000200) == 0x00000200)) { + if (((bitField0_ & 0x00000100) == 0x00000100)) { subBuilder = contract_.toBuilder(); } contract_ = input.readMessage(org.jetbrains.kotlin.metadata.DebugProtoBuf.Contract.PARSER, extensionRegistry); @@ -18254,7 +18472,7 @@ public final class DebugProtoBuf { subBuilder.mergeFrom(contract_); contract_ = subBuilder.buildPartial(); } - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000100; break; } } @@ -18271,6 +18489,9 @@ public final class DebugProtoBuf { if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) { valueParameter_ = java.util.Collections.unmodifiableList(valueParameter_); } + if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); } @@ -18540,26 +18761,37 @@ public final class DebugProtoBuf { } public static final int VERSION_REQUIREMENT_FIELD_NUMBER = 31; - private int versionRequirement_; + private java.util.List versionRequirement_; /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000100) == 0x00000100); + public java.util.List + getVersionRequirementList() { + return versionRequirement_; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); } public static final int CONTRACT_FIELD_NUMBER = 32; @@ -18568,7 +18800,7 @@ public final class DebugProtoBuf { * optional .org.jetbrains.kotlin.metadata.Contract contract = 32; */ public boolean hasContract() { - return ((bitField0_ & 0x00000200) == 0x00000200); + return ((bitField0_ & 0x00000100) == 0x00000100); } /** * optional .org.jetbrains.kotlin.metadata.Contract contract = 32; @@ -18594,7 +18826,7 @@ public final class DebugProtoBuf { receiverTypeId_ = 0; valueParameter_ = java.util.Collections.emptyList(); typeTable_ = org.jetbrains.kotlin.metadata.DebugProtoBuf.TypeTable.getDefaultInstance(); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); contract_ = org.jetbrains.kotlin.metadata.DebugProtoBuf.Contract.getDefaultInstance(); } private byte memoizedIsInitialized = -1; @@ -18687,10 +18919,10 @@ public final class DebugProtoBuf { if (((bitField0_ & 0x00000080) == 0x00000080)) { output.writeMessage(30, typeTable_); } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - output.writeInt32(31, versionRequirement_); + for (int i = 0; i < versionRequirement_.size(); i++) { + output.writeInt32(31, versionRequirement_.get(i)); } - if (((bitField0_ & 0x00000200) == 0x00000200)) { + if (((bitField0_ & 0x00000100) == 0x00000100)) { output.writeMessage(32, contract_); } extensionWriter.writeUntil(19000, output); @@ -18743,11 +18975,16 @@ public final class DebugProtoBuf { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(30, typeTable_); } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - size += org.jetbrains.kotlin.protobuf.CodedOutputStream - .computeInt32Size(31, versionRequirement_); + { + int dataSize = 0; + for (int i = 0; i < versionRequirement_.size(); i++) { + dataSize += org.jetbrains.kotlin.protobuf.CodedOutputStream + .computeInt32SizeNoTag(versionRequirement_.get(i)); + } + size += dataSize; + size += 2 * getVersionRequirementList().size(); } - if (((bitField0_ & 0x00000200) == 0x00000200)) { + if (((bitField0_ & 0x00000100) == 0x00000100)) { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(32, contract_); } @@ -18916,7 +19153,7 @@ public final class DebugProtoBuf { typeTableBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000200); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000400); if (contractBuilder_ == null) { contract_ = org.jetbrains.kotlin.metadata.DebugProtoBuf.Contract.getDefaultInstance(); @@ -19014,12 +19251,13 @@ public final class DebugProtoBuf { } else { result.typeTable_ = typeTableBuilder_.build(); } - if (((from_bitField0_ & 0x00000400) == 0x00000400)) { - to_bitField0_ |= 0x00000100; + if (((bitField0_ & 0x00000400) == 0x00000400)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + bitField0_ = (bitField0_ & ~0x00000400); } result.versionRequirement_ = versionRequirement_; if (((from_bitField0_ & 0x00000800) == 0x00000800)) { - to_bitField0_ |= 0x00000200; + to_bitField0_ |= 0x00000100; } if (contractBuilder_ == null) { result.contract_ = contract_; @@ -19118,8 +19356,15 @@ public final class DebugProtoBuf { if (other.hasTypeTable()) { mergeTypeTable(other.getTypeTable()); } - if (other.hasVersionRequirement()) { - setVersionRequirement(other.getVersionRequirement()); + if (!other.versionRequirement_.isEmpty()) { + if (versionRequirement_.isEmpty()) { + versionRequirement_ = other.versionRequirement_; + bitField0_ = (bitField0_ & ~0x00000400); + } else { + ensureVersionRequirementIsMutable(); + versionRequirement_.addAll(other.versionRequirement_); + } + onChanged(); } if (other.hasContract()) { mergeContract(other.getContract()); @@ -20240,50 +20485,96 @@ public final class DebugProtoBuf { return typeTableBuilder_; } - private int versionRequirement_ ; - /** - * optional int32 version_requirement = 31; - * - *
-       * Index into the VersionRequirementTable
-       * 
- */ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000400) == 0x00000400); + private java.util.List versionRequirement_ = java.util.Collections.emptyList(); + private void ensureVersionRequirementIsMutable() { + if (!((bitField0_ & 0x00000400) == 0x00000400)) { + versionRequirement_ = new java.util.ArrayList(versionRequirement_); + bitField0_ |= 0x00000400; + } } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public java.util.List + getVersionRequirementList() { + return java.util.Collections.unmodifiableList(versionRequirement_); } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public Builder setVersionRequirement(int value) { - bitField0_ |= 0x00000400; - versionRequirement_ = value; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder setVersionRequirement( + int index, int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.set(index, value); onChanged(); return this; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addVersionRequirement(int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.add(value); + onChanged(); + return this; + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addAllVersionRequirement( + java.lang.Iterable values) { + ensureVersionRequirementIsMutable(); + org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll( + values, versionRequirement_); + onChanged(); + return this; + } + /** + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ public Builder clearVersionRequirement() { + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000400); - versionRequirement_ = 0; onChanged(); return this; } @@ -20603,21 +20894,29 @@ public final class DebugProtoBuf { int getSetterFlags(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - boolean hasVersionRequirement(); + java.util.List getVersionRequirementList(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - int getVersionRequirement(); + int getVersionRequirementCount(); + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + int getVersionRequirement(int index); } /** * Protobuf type {@code org.jetbrains.kotlin.metadata.Property} @@ -20755,8 +21054,24 @@ public final class DebugProtoBuf { break; } case 248: { - bitField0_ |= 0x00000400; - versionRequirement_ = input.readInt32(); + if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000800; + } + versionRequirement_.add(input.readInt32()); + break; + } + case 250: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00000800) == 0x00000800) && input.getBytesUntilLimit() > 0) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000800; + } + while (input.getBytesUntilLimit() > 0) { + versionRequirement_.add(input.readInt32()); + } + input.popLimit(limit); break; } } @@ -20770,6 +21085,9 @@ public final class DebugProtoBuf { if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) { typeParameter_ = java.util.Collections.unmodifiableList(typeParameter_); } + if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); } @@ -21062,26 +21380,37 @@ public final class DebugProtoBuf { } public static final int VERSION_REQUIREMENT_FIELD_NUMBER = 31; - private int versionRequirement_; + private java.util.List versionRequirement_; /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000400) == 0x00000400); + public java.util.List + getVersionRequirementList() { + return versionRequirement_; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); } private void initFields() { @@ -21096,7 +21425,7 @@ public final class DebugProtoBuf { setterValueParameter_ = org.jetbrains.kotlin.metadata.DebugProtoBuf.ValueParameter.getDefaultInstance(); getterFlags_ = 0; setterFlags_ = 0; - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -21179,8 +21508,8 @@ public final class DebugProtoBuf { if (((bitField0_ & 0x00000001) == 0x00000001)) { output.writeInt32(11, flags_); } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - output.writeInt32(31, versionRequirement_); + for (int i = 0; i < versionRequirement_.size(); i++) { + output.writeInt32(31, versionRequirement_.get(i)); } extensionWriter.writeUntil(19000, output); getUnknownFields().writeTo(output); @@ -21236,9 +21565,14 @@ public final class DebugProtoBuf { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeInt32Size(11, flags_); } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - size += org.jetbrains.kotlin.protobuf.CodedOutputStream - .computeInt32Size(31, versionRequirement_); + { + int dataSize = 0; + for (int i = 0; i < versionRequirement_.size(); i++) { + dataSize += org.jetbrains.kotlin.protobuf.CodedOutputStream + .computeInt32SizeNoTag(versionRequirement_.get(i)); + } + size += dataSize; + size += 2 * getVersionRequirementList().size(); } size += extensionsSerializedSize(); size += getUnknownFields().getSerializedSize(); @@ -21401,7 +21735,7 @@ public final class DebugProtoBuf { bitField0_ = (bitField0_ & ~0x00000200); setterFlags_ = 0; bitField0_ = (bitField0_ & ~0x00000400); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000800); return this; } @@ -21492,8 +21826,9 @@ public final class DebugProtoBuf { to_bitField0_ |= 0x00000200; } result.setterFlags_ = setterFlags_; - if (((from_bitField0_ & 0x00000800) == 0x00000800)) { - to_bitField0_ |= 0x00000400; + if (((bitField0_ & 0x00000800) == 0x00000800)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + bitField0_ = (bitField0_ & ~0x00000800); } result.versionRequirement_ = versionRequirement_; result.bitField0_ = to_bitField0_; @@ -21568,8 +21903,15 @@ public final class DebugProtoBuf { if (other.hasSetterFlags()) { setSetterFlags(other.getSetterFlags()); } - if (other.hasVersionRequirement()) { - setVersionRequirement(other.getVersionRequirement()); + if (!other.versionRequirement_.isEmpty()) { + if (versionRequirement_.isEmpty()) { + versionRequirement_ = other.versionRequirement_; + bitField0_ = (bitField0_ & ~0x00000800); + } else { + ensureVersionRequirementIsMutable(); + versionRequirement_.addAll(other.versionRequirement_); + } + onChanged(); } this.mergeExtensionFields(other); this.mergeUnknownFields(other.getUnknownFields()); @@ -22555,50 +22897,96 @@ public final class DebugProtoBuf { return this; } - private int versionRequirement_ ; - /** - * optional int32 version_requirement = 31; - * - *
-       * Index into the VersionRequirementTable
-       * 
- */ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000800) == 0x00000800); + private java.util.List versionRequirement_ = java.util.Collections.emptyList(); + private void ensureVersionRequirementIsMutable() { + if (!((bitField0_ & 0x00000800) == 0x00000800)) { + versionRequirement_ = new java.util.ArrayList(versionRequirement_); + bitField0_ |= 0x00000800; + } } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public java.util.List + getVersionRequirementList() { + return java.util.Collections.unmodifiableList(versionRequirement_); } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public Builder setVersionRequirement(int value) { - bitField0_ |= 0x00000800; - versionRequirement_ = value; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder setVersionRequirement( + int index, int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.set(index, value); onChanged(); return this; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addVersionRequirement(int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.add(value); + onChanged(); + return this; + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addAllVersionRequirement( + java.lang.Iterable values) { + ensureVersionRequirementIsMutable(); + org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll( + values, versionRequirement_); + onChanged(); + return this; + } + /** + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ public Builder clearVersionRequirement() { + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000800); - versionRequirement_ = 0; onChanged(); return this; } @@ -23854,21 +24242,29 @@ public final class DebugProtoBuf { int index); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - boolean hasVersionRequirement(); + java.util.List getVersionRequirementList(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - int getVersionRequirement(); + int getVersionRequirementCount(); + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + int getVersionRequirement(int index); } /** * Protobuf type {@code org.jetbrains.kotlin.metadata.TypeAlias} @@ -23986,8 +24382,24 @@ public final class DebugProtoBuf { break; } case 248: { - bitField0_ |= 0x00000040; - versionRequirement_ = input.readInt32(); + if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000100; + } + versionRequirement_.add(input.readInt32()); + break; + } + case 250: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00000100) == 0x00000100) && input.getBytesUntilLimit() > 0) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000100; + } + while (input.getBytesUntilLimit() > 0) { + versionRequirement_.add(input.readInt32()); + } + input.popLimit(limit); break; } } @@ -24004,6 +24416,9 @@ public final class DebugProtoBuf { if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) { annotation_ = java.util.Collections.unmodifiableList(annotation_); } + if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); } @@ -24219,26 +24634,37 @@ public final class DebugProtoBuf { } public static final int VERSION_REQUIREMENT_FIELD_NUMBER = 31; - private int versionRequirement_; + private java.util.List versionRequirement_; /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000040) == 0x00000040); + public java.util.List + getVersionRequirementList() { + return versionRequirement_; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); } private void initFields() { @@ -24250,7 +24676,7 @@ public final class DebugProtoBuf { expandedType_ = org.jetbrains.kotlin.metadata.DebugProtoBuf.Type.getDefaultInstance(); expandedTypeId_ = 0; annotation_ = java.util.Collections.emptyList(); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -24324,8 +24750,8 @@ public final class DebugProtoBuf { for (int i = 0; i < annotation_.size(); i++) { output.writeMessage(8, annotation_.get(i)); } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeInt32(31, versionRequirement_); + for (int i = 0; i < versionRequirement_.size(); i++) { + output.writeInt32(31, versionRequirement_.get(i)); } extensionWriter.writeUntil(200, output); getUnknownFields().writeTo(output); @@ -24369,9 +24795,14 @@ public final class DebugProtoBuf { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(8, annotation_.get(i)); } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += org.jetbrains.kotlin.protobuf.CodedOutputStream - .computeInt32Size(31, versionRequirement_); + { + int dataSize = 0; + for (int i = 0; i < versionRequirement_.size(); i++) { + dataSize += org.jetbrains.kotlin.protobuf.CodedOutputStream + .computeInt32SizeNoTag(versionRequirement_.get(i)); + } + size += dataSize; + size += 2 * getVersionRequirementList().size(); } size += extensionsSerializedSize(); size += getUnknownFields().getSerializedSize(); @@ -24528,7 +24959,7 @@ public final class DebugProtoBuf { } else { annotationBuilder_.clear(); } - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000100); return this; } @@ -24608,8 +25039,9 @@ public final class DebugProtoBuf { } else { result.annotation_ = annotationBuilder_.build(); } - if (((from_bitField0_ & 0x00000100) == 0x00000100)) { - to_bitField0_ |= 0x00000040; + if (((bitField0_ & 0x00000100) == 0x00000100)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + bitField0_ = (bitField0_ & ~0x00000100); } result.versionRequirement_ = versionRequirement_; result.bitField0_ = to_bitField0_; @@ -24698,8 +25130,15 @@ public final class DebugProtoBuf { } } } - if (other.hasVersionRequirement()) { - setVersionRequirement(other.getVersionRequirement()); + if (!other.versionRequirement_.isEmpty()) { + if (versionRequirement_.isEmpty()) { + versionRequirement_ = other.versionRequirement_; + bitField0_ = (bitField0_ & ~0x00000100); + } else { + ensureVersionRequirementIsMutable(); + versionRequirement_.addAll(other.versionRequirement_); + } + onChanged(); } this.mergeExtensionFields(other); this.mergeUnknownFields(other.getUnknownFields()); @@ -25621,50 +26060,96 @@ public final class DebugProtoBuf { return annotationBuilder_; } - private int versionRequirement_ ; - /** - * optional int32 version_requirement = 31; - * - *
-       * Index into the VersionRequirementTable
-       * 
- */ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000100) == 0x00000100); + private java.util.List versionRequirement_ = java.util.Collections.emptyList(); + private void ensureVersionRequirementIsMutable() { + if (!((bitField0_ & 0x00000100) == 0x00000100)) { + versionRequirement_ = new java.util.ArrayList(versionRequirement_); + bitField0_ |= 0x00000100; + } } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public java.util.List + getVersionRequirementList() { + return java.util.Collections.unmodifiableList(versionRequirement_); } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public Builder setVersionRequirement(int value) { - bitField0_ |= 0x00000100; - versionRequirement_ = value; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder setVersionRequirement( + int index, int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.set(index, value); onChanged(); return this; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addVersionRequirement(int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.add(value); + onChanged(); + return this; + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addAllVersionRequirement( + java.lang.Iterable values) { + ensureVersionRequirementIsMutable(); + org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll( + values, versionRequirement_); + onChanged(); + return this; + } + /** + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ public Builder clearVersionRequirement() { + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000100); - versionRequirement_ = 0; onChanged(); return this; } @@ -33715,7 +34200,7 @@ public final class DebugProtoBuf { "tadata.EnumEntry\022\'\n\027sealed_subclass_fq_n" + "ame\030\020 \003(\005B\006\020\001\220\265\030\001\022<\n\ntype_table\030\036 \001(\0132(." + "org.jetbrains.kotlin.metadata.TypeTable\022" + - "\033\n\023version_requirement\030\037 \001(\005\022Y\n\031version_" + + "\033\n\023version_requirement\030\037 \003(\005\022Y\n\031version_" + "requirement_table\030 \001(\01326.org.jetbrains." + "kotlin.metadata.VersionRequirementTable\"" + "x\n\004Kind\022\t\n\005CLASS\020\000\022\r\n\tINTERFACE\020\001\022\016\n\nENU" + @@ -33735,7 +34220,7 @@ public final class DebugProtoBuf { "ble\030\002 \001(\005:\002-1\"\214\001\n\013Constructor\022\020\n\005flags\030\001" + " \001(\005:\0016\022F\n\017value_parameter\030\002 \003(\0132-.org.j" + "etbrains.kotlin.metadata.ValueParameter\022" + - "\033\n\023version_requirement\030\037 \001(\005*\006\010d\020\270\224\001\"\232\004\n" + + "\033\n\023version_requirement\030\037 \003(\005*\006\010d\020\270\224\001\"\232\004\n" + "\010Function\022\020\n\005flags\030\t \001(\005:\0016\022\024\n\told_flags" + "\030\001 \001(\005:\0016\022\022\n\004name\030\002 \002(\005B\004\210\265\030\001\0228\n\013return_" + "type\030\003 \001(\0132#.org.jetbrains.kotlin.metada" + @@ -33747,7 +34232,7 @@ public final class DebugProtoBuf { "ameter\030\006 \003(\0132-.org.jetbrains.kotlin.meta" + "data.ValueParameter\022<\n\ntype_table\030\036 \001(\0132" + "(.org.jetbrains.kotlin.metadata.TypeTabl" + - "e\022\033\n\023version_requirement\030\037 \001(\005\0229\n\010contra" + + "e\022\033\n\023version_requirement\030\037 \003(\005\0229\n\010contra" + "ct\030 \001(\0132\'.org.jetbrains.kotlin.metadata" + ".Contract*\006\010d\020\270\224\001\"\331\003\n\010Property\022\022\n\005flags\030" + "\013 \001(\005:\003518\022\027\n\told_flags\030\001 \001(\005:\0042054\022\022\n\004n", @@ -33761,7 +34246,7 @@ public final class DebugProtoBuf { "\006 \001(\0132-.org.jetbrains.kotlin.metadata.Va" + "lueParameter\022\024\n\014getter_flags\030\007 \001(\005\022\024\n\014se" + "tter_flags\030\010 \001(\005\022\033\n\023version_requirement\030", - "\037 \001(\005*\006\010d\020\270\224\001\"\343\001\n\016ValueParameter\022\020\n\005flag" + + "\037 \003(\005*\006\010d\020\270\224\001\"\343\001\n\016ValueParameter\022\020\n\005flag" + "s\030\001 \001(\005:\0010\022\022\n\004name\030\002 \002(\005B\004\210\265\030\001\0221\n\004type\030\003" + " \001(\0132#.org.jetbrains.kotlin.metadata.Typ" + "e\022\017\n\007type_id\030\005 \001(\005\022@\n\023vararg_element_typ" + @@ -33776,7 +34261,7 @@ public final class DebugProtoBuf { ".org.jetbrains.kotlin.metadata.Type\022\030\n\020e" + "xpanded_type_id\030\007 \001(\005\022=\n\nannotation\030\010 \003(" + "\0132).org.jetbrains.kotlin.metadata.Annota" + - "tion\022\033\n\023version_requirement\030\037 \001(\005*\005\010d\020\310\001" + + "tion\022\033\n\023version_requirement\030\037 \003(\005*\005\010d\020\310\001" + "\"&\n\tEnumEntry\022\022\n\004name\030\001 \001(\005B\004\210\265\030\001*\005\010d\020\310\001" + "\"\225\003\n\022VersionRequirement\022\017\n\007version\030\001 \001(\005" + "\022\024\n\014version_full\030\002 \001(\005\022M\n\005level\030\003 \001(\01627." + diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt index 1b48139ae50..923367e90ee 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt @@ -76,9 +76,9 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta it is CallableMemberDescriptor && it.hasJvmDefaultAnnotation() } ) { - assert(!builder.hasVersionRequirement()) { "VersionRequirement should be empty for $classDescriptor" } - builder.versionRequirement = - writeVersionRequirement(1, 2, 40, ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION, versionRequirementTable) + builder.addVersionRequirement( + writeVersionRequirement(1, 2, 40, ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION, versionRequirementTable) + ) } } @@ -183,9 +183,9 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta if (descriptor.isJvmFieldPropertyInInterfaceCompanion()) { proto.setExtension(JvmProtoBuf.flags, JvmFlags.getPropertyFlags(true)) - assert(!proto.hasVersionRequirement()) { "VersionRequirement should be empty for $descriptor" } - proto.versionRequirement = - writeVersionRequirement(1, 2, 70, ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION, versionRequirementTable) + proto.addVersionRequirement( + writeVersionRequirement(1, 2, 70, ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION, versionRequirementTable) + ) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/deprecationUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/deprecationUtil.kt index 849d425f4a4..1a1e7784ec6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/deprecationUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/deprecationUtil.kt @@ -310,7 +310,9 @@ class DeprecationResolver( result.add(deprecation) } - getDeprecationByVersionRequirement(target)?.let(result::add) + for (deprecation in getDeprecationByVersionRequirement(target)) { + result.add(deprecation) + } getDeprecationByCoroutinesVersion(target)?.let(result::add) } @@ -356,30 +358,33 @@ class DeprecationResolver( DeprecatedExperimentalCoroutine(target) else null - private fun getDeprecationByVersionRequirement(target: DeclarationDescriptor): DeprecatedByVersionRequirement? { + private fun getDeprecationByVersionRequirement(target: DeclarationDescriptor): List { fun createVersion(version: String): MavenComparableVersion? = try { MavenComparableVersion(version) } catch (e: Exception) { null } - val versionRequirement = - (target as? DeserializedMemberDescriptor)?.versionRequirement - ?: (target as? DeserializedClassDescriptor)?.versionRequirement - ?: return null - val requiredVersion = createVersion(versionRequirement.version.asString()) - val currentVersion = when (versionRequirement.kind) { - ProtoBuf.VersionRequirement.VersionKind.LANGUAGE_VERSION -> - MavenComparableVersion(languageVersionSettings.languageVersion.versionString) - ProtoBuf.VersionRequirement.VersionKind.API_VERSION -> - languageVersionSettings.apiVersion.version - ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION -> - KotlinCompilerVersion.getVersion()?.substringBefore('-')?.let(::createVersion) - else -> null + val versionRequirements = + (target as? DeserializedMemberDescriptor)?.versionRequirements + ?: (target as? DeserializedClassDescriptor)?.versionRequirements + ?: return emptyList() + + return versionRequirements.mapNotNull { versionRequirement -> + val requiredVersion = createVersion(versionRequirement.version.asString()) + val currentVersion = when (versionRequirement.kind) { + ProtoBuf.VersionRequirement.VersionKind.LANGUAGE_VERSION -> + MavenComparableVersion(languageVersionSettings.languageVersion.versionString) + ProtoBuf.VersionRequirement.VersionKind.API_VERSION -> + languageVersionSettings.apiVersion.version + ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION -> + KotlinCompilerVersion.getVersion()?.substringBefore('-')?.let(::createVersion) + else -> null + } + if (currentVersion != null && currentVersion < requiredVersion) + DeprecatedByVersionRequirement(versionRequirement, target) + else + null } - if (currentVersion != null && currentVersion < requiredVersion) { - return DeprecatedByVersionRequirement(versionRequirement, target) - } - return null } } diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt index 8e1cec62e53..fe65cf21360 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.builtins.transformSuspendFunctionToRuntimeFunctionTy import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotated +import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.Flags import org.jetbrains.kotlin.metadata.deserialization.VersionRequirement @@ -141,10 +142,7 @@ class DescriptorSerializer private constructor( builder.typeTable = typeTableProto } - val requirement = serializeVersionRequirement(classDescriptor) - if (requirement != null) { - builder.versionRequirement = requirement - } + builder.addAllVersionRequirement(serializeVersionRequirements(classDescriptor)) extension.serializeClass(classDescriptor, builder, versionRequirementTable) @@ -235,11 +233,10 @@ class DescriptorSerializer private constructor( } } - val requirement = serializeVersionRequirement(descriptor) - if (requirement != null) { - builder.versionRequirement = requirement - } else if (descriptor.isSuspendOrHasSuspendTypesInSignature()) { - builder.versionRequirement = writeVersionRequirementDependingOnCoroutinesVersion() + builder.addAllVersionRequirement(serializeVersionRequirements(descriptor)) + + if (descriptor.isSuspendOrHasSuspendTypesInSignature()) { + builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion()) } extension.serializeProperty(descriptor, builder, versionRequirementTable) @@ -305,11 +302,10 @@ class DescriptorSerializer private constructor( } } - val requirement = serializeVersionRequirement(descriptor) - if (requirement != null) { - builder.versionRequirement = requirement - } else if (descriptor.isSuspendOrHasSuspendTypesInSignature()) { - builder.versionRequirement = writeVersionRequirementDependingOnCoroutinesVersion() + builder.addAllVersionRequirement(serializeVersionRequirements(descriptor)) + + if (descriptor.isSuspendOrHasSuspendTypesInSignature()) { + builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion()) } contractSerializer.serializeContractOfFunctionIfAny(descriptor, builder, this) @@ -335,11 +331,10 @@ class DescriptorSerializer private constructor( builder.addValueParameter(local.valueParameter(valueParameterDescriptor)) } - val requirement = serializeVersionRequirement(descriptor) - if (requirement != null) { - builder.versionRequirement = requirement - } else if (descriptor.isSuspendOrHasSuspendTypesInSignature()) { - builder.versionRequirement = writeVersionRequirementDependingOnCoroutinesVersion() + builder.addAllVersionRequirement(serializeVersionRequirements(descriptor)) + + if (descriptor.isSuspendOrHasSuspendTypesInSignature()) { + builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion()) } extension.serializeConstructor(descriptor, builder) @@ -392,10 +387,7 @@ class DescriptorSerializer private constructor( builder.setExpandedType(local.type(expandedType)) } - val requirement = serializeVersionRequirement(descriptor) - if (requirement != null) { - builder.versionRequirement = requirement - } + builder.addAllVersionRequirement(serializeVersionRequirements(descriptor)) for (annotation in descriptor.nonSourceAnnotations) { builder.addAnnotation(extension.annotationSerializer.serializeAnnotation(annotation)) @@ -633,9 +625,13 @@ class DescriptorSerializer private constructor( return writeVersionRequirement(major, minor, patch, versionKind, versionRequirementTable) } - // Returns index into versionRequirementTable, or null if there's no @RequireKotlin on the descriptor - private fun serializeVersionRequirement(descriptor: DeclarationDescriptor): Int? { - val annotation = descriptor.annotations.findAnnotation(RequireKotlinNames.FQ_NAME) ?: return null + // Returns a list of indices into versionRequirementTable, or empty list if there's no @RequireKotlin on the descriptor + private fun serializeVersionRequirements(descriptor: DeclarationDescriptor): List = + descriptor.annotations + .filter { it.fqName == RequireKotlinNames.FQ_NAME } + .mapNotNull(::serializeVersionRequirementFromRequireKotlin) + + private fun serializeVersionRequirementFromRequireKotlin(annotation: AnnotationDescriptor): Int? { val args = annotation.allValueArguments val versionString = (args[RequireKotlinNames.VERSION] as? StringValue)?.value ?: return null diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/library/a.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/library/a.kt new file mode 100644 index 00000000000..425e2de3d44 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/library/a.kt @@ -0,0 +1,27 @@ +@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") +package a + +import kotlin.internal.RequireKotlin as RK +import kotlin.internal.RequireKotlinVersionKind as K + +@RK("42.33", message = "This declaration is only supported since Kotlin 42.33") +@RK("40.34", versionKind = K.API_VERSION) +@RK("45.35") +class A + +@RK("42.33", message = "This declaration is only supported since Kotlin 42.33") +@RK("40.34", versionKind = K.API_VERSION) +@RK("45.35") +@RK("1.1") +fun f() {} + +@RK("42.33", message = "This declaration is only supported since Kotlin 42.33") +@RK("40.34", versionKind = K.API_VERSION) +@RK("45.35") +val p = "" + +@RK("42.33", message = "This declaration is only supported since Kotlin 42.33") +@RK("40.34", versionKind = K.API_VERSION) +@RK("45.35") +@RK("1.1") +typealias TA = String diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/output.txt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/output.txt new file mode 100644 index 00000000000..0f10f6a5f16 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/output.txt @@ -0,0 +1,37 @@ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:3:13: error: 'A' is only available since Kotlin 42.33 and cannot be used in Kotlin 1.2. This declaration is only supported since Kotlin 42.33 +fun test(a: A): TA { + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:3:13: error: 'A' is only available since Kotlin 40.34 and cannot be used in Kotlin 1.2 +fun test(a: A): TA { + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:3:13: error: 'A' is only available since Kotlin 45.35 and cannot be used in Kotlin 1.2 +fun test(a: A): TA { + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:3:17: error: 'typealias TA = String' is only available since Kotlin 42.33 and cannot be used in Kotlin 1.2. This declaration is only supported since Kotlin 42.33 +fun test(a: A): TA { + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:3:17: error: 'typealias TA = String' is only available since Kotlin 40.34 and cannot be used in Kotlin 1.2 +fun test(a: A): TA { + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:3:17: error: 'typealias TA = String' is only available since Kotlin 45.35 and cannot be used in Kotlin 1.2 +fun test(a: A): TA { + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:4:5: error: 'f(): Unit' is only available since Kotlin 42.33 and cannot be used in Kotlin 1.2. This declaration is only supported since Kotlin 42.33 + f() + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:4:5: error: 'f(): Unit' is only available since Kotlin 40.34 and cannot be used in Kotlin 1.2 + f() + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:4:5: error: 'f(): Unit' is only available since Kotlin 45.35 and cannot be used in Kotlin 1.2 + f() + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:5:12: error: 'p: String' is only available since Kotlin 42.33 and cannot be used in Kotlin 1.2. This declaration is only supported since Kotlin 42.33 + return p + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:5:12: error: 'p: String' is only available since Kotlin 40.34 and cannot be used in Kotlin 1.2 + return p + ^ +compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:5:12: error: 'p: String' is only available since Kotlin 45.35 and cannot be used in Kotlin 1.2 + return p + ^ +COMPILATION_ERROR diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt new file mode 100644 index 00000000000..bf3f81af351 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt @@ -0,0 +1,6 @@ +import a.* + +fun test(a: A): TA { + f() + return p +} diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt index d8d72b530a1..e79d5fada9c 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt @@ -296,6 +296,10 @@ class CompileKotlinAgainstCustomBinariesTest : AbstractKotlinCompilerIntegration doTestKotlinLibraryWithWrongMetadataVersionJs("library", "-Xskip-metadata-version-check") } + fun testRequireKotlin() { + compileKotlin("source.kt", tmpdir, listOf(compileLibrary("library"))) + } + fun testRequireKotlinInNestedClasses() { compileKotlin("source.kt", tmpdir, listOf(compileLibrary("library"))) } diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/AbstractVersionRequirementTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/AbstractVersionRequirementTest.kt index 7a66b3352e7..a4f34af7c32 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/AbstractVersionRequirementTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/serialization/AbstractVersionRequirementTest.kt @@ -37,8 +37,8 @@ abstract class AbstractVersionRequirementTest : TestCaseWithTmpdir() { val descriptor = module.findUnambiguousDescriptorByFqName(fqName) val requirement = when (descriptor) { - is DeserializedMemberDescriptor -> descriptor.versionRequirement - is DeserializedClassDescriptor -> descriptor.versionRequirement + is DeserializedMemberDescriptor -> descriptor.versionRequirements.single() + is DeserializedClassDescriptor -> descriptor.versionRequirements.single() else -> throw AssertionError("Unknown descriptor: $descriptor") } ?: throw AssertionError("No VersionRequirement for $descriptor") diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt index 58dcae17585..73d1d6222fa 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.serialization.deserialization -import org.jetbrains.kotlin.builtins.isSuspendFunctionTypeOrSubtype import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget @@ -138,7 +137,7 @@ class MemberDeserializer(private val c: DeserializationContext) { } private fun DeserializedMemberDescriptor.versionAndReleaseCoroutinesMismatch(): Boolean = - c.components.configuration.releaseCoroutines && versionRequirement?.version != VersionRequirement.Version(1, 3) + c.components.configuration.releaseCoroutines && versionRequirements.none { it.version == VersionRequirement.Version(1, 3) } private fun loadOldFlags(oldFlags: Int): Int { val lowSixBits = oldFlags and 0x3f @@ -231,7 +230,7 @@ class MemberDeserializer(private val c: DeserializationContext) { descriptor.isExperimentalCoroutineInReleaseEnvironment = local.typeDeserializer.experimentalSuspendFunctionTypeEncountered || ((c.containingDeclaration as? DeserializedClassDescriptor)?.c?.typeDeserializer?.experimentalSuspendFunctionTypeEncountered == true && c.components.configuration.releaseCoroutines && - descriptor.versionRequirement?.version != VersionRequirement.Version(1, 3)) + descriptor.versionRequirements.none { it.version == VersionRequirement.Version(1, 3) }) return descriptor } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt index b07bc8ea559..eaebe869856 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt @@ -66,7 +66,7 @@ class DeserializedClassDescriptor( (containingDeclaration as? DeserializedClassDescriptor)?.thisAsProtoContainer ) - val versionRequirement: VersionRequirement? + val versionRequirements: List get() = VersionRequirement.create(classProto, c.nameResolver, c.versionRequirementTable) override val annotations = diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberDescriptor.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberDescriptor.kt index c7561d817fe..5d104f2e2b4 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberDescriptor.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberDescriptor.kt @@ -27,7 +27,7 @@ interface DeserializedMemberDescriptor : MemberDescriptor { val versionRequirementTable: VersionRequirementTable - val versionRequirement: VersionRequirement? + val versionRequirements: List get() = VersionRequirement.create(proto, nameResolver, versionRequirementTable) // Information about the origin of this callable's container (class or package part on JVM) or null if there's no such information. diff --git a/core/metadata/src/metadata.proto b/core/metadata/src/metadata.proto index 6e82ef3310a..9df4eee01c6 100644 --- a/core/metadata/src/metadata.proto +++ b/core/metadata/src/metadata.proto @@ -220,7 +220,7 @@ message Class { optional TypeTable type_table = 30; // Index into the VersionRequirementTable - optional int32 version_requirement = 31; + repeated int32 version_requirement = 31; optional VersionRequirementTable version_requirement_table = 32; @@ -258,7 +258,7 @@ message Constructor { repeated ValueParameter value_parameter = 2; // Index into the VersionRequirementTable - optional int32 version_requirement = 31; + repeated int32 version_requirement = 31; extensions 100 to 18999; } @@ -295,7 +295,7 @@ message Function { optional TypeTable type_table = 30; // Index into the VersionRequirementTable - optional int32 version_requirement = 31; + repeated int32 version_requirement = 31; optional Contract contract = 32; @@ -349,7 +349,7 @@ message Property { optional int32 setter_flags = 8; // Index into the VersionRequirementTable - optional int32 version_requirement = 31; + repeated int32 version_requirement = 31; extensions 100 to 18999; } @@ -394,7 +394,7 @@ message TypeAlias { repeated Annotation annotation = 8; // Index into the VersionRequirementTable - optional int32 version_requirement = 31; + repeated int32 version_requirement = 31; extensions 100 to 199; } diff --git a/core/metadata/src/org/jetbrains/kotlin/metadata/ProtoBuf.java b/core/metadata/src/org/jetbrains/kotlin/metadata/ProtoBuf.java index 122d779172a..2abfce251e2 100644 --- a/core/metadata/src/org/jetbrains/kotlin/metadata/ProtoBuf.java +++ b/core/metadata/src/org/jetbrains/kotlin/metadata/ProtoBuf.java @@ -8284,21 +8284,29 @@ public final class ProtoBuf { org.jetbrains.kotlin.metadata.ProtoBuf.TypeTable getTypeTable(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - boolean hasVersionRequirement(); + java.util.List getVersionRequirementList(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - int getVersionRequirement(); + int getVersionRequirementCount(); + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + int getVersionRequirement(int index); /** * optional .org.jetbrains.kotlin.metadata.VersionRequirementTable version_requirement_table = 32; @@ -8508,13 +8516,29 @@ public final class ProtoBuf { break; } case 248: { - bitField0_ |= 0x00000010; - versionRequirement_ = input.readInt32(); + if (!((mutable_bitField0_ & 0x00004000) == 0x00004000)) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00004000; + } + versionRequirement_.add(input.readInt32()); + break; + } + case 250: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00004000) == 0x00004000) && input.getBytesUntilLimit() > 0) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00004000; + } + while (input.getBytesUntilLimit() > 0) { + versionRequirement_.add(input.readInt32()); + } + input.popLimit(limit); break; } case 258: { org.jetbrains.kotlin.metadata.ProtoBuf.VersionRequirementTable.Builder subBuilder = null; - if (((bitField0_ & 0x00000020) == 0x00000020)) { + if (((bitField0_ & 0x00000010) == 0x00000010)) { subBuilder = versionRequirementTable_.toBuilder(); } versionRequirementTable_ = input.readMessage(org.jetbrains.kotlin.metadata.ProtoBuf.VersionRequirementTable.PARSER, extensionRegistry); @@ -8522,7 +8546,7 @@ public final class ProtoBuf { subBuilder.mergeFrom(versionRequirementTable_); versionRequirementTable_ = subBuilder.buildPartial(); } - bitField0_ |= 0x00000020; + bitField0_ |= 0x00000010; break; } } @@ -8563,6 +8587,9 @@ public final class ProtoBuf { if (((mutable_bitField0_ & 0x00001000) == 0x00001000)) { sealedSubclassFqName_ = java.util.Collections.unmodifiableList(sealedSubclassFqName_); } + if (((mutable_bitField0_ & 0x00004000) == 0x00004000)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + } try { unknownFieldsCodedOutput.flush(); } catch (java.io.IOException e) { @@ -9097,26 +9124,37 @@ public final class ProtoBuf { } public static final int VERSION_REQUIREMENT_FIELD_NUMBER = 31; - private int versionRequirement_; + private java.util.List versionRequirement_; /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000010) == 0x00000010); + public java.util.List + getVersionRequirementList() { + return versionRequirement_; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); } public static final int VERSION_REQUIREMENT_TABLE_FIELD_NUMBER = 32; @@ -9125,7 +9163,7 @@ public final class ProtoBuf { * optional .org.jetbrains.kotlin.metadata.VersionRequirementTable version_requirement_table = 32; */ public boolean hasVersionRequirementTable() { - return ((bitField0_ & 0x00000020) == 0x00000020); + return ((bitField0_ & 0x00000010) == 0x00000010); } /** * optional .org.jetbrains.kotlin.metadata.VersionRequirementTable version_requirement_table = 32; @@ -9149,7 +9187,7 @@ public final class ProtoBuf { enumEntry_ = java.util.Collections.emptyList(); sealedSubclassFqName_ = java.util.Collections.emptyList(); typeTable_ = org.jetbrains.kotlin.metadata.ProtoBuf.TypeTable.getDefaultInstance(); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); versionRequirementTable_ = org.jetbrains.kotlin.metadata.ProtoBuf.VersionRequirementTable.getDefaultInstance(); } private byte memoizedIsInitialized = -1; @@ -9278,10 +9316,10 @@ public final class ProtoBuf { if (((bitField0_ & 0x00000008) == 0x00000008)) { output.writeMessage(30, typeTable_); } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeInt32(31, versionRequirement_); + for (int i = 0; i < versionRequirement_.size(); i++) { + output.writeInt32(31, versionRequirement_.get(i)); } - if (((bitField0_ & 0x00000020) == 0x00000020)) { + if (((bitField0_ & 0x00000010) == 0x00000010)) { output.writeMessage(32, versionRequirementTable_); } extensionWriter.writeUntil(19000, output); @@ -9380,11 +9418,16 @@ public final class ProtoBuf { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(30, typeTable_); } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += org.jetbrains.kotlin.protobuf.CodedOutputStream - .computeInt32Size(31, versionRequirement_); + { + int dataSize = 0; + for (int i = 0; i < versionRequirement_.size(); i++) { + dataSize += org.jetbrains.kotlin.protobuf.CodedOutputStream + .computeInt32SizeNoTag(versionRequirement_.get(i)); + } + size += dataSize; + size += 2 * getVersionRequirementList().size(); } - if (((bitField0_ & 0x00000020) == 0x00000020)) { + if (((bitField0_ & 0x00000010) == 0x00000010)) { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(32, versionRequirementTable_); } @@ -9510,7 +9553,7 @@ public final class ProtoBuf { bitField0_ = (bitField0_ & ~0x00001000); typeTable_ = org.jetbrains.kotlin.metadata.ProtoBuf.TypeTable.getDefaultInstance(); bitField0_ = (bitField0_ & ~0x00002000); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00004000); versionRequirementTable_ = org.jetbrains.kotlin.metadata.ProtoBuf.VersionRequirementTable.getDefaultInstance(); bitField0_ = (bitField0_ & ~0x00008000); @@ -9603,12 +9646,13 @@ public final class ProtoBuf { to_bitField0_ |= 0x00000008; } result.typeTable_ = typeTable_; - if (((from_bitField0_ & 0x00004000) == 0x00004000)) { - to_bitField0_ |= 0x00000010; + if (((bitField0_ & 0x00004000) == 0x00004000)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + bitField0_ = (bitField0_ & ~0x00004000); } result.versionRequirement_ = versionRequirement_; if (((from_bitField0_ & 0x00008000) == 0x00008000)) { - to_bitField0_ |= 0x00000020; + to_bitField0_ |= 0x00000010; } result.versionRequirementTable_ = versionRequirementTable_; result.bitField0_ = to_bitField0_; @@ -9729,8 +9773,15 @@ public final class ProtoBuf { if (other.hasTypeTable()) { mergeTypeTable(other.getTypeTable()); } - if (other.hasVersionRequirement()) { - setVersionRequirement(other.getVersionRequirement()); + if (!other.versionRequirement_.isEmpty()) { + if (versionRequirement_.isEmpty()) { + versionRequirement_ = other.versionRequirement_; + bitField0_ = (bitField0_ & ~0x00004000); + } else { + ensureVersionRequirementIsMutable(); + versionRequirement_.addAll(other.versionRequirement_); + } + } if (other.hasVersionRequirementTable()) { mergeVersionRequirementTable(other.getVersionRequirementTable()); @@ -11097,50 +11148,96 @@ public final class ProtoBuf { return this; } - private int versionRequirement_ ; - /** - * optional int32 version_requirement = 31; - * - *
-       * Index into the VersionRequirementTable
-       * 
- */ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00004000) == 0x00004000); + private java.util.List versionRequirement_ = java.util.Collections.emptyList(); + private void ensureVersionRequirementIsMutable() { + if (!((bitField0_ & 0x00004000) == 0x00004000)) { + versionRequirement_ = new java.util.ArrayList(versionRequirement_); + bitField0_ |= 0x00004000; + } } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public java.util.List + getVersionRequirementList() { + return java.util.Collections.unmodifiableList(versionRequirement_); } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public Builder setVersionRequirement(int value) { - bitField0_ |= 0x00004000; - versionRequirement_ = value; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder setVersionRequirement( + int index, int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.set(index, value); return this; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addVersionRequirement(int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.add(value); + + return this; + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addAllVersionRequirement( + java.lang.Iterable values) { + ensureVersionRequirementIsMutable(); + org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll( + values, versionRequirement_); + + return this; + } + /** + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ public Builder clearVersionRequirement() { + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00004000); - versionRequirement_ = 0; return this; } @@ -13066,21 +13163,29 @@ public final class ProtoBuf { int getValueParameterCount(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - boolean hasVersionRequirement(); + java.util.List getVersionRequirementList(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - int getVersionRequirement(); + int getVersionRequirementCount(); + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + int getVersionRequirement(int index); } /** * Protobuf type {@code org.jetbrains.kotlin.metadata.Constructor} @@ -13147,8 +13252,24 @@ public final class ProtoBuf { break; } case 248: { - bitField0_ |= 0x00000002; - versionRequirement_ = input.readInt32(); + if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000004; + } + versionRequirement_.add(input.readInt32()); + break; + } + case 250: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000004; + } + while (input.getBytesUntilLimit() > 0) { + versionRequirement_.add(input.readInt32()); + } + input.popLimit(limit); break; } } @@ -13162,6 +13283,9 @@ public final class ProtoBuf { if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) { valueParameter_ = java.util.Collections.unmodifiableList(valueParameter_); } + if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + } try { unknownFieldsCodedOutput.flush(); } catch (java.io.IOException e) { @@ -13251,32 +13375,43 @@ public final class ProtoBuf { } public static final int VERSION_REQUIREMENT_FIELD_NUMBER = 31; - private int versionRequirement_; + private java.util.List versionRequirement_; /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000002) == 0x00000002); + public java.util.List + getVersionRequirementList() { + return versionRequirement_; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); } private void initFields() { flags_ = 6; valueParameter_ = java.util.Collections.emptyList(); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -13310,8 +13445,8 @@ public final class ProtoBuf { for (int i = 0; i < valueParameter_.size(); i++) { output.writeMessage(2, valueParameter_.get(i)); } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeInt32(31, versionRequirement_); + for (int i = 0; i < versionRequirement_.size(); i++) { + output.writeInt32(31, versionRequirement_.get(i)); } extensionWriter.writeUntil(19000, output); output.writeRawBytes(unknownFields); @@ -13331,9 +13466,14 @@ public final class ProtoBuf { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(2, valueParameter_.get(i)); } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += org.jetbrains.kotlin.protobuf.CodedOutputStream - .computeInt32Size(31, versionRequirement_); + { + int dataSize = 0; + for (int i = 0; i < versionRequirement_.size(); i++) { + dataSize += org.jetbrains.kotlin.protobuf.CodedOutputStream + .computeInt32SizeNoTag(versionRequirement_.get(i)); + } + size += dataSize; + size += 2 * getVersionRequirementList().size(); } size += extensionsSerializedSize(); size += unknownFields.size(); @@ -13433,7 +13573,7 @@ public final class ProtoBuf { bitField0_ = (bitField0_ & ~0x00000001); valueParameter_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000002); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000004); return this; } @@ -13467,8 +13607,9 @@ public final class ProtoBuf { bitField0_ = (bitField0_ & ~0x00000002); } result.valueParameter_ = valueParameter_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000002; + if (((bitField0_ & 0x00000004) == 0x00000004)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + bitField0_ = (bitField0_ & ~0x00000004); } result.versionRequirement_ = versionRequirement_; result.bitField0_ = to_bitField0_; @@ -13490,8 +13631,15 @@ public final class ProtoBuf { } } - if (other.hasVersionRequirement()) { - setVersionRequirement(other.getVersionRequirement()); + if (!other.versionRequirement_.isEmpty()) { + if (versionRequirement_.isEmpty()) { + versionRequirement_ = other.versionRequirement_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureVersionRequirementIsMutable(); + versionRequirement_.addAll(other.versionRequirement_); + } + } this.mergeExtensionFields(other); setUnknownFields( @@ -13713,50 +13861,96 @@ public final class ProtoBuf { return this; } - private int versionRequirement_ ; - /** - * optional int32 version_requirement = 31; - * - *
-       * Index into the VersionRequirementTable
-       * 
- */ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000004) == 0x00000004); + private java.util.List versionRequirement_ = java.util.Collections.emptyList(); + private void ensureVersionRequirementIsMutable() { + if (!((bitField0_ & 0x00000004) == 0x00000004)) { + versionRequirement_ = new java.util.ArrayList(versionRequirement_); + bitField0_ |= 0x00000004; + } } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public java.util.List + getVersionRequirementList() { + return java.util.Collections.unmodifiableList(versionRequirement_); } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public Builder setVersionRequirement(int value) { - bitField0_ |= 0x00000004; - versionRequirement_ = value; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder setVersionRequirement( + int index, int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.set(index, value); return this; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addVersionRequirement(int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.add(value); + + return this; + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addAllVersionRequirement( + java.lang.Iterable values) { + ensureVersionRequirementIsMutable(); + org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll( + values, versionRequirement_); + + return this; + } + /** + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ public Builder clearVersionRequirement() { + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000004); - versionRequirement_ = 0; return this; } @@ -13906,21 +14100,29 @@ public final class ProtoBuf { org.jetbrains.kotlin.metadata.ProtoBuf.TypeTable getTypeTable(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - boolean hasVersionRequirement(); + java.util.List getVersionRequirementList(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - int getVersionRequirement(); + int getVersionRequirementCount(); + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + int getVersionRequirement(int index); /** * optional .org.jetbrains.kotlin.metadata.Contract contract = 32; @@ -14063,13 +14265,29 @@ public final class ProtoBuf { break; } case 248: { - bitField0_ |= 0x00000100; - versionRequirement_ = input.readInt32(); + if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000400; + } + versionRequirement_.add(input.readInt32()); + break; + } + case 250: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00000400) == 0x00000400) && input.getBytesUntilLimit() > 0) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000400; + } + while (input.getBytesUntilLimit() > 0) { + versionRequirement_.add(input.readInt32()); + } + input.popLimit(limit); break; } case 258: { org.jetbrains.kotlin.metadata.ProtoBuf.Contract.Builder subBuilder = null; - if (((bitField0_ & 0x00000200) == 0x00000200)) { + if (((bitField0_ & 0x00000100) == 0x00000100)) { subBuilder = contract_.toBuilder(); } contract_ = input.readMessage(org.jetbrains.kotlin.metadata.ProtoBuf.Contract.PARSER, extensionRegistry); @@ -14077,7 +14295,7 @@ public final class ProtoBuf { subBuilder.mergeFrom(contract_); contract_ = subBuilder.buildPartial(); } - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000100; break; } } @@ -14094,6 +14312,9 @@ public final class ProtoBuf { if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) { valueParameter_ = java.util.Collections.unmodifiableList(valueParameter_); } + if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + } try { unknownFieldsCodedOutput.flush(); } catch (java.io.IOException e) { @@ -14339,26 +14560,37 @@ public final class ProtoBuf { } public static final int VERSION_REQUIREMENT_FIELD_NUMBER = 31; - private int versionRequirement_; + private java.util.List versionRequirement_; /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000100) == 0x00000100); + public java.util.List + getVersionRequirementList() { + return versionRequirement_; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); } public static final int CONTRACT_FIELD_NUMBER = 32; @@ -14367,7 +14599,7 @@ public final class ProtoBuf { * optional .org.jetbrains.kotlin.metadata.Contract contract = 32; */ public boolean hasContract() { - return ((bitField0_ & 0x00000200) == 0x00000200); + return ((bitField0_ & 0x00000100) == 0x00000100); } /** * optional .org.jetbrains.kotlin.metadata.Contract contract = 32; @@ -14387,7 +14619,7 @@ public final class ProtoBuf { receiverTypeId_ = 0; valueParameter_ = java.util.Collections.emptyList(); typeTable_ = org.jetbrains.kotlin.metadata.ProtoBuf.TypeTable.getDefaultInstance(); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); contract_ = org.jetbrains.kotlin.metadata.ProtoBuf.Contract.getDefaultInstance(); } private byte memoizedIsInitialized = -1; @@ -14480,10 +14712,10 @@ public final class ProtoBuf { if (((bitField0_ & 0x00000080) == 0x00000080)) { output.writeMessage(30, typeTable_); } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - output.writeInt32(31, versionRequirement_); + for (int i = 0; i < versionRequirement_.size(); i++) { + output.writeInt32(31, versionRequirement_.get(i)); } - if (((bitField0_ & 0x00000200) == 0x00000200)) { + if (((bitField0_ & 0x00000100) == 0x00000100)) { output.writeMessage(32, contract_); } extensionWriter.writeUntil(19000, output); @@ -14536,11 +14768,16 @@ public final class ProtoBuf { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(30, typeTable_); } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - size += org.jetbrains.kotlin.protobuf.CodedOutputStream - .computeInt32Size(31, versionRequirement_); + { + int dataSize = 0; + for (int i = 0; i < versionRequirement_.size(); i++) { + dataSize += org.jetbrains.kotlin.protobuf.CodedOutputStream + .computeInt32SizeNoTag(versionRequirement_.get(i)); + } + size += dataSize; + size += 2 * getVersionRequirementList().size(); } - if (((bitField0_ & 0x00000200) == 0x00000200)) { + if (((bitField0_ & 0x00000100) == 0x00000100)) { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(32, contract_); } @@ -14658,7 +14895,7 @@ public final class ProtoBuf { bitField0_ = (bitField0_ & ~0x00000100); typeTable_ = org.jetbrains.kotlin.metadata.ProtoBuf.TypeTable.getDefaultInstance(); bitField0_ = (bitField0_ & ~0x00000200); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000400); contract_ = org.jetbrains.kotlin.metadata.ProtoBuf.Contract.getDefaultInstance(); bitField0_ = (bitField0_ & ~0x00000800); @@ -14727,12 +14964,13 @@ public final class ProtoBuf { to_bitField0_ |= 0x00000080; } result.typeTable_ = typeTable_; - if (((from_bitField0_ & 0x00000400) == 0x00000400)) { - to_bitField0_ |= 0x00000100; + if (((bitField0_ & 0x00000400) == 0x00000400)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + bitField0_ = (bitField0_ & ~0x00000400); } result.versionRequirement_ = versionRequirement_; if (((from_bitField0_ & 0x00000800) == 0x00000800)) { - to_bitField0_ |= 0x00000200; + to_bitField0_ |= 0x00000100; } result.contract_ = contract_; result.bitField0_ = to_bitField0_; @@ -14785,8 +15023,15 @@ public final class ProtoBuf { if (other.hasTypeTable()) { mergeTypeTable(other.getTypeTable()); } - if (other.hasVersionRequirement()) { - setVersionRequirement(other.getVersionRequirement()); + if (!other.versionRequirement_.isEmpty()) { + if (versionRequirement_.isEmpty()) { + versionRequirement_ = other.versionRequirement_; + bitField0_ = (bitField0_ & ~0x00000400); + } else { + ensureVersionRequirementIsMutable(); + versionRequirement_.addAll(other.versionRequirement_); + } + } if (other.hasContract()) { mergeContract(other.getContract()); @@ -15510,50 +15755,96 @@ public final class ProtoBuf { return this; } - private int versionRequirement_ ; - /** - * optional int32 version_requirement = 31; - * - *
-       * Index into the VersionRequirementTable
-       * 
- */ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000400) == 0x00000400); + private java.util.List versionRequirement_ = java.util.Collections.emptyList(); + private void ensureVersionRequirementIsMutable() { + if (!((bitField0_ & 0x00000400) == 0x00000400)) { + versionRequirement_ = new java.util.ArrayList(versionRequirement_); + bitField0_ |= 0x00000400; + } } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public java.util.List + getVersionRequirementList() { + return java.util.Collections.unmodifiableList(versionRequirement_); } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public Builder setVersionRequirement(int value) { - bitField0_ |= 0x00000400; - versionRequirement_ = value; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder setVersionRequirement( + int index, int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.set(index, value); return this; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addVersionRequirement(int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.add(value); + + return this; + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addAllVersionRequirement( + java.lang.Iterable values) { + ensureVersionRequirementIsMutable(); + org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll( + values, versionRequirement_); + + return this; + } + /** + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ public Builder clearVersionRequirement() { + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000400); - versionRequirement_ = 0; return this; } @@ -15795,21 +16086,29 @@ public final class ProtoBuf { int getSetterFlags(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - boolean hasVersionRequirement(); + java.util.List getVersionRequirementList(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - int getVersionRequirement(); + int getVersionRequirementCount(); + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + int getVersionRequirement(int index); } /** * Protobuf type {@code org.jetbrains.kotlin.metadata.Property} @@ -15945,8 +16244,24 @@ public final class ProtoBuf { break; } case 248: { - bitField0_ |= 0x00000400; - versionRequirement_ = input.readInt32(); + if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000800; + } + versionRequirement_.add(input.readInt32()); + break; + } + case 250: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00000800) == 0x00000800) && input.getBytesUntilLimit() > 0) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000800; + } + while (input.getBytesUntilLimit() > 0) { + versionRequirement_.add(input.readInt32()); + } + input.popLimit(limit); break; } } @@ -15960,6 +16275,9 @@ public final class ProtoBuf { if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) { typeParameter_ = java.util.Collections.unmodifiableList(typeParameter_); } + if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + } try { unknownFieldsCodedOutput.flush(); } catch (java.io.IOException e) { @@ -16228,26 +16546,37 @@ public final class ProtoBuf { } public static final int VERSION_REQUIREMENT_FIELD_NUMBER = 31; - private int versionRequirement_; + private java.util.List versionRequirement_; /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000400) == 0x00000400); + public java.util.List + getVersionRequirementList() { + return versionRequirement_; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); } private void initFields() { @@ -16262,7 +16591,7 @@ public final class ProtoBuf { setterValueParameter_ = org.jetbrains.kotlin.metadata.ProtoBuf.ValueParameter.getDefaultInstance(); getterFlags_ = 0; setterFlags_ = 0; - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -16345,8 +16674,8 @@ public final class ProtoBuf { if (((bitField0_ & 0x00000001) == 0x00000001)) { output.writeInt32(11, flags_); } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - output.writeInt32(31, versionRequirement_); + for (int i = 0; i < versionRequirement_.size(); i++) { + output.writeInt32(31, versionRequirement_.get(i)); } extensionWriter.writeUntil(19000, output); output.writeRawBytes(unknownFields); @@ -16402,9 +16731,14 @@ public final class ProtoBuf { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeInt32Size(11, flags_); } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - size += org.jetbrains.kotlin.protobuf.CodedOutputStream - .computeInt32Size(31, versionRequirement_); + { + int dataSize = 0; + for (int i = 0; i < versionRequirement_.size(); i++) { + dataSize += org.jetbrains.kotlin.protobuf.CodedOutputStream + .computeInt32SizeNoTag(versionRequirement_.get(i)); + } + size += dataSize; + size += 2 * getVersionRequirementList().size(); } size += extensionsSerializedSize(); size += unknownFields.size(); @@ -16522,7 +16856,7 @@ public final class ProtoBuf { bitField0_ = (bitField0_ & ~0x00000200); setterFlags_ = 0; bitField0_ = (bitField0_ & ~0x00000400); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000800); return this; } @@ -16592,8 +16926,9 @@ public final class ProtoBuf { to_bitField0_ |= 0x00000200; } result.setterFlags_ = setterFlags_; - if (((from_bitField0_ & 0x00000800) == 0x00000800)) { - to_bitField0_ |= 0x00000400; + if (((bitField0_ & 0x00000800) == 0x00000800)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + bitField0_ = (bitField0_ & ~0x00000800); } result.versionRequirement_ = versionRequirement_; result.bitField0_ = to_bitField0_; @@ -16642,8 +16977,15 @@ public final class ProtoBuf { if (other.hasSetterFlags()) { setSetterFlags(other.getSetterFlags()); } - if (other.hasVersionRequirement()) { - setVersionRequirement(other.getVersionRequirement()); + if (!other.versionRequirement_.isEmpty()) { + if (versionRequirement_.isEmpty()) { + versionRequirement_ = other.versionRequirement_; + bitField0_ = (bitField0_ & ~0x00000800); + } else { + ensureVersionRequirementIsMutable(); + versionRequirement_.addAll(other.versionRequirement_); + } + } this.mergeExtensionFields(other); setUnknownFields( @@ -17347,50 +17689,96 @@ public final class ProtoBuf { return this; } - private int versionRequirement_ ; - /** - * optional int32 version_requirement = 31; - * - *
-       * Index into the VersionRequirementTable
-       * 
- */ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000800) == 0x00000800); + private java.util.List versionRequirement_ = java.util.Collections.emptyList(); + private void ensureVersionRequirementIsMutable() { + if (!((bitField0_ & 0x00000800) == 0x00000800)) { + versionRequirement_ = new java.util.ArrayList(versionRequirement_); + bitField0_ |= 0x00000800; + } } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public java.util.List + getVersionRequirementList() { + return java.util.Collections.unmodifiableList(versionRequirement_); } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public Builder setVersionRequirement(int value) { - bitField0_ |= 0x00000800; - versionRequirement_ = value; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder setVersionRequirement( + int index, int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.set(index, value); return this; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addVersionRequirement(int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.add(value); + + return this; + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addAllVersionRequirement( + java.lang.Iterable values) { + ensureVersionRequirementIsMutable(); + org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll( + values, versionRequirement_); + + return this; + } + /** + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ public Builder clearVersionRequirement() { + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000800); - versionRequirement_ = 0; return this; } @@ -18421,21 +18809,29 @@ public final class ProtoBuf { int getAnnotationCount(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - boolean hasVersionRequirement(); + java.util.List getVersionRequirementList(); /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - int getVersionRequirement(); + int getVersionRequirementCount(); + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + int getVersionRequirement(int index); } /** * Protobuf type {@code org.jetbrains.kotlin.metadata.TypeAlias} @@ -18551,8 +18947,24 @@ public final class ProtoBuf { break; } case 248: { - bitField0_ |= 0x00000040; - versionRequirement_ = input.readInt32(); + if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000100; + } + versionRequirement_.add(input.readInt32()); + break; + } + case 250: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00000100) == 0x00000100) && input.getBytesUntilLimit() > 0) { + versionRequirement_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000100; + } + while (input.getBytesUntilLimit() > 0) { + versionRequirement_.add(input.readInt32()); + } + input.popLimit(limit); break; } } @@ -18569,6 +18981,9 @@ public final class ProtoBuf { if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) { annotation_ = java.util.Collections.unmodifiableList(annotation_); } + if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + } try { unknownFieldsCodedOutput.flush(); } catch (java.io.IOException e) { @@ -18766,26 +19181,37 @@ public final class ProtoBuf { } public static final int VERSION_REQUIREMENT_FIELD_NUMBER = 31; - private int versionRequirement_; + private java.util.List versionRequirement_; /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000040) == 0x00000040); + public java.util.List + getVersionRequirementList() { + return versionRequirement_; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
      * Index into the VersionRequirementTable
      * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+     * Index into the VersionRequirementTable
+     * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); } private void initFields() { @@ -18797,7 +19223,7 @@ public final class ProtoBuf { expandedType_ = org.jetbrains.kotlin.metadata.ProtoBuf.Type.getDefaultInstance(); expandedTypeId_ = 0; annotation_ = java.util.Collections.emptyList(); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -18871,8 +19297,8 @@ public final class ProtoBuf { for (int i = 0; i < annotation_.size(); i++) { output.writeMessage(8, annotation_.get(i)); } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeInt32(31, versionRequirement_); + for (int i = 0; i < versionRequirement_.size(); i++) { + output.writeInt32(31, versionRequirement_.get(i)); } extensionWriter.writeUntil(200, output); output.writeRawBytes(unknownFields); @@ -18916,9 +19342,14 @@ public final class ProtoBuf { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(8, annotation_.get(i)); } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += org.jetbrains.kotlin.protobuf.CodedOutputStream - .computeInt32Size(31, versionRequirement_); + { + int dataSize = 0; + for (int i = 0; i < versionRequirement_.size(); i++) { + dataSize += org.jetbrains.kotlin.protobuf.CodedOutputStream + .computeInt32SizeNoTag(versionRequirement_.get(i)); + } + size += dataSize; + size += 2 * getVersionRequirementList().size(); } size += extensionsSerializedSize(); size += unknownFields.size(); @@ -19030,7 +19461,7 @@ public final class ProtoBuf { bitField0_ = (bitField0_ & ~0x00000040); annotation_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000080); - versionRequirement_ = 0; + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000100); return this; } @@ -19089,8 +19520,9 @@ public final class ProtoBuf { bitField0_ = (bitField0_ & ~0x00000080); } result.annotation_ = annotation_; - if (((from_bitField0_ & 0x00000100) == 0x00000100)) { - to_bitField0_ |= 0x00000040; + if (((bitField0_ & 0x00000100) == 0x00000100)) { + versionRequirement_ = java.util.Collections.unmodifiableList(versionRequirement_); + bitField0_ = (bitField0_ & ~0x00000100); } result.versionRequirement_ = versionRequirement_; result.bitField0_ = to_bitField0_; @@ -19137,8 +19569,15 @@ public final class ProtoBuf { } } - if (other.hasVersionRequirement()) { - setVersionRequirement(other.getVersionRequirement()); + if (!other.versionRequirement_.isEmpty()) { + if (versionRequirement_.isEmpty()) { + versionRequirement_ = other.versionRequirement_; + bitField0_ = (bitField0_ & ~0x00000100); + } else { + ensureVersionRequirementIsMutable(); + versionRequirement_.addAll(other.versionRequirement_); + } + } this.mergeExtensionFields(other); setUnknownFields( @@ -19719,50 +20158,96 @@ public final class ProtoBuf { return this; } - private int versionRequirement_ ; - /** - * optional int32 version_requirement = 31; - * - *
-       * Index into the VersionRequirementTable
-       * 
- */ - public boolean hasVersionRequirement() { - return ((bitField0_ & 0x00000100) == 0x00000100); + private java.util.List versionRequirement_ = java.util.Collections.emptyList(); + private void ensureVersionRequirementIsMutable() { + if (!((bitField0_ & 0x00000100) == 0x00000100)) { + versionRequirement_ = new java.util.ArrayList(versionRequirement_); + bitField0_ |= 0x00000100; + } } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public int getVersionRequirement() { - return versionRequirement_; + public java.util.List + getVersionRequirementList() { + return java.util.Collections.unmodifiableList(versionRequirement_); } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ - public Builder setVersionRequirement(int value) { - bitField0_ |= 0x00000100; - versionRequirement_ = value; + public int getVersionRequirementCount() { + return versionRequirement_.size(); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public int getVersionRequirement(int index) { + return versionRequirement_.get(index); + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder setVersionRequirement( + int index, int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.set(index, value); return this; } /** - * optional int32 version_requirement = 31; + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addVersionRequirement(int value) { + ensureVersionRequirementIsMutable(); + versionRequirement_.add(value); + + return this; + } + /** + * repeated int32 version_requirement = 31; + * + *
+       * Index into the VersionRequirementTable
+       * 
+ */ + public Builder addAllVersionRequirement( + java.lang.Iterable values) { + ensureVersionRequirementIsMutable(); + org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll( + values, versionRequirement_); + + return this; + } + /** + * repeated int32 version_requirement = 31; * *
        * Index into the VersionRequirementTable
        * 
*/ public Builder clearVersionRequirement() { + versionRequirement_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000100); - versionRequirement_ = 0; return this; } diff --git a/core/metadata/src/org/jetbrains/kotlin/metadata/deserialization/VersionRequirement.kt b/core/metadata/src/org/jetbrains/kotlin/metadata/deserialization/VersionRequirement.kt index e3da8369897..9ed256f7118 100644 --- a/core/metadata/src/org/jetbrains/kotlin/metadata/deserialization/VersionRequirement.kt +++ b/core/metadata/src/org/jetbrains/kotlin/metadata/deserialization/VersionRequirement.kt @@ -81,16 +81,20 @@ class VersionRequirement( "since $version $level" + (if (errorCode != null) " error $errorCode" else "") + (if (message != null) ": $message" else "") companion object { - fun create(proto: MessageLite, nameResolver: NameResolver, table: VersionRequirementTable): VersionRequirement? { - val id = when (proto) { - is ProtoBuf.Class -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null - is ProtoBuf.Constructor -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null - is ProtoBuf.Function -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null - is ProtoBuf.Property -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null - is ProtoBuf.TypeAlias -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null + fun create(proto: MessageLite, nameResolver: NameResolver, table: VersionRequirementTable): List { + val ids = when (proto) { + is ProtoBuf.Class -> proto.versionRequirementList + is ProtoBuf.Constructor -> proto.versionRequirementList + is ProtoBuf.Function -> proto.versionRequirementList + is ProtoBuf.Property -> proto.versionRequirementList + is ProtoBuf.TypeAlias -> proto.versionRequirementList else -> throw IllegalStateException("Unexpected declaration: ${proto::class.java}") } + return ids.mapNotNull { id -> create(id, nameResolver, table) } + } + + fun create(id: Int, nameResolver: NameResolver, table: VersionRequirementTable): VersionRequirement? { val info = table[id] ?: return null val version = Version.decode( diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/readers.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/readers.kt index 26792058b1a..2846f46d9e2 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/readers.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/readers.kt @@ -9,7 +9,6 @@ import kotlinx.metadata.* import kotlinx.metadata.impl.extensions.MetadataExtensions import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.* -import org.jetbrains.kotlin.protobuf.MessageLite import org.jetbrains.kotlin.metadata.deserialization.Flags as F class ReadContext( @@ -77,8 +76,8 @@ fun ProtoBuf.Class.accept(v: KmClassVisitor, strings: NameResolver) { v.visitSealedSubclass(c.className(sealedSubclassFqName)) } - if (hasVersionRequirement()) { - v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(it, c) } + for (versionRequirement in versionRequirementList) { + v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(versionRequirement, it, c) } } for (extension in c.extensions) { @@ -134,8 +133,8 @@ private fun ProtoBuf.Constructor.accept(v: KmConstructorVisitor, c: ReadContext) v.visitValueParameter(parameter.flags, c[parameter.name])?.let { parameter.accept(it, c) } } - if (hasVersionRequirement()) { - v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(it, c) } + for (versionRequirement in versionRequirementList) { + v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(versionRequirement, it, c) } } for (extension in c.extensions) { @@ -168,8 +167,8 @@ private fun ProtoBuf.Function.accept(v: KmFunctionVisitor, outer: ReadContext) { v.visitContract()?.let { contract.accept(it, c) } } - if (hasVersionRequirement()) { - v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(it, c) } + for (versionRequirement in versionRequirementList) { + v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(versionRequirement, it, c) } } for (extension in c.extensions) { @@ -199,8 +198,8 @@ fun ProtoBuf.Property.accept(v: KmPropertyVisitor, outer: ReadContext) { v.visitReturnType(returnType.typeFlags)?.let { returnType.accept(it, c) } } - if (hasVersionRequirement()) { - v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(it, c) } + for (versionRequirement in versionRequirementList) { + v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(versionRequirement, it, c) } } for (extension in c.extensions) { @@ -229,8 +228,8 @@ private fun ProtoBuf.TypeAlias.accept(v: KmTypeAliasVisitor, outer: ReadContext) v.visitAnnotation(annotation.readAnnotation(c.strings)) } - if (hasVersionRequirement()) { - v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(it, c) } + for (versionRequirement in versionRequirementList) { + v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(versionRequirement, it, c) } } v.visitEnd() @@ -327,9 +326,9 @@ private fun ProtoBuf.Type.accept(v: KmTypeVisitor, c: ReadContext) { v.visitEnd() } -private fun MessageLite.acceptVersionRequirementVisitor(v: KmVersionRequirementVisitor, c: ReadContext) { - val message = VersionRequirement.create(this, c.strings, c.versionRequirements) - ?: throw InconsistentKotlinMetadataException("No VersionRequirement with the given id in the table") +private fun acceptVersionRequirementVisitor(id: Int, v: KmVersionRequirementVisitor, c: ReadContext) { + val message = VersionRequirement.create(id, c.strings, c.versionRequirements) + ?: throw InconsistentKotlinMetadataException("No VersionRequirement with the given id in the table") val kind = when (message.kind) { ProtoBuf.VersionRequirement.VersionKind.LANGUAGE_VERSION -> KmVersionRequirementVersionKind.LANGUAGE_VERSION diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/writers.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/writers.kt index 0718dc1c302..71e026c6e92 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/writers.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/writers.kt @@ -139,7 +139,7 @@ private fun writeConstructor(c: WriteContext, flags: Flags, output: (ProtoBuf.Co writeValueParameter(c, flags, name) { t.addValueParameter(it.build()) } override fun visitVersionRequirement(): KmVersionRequirementVisitor? = - writeVersionRequirement(c) { t.versionRequirement = it } + writeVersionRequirement(c) { t.addVersionRequirement(it) } override fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor? = c.applySingleExtension(type) { @@ -171,7 +171,7 @@ private fun writeFunction(c: WriteContext, flags: Flags, name: String, output: ( writeType(c, flags) { t.returnType = it.build() } override fun visitVersionRequirement(): KmVersionRequirementVisitor? = - writeVersionRequirement(c) { t.versionRequirement = it } + writeVersionRequirement(c) { t.addVersionRequirement(it) } override fun visitContract(): KmContractVisitor? = writeContract(c) { t.contract = it.build() } @@ -208,7 +208,7 @@ fun writeProperty( writeType(c, flags) { t.returnType = it.build() } override fun visitVersionRequirement(): KmVersionRequirementVisitor? = - writeVersionRequirement(c) { t.versionRequirement = it } + writeVersionRequirement(c) { t.addVersionRequirement(it) } override fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor? = c.applySingleExtension(type) { @@ -268,7 +268,7 @@ private fun writeTypeAlias( } override fun visitVersionRequirement(): KmVersionRequirementVisitor? = - writeVersionRequirement(c) { t.versionRequirement = it } + writeVersionRequirement(c) { t.addVersionRequirement(it) } override fun visitEnd() { if (flags != ProtoBuf.TypeAlias.getDefaultInstance().flags) { @@ -453,7 +453,7 @@ open class ClassWriter(stringTable: StringTable) : KmClassVisitor() { } override fun visitVersionRequirement(): KmVersionRequirementVisitor? = - writeVersionRequirement(c) { t.versionRequirement = it } + writeVersionRequirement(c) { t.addVersionRequirement(it) } override fun visitExtensions(type: KmExtensionType): KmClassExtensionVisitor? = c.applySingleExtension(type) { diff --git a/libraries/stdlib/src/kotlin/internal/Annotations.kt b/libraries/stdlib/src/kotlin/internal/Annotations.kt index 3efa319859b..cd985dbf202 100644 --- a/libraries/stdlib/src/kotlin/internal/Annotations.kt +++ b/libraries/stdlib/src/kotlin/internal/Annotations.kt @@ -84,6 +84,7 @@ internal annotation class AccessibleLateinitPropertyLiteral */ @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.TYPEALIAS) @Retention(AnnotationRetention.SOURCE) +@Repeatable @SinceKotlin("1.2") internal annotation class RequireKotlin( val version: String, diff --git a/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/printers.kt b/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/printers.kt index e8639cdaf73..e6fff58591b 100644 --- a/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/printers.kt +++ b/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/printers.kt @@ -18,7 +18,7 @@ private fun visitFunction(settings: KotlinpSettings, sb: StringBuilder, flags: F val params = mutableListOf() var receiverParameterType: String? = null var returnType: String? = null - var versionRequirement: String? = null + val versionRequirements = mutableListOf() var jvmDesc: JvmMemberSignature? = null var lambdaClassOriginName: String? = null @@ -37,7 +37,7 @@ private fun visitFunction(settings: KotlinpSettings, sb: StringBuilder, flags: F printType(flags) { returnType = it } override fun visitVersionRequirement(): KmVersionRequirementVisitor? = - printVersionRequirement { versionRequirement = it } + printVersionRequirement { versionRequirements.add(it) } override fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor? { if (type != JvmFunctionExtensionVisitor.TYPE) return null @@ -57,7 +57,7 @@ private fun visitFunction(settings: KotlinpSettings, sb: StringBuilder, flags: F if (lambdaClassOriginName != null) { sb.appendln(" // lambda class origin: $lambdaClassOriginName") } - if (versionRequirement != null) { + for (versionRequirement in versionRequirements) { sb.appendln(" // $versionRequirement") } if (jvmDesc != null) { @@ -90,7 +90,7 @@ private fun visitProperty( var receiverParameterType: String? = null var returnType: String? = null var setterParameter: String? = null - var versionRequirement: String? = null + val versionRequirements = mutableListOf() var jvmFieldDesc: JvmMemberSignature? = null var jvmGetterDesc: JvmMemberSignature? = null var jvmSetterDesc: JvmMemberSignature? = null @@ -109,7 +109,7 @@ private fun visitProperty( printType(flags) { returnType = it } override fun visitVersionRequirement(): KmVersionRequirementVisitor? = - printVersionRequirement { versionRequirement = it } + printVersionRequirement { versionRequirements.add(it) } override fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor? { if (type != JvmPropertyExtensionVisitor.TYPE) return null @@ -128,7 +128,7 @@ private fun visitProperty( override fun visitEnd() { sb.appendln() - if (versionRequirement != null) { + for (versionRequirement in versionRequirements) { sb.appendln(" // $versionRequirement") } if (jvmFieldDesc != null) { @@ -181,14 +181,14 @@ private fun visitProperty( private fun visitConstructor(sb: StringBuilder, flags: Flags): KmConstructorVisitor = object : KmConstructorVisitor() { val params = mutableListOf() - var versionRequirement: String? = null + val versionRequirements = mutableListOf() var jvmDesc: JvmMemberSignature? = null override fun visitValueParameter(flags: Flags, name: String): KmValueParameterVisitor? = printValueParameter(flags, name) { params.add(it) } override fun visitVersionRequirement(): KmVersionRequirementVisitor? = - printVersionRequirement { versionRequirement = it } + printVersionRequirement { versionRequirements.add(it) } override fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor? { if (type != JvmConstructorExtensionVisitor.TYPE) return null @@ -201,7 +201,7 @@ private fun visitConstructor(sb: StringBuilder, flags: Flags): KmConstructorVisi override fun visitEnd() { sb.appendln() - if (versionRequirement != null) { + for (versionRequirement in versionRequirements) { sb.appendln(" // $versionRequirement") } if (jvmDesc != null) { @@ -221,7 +221,7 @@ private fun visitTypeAlias(settings: KotlinpSettings, sb: StringBuilder, flags: val typeParams = mutableListOf() var underlyingType: String? = null var expandedType: String? = null - var versionRequirement: String? = null + val versionRequirements = mutableListOf() override fun visitTypeParameter(flags: Flags, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor? = printTypeParameter(settings, flags, name, id, variance) { typeParams.add(it) } @@ -237,11 +237,11 @@ private fun visitTypeAlias(settings: KotlinpSettings, sb: StringBuilder, flags: } override fun visitVersionRequirement(): KmVersionRequirementVisitor? = - printVersionRequirement { versionRequirement = it } + printVersionRequirement { versionRequirements.add(it) } override fun visitEnd() { sb.appendln() - if (versionRequirement != null) { + for (versionRequirement in versionRequirements) { sb.appendln(" // $versionRequirement") } for (annotation in annotations) { @@ -536,7 +536,7 @@ class ClassPrinter(private val settings: KotlinpSettings) : KmClassVisitor(), Ab private var name: ClassName? = null private val typeParams = mutableListOf() private val supertypes = mutableListOf() - private var versionRequirement: String? = null + private val versionRequirements = mutableListOf() private var anonymousObjectOriginName: String? = null override fun visit(flags: Flags, name: ClassName) { @@ -548,8 +548,8 @@ class ClassPrinter(private val settings: KotlinpSettings) : KmClassVisitor(), Ab if (anonymousObjectOriginName != null) { result.appendln("// anonymous object origin: $anonymousObjectOriginName") } - if (versionRequirement != null) { - result.appendln(" // $versionRequirement") + for (versionRequirement in versionRequirements) { + result.appendln("// $versionRequirement") } result.appendFlags(flags!!, CLASS_FLAGS_MAP) result.append(name) @@ -604,7 +604,7 @@ class ClassPrinter(private val settings: KotlinpSettings) : KmClassVisitor(), Ab } override fun visitVersionRequirement(): KmVersionRequirementVisitor? = - printVersionRequirement { versionRequirement = it } + printVersionRequirement { versionRequirements.add(it) } override fun visitExtensions(type: KmExtensionType): KmClassExtensionVisitor? { if (type != JvmClassExtensionVisitor.TYPE) return null diff --git a/libraries/tools/kotlinp/testData/VersionRequirement.txt b/libraries/tools/kotlinp/testData/VersionRequirement.txt index 5d5785f81c5..02385b3973d 100644 --- a/libraries/tools/kotlinp/testData/VersionRequirement.txt +++ b/libraries/tools/kotlinp/testData/VersionRequirement.txt @@ -1,6 +1,6 @@ // test/Klass.class // ------------------------------------------ - // requires API version 1.2.0 (level=WARNING, message="Klass must not be used!") +// requires API version 1.2.0 (level=WARNING, message="Klass must not be used!") public final class test/Klass : kotlin/Any { // signature: ()V