diff --git a/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt b/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt
index e9c220f8765..e215c00a57b 100644
--- a/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt
+++ b/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt
@@ -520,9 +520,9 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
if (!checkEquals(old.getExtension(JvmProtoBuf.propertySignature), new.getExtension(JvmProtoBuf.propertySignature))) return false
}
- if (old.hasExtension(JvmProtoBuf.isMovedFromInterfaceCompanion) != new.hasExtension(JvmProtoBuf.isMovedFromInterfaceCompanion)) return false
- if (old.hasExtension(JvmProtoBuf.isMovedFromInterfaceCompanion)) {
- if (old.getExtension(JvmProtoBuf.isMovedFromInterfaceCompanion) != new.getExtension(JvmProtoBuf.isMovedFromInterfaceCompanion)) return false
+ if (old.hasExtension(JvmProtoBuf.flags) != new.hasExtension(JvmProtoBuf.flags)) return false
+ if (old.hasExtension(JvmProtoBuf.flags)) {
+ if (old.getExtension(JvmProtoBuf.flags) != new.getExtension(JvmProtoBuf.flags)) return false
}
if (old.getExtensionCount(JsProtoBuf.propertyAnnotation) != new.getExtensionCount(JsProtoBuf.propertyAnnotation)) {
@@ -1734,8 +1734,8 @@ fun ProtoBuf.Property.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int)
hashCode = 31 * hashCode + getExtension(JvmProtoBuf.propertySignature).hashCode(stringIndexes, fqNameIndexes)
}
- if (hasExtension(JvmProtoBuf.isMovedFromInterfaceCompanion)) {
- hashCode = 31 * hashCode + getExtension(JvmProtoBuf.isMovedFromInterfaceCompanion)
+ if (hasExtension(JvmProtoBuf.flags)) {
+ hashCode = 31 * hashCode + getExtension(JvmProtoBuf.flags)
}
for(i in 0..getExtensionCount(JsProtoBuf.propertyAnnotation) - 1) {
diff --git a/build-common/test/org/jetbrains/kotlin/metadata/jvm/DebugJvmProtoBuf.java b/build-common/test/org/jetbrains/kotlin/metadata/jvm/DebugJvmProtoBuf.java
index 94ec6b916e6..52d3cc9950d 100644
--- a/build-common/test/org/jetbrains/kotlin/metadata/jvm/DebugJvmProtoBuf.java
+++ b/build-common/test/org/jetbrains/kotlin/metadata/jvm/DebugJvmProtoBuf.java
@@ -11,7 +11,7 @@ public final class DebugJvmProtoBuf {
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.methodSignature);
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.lambdaClassOriginName);
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.propertySignature);
- registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.isMovedFromInterfaceCompanion);
+ registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.flags);
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.typeAnnotation);
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.isRaw);
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.typeParameterAnnotation);
@@ -4559,14 +4559,19 @@ public final class DebugJvmProtoBuf {
.newFileScopedGeneratedExtension(
org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.JvmPropertySignature.class,
org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.JvmPropertySignature.getDefaultInstance());
- public static final int IS_MOVED_FROM_INTERFACE_COMPANION_FIELD_NUMBER = 101;
+ public static final int FLAGS_FIELD_NUMBER = 101;
/**
* extend .org.jetbrains.kotlin.metadata.Property { ... }
+ *
+ *
+ ** + *isMovedFromInterfaceCompanion true if this property is declared in an interface companion, and the field is stored in the interface + **/ public static final org.jetbrains.kotlin.protobuf.GeneratedMessage.GeneratedExtension< org.jetbrains.kotlin.metadata.DebugProtoBuf.Property, - java.lang.Integer> isMovedFromInterfaceCompanion = org.jetbrains.kotlin.protobuf.GeneratedMessage + java.lang.Integer> flags = org.jetbrains.kotlin.protobuf.GeneratedMessage .newFileScopedGeneratedExtension( java.lang.Integer.class, null); @@ -4738,27 +4743,27 @@ public final class DebugJvmProtoBuf { "perty_signature\022\'.org.jetbrains.kotlin.m" + "etadata.Property\030d \001(\01327.org.jetbrains.k" + "otlin.metadata.jvm.JvmPropertySignature:" + - "R\n!is_moved_from_interface_companion\022\'.o" + - "rg.jetbrains.kotlin.metadata.Property\030e " + - "\001(\005:g\n\017type_annotation\022#.org.jetbrains.k", - "otlin.metadata.Type\030d \003(\0132).org.jetbrain" + - "s.kotlin.metadata.Annotation:3\n\006is_raw\022#" + - ".org.jetbrains.kotlin.metadata.Type\030e \001(" + - "\010:z\n\031type_parameter_annotation\022,.org.jet" + - "brains.kotlin.metadata.TypeParameter\030d \003" + - "(\0132).org.jetbrains.kotlin.metadata.Annot" + - "ation:E\n\021class_module_name\022$.org.jetbrai" + - "ns.kotlin.metadata.Class\030e \001(\005B\004\230\265\030\001:k\n\024" + - "class_local_variable\022$.org.jetbrains.kot" + - "lin.metadata.Class\030f \003(\0132\'.org.jetbrains", - ".kotlin.metadata.Property:P\n\034anonymous_o" + - "bject_origin_name\022$.org.jetbrains.kotlin" + - ".metadata.Class\030g \001(\005B\004\230\265\030\001:I\n\023package_m" + - "odule_name\022&.org.jetbrains.kotlin.metada" + - "ta.Package\030e \001(\005B\004\230\265\030\001:o\n\026package_local_" + - "variable\022&.org.jetbrains.kotlin.metadata" + - ".Package\030f \003(\0132\'.org.jetbrains.kotlin.me" + - "tadata.PropertyB\022B\020DebugJvmProtoBuf" + "9\n\005flags\022\'.org.jetbrains.kotlin.metadata" + + ".Property\030e \001(\005:\0010:g\n\017type_annotation\022#." + + "org.jetbrains.kotlin.metadata.Type\030d \003(\013", + "2).org.jetbrains.kotlin.metadata.Annotat" + + "ion:3\n\006is_raw\022#.org.jetbrains.kotlin.met" + + "adata.Type\030e \001(\010:z\n\031type_parameter_annot" + + "ation\022,.org.jetbrains.kotlin.metadata.Ty" + + "peParameter\030d \003(\0132).org.jetbrains.kotlin" + + ".metadata.Annotation:E\n\021class_module_nam" + + "e\022$.org.jetbrains.kotlin.metadata.Class\030" + + "e \001(\005B\004\230\265\030\001:k\n\024class_local_variable\022$.or" + + "g.jetbrains.kotlin.metadata.Class\030f \003(\0132" + + "\'.org.jetbrains.kotlin.metadata.Property", + ":P\n\034anonymous_object_origin_name\022$.org.j" + + "etbrains.kotlin.metadata.Class\030g \001(\005B\004\230\265" + + "\030\001:I\n\023package_module_name\022&.org.jetbrain" + + "s.kotlin.metadata.Package\030e \001(\005B\004\230\265\030\001:o\n" + + "\026package_local_variable\022&.org.jetbrains." + + "kotlin.metadata.Package\030f \003(\0132\'.org.jetb" + + "rains.kotlin.metadata.PropertyB\022B\020DebugJ" + + "vmProtoBuf" }; org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -4808,7 +4813,7 @@ public final class DebugJvmProtoBuf { methodSignature.internalInit(descriptor.getExtensions().get(1)); lambdaClassOriginName.internalInit(descriptor.getExtensions().get(2)); propertySignature.internalInit(descriptor.getExtensions().get(3)); - isMovedFromInterfaceCompanion.internalInit(descriptor.getExtensions().get(4)); + flags.internalInit(descriptor.getExtensions().get(4)); typeAnnotation.internalInit(descriptor.getExtensions().get(5)); isRaw.internalInit(descriptor.getExtensions().get(6)); typeParameterAnnotation.internalInit(descriptor.getExtensions().get(7)); 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 9de8c104f40..4a77ec209ba 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.load.kotlin.NON_EXISTENT_CLASS_NAME import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf import org.jetbrains.kotlin.metadata.jvm.deserialization.ClassMapperLite +import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmFlags import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable import org.jetbrains.kotlin.name.FqName @@ -180,9 +181,9 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta ) proto.setExtension(JvmProtoBuf.propertySignature, signature) - val fieldMovedFromInterfaceCompanion = bindings.get(FIELD_MOVED_FROM_INTERFACE_COMPANION, descriptor) - if (fieldMovedFromInterfaceCompanion != null && fieldMovedFromInterfaceCompanion) { - proto.setExtension(JvmProtoBuf.isMovedFromInterfaceCompanion, 1) + val flags = JvmFlags.getPropertyFlags(bindings.get(FIELD_MOVED_FROM_INTERFACE_COMPANION, descriptor) == true) + if (flags != 0) { + proto.setExtension(JvmProtoBuf.flags, flags) } if (JvmAbi.isInterfaceCompanionWithBackingFieldsInOuter(descriptor.containingDeclaration)) { diff --git a/core/metadata.jvm/src/jvm_metadata.proto b/core/metadata.jvm/src/jvm_metadata.proto index 4d52ade9ab9..cafe595d34f 100644 --- a/core/metadata.jvm/src/jvm_metadata.proto +++ b/core/metadata.jvm/src/jvm_metadata.proto @@ -102,7 +102,11 @@ extend Function { extend Property { optional JvmPropertySignature property_signature = 100; - optional int32 is_moved_from_interface_companion = 101; + + /** + isMovedFromInterfaceCompanion true if this property is declared in an interface companion, and the field is stored in the interface + */ + optional int32 flags = 101 [default = 0]; } extend Type { diff --git a/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/JvmProtoBuf.java b/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/JvmProtoBuf.java index 33feb8b2b34..9ac8bd13f8f 100644 --- a/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/JvmProtoBuf.java +++ b/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/JvmProtoBuf.java @@ -11,7 +11,7 @@ public final class JvmProtoBuf { registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.methodSignature); registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.lambdaClassOriginName); registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.propertySignature); - registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.isMovedFromInterfaceCompanion); + registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.flags); registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.typeAnnotation); registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.isRaw); registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.typeParameterAnnotation); @@ -3859,14 +3859,19 @@ public final class JvmProtoBuf { 100, org.jetbrains.kotlin.protobuf.WireFormat.FieldType.MESSAGE, org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmPropertySignature.class); - public static final int IS_MOVED_FROM_INTERFACE_COMPANION_FIELD_NUMBER = 101; + public static final int FLAGS_FIELD_NUMBER = 101; /** *
extend .org.jetbrains.kotlin.metadata.Property { ... }
+ *
+ * + ** + *isMovedFromInterfaceCompanion true if this property is declared in an interface companion, and the field is stored in the interface + **/ public static final org.jetbrains.kotlin.protobuf.GeneratedMessageLite.GeneratedExtension< org.jetbrains.kotlin.metadata.ProtoBuf.Property, - java.lang.Integer> isMovedFromInterfaceCompanion = org.jetbrains.kotlin.protobuf.GeneratedMessageLite + java.lang.Integer> flags = org.jetbrains.kotlin.protobuf.GeneratedMessageLite .newSingularGeneratedExtension( org.jetbrains.kotlin.metadata.ProtoBuf.Property.getDefaultInstance(), 0, diff --git a/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmFlags.kt b/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmFlags.kt new file mode 100644 index 00000000000..2dc66b0490f --- /dev/null +++ b/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmFlags.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.metadata.jvm.deserialization + +import org.jetbrains.kotlin.metadata.deserialization.Flags + +/** + * @see Flags + */ +object JvmFlags { + // Properties + + val IS_MOVED_FROM_INTERFACE_COMPANION = Flags.FlagField.booleanFirst() + + fun getPropertyFlags(isMovedFromInterfaceCompanion: Boolean): Int = + IS_MOVED_FROM_INTERFACE_COMPANION.toFlags(isMovedFromInterfaceCompanion) +} diff --git a/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmProtoBufUtil.kt b/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmProtoBufUtil.kt index 73290a23f1b..a98095d0cc0 100644 --- a/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmProtoBufUtil.kt +++ b/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmProtoBufUtil.kt @@ -121,6 +121,6 @@ object JvmProtoBufUtil { } @JvmStatic - fun isMovedFromInterfaceCompanion(proto: ProtoBuf.Property) = - proto.getExtension(JvmProtoBuf.isMovedFromInterfaceCompanion).toInt().and(1) != 0 + fun isMovedFromInterfaceCompanion(proto: ProtoBuf.Property): Boolean = + JvmFlags.IS_MOVED_FROM_INTERFACE_COMPANION.get(proto.getExtension(JvmProtoBuf.flags)) }