function(InlineFragmentNode $node) use ($context) { $fragType = $context->getType(); $parentType = $context->getParentType(); if ($fragType && $parentType && !TypeInfo::doTypesOverlap($context->getSchema(), $fragType, $parentType)) { $context->reportError(new Error( self::typeIncompatibleAnonSpreadMessage($parentType, $fragType), [$node] )); } }, NodeType::FRAGMENT_SPREAD => function(FragmentSpreadNode $node) use ($context) { $fragName = $node->name->value; $fragType = $this->getFragmentType($context, $fragName); $parentType = $context->getParentType(); if ($fragType && $parentType && !TypeInfo::doTypesOverlap($context->getSchema(), $fragType, $parentType)) { $context->reportError(new Error( self::typeIncompatibleSpreadMessage($fragName, $parentType, $fragType), [$node] )); } } ]; } private function getFragmentType(ValidationContext $context, $name) { $frag = $context->getFragment($name); return $frag ? TypeInfo::typeFromAST($context->getSchema(), $frag->typeCondition) : null; } }