Ejemplo n.º 1
0
        private ObjectType ResolveOperation(
            TypeInitializer initializer,
            OperationType operation)
        {
            if (!_operations.ContainsKey(operation))
            {
                NameString typeName = operation.ToString();
                return(initializer.Types.Values
                       .Select(t => t.Type)
                       .OfType <ObjectType>()
                       .FirstOrDefault(t => t.Name.Equals(typeName)));
            }
            else if (_operations.TryGetValue(operation,
                                             out ITypeReference reference))
            {
                if (reference is ISchemaTypeReference sr)
                {
                    return((ObjectType)sr.Type);
                }

                if (reference is IClrTypeReference cr &&
                    initializer.TryGetRegisteredType(cr,
                                                     out RegisteredType registeredType))
                {
                    return((ObjectType)registeredType.Type);
                }

                if (reference is ISyntaxTypeReference str)
                {
                    NamedTypeNode namedType = str.Type.NamedType();
                    return(initializer.Types.Values
                           .Select(t => t.Type)
                           .OfType <ObjectType>()
                           .FirstOrDefault(t => t.Name.Equals(
                                               namedType.Name.Value)));
                }
            }

            return(null);
        }