11package graphql .execution .directives ;
22
3+ import com .google .common .collect .ImmutableList ;
34import com .google .common .collect .ImmutableMap ;
45import graphql .GraphQLContext ;
56import graphql .Internal ;
67import graphql .execution .CoercedVariables ;
78import graphql .language .Document ;
89import graphql .language .OperationDefinition ;
910import graphql .schema .GraphQLSchema ;
11+ import graphql .util .FpKit ;
1012import org .jspecify .annotations .NullMarked ;
1113
12- import java .util .ArrayList ;
13- import java .util .LinkedHashMap ;
1414import java .util .List ;
1515import java .util .Locale ;
1616import java .util .Map ;
@@ -21,16 +21,15 @@ public class OperationDirectivesResolver {
2121
2222 private final DirectivesResolver directivesResolver = new DirectivesResolver ();
2323
24- public Map <OperationDefinition , List <QueryAppliedDirective >> resolveDirectives (Document document , GraphQLSchema schema , CoercedVariables variables , GraphQLContext graphQLContext , Locale locale ) {
25- Map <OperationDefinition , List <QueryAppliedDirective >> map = new LinkedHashMap <>();
26- List <OperationDefinition > operations = document .getDefinitionsOfType (OperationDefinition .class );
27- for (OperationDefinition operationDefinition : operations ) {
28- map .put (operationDefinition , resolveDirectives (operationDefinition , schema , variables , graphQLContext , locale ));
24+ public ImmutableMap <OperationDefinition , ImmutableList <QueryAppliedDirective >> resolveDirectives (Document document , GraphQLSchema schema , CoercedVariables variables , GraphQLContext graphQLContext , Locale locale ) {
25+ ImmutableMap .Builder <OperationDefinition , ImmutableList <QueryAppliedDirective >> builder = ImmutableMap .builder ();
26+ for (OperationDefinition operationDefinition : document .getDefinitionsOfType (OperationDefinition .class )) {
27+ builder .put (operationDefinition , resolveDirectives (operationDefinition , schema , variables , graphQLContext , locale ));
2928 }
30- return ImmutableMap . copyOf ( map );
29+ return builder . build ( );
3130 }
3231
33- public List <QueryAppliedDirective > resolveDirectives (OperationDefinition operationDefinition , GraphQLSchema schema , CoercedVariables variables , GraphQLContext graphQLContext , Locale locale ) {
32+ public ImmutableList <QueryAppliedDirective > resolveDirectives (OperationDefinition operationDefinition , GraphQLSchema schema , CoercedVariables variables , GraphQLContext graphQLContext , Locale locale ) {
3433 return directivesResolver .toAppliedDirectives (
3534 operationDefinition .getDirectives (),
3635 schema ,
@@ -40,18 +39,14 @@ public List<QueryAppliedDirective> resolveDirectives(OperationDefinition operati
4039 );
4140 }
4241
43- public Map <String , List <QueryAppliedDirective >> resolveDirectivesByName (OperationDefinition operationDefinition , GraphQLSchema schema , CoercedVariables variables , GraphQLContext graphQLContext , Locale locale ) {
42+ public ImmutableMap <String , ImmutableList <QueryAppliedDirective >> resolveDirectivesByName (OperationDefinition operationDefinition , GraphQLSchema schema , CoercedVariables variables , GraphQLContext graphQLContext , Locale locale ) {
4443 List <QueryAppliedDirective > list = resolveDirectives (operationDefinition , schema , variables , graphQLContext , locale );
4544 return toAppliedDirectivesByName (list );
4645 }
4746
48- public static Map <String , List <QueryAppliedDirective >> toAppliedDirectivesByName (List <QueryAppliedDirective > queryAppliedDirectives ) {
49- Map <String , List <QueryAppliedDirective >> map = new LinkedHashMap <>();
50- for (QueryAppliedDirective queryAppliedDirective : queryAppliedDirectives ) {
51- List <QueryAppliedDirective > list = map .computeIfAbsent (queryAppliedDirective .getName (), k -> new ArrayList <>());
52- list .add (queryAppliedDirective );
53- }
54- return ImmutableMap .copyOf (map );
47+ public static ImmutableMap <String , ImmutableList <QueryAppliedDirective >> toAppliedDirectivesByName (List <QueryAppliedDirective > queryAppliedDirectives ) {
48+ Map <String , ImmutableList <QueryAppliedDirective >> immutableListMap = FpKit .groupingBy (queryAppliedDirectives , QueryAppliedDirective ::getName );
49+ return ImmutableMap .copyOf (immutableListMap );
5550 }
5651
5752}
0 commit comments