Fix proto comparison for fields mapped to type table
This commit is contained in:
committed by
romanart
parent
c694752b4f
commit
28e6219b0b
+20
-3
@@ -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()
|
||||
|
||||
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.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 $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 oldTypeTable: ProtoBuf.TypeTable = oldTypeTable ?: ProtoBuf.TypeTable.getDefaultInstance()")
|
||||
p.println("val newTypeTable: ProtoBuf.TypeTable = newTypeTable ?: ProtoBuf.TypeTable.getDefaultInstance()")
|
||||
|
||||
p.println()
|
||||
p.println("private val classIds = Interner<ClassId>()")
|
||||
@@ -162,6 +171,10 @@ class GenerateProtoBufCompare {
|
||||
}
|
||||
|
||||
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 newGetIndexOfString(index: Int): Int = getIndexOfString(index, newStringIndexesMap, newNameResolver)")
|
||||
p.println()
|
||||
@@ -206,7 +219,7 @@ class GenerateProtoBufCompare {
|
||||
val extFields = extensions[descriptor]?.filter { !it.isSkip } ?: emptyList()
|
||||
|
||||
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.println("var $HASH_CODE_NAME = 1")
|
||||
@@ -426,6 +439,8 @@ class GenerateProtoBufCompare {
|
||||
|
||||
private fun ifWithComparison(field: Descriptors.FieldDescriptor, expr: String, statement: String) =
|
||||
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.nameIdInTable) ->
|
||||
"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 =
|
||||
when {
|
||||
field.options.getExtension(DebugExtOptionsProtoBuf.typeIdInTable) ->
|
||||
"typeById($expr).$HASH_CODE_NAME(stringIndexes, fqNameIndexes, typeById)"
|
||||
field.options.getExtension(DebugExtOptionsProtoBuf.stringIdInTable) ||
|
||||
field.options.getExtension(DebugExtOptionsProtoBuf.nameIdInTable) ->
|
||||
"stringIndexes($expr)"
|
||||
@@ -459,7 +476,7 @@ class GenerateProtoBufCompare {
|
||||
field.javaType in JAVA_TYPES_WITH_INLINED_EQUALS ->
|
||||
"$expr.$HASH_CODE_NAME()"
|
||||
else ->
|
||||
"$expr.$HASH_CODE_NAME(stringIndexes, fqNameIndexes)"
|
||||
"$expr.$HASH_CODE_NAME(stringIndexes, fqNameIndexes, typeById)"
|
||||
}
|
||||
|
||||
private val Descriptors.Descriptor.typeName: String
|
||||
|
||||
Reference in New Issue
Block a user