public List compareResult()

in fastmodel-compare/src/main/java/com/aliyun/fastmodel/compare/impl/CompositeCompareNode.java [73:135]


    public List<BaseStatement> compareResult(CompositeStatement before,
        CompositeStatement after,
        CompareStrategy strategy) {

        List<BaseStatement> result = getBaseStatementsIfOneNull(before, after, strategy);
        if (result != null) {return result;}
        result = new ArrayList<>();
        //将传入的statement都改为可以排序的列表
        List<BaseStatement> beforeList = Lists.newArrayList(before.getStatements());
        List<BaseStatement> afterList = Lists.newArrayList(after.getStatements());
        List<QualifiedName> beforeQualifiedName = getQualifiedNames(beforeList);
        List<QualifiedName> afterQualifiedName = getQualifiedNames(afterList);
        int beforeSize = beforeList.size();
        int afterSize = afterList.size();
        int size = Math.min(beforeSize, afterSize);

        //如果before集合大小,大于after的集合大小,那么将before集合按照after的集合的名字进行排序
        if (beforeSize >= afterSize) {
            //排序,将相同的名字的操作进行处理
            sort(beforeList, afterQualifiedName);
            beforeQualifiedName = getQualifiedNames(beforeList);
            sort(afterList, beforeQualifiedName);
        } else {
            //排序,将相同的名字的操作进行处理
            //如果before集合大小,小于after的集合大小,那么将after集合按照before的集合的名字进行排序
            sort(afterList, beforeQualifiedName);
            afterQualifiedName = getQualifiedNames(afterList);
            sort(beforeList, afterQualifiedName);
        }
        for (int i = 0; i < size; i++) {
            BaseStatement baseStatement = beforeList.get(i);
            BaseStatement afterStatement = afterList.get(i);
            BaseCompareNode baseCompareNode = singleStatementCompare.get(baseStatement.getClass().getName());
            //if compare node is null,  skip
            if (baseCompareNode == null) {
                continue;
            }
            result.addAll(baseCompareNode.compareResult(baseStatement, afterStatement, strategy));
        }
        if (size < beforeSize) {
            for (int start = size; start < beforeSize; start++) {
                BaseStatement baseStatement = beforeList.get(start);
                BaseCompareNode baseCompareNode = singleStatementCompare.get(baseStatement.getClass().getName());
                //if compare node is null,  skip
                if (baseCompareNode == null) {
                    continue;
                }
                List compareResult = baseCompareNode.compareResult(baseStatement, null, strategy);
                result.addAll(compareResult);
            }
        } else if (size < afterSize) {
            for (int start = size; start < afterSize; start++) {
                BaseStatement baseStatement = afterList.get(start);
                BaseCompareNode baseCompareNode = singleStatementCompare.get(baseStatement.getClass().getName());
                //if compare node is null,  skip
                if (baseCompareNode == null) {
                    continue;
                }
                result.addAll(baseCompareNode.compareResult(null, baseStatement, strategy));
            }
        }
        return result;
    }