Release Notes for 2.7.0

Known Issues

DevMode always starts in Super Dev Mode, so it's not as easy to test in production mode. See issue 9004 for workarounds.

Release Notes for 2.7.0 (RC1)

Highlights

Super Dev Mode is now the default. DevMode automatically starts Super Dev Mode and reloading a web page automatically runs the compiler when necessary. (The -noSuperDevMode flag may be used to revert to the old behavior.)

Known Issues

gwttar files are incorrect. (Fixed in the next version.)

Deprecations

GWT Designer doesn't work with 2.7 and is no longer supported. (Source code is available if someone wishes to revive this project.)

IFrameLinker and XSLinker are deprecated because they don‘t work in Super Dev Mode. However, we don’t have suitable replacements for all use cases yet. For updates and possible workarounds, see issue 8997.

Compiler changes

In draft mode and Super Dev Mode, all compiler optimizations are turned off for better debugging. For example, null pointers are detected sooner.

We‘ve started implementing JS Interop annotations, which will make it much easier to use GWT with JavaScript libraries. The specification is not final and there are bugs, so production GWT apps and libraries should continue to use JSNI for now. If you wish to experiment, you can enable JS Interop using the -XjsInteropMode flag, which is available for the compiler and Super Dev Mode. (It doesn’t work with old DevMode.)

The experimental -XmethodNameDisplayMode flag adds a displayName property to each JavaScript function containing the name of the Java method. This makes Java method names available in browser debuggers at the expense of code size. (Also available in Super Dev Mode.)

Boxed JavaScript strings (created in JavaScript using new String(...)) are no longer considered equivalent to Java strings. They should be unboxed before being passed to Java.

Logging and Stack Traces

Better wrapping of exceptions thrown from JavaScript.

GWT apps that inherit the com.google.gwt.logging.Logging module have different default behavior for messages logged using the java.util.logging package. The new default is to log messages at level SEVERE and above to the browser's console. PopupLogHandler and SystemHandler are no longer enabled by default.

Release Notes for 2.6.0

This release includes minor updates to silence unnecessary debugging warnings. See the release notes for 2.6.0 (RC1) for the full list of features and bugs fixes included in the GWT 2.6.0 release.

Release Notes for 2.6.0 (RC4)

This release enabled the Super Dev Mode hook by default, updated the sample Maven POMs, included a Firefox memory leak fix for Dev Mode, and a few other minor regressions noted during release candidate testing.

Release Notes for 2.6.0 (RC3)

This release fixed an incompatibility with the Google Plugin for Eclipse, improved uncaught exception handling, and reverted some backwards-incompatible changes made since GWT 2.5.1.

Release Notes for 2.6.0 (RC2)

This release disabled the Opera permutation, added a more maintainable DOM event dispatch mechanism, and fixed a few GWT-RPC and IE11 issues raised during release candidate testing.

Release Notes for 2.6.0 (RC1)

Highlights

Java 7 is supported and is now the default. (This can be overridden using -sourceLevel 6)

GWT Development Mode will no longer be available for Chrome sometime in 2014, so we improved alternate ways of debugging. There are improvements to Super Dev Mode, asserts, console logging, and error messages.

Internet Explorer cleanup: IE6/7 support is disabled by default in this release and will be gone in the next major release. IE10 is now a separate permutation.

Compiler changes

A @GwtIncompatible annotation may be used to mark classes, methods, and fields that the GWT compiler should ignore. (Any annotation with this name can be used, regardless of package.)

Flag cleanup

Flags have been cleaned up for consistency, but the old flags are still supported for backward compatibility.

Arguments may be specified multiple times on the command line and the last one wins.

Boolean flags can consistently be disabled using ‘-no’.

Experimental flags consistently start with ‘-X’ or ‘-Xno’ to disable.

The deprecated -out flags were removed

Added flags for turning specific optimizations on and off.

The -saveSource and -saveSourceOutput *dest* options may be used to write source files used by the GWT app to an output directory. (Combined with the includeSourceMapUrl config property, it is possible to set up source-level debugging outside Super Dev Mode.)

Changes to generated JavaScript

Catching and rethrowing a JavaScript exception no longer wraps it in a Java exception (so the console will print it correctly, etc.)

Failed assertions stop in the browser's debugger (if open)

Various code size improvements.

Code Splitting

Fragment merging is more reliable, works with soyc reports

GWT.runAsync: passing the same class is allowed, puts the code in the same fragment

GWT.runAsync always runs asynchronously; before it would sometimes be synchronous. (This behavior can be reverted by inheriting SynchronousFragmentLoadCallback.gwt.xml)

The compiler.splitpoint.leftovermerge.size configuration property sets a minimum size for fragments

Browser permutation changes

The ie6 permutation (which also handles IE 7) is now disabled by default. Support for IE6 and IE7 will be removed in the next major GWT release.

Added the ie10 permutation. There's no fallback value, so deferred bindings and conditional CSS that explicitly checks user.agent may need to be updated. (However, note that workarounds needed for previous versions of IE may no longer be necessary.)

Server-side classes

Developer Tools

Developer Mode

Starts the user's preferred browser on Linux

Fixed primitive class references in JSNI code (e.g. @int::class)

Reduced memory leakage

Super Dev Mode

Security: with 2.6 we believe it‘s safe to turn on the Super Dev Mode hook and leave it on in production. As an extra precaution, we recommend setting the devModeUrlWhitelistRegexp configuration property to ensure that it can only load JavaScript from localhost and your developers’ machines in your own domain.

Security: automatically disable Super Dev Mode on https pages (Another precaution, and it doesn't work anyway due to mixed-content restrictions.)

sourceUrl comment fixed so that in a JavaScript debugger, the JavaScript source shows up as ‘{module}-0.js’ instead of just ‘0.js’.

Grey out unused Java in source code listings on the code server.

RemoteServiceServlet: the gwt.codeserver.port parameter may be used to download serialization policies from a Super Dev Mode code server's /policies/ directory. This can be used to avoid some server recompiles when working on GWT-RPC code.

Added the “webApiUsage” property. The default setting is “modern”. If set to “stable”, GWT libraries will avoid using prefixed web API's. Currently, the only difference is that animation will use a timer. [7895]

Fixed Double.parseDouble() when called with Nan, Infinity, and leading zeros [7713, 7834]

Added a constructor option to StackTraceDeobfuscator for conserving server memory.

Fixed an exception when using shared code that uses GWTBridge on the server [7527]

Release Notes for 2.5.0

This release includes some minor bug fixes found in the release candidate. See What's New in GWT 2.5 plus the release notes for 2.5.0 (RC1) and 2.5.0 (RC2) for the full list of features and bugs fixes included in the GWT 2.5.0 release.

Security vulnerability from 2.4 to 2.5 Final

The GWT team recently learned that the Security vulnerability discovered in the 2.4 Beta and Release Candidate releases was only partially fixed in the 2.4 GA release. A more complete fix was added to the 2.5 GA release. If you have an app that‘s been built with GWT 2.4 or one of the 2.5 RCs, then you’ll need to get the latest 2.5 release, recompile your app, and redeploy.

Release Notes for 2.5.0 (RC2)

This is release candidate 2 of GWT 2.5. See the What's new in GWT 2.5 page as well as release notes below for the full list of features and bugfixes in this release.

Changes since RC1

The GWT tools can now run on JDK 7. (However, no JDK 7 language or library features are available in GWT code yet.)

The accessibility library introduced in RC1 has been cleaned up for release.

Support for validation is improved, documented, and no longer considered experimental.

A new accessibility library for setting ARIA roles, states and properties on DOM elements

UIBinder enhancements for rendering cells and accessing inline styles

Other Fixes and Enhancements

Significant speedups in development refresh time as a result of generator result caching for the ClientBundle and RPC generators. Addition of a result caching API that generator writers can use (r10412, r10476).

Drastic improvement in RPC performance in development mode by providing a development-mode-only implementation for RPC.

Update ISO-8601 time format to accept a timezone of a literal “Z” to mean GMT+0 (r10773).

Various fixes to stabilize the compiler output on null (no change) recompiles. Added the -Dgwt.normalizeTimestamps system property to zero out the date on output jar files to stabilize builds in build systems which rely on content-addressability (r10810).

json-1.5.jar is now bundled as a part of gwt-dev.jar. streamhtmlparser (rebased) has been removed from gwt-dev.jar and has been bundled as part of gwt-user.jar and gwt-servlet.jar.

The compiler metrics aspect of the Compile Report has been disabled by default. The compile report results in instability in the Compile Report. To add compiler metrics to the compilation report, use the -XcompilerMetrics flag.

The compiler.emulatedStack property should no longer be used. compiler.stackMode is what should be used instead.

Security vulnerability in GWT 2.4

Recently, the GWT team discovered a cross-site scripting vulnerability in the 2.4 Beta and Release Candidate releases (not in v2.3 GA or v2.4 GA). This vulnerability was partially fixed in the 2.4 GA release and completely fixed in the 2.5 GA release. If you have an app that‘s been built with 2.4 then you’ll need to get the latest 2.5 release, recompile your app, and redeploy.

Notes and Known Issues

GPE's Maven support in Eclipse Indigo requires that the m2Eclipse WTP Integration plugin be installed. It can be installed via the JBoss Update site. See the Google Maven wiki page for the canonical reference for working with Maven in the latest GWT and GPE releases.

GWT's new RequestFactory configuration is not enabled by default for plain GWT, App Engine, or GWT + App Engine projects. It is enabled by default for new Cloud-Connected Android Projects only. See the RequestFactoryInterfaceValidation wiki page for information on how to use the new RequestFactoryInterfaceValidator within Eclipse, Maven, or the command line.

Release Notes for 2.3.0

This is the General Availability release of GWT 2.3. See the release notes below for the full list of features and bug fixes included in this release.

General Enhancements

Noteworthy Fixed Issues

Known Issues

At compile time, you may see a warning similar to the following: “Configuration property UiBinder.useSafeHtmlTemplates is false! UiBinder SafeHtml integration is off, leaving your users more vulnerable to cross-site scripting attacks”. This warning occurs because although UiBinder HTML rendering has been updated to support SafeHtml, by default this is turned off (set to false), due to some minor bugs. If you wish, you can change the default by setting the “useSafeHtmlTemplates” property to true in UiBinder.gwt.xml. You can determine whether you are affected by the known bugs by checking the public bugs 6145, 6149, and 6198.

Release Notes for 2.2.0

The 2.2 release of GWT contains an integrated UI designer (part of the Google Plugin for Eclipse), support for HTML5 functionality, such as the Canvas/Audio/Video tags, an updated CellTable widget that now supports sortable columns and fixed column widths, and a more lenient SafeHtml template parser.

General Enhancements

Touchstart, touchmove, touchend, touchcancel have been integrated into the GWT event framework (#5148)

Built-in bidi text support for widgets such as Label, HTML, Anchor, Hyperlink and ListBox. More information on this feature can be found here.

General Changes

GWT Designer v8.1.1 and earlier versions do not support GWT 2.2. To use GWT Designer with GWT 2.2, you need to uninstall the older version of GWT Designer and install the latest one.

Version 2.2 has deprecated support for Java 1.5, resulting in warnings when building applications. While Java 1.5 will still work for at least the next release of GWT, developers should upgrade their version of Java to correct these warnings and ensure compatibility with future versions of GWT.

Noteworthy Fixed Issues

RC releases are now being deployed as non-SNAPSHOTs in the maven repository (#5429)

Release Notes for 2.1.0

This release includes some minor bug fixes found in the release candidate. See What's New in GWT 2.1 plus the release notes for 2.1.0 (RC1) for the full list of features and bugs fixes included in the GWT 2.1.0 release.

RootPanel.get(id) fails to set ‘position:relative’ and ‘overflow:hidden’ (#1813)

UncaughtExceptionHandler not triggered for exceptions occurring in onModuleLoad() (#1617)

Release Notes for 2.1.0 (M2)

This is milestone 2 release of 2.1.

Release Notes for 2.1.0 (M1)

This is a preview release of 2.1, that contains a new set of Cell Widgets and an app framework that make it easier to build large scale business applications.

Known Issues

For App Engine-based apps, you will need to run Maven once from the command line before importing the app into STS. This could be as simple as running “mvn validate” or “mvn compile”, the point is to prep your local repo with an unzipped GAE SDK.

Compiling a new app and/or running it in dev mode, will generate error messages complaining about missing dependencies. These errors can be ignored as they are related to classes that are most likely not used by your app, and will be omitted during compilation, or while running in dev mode.

Fixed Issues

Image.onload event does not fire on Internet Explorer when image is in cache (#863)

Release Notes for 2.0.2

Noteworthy Fixed Issues

Release Notes for 2.0.1

This 2.0.1 release contains fixes for bugs found in the 2.0.0 release.

Potentially breaking changes and fixes

Fixed a bug in how code generators collect method arguments from generated source, which impacted the Messages interfaces generated for UiBinder template files. In GWT 2.0, such argument names were incorrectly changed to ARGn. Most GWT applications will be unaffected, but external systems relying on these names will need to be updated.

The development mode server will, by default, only bind to localhost which will break cross-machine debugging. You can get the old behavior by specifying -bindAddress 0.0.0.0. Please see issue (#4322) for more details. For webAppCreator-generated ant files, you can pass this with ant -Dgwt.args="-bindAddress 0.0.0.0" devmode.

The CurrencyList/CurrencyData APIs are now public - if you were relying upon these classes in their non-public location, you should only need to update your imports.

Release Notes for 2.0.0

This release includes some minor bug fixes found in the release candidate. See What's New in GWT 2.0 plus the release notes for 2.0.0 (RC1) and 2.0.0-rc2 for the full list of features and bugs fixes included in the GWT 2.0.0 release.

Running a GWTTestCase as compiled script was previously done using -Dgwt.args="-web". The -web argument is now deprecated in favor of -prod, consistent with the terminology change from web mode to production mode.

The -portHosted command line argument for DevMode and GWTTestCase has changed to -codeServerPort to be consistent with the new term code server.

The junitCreator command line utility has been removed. Instead, the webAppCreator utility takes new argument: -junit _<path-to-junit-jar>_ , which incorporates the functionality previously in junitCreator and generates ant test targets.

When running development mode on on Chrome, any JavaScript objects that pass into Java code will be assigned a new property __gwt_ObjectId. This could break native code that looks iterates through the properties of such an object. To work around this issue, see this example of our changes to JSONObject (scroll to the bottom).

Compile reports (formerly SOYC reports) are now generated with the -compileReport command line flag to Compiler. The generated reports are now written to the private extra directory. If no -extra argument is specified, this directory defaults to extras/. This eliminates an unlikely security risk of accidentally deploying compile reports to a publicly accessible location.

Release Notes for 2.0.0 (RC1)

Things that are changing with GWT 2.0 that might otherwise be

confusing without explanation

Terminology changes: We‘re going to start using the term “development mode” rather than the old term “hosted mode.” The term “hosted mode” was sometimes confusing to people, so we’ll be using the more descriptive term “development mode” from now on. For similar reasons, we'll be using the term “production mode” rather than “web mode” when referring to compiled script.

Changes to the distribution: Note that there‘s only one download, and it’s no longer platform-specific. You download the same zip file for every development platform. This is made possible by the new plugin approach used to implement development mode (see below). The distribution file does not include the browser plugins themselves; those are downloaded separately the first time you use development mode in a browser that doesn't have the plugin installed.

Major New Features

In-Browser Development Mode: Prior to 2.0, GWT hosted mode provided a special-purpose “hosted browser” to debug your GWT code. In 2.0, the web page being debugged is viewed within a regular-old browser. Development mode is supported through the use of a native-code plugin called the GWT Developer Plugin for many popular browsers. In other words, you can use development mode directly from Safari, Firefox, Internet Explorer, and Chrome.

Code Splitting: Developer-guided code splitting with GWT.runAsync() allows you to chunk your GWT code into multiple fragments for faster startup. Imagine having to download a whole movie before being able to watch it. Well, that's what you have to do with most Ajax apps these days -- download the whole thing before using it. With code splitting, you can arrange to load just the minimum script needed to get the application running and the user interacting, while the rest of the app is downloaded as needed.

Declarative User Interface: GWT's UiBinder now allows you to create user interfaces mostly declaratively. Previously, widgets had to be created and assembled programmatically, requiring lots of code. Now, you can use XML to declare your UI, making the code more readable, easier to maintain, and faster to develop. The Mail sample has been updated to show a practical example of using UiBinder.

Bundling of resources via ClientBundle. GWT introduced ImageBundle in 1.4 to provide automatic spriting of images. ClientBundle generalizes this technique, bringing the power of combining and optimizing resources into one download to things like text files, CSS, and XML. This means fewer network round trips, which in turn can decrease application latency -- especially on mobile applications.

Using HtmlUnit for running test cases based on GWTTestCase: Prior to 2.0, GWTTestCase relied on SWT and native code versions of actual browsers to run unit tests. As a result, running unit tests required starting an actual browser. As of 2.0, GWTTestCase no longer uses SWT or native code. Instead, it uses HtmlUnit as the built-in browser. Because HtmlUnit is written entirely in the Java language, there is no longer any native code involved in typical test-driven development. Debugging GWT Tests in development mode can be done entirely in a Java debugger.

Breaking changes and known issues/bugs/problems

Prior to 2.0, GWT tools such as the compiler were provide in a platform-specific jar (that is, with names like gwt-dev-windows.jar). As of 2.0, GWT tools are no longer platform specific and they reside in generically-named gwt-dev.jar. You are quite likely to have to update build scripts to remove the platform-specific suffix, but that's the extent of it.

The development mode entry point has changed a few times since GWT 1.0. It was originally called GWTShell, and in GWT 1.6 a replacement entry point called HostedMode was introduced. As of GWT 2.0, to reflect the new “development mode” terminology, the new entry point for development mode is com.google.gwt.dev.DevMode. Sorry to keep changing that on ya, but the good news is that the prior entry point still works. But, to really stay current, we recommend you switch to the new DevMode entry point.

Also due to the “development mode” terminology change, the name of the ant build target produced by webAppCreator has changed from hosted to devmode. In other words, to start development mode from the command-line, type ant devmode`.

HtmlUnit does not attempt to emulate authentic browser layout. Consequently, tests that are sensitive to browser layout are very likely to fail. However, since GWTTestCase supports other methods of running tests, such as Selenium, that do support accurate layout testing, it can still make sense to keep layout-sensitive tests in the same test case as non-layout-sensitive tests. If you want such tests to be ignored by HtmlUnit, simply annotate the test methods with @DoNotRunWith({Platform.Htmlunit}).

Versions of Google Plugin for Eclipse prior to 1.2 will only allow you to add GWT release directories that include a file with a name like gwt-dev-windows.jar. You can fool it by sym linking or copying gwt-dev.jar to the appropriate name.

The way arguments are passed to the GWT testing infrastructure has been revamped. There is now a consistent syntax to support arbitrary “run styles”, including user-written, with no changes to GWT itself. For example, -selenium FF3 has become -runStyle selenium:FF3. This change likely does not affect typical test invocation scripts, but if you do use -Dgwt.args to pass arguments to GWTTestCase, be aware that you may need to make some changes.

Release Notes for 1.7.1

This release adds support for Mac OS X version 10.6 (Snow Leopard) by allowing hosted mode to run with a 1.6 JRE in 32-bit mode (using the -d32 flag).

Fixed Issues

Release Notes for 1.7.0

This release adds explicit support for Internet Explorer 8, Firefox 3.5, and Safari 4 as well as a few high-priority bug fixes. In all other respects, it is very similar to GWT 1.6. Note, however, that this release is version 1.7.0 rather than version 1.6.5 to signify a potentially breaking change for libraries that use deferred binding to specialize code based on user agent (see the next section for technical details).

Potentially breaking changes and fixes

This release includes explicit support for IE8, which has some significant behavioral changes from prior versions of IE. These changes are great enough that the new value ie8 has been added for the user.agent deferred binding client property. If you have deferred binding rules (i.e. <replace-with> or <generate-with>) or property providers that are sensitive to user.agent, you may need to update them to account for the ie8 value. For more information, see the technical notes.

Release Notes for 1.5.2

Potentially breaking changes and fixes

History.onHistoryChanged() has been added back (it was missing from 1.5 RC2) but is now deprecated. Application startup should be handled by calling the new History.fireCurrentHistoryState().

Fields marked final in serializable types will now generate a warning; the fact that they were not being serialized was a source of confusion. Mark such fields both final and transient to avoid the warning.

Instance methods on overlay types cannot be accessed from JSNI. (This used to work in hosted mode, but failed at runtime in web mode.)

The hosted mode server no longer serves hosted.html from a module's public path; instead the file is read directly from the classpath. This file is tightly coupled with the hosted mode implementation and was not meant to be user overridable.

General Enhancements

Collections.unmodifiableSortedSet() and Collections.unmodifiableSortedMap() are now implemented.

The new Accessibility class enables widget authors to add ARIA support to their widgets. Many GWT widgets come with ARIA support by default.

Fixed Issues

Fixed the relationship between the coordinates returned by Element.getAbsoluteLeft/Top() and Event.getClientX/Y(). Document.getBodyOffsetLeft/Top() can be used to account for the difference between these two coordinate systems.

Ctrl-Z should correctly perform an undo operation in RichTextArea on IE.

Release Notes for 1.5.1 (RC2)

Support for Standards Mode

GWT 1.5 adds significantly more support for standards mode applications, but some widgets (especially those with table based layouts) may not behave as expected. The low level standards mode bugs (such as with getAbsoluteLeft/Top() ) have been addressed, but some of the constructs that our widgets rely on do not work in standards mode. For example, you cannot set the height and width of a widget relative to its parent if its parent is a table cell, and StackPanel takes up much more vertical space than it should in Internet Explorer. All of our samples have been reverted back to quirks mode, and the applicationCreator defaults to quirks mode when creating a new GWT app.

You can still use standards mode for your GWT app, but please be aware that you may notice some layout issues. If you are switching an app from quirks mode to standards mode, your CSS styles might be applied differently, which could also affect your application. We will continue to address standards mode support in future GWT releases.

Potentially breaking changes and fixes

DOM.eventGetClientX/Y() now takes into account the margin and border of the body element

In hosted mode, all DOM.eventGetXXX() methods now assert that the requested attribute is reliable across all supported browsers. This means that attempting to retrieve an attribute for an event that does not support that attribute will now throw an assertion error instead of returning a coerced value. Most notably, the click event throws an assertion error if you attempt to get the mouse button that was clicked.

The return value of DOM.eventGetXXX() methods are now coerced to 0 instead of -1 in web mode. In hosted mode, an assertion error will be thrown if the attribute is not defined for the given event, as described in the previous bullet.

Opera specific code has been upgraded to work with Opera 9.5, but may not work with older versions of Opera as we only support the most recent release. Specifically, some widgets may not be able to receive focus.

Calls to History.newItem() now trigger an onHistoryChanged() event synchronously instead of asynchronously

General Enhancements

Added support for the contextmenu event, which allows users to detect and override the browser's default context menu

Improved performance of NumberFormat

Added support for altering the number of decimals in a currency in NumberFormat

Improved performance of Animations

Improved the appearance of the default GWT style themes

Improved the Showcase sample with more robust examples and more language translations

FormPanel can now wrap an existing form and still submit it to a hidden iframe

Fixed Issues

DOM.getAbsoluteLeft/Top() and DOM.eventGetClientX/Y() no longer log an exception to the console in Firefox 3

Fixed a memory leak in Internet Explorer

DOM.getAbsoluteLeft/Top() now takes into account the margin and border of the target element in Safari 3

Release Notes for 1.5.0 (RC)

This release candidate is, in a word, huge. Rather than including all the details here, please see What's New in GWT 1.5? for full details. The main thing you‘ll want to know is that GWT 1.5 supports the Java 5 language features (generics, enumerated types, annotations, etc.). But check out the full notes, because there’s a lot of great stuff!

Release Notes for 1.4.60

Fixed a bug in the benchmarking that prevented source code from showing up in reports.

Fixed a bug in the hosted mode servlet context emulation where getResource() would fail to find a file in a module's public path.

Compiler output files of the form _module_.cache.html used to contain html intended as a helpful note to a developer. This message has now been removed because screen readers and some browsers would display this content to end users.

Release Notes for 1.4.59 (RC2)

This release includes numerous bugfixes and a few important changes. If you are upgrading from GWT 1.3.3, you are strongly encouraged to read the release notes for 1.4.10 first.

If you have it installed, Google Gears is now accessible in hosted mode (Windows only). (#1252)

General Changes

Startup is now faster and more reliable. In particular, onModuleLoad() is now called as soon as the DOM is ready, which will generally be before the page's body.onload() event is fired. This allows your application to startup before certain resources (such as images) are fully loaded.

Warn if a non-checked exception is used in the throws clause of a RemoteService method.

Warn if no concrete, serializable subclasses can be found for a given type declared in a RemoteService interface.

RPC now generates a serialization policy file during compilation. The serialization policy file contains a whitelist of allowed types which may be serialized. Its name is a strong hash name followed by .gwt.rpc. This file must be deployed to your web server as a public resource, accessible from a RemoteServiceServlet via ServletContext.getResource(). If it is not deployed properly, RPC will run in 1.3.3 compatibility mode and refuse to serialize types implementing Serializable. (#1297)

The benchmark viewer application is now faster, prettier, and a bit more user friendly.

Retractions from 1.4.10

Breaking changes to the semantics of UIObject.setStyleName() have been backed out. All changes relative to 1.3.3 should now be backwards-compatible. (#1079)

The linux distribution of 1.4.10 bundled Mozilla 1.7.13 instead of version 1.7.12, which is bundled in previous releases. This change caused problems on some systems, so it's been reverted back to Mozilla 1.7.12 again. (#1105)

Numerous RPC warnings were added in 1.4.10. One of these warnings would be issued when a class containing native methods was found to be serializable. This warning now only applies to automatically serialized types; types with custom serializers will no longer trigger this warning. (#1161)

A change to RPC in 1.4.10 would cause an error to be issued if a serializable type had any subtypes that were not serializable. This change caused code that worked in 1.3.3 to fail in 1.4.10. In this release, the error has been downgraded to a warning. (#1163)

A potentially breaking change to event bubbling in 1.4.10 has been backed out in favor of the 1.3.3 behavior. (#1159)

Fixed Issues

Release Notes for 1.4.10 (RC)

This is the Release Candidate for GWT 1.4, the first GWT release developed with major participation from GWT open source contributors. It‘s been a long time coming, but we hope it’s been worth the wait. In addition to tons of new features, optimizations, and performance enhancements, we've fixed more than 150 bugs. There are some important behavioral and potentially breaking API changes; if you read nothing else, please read these following sections!

Behavioral Changes

Important changes in the behavior of existing GWT features.

Critical Changes to RPC

In previous versions, the RPC subsystem was too lenient and failed to warn at compile time about potential (though unusual) edge cases that could in theory cause problems at runtime. Beginning with version 1.4, the RPC subsystem emits additional warnings and errors to help you identify error-prone constructs. While this new behavior may seem annoying at first, rest assured that fixing your code to avoid RPC warnings will result in a smaller, faster, and more reliable app.

Bad code that happened to work before might not now

Previously, if you declared one particular component type via @gwt.typeArgs at compile time, you could often get away with passing a different type at runtime. For example, placing a Date in an ArrayList of String might work. This type of code is less likely to work now and will likely become more strict in the future. Bottom line: don't do this. Make sure collections only contain the declared item type (or subtypes thereof).

Although GWT‘s RPC mechanism doesn’t purport to honor the semantics of Java serialization, by popular demand, Serializable and IsSerializable are now equivalent for the purposes of RPC. This should improve server-side interoperability and remove much of the need for DTOs.

Warn about missing gwt.typeArgs Every Collection or Map type should have an associated gwt.typeArgs javadoc annotation. In the past, a missing @gwt.typeArgs would generally have no noticeable effect, because a bug in the RPC system would generate code for all available serializable types, even if they weren't used in your service interface. Now that this bug has been fixed, you can achieve significant reduction in the size of your compiled output by fixing these warnings.

Warn about serializable subclasses that violate the serialization restrictions An RPC warning is emitted for classes that are assignable to IsSerializable or Serializable but that lack a default constructor or contain fields which cannot be serialized. It is important to resolve these warnings to avoid rare but confusing situations in which exceptions would be thrown at runtime.

Warn about non-transient, final instance fields

RPC has never actually serialized final instance fields, but now it explicitly warns about the existence of such fields unless they are also transient. Thus, the warning can be addressed by making final instance fields transient` as well, or it can be suppressed via a module property.

Warn about local and non-static nested types that implement IsSerializable or Serializable RPC has never serialized these kinds of classes and will now generate a warning.

Warn about native methods in serializable classes

Attempting to serialize classes that contain native methods will cause UnsatisfiedLinkErrors if such methods are called in server-side code.

Module Script Tags

In previous versions of GWT, including external JavaScript files via a module <script> tag required a nested JavaScript expression — called a script-ready function — that would determine when the script had been successfully loaded. Script load order is now handled automatically and these expressions are ignored. A warning will be issued in hosted mode. For reference, see here.

Additional Hosted Mode Checks Related to JSNI

Previously, when passing values from JavaScript into Java, hosted mode would silently coerce a JavaScript value of an incorrect type into the declared Java type. Unfortunately, this would allow code to work in hosted mode that could fail in unexpected ways in web mode. Hosted mode will now throw a HostedModeException if you try to pass an incompatible type. See here for more details.

Breaking API Changes

This release also includes API changes that may require minor tweaks to existing code. Any such changes that affect you should only take a few minutes to rectify.

Although subclassing JavaScriptObject is not supported, some people do so anyway at their own risk :) Please note that the existing (int) constructor has been removed in favor of a protected no-arg constructor. Read the source code for Element for an example of how JavaScriptObject must be subclassed now (that is, if subclassing were supported...which, of course, it isn't).

The add() method is deprecated in favor of addCommand() in order to support the new IncrementalCommand interface. Had we simply added a new method overload, existing code that passed in a null literal would have failed to compile.

The intended use and behavior of style names has been formalized in UIObject (and therefore in all widgets). All style names are now classified as “primary”, “secondary”, and “dependent” styles, the meanings of which are detailed in the UIObject documentation. The relevant method signatures remain unchanged (get/setStyleName(), add/removeStyleName()), and most widgets should be unaffected. One potentially breaking change, however, is that an exception is thrown if an attempt is made to remove the primary style name of a widget using removeStyleName(). See the UIObject documentation for a full explanation.

New Features

Here are a few of the coolest new features and enhancements in GWT 1.4.

Size and Speed Optimizations

New sizeimprovements in the GWT compiler produce JavaScript that is 10-20% smaller; just recompile your app with 1.4.

An enhanced startup sequence reduces the size of your module's startup script by 80%. More importantly, the new startup sequence removes an HTTP round-trip, making startup latency about 33% faster.

The above optimizations combined with ImageBundle, make it possible for GWT-based applications to load surprisingly quickly. To see for yourself, check out startup time of the Mail sample.

Deployment Enhancements

GWT RPC is no longer tied to exclusively to servlets. New modularized RPC server code makes it easy to connect GWT RPC to your choice of Java back-ends.

Adding GWT modules to an HTML page has been simplified. Instead of adding a <meta name='gwt:module'> and <script src='gwt.js'>, you just add a single script element for your module.

Cross-site script inclusion is now supported. The compiler produces a “-xs” (meaning “cross-site”) version of your module‘s startup script that can be included without being restricted by the same-origin policy. WARNING: including scripts from other sites that you don’t fully trust is a big security risk.

A new benchmarking subsystem integrates with JUnit to let you record and compare the speed of code snippets across multiple browsers and multiple parameter ranges. Benchmarking is a powerful way to identify bottlenecks and compare performance of alternative implementations.

The oft-requested java.io.Serializable is now included in the JRE emulation library and is synonymous with IsSerializable for the purpose of GWT RPC.

ImageBundle is the single biggest have-to-see-it-to-believe-it feature in this release. Image bundles make it trivially easy to combine dozens of images into a single “image strip”, collapsing what would have been dozens of HTTP requests into one: a single, permanently-cacheable image file.

Image bundles manage everything for you automatically, from computing clipping rectangles to making transparent PNGs work in IE6. You can even choose to get the clipped image as an Image widget or as pure HTML for inclusion in a larger HTML template.

In addition to enabling a blazing-fast startup, image bundles help make the UI look better during startup, too. Typical AJAX apps exhibit “bouncy relayout” as individual images are loaded one-at-a-time. Fixing this problem has historically required laboriously pre-initializing the width and height of each individual image ahead of time. Image bundles do the same thing automatically. The dimensions of each clipped image are computed at compile time while the bundled image file is being created. Voila! The result is a fast, non-ugly user startup experience that requires no extra work on the part of the GWT developer to keep up-to-date.

Release Notes for 1.3.1 (RC)

This is the Release Candidate for GWT 1.3, the first completely open source version of GWT. This version has no new functionality, but we did make a lot of changes to get the source code and build scripts into presentable shape to prepare for ongoing open source development. Although the changes were relatively harmless -- formatting, sorting, more documentation, and a new build system -- there‘s always a small chance of problems, so we plan to call this a Release Candidate until we’ve convinced ourselves it's reliable.

Useful Links

**Making GWT Better**This is our new GWT open source charter that describes how we plan to operate the project and how you can access the GWT source, compile it yourself, and contribute.

**The GWT Issue Tracker**Please report any bugs in 1.3 RC that weren't in 1.2.22 in the GWT issue tracker. These would be likely related to the new build, and we want to know ASAP so we can fix them.

Release Notes for 1.2.22

This is the official GWT 1.2 release, the follow up to the GWT 1.2 Release Candidate. It includes all of the enhancements and bug fixes from GWT 1.2 RC as well as a few additional bug fixes that were reported against GWT 1.2 RC.

About OS X Hosted Mode Support

GWT's hosted mode support is available only on OS X 1.4 (Tiger) or later.

**New HTTP request module**The HTTP functionality that GWT users have been asking for (custom headers, status code, timeouts, and more), all wrapped up in an API that's easier to use than the JavaScript XMLHttpRequest object

**Widgets in TreeItems**Tree items can now contain arbitrary widgets...finally, you can easily create trees with checkboxes :-)

gwt-servlet.jar Although you should continue to build against gwt-user.jar as always, you only need to deploy gwt-servlet.jar with your webapps; it contains the subset of gwt-user.jar you‘ll need to support RPC There are also a significant number of bug fixes from all the great feedback we’ve gotten from the developer forum. Please see the additional release notes for detailed information about other important changes in GWT since the previous release, including a few breaking API changes that we don't want to catch you off guard.

See the appendix of fixed issues for the nitty-gritty list of things that we have fixed in this release, including smaller issues.

Behavioral Changes

Important changes in the behavior of existing GWT features.

Module Source and Public Paths

In previous versions of GWT, source and public path inclusions were based on physical directory structure; only files physically located with the module would be included. Going forward, source and public path inclusions are based on logical package structure. Once a package has been included, any files in that package become visible no matter where they are physically located.

JUnit Modules

GWT test modules (that is, modules intended to run GWTTestCase-derived JUnit test cases) no longer need to inherit the com.google.gwt.junit.JUnit module. Additionally, it is no longer an error to declare entry points within a test module (they will be ignored when running under JUnit). Most test cases can now simply use the existing application module, which should simplify test case configuration.

Breaking API Changes

Based on user feedback, we've made a few API changes in this release that may require minor tweaks to your existing code when you upgrade. Any such changes that affect you should only take a few minutes to rectify.

com.google.gwt.user.client.ui.HasWidgets

We've moved add(), remove(), and clear() into this interface, so that any widget that can contain other widgets will be bound to this contract.

The add() method no longer returns a boolean. If a panel either cannot add a child widget without extra arguments, or cannot accept further widgets, it will throw an exception. This is in keeping with the fact that this is usually the result of an error in the code.

Its iterator is now required to support the remove() method.

com.google.gwt.user.client.ui.Composite

Composites must now call initWidget() in their constructors, rather than setWidget(). This is more indicative of its actual purpose, and also serves to clear up any confusion with SimplePanel's setWidget() method. Composite.setWidget() is now deprecated.

com.google.gwt.user.client.ui.SimplePanel and subclasses

We have added setWidget() to SimplePanel, which has more appropriate semantics for a panel that can contain only one child. The add() method is still present through the HasWidgets interface, but will fail if a widget is already present. This change is most likely to affect you if you use DialogBox or PopupPanel. To fix it, simply change your call to add() to setWidget() instead.

com.google.gwt.user.client.Cookies

Cookies.getCookie() is now static, as it should have been from the beginning. There is no need to instantiate this class now.

You can now set cookies as well!

Appendix: Complete List of Fixed Issues

The list of issues below is a short synopsis of all of the major and minor issues fixed in this release. See the online GWT issues database for the important common issues.

String.matches(regex) should exist and doesn't

Need a way to set individual List items selected/unselected (applies to multi-select listboxes)

DOM needs setBooleanAttribute, getBooleanAttribute.

HTMLTable.CellFormatter needs getStyleName() to match setStyleName().

FlexTable's internal widget map does not correctly adjust for the user inserting rows and cells.

Window.getTitle/setTitle should be static

characters in filenames cause compilation to fail.

DynaTable has incorrect HTML

Change Timer API to use int not long

In hosted mode JSNI, marshall Java longs as VT_R8

Popups are not always positioned properly on Safari.

SWT source inclusion is wrong.

Safari crashes on exit under some circumstances.

TreeLogger throws away exception info in console mode.

Window needs a private ctor

Phone home version checking should actually compare ordering of version number

Hosted Mode server throws IllegalArgumentException when system is set to non-english locale