Simplify storage of JVM signatures in binary metadata

Store the whole method & field descriptor strings. Moving these strings to
separate annotation arguments later will allow to reuse them with the ones in
the constant pool, presumably allowing to save lots of space (up to 10%)

Original commit: 7d5bd3cf50
This commit is contained in:
Alexander Udalov
2015-09-19 03:16:02 +03:00
parent 99bf0fd03f
commit 7e24eb8d91
@@ -299,9 +299,7 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
open fun checkEquals(old: JvmProtoBuf.JvmMethodSignature, new: JvmProtoBuf.JvmMethodSignature): Boolean { open fun checkEquals(old: JvmProtoBuf.JvmMethodSignature, new: JvmProtoBuf.JvmMethodSignature): Boolean {
if (!checkStringEquals(old.name, new.name)) return false if (!checkStringEquals(old.name, new.name)) return false
if (!checkEquals(old.returnType, new.returnType)) return false if (!checkStringEquals(old.desc, new.desc)) return false
if (!checkEqualsJvmMethodSignatureParameterType(old, new)) return false
return true return true
} }
@@ -352,29 +350,10 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
return true return true
} }
open fun checkEquals(old: JvmProtoBuf.JvmType, new: JvmProtoBuf.JvmType): Boolean {
if (old.hasPrimitiveType() != new.hasPrimitiveType()) return false
if (old.hasPrimitiveType()) {
if (old.primitiveType != new.primitiveType) return false
}
if (old.hasClassFqName() != new.hasClassFqName()) return false
if (old.hasClassFqName()) {
if (!checkClassIdEquals(old.classFqName, new.classFqName)) return false
}
if (old.hasArrayDimension() != new.hasArrayDimension()) return false
if (old.hasArrayDimension()) {
if (old.arrayDimension != new.arrayDimension) return false
}
return true
}
open fun checkEquals(old: JvmProtoBuf.JvmFieldSignature, new: JvmProtoBuf.JvmFieldSignature): Boolean { open fun checkEquals(old: JvmProtoBuf.JvmFieldSignature, new: JvmProtoBuf.JvmFieldSignature): Boolean {
if (!checkStringEquals(old.name, new.name)) return false if (!checkStringEquals(old.name, new.name)) return false
if (!checkEquals(old.type, new.type)) return false if (!checkStringEquals(old.desc, new.desc)) return false
if (old.hasIsStaticInOuter() != new.hasIsStaticInOuter()) return false if (old.hasIsStaticInOuter() != new.hasIsStaticInOuter()) return false
if (old.hasIsStaticInOuter()) { if (old.hasIsStaticInOuter()) {
@@ -550,16 +529,6 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
return true return true
} }
open fun checkEqualsJvmMethodSignatureParameterType(old: JvmProtoBuf.JvmMethodSignature, new: JvmProtoBuf.JvmMethodSignature): Boolean {
if (old.parameterTypeCount != new.parameterTypeCount) return false
for(i in 0..old.parameterTypeCount - 1) {
if (!checkEquals(old.getParameterType(i), new.getParameterType(i))) return false
}
return true
}
open fun checkEqualsAnnotationArgumentValueArrayElement(old: ProtoBuf.Annotation.Argument.Value, new: ProtoBuf.Annotation.Argument.Value): Boolean { open fun checkEqualsAnnotationArgumentValueArrayElement(old: ProtoBuf.Annotation.Argument.Value, new: ProtoBuf.Annotation.Argument.Value): Boolean {
if (old.arrayElementCount != new.arrayElementCount) return false if (old.arrayElementCount != new.arrayElementCount) return false
@@ -814,11 +783,7 @@ public fun JvmProtoBuf.JvmMethodSignature.hashCode(stringIndexes: (Int) -> Int,
hashCode = 31 * hashCode + stringIndexes(name) hashCode = 31 * hashCode + stringIndexes(name)
hashCode = 31 * hashCode + returnType.hashCode(stringIndexes, fqNameIndexes) hashCode = 31 * hashCode + stringIndexes(desc)
for(i in 0..parameterTypeCount - 1) {
hashCode = 31 * hashCode + getParameterType(i).hashCode(stringIndexes, fqNameIndexes)
}
return hashCode return hashCode
} }
@@ -869,30 +834,12 @@ public fun ProtoBuf.Annotation.Argument.hashCode(stringIndexes: (Int) -> Int, fq
return hashCode return hashCode
} }
public fun JvmProtoBuf.JvmType.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int): Int {
var hashCode = 1
if (hasPrimitiveType()) {
hashCode = 31 * hashCode + primitiveType.hashCode()
}
if (hasClassFqName()) {
hashCode = 31 * hashCode + fqNameIndexes(classFqName)
}
if (hasArrayDimension()) {
hashCode = 31 * hashCode + arrayDimension
}
return hashCode
}
public fun JvmProtoBuf.JvmFieldSignature.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int): Int { public fun JvmProtoBuf.JvmFieldSignature.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int): Int {
var hashCode = 1 var hashCode = 1
hashCode = 31 * hashCode + stringIndexes(name) hashCode = 31 * hashCode + stringIndexes(name)
hashCode = 31 * hashCode + type.hashCode(stringIndexes, fqNameIndexes) hashCode = 31 * hashCode + stringIndexes(desc)
if (hasIsStaticInOuter()) { if (hasIsStaticInOuter()) {
hashCode = 31 * hashCode + isStaticInOuter.hashCode() hashCode = 31 * hashCode + isStaticInOuter.hashCode()