Drop Callable and primary/secondary constructor proto messages

Original commit: e4efa27b76
This commit is contained in:
Alexander Udalov
2015-10-05 11:18:06 +03:00
parent 6e19e8c055
commit 739cdb5c29
2 changed files with 32 additions and 299 deletions
@@ -35,10 +35,6 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
private val classIds = Interner<ClassId>()
open fun checkEquals(old: ProtoBuf.Package, new: ProtoBuf.Package): Boolean {
if (!checkEqualsPackageMember(old, new)) return false
if (!checkEqualsPackageConstructor(old, new)) return false
if (!checkEqualsPackageFunction(old, new)) return false
if (!checkEqualsPackageProperty(old, new)) return false
@@ -46,8 +42,6 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
return true
}
public enum class ProtoBufPackageKind {
MEMBER_LIST,
CONSTRUCTOR_LIST,
FUNCTION_LIST,
PROPERTY_LIST
}
@@ -55,10 +49,6 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
public fun difference(old: ProtoBuf.Package, new: ProtoBuf.Package): EnumSet<ProtoBufPackageKind> {
val result = EnumSet.noneOf(ProtoBufPackageKind::class.java)
if (!checkEqualsPackageMember(old, new)) result.add(ProtoBufPackageKind.MEMBER_LIST)
if (!checkEqualsPackageConstructor(old, new)) result.add(ProtoBufPackageKind.CONSTRUCTOR_LIST)
if (!checkEqualsPackageFunction(old, new)) result.add(ProtoBufPackageKind.FUNCTION_LIST)
if (!checkEqualsPackageProperty(old, new)) result.add(ProtoBufPackageKind.PROPERTY_LIST)
@@ -91,17 +81,8 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
if (!checkEqualsClassProperty(old, new)) return false
if (!checkEqualsClassMember(old, new)) return false
if (!checkEqualsClassEnumEntry(old, new)) return false
if (old.hasPrimaryConstructor() != new.hasPrimaryConstructor()) return false
if (old.hasPrimaryConstructor()) {
if (!checkEquals(old.primaryConstructor, new.primaryConstructor)) return false
}
if (!checkEqualsClassSecondaryConstructor(old, new)) return false
if (old.getExtensionCount(JvmProtoBuf.classAnnotation) != new.getExtensionCount(JvmProtoBuf.classAnnotation)) return false
for(i in 0..old.getExtensionCount(JvmProtoBuf.classAnnotation) - 1) {
@@ -120,10 +101,7 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
CONSTRUCTOR_LIST,
FUNCTION_LIST,
PROPERTY_LIST,
MEMBER_LIST,
ENUM_ENTRY_LIST,
PRIMARY_CONSTRUCTOR,
SECONDARY_CONSTRUCTOR_LIST,
CLASS_ANNOTATION_LIST
}
@@ -154,17 +132,8 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
if (!checkEqualsClassProperty(old, new)) result.add(ProtoBufClassKind.PROPERTY_LIST)
if (!checkEqualsClassMember(old, new)) result.add(ProtoBufClassKind.MEMBER_LIST)
if (!checkEqualsClassEnumEntry(old, new)) result.add(ProtoBufClassKind.ENUM_ENTRY_LIST)
if (old.hasPrimaryConstructor() != new.hasPrimaryConstructor()) result.add(ProtoBufClassKind.PRIMARY_CONSTRUCTOR)
if (old.hasPrimaryConstructor()) {
if (!checkEquals(old.primaryConstructor, new.primaryConstructor)) result.add(ProtoBufClassKind.PRIMARY_CONSTRUCTOR)
}
if (!checkEqualsClassSecondaryConstructor(old, new)) result.add(ProtoBufClassKind.SECONDARY_CONSTRUCTOR_LIST)
if (old.getExtensionCount(JvmProtoBuf.classAnnotation) != new.getExtensionCount(JvmProtoBuf.classAnnotation)) result.add(ProtoBufClassKind.CLASS_ANNOTATION_LIST)
for(i in 0..old.getExtensionCount(JvmProtoBuf.classAnnotation) - 1) {
@@ -174,69 +143,6 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
return result
}
open fun checkEquals(old: ProtoBuf.Callable, new: ProtoBuf.Callable): Boolean {
if (old.hasFlags() != new.hasFlags()) return false
if (old.hasFlags()) {
if (old.flags != new.flags) return false
}
if (old.hasGetterFlags() != new.hasGetterFlags()) return false
if (old.hasGetterFlags()) {
if (old.getterFlags != new.getterFlags) return false
}
if (old.hasSetterFlags() != new.hasSetterFlags()) return false
if (old.hasSetterFlags()) {
if (old.setterFlags != new.setterFlags) return false
}
if (!checkEqualsCallableTypeParameter(old, new)) return false
if (old.hasReceiverType() != new.hasReceiverType()) return false
if (old.hasReceiverType()) {
if (!checkEquals(old.receiverType, new.receiverType)) return false
}
if (!checkStringEquals(old.name, new.name)) return false
if (!checkEqualsCallableValueParameter(old, new)) return false
if (!checkEquals(old.returnType, new.returnType)) return false
if (old.hasExtension(JvmProtoBuf.oldMethodSignature) != new.hasExtension(JvmProtoBuf.oldMethodSignature)) return false
if (old.hasExtension(JvmProtoBuf.oldMethodSignature)) {
if (!checkEquals(old.getExtension(JvmProtoBuf.oldMethodSignature), new.getExtension(JvmProtoBuf.oldMethodSignature))) return false
}
if (old.hasExtension(JvmProtoBuf.oldPropertySignature) != new.hasExtension(JvmProtoBuf.oldPropertySignature)) return false
if (old.hasExtension(JvmProtoBuf.oldPropertySignature)) {
if (!checkEquals(old.getExtension(JvmProtoBuf.oldPropertySignature), new.getExtension(JvmProtoBuf.oldPropertySignature))) return false
}
if (old.hasExtension(JvmProtoBuf.oldImplClassName) != new.hasExtension(JvmProtoBuf.oldImplClassName)) return false
if (old.hasExtension(JvmProtoBuf.oldImplClassName)) {
if (!checkStringEquals(old.getExtension(JvmProtoBuf.oldImplClassName), new.getExtension(JvmProtoBuf.oldImplClassName))) return false
}
return true
}
open fun checkEquals(old: ProtoBuf.Constructor, new: ProtoBuf.Constructor): Boolean {
if (old.hasFlags() != new.hasFlags()) return false
if (old.hasFlags()) {
if (old.flags != new.flags) return false
}
if (!checkEqualsConstructorValueParameter(old, new)) return false
if (old.hasExtension(JvmProtoBuf.constructorSignature) != new.hasExtension(JvmProtoBuf.constructorSignature)) return false
if (old.hasExtension(JvmProtoBuf.constructorSignature)) {
if (!checkEquals(old.getExtension(JvmProtoBuf.constructorSignature), new.getExtension(JvmProtoBuf.constructorSignature))) return false
}
return true
}
open fun checkEquals(old: ProtoBuf.Function, new: ProtoBuf.Function): Boolean {
if (old.hasFlags() != new.hasFlags()) return false
if (old.hasFlags()) {
@@ -376,10 +282,17 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
return true
}
open fun checkEquals(old: ProtoBuf.Class.PrimaryConstructor, new: ProtoBuf.Class.PrimaryConstructor): Boolean {
if (old.hasData() != new.hasData()) return false
if (old.hasData()) {
if (!checkEquals(old.data, new.data)) return false
open fun checkEquals(old: ProtoBuf.Constructor, new: ProtoBuf.Constructor): Boolean {
if (old.hasFlags() != new.hasFlags()) return false
if (old.hasFlags()) {
if (old.flags != new.flags) return false
}
if (!checkEqualsConstructorValueParameter(old, new)) return false
if (old.hasExtension(JvmProtoBuf.constructorSignature) != new.hasExtension(JvmProtoBuf.constructorSignature)) return false
if (old.hasExtension(JvmProtoBuf.constructorSignature)) {
if (!checkEquals(old.getExtension(JvmProtoBuf.constructorSignature), new.getExtension(JvmProtoBuf.constructorSignature))) return false
}
return true
@@ -529,26 +442,6 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
return true
}
open fun checkEqualsPackageMember(old: ProtoBuf.Package, new: ProtoBuf.Package): Boolean {
if (old.memberCount != new.memberCount) return false
for(i in 0..old.memberCount - 1) {
if (!checkEquals(old.getMember(i), new.getMember(i))) return false
}
return true
}
open fun checkEqualsPackageConstructor(old: ProtoBuf.Package, new: ProtoBuf.Package): Boolean {
if (old.constructorCount != new.constructorCount) return false
for(i in 0..old.constructorCount - 1) {
if (!checkEquals(old.getConstructor(i), new.getConstructor(i))) return false
}
return true
}
open fun checkEqualsPackageFunction(old: ProtoBuf.Package, new: ProtoBuf.Package): Boolean {
if (old.functionCount != new.functionCount) return false
@@ -629,16 +522,6 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
return true
}
open fun checkEqualsClassMember(old: ProtoBuf.Class, new: ProtoBuf.Class): Boolean {
if (old.memberCount != new.memberCount) return false
for(i in 0..old.memberCount - 1) {
if (!checkEquals(old.getMember(i), new.getMember(i))) return false
}
return true
}
open fun checkEqualsClassEnumEntry(old: ProtoBuf.Class, new: ProtoBuf.Class): Boolean {
if (old.enumEntryCount != new.enumEntryCount) return false
@@ -649,46 +532,6 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
return true
}
open fun checkEqualsClassSecondaryConstructor(old: ProtoBuf.Class, new: ProtoBuf.Class): Boolean {
if (old.secondaryConstructorCount != new.secondaryConstructorCount) return false
for(i in 0..old.secondaryConstructorCount - 1) {
if (!checkEquals(old.getSecondaryConstructor(i), new.getSecondaryConstructor(i))) return false
}
return true
}
open fun checkEqualsCallableTypeParameter(old: ProtoBuf.Callable, new: ProtoBuf.Callable): Boolean {
if (old.typeParameterCount != new.typeParameterCount) return false
for(i in 0..old.typeParameterCount - 1) {
if (!checkEquals(old.getTypeParameter(i), new.getTypeParameter(i))) return false
}
return true
}
open fun checkEqualsCallableValueParameter(old: ProtoBuf.Callable, new: ProtoBuf.Callable): Boolean {
if (old.valueParameterCount != new.valueParameterCount) return false
for(i in 0..old.valueParameterCount - 1) {
if (!checkEquals(old.getValueParameter(i), new.getValueParameter(i))) return false
}
return true
}
open fun checkEqualsConstructorValueParameter(old: ProtoBuf.Constructor, new: ProtoBuf.Constructor): Boolean {
if (old.valueParameterCount != new.valueParameterCount) return false
for(i in 0..old.valueParameterCount - 1) {
if (!checkEquals(old.getValueParameter(i), new.getValueParameter(i))) return false
}
return true
}
open fun checkEqualsFunctionTypeParameter(old: ProtoBuf.Function, new: ProtoBuf.Function): Boolean {
if (old.typeParameterCount != new.typeParameterCount) return false
@@ -739,6 +582,16 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
return true
}
open fun checkEqualsConstructorValueParameter(old: ProtoBuf.Constructor, new: ProtoBuf.Constructor): Boolean {
if (old.valueParameterCount != new.valueParameterCount) return false
for(i in 0..old.valueParameterCount - 1) {
if (!checkEquals(old.getValueParameter(i), new.getValueParameter(i))) return false
}
return true
}
open fun checkEqualsAnnotationArgument(old: ProtoBuf.Annotation, new: ProtoBuf.Annotation): Boolean {
if (old.argumentCount != new.argumentCount) return false
@@ -793,14 +646,6 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi
public fun ProtoBuf.Package.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int): Int {
var hashCode = 1
for(i in 0..memberCount - 1) {
hashCode = 31 * hashCode + getMember(i).hashCode(stringIndexes, fqNameIndexes)
}
for(i in 0..constructorCount - 1) {
hashCode = 31 * hashCode + getConstructor(i).hashCode(stringIndexes, fqNameIndexes)
}
for(i in 0..functionCount - 1) {
hashCode = 31 * hashCode + getFunction(i).hashCode(stringIndexes, fqNameIndexes)
}
@@ -849,22 +694,10 @@ public fun ProtoBuf.Class.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (
hashCode = 31 * hashCode + getProperty(i).hashCode(stringIndexes, fqNameIndexes)
}
for(i in 0..memberCount - 1) {
hashCode = 31 * hashCode + getMember(i).hashCode(stringIndexes, fqNameIndexes)
}
for(i in 0..enumEntryCount - 1) {
hashCode = 31 * hashCode + stringIndexes(getEnumEntry(i))
}
if (hasPrimaryConstructor()) {
hashCode = 31 * hashCode + primaryConstructor.hashCode(stringIndexes, fqNameIndexes)
}
for(i in 0..secondaryConstructorCount - 1) {
hashCode = 31 * hashCode + getSecondaryConstructor(i).hashCode(stringIndexes, fqNameIndexes)
}
for(i in 0..getExtensionCount(JvmProtoBuf.classAnnotation) - 1) {
hashCode = 31 * hashCode + getExtension(JvmProtoBuf.classAnnotation, i).hashCode(stringIndexes, fqNameIndexes)
}
@@ -872,70 +705,6 @@ public fun ProtoBuf.Class.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (
return hashCode
}
public fun ProtoBuf.Callable.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int): Int {
var hashCode = 1
if (hasFlags()) {
hashCode = 31 * hashCode + flags
}
if (hasGetterFlags()) {
hashCode = 31 * hashCode + getterFlags
}
if (hasSetterFlags()) {
hashCode = 31 * hashCode + setterFlags
}
for(i in 0..typeParameterCount - 1) {
hashCode = 31 * hashCode + getTypeParameter(i).hashCode(stringIndexes, fqNameIndexes)
}
if (hasReceiverType()) {
hashCode = 31 * hashCode + receiverType.hashCode(stringIndexes, fqNameIndexes)
}
hashCode = 31 * hashCode + stringIndexes(name)
for(i in 0..valueParameterCount - 1) {
hashCode = 31 * hashCode + getValueParameter(i).hashCode(stringIndexes, fqNameIndexes)
}
hashCode = 31 * hashCode + returnType.hashCode(stringIndexes, fqNameIndexes)
if (hasExtension(JvmProtoBuf.oldMethodSignature)) {
hashCode = 31 * hashCode + getExtension(JvmProtoBuf.oldMethodSignature).hashCode(stringIndexes, fqNameIndexes)
}
if (hasExtension(JvmProtoBuf.oldPropertySignature)) {
hashCode = 31 * hashCode + getExtension(JvmProtoBuf.oldPropertySignature).hashCode(stringIndexes, fqNameIndexes)
}
if (hasExtension(JvmProtoBuf.oldImplClassName)) {
hashCode = 31 * hashCode + stringIndexes(getExtension(JvmProtoBuf.oldImplClassName))
}
return hashCode
}
public fun ProtoBuf.Constructor.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int): Int {
var hashCode = 1
if (hasFlags()) {
hashCode = 31 * hashCode + flags
}
for(i in 0..valueParameterCount - 1) {
hashCode = 31 * hashCode + getValueParameter(i).hashCode(stringIndexes, fqNameIndexes)
}
if (hasExtension(JvmProtoBuf.constructorSignature)) {
hashCode = 31 * hashCode + getExtension(JvmProtoBuf.constructorSignature).hashCode(stringIndexes, fqNameIndexes)
}
return hashCode
}
public fun ProtoBuf.Function.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int): Int {
var hashCode = 1
@@ -1072,11 +841,19 @@ public fun ProtoBuf.Type.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (I
return hashCode
}
public fun ProtoBuf.Class.PrimaryConstructor.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int): Int {
public fun ProtoBuf.Constructor.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int): Int {
var hashCode = 1
if (hasData()) {
hashCode = 31 * hashCode + data.hashCode(stringIndexes, fqNameIndexes)
if (hasFlags()) {
hashCode = 31 * hashCode + flags
}
for(i in 0..valueParameterCount - 1) {
hashCode = 31 * hashCode + getValueParameter(i).hashCode(stringIndexes, fqNameIndexes)
}
if (hasExtension(JvmProtoBuf.constructorSignature)) {
hashCode = 31 * hashCode + getExtension(JvmProtoBuf.constructorSignature).hashCode(stringIndexes, fqNameIndexes)
}
return hashCode
@@ -118,7 +118,6 @@ private abstract class DifferenceCalculator() {
protected val MessageLite.isPrivate: Boolean
get() = Visibilities.isPrivate(Deserialization.visibility(
when (this) {
is ProtoBuf.Callable -> Flags.VISIBILITY.get(flags)
is ProtoBuf.Constructor -> Flags.VISIBILITY.get(flags)
is ProtoBuf.Function -> Flags.VISIBILITY.get(flags)
is ProtoBuf.Property -> Flags.VISIBILITY.get(flags)
@@ -127,7 +126,6 @@ private abstract class DifferenceCalculator() {
private fun MessageLite.getHashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) -> Int): Int {
return when (this) {
is ProtoBuf.Callable -> hashCode(stringIndexes, fqNameIndexes)
is ProtoBuf.Constructor -> hashCode(stringIndexes, fqNameIndexes)
is ProtoBuf.Function -> hashCode(stringIndexes, fqNameIndexes)
is ProtoBuf.Property -> hashCode(stringIndexes, fqNameIndexes)
@@ -137,7 +135,6 @@ private abstract class DifferenceCalculator() {
private fun MessageLite.name(nameResolver: NameResolver): String {
return when (this) {
is ProtoBuf.Callable -> nameResolver.getString(name)
is ProtoBuf.Constructor -> "<init>"
is ProtoBuf.Function -> nameResolver.getString(name)
is ProtoBuf.Property -> nameResolver.getString(name)
@@ -147,7 +144,6 @@ private abstract class DifferenceCalculator() {
private fun ProtoCompareGenerated.checkEquals(old: MessageLite, new: MessageLite): Boolean {
return when {
old is ProtoBuf.Callable && new is ProtoBuf.Callable -> checkEquals(old, new)
old is ProtoBuf.Constructor && new is ProtoBuf.Constructor -> checkEquals(old, new)
old is ProtoBuf.Function && new is ProtoBuf.Function -> checkEquals(old, new)
old is ProtoBuf.Property && new is ProtoBuf.Property -> checkEquals(old, new)
@@ -158,8 +154,6 @@ private abstract class DifferenceCalculator() {
private class DifferenceCalculatorForClass(oldData: ProtoMapValue, newData: ProtoMapValue) : DifferenceCalculator() {
companion object {
private val CONSTRUCTOR = "<init>"
private val CLASS_SIGNATURE_ENUMS = EnumSet.of(
ProtoBufClassKind.FLAGS,
ProtoBufClassKind.FQ_NAME,
@@ -214,18 +208,8 @@ private class DifferenceCalculatorForClass(oldData: ProtoMapValue, newData: Prot
names.addAll(calcDifferenceForNonPrivateMembers(ProtoBuf.Class::getFunctionList))
ProtoBufClassKind.PROPERTY_LIST ->
names.addAll(calcDifferenceForNonPrivateMembers(ProtoBuf.Class::getPropertyList))
ProtoBufClassKind.MEMBER_LIST ->
names.addAll(calcDifferenceForNonPrivateMembers(ProtoBuf.Class::getMemberList))
ProtoBufClassKind.ENUM_ENTRY_LIST ->
names.addAll(calcDifferenceForNames(oldProto.enumEntryList, newProto.enumEntryList))
ProtoBufClassKind.PRIMARY_CONSTRUCTOR ->
if (areNonPrivatePrimaryConstructorsDifferent()) {
names.add(CONSTRUCTOR)
}
ProtoBufClassKind.SECONDARY_CONSTRUCTOR_LIST ->
if (areNonPrivateSecondaryConstructorsDifferent()) {
names.add(CONSTRUCTOR)
}
ProtoBufClassKind.FLAGS,
ProtoBufClassKind.FQ_NAME,
ProtoBufClassKind.TYPE_PARAMETER_LIST,
@@ -238,30 +222,6 @@ private class DifferenceCalculatorForClass(oldData: ProtoMapValue, newData: Prot
}
return names
}
private fun areNonPrivatePrimaryConstructorsDifferent(): Boolean {
val oldPrimaryConstructor = oldProto.getNonPrivatePrimaryConstructor
val newPrimaryConstructor = newProto.getNonPrivatePrimaryConstructor
if (oldPrimaryConstructor == null && newPrimaryConstructor == null) return false
if (oldPrimaryConstructor == null || newPrimaryConstructor == null) return true
return !compareObject.checkEquals(oldPrimaryConstructor, newPrimaryConstructor)
}
private fun areNonPrivateSecondaryConstructorsDifferent(): Boolean {
val oldSecondaryConstructors = oldProto.secondaryConstructorList.filter { !it.isPrivate }
val newSecondaryConstructors = newProto.secondaryConstructorList.filter { !it.isPrivate }
return (oldSecondaryConstructors.size() != newSecondaryConstructors.size() ||
oldSecondaryConstructors.indices.any { !compareObject.checkEquals(oldSecondaryConstructors[it], newSecondaryConstructors[it]) })
}
private val ProtoBuf.Class.getNonPrivatePrimaryConstructor: ProtoBuf.Class.PrimaryConstructor?
get() {
if (!hasPrimaryConstructor()) return null
return if (primaryConstructor?.data?.isPrivate ?: false) null else primaryConstructor
}
}
private class DifferenceCalculatorForPackageFacade(oldData: ProtoMapValue, newData: ProtoMapValue) : DifferenceCalculator() {
@@ -293,14 +253,10 @@ private class DifferenceCalculatorForPackageFacade(oldData: ProtoMapValue, newDa
for (kind in diff) {
when (kind!!) {
ProtoBufPackageKind.CONSTRUCTOR_LIST ->
names.addAll(calcDifferenceForNonPrivateMembers(ProtoBuf.Package::getConstructorList))
ProtoBufPackageKind.FUNCTION_LIST ->
names.addAll(calcDifferenceForNonPrivateMembers(ProtoBuf.Package::getFunctionList))
ProtoBufPackageKind.PROPERTY_LIST ->
names.addAll(calcDifferenceForNonPrivateMembers(ProtoBuf.Package::getPropertyList))
ProtoBufPackageKind.MEMBER_LIST ->
names.addAll(calcDifferenceForNonPrivateMembers(ProtoBuf.Package::getMemberList))
else ->
throw IllegalArgumentException("Unsupported kind: $kind")
}