# Google Web Toolkit Release Notes

- 1.7.1
- 1.7.0
- 1.6.4
- 1.6.3
- 1.6.2
- 1.5.3
- 1.5.2
- 1.5.1 (RC2)
- 1.5.0 (RC)
- 1.4.60
- 1.4.59 (RC2)
- 1.4.10 (RC)
- 1.3.3
- 1.3.1 (RC)
- 1.2.22
- 1.2.21 (RC)
- 1.1.10
- 1.1.0 (RC)
- 1.0.21

## 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

- Allow hosted mode using a 1.6 JRE with the -d32 flag (#3843, #3998)

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

### Fixed Issues

- Updated GWT libraries to support IE8 (#3558, #3329)
- Native exception in Node.is() (#3644)
- Incorrect firing of two click events from CheckBox and a related issue (#3508, #3679)
- Compiler java.lang.StackOverflowError if you don't use -Xss to set a stack size (#3510)
- Mouse wheel in FF3 (#2902)
- GWT outputs expressions too long for WebKit (#3455)
- java.sql.Date.valueOf error (#3731)
- Added a workaround for Firefox 3.5 regression (bugzilla #497780)

## Release Notes for 1.6.4

### Fixed Issues

- The classpath in the scripts created by junitCreator was updated to refer to `/war/WEB-INF/classes` rather than `/bin`.

## Release Notes for 1.6.3 (RC2)

### Fixed Issues

- Various servlet classpath issues introduced in 1.6.2 are resolved.
- JSP compilation should work out of the box in hosted mode.

## Release Notes for 1.6.2 (RC)

Please see What's new in GWT 1.6? (online)

## Release Notes for 1.5.3

### Fixed Issues

- RPC requests no longer fail on the embedded Android web browser
- Leaf `TreeItems` now line up with their non-leaf siblings
- Removing the last child node from a `TreeItem` no longer creates extra margins on the left
- `HTTPRequest` no longer uses POST instead of GET on some IE installs because of incorrect XHR selection
- Compiler now uses a more reliable check to prevent methods with local variables from being inlined
- `getAbsoluteTop()/Left()` can no longer return non-integral values
- `Time.valueOf()` no longer fails to parse `"08:00:00"` or incorrectly accepts `"0xC:0xB:0xA"`.

See the GWT issue tracker for the complete list of bug fixes and enhancements in this release.

## 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.
- Improved exception stack traces in hosted mode when JSNI stack frames are present.

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

See the GWT issue tracker for the complete list of bug fixes and enhancements in this release.

## 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
- Fixed some bugs associated with history support

See the GWT issue tracker for the complete list of bug fixes and enhancements in this release.

## 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

This release has only a couple of minor changes from 1.4.59.

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

### New Features

- DOM.eventGetCurrentEvent() now provides global access to the current Event object. (#1309)
- PopupPanel.setPopupPositionAndShow(PopupCallback callback) now provides now provides a simpler and bulletproof way to control the layout of popups. (#1120, #1243)
- The SuggestionHandler interface can be used to respond to the user selecting a suggstion in the SuggestBox. (#1086)
- Collection.toArray(Object[]) is now implemented. (#695)
- 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.
- Linux hosted mode should be less crashy. (#1105, #1281, #1358)
- An important discussion of HTTP headers, caching, and HTTPS has been added to the ImageBundle documentation. (#1172)
- PopupPanel.center() now causes the popup to be shown as well as centered. (#1120)
- RichTextArea underwent number of bugfixes and should be stable now. (#1130, #1214, #1276)
- New RPC warnings
  - 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)
- Panel.adopt(Widget, Element) and Panel.disown(Widget) have been deprecated. If you have subclassed Panel, please carefully review the new documentation for Panel.add(Widget) and Panel.remove(Widget) for details on the correct way to add and remove Widgets from Panels. (#1121)
- 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

See the GWT issue tracker for the complete list of bug fixes in this release.

## 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).
- Serializable equivalent to IsSerializable
  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.

#### JavaScriptObject

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

#### DeferredCommand

- 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 new addPause() method should be used instead of add(null).

#### UIObject

- 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 size improvements 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.
- Widget and Library Enhancements
  - RichTextArea allows "drop in" functionality for rich text editing.
  - SuggestBox makes it easy to add auto-complete functionality.
  - Splitters! HorizontalSplitPanel and VerticalSplitPanel enable you to resize portions of the user interface.
  - PushButton and ToggleButton are easy-to-customize button widgets that can enhance the look-and-feel of your UI.
  - DisclosurePanel is a simple, nice-looking panel that lets users easily hide and show portions of your application UI.
  - DateTimeFormat and NumberFormat make it easy to format and parse dates, times, and numbers for users all over the world.
  - IncrementalCommand helps you implement long-running tasks in your client code without triggering "slow script" warnings.
  - 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.
  - Mouse wheel events are now available on a variety of widgets.
- ImageBundle
  - 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.
  - See the doc section for more details.

See the GWT issue tracker for the complete list of enhancements in this release.

### Fixed Issues

See the GWT issue tracker for the complete list of bug fixes in this release.

## Release Notes for 1.3.3

This version has only minor functional changes from 1.3.1, listed below.

### Fixed Issues

- Issue #319 - Calling native super method in implementation class results in infinite loop in web mode
- Issue #496 - gwt.js in gwt-user.jar lacks Apache 2.0 license header
- Issue #497 - Unexpected internal compiler error - Analyzing permutation #1

## 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.
- The GWT Subversion Repository
  Visit the online repository to browse the GWT source without a Subversion client.

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

### Useful Links

- Changes included in GWT 1.2 since the RC
  Also see the GWT Blog for a discussion of the noteworthy issues related to 1.2 RC
- New features and bug fixes in GWT 1.2 RC

### Breaking API Changes

There are no breaking changes to pre-1.2 APIs, but one method has been renamed in a class that was new in 1.2 RC.

#### com.google.gwt.http.client.RequestBuilder

The method `addHeader()` was renamed to `setHeader()` to more clearly reflect its intent. You will only be affected by this change if you are using the new HTTP functionality available as of build 1.2.11.

## Release Notes for 1.2.11 (RC)

This is the Release Candidate for GWT 1.2. Between this build and the subsequent GWT 1.2 official release, changes are limited to issues unique to GWT 1.2 RC.

See the GWT issue tracker for the complete list of enhancements and bug fixes in this release.

### New Features

- Full support for OS X development
  Develop with GWT on OS X as easily as on Linux and Windows
- Much faster hosted mode
  Hosted mode startup time has improved significantly, but, even better, refreshes are now lightning fast — even when your source changes
- 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 :-)

## Release Notes for 1.1.10

### Fixed Issues

- Normalized behavior of GWT.getModuleBaseURL() with respect to hosted mode, web mode, RPC, and automatic resource injection [post #1, post #2, post #3]
- Clarified message in Grid class related to row/column out of bounds error [post]
- i18nCreator fixed to work with Java 5.0 [post]
- I18NSync (and therefore -i18n scripts) changed to replace dots with underscores when generating method names [post]
- Additional character escaping in JSON strings [post]
- Fixed bug calling toString() on nested JSON objects [post]
- Fixed bug that caused the default font size of text in a FocusPanel to be zero [post]
- Fixed TabPanel.insert() with asHTML argument [post]
- Popups and DialogBoxes no longer underlap lists and combos in IE6 [post]
- DialogBoxes can no longer be dragged beoynd the upper left corner of the browser window [post]
- Buttons inside of FormPanels no longer automatically submit on Firefox; this is still a problem some versions of Safari and Opera [post]
- TabPanel now sets the height of the internal DeckPanel to 100% to ensure all available space is used [post]
- Fixed bug in Mozilla that was causing DialogBox.onKeyPressPreview() to see key as 0 [post]
- DockPanel no longer lays out with a DeferredCommand; this makes it possible to correctly measure the size of PopupPanel [post]
- SimplePanel is no longer abstract
- Double click now fires correctly on IE6 [post]
- Fixed RPC bug that caused deserialization errors or infinite loops with self-referential object graphs [post]
- Fixed RPC bug that caused deserialization to fail on character arrays containing null characters [post]
- Serializable classes whose superclass is serialized by a custom field serializer are now correctly deserialized on the server
- Fixed bug related to FocusPanel that sometimes manifested during RPC async responses [post]
- Fixed bug in JUnit assertEquals() for floating point values (delta was not honored correctly) [post]
- Fixed internal compiler errors related to nested local subclasses, empty for loop expressions, and no-op unary plus operator. [post #1, post #2, post #3]
- Fixed infinite loop in Integer.toHexString() [post]
- Compiler now handling filesystem symbolic links in project structure [post]
- Fixed rare JVM crash in Windows hosted mode related to JSNI function pointers

## Release Notes for 1.1.0 (RC)

### New Features

- FileUpload widget
  The much-requested file upload widget
- FormPanel widget
  Easily submit traditional HTML forms from GWT apps
- RPC optimizations
  Client and server performance improvements and a more compact wire format
- Automatic Resource Injection
  Modules can contain references to external JavaScript and CSS files, causing them to be automatically loaded when the module itself is loaded
- Internationalization
  Easily localize strings and formatted messages
- XML classes
  An XML library based on the W3C DOM
- JSON classes
  JSON has moved into `gwt-user.jar`, and it's much faster than the sample that shipped with 1.0.21
- JUnit enhancements
  Unit tests are much, much faster than in 1.0.21, easier to configure, and you can now test asynchronous things like RPCs and timers
- Javadoc
  Now included for your convenience, with sample code fragments
- `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 Google Web Toolkit since the previous release, including a few breaking API changes that we don't want to catch you off guard.

### Fixed Issues

- Issue #4794724 - Servlet container problems due to gwt-user.jar including javax.servlet classes
- Issue #1676686 - Hosted mode problems in Windows 2000
- Issue #6606675 - ListBox and Image widgets are missing CSS style names
- Issue #5922226 - Casts from interface types to concrete class types can fail
- Issue #4137736 - Referencing an outer local from a field initializer causes NullPointerException
- Issue #2518888 - Problem with "return" statements in constructors
- Issue #9984353 - Hosted Mode server throws IllegalArgumentException when system is set to non-english locale
- Issue #3733199 - Shrinking Grid via resizeRows() leads to inconsistent state
- Issue #7659250 - Hosted mode on default Fedora Core 5 complains of missing libstdc++.so.5
- Issue #6531240 - Empty if, while, do, and for statements cause Compiler Error
- Issue #4927592 - Multiple initializations in for loop initializer causes internal compiler error.

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
- Trees have an unsightly 16-pixel left margin.
- SimplePanel.remove() broken.
- ScrollPanel doesn't implement SourcesScrollEvents.
- Make junit-web output to www dir
- Add "hidden" feature to ArgHandler system.
- JUnitShell could hang forever.
- 1.5 VM fails to run junit because StackTraceElement 0-arg constructor disappeared.
- Panel and ComplexPanel still have methods from old version of HasWidgets.
- Nested tables can fire events from the wrong one.
- Make sure JSNI refs to functions can be passed around and used as real function pointers.
- AbsolutePanel doesn't position its children consistently.
- JSONParser does not handle generic JSONValues in the encoded json string correctly; always assumes its a JSONObject
- Remove -notHeadless from GWTShell (only applies to GWTUnitTestShell)
- Number of results returned from split() differs in Java/JavaScript (see description)
- Helper scripts don't work for base package.
- Grid fails to update row count when removing.
- JSONString, toString does not enclose its characters in double quotes
- Selection issue when removing widgets from TabPanel.
- JSONParser always assumes root type is JSONObject
- ClassSourceFileComposer should not handle Class objects.
- Modules cannot supercede files from inherited modules
- Simple & ComplexPanel shouldn't implement getChildCount(), getChild(), etc.
- Negative byte values passed into JavaScript become positive
- The rpc servlet needs a thread-local HttpServletResponse to match the thread-local request.
- Appending char to a String behaves incorrectly.
- Remove STL dependency from gwt-ll
- Using xhtml doctype causes popups to be misplaced on Mozilla browsers.
- JsniInjector fails to match lines when there are Javadoc comments.
- Add whitelist bypass for hosted browser
- PopupPanel example is wrong.
- UIObject needs a title property.
- JSNI methods in local classes don't work in hosted mode.
- HashMap throws a JavaScript error under some circumstances.
- Source and Public module tags should be logical instead of physical.
- Document that module source and public tags are now logical rather than physical.
- Default .launch file fails to use project's full classpath.
- RemoteServiceServlet sends back HTTP 200 OK but no content under WebSphere.
- Widget.onLoad() is called too early sometimes.
- Is it really a good idea to have add(Widget) on Panel?
- Web-mode JUnit that reports via RPC
- Tree fires onTreeItemStateChanged twice.
- Make JSON APIs part of gwt-user.jar
- Async JUnit
- String.equalsIgnoreCase(null) throws exception in web mode
- Using a class literal for a pruned typed causes ICE
- Make all built-in implementations of HasWidgets.iterator() support remove().
- JSON is slow in Web mode
- StringBuffer uses string concatenation, and is n-squared as a result
- Identical Strings can compare false in web mode.
- Tweaks to the property provider environment to support locale and improve code uniformity b/w hosted and web mode
- Server-side serialization is unusably slow for large data sets
- Client side serialization is unusably slow for large datasets
- Format source for JUnitTestCaseStubGeneratorm, ServerSerializationStream
- MethodDispatch not working correctly on IE.
- JavaScriptObject rescuing is incomplete.
- Reduce RPC wire size by not quoting non-strings.
- Cyclic object graphs can be corrupted during deserialization on the server
- Test methods that throw checked exceptions cause the generated code to fail to compile
- Allow RemoteServiceResponse compression to be controlled by subclasses
- Startup timing bug makes RootPanel.get(id) throw an NPE
- Change whitelist/blacklist settings to be command-line switches rather than system properties
- KeyCode is always 0 for keypress events on Mozilla.
- Add Panel.remove(int) convenience method.
- File Upload Widget
- PopupPanel needs to deal better with being empty.
- CheckBox.setEnabled() has reversed sense.
- History tokens have problems with URL encoding.
- Loosen restriction on when DockPanel.CENTER child may be added.
- AbsolutePanel needs getWidgetLeft() and getWidgetTop().
- Decision: how should FlowPanel behave?
- Samples with composites need to call initWidget() instead of the deprecated setWidget().
- RootPanel.get(String) should not be clearing the div's contents.
- ListBox, Image, and Hyperlink are missing style names, despite doc
- Hyperlink.removeClickListener is broken.
- Don't allow tabs to word-wrap internally on TabPanel
- Turkish locale problem with the RPC generated code - probably affects others too
- StackPanel.add() totally screwy.
- Referencing a field that could cause static initialization fails to cause a side effect.

## Release Notes for 1.0.21

### Fixed Issues

- Issue #5823700 - GWT hosted mode does not work when IE 7 is installed
- Issue #8840603 - GWT applications do not run in IE 7
- Issue #3844117 - Cannot reference a final local variable from a deep inner class
- Issue #9157420 - Compiler reports errors for non-ASCII characters (UTF-8 not supported)
- Issue #1524429 - RPC exception due to empty strings
- Issue #6000056 - ArrayStoreException initializing multi-dimensional arrays
- Issue #3490506 - Tree widget remove() bug
- Issue #8201889 - Generated RPC proxy code fails to pull in String intrinsically
- Issue #1600857 - TabPanel getWidgetIndex() recursion
- Issue #2705290 - TabPanel widget does not remove tabs properly
- Issue #9377889 - TabBar method insertTab() not honoring 'asHTML' parameter
- Issue #4387606 - FlexTable and Grid issues