diff --git a/java/testFramework/src/com/intellij/testFramework/LogicalStructureTestUtils.kt b/java/testFramework/src/com/intellij/testFramework/LogicalStructureTestUtils.kt index e1f90f4a87a9..d382e095be7a 100644 --- a/java/testFramework/src/com/intellij/testFramework/LogicalStructureTestUtils.kt +++ b/java/testFramework/src/com/intellij/testFramework/LogicalStructureTestUtils.kt @@ -75,6 +75,7 @@ class LogicalStructureNode( private val subNodes = mutableListOf() private var childrenDontMatter = false + private var childrenOrderDontMatter = false private var navigationElementSupplier: (() -> PsiElement?)? = null fun subNode(subNode: LogicalStructureNode) { @@ -98,6 +99,10 @@ class LogicalStructureNode( childrenDontMatter = true } + fun arbitraryChildrenOrder() { + childrenOrderDontMatter = true + } + fun navigationElement(element: PsiElement) { navigationElementSupplier = { element } } @@ -136,8 +141,15 @@ class LogicalStructureNode( } if (!childrenDontMatter) { if (subNodes.size != other.subNodes.size) return false - for (i in subNodes.indices) { - if (!subNodes[i].isEqualTo(other.subNodes[i], true, availableDepth - 1)) return false + if (childrenOrderDontMatter) { + return subNodes.all { + other.subNodes.any { otherSubNode -> it.isEqualTo(otherSubNode, true, availableDepth - 1) } + } + } + else { + for (i in subNodes.indices) { + if (!subNodes[i].isEqualTo(other.subNodes[i], true, availableDepth - 1)) return false + } } } return true