private static function getGraphqlUnion(string $className, GQL\Union $unionAnnotation, array $classAnnotations, array $methods): array
    {
        $unionConfiguration = ['types' => $unionAnnotation->types];
        $unionConfiguration = self::getDescriptionConfiguration($classAnnotations) + $unionConfiguration;

        if ($unionAnnotation->resolveType) {
            $unionConfiguration['resolveType'] = self::formatExpression($unionAnnotation->resolveType);
        } else {
            if (isset($methods['resolveType'])) {
                $method = $methods['resolveType']['method'];
                if ($method->isStatic() && $method->isPublic()) {
                    $unionConfiguration['resolveType'] = self::formatExpression(\sprintf("@=call('%s::%s', [service('overblog_graphql.type_resolver'), value], true)", self::formatNamespaceForExpression($className), 'resolveType'));
                } else {
                    throw new InvalidArgumentException(\sprintf('The "resolveType()" method on class must be static and public. Or you must define a "resolveType" attribute on the @Union annotation.'));
                }
            } else {
                throw new InvalidArgumentException(\sprintf('The annotation @Union has no "resolveType" attribute and the related class has no "resolveType()" public static method. You need to define of them.'));
            }
        }

        return ['type' => 'union', 'config' => $unionConfiguration];
    }
private static function getGraphqlUnion(string $className, GQL\Union $unionAnnotation, array $classAnnotations, array $methods): array
    {
        $unionConfiguration = ['types' => $unionAnnotation->types];
        $unionConfiguration = self::getDescriptionConfiguration($classAnnotations) + $unionConfiguration;

        if ($unionAnnotation->resolveType) {
            $unionConfiguration['resolveType'] = self::formatExpression($unionAnnotation->resolveType);
        } else {
            if (isset($methods['resolveType'])) {
                $method = $methods['resolveType']['method'];
                if ($method->isStatic() && $method->isPublic()) {
                    $unionConfiguration['resolveType'] = self::formatExpression(\sprintf("@=call('%s::%s', [service('overblog_graphql.type_resolver'), value], true)", self::formatNamespaceForExpression($className), 'resolveType'));
                } else {
                    throw new InvalidArgumentException(\sprintf('The "resolveType()" method on class must be static and public. Or you must define a "resolveType" attribute on the @Union annotation.'));
                }
            } else {
                throw new InvalidArgumentException(\sprintf('The annotation @Union has no "resolveType" attribute and the related class has no "resolveType()" public static method. You need to define of them.'));
            }
        }

        return ['type' => 'union', 'config' => $unionConfiguration];
    }
private static function getGraphqlUnion ( string $ className , GQL \ Union $ unionAnnotation , array $ classAnnotations , array $ methods ) : array { $ unionConfiguration = [ 'types' => $ unionAnnotation -> types ] ; $ unionConfiguration = self :: getDescriptionConfiguration ( $ classAnnotations ) + $ unionConfiguration ; if ( $ unionAnnotation -> resolveType ) { $ unionConfiguration [ 'resolveType' ] = self :: formatExpression ( $ unionAnnotation -> resolveType ) ; } else { if ( isset ( $ methods [ 'resolveType' ] ) ) { $ method = $ methods [ 'resolveType' ] [ 'method' ] ; if ( $ method -> isStatic ( ) && $ method -> isPublic ( ) ) { $ unionConfiguration [ 'resolveType' ] = self :: formatExpression ( \ sprintf ( "@=call('%s::%s', [service('overblog_graphql.type_resolver'), value], true)" , self :: formatNamespaceForExpression ( $ className ) , 'resolveType' ) ) ; } else { throw new InvalidArgumentException ( \ sprintf ( 'The "resolveType()" method on class must be static and public. Or you must define a "resolveType" attribute on the @Union annotation.' ) ) ; } } else { throw new InvalidArgumentException ( \ sprintf ( 'The annotation @Union has no "resolveType" attribute and the related class has no "resolveType()" public static method. You need to define of them.' ) ) ; } } return [ 'type' => 'union' , 'config' => $ unionConfiguration ] ; }
Get a Graphql Union configuration from given union annotation.

@param string    $className
@param GQL\Union $unionAnnotation
@param array     $classAnnotations
@param array     $methods

@return array
Get a Graphql Union configuration from given union annotation .