Skip to content

Commit 32547cf

Browse files
committed
Adjust the equals checks to not recurse forever (RecursionTest)
1 parent 7ed3d5b commit 32547cf

File tree

1 file changed

+33
-31
lines changed
  • serialization/src/commonMain/kotlin/nl/adaptivity/xmlutil/serialization/structure

1 file changed

+33
-31
lines changed

serialization/src/commonMain/kotlin/nl/adaptivity/xmlutil/serialization/structure/XmlDescriptor.kt

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -838,7 +838,8 @@ public class XmlInlineDescriptor internal constructor(
838838
if (isIdAttr != other.isIdAttr) return false
839839
if (defaultPreserveSpace != other.defaultPreserveSpace) return false
840840
if (isUnsigned != other.isUnsigned) return false
841-
if (child != other.child) return false
841+
if (child.tagName != other.tagName) return false
842+
if (child.typeDescriptor != other.child.typeDescriptor) return false
842843

843844
return true
844845
}
@@ -1247,9 +1248,16 @@ internal constructor(
12471248

12481249
if (attrMapChildIdx != other.attrMapChildIdx) return false
12491250
if (valueChildIdx != other.valueChildIdx) return false
1250-
if (children != other.children) return false
1251+
1252+
if (children.size != other.children.size) return false
1253+
for (childIdx in children.indices) {
1254+
val c = children[childIdx]
1255+
val oc = other.children[childIdx]
1256+
if (c.tagName != oc.tagName) return false
1257+
if (c.outputKind != oc.outputKind) return false
1258+
if (c.typeDescriptor != oc.typeDescriptor) return false
1259+
}
12511260
if (!childReorderMap.contentEquals(other.childReorderMap)) return false
1252-
if (childConstraints != other.childConstraints) return false
12531261

12541262
return true
12551263
}
@@ -1502,27 +1510,21 @@ public class XmlPolymorphicDescriptor internal constructor(
15021510

15031511
other as XmlPolymorphicDescriptor
15041512

1505-
if (codecConfig != other.codecConfig) return false
15061513
if (defaultPreserveSpace != other.defaultPreserveSpace) return false
15071514
if (outputKind != other.outputKind) return false
15081515
if (polymorphicMode != other.polymorphicMode) return false
15091516
if (polyInfo != other.polyInfo) return false
1510-
if (typeQNameToSerialName != other.typeQNameToSerialName) return false
1511-
if (children != other.children) return false
15121517

15131518
return true
15141519
}
15151520

15161521
@Suppress("DuplicatedCode")
15171522
override fun hashCode(): Int {
15181523
var result = super.hashCode()
1519-
result = 31 * result + codecConfig.hashCode()
15201524
result = 31 * result + defaultPreserveSpace.hashCode()
15211525
result = 31 * result + outputKind.hashCode()
15221526
result = 31 * result + polymorphicMode.hashCode()
15231527
result = 31 * result + polyInfo.hashCode()
1524-
result = 31 * result + typeQNameToSerialName.hashCode()
1525-
result = 31 * result + children.hashCode()
15261528
return result
15271529
}
15281530

@@ -1660,8 +1662,8 @@ public class XmlMapDescriptor internal constructor(
16601662

16611663
if (isValueCollapsed != other.isValueCollapsed) return false
16621664
if (entryName != other.entryName) return false
1663-
if (keyDescriptor != other.keyDescriptor) return false
1664-
if (valueDescriptor != other.valueDescriptor) return false
1665+
// if (keyDescriptor != other.keyDescriptor) return false
1666+
// if (valueDescriptor != other.valueDescriptor) return false
16651667

16661668
return true
16671669
}
@@ -1801,7 +1803,7 @@ public class XmlListDescriptor internal constructor(
18011803

18021804
if (outputKind != other.outputKind) return false
18031805
if (!delimiters.contentEquals(other.delimiters)) return false
1804-
if (childDescriptor != other.childDescriptor) return false
1806+
// if (childDescriptor != other.childDescriptor) return false
18051807

18061808
return true
18071809
}
@@ -2054,7 +2056,7 @@ private class DetachedParent(
20542056

20552057
override fun toString(): String = when {
20562058
isDocumentRoot -> "<Root>"
2057-
else -> "DetachedParent($elementUseNameInfo)"
2059+
else -> "<Detached>"
20582060
}
20592061

20602062
override val index: Int get() = -1
@@ -2292,27 +2294,27 @@ public class ParentInfo(
22922294
other as ParentInfo
22932295

22942296
if (index != other.index) return false
2295-
if (useAnnIsElement != other.useAnnIsElement) return false
2296-
if (useAnnIsValue != other.useAnnIsValue) return false
2297-
if (useAnnIgnoreWhitespace != other.useAnnIgnoreWhitespace) return false
2298-
if (useAnnCData != other.useAnnCData) return false
2299-
if (useAnnIsId != other.useAnnIsId) return false
2300-
if (useAnnIsOtherAttributes != other.useAnnIsOtherAttributes) return false
2297+
// if (useAnnIsElement != other.useAnnIsElement) return false
2298+
// if (useAnnIsValue != other.useAnnIsValue) return false
2299+
// if (useAnnIgnoreWhitespace != other.useAnnIgnoreWhitespace) return false
2300+
// if (useAnnCData != other.useAnnCData) return false
2301+
// if (useAnnIsId != other.useAnnIsId) return false
2302+
// if (useAnnIsOtherAttributes != other.useAnnIsOtherAttributes) return false
23012303
if (descriptor != other.descriptor) return false
23022304
if (overriddenSerializer != other.overriddenSerializer) return false
2303-
if (useAnnXmlSerialName != other.useAnnXmlSerialName) return false
2304-
if (useAnnPolyChildren != other.useAnnPolyChildren) return false
2305-
if (useAnnChildrenName != other.useAnnChildrenName) return false
2306-
if (useAnnKeyName != other.useAnnKeyName) return false
2307-
if (useAnnMapEntryName != other.useAnnMapEntryName) return false
2308-
if (useAnnDefault != other.useAnnDefault) return false
2309-
if (!useAnnBefore.contentEquals(other.useAnnBefore)) return false
2310-
if (!useAnnAfter.contentEquals(other.useAnnAfter)) return false
2311-
if (useAnnNsDecls != other.useAnnNsDecls) return false
2305+
// if (useAnnXmlSerialName != other.useAnnXmlSerialName) return false
2306+
// if (useAnnPolyChildren != other.useAnnPolyChildren) return false
2307+
// if (useAnnChildrenName != other.useAnnChildrenName) return false
2308+
// if (useAnnKeyName != other.useAnnKeyName) return false
2309+
// if (useAnnMapEntryName != other.useAnnMapEntryName) return false
2310+
// if (useAnnDefault != other.useAnnDefault) return false
2311+
// if (!useAnnBefore.contentEquals(other.useAnnBefore)) return false
2312+
// if (!useAnnAfter.contentEquals(other.useAnnAfter)) return false
2313+
// if (useAnnNsDecls != other.useAnnNsDecls) return false
23122314
if (elementUseNameInfo != other.elementUseNameInfo) return false
2313-
if (elementSerialDescriptor != other.elementSerialDescriptor) return false
2314-
if (elementUseOutputKind != other.elementUseOutputKind) return false
2315-
if (elementTypeDescriptor != other.elementTypeDescriptor) return false
2315+
// if (elementSerialDescriptor != other.elementSerialDescriptor) return false
2316+
// if (elementUseOutputKind != other.elementUseOutputKind) return false
2317+
// if (elementTypeDescriptor != other.elementTypeDescriptor) return false
23162318

23172319
return true
23182320
}

0 commit comments

Comments
 (0)