Class ExecutionStepInfo


  • @PublicApi
    public class ExecutionStepInfo
    extends java.lang.Object
    As the graphql query executes, it forms a hierarchy from parent fields (and their type) to their child fields (and their type) until a scalar type is encountered; this class captures that execution type information.

    The static graphql type system (rightly) does not contain a hierarchy of child to parent types nor the nonnull ness of type instances, so this helper class adds this information during query execution.

    • Field Detail

      • type

        private final GraphQLOutputType type
        If this StepInfo represent a field the type is equal to fieldDefinition.getType()

        if this StepInfo is a list element this type is the actual current list element. For example: Query.pets: [[Pet]] with Pet either a Dog or Cat and the actual result is [[Dog1],[[Cat1]] Then the type is (for a query "{pets{name}}"): [[Pet]] for /pets (representing the field Query.pets, not a list element) [Pet] fot /pets[0] [Pet] for /pets[1] Dog for /pets[0][0] Cat for /pets[1][0] String for /pets[0][0]/name (representing the field Dog.name, not a list element) String for /pets[1][0]/name (representing the field Cat.name, not a list element)

      • path

        private final ResultPath path
        A list element is characterized by having a path ending with an index segment. (ResultPath.isListSegment())
      • field

        private final MergedField field
        field, fieldDefinition, fieldContainer and arguments differ per field StepInfo.

        But for list StepInfos these properties are the same as the field returning the list.

      • arguments

        private final java.util.function.Supplier<ImmutableMapWithNullValues<java.lang.String,​java.lang.Object>> arguments
    • Method Detail

      • getObjectType

        public GraphQLObjectType getObjectType()
        The GraphQLObjectType where fieldDefinition is defined. Note: For the Introspection field __typename the returned object type doesn't actually contain the fieldDefinition.
        Returns:
        the GraphQLObjectType defining the getFieldDefinition()
      • getType

        public GraphQLOutputType getType()
        This returns the type for the current step.
        Returns:
        the graphql type in question
      • getUnwrappedNonNullType

        public GraphQLOutputType getUnwrappedNonNullType()
        This returns the type which is unwrapped if it was GraphQLNonNull wrapped
        Returns:
        the graphql type in question
      • getFieldDefinition

        public GraphQLFieldDefinition getFieldDefinition()
        This returns the field definition that is in play when this type info was created or null if the type is a root query type
        Returns:
        the field definition or null if there is not one
      • isNonNullType

        public boolean isNonNullType()
        Returns:
        true if the type must be nonnull
      • isListType

        public boolean isListType()
        Returns:
        true if the type is a list
      • getArguments

        public java.util.Map<java.lang.String,​java.lang.Object> getArguments()
        Returns:
        the resolved arguments that have been passed to this field
      • getArgument

        public <T> T getArgument​(java.lang.String name)
        Returns the named argument
        Type Parameters:
        T - you decide what type it is
        Parameters:
        name - the name of the argument
        Returns:
        the named argument or null if it's not present
      • getParent

        public ExecutionStepInfo getParent()
        Returns:
        the parent type information
      • hasParent

        public boolean hasParent()
        Returns:
        true if the type has a parent (most do)
      • changeTypeWithPreservedNonNull

        public ExecutionStepInfo changeTypeWithPreservedNonNull​(GraphQLOutputType newType)
        This allows you to morph a type into a more specialized form yet return the same parent and non-null ness, for example taking a GraphQLInterfaceType and turning it into a specific GraphQLObjectType after type resolution has occurred
        Parameters:
        newType - the new type to be
        Returns:
        a new type info with the same
      • simplePrint

        public java.lang.String simplePrint()
        Returns:
        the type in graphql SDL format, eg [typeName!]!
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • getResultKey

        public java.lang.String getResultKey()