fun buildDiffReport()

in src/main/kotlin/org/jetbrains/objcdiff/reports/buildDiffReport.kt [8:39]


fun buildDiffReport(expectedReport: HeaderReport, actualReport: HeaderReport): DiffReport {

    val expected = (expectedReport.types).associateBy { it.key }.toMutableMap()
    val actual = (actualReport.types).associateBy { it.key }.toMutableMap()
    val result = mutableMapOf<String, ObjCType>()

    verifyExpectedButNotDefined(actual, expected, result)
    verifyDefinedButNotExpected(actual, result)
    verifyMembers(actualReport.allTypes, expectedReport.allTypes)
    verifyMembersOrder(actualReport.allTypes, expectedReport.allTypes)
    verifyAllOk(actualReport.allTypes, expectedReport.allTypes)

    val definedButNotExpected = mutableSetOf<String>()
    val expectedButNotDefined = mutableSetOf<String>()
    val unequalMembers = mutableSetOf<String>()
    val invalidOrderTypes = mutableSetOf<String>()

    (actual + expected).forEach { (key, symbol) ->
        if (symbol.expectedButNotDefined == true) expectedButNotDefined.add(key)
        if (symbol.definedButNotExpected == true) definedButNotExpected.add(key)
        if (symbol.membersEquality != setOf(MemberEquality.EQUAL)) unequalMembers.add(key)
        if (symbol.membersEquality.contains(MemberEquality.INVALID_ORDER)) invalidOrderTypes.add(key)
    }

    return DiffReport(
        expectedButNotDefined = expectedButNotDefined,
        definedButNotExpected = definedButNotExpected,
        unequalMembers = unequalMembers,
        invalidOrderTypes = invalidOrderTypes,
        merge = result.values.toList()
    )
}