private static void extractCommonObjectSchema()

in hollow/src/main/java/com/netflix/hollow/core/write/objectmapper/flatrecords/traversal/FlatRecordTraversalObjectNodeEquality.java [80:139]


    private static void extractCommonObjectSchema(FlatRecordTraversalNode left, FlatRecordTraversalNode right) {
        if (left == null || right == null) {
            return ;
        }
        if (!left.getSchema().getName().equals(right.getSchema().getName())) {
            return ;
        }
        if(left instanceof FlatRecordTraversalObjectNode && right instanceof FlatRecordTraversalObjectNode) {
                FlatRecordTraversalObjectNode leftObjectNode = (FlatRecordTraversalObjectNode) left;
                FlatRecordTraversalObjectNode rightObjectNode = (FlatRecordTraversalObjectNode) right;
                HollowObjectSchema commonSchema = leftObjectNode.getSchema().findCommonSchema(rightObjectNode.getSchema());
                assert leftObjectNode.getSchema().getName().equals(rightObjectNode.getSchema().getName());
                commonSchemaCache.put(left.getSchema().getName(), commonSchema);

                for(int i=0;i<commonSchema.numFields();i++) {
                    String fieldName = commonSchema.getFieldName(i);
                    // same fieldType and equal to reference
                    if(leftObjectNode.getSchema().getFieldType(fieldName).equals(HollowObjectSchema.FieldType.REFERENCE)) {
                        FlatRecordTraversalNode leftChildNode = leftObjectNode.getFieldNode(fieldName);
                        FlatRecordTraversalNode rightChildNode = rightObjectNode.getFieldNode(fieldName);
                        extractCommonObjectSchema(leftChildNode, rightChildNode);
                    }

            }
        }
        else if (left instanceof FlatRecordTraversalSetNode && right instanceof FlatRecordTraversalSetNode) {
                FlatRecordTraversalSetNode leftSetNode = (FlatRecordTraversalSetNode) left;
                FlatRecordTraversalSetNode rightSetNode = (FlatRecordTraversalSetNode) right;
                Iterator<FlatRecordTraversalNode> leftIterator = leftSetNode.iterator();
                Iterator<FlatRecordTraversalNode> rightIterator = rightSetNode.iterator();
                if (leftIterator.hasNext() && rightIterator.hasNext()) {
                    FlatRecordTraversalNode leftChildNode = leftIterator.next();
                    FlatRecordTraversalNode rightChildNode = rightIterator.next();
                    extractCommonObjectSchema(leftChildNode, rightChildNode);
                }
        }
        else if (left instanceof FlatRecordTraversalListNode && right instanceof FlatRecordTraversalListNode) {
                FlatRecordTraversalListNode leftListNode = (FlatRecordTraversalListNode) left;
                FlatRecordTraversalListNode rightListNode = (FlatRecordTraversalListNode) right;
                Iterator<FlatRecordTraversalNode> leftIterator = leftListNode.iterator();
                Iterator<FlatRecordTraversalNode> rightIterator = rightListNode.iterator();
                if (leftIterator.hasNext() && rightIterator.hasNext()) {
                    FlatRecordTraversalNode leftChildNode = leftIterator.next();
                    FlatRecordTraversalNode rightChildNode = rightIterator.next();
                    extractCommonObjectSchema(leftChildNode, rightChildNode);
                }
        }
        else if (left instanceof FlatRecordTraversalMapNode && right instanceof FlatRecordTraversalMapNode) {
                FlatRecordTraversalMapNode leftMapNode = (FlatRecordTraversalMapNode) left;
                FlatRecordTraversalMapNode rightMapNode = (FlatRecordTraversalMapNode) right;
                Iterator<Map.Entry<FlatRecordTraversalNode, FlatRecordTraversalNode>> leftIterator = leftMapNode.entrySet().iterator();
                Iterator<Map.Entry<FlatRecordTraversalNode, FlatRecordTraversalNode>> rightIterator = rightMapNode.entrySet().iterator();
                if (leftIterator.hasNext() && rightIterator.hasNext()) {
                    Map.Entry<FlatRecordTraversalNode, FlatRecordTraversalNode> leftEntry = leftIterator.next();
                    Map.Entry<FlatRecordTraversalNode, FlatRecordTraversalNode> rightEntry = rightIterator.next();
                    extractCommonObjectSchema(leftEntry.getKey(), rightEntry.getKey());
                    extractCommonObjectSchema(leftEntry.getValue(), rightEntry.getValue());
                }
        }
    }