Fix proto comparison for fields mapped to type table

This commit is contained in:
Alexey Tsvetkov
2019-10-28 04:25:18 +03:00
committed by romanart
parent c694752b4f
commit 28e6219b0b
8 changed files with 407 additions and 310 deletions
File diff suppressed because it is too large Load Diff
@@ -82,9 +82,21 @@ abstract class DifferenceCalculator {
val result = hashSetOf<String>() val result = hashSetOf<String>()
val oldMap = val oldMap =
oldList.groupBy { it.getHashCode({ compareObject.oldGetIndexOfString(it) }, { compareObject.oldGetIndexOfClassId(it) }) } oldList.groupBy {
it.getHashCode(
compareObject::oldGetIndexOfString,
compareObject::oldGetIndexOfClassId,
compareObject::oldGetTypeById
)
}
val newMap = val newMap =
newList.groupBy { it.getHashCode({ compareObject.newGetIndexOfString(it) }, { compareObject.newGetIndexOfClassId(it) }) } newList.groupBy {
it.getHashCode(
compareObject::newGetIndexOfString,
compareObject::newGetIndexOfClassId,
compareObject::newGetTypeById
)
}
val hashes = oldMap.keys + newMap.keys val hashes = oldMap.keys + newMap.keys
for (hash in hashes) { for (hash in hashes) {
@@ -134,12 +146,12 @@ abstract class DifferenceCalculator {
return oldNames.union(newNames) - oldNames.intersect(newNames) return oldNames.union(newNames) - oldNames.intersect(newNames)
} }
private fun MessageLite.getHashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int): Int { private fun MessageLite.getHashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int, typeTable: (Int) -> ProtoBuf.Type): Int {
return when (this) { return when (this) {
is ProtoBuf.Constructor -> hashCode(stringIndexes, fqNameIndexes) is ProtoBuf.Constructor -> hashCode(stringIndexes, fqNameIndexes, typeTable)
is ProtoBuf.Function -> hashCode(stringIndexes, fqNameIndexes) is ProtoBuf.Function -> hashCode(stringIndexes, fqNameIndexes, typeTable)
is ProtoBuf.Property -> hashCode(stringIndexes, fqNameIndexes) is ProtoBuf.Property -> hashCode(stringIndexes, fqNameIndexes, typeTable)
is ProtoBuf.TypeAlias -> hashCode(stringIndexes, fqNameIndexes) is ProtoBuf.TypeAlias -> hashCode(stringIndexes, fqNameIndexes, typeTable)
else -> error("Unknown message: $this") else -> error("Unknown message: $this")
} }
} }
@@ -159,7 +171,12 @@ class DifferenceCalculatorForClass(
private val oldData: ClassProtoData, private val oldData: ClassProtoData,
private val newData: ClassProtoData private val newData: ClassProtoData
) : DifferenceCalculator() { ) : DifferenceCalculator() {
override val compareObject = ProtoCompareGenerated(oldData.nameResolver, newData.nameResolver) override val compareObject = ProtoCompareGenerated(
oldNameResolver = oldData.nameResolver,
newNameResolver = newData.nameResolver,
oldTypeTable = oldData.proto.typeTableOrNull,
newTypeTable = newData.proto.typeTableOrNull
)
override fun difference(): Difference { override fun difference(): Difference {
val (oldProto, oldNameResolver) = oldData val (oldProto, oldNameResolver) = oldData
@@ -273,7 +290,12 @@ class DifferenceCalculatorForPackageFacade(
private val oldData: PackagePartProtoData, private val oldData: PackagePartProtoData,
private val newData: PackagePartProtoData private val newData: PackagePartProtoData
) : DifferenceCalculator() { ) : DifferenceCalculator() {
override val compareObject = ProtoCompareGenerated(oldData.nameResolver, newData.nameResolver) override val compareObject = ProtoCompareGenerated(
oldNameResolver = oldData.nameResolver,
newNameResolver = newData.nameResolver,
oldTypeTable = oldData.proto.typeTableOrNull,
newTypeTable = newData.proto.typeTableOrNull
)
override fun difference(): Difference { override fun difference(): Difference {
val oldProto = oldData.proto val oldProto = oldData.proto
@@ -322,3 +344,9 @@ class DifferenceCalculatorForPackageFacade(
private val ProtoBuf.Class.isSealed: Boolean private val ProtoBuf.Class.isSealed: Boolean
get() = ProtoBuf.Modality.SEALED == Flags.MODALITY.get(flags) get() = ProtoBuf.Modality.SEALED == Flags.MODALITY.get(flags)
val ProtoBuf.Class.typeTableOrNull: ProtoBuf.TypeTable?
get() = if (hasTypeTable()) typeTable else null
val ProtoBuf.Package.typeTableOrNull: ProtoBuf.TypeTable?
get() = if (hasTypeTable()) typeTable else null
@@ -11,6 +11,7 @@ public final class DebugExtOptionsProtoBuf {
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.fqNameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.fqNameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.stringIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.stringIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
} }
public static final int SKIP_IN_COMPARISON_FIELD_NUMBER = 50000; public static final int SKIP_IN_COMPARISON_FIELD_NUMBER = 50000;
/** /**
@@ -56,6 +57,17 @@ public final class DebugExtOptionsProtoBuf {
.newFileScopedGeneratedExtension( .newFileScopedGeneratedExtension(
java.lang.Boolean.class, java.lang.Boolean.class,
null); null);
public static final int TYPE_ID_IN_TABLE_FIELD_NUMBER = 50004;
/**
* <code>extend .google.protobuf.FieldOptions { ... }</code>
*/
public static final
org.jetbrains.kotlin.protobuf.GeneratedMessage.GeneratedExtension<
org.jetbrains.kotlin.protobuf.DescriptorProtos.FieldOptions,
java.lang.Boolean> typeIdInTable = org.jetbrains.kotlin.protobuf.GeneratedMessage
.newFileScopedGeneratedExtension(
java.lang.Boolean.class,
null);
public static org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor public static org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor
getDescriptor() { getDescriptor() {
@@ -73,8 +85,9 @@ public final class DebugExtOptionsProtoBuf {
"rotobuf.FieldOptions\030\321\206\003 \001(\010:<\n\023fq_name_" + "rotobuf.FieldOptions\030\321\206\003 \001(\010:<\n\023fq_name_" +
"id_in_table\022\035.google.protobuf.FieldOptio" + "id_in_table\022\035.google.protobuf.FieldOptio" +
"ns\030\322\206\003 \001(\010:;\n\022string_id_in_table\022\035.googl" + "ns\030\322\206\003 \001(\010:;\n\022string_id_in_table\022\035.googl" +
"e.protobuf.FieldOptions\030\323\206\003 \001(\010B\031B\027Debug" + "e.protobuf.FieldOptions\030\323\206\003 \001(\010:9\n\020type_" +
"ExtOptionsProtoBuf" "id_in_table\022\035.google.protobuf.FieldOptio",
"ns\030\324\206\003 \001(\010B\031B\027DebugExtOptionsProtoBuf"
}; };
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() {
@@ -93,6 +106,7 @@ public final class DebugExtOptionsProtoBuf {
nameIdInTable.internalInit(descriptor.getExtensions().get(1)); nameIdInTable.internalInit(descriptor.getExtensions().get(1));
fqNameIdInTable.internalInit(descriptor.getExtensions().get(2)); fqNameIdInTable.internalInit(descriptor.getExtensions().get(2));
stringIdInTable.internalInit(descriptor.getExtensions().get(3)); stringIdInTable.internalInit(descriptor.getExtensions().get(3));
typeIdInTable.internalInit(descriptor.getExtensions().get(4));
org.jetbrains.kotlin.protobuf.DescriptorProtos.getDescriptor(); org.jetbrains.kotlin.protobuf.DescriptorProtos.getDescriptor();
} }
@@ -34331,115 +34331,117 @@ public final class DebugProtoBuf {
"E\020\000\022\010\n\004CHAR\020\001\022\t\n\005SHORT\020\002\022\007\n\003INT\020\003\022\010\n\004LON" + "E\020\000\022\010\n\004CHAR\020\001\022\t\n\005SHORT\020\002\022\007\n\003INT\020\003\022\010\n\004LON" +
"G\020\004\022\t\n\005FLOAT\020\005\022\n\n\006DOUBLE\020\006\022\013\n\007BOOLEAN\020\007\022", "G\020\004\022\t\n\005FLOAT\020\005\022\n\n\006DOUBLE\020\006\022\013\n\007BOOLEAN\020\007\022",
"\n\n\006STRING\020\010\022\t\n\005CLASS\020\t\022\010\n\004ENUM\020\n\022\016\n\nANNO" + "\n\n\006STRING\020\010\022\t\n\005CLASS\020\t\022\010\n\004ENUM\020\n\022\016\n\nANNO" +
"TATION\020\013\022\t\n\005ARRAY\020\014\"\373\005\n\004Type\022>\n\010argument" + "TATION\020\013\022\t\n\005ARRAY\020\014\"\223\006\n\004Type\022>\n\010argument" +
"\030\002 \003(\0132,.org.jetbrains.kotlin.metadata.T" + "\030\002 \003(\0132,.org.jetbrains.kotlin.metadata.T" +
"ype.Argument\022\027\n\010nullable\030\003 \001(\010:\005false\022+\n" + "ype.Argument\022\027\n\010nullable\030\003 \001(\010:\005false\022+\n" +
"\035flexible_type_capabilities_id\030\004 \001(\005B\004\230\265" + "\035flexible_type_capabilities_id\030\004 \001(\005B\004\230\265" +
"\030\001\022A\n\024flexible_upper_bound\030\005 \001(\0132#.org.j" + "\030\001\022A\n\024flexible_upper_bound\030\005 \001(\0132#.org.j" +
"etbrains.kotlin.metadata.Type\022\037\n\027flexibl" + "etbrains.kotlin.metadata.Type\022%\n\027flexibl" +
"e_upper_bound_id\030\010 \001(\005\022\030\n\nclass_name\030\006 \001" + "e_upper_bound_id\030\010 \001(\005B\004\240\265\030\001\022\030\n\nclass_na" +
"(\005B\004\220\265\030\001\022\026\n\016type_parameter\030\007 \001(\005\022!\n\023type" + "me\030\006 \001(\005B\004\220\265\030\001\022\026\n\016type_parameter\030\007 \001(\005\022!" +
"_parameter_name\030\t \001(\005B\004\210\265\030\001\022\035\n\017type_alia", "\n\023type_parameter_name\030\t \001(\005B\004\210\265\030\001\022\035\n\017typ",
"s_name\030\014 \001(\005B\004\220\265\030\001\0227\n\nouter_type\030\n \001(\0132#" + "e_alias_name\030\014 \001(\005B\004\220\265\030\001\0227\n\nouter_type\030\n" +
".org.jetbrains.kotlin.metadata.Type\022\025\n\ro" +
"uter_type_id\030\013 \001(\005\022=\n\020abbreviated_type\030\r" +
" \001(\0132#.org.jetbrains.kotlin.metadata.Typ" + " \001(\0132#.org.jetbrains.kotlin.metadata.Typ" +
"e\022\033\n\023abbreviated_type_id\030\016 \001(\005\022\r\n\005flags\030" + "e\022\033\n\router_type_id\030\013 \001(\005B\004\240\265\030\001\022=\n\020abbrev" +
"\001 \001(\005\032\322\001\n\010Argument\022P\n\nprojection\030\001 \001(\01627" + "iated_type\030\r \001(\0132#.org.jetbrains.kotlin." +
".org.jetbrains.kotlin.metadata.Type.Argu" + "metadata.Type\022!\n\023abbreviated_type_id\030\016 \001" +
"ment.Projection:\003INV\0221\n\004type\030\002 \001(\0132#.org" + "(\005B\004\240\265\030\001\022\r\n\005flags\030\001 \001(\005\032\330\001\n\010Argument\022P\n\n" +
".jetbrains.kotlin.metadata.Type\022\017\n\007type_" + "projection\030\001 \001(\01627.org.jetbrains.kotlin." +
"id\030\003 \001(\005\"0\n\nProjection\022\006\n\002IN\020\000\022\007\n\003OUT\020\001\022", "metadata.Type.Argument.Projection:\003INV\0221" +
"\007\n\003INV\020\002\022\010\n\004STAR\020\003*\005\010d\020\310\001\"\230\002\n\rTypeParame" + "\n\004type\030\002 \001(\0132#.org.jetbrains.kotlin.meta" +
"ter\022\n\n\002id\030\001 \002(\005\022\022\n\004name\030\002 \002(\005B\004\210\265\030\001\022\026\n\007r" + "data.Type\022\025\n\007type_id\030\003 \001(\005B\004\240\265\030\001\"0\n\nProj",
"eified\030\003 \001(\010:\005false\022L\n\010variance\030\004 \001(\01625." + "ection\022\006\n\002IN\020\000\022\007\n\003OUT\020\001\022\007\n\003INV\020\002\022\010\n\004STAR" +
"org.jetbrains.kotlin.metadata.TypeParame" + "\020\003*\005\010d\020\310\001\"\234\002\n\rTypeParameter\022\n\n\002id\030\001 \002(\005\022" +
"ter.Variance:\003INV\0228\n\013upper_bound\030\005 \003(\0132#" + "\022\n\004name\030\002 \002(\005B\004\210\265\030\001\022\026\n\007reified\030\003 \001(\010:\005fa" +
".org.jetbrains.kotlin.metadata.Type\022\032\n\016u" + "lse\022L\n\010variance\030\004 \001(\01625.org.jetbrains.ko" +
"pper_bound_id\030\006 \003(\005B\002\020\001\"$\n\010Variance\022\006\n\002I" + "tlin.metadata.TypeParameter.Variance:\003IN" +
"N\020\000\022\007\n\003OUT\020\001\022\007\n\003INV\020\002*\005\010d\020\350\007\"\244\007\n\005Class\022\020" + "V\0228\n\013upper_bound\030\005 \003(\0132#.org.jetbrains.k" +
"\n\005flags\030\001 \001(\005:\0016\022\025\n\007fq_name\030\003 \002(\005B\004\220\265\030\001\022" + "otlin.metadata.Type\022\036\n\016upper_bound_id\030\006 " +
"#\n\025companion_object_name\030\004 \001(\005B\004\210\265\030\001\022D\n\016", "\003(\005B\006\020\001\240\265\030\001\"$\n\010Variance\022\006\n\002IN\020\000\022\007\n\003OUT\020\001" +
"type_parameter\030\005 \003(\0132,.org.jetbrains.kot" + "\022\007\n\003INV\020\002*\005\010d\020\350\007\"\250\007\n\005Class\022\020\n\005flags\030\001 \001(" +
"lin.metadata.TypeParameter\0226\n\tsupertype\030" + "\005:\0016\022\025\n\007fq_name\030\003 \002(\005B\004\220\265\030\001\022#\n\025companion",
"\006 \003(\0132#.org.jetbrains.kotlin.metadata.Ty" + "_object_name\030\004 \001(\005B\004\210\265\030\001\022D\n\016type_paramet" +
"pe\022\030\n\014supertype_id\030\002 \003(\005B\002\020\001\022!\n\021nested_c" + "er\030\005 \003(\0132,.org.jetbrains.kotlin.metadata" +
"lass_name\030\007 \003(\005B\006\020\001\210\265\030\001\022?\n\013constructor\030\010" + ".TypeParameter\0226\n\tsupertype\030\006 \003(\0132#.org." +
" \003(\0132*.org.jetbrains.kotlin.metadata.Con" + "jetbrains.kotlin.metadata.Type\022\034\n\014supert" +
"structor\0229\n\010function\030\t \003(\0132\'.org.jetbrai" + "ype_id\030\002 \003(\005B\006\020\001\240\265\030\001\022!\n\021nested_class_nam" +
"ns.kotlin.metadata.Function\0229\n\010property\030" + "e\030\007 \003(\005B\006\020\001\210\265\030\001\022?\n\013constructor\030\010 \003(\0132*.o" +
"\n \003(\0132\'.org.jetbrains.kotlin.metadata.Pr" + "rg.jetbrains.kotlin.metadata.Constructor" +
"operty\022<\n\ntype_alias\030\013 \003(\0132(.org.jetbrai", "\0229\n\010function\030\t \003(\0132\'.org.jetbrains.kotli" +
"ns.kotlin.metadata.TypeAlias\022<\n\nenum_ent" + "n.metadata.Function\0229\n\010property\030\n \003(\0132\'." +
"ry\030\r \003(\0132(.org.jetbrains.kotlin.metadata" + "org.jetbrains.kotlin.metadata.Property\022<",
".EnumEntry\022\'\n\027sealed_subclass_fq_name\030\020 " + "\n\ntype_alias\030\013 \003(\0132(.org.jetbrains.kotli" +
"\003(\005B\006\020\001\220\265\030\001\022<\n\ntype_table\030\036 \001(\0132(.org.je" + "n.metadata.TypeAlias\022<\n\nenum_entry\030\r \003(\013" +
"tbrains.kotlin.metadata.TypeTable\022\033\n\023ver" + "2(.org.jetbrains.kotlin.metadata.EnumEnt" +
"sion_requirement\030\037 \003(\005\022Y\n\031version_requir" + "ry\022\'\n\027sealed_subclass_fq_name\030\020 \003(\005B\006\020\001\220" +
"ement_table\030 \001(\01326.org.jetbrains.kotlin" + "\265\030\001\022<\n\ntype_table\030\036 \001(\0132(.org.jetbrains." +
".metadata.VersionRequirementTable\"x\n\004Kin" + "kotlin.metadata.TypeTable\022\033\n\023version_req" +
"d\022\t\n\005CLASS\020\000\022\r\n\tINTERFACE\020\001\022\016\n\nENUM_CLAS" + "uirement\030\037 \003(\005\022Y\n\031version_requirement_ta" +
"S\020\002\022\016\n\nENUM_ENTRY\020\003\022\024\n\020ANNOTATION_CLASS\020", "ble\030 \001(\01326.org.jetbrains.kotlin.metadat" +
"\004\022\n\n\006OBJECT\020\005\022\024\n\020COMPANION_OBJECT\020\006*\006\010d\020" + "a.VersionRequirementTable\"x\n\004Kind\022\t\n\005CLA" +
"\270\224\001\"\335\002\n\007Package\0229\n\010function\030\003 \003(\0132\'.org." + "SS\020\000\022\r\n\tINTERFACE\020\001\022\016\n\nENUM_CLASS\020\002\022\016\n\nE",
"jetbrains.kotlin.metadata.Function\0229\n\010pr" + "NUM_ENTRY\020\003\022\024\n\020ANNOTATION_CLASS\020\004\022\n\n\006OBJ" +
"operty\030\004 \003(\0132\'.org.jetbrains.kotlin.meta" + "ECT\020\005\022\024\n\020COMPANION_OBJECT\020\006*\006\010d\020\270\224\001\"\335\002\n\007" +
"data.Property\022<\n\ntype_alias\030\005 \003(\0132(.org." + "Package\0229\n\010function\030\003 \003(\0132\'.org.jetbrain" +
"jetbrains.kotlin.metadata.TypeAlias\022<\n\nt" + "s.kotlin.metadata.Function\0229\n\010property\030\004" +
"ype_table\030\036 \001(\0132(.org.jetbrains.kotlin.m" + " \003(\0132\'.org.jetbrains.kotlin.metadata.Pro" +
"etadata.TypeTable\022Y\n\031version_requirement" + "perty\022<\n\ntype_alias\030\005 \003(\0132(.org.jetbrain" +
"_table\030 \001(\01326.org.jetbrains.kotlin.meta" + "s.kotlin.metadata.TypeAlias\022<\n\ntype_tabl" +
"data.VersionRequirementTable*\005\010d\020\310\001\"Z\n\tT", "e\030\036 \001(\0132(.org.jetbrains.kotlin.metadata." +
"ypeTable\0221\n\004type\030\001 \003(\0132#.org.jetbrains.k" + "TypeTable\022Y\n\031version_requirement_table\030 " +
"otlin.metadata.Type\022\032\n\016first_nullable\030\002 " + " \001(\01326.org.jetbrains.kotlin.metadata.Ver",
"\001(\005:\002-1\"\214\001\n\013Constructor\022\020\n\005flags\030\001 \001(\005:\001" + "sionRequirementTable*\005\010d\020\310\001\"Z\n\tTypeTable" +
"6\022F\n\017value_parameter\030\002 \003(\0132-.org.jetbrai" + "\0221\n\004type\030\001 \003(\0132#.org.jetbrains.kotlin.me" +
"ns.kotlin.metadata.ValueParameter\022\033\n\023ver" + "tadata.Type\022\032\n\016first_nullable\030\002 \001(\005:\002-1\"" +
"sion_requirement\030\037 \003(\005*\006\010d\020\270\224\001\"\232\004\n\010Funct" + "\214\001\n\013Constructor\022\020\n\005flags\030\001 \001(\005:\0016\022F\n\017val" +
"ion\022\020\n\005flags\030\t \001(\005:\0016\022\024\n\told_flags\030\001 \001(\005" + "ue_parameter\030\002 \003(\0132-.org.jetbrains.kotli" +
":\0016\022\022\n\004name\030\002 \002(\005B\004\210\265\030\001\0228\n\013return_type\030\003" + "n.metadata.ValueParameter\022\033\n\023version_req" +
" \001(\0132#.org.jetbrains.kotlin.metadata.Typ" + "uirement\030\037 \003(\005*\006\010d\020\270\224\001\"\246\004\n\010Function\022\020\n\005f" +
"e\022\026\n\016return_type_id\030\007 \001(\005\022D\n\016type_parame", "lags\030\t \001(\005:\0016\022\024\n\told_flags\030\001 \001(\005:\0016\022\022\n\004n" +
"ter\030\004 \003(\0132,.org.jetbrains.kotlin.metadat" + "ame\030\002 \002(\005B\004\210\265\030\001\0228\n\013return_type\030\003 \001(\0132#.o" +
"a.TypeParameter\022:\n\rreceiver_type\030\005 \001(\0132#" + "rg.jetbrains.kotlin.metadata.Type\022\034\n\016ret",
".org.jetbrains.kotlin.metadata.Type\022\030\n\020r" + "urn_type_id\030\007 \001(\005B\004\240\265\030\001\022D\n\016type_paramete" +
"eceiver_type_id\030\010 \001(\005\022F\n\017value_parameter" + "r\030\004 \003(\0132,.org.jetbrains.kotlin.metadata." +
"\030\006 \003(\0132-.org.jetbrains.kotlin.metadata.V" + "TypeParameter\022:\n\rreceiver_type\030\005 \001(\0132#.o" +
"alueParameter\022<\n\ntype_table\030\036 \001(\0132(.org." + "rg.jetbrains.kotlin.metadata.Type\022\036\n\020rec" +
"jetbrains.kotlin.metadata.TypeTable\022\033\n\023v" + "eiver_type_id\030\010 \001(\005B\004\240\265\030\001\022F\n\017value_param" +
"ersion_requirement\030\037 \003(\005\0229\n\010contract\030 \001" + "eter\030\006 \003(\0132-.org.jetbrains.kotlin.metada" +
"(\0132\'.org.jetbrains.kotlin.metadata.Contr" + "ta.ValueParameter\022<\n\ntype_table\030\036 \001(\0132(." +
"act*\006\010d\020\270\224\001\"\331\003\n\010Property\022\022\n\005flags\030\013 \001(\005:", "org.jetbrains.kotlin.metadata.TypeTable\022" +
"\003518\022\027\n\told_flags\030\001 \001(\005:\0042054\022\022\n\004name\030\002 " + "\033\n\023version_requirement\030\037 \003(\005\0229\n\010contract" +
"\002(\005B\004\210\265\030\001\0228\n\013return_type\030\003 \001(\0132#.org.jet" + "\030 \001(\0132\'.org.jetbrains.kotlin.metadata.C",
"brains.kotlin.metadata.Type\022\026\n\016return_ty" + "ontract*\006\010d\020\270\224\001\"\345\003\n\010Property\022\022\n\005flags\030\013 " +
"pe_id\030\t \001(\005\022D\n\016type_parameter\030\004 \003(\0132,.or" + "\001(\005:\003518\022\027\n\told_flags\030\001 \001(\005:\0042054\022\022\n\004nam" +
"g.jetbrains.kotlin.metadata.TypeParamete" + "e\030\002 \002(\005B\004\210\265\030\001\0228\n\013return_type\030\003 \001(\0132#.org" +
"r\022:\n\rreceiver_type\030\005 \001(\0132#.org.jetbrains" + ".jetbrains.kotlin.metadata.Type\022\034\n\016retur" +
".kotlin.metadata.Type\022\030\n\020receiver_type_i" + "n_type_id\030\t \001(\005B\004\240\265\030\001\022D\n\016type_parameter\030" +
"d\030\n \001(\005\022M\n\026setter_value_parameter\030\006 \001(\0132" + "\004 \003(\0132,.org.jetbrains.kotlin.metadata.Ty" +
"-.org.jetbrains.kotlin.metadata.ValuePar" + "peParameter\022:\n\rreceiver_type\030\005 \001(\0132#.org" +
"ameter\022\024\n\014getter_flags\030\007 \001(\005\022\024\n\014setter_f", ".jetbrains.kotlin.metadata.Type\022\036\n\020recei" +
"lags\030\010 \001(\005\022\033\n\023version_requirement\030\037 \003(\005*" + "ver_type_id\030\n \001(\005B\004\240\265\030\001\022M\n\026setter_value_" +
"\006\010d\020\270\224\001\"\343\001\n\016ValueParameter\022\020\n\005flags\030\001 \001(" + "parameter\030\006 \001(\0132-.org.jetbrains.kotlin.m",
"\005:\0010\022\022\n\004name\030\002 \002(\005B\004\210\265\030\001\0221\n\004type\030\003 \001(\0132#" + "etadata.ValueParameter\022\024\n\014getter_flags\030\007" +
".org.jetbrains.kotlin.metadata.Type\022\017\n\007t" + " \001(\005\022\024\n\014setter_flags\030\010 \001(\005\022\033\n\023version_re" +
"ype_id\030\005 \001(\005\022@\n\023vararg_element_type\030\004 \001(" + "quirement\030\037 \003(\005*\006\010d\020\270\224\001\"\357\001\n\016ValueParamet" +
"\0132#.org.jetbrains.kotlin.metadata.Type\022\036" + "er\022\020\n\005flags\030\001 \001(\005:\0010\022\022\n\004name\030\002 \002(\005B\004\210\265\030\001" +
"\n\026vararg_element_type_id\030\006 \001(\005*\005\010d\020\310\001\"\212\003" + "\0221\n\004type\030\003 \001(\0132#.org.jetbrains.kotlin.me" +
"\n\tTypeAlias\022\020\n\005flags\030\001 \001(\005:\0016\022\022\n\004name\030\002 " + "tadata.Type\022\025\n\007type_id\030\005 \001(\005B\004\240\265\030\001\022@\n\023va" +
"\002(\005B\004\210\265\030\001\022D\n\016type_parameter\030\003 \003(\0132,.org." + "rarg_element_type\030\004 \001(\0132#.org.jetbrains." +
"jetbrains.kotlin.metadata.TypeParameter\022", "kotlin.metadata.Type\022$\n\026vararg_element_t" +
"<\n\017underlying_type\030\004 \001(\0132#.org.jetbrains" + "ype_id\030\006 \001(\005B\004\240\265\030\001*\005\010d\020\310\001\"\226\003\n\tTypeAlias\022" +
".kotlin.metadata.Type\022\032\n\022underlying_type" + "\020\n\005flags\030\001 \001(\005:\0016\022\022\n\004name\030\002 \002(\005B\004\210\265\030\001\022D\n",
"_id\030\005 \001(\005\022:\n\rexpanded_type\030\006 \001(\0132#.org.j" + "\016type_parameter\030\003 \003(\0132,.org.jetbrains.ko" +
"etbrains.kotlin.metadata.Type\022\030\n\020expande" + "tlin.metadata.TypeParameter\022<\n\017underlyin" +
"d_type_id\030\007 \001(\005\022=\n\nannotation\030\010 \003(\0132).or" + "g_type\030\004 \001(\0132#.org.jetbrains.kotlin.meta" +
"data.Type\022 \n\022underlying_type_id\030\005 \001(\005B\004\240" +
"\265\030\001\022:\n\rexpanded_type\030\006 \001(\0132#.org.jetbrai" +
"ns.kotlin.metadata.Type\022\036\n\020expanded_type" +
"_id\030\007 \001(\005B\004\240\265\030\001\022=\n\nannotation\030\010 \003(\0132).or" +
"g.jetbrains.kotlin.metadata.Annotation\022\033" + "g.jetbrains.kotlin.metadata.Annotation\022\033" +
"\n\023version_requirement\030\037 \003(\005*\005\010d\020\310\001\"&\n\tEn" + "\n\023version_requirement\030\037 \003(\005*\005\010d\020\310\001\"&\n\tEn" +
"umEntry\022\022\n\004name\030\001 \001(\005B\004\210\265\030\001*\005\010d\020\310\001\"\225\003\n\022V" + "umEntry\022\022\n\004name\030\001 \001(\005B\004\210\265\030\001*\005\010d\020\310\001\"\225\003\n\022V",
"ersionRequirement\022\017\n\007version\030\001 \001(\005\022\024\n\014ve" + "ersionRequirement\022\017\n\007version\030\001 \001(\005\022\024\n\014ve" +
"rsion_full\030\002 \001(\005\022M\n\005level\030\003 \001(\01627.org.je", "rsion_full\030\002 \001(\005\022M\n\005level\030\003 \001(\01627.org.je" +
"tbrains.kotlin.metadata.VersionRequireme" + "tbrains.kotlin.metadata.VersionRequireme" +
"nt.Level:\005ERROR\022\022\n\nerror_code\030\004 \001(\005\022\025\n\007m" + "nt.Level:\005ERROR\022\022\n\nerror_code\030\004 \001(\005\022\025\n\007m" +
"essage\030\005 \001(\005B\004\230\265\030\001\022e\n\014version_kind\030\006 \001(\016" + "essage\030\005 \001(\005B\004\230\265\030\001\022e\n\014version_kind\030\006 \001(\016" +
@@ -34447,9 +34449,9 @@ public final class DebugProtoBuf {
"Requirement.VersionKind:\020LANGUAGE_VERSIO" + "Requirement.VersionKind:\020LANGUAGE_VERSIO" +
"N\"+\n\005Level\022\013\n\007WARNING\020\000\022\t\n\005ERROR\020\001\022\n\n\006HI" + "N\"+\n\005Level\022\013\n\007WARNING\020\000\022\t\n\005ERROR\020\001\022\n\n\006HI" +
"DDEN\020\002\"J\n\013VersionKind\022\024\n\020LANGUAGE_VERSIO" + "DDEN\020\002\"J\n\013VersionKind\022\024\n\020LANGUAGE_VERSIO" +
"N\020\000\022\024\n\020COMPILER_VERSION\020\001\022\017\n\013API_VERSION" + "N\020\000\022\024\n\020COMPILER_VERSION\020\001\022\017\n\013API_VERSION",
"\020\002\"a\n\027VersionRequirementTable\022F\n\013require" + "\020\002\"a\n\027VersionRequirementTable\022F\n\013require" +
"ment\030\001 \003(\01321.org.jetbrains.kotlin.metada", "ment\030\001 \003(\01321.org.jetbrains.kotlin.metada" +
"ta.VersionRequirement\"\217\002\n\017PackageFragmen" + "ta.VersionRequirement\"\217\002\n\017PackageFragmen" +
"t\022;\n\007strings\030\001 \001(\0132*.org.jetbrains.kotli" + "t\022;\n\007strings\030\001 \001(\0132*.org.jetbrains.kotli" +
"n.metadata.StringTable\022J\n\017qualified_name" + "n.metadata.StringTable\022J\n\017qualified_name" +
@@ -34457,9 +34459,9 @@ public final class DebugProtoBuf {
"QualifiedNameTable\0227\n\007package\030\003 \001(\0132&.or" + "QualifiedNameTable\0227\n\007package\030\003 \001(\0132&.or" +
"g.jetbrains.kotlin.metadata.Package\0223\n\005c" + "g.jetbrains.kotlin.metadata.Package\0223\n\005c" +
"lass\030\004 \003(\0132$.org.jetbrains.kotlin.metada" + "lass\030\004 \003(\0132$.org.jetbrains.kotlin.metada" +
"ta.Class*\005\010d\020\310\001\"A\n\010Contract\0225\n\006effect\030\001 " + "ta.Class*\005\010d\020\310\001\"A\n\010Contract\0225\n\006effect\030\001 ",
"\003(\0132%.org.jetbrains.kotlin.metadata.Effe" + "\003(\0132%.org.jetbrains.kotlin.metadata.Effe" +
"ct\"\306\003\n\006Effect\022E\n\013effect_type\030\001 \001(\01620.org", "ct\"\306\003\n\006Effect\022E\n\013effect_type\030\001 \001(\01620.org" +
".jetbrains.kotlin.metadata.Effect.Effect" + ".jetbrains.kotlin.metadata.Effect.Effect" +
"Type\022N\n\033effect_constructor_argument\030\002 \003(" + "Type\022N\n\033effect_constructor_argument\030\002 \003(" +
"\0132).org.jetbrains.kotlin.metadata.Expres" + "\0132).org.jetbrains.kotlin.metadata.Expres" +
@@ -34467,27 +34469,27 @@ public final class DebugProtoBuf {
"\030\003 \001(\0132).org.jetbrains.kotlin.metadata.E" + "\030\003 \001(\0132).org.jetbrains.kotlin.metadata.E" +
"xpression\022B\n\004kind\030\004 \001(\01624.org.jetbrains." + "xpression\022B\n\004kind\030\004 \001(\01624.org.jetbrains." +
"kotlin.metadata.Effect.InvocationKind\"C\n" + "kotlin.metadata.Effect.InvocationKind\"C\n" +
"\nEffectType\022\024\n\020RETURNS_CONSTANT\020\000\022\t\n\005CAL" + "\nEffectType\022\024\n\020RETURNS_CONSTANT\020\000\022\t\n\005CAL",
"LS\020\001\022\024\n\020RETURNS_NOT_NULL\020\002\"G\n\016Invocation" + "LS\020\001\022\024\n\020RETURNS_NOT_NULL\020\002\"G\n\016Invocation" +
"Kind\022\020\n\014AT_MOST_ONCE\020\000\022\020\n\014EXACTLY_ONCE\020\001", "Kind\022\020\n\014AT_MOST_ONCE\020\000\022\020\n\014EXACTLY_ONCE\020\001" +
"\022\021\n\rAT_LEAST_ONCE\020\002\"\237\003\n\nExpression\022\020\n\005fl" + "\022\021\n\rAT_LEAST_ONCE\020\002\"\245\003\n\nExpression\022\020\n\005fl" +
"ags\030\001 \001(\005:\0010\022!\n\031value_parameter_referenc" + "ags\030\001 \001(\005:\0010\022!\n\031value_parameter_referenc" +
"e\030\002 \001(\005\022O\n\016constant_value\030\003 \001(\01627.org.je" + "e\030\002 \001(\005\022O\n\016constant_value\030\003 \001(\01627.org.je" +
"tbrains.kotlin.metadata.Expression.Const" + "tbrains.kotlin.metadata.Expression.Const" +
"antValue\022=\n\020is_instance_type\030\004 \001(\0132#.org" + "antValue\022=\n\020is_instance_type\030\004 \001(\0132#.org" +
".jetbrains.kotlin.metadata.Type\022\033\n\023is_in" + ".jetbrains.kotlin.metadata.Type\022!\n\023is_in" +
"stance_type_id\030\005 \001(\005\022?\n\014and_argument\030\006 \003" + "stance_type_id\030\005 \001(\005B\004\240\265\030\001\022?\n\014and_argume" +
"(\0132).org.jetbrains.kotlin.metadata.Expre" + "nt\030\006 \003(\0132).org.jetbrains.kotlin.metadata",
"ssion\022>\n\013or_argument\030\007 \003(\0132).org.jetbrai" + ".Expression\022>\n\013or_argument\030\007 \003(\0132).org.j" +
"ns.kotlin.metadata.Expression\".\n\rConstan", "etbrains.kotlin.metadata.Expression\".\n\rC" +
"tValue\022\010\n\004TRUE\020\000\022\t\n\005FALSE\020\001\022\010\n\004NULL\020\002*9\n" + "onstantValue\022\010\n\004TRUE\020\000\022\t\n\005FALSE\020\001\022\010\n\004NUL" +
"\010Modality\022\t\n\005FINAL\020\000\022\010\n\004OPEN\020\001\022\014\n\010ABSTRA" + "L\020\002*9\n\010Modality\022\t\n\005FINAL\020\000\022\010\n\004OPEN\020\001\022\014\n\010" +
"CT\020\002\022\n\n\006SEALED\020\003*b\n\nVisibility\022\014\n\010INTERN" + "ABSTRACT\020\002\022\n\n\006SEALED\020\003*b\n\nVisibility\022\014\n\010" +
"AL\020\000\022\013\n\007PRIVATE\020\001\022\r\n\tPROTECTED\020\002\022\n\n\006PUBL" + "INTERNAL\020\000\022\013\n\007PRIVATE\020\001\022\r\n\tPROTECTED\020\002\022\n" +
"IC\020\003\022\023\n\017PRIVATE_TO_THIS\020\004\022\t\n\005LOCAL\020\005*Q\n\n" + "\n\006PUBLIC\020\003\022\023\n\017PRIVATE_TO_THIS\020\004\022\t\n\005LOCAL" +
"MemberKind\022\017\n\013DECLARATION\020\000\022\021\n\rFAKE_OVER" + "\020\005*Q\n\nMemberKind\022\017\n\013DECLARATION\020\000\022\021\n\rFAK" +
"RIDE\020\001\022\016\n\nDELEGATION\020\002\022\017\n\013SYNTHESIZED\020\003B" + "E_OVERRIDE\020\001\022\016\n\nDELEGATION\020\002\022\017\n\013SYNTHESI" +
"\017B\rDebugProtoBuf" "ZED\020\003B\017B\rDebugProtoBuf"
}; };
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() {
@@ -34654,20 +34656,35 @@ public final class DebugProtoBuf {
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.fqNameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.fqNameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.stringIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.stringIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.fqNameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.fqNameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.fqNameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.fqNameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.fqNameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.fqNameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.fqNameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.fqNameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.nameIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.stringIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.stringIdInTable);
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.typeIdInTable);
org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor
.internalUpdateFileDescriptor(descriptor, registry); .internalUpdateFileDescriptor(descriptor, registry);
org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.getDescriptor(); org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.getDescriptor();
+1
View File
@@ -25,4 +25,5 @@ extend google.protobuf.FieldOptions {
optional bool name_id_in_table = 50001; optional bool name_id_in_table = 50001;
optional bool fq_name_id_in_table = 50002; optional bool fq_name_id_in_table = 50002;
optional bool string_id_in_table = 50003; optional bool string_id_in_table = 50003;
optional bool type_id_in_table = 50004;
} }
+15 -15
View File
@@ -123,7 +123,7 @@ message Type {
// When projection is STAR, no type is written, otherwise type must be specified // When projection is STAR, no type is written, otherwise type must be specified
optional Type type = 2; optional Type type = 2;
optional int32 type_id = 3; optional int32 type_id = 3 [(type_id_in_table) = true];
} }
repeated Argument argument = 2; repeated Argument argument = 2;
@@ -135,7 +135,7 @@ message Type {
optional int32 flexible_type_capabilities_id = 4 [(string_id_in_table) = true]; optional int32 flexible_type_capabilities_id = 4 [(string_id_in_table) = true];
optional Type flexible_upper_bound = 5; optional Type flexible_upper_bound = 5;
optional int32 flexible_upper_bound_id = 8; optional int32 flexible_upper_bound_id = 8 [(type_id_in_table) = true];
// Only one of [class_name, type_parameter, type_parameter_name, type_alias_name] should be present // Only one of [class_name, type_parameter, type_parameter_name, type_alias_name] should be present
@@ -150,10 +150,10 @@ message Type {
// Outer type may be present only if class_name or type_alias_name is present // Outer type may be present only if class_name or type_alias_name is present
optional Type outer_type = 10; optional Type outer_type = 10;
optional int32 outer_type_id = 11; optional int32 outer_type_id = 11 [(type_id_in_table) = true];
optional Type abbreviated_type = 13; optional Type abbreviated_type = 13;
optional int32 abbreviated_type_id = 14; optional int32 abbreviated_type_id = 14 [(type_id_in_table) = true];
/* /*
suspend suspend
@@ -178,7 +178,7 @@ message TypeParameter {
optional Variance variance = 4 [default = INV]; optional Variance variance = 4 [default = INV];
repeated Type upper_bound = 5; repeated Type upper_bound = 5;
repeated int32 upper_bound_id = 6 [packed = true]; repeated int32 upper_bound_id = 6 [packed = true, (type_id_in_table) = true];
extensions 100 to 999; extensions 100 to 999;
} }
@@ -215,7 +215,7 @@ message Class {
repeated TypeParameter type_parameter = 5; repeated TypeParameter type_parameter = 5;
repeated Type supertype = 6; repeated Type supertype = 6;
repeated int32 supertype_id = 2 [packed = true]; repeated int32 supertype_id = 2 [packed = true, (type_id_in_table) = true];
repeated int32 nested_class_name = 7 [packed = true, (name_id_in_table) = true]; repeated int32 nested_class_name = 7 [packed = true, (name_id_in_table) = true];
@@ -294,12 +294,12 @@ message Function {
required int32 name = 2 [(name_id_in_table) = true]; required int32 name = 2 [(name_id_in_table) = true];
optional Type return_type = 3; optional Type return_type = 3;
optional int32 return_type_id = 7; optional int32 return_type_id = 7 [(type_id_in_table) = true];
repeated TypeParameter type_parameter = 4; repeated TypeParameter type_parameter = 4;
optional Type receiver_type = 5; optional Type receiver_type = 5;
optional int32 receiver_type_id = 8; optional int32 receiver_type_id = 8 [(type_id_in_table) = true];
repeated ValueParameter value_parameter = 6; repeated ValueParameter value_parameter = 6;
@@ -335,12 +335,12 @@ message Property {
required int32 name = 2 [(name_id_in_table) = true]; required int32 name = 2 [(name_id_in_table) = true];
optional Type return_type = 3; optional Type return_type = 3;
optional int32 return_type_id = 9; optional int32 return_type_id = 9 [(type_id_in_table) = true];
repeated TypeParameter type_parameter = 4; repeated TypeParameter type_parameter = 4;
optional Type receiver_type = 5; optional Type receiver_type = 5;
optional int32 receiver_type_id = 10; optional int32 receiver_type_id = 10 [(type_id_in_table) = true];
optional ValueParameter setter_value_parameter = 6; optional ValueParameter setter_value_parameter = 6;
@@ -377,10 +377,10 @@ message ValueParameter {
required int32 name = 2 [(name_id_in_table) = true]; required int32 name = 2 [(name_id_in_table) = true];
optional Type type = 3; optional Type type = 3;
optional int32 type_id = 5; optional int32 type_id = 5 [(type_id_in_table) = true];
optional Type vararg_element_type = 4; optional Type vararg_element_type = 4;
optional int32 vararg_element_type_id = 6; optional int32 vararg_element_type_id = 6 [(type_id_in_table) = true];
extensions 100 to 199; extensions 100 to 199;
} }
@@ -397,10 +397,10 @@ message TypeAlias {
repeated TypeParameter type_parameter = 3; repeated TypeParameter type_parameter = 3;
optional Type underlying_type = 4; optional Type underlying_type = 4;
optional int32 underlying_type_id = 5; optional int32 underlying_type_id = 5 [(type_id_in_table) = true];
optional Type expanded_type = 6; optional Type expanded_type = 6;
optional int32 expanded_type_id = 7; optional int32 expanded_type_id = 7 [(type_id_in_table) = true];
repeated Annotation annotation = 8; repeated Annotation annotation = 8;
@@ -557,7 +557,7 @@ message Expression {
// present => this expression is IsInstancePredicate, with 'variableName' as LHS // present => this expression is IsInstancePredicate, with 'variableName' as LHS
// and with type encoded in either one of next two fields as RHS. // and with type encoded in either one of next two fields as RHS.
optional Type is_instance_type = 4; optional Type is_instance_type = 4;
optional int32 is_instance_type_id = 5; optional int32 is_instance_type_id = 5 [(type_id_in_table) = true];
// non-empty => this expression is boolean formula of form 'andArguments[0] && andArguments[1] && ...' // non-empty => this expression is boolean formula of form 'andArguments[0] && andArguments[1] && ...'
// Additionally, if first argument of formula is primitive expression (i.e. predicate or value), // Additionally, if first argument of formula is primitive expression (i.e. predicate or value),
@@ -119,7 +119,14 @@ class GenerateProtoBufCompare {
p.println("/** This file is generated by org.jetbrains.kotlin.generators.protobuf.GenerateProtoBufCompare. DO NOT MODIFY MANUALLY */") p.println("/** This file is generated by org.jetbrains.kotlin.generators.protobuf.GenerateProtoBufCompare. DO NOT MODIFY MANUALLY */")
p.println() p.println()
p.println("open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameResolver: NameResolver) {") p.println("open class ProtoCompareGenerated(")
p.pushIndent()
p.println("val oldNameResolver: NameResolver,")
p.println("val newNameResolver: NameResolver,")
p.println("oldTypeTable: ProtoBuf.TypeTable?,")
p.println("newTypeTable: ProtoBuf.TypeTable?")
p.popIndent()
p.println(") {")
p.pushIndent() p.pushIndent()
p.println("private val strings = Interner<String>()") p.println("private val strings = Interner<String>()")
@@ -127,6 +134,8 @@ class GenerateProtoBufCompare {
p.println("val $NEW_PREFIX${STRING_INDEXES_NAME}Map: MutableMap<Int, Int> = hashMapOf()") p.println("val $NEW_PREFIX${STRING_INDEXES_NAME}Map: MutableMap<Int, Int> = hashMapOf()")
p.println("val $OLD_PREFIX${CLASS_ID_INDEXES_NAME}Map: MutableMap<Int, Int> = hashMapOf()") p.println("val $OLD_PREFIX${CLASS_ID_INDEXES_NAME}Map: MutableMap<Int, Int> = hashMapOf()")
p.println("val $NEW_PREFIX${CLASS_ID_INDEXES_NAME}Map: MutableMap<Int, Int> = hashMapOf()") p.println("val $NEW_PREFIX${CLASS_ID_INDEXES_NAME}Map: MutableMap<Int, Int> = hashMapOf()")
p.println("val oldTypeTable: ProtoBuf.TypeTable = oldTypeTable ?: ProtoBuf.TypeTable.getDefaultInstance()")
p.println("val newTypeTable: ProtoBuf.TypeTable = newTypeTable ?: ProtoBuf.TypeTable.getDefaultInstance()")
p.println() p.println()
p.println("private val classIds = Interner<ClassId>()") p.println("private val classIds = Interner<ClassId>()")
@@ -162,6 +171,10 @@ class GenerateProtoBufCompare {
} }
fun generateAuxiliaryMethods(p: Printer) { fun generateAuxiliaryMethods(p: Printer) {
p.println("fun oldGetTypeById(id: Int): ProtoBuf.Type = oldTypeTable.getType(id) ?: error(\"Unknown type id: ${'$'}id\")")
p.println("fun newGetTypeById(id: Int): ProtoBuf.Type = newTypeTable.getType(id) ?: error(\"Unknown type id: ${'$'}id\")")
p.println()
p.println("fun oldGetIndexOfString(index: Int): Int = getIndexOfString(index, oldStringIndexesMap, oldNameResolver)") p.println("fun oldGetIndexOfString(index: Int): Int = getIndexOfString(index, oldStringIndexesMap, oldNameResolver)")
p.println("fun newGetIndexOfString(index: Int): Int = getIndexOfString(index, newStringIndexesMap, newNameResolver)") p.println("fun newGetIndexOfString(index: Int): Int = getIndexOfString(index, newStringIndexesMap, newNameResolver)")
p.println() p.println()
@@ -206,7 +219,7 @@ class GenerateProtoBufCompare {
val extFields = extensions[descriptor]?.filter { !it.isSkip } ?: emptyList() val extFields = extensions[descriptor]?.filter { !it.isSkip } ?: emptyList()
p.println() p.println()
p.println("fun $typeName.$HASH_CODE_NAME(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int): Int {") p.println("fun $typeName.$HASH_CODE_NAME(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int, typeById: (Int) -> ProtoBuf.Type): Int {")
p.pushIndent() p.pushIndent()
p.println("var $HASH_CODE_NAME = 1") p.println("var $HASH_CODE_NAME = 1")
@@ -426,6 +439,8 @@ class GenerateProtoBufCompare {
private fun ifWithComparison(field: Descriptors.FieldDescriptor, expr: String, statement: String) = private fun ifWithComparison(field: Descriptors.FieldDescriptor, expr: String, statement: String) =
when { when {
field.options.getExtension(DebugExtOptionsProtoBuf.typeIdInTable) ->
"if (!$CHECK_EQUALS_NAME(oldTypeTable.getType(old.$expr), newTypeTable.getType(new.$expr))) $statement"
field.options.getExtension(DebugExtOptionsProtoBuf.stringIdInTable) || field.options.getExtension(DebugExtOptionsProtoBuf.stringIdInTable) ||
field.options.getExtension(DebugExtOptionsProtoBuf.nameIdInTable) -> field.options.getExtension(DebugExtOptionsProtoBuf.nameIdInTable) ->
"if (!$CHECK_STRING_EQUALS_NAME(old.$expr, new.$expr)) $statement" "if (!$CHECK_STRING_EQUALS_NAME(old.$expr, new.$expr)) $statement"
@@ -449,6 +464,8 @@ class GenerateProtoBufCompare {
private fun fieldToHashCode(field: Descriptors.FieldDescriptor, expr: String): String = private fun fieldToHashCode(field: Descriptors.FieldDescriptor, expr: String): String =
when { when {
field.options.getExtension(DebugExtOptionsProtoBuf.typeIdInTable) ->
"typeById($expr).$HASH_CODE_NAME(stringIndexes, fqNameIndexes, typeById)"
field.options.getExtension(DebugExtOptionsProtoBuf.stringIdInTable) || field.options.getExtension(DebugExtOptionsProtoBuf.stringIdInTable) ||
field.options.getExtension(DebugExtOptionsProtoBuf.nameIdInTable) -> field.options.getExtension(DebugExtOptionsProtoBuf.nameIdInTable) ->
"stringIndexes($expr)" "stringIndexes($expr)"
@@ -459,7 +476,7 @@ class GenerateProtoBufCompare {
field.javaType in JAVA_TYPES_WITH_INLINED_EQUALS -> field.javaType in JAVA_TYPES_WITH_INLINED_EQUALS ->
"$expr.$HASH_CODE_NAME()" "$expr.$HASH_CODE_NAME()"
else -> else ->
"$expr.$HASH_CODE_NAME(stringIndexes, fqNameIndexes)" "$expr.$HASH_CODE_NAME(stringIndexes, fqNameIndexes, typeById)"
} }
private val Descriptors.Descriptor.typeName: String private val Descriptors.Descriptor.typeName: String
@@ -58,10 +58,20 @@ abstract class AbstractProtoComparisonTest<PROTO_DATA> : TestWithWorkingDir() {
val rawProtoDifference = when { val rawProtoDifference = when {
oldData is ClassProtoData && newData is ClassProtoData -> { oldData is ClassProtoData && newData is ClassProtoData -> {
ProtoCompareGenerated(oldData.nameResolver, newData.nameResolver).difference(oldData.proto, newData.proto) ProtoCompareGenerated(
oldNameResolver = oldData.nameResolver,
newNameResolver = newData.nameResolver,
oldTypeTable = oldData.proto.typeTableOrNull,
newTypeTable = newData.proto.typeTableOrNull
).difference(oldData.proto, newData.proto)
} }
oldData is PackagePartProtoData && newData is PackagePartProtoData -> { oldData is PackagePartProtoData && newData is PackagePartProtoData -> {
ProtoCompareGenerated(oldData.nameResolver, newData.nameResolver).difference(oldData.proto, newData.proto) ProtoCompareGenerated(
oldNameResolver = oldData.nameResolver,
newNameResolver = newData.nameResolver,
oldTypeTable = oldData.proto.typeTableOrNull,
newTypeTable = newData.proto.typeTableOrNull
).difference(oldData.proto, newData.proto)
} }
else -> null else -> null
} }