Skip to content

v14.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 10 Oct 22:20
· 2 commits to master since this release

Behaviour changes

  • Generic superclasses (#825, fixes #460 and #218): type variables are now resolved against the most specific class. Methods inherited from a generic superclass keep their resolved type arguments, so two subclasses that bind them differently (e.g. Page<A> and Page<B>) can no longer share one GraphQL type. Schema parsing fails with "Two different classes used for type" in that case.
  • Plain futures (#839, fixes #203): a resolver that returns a Future graphql-java can't wait on (anything that isn't a CompletionStage, e.g. a FutureTask or RxJava's toFuture()) now fails the field with an error that says what to return instead. Before, the future itself reached graphql-java as the field value.
  • Generic wrapper results (#836, fixes #371): a generic wrapper transformer that returns null now resolves the field to null instead of falling back to the wrapper object.
  • Suspend resolvers (#831, fixes #419): they now start undispatched and run on the calling thread until their first suspension, so DataLoader loads are queued before graphql-java dispatches them.
  • Directive wirings (#830, #834): several wirings on the same element now chain, each one starting from the previous one's output. Applied directives now include arguments that have a default value in the directive definition.

Deprecations

  • Passing a CoroutineScope as the context object is deprecated and logs a warning. Put it in the GraphQLContext under the CoroutineScope class key instead. Support for the context object will be removed in the next major release.
  • getDirective(), getDirectives() and getDirective(name) on SchemaDirectiveWiringEnvironmentImpl are deprecated in favour of getAppliedDirective(), getAppliedDirectives() and getAppliedDirective(name).

What's Changed

  • Version Release by @github-actions[bot] in #827
  • Allow list fields on map-backed types by @oryan-block in #829
  • Speed up resolver method lookup for large schemas by @oryan-block in #837
  • Fix suspend resolvers hanging when awaiting a data loader by @oryan-block in #831
  • Prefer getters over fluent setters for input field types by @oryan-block in #833
  • Fix suspend resolver context and Kotlin extension resolvers by @oryan-block in #835
  • Push the release tag and draft a GitHub release from the release workflow by @oryan-block in #828
  • Apply raw and star-projected resolvers to parameterized data classes by @oryan-block in #832
  • Honour null generic wrapper results by @oryan-block in #836
  • Fix snapshot deploy 401 on Maven 3.10 by @oryan-block in #840
  • Reject futures that graphql-java can't wait on by @oryan-block in #839
  • Fix directive wirings discarding earlier changes to the same element by @oryan-block in #830
  • Fill in directive argument defaults when not supplied by @oryan-block in #834
  • Resolve type variables through generic superclasses by @oryan-block in #825
  • Drop unused declaring type and rename GenericType to GenericTypeResolver by @oryan-block in #845
  • Discover unions and interfaces used only by interface fields by @oryan-block in #844

Full Changelog: v14.1.0...v14.2.0