code: private function getReferencedFieldsAndFragmentNames(
          ValidationContext $context,
          FragmentDefinitionNode $fragment
      ) {
          // Short-circuit building a type from the AST if possible.
          if (isset($this->cachedFieldsAndFragmentNames[$fragment->selectionSet])) {
              return $this->cachedFieldsAndFragmentNames[$fragment->selectionSet];
          }
  
          $fragmentType = TypeInfo::typeFromAST($context->getSchema(), $fragment->typeCondition);
  
          return $this->getFieldsAndFragmentNames(
              $context,
              $fragmentType,
              $fragment->selectionSet
          );
      }
docs: Given a reference to a fragment, return the represented collection of fields
  as well as a list of nested fragment names referenced via fragment spreads.
  
  @return mixed[]|SplObjectStorage