Java 8 support in GWT

24,229

Solution 1

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

Solution 2

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

Share:
24,229
Yona Appletree
Author by

Yona Appletree

I am a Java, Scala, Kotlin and TypeScript developer currently working at Concentric Sky in Eugene, OR. I also work on programmable light art through http://lightatplay.net. I have a strong preference for type-safe languages and functional paradigms. As a result, I advocate strongly for frameworks like GWT and TypeScript which allow the use of such paradigms on the web. I make mistakes, and I appreciate languages and framework which help catch my mistakes either before I write them or before I deploy code with minimal work on my part.

Updated on July 09, 2022

Comments

  • Yona Appletree
    Yona Appletree almost 2 years

    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!

  • Chris Lercher
    Chris Lercher about 10 years
    Interesting! Will GWT 2.7 use the JetBrains parser, or a newer version of JDT?
  • Thomas Broyer
    Thomas Broyer about 10 years
    JDT. There's a preview download if you want to start playing with it: github.com/WeTheInternet/gwt-sandbox/tree/java8
  • tonix
    tonix about 9 years
    How is the support now? I have found that if you use lambda expressions to implement functional interfaces of event handlers and you compile the widgetset, the widget is not created properly (at least using GWT together with Vaadin 7.3.10)
  • Thomas Broyer
    Thomas Broyer about 9 years
    Lambdas are supported in 'master' code.google.com/p/google-web-toolkit/issues/…, will be in GWT 2.8.
  • Thomas Broyer
    Thomas Broyer over 8 years
    GWT 2.8.0-beta1 has been released.
  • Stefan Falk
    Stefan Falk over 8 years
    Will there be no java.util.Calendar support?
  • Thomas Broyer
    Thomas Broyer over 8 years
    @StefanFalk No, not possible. java.time can (partially) be implemented on top of JS primitives, but someone would have to contribute it (see github.com/gwtproject/gwt/issues/611 and github.com/m-m-m/gwt-time)
  • slartidan
    slartidan over 8 years
    Hi, it's time for an update! GWT now supports lambdas! Hurray! (sadly GWT still does not support all of Java8 API)