Skip to content

Commit 79854ec

Browse files
committed
Minor update related to schema inspection
The change updates the registration of explicit mappings from any registered ClassNameTypeResolver's. 1. Check if there are any explicit mappings 2. Check all TypeResolver's Also, change factory method to make it more clear that all it needs from a ClassNameTypeResolver are the explicit mappings.
1 parent 0748a12 commit 79854ec

File tree

4 files changed

+28
-21
lines changed

4 files changed

+28
-21
lines changed

spring-graphql/src/main/java/org/springframework/graphql/execution/DefaultSchemaResourceGraphQlSourceBuilder.java

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,8 @@ protected GraphQLSchema initGraphQlSchema() {
166166
// visitors may transform the schema, for example to add Connection types.
167167

168168
if (this.schemaReportConsumer != null) {
169-
this.schemaReportRunner = (schema) -> {
170-
SchemaMappingInspector.Initializer initializer = SchemaMappingInspector.initializer();
171-
if (this.typeResolver instanceof ClassNameTypeResolver cntr) {
172-
initializer.classResolver(SchemaMappingInspector.ClassResolver.fromClassNameTypeResolver(cntr));
173-
}
174-
this.inspectorInitializerConsumer.accept(initializer);
175-
SchemaReport report = initializer.inspect(schema, runtimeWiring.getDataFetchers());
176-
this.schemaReportConsumer.accept(report);
177-
};
169+
this.schemaReportRunner = (schema) ->
170+
this.schemaReportConsumer.accept(createSchemaReport(schema, runtimeWiring));
178171
}
179172

180173
return (this.schemaFactory != null) ?
@@ -239,6 +232,24 @@ private TypeResolver initTypeResolver() {
239232
return (this.typeResolver != null) ? this.typeResolver : new ClassNameTypeResolver();
240233
}
241234

235+
private SchemaReport createSchemaReport(GraphQLSchema schema, RuntimeWiring runtimeWiring) {
236+
SchemaMappingInspector.Initializer initializer = SchemaMappingInspector.initializer();
237+
238+
// Add explicit mappings from ClassNameTypeResolver's
239+
runtimeWiring.getTypeResolvers().values().stream().distinct().forEach((resolver) -> {
240+
if (resolver instanceof ClassNameTypeResolver cntr) {
241+
Map<Class<?>, String> mappings = cntr.getMappings();
242+
if (!mappings.isEmpty()) {
243+
initializer.classResolver(SchemaMappingInspector.ClassResolver.create(mappings));
244+
}
245+
}
246+
});
247+
248+
this.inspectorInitializerConsumer.accept(initializer);
249+
250+
return initializer.inspect(schema, runtimeWiring.getDataFetchers());
251+
}
252+
242253
@Override
243254
protected void applyGraphQlConfigurers(GraphQL.Builder builder) {
244255
super.applyGraphQlConfigurers(builder);

spring-graphql/src/main/java/org/springframework/graphql/execution/SchemaMappingInspector.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -362,16 +362,12 @@ public interface ClassResolver {
362362

363363

364364
/**
365-
* Create a resolver by re-using the explicit, reverse mappings of
366-
* {@link ClassNameTypeResolver}.
367-
* @param resolver the type resolver using class names
365+
* Create a resolver from the given mappings.
366+
* @param mappings from Class to GraphQL type name
368367
*/
369-
static ClassResolver fromClassNameTypeResolver(ClassNameTypeResolver resolver) {
370-
MappingClassResolver mappingResolver = new MappingClassResolver();
371-
resolver.getMappings().forEach((key, value) -> mappingResolver.addMapping(value, key));
372-
return mappingResolver;
368+
static ClassResolver create(Map<Class<?>, String> mappings) {
369+
return new MappingClassResolver(mappings);
373370
}
374-
375371
}
376372

377373

@@ -415,8 +411,8 @@ private static final class MappingClassResolver implements ClassResolver {
415411

416412
private final MultiValueMap<String, Class<?>> map = new LinkedMultiValueMap<>();
417413

418-
void addMapping(String typeName, Class<?> clazz) {
419-
this.map.add(typeName, clazz);
414+
MappingClassResolver(Map<Class<?>, String> mappings) {
415+
mappings.forEach((key, value) -> this.map.add(value, key));
420416
}
421417

422418
@Override

spring-graphql/src/test/java/org/springframework/graphql/execution/SchemaMappingInspectorInterfaceTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ void useClassNameTypeResolver() {
106106
typeResolver.addMapping(CarImpl.class, "Car");
107107

108108
SchemaReport report = inspectSchema(schema,
109-
initializer -> initializer.classResolver(ClassResolver.fromClassNameTypeResolver(typeResolver)),
109+
initializer -> initializer.classResolver(ClassResolver.create(typeResolver.getMappings())),
110110
VehicleController.class);
111111

112112
assertThatReport(report)

spring-graphql/src/test/java/org/springframework/graphql/execution/SchemaMappingInspectorUnionTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ void useClassNameTypeResolver() {
120120
typeResolver.addMapping(PhotoImpl.class, "Photo");
121121

122122
SchemaReport report = inspectSchema(schema,
123-
initializer -> initializer.classResolver(ClassResolver.fromClassNameTypeResolver(typeResolver)),
123+
initializer -> initializer.classResolver(ClassResolver.create(typeResolver.getMappings())),
124124
SearchController.class);
125125

126126
assertThatReport(report)

0 commit comments

Comments
 (0)