Add JvmFlags, use flags field instead of is_moved_from_interface_companion

To be able to add more property-related flags into the same int field
later
This commit is contained in:
Alexander Udalov
2018-07-16 18:17:25 +02:00
parent 5767f84c0e
commit 715abda908
7 changed files with 74 additions and 39 deletions
@@ -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 (!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.flags) != new.hasExtension(JvmProtoBuf.flags)) return false
if (old.hasExtension(JvmProtoBuf.isMovedFromInterfaceCompanion)) { if (old.hasExtension(JvmProtoBuf.flags)) {
if (old.getExtension(JvmProtoBuf.isMovedFromInterfaceCompanion) != new.getExtension(JvmProtoBuf.isMovedFromInterfaceCompanion)) return false if (old.getExtension(JvmProtoBuf.flags) != new.getExtension(JvmProtoBuf.flags)) return false
} }
if (old.getExtensionCount(JsProtoBuf.propertyAnnotation) != new.getExtensionCount(JsProtoBuf.propertyAnnotation)) { 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) hashCode = 31 * hashCode + getExtension(JvmProtoBuf.propertySignature).hashCode(stringIndexes, fqNameIndexes)
} }
if (hasExtension(JvmProtoBuf.isMovedFromInterfaceCompanion)) { if (hasExtension(JvmProtoBuf.flags)) {
hashCode = 31 * hashCode + getExtension(JvmProtoBuf.isMovedFromInterfaceCompanion) hashCode = 31 * hashCode + getExtension(JvmProtoBuf.flags)
} }
for(i in 0..getExtensionCount(JsProtoBuf.propertyAnnotation) - 1) { for(i in 0..getExtensionCount(JsProtoBuf.propertyAnnotation) - 1) {
@@ -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.methodSignature);
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.lambdaClassOriginName); 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.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.typeAnnotation);
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.isRaw); registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.isRaw);
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.typeParameterAnnotation); registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.typeParameterAnnotation);
@@ -4559,14 +4559,19 @@ public final class DebugJvmProtoBuf {
.newFileScopedGeneratedExtension( .newFileScopedGeneratedExtension(
org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.JvmPropertySignature.class, org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.JvmPropertySignature.class,
org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.JvmPropertySignature.getDefaultInstance()); 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;
/** /**
* <code>extend .org.jetbrains.kotlin.metadata.Property { ... }</code> * <code>extend .org.jetbrains.kotlin.metadata.Property { ... }</code>
*
* <pre>
**
*isMovedFromInterfaceCompanion true if this property is declared in an interface companion, and the field is stored in the interface
* </pre>
*/ */
public static final public static final
org.jetbrains.kotlin.protobuf.GeneratedMessage.GeneratedExtension< org.jetbrains.kotlin.protobuf.GeneratedMessage.GeneratedExtension<
org.jetbrains.kotlin.metadata.DebugProtoBuf.Property, 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( .newFileScopedGeneratedExtension(
java.lang.Integer.class, java.lang.Integer.class,
null); null);
@@ -4738,27 +4743,27 @@ public final class DebugJvmProtoBuf {
"perty_signature\022\'.org.jetbrains.kotlin.m" + "perty_signature\022\'.org.jetbrains.kotlin.m" +
"etadata.Property\030d \001(\01327.org.jetbrains.k" + "etadata.Property\030d \001(\01327.org.jetbrains.k" +
"otlin.metadata.jvm.JvmPropertySignature:" + "otlin.metadata.jvm.JvmPropertySignature:" +
"R\n!is_moved_from_interface_companion\022\'.o" + "9\n\005flags\022\'.org.jetbrains.kotlin.metadata" +
"rg.jetbrains.kotlin.metadata.Property\030e " + ".Property\030e \001(\005:\0010:g\n\017type_annotation\022#." +
"\001(\005:g\n\017type_annotation\022#.org.jetbrains.k", "org.jetbrains.kotlin.metadata.Type\030d \003(\013",
"otlin.metadata.Type\030d \003(\0132).org.jetbrain" + "2).org.jetbrains.kotlin.metadata.Annotat" +
"s.kotlin.metadata.Annotation:3\n\006is_raw\022#" + "ion:3\n\006is_raw\022#.org.jetbrains.kotlin.met" +
".org.jetbrains.kotlin.metadata.Type\030e \001(" + "adata.Type\030e \001(\010:z\n\031type_parameter_annot" +
"\010:z\n\031type_parameter_annotation\022,.org.jet" + "ation\022,.org.jetbrains.kotlin.metadata.Ty" +
"brains.kotlin.metadata.TypeParameter\030d \003" + "peParameter\030d \003(\0132).org.jetbrains.kotlin" +
"(\0132).org.jetbrains.kotlin.metadata.Annot" + ".metadata.Annotation:E\n\021class_module_nam" +
"ation:E\n\021class_module_name\022$.org.jetbrai" + "e\022$.org.jetbrains.kotlin.metadata.Class\030" +
"ns.kotlin.metadata.Class\030e \001(\005B\004\230\265\030\001:k\n\024" + "e \001(\005B\004\230\265\030\001:k\n\024class_local_variable\022$.or" +
"class_local_variable\022$.org.jetbrains.kot" + "g.jetbrains.kotlin.metadata.Class\030f \003(\0132" +
"lin.metadata.Class\030f \003(\0132\'.org.jetbrains", "\'.org.jetbrains.kotlin.metadata.Property",
".kotlin.metadata.Property:P\n\034anonymous_o" + ":P\n\034anonymous_object_origin_name\022$.org.j" +
"bject_origin_name\022$.org.jetbrains.kotlin" + "etbrains.kotlin.metadata.Class\030g \001(\005B\004\230\265" +
".metadata.Class\030g \001(\005B\004\230\265\030\001:I\n\023package_m" + "\030\001:I\n\023package_module_name\022&.org.jetbrain" +
"odule_name\022&.org.jetbrains.kotlin.metada" + "s.kotlin.metadata.Package\030e \001(\005B\004\230\265\030\001:o\n" +
"ta.Package\030e \001(\005B\004\230\265\030\001:o\n\026package_local_" + "\026package_local_variable\022&.org.jetbrains." +
"variable\022&.org.jetbrains.kotlin.metadata" + "kotlin.metadata.Package\030f \003(\0132\'.org.jetb" +
".Package\030f \003(\0132\'.org.jetbrains.kotlin.me" + "rains.kotlin.metadata.PropertyB\022B\020DebugJ" +
"tadata.PropertyB\022B\020DebugJvmProtoBuf" "vmProtoBuf"
}; };
org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { new org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() {
@@ -4808,7 +4813,7 @@ public final class DebugJvmProtoBuf {
methodSignature.internalInit(descriptor.getExtensions().get(1)); methodSignature.internalInit(descriptor.getExtensions().get(1));
lambdaClassOriginName.internalInit(descriptor.getExtensions().get(2)); lambdaClassOriginName.internalInit(descriptor.getExtensions().get(2));
propertySignature.internalInit(descriptor.getExtensions().get(3)); propertySignature.internalInit(descriptor.getExtensions().get(3));
isMovedFromInterfaceCompanion.internalInit(descriptor.getExtensions().get(4)); flags.internalInit(descriptor.getExtensions().get(4));
typeAnnotation.internalInit(descriptor.getExtensions().get(5)); typeAnnotation.internalInit(descriptor.getExtensions().get(5));
isRaw.internalInit(descriptor.getExtensions().get(6)); isRaw.internalInit(descriptor.getExtensions().get(6));
typeParameterAnnotation.internalInit(descriptor.getExtensions().get(7)); typeParameterAnnotation.internalInit(descriptor.getExtensions().get(7));
@@ -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.ProtoBuf
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
import org.jetbrains.kotlin.metadata.jvm.deserialization.ClassMapperLite 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.jvm.deserialization.JvmProtoBufUtil
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
@@ -180,9 +181,9 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta
) )
proto.setExtension(JvmProtoBuf.propertySignature, signature) proto.setExtension(JvmProtoBuf.propertySignature, signature)
val fieldMovedFromInterfaceCompanion = bindings.get(FIELD_MOVED_FROM_INTERFACE_COMPANION, descriptor) val flags = JvmFlags.getPropertyFlags(bindings.get(FIELD_MOVED_FROM_INTERFACE_COMPANION, descriptor) == true)
if (fieldMovedFromInterfaceCompanion != null && fieldMovedFromInterfaceCompanion) { if (flags != 0) {
proto.setExtension(JvmProtoBuf.isMovedFromInterfaceCompanion, 1) proto.setExtension(JvmProtoBuf.flags, flags)
} }
if (JvmAbi.isInterfaceCompanionWithBackingFieldsInOuter(descriptor.containingDeclaration)) { if (JvmAbi.isInterfaceCompanionWithBackingFieldsInOuter(descriptor.containingDeclaration)) {
+5 -1
View File
@@ -102,7 +102,11 @@ extend Function {
extend Property { extend Property {
optional JvmPropertySignature property_signature = 100; 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 { extend Type {
@@ -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.methodSignature);
registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.lambdaClassOriginName); 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.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.typeAnnotation);
registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.isRaw); registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.isRaw);
registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.typeParameterAnnotation); registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.typeParameterAnnotation);
@@ -3859,14 +3859,19 @@ public final class JvmProtoBuf {
100, 100,
org.jetbrains.kotlin.protobuf.WireFormat.FieldType.MESSAGE, org.jetbrains.kotlin.protobuf.WireFormat.FieldType.MESSAGE,
org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmPropertySignature.class); 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;
/** /**
* <code>extend .org.jetbrains.kotlin.metadata.Property { ... }</code> * <code>extend .org.jetbrains.kotlin.metadata.Property { ... }</code>
*
* <pre>
**
*isMovedFromInterfaceCompanion true if this property is declared in an interface companion, and the field is stored in the interface
* </pre>
*/ */
public static final public static final
org.jetbrains.kotlin.protobuf.GeneratedMessageLite.GeneratedExtension< org.jetbrains.kotlin.protobuf.GeneratedMessageLite.GeneratedExtension<
org.jetbrains.kotlin.metadata.ProtoBuf.Property, 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( .newSingularGeneratedExtension(
org.jetbrains.kotlin.metadata.ProtoBuf.Property.getDefaultInstance(), org.jetbrains.kotlin.metadata.ProtoBuf.Property.getDefaultInstance(),
0, 0,
@@ -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)
}
@@ -121,6 +121,6 @@ object JvmProtoBufUtil {
} }
@JvmStatic @JvmStatic
fun isMovedFromInterfaceCompanion(proto: ProtoBuf.Property) = fun isMovedFromInterfaceCompanion(proto: ProtoBuf.Property): Boolean =
proto.getExtension(JvmProtoBuf.isMovedFromInterfaceCompanion).toInt().and(1) != 0 JvmFlags.IS_MOVED_FROM_INTERFACE_COMPANION.get(proto.getExtension(JvmProtoBuf.flags))
} }