Java 8 support in GWT

This seems like a very basic question, but I searched high and low and have found almost no mention of it anywhere. So, I'll ask it here here.

What is the current plan for supporting Java 8's new language constructs in GWT?

In addition, what subset of the proposed Java 8 libraries are slated for client-side emulation? The Stream API? The new Date/Time API?

And finally, where are the discussions relating this important topic taking place? I'm sure there are many of us who would like to participate in, and potentially contribute to, the effort.

The Java 8 betas have been around for a while now, and there are numerous articles discussing the proposed APIs. It is supposed to be related later this year, so it seems past time to at least be discussing how and when the much-desired language features will make their way into GWT.

My apologies if this question is answered somewhere else, or if I missed some important piece of information related to it. This would be a great place to have a link to such information, even if it has been answered. Thanks!


Solution 1:

EDIT GWT 2.8.0 was released on Oct 20, 2016 with support for Java 8 language constructs (lambdas, method references) and emulation of some Java 8 APIs (streams mostly)

EDIT as of Apr 2014, GWT 2.6 supports Java 7, and work is underway to support Java 8 in GWT 2.7, to be released by the summer 2014. GWT 2.7 is likely to only support Java 8 language constructs though, and not emulate any new API (streams, javax.time, etc.)


The plan is to first support Java 7: https://github.com/gwtproject/gwt/labels/java7

This involves updating JDT, and this is being worked on (or alternatively, switch to something else entirely; JetBrains proposed using their parser which already supports Java 8, but GWT also needs a compiler and I don't know what they provide exactly). The next steps are to map new language constructs to JavaScript (strings-in-switch come to mind, as they could directly map to JavaScript without the hashCode-based desugaring that a Java compiler would be doing).

As long as GWT uses JDT for its Java parsing/munging/compiling, Java 8 can only be supported when JDT will support it (at an acceptable level, which is not yet the case AFAICT).

Solution 2:

Time to update the answer.

UPDATE (May 13, 2020)

GWT 2.9.0 finally here. Release notes

  • Able to compile projects with jsinterop-base 1.0.0, elemental2 1.0.0, and jsinterop-annotations 2.0.0. With the exception of @JsAsync and @JsEnum, this brings GWT2 to be compatible across these tools with J2CL.
  • Added support for Java language levels 9, 10, and 11.
  • Officially, support is dropped for running the GWT compiler or server-side tooling on Java 7. The GWT distribution is still compiled to run on Java 7 for this release, but no guarantees are made about whether or not this will work. Future versions will compile bytecode for Java 8+. The release was tested and found to work cross platform when run with Java 8, 11, and 14.

UPDATE (October 2017)

GWT 2.8.2 available here. Release notes.

UPDATE (June 2017)

Official GWT 2.8.1 download location.

Release Notes for 2.8.1

UPDATE (October 2016)

GWT 2.8.0 is finally here!

The GWT team has released the 2.8.0 tag on Github. The official GWT website has not been updated yet, but a pull request for the changes on GWT's website is ready and in review process. So very very soon the compiled version will be available for download!

Available for download

UPDATE (September 2016)

Meanwhile, team GWT has tagged GWT 2.8.0 RC3 on GitHub mirror.

The GWT team (Daniel Kurka) has released the GWT 2.8.0 (RC2) version here.

The release notes are available for 2.8.0 (RC2):

Bug fixes

  • Fix incorrect unusable-by-js warning.
  • Fix an issue around DevMode server (jetty) restart.
  • Fix an issue in super dev mode with changing compiler options not triggering full recompiles.
  • Added missing command line parameters to DevMode entry point
  • Fixed a performance regression in String.

The release notes from RC1 are available on official website. Here are the most important changes regarding Java 8 support in the upcoming GWT 2.8.0:

Highlights

  • Partial support for Java 8 standard library APIs (see below for full list).
  • Fix memory leak with Java 8 compilation.
  • Source level set to Java 8.
  • Static and default methods in interfaces aren’t visible to generators. If you want to take advantage of those Java-8isms, you’re encouraged to switch to an annotation processor. This could break existing build if an interface is changed to turn a non-default method into a default method.

JDK 8 emulation support

  • Emulate java.io.UncheckedIOException.
  • Emulate Optional and its int, long, double variants.
  • Emulate Objects.requireNonNull() with message Supplier.
  • Fix Math.min/max(float/double) emulation behavior.
  • Emulate Character.isBmpCodePoint().
  • Emulate CharSequence.chars().
  • Emulate java.lang.SecurityException.
  • Emulate Java 8 API of
    • java.util.Arrays,
    • java.util.ArrayDeque,
    • java.math.BigInteger,
    • java.util.BitSet,
    • java.util.Comparator,
    • java.util.function,
    • java.util.Iterator,
    • java.lang.Iterable,
    • java.util.IntSummaryStatistics/LongSummaryStatistics/DoubleSummaryStatistics
    • java.util.Collection/Lists/Queues,
    • java.util.Map,
    • java.util.logging.Logger,
    • java.util.PrimitiveIterator,
    • java.util.Spliterator,
    • java.util.stream,
    • java.util.StringJoiner

The GWT 2.8.0 RC2 still has some issues, which the GWT team is expected to fix soon. The final release should be coming out soon ("as soon as it is ready").