parseFragmentDefinition method

FragmentDefinitionContext? parseFragmentDefinition()

Implementation

FragmentDefinitionContext? parseFragmentDefinition() {
  if (nextName('fragment') && current != null) {
    var FRAGMENT = current!;
    if (next(TokenType.NAME)) {
      var NAME = current;
      if (nextName('on')) {
        var ON = current;
        var typeCondition = parseTypeCondition();
        if (typeCondition != null) {
          var dirs = parseDirectives();
          var selectionSet = parseSelectionSet();
          if (selectionSet != null) {
            return FragmentDefinitionContext(
                FRAGMENT, NAME, ON, typeCondition, selectionSet)
              ..directives.addAll(dirs);
          } else {
            errors.add(SyntaxError(
                'Expected selection set in fragment definition.',
                typeCondition.span));
            return null;
          }
        } else {
          errors.add(SyntaxError(
              'Expected type condition after "on" in fragment definition.',
              ON?.span));
          return null;
        }
      } else {
        errors.add(SyntaxError(
            'Expected "on" after name "${NAME?.text}" in fragment definition.',
            NAME?.span));
        return null;
      }
    } else {
      errors.add(SyntaxError(
          'Expected name after "fragment" in fragment definition.',
          FRAGMENT.span));
      return null;
    }
  } else {
    return null;
  }
}