public GraphQLObjectType createType() { Builder groupType = newObject(); groupType.name(GROUP_TYPE_NAME); groupType.description("A group is a collection of users. Groups can't be nested."); interfaceTypeProvider.addCommonFields(groupType); // .name groupType.field(newFieldDefinition().name("name").description("The name of the group.").type(GraphQLString)); // .roles groupType.field(newPagingFieldWithFetcher("roles", "Roles assigned to the group.", (env) -> { GraphQLContext gc = env.getContext(); Group group = env.getSource(); return group.getRoles(gc.getUser(), getPagingInfo(env)); }, ROLE_PAGE_TYPE_NAME)); // .users groupType.field(newPagingFieldWithFetcher("users", "Users assigned to the group.", (env) -> { GraphQLContext gc = env.getContext(); Group group = env.getSource(); return group.getVisibleUsers(gc.getUser(), getPagingInfo(env)); }, USER_PAGE_TYPE_NAME)); return groupType.build(); }