3737import java .util .Collection ;
3838import java .util .Collections ;
3939import java .util .LinkedHashMap ;
40- import java .util .LinkedHashSet ;
4140import java .util .List ;
4241import java .util .Map ;
4342import java .util .Set ;
43+ import java .util .function .Predicate ;
4444
4545import static graphql .Assert .assertNotNull ;
4646import static graphql .Assert .assertShouldNeverHappen ;
@@ -235,41 +235,44 @@ public CollectNFResult collectFromMergedField(FieldCollectorNormalizedQueryParam
235235 possibleObjects
236236 );
237237 }
238+ Map <String , List <CollectedField >> fieldsByName = fieldsByResultKey (collectedFields );
239+ ImmutableList .Builder <ExecutableNormalizedField > resultNFs = ImmutableList .builder ();
240+ ImmutableListMultimap .Builder <ExecutableNormalizedField , FieldAndAstParent > normalizedFieldToAstFields = ImmutableListMultimap .builder ();
241+
242+ createNFs (resultNFs , parameters , fieldsByName , normalizedFieldToAstFields , level , executableNormalizedField );
243+
244+ return new CollectNFResult (resultNFs .build (), normalizedFieldToAstFields .build ());
245+ }
246+
247+ private Map <String , List <CollectedField >> fieldsByResultKey (List <CollectedField > collectedFields ) {
238248 Map <String , List <CollectedField >> fieldsByName = new LinkedHashMap <>();
239249 for (CollectedField collectedField : collectedFields ) {
240250 fieldsByName .computeIfAbsent (collectedField .field .getResultKey (), ignored -> new ArrayList <>()).add (collectedField );
241251 }
242- List <ExecutableNormalizedField > resultNFs = new ArrayList <>();
243- ImmutableListMultimap .Builder <ExecutableNormalizedField , FieldAndAstParent > normalizedFieldToAstFields = ImmutableListMultimap .builder ();
244-
245- createNFs (parameters , fieldsByName , resultNFs , normalizedFieldToAstFields , level , executableNormalizedField );
246-
247- return new CollectNFResult (resultNFs , normalizedFieldToAstFields .build ());
252+ return fieldsByName ;
248253 }
249254
250255 public CollectNFResult collectFromOperation (FieldCollectorNormalizedQueryParams parameters ,
251256 OperationDefinition operationDefinition ,
252257 GraphQLObjectType rootType ) {
253- Set <GraphQLObjectType > possibleObjects = new LinkedHashSet <>();
254- possibleObjects .add (rootType );
258+
259+
260+ Set <GraphQLObjectType > possibleObjects = ImmutableSet .of (rootType );
255261 List <CollectedField > collectedFields = new ArrayList <>();
256262 collectFromSelectionSet (parameters , operationDefinition .getSelectionSet (), collectedFields , rootType , possibleObjects );
257263 // group by result key
258- Map <String , List <CollectedField >> fieldsByName = new LinkedHashMap <>();
259- for (CollectedField collectedField : collectedFields ) {
260- fieldsByName .computeIfAbsent (collectedField .field .getResultKey (), ignored -> new ArrayList <>()).add (collectedField );
261- }
262- List <ExecutableNormalizedField > resultNFs = new ArrayList <>();
264+ Map <String , List <CollectedField >> fieldsByName = fieldsByResultKey (collectedFields );
265+ ImmutableList .Builder <ExecutableNormalizedField > resultNFs = ImmutableList .builder ();
263266 ImmutableListMultimap .Builder <ExecutableNormalizedField , FieldAndAstParent > normalizedFieldToAstFields = ImmutableListMultimap .builder ();
264267
265- createNFs (parameters , fieldsByName , resultNFs , normalizedFieldToAstFields , 1 , null );
268+ createNFs (resultNFs , parameters , fieldsByName , normalizedFieldToAstFields , 1 , null );
266269
267- return new CollectNFResult (resultNFs , normalizedFieldToAstFields .build ());
270+ return new CollectNFResult (resultNFs . build () , normalizedFieldToAstFields .build ());
268271 }
269272
270- private void createNFs (FieldCollectorNormalizedQueryParams parameters ,
273+ private void createNFs (ImmutableList .Builder <ExecutableNormalizedField > nfListBuilder ,
274+ FieldCollectorNormalizedQueryParams parameters ,
271275 Map <String , List <CollectedField >> fieldsByName ,
272- List <ExecutableNormalizedField > resultNFs ,
273276 ImmutableListMultimap .Builder <ExecutableNormalizedField , FieldAndAstParent > normalizedFieldToAstFields ,
274277 int level ,
275278 ExecutableNormalizedField parent ) {
@@ -284,7 +287,7 @@ private void createNFs(FieldCollectorNormalizedQueryParams parameters,
284287 for (CollectedField collectedField : fieldGroup .fields ) {
285288 normalizedFieldToAstFields .put (nf , new FieldAndAstParent (collectedField .field , collectedField .astTypeCondition ));
286289 }
287- resultNFs .add (nf );
290+ nfListBuilder .add (nf );
288291 }
289292 if (commonParentsGroups .size () > 1 ) {
290293 parameters .addPossibleMergers (parent , resultKey );
@@ -308,7 +311,8 @@ private ExecutableNormalizedField createNF(FieldCollectorNormalizedQueryParams p
308311 normalizedArgumentValues = valuesResolver .getNormalizedArgumentValues (fieldDefinition .getArguments (), field .getArguments (), parameters .getNormalizedVariableValues ());
309312 }
310313 ImmutableList <String > objectTypeNames = map (objectTypes , GraphQLObjectType ::getName );
311- ExecutableNormalizedField executableNormalizedField = ExecutableNormalizedField .newNormalizedField ()
314+
315+ return ExecutableNormalizedField .newNormalizedField ()
312316 .alias (field .getAlias ())
313317 .resolvedArguments (argumentValues )
314318 .normalizedArguments (normalizedArgumentValues )
@@ -318,8 +322,6 @@ private ExecutableNormalizedField createNF(FieldCollectorNormalizedQueryParams p
318322 .level (level )
319323 .parent (parent )
320324 .build ();
321-
322- return executableNormalizedField ;
323325 }
324326
325327 private static class CollectedFieldGroup {
@@ -333,20 +335,21 @@ public CollectedFieldGroup(Set<CollectedField> fields, Set<GraphQLObjectType> ob
333335 }
334336
335337 private List <CollectedFieldGroup > groupByCommonParents (Collection <CollectedField > fields ) {
336- Set <GraphQLObjectType > allRelevantObjects = new LinkedHashSet <> ();
338+ ImmutableSet . Builder <GraphQLObjectType > objectTypes = ImmutableSet . builder ();
337339 for (CollectedField collectedField : fields ) {
338- allRelevantObjects .addAll (collectedField .objectTypes );
340+ objectTypes .addAll (collectedField .objectTypes );
339341 }
342+ Set <GraphQLObjectType > allRelevantObjects = objectTypes .build ();
340343 Map <GraphQLType , ImmutableList <CollectedField >> groupByAstParent = groupingBy (fields , fieldAndType -> fieldAndType .astTypeCondition );
341344 if (groupByAstParent .size () == 1 ) {
342- return singletonList (new CollectedFieldGroup (new LinkedHashSet <> (fields ), allRelevantObjects ));
345+ return singletonList (new CollectedFieldGroup (ImmutableSet . copyOf (fields ), allRelevantObjects ));
343346 }
344- List <CollectedFieldGroup > result = new ArrayList <> ();
347+ ImmutableList . Builder <CollectedFieldGroup > result = ImmutableList . builder ();
345348 for (GraphQLObjectType objectType : allRelevantObjects ) {
346349 Set <CollectedField > relevantFields = filterSet (fields , field -> field .objectTypes .contains (objectType ));
347350 result .add (new CollectedFieldGroup (relevantFields , singleton (objectType )));
348351 }
349- return result ;
352+ return result . build () ;
350353 }
351354
352355
0 commit comments