code: private Set<GraphQLType> buildAdditionalTypes(BuildContext buildCtx) {
          Set<GraphQLType> additionalTypes = new LinkedHashSet<>();
          TypeDefinitionRegistry typeRegistry = buildCtx.getTypeRegistry();
          typeRegistry.types().values().forEach(typeDefinition -> {
              TypeName typeName = TypeName.newTypeName().name(typeDefinition.getName()).build();
              if (typeDefinition instanceof InputObjectTypeDefinition) {
                  if (buildCtx.hasInputType(typeDefinition) == null) {
                      additionalTypes.add(buildInputType(buildCtx, typeName));
                  }
              } else {
                  if (buildCtx.hasOutputType(typeDefinition) == null) {
                      additionalTypes.add(buildOutputType(buildCtx, typeName));
                  }
              }
          });
          return additionalTypes;
      }
docs: We build the query / mutation / subscription path as a tree of referenced types
  but then we build the rest of the types specified and put them in as additional types
  
  @param buildCtx the context we need to work out what we are doing
  
  @return the additional types not referenced from the top level operations