Describe the bug
ExecutableNormalizedField.forEachFieldDefinition() and getOneFieldDefinition() call type.getField(fieldName) directly, bypassing the schema's configured GraphqlFieldVisibility.
This is inconsistent with other parts of graphql-java (validation, execution) that respect field visibility, and causes issues when:
A custom GraphqlFieldVisibility provides field definitions that differ from what's in the schema type (e.g., placeholder fields, virtual fields, or dynamically-computed fields)
Application code accesses DataFetchingEnvironment.getSelectionSet().getFields() in a DataFetcher
Normalization fails with "No field X found for type Y" because it bypasses the visibility
To Reproduce
- Configure a custom GraphqlFieldVisibility that provides virtual/placeholder fields
- Execute a query that includes a field only available through the visibility
- Access
DataFetchingEnvironment.getSelectionSet().getFields() in a DataFetcher
- Normalization fails because
ExecutableNormalizedField.forEachFieldDefinition() calls type.getField() directly
** Expected Behavior**
ExecutableNormalizedField should use the schema's field visibility when looking up field definitions, consistent with how validation and execution work.
PR is raised here
Describe the bug
ExecutableNormalizedField.forEachFieldDefinition()andgetOneFieldDefinition()calltype.getField(fieldName)directly, bypassing the schema's configuredGraphqlFieldVisibility.This is inconsistent with other parts of graphql-java (validation, execution) that respect field visibility, and causes issues when:
A custom GraphqlFieldVisibility provides field definitions that differ from what's in the schema type (e.g., placeholder fields, virtual fields, or dynamically-computed fields)
Application code accesses
DataFetchingEnvironment.getSelectionSet().getFields()in a DataFetcherNormalization fails with "No field X found for type Y" because it bypasses the visibility
To Reproduce
DataFetchingEnvironment.getSelectionSet().getFields()in a DataFetcherExecutableNormalizedField.forEachFieldDefinition()callstype.getField()directly** Expected Behavior**
ExecutableNormalizedField should use the schema's field visibility when looking up field definitions, consistent with how validation and execution work.
PR is raised here