@@ -243,10 +243,9 @@ void ValidateArgumentValueVisitor::visitObjectValue(const peg::ast_node& objectV
243243 _argumentValue.position = { position.line , position.column };
244244}
245245
246- ValidateField::ValidateField (std::string_view returnType,
247- std::optional<std::string_view> objectType, std::string_view fieldName,
248- ValidateFieldArguments&& arguments)
249- : returnType(returnType)
246+ ValidateField::ValidateField (std::string&& returnType, std::optional<std::string_view> objectType,
247+ std::string_view fieldName, ValidateFieldArguments&& arguments)
248+ : returnType(std::move(returnType))
250249 , objectType(objectType)
251250 , fieldName(fieldName)
252251 , arguments(std::move(arguments))
@@ -261,7 +260,7 @@ bool ValidateField::operator==(const ValidateField& other) const
261260}
262261
263262ValidateVariableTypeVisitor::ValidateVariableTypeVisitor (
264- const schema::Schema& schema, const ValidateTypeKinds& typeKinds)
263+ const std::shared_ptr< schema::Schema> & schema, const ValidateTypeKinds& typeKinds)
265264 : _schema(schema)
266265 , _typeKinds(typeKinds)
267266{
@@ -299,7 +298,7 @@ void ValidateVariableTypeVisitor::visitNamedType(const peg::ast_node& namedType)
299298 case introspection::TypeKind::ENUM:
300299 case introspection::TypeKind::INPUT_OBJECT:
301300 _isInputType = true ;
302- _variableType = _schema. LookupType (name);
301+ _variableType = _schema-> LookupType (name);
303302 break ;
304303
305304 default :
@@ -313,8 +312,7 @@ void ValidateVariableTypeVisitor::visitListType(const peg::ast_node& listType)
313312
314313 visitor.visit (*listType.children .front ());
315314 _isInputType = visitor.isInputType ();
316- _variableType =
317- std::make_shared<schema::WrapperType>(introspection::TypeKind::LIST, visitor.getType ());
315+ _variableType = _schema->WrapType (introspection::TypeKind::LIST, visitor.getType ());
318316}
319317
320318void ValidateVariableTypeVisitor::visitNonNullType (const peg::ast_node& nonNullType)
@@ -323,8 +321,7 @@ void ValidateVariableTypeVisitor::visitNonNullType(const peg::ast_node& nonNullT
323321
324322 visitor.visit (*nonNullType.children .front ());
325323 _isInputType = visitor.isInputType ();
326- _variableType =
327- std::make_shared<schema::WrapperType>(introspection::TypeKind::NON_NULL, visitor.getType ());
324+ _variableType = _schema->WrapType (introspection::TypeKind::NON_NULL, visitor.getType ());
328325}
329326
330327bool ValidateVariableTypeVisitor::isInputType () const
@@ -653,7 +650,7 @@ void ValidateExecutableVisitor::visitOperationDefinition(const peg::ast_node& op
653650 else if (child->is_type <peg::named_type>() || child->is_type <peg::list_type>()
654651 || child->is_type <peg::nonnull_type>())
655652 {
656- ValidateVariableTypeVisitor visitor (* _schema, _typeKinds);
653+ ValidateVariableTypeVisitor visitor (_schema, _typeKinds);
657654
658655 visitor.visit (*child);
659656
@@ -1410,33 +1407,30 @@ ValidateExecutableVisitor::TypeFields::const_iterator ValidateExecutableVisitor:
14101407 validateFields[fieldName] = std::move (subField);
14111408 }
14121409
1413- if (_scopedType == _operationTypes[strQuery])
1410+ if (_schema-> supportsIntrospection () && _scopedType == _operationTypes[strQuery])
14141411 {
14151412 ValidateTypeField schemaField;
14161413
1417- schemaField.returnType =
1418- std::make_shared<schema::WrapperType>(introspection::TypeKind::NON_NULL,
1419- _schema->LookupType (R"gql( __Schema)gql" sv));
1414+ schemaField.returnType = _schema->WrapType (introspection::TypeKind::NON_NULL,
1415+ _schema->LookupType (R"gql( __Schema)gql" sv));
14201416 validateFields[R"gql( __schema)gql" sv] = std::move (schemaField);
14211417
14221418 ValidateTypeField typeField;
14231419 ValidateArgument nameArgument;
14241420
14251421 typeField.returnType = _schema->LookupType (R"gql( __Type)gql" sv);
14261422
1427- nameArgument.type =
1428- std::make_shared<schema::WrapperType>(introspection::TypeKind::NON_NULL,
1429- _schema->LookupType (R"gql( String)gql" sv));
1423+ nameArgument.type = _schema->WrapType (introspection::TypeKind::NON_NULL,
1424+ _schema->LookupType (R"gql( String)gql" sv));
14301425 typeField.arguments [R"gql( name)gql" sv] = std::move (nameArgument);
14311426
14321427 validateFields[R"gql( __type)gql" sv] = std::move (typeField);
14331428 }
14341429
14351430 ValidateTypeField typenameField;
14361431
1437- typenameField.returnType =
1438- std::make_shared<schema::WrapperType>(introspection::TypeKind::NON_NULL,
1439- _schema->LookupType (R"gql( String)gql" sv));
1432+ typenameField.returnType = _schema->WrapType (introspection::TypeKind::NON_NULL,
1433+ _schema->LookupType (R"gql( String)gql" sv));
14401434 validateFields[R"gql( __typename)gql" sv] = std::move (typenameField);
14411435
14421436 itrType = _typeFields.insert ({ _scopedType, std::move (validateFields) }).first ;
@@ -1701,7 +1695,10 @@ void ValidateExecutableVisitor::visitField(const peg::ast_node& field)
17011695
17021696 std::optional<std::string_view> objectType =
17031697 (*kind == introspection::TypeKind::OBJECT ? std::make_optional (_scopedType) : std::nullopt );
1704- ValidateField validateField (wrappedType, objectType, name, std::move (validateArguments));
1698+ ValidateField validateField (std::move (wrappedType),
1699+ objectType,
1700+ name,
1701+ std::move (validateArguments));
17051702 auto itrValidateField = _selectionFields.find (alias);
17061703
17071704 if (itrValidateField != _selectionFields.end ())
0 commit comments