Search code examples
gwtjava-8

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

  • 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").