public static function doTypesOverlap(Schema $schema, CompositeType $typeA, CompositeType $typeB)
    {
        // Equivalent types overlap
        if ($typeA === $typeB) {
            return true;
        }

        if ($typeA instanceof AbstractType) {
            if ($typeB instanceof AbstractType) {
                // If both types are abstract, then determine if there is any intersection
                // between possible concrete types of each.
                foreach ($schema->getPossibleTypes($typeA) as $type) {
                    if ($schema->isPossibleType($typeB, $type)) {
                        return true;
                    }
                }

                return false;
            }

            // Determine if the latter type is a possible concrete type of the former.
            return $schema->isPossibleType($typeA, $typeB);
        }

        if ($typeB instanceof AbstractType) {
            // Determine if the former type is a possible concrete type of the latter.
            return $schema->isPossibleType($typeB, $typeA);
        }

        // Otherwise the types do not overlap.
        return false;
    }
public static function doTypesOverlap(Schema $schema, CompositeType $typeA, CompositeType $typeB)
    {
        
        if ($typeA === $typeB) {
            return true;
        }

        if ($typeA instanceof AbstractType) {
            if ($typeB instanceof AbstractType) {
                
                
                foreach ($schema->getPossibleTypes($typeA) as $type) {
                    if ($schema->isPossibleType($typeB, $type)) {
                        return true;
                    }
                }

                return false;
            }

            
            return $schema->isPossibleType($typeA, $typeB);
        }

        if ($typeB instanceof AbstractType) {
            
            return $schema->isPossibleType($typeB, $typeA);
        }

        
        return false;
    }
public static function doTypesOverlap ( Schema $ schema , CompositeType $ typeA , CompositeType $ typeB ) { // Equivalent types overlap if ( $ typeA === $ typeB ) { return true ; } if ( $ typeA instanceof AbstractType ) { if ( $ typeB instanceof AbstractType ) { // If both types are abstract, then determine if there is any intersection // between possible concrete types of each. foreach ( $ schema -> getPossibleTypes ( $ typeA ) as $ type ) { if ( $ schema -> isPossibleType ( $ typeB , $ type ) ) { return true ; } } return false ; } // Determine if the latter type is a possible concrete type of the former. return $ schema -> isPossibleType ( $ typeA , $ typeB ) ; } if ( $ typeB instanceof AbstractType ) { // Determine if the former type is a possible concrete type of the latter. return $ schema -> isPossibleType ( $ typeB , $ typeA ) ; } // Otherwise the types do not overlap. return false ; }
Provided two composite types, determine if they "overlap". Two composite
types overlap when the Sets of possible concrete types for each intersect.

This is often used to determine if a fragment of a given type could possibly
be visited in a context of another type.

This function is commutative.

@return bool
Provided two composite types determine if they overlap . Two composite types overlap when the Sets of possible concrete types for each intersect .