<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <title>Google Web Toolkit Release Notes</title>
      
      <style>
         body {
            background-color: white;
            color: black;
            font-family: Arial, sans-serif;
            font-size: small;
            margin: 20px;
         }

         li {
            margin-bottom: 0.5em;
         }

         li div {
            margin-top: 0.2em;
         }

         code {
            font-size: medium;
         }
      </style></head>

   <body>
      <h1>Google Web Toolkit Release Notes</h1>
      <ul>
        <li><a href="#Release_Notes_Current">@GWT_VERSION@</a></li>
        <li><a href="#Release_Notes_1_6_4">1.6.4</a></li>
        <li><a href="#Release_Notes_1_6_3">1.6.3</a></li>
        <li><a href="#Release_Notes_1_6_2">1.6.2</a></li>
        <li><a href="#Release_Notes_1_5_3">1.5.3</a></li>
        <li><a href="#Release_Notes_1_5_2">1.5.2</a></li>
        <li><a href="#Release_Notes_1_5_1">1.5.1 (RC2)</a></li>
        <li><a href="#Release_Notes_1_5_0">1.5.0 (RC)</a></li>
        <li><a href="#Release_Notes_1_4_60">1.4.60</a></li>
        <li><a href="#Release_Notes_1_4_59">1.4.59 (RC2)</a></li>
        <li><a href="#Release_Notes_1_4_10">1.4.10 (RC)</a></li>
        <li><a href="#Release_Notes_1_3_3">1.3.3</a></li>
        <li><a href="#Release_Notes_1_3_1">1.3.1 (RC)</a></li>
        <li><a href="#Release_Notes_1_2_22">1.2.22</a></li>
        <li><a href="#Release_Notes_1_2_11">1.2.21 (RC)</a></li>
        <li><a href="#Release_Notes_1_1_10">1.1.10</a></li>
        <li><a href="#Release_Notes_1_1_0">1.1.0 (RC)</a></li>
        <li><a href="#Release_Notes_1_0_21">1.0.21</a></li>
      </ul>

      <hr/>
      <a name="Release_Notes_Current"></a>
      <h2>Release Notes for @GWT_VERSION@</h2>
      <p>
        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 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).
      </p>
      <h3>Potentially breaking changes and fixes</h3>
      <ul>
        <li>
          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 <code>ie8</code> has been added for the <code>user.agent</code> deferred binding client property.
          If you have deferred binding rules (i.e. <code>&lt;replace-with&gt;</code> or <code>&lt;generate-with&gt;</code>) or property providers 
          that are sensitive to <code>user.agent</code>, you may need to update them to account for the <code>ie8</code> value. 
          For more information, see the <a href="http://code.google.com/p/google-web-toolkit/wiki/IE8Support">technical notes</a>.
        </li>
      </ul>

      <h3>Fixed Issues</h3>
      <ul>
        <li>
          Updated GWT libraries to support IE8 
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3558">#3558</a>, 
          <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3329">#3329</a>)
        </li>
        <li>Native exception in Node.is() (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3644">#3644</a>)</li>
        <li>
          Incorrect firing of two click events from CheckBox and a related issue 
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3508">#3508</a>,  
          <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3679">#3679</a>)
        </li>
        <li>Compiler java.lang.StackOverflowError if you don't use -Xss to set a stack size (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3510">#3510</a>)</li>
        <li>Mouse wheel in FF3 (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=2902">#2902</a>)</li>
        <li>GWT outputs expressions too long for WebKit (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3455">#3455</a>)</li>
        <li>java.sql.Date.valueOf error (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3731">#3731</a>)</li>
        <li>Added a workaround for Firefox 3.5 regression (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=497780">bugzilla #497780</a>)</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_6_4"></a>
      <h2>Release Notes for 1.6.4</h2>
      <h3>Fixed Issues</h3>
      <ul>
        <li>The classpath in the scripts created by junitCreator was updated to refer to <code>/war/WEB-INF/classes</code> rather than <code>/bin</code>.</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_6_3"></a>
      <h2>Release Notes for 1.6.3 (RC2)</h2>
      <h3>Fixed Issues</h3>
      <ul>
        <li>Various <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3496">servlet classpath issues</a> introduced in 1.6.2 are resolved.</li>
        <li>JSP compilation should work out of the box in hosted mode.</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_6_2"></a>
      <h2>Release Notes for 1.6.2 (RC)</h2>
      <p>
         Please see <a href="http://code.google.com/webtoolkit/doc/1.6/ReleaseNotes_1_6.html">What's new in GWT 1.6?</a> (online)
      </p>

      <hr/>
      <a name="Release_Notes_1_5_3"></a>
      <h2>Release Notes for 1.5.3</h2>
      <h3>Fixed Issues</h3>
      <ul>
        <li>RPC requests no longer fail on the embedded Android web browser</li>
        <li>Leaf <code>TreeItems</code> now line up with their non-leaf siblings</li>
        <li>Removing the last child node from a <code>TreeItem</code> no longer creates extra margins on the left</li>
        <li><code>HTTPRequest</code> no longer uses POST instead of GET on some IE installs because of incorrect XHR selection</li>
        <li>Compiler now uses a more reliable check to prevent methods with local variables from being inlined</li>
        <li><code>getAbsoluteTop()/Left()</code> can no longer return non-integral values</li>
        <li><code>Time.valueOf()</code> no longer fails to parse <code>"08:00:00"</code> or incorrectly accepts <code>"0xC:0xB:0xA"</code>.</li>
      </ul>
      <p>
        See the GWT issue tracker for
        <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%2CFixedNotReleased%20milestone%3A1_5_3&num=1000">
        the complete list of bug fixes and enhancements</a> in this release.
      </p>

      <hr/>
      <a name="Release_Notes_1_5_2"></a>
      <h2>Release Notes for 1.5.2</h2>
      <h3>Potentially breaking changes and fixes</h3>
      <ul>
        <li><code>History.onHistoryChanged()</code> has been added back (it was missing from 1.5 RC2) but is now deprecated.  Application startup should be handled by calling the new <code>History.fireCurrentHistoryState()</code>.</li>
        <li>Fields marked <code>final</code> 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 <code>final</code> and <code>transient</code> to avoid the warning.</li>
        <li>Instance methods on overlay types cannot be accessed from JSNI.  (This used to work in hosted mode, but failed at runtime in web mode.)</li>
        <li>The hosted mode server no longer serves <code>hosted.html</code> 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.</li>
      </ul>
      <h3>General Enhancements</h3>
      <ul>
        <li><code>Collections.unmodifiableSortedSet()</code> and <code>Collections.unmodifiableSortedMap()</code> are now implemented.</li>
        <li>The new <code>Accessibility</code> class enables widget authors to add ARIA support to their widgets.  Many GWT widgets come with ARIA support by default.</li>
        <li>Improved exception stack traces in hosted mode when JSNI stack frames are present.</li>
      </ul>
      <h3>Fixed Issues</h3>
      <ul>
        <li>Fixed the relationship between the coordinates returned by <code>Element.getAbsoluteLeft/Top()</code> and <code>Event.getClientX/Y()</code>.  <code>Document.getBodyOffsetLeft/Top()</code> can be used to account for the difference between these two coordinate systems.</li>
        <li><b>Ctrl-Z</b> should correctly perform an undo operation in RichTextArea on IE.</li>
      </ul>
      <p>
        See the GWT issue tracker for
        <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%2CFixedNotReleased%20milestone%3A1_5_Final&num=1000">
        the complete list of bug fixes and enhancements</a> in this release.
      </p>

      <hr/>
      <a name="Release_Notes_1_5_1"></a>
      <h2>Release Notes for 1.5.1 (RC2)</h2>
      <h3>Support for Standards Mode</h3>
      <p>
      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 <code>getAbsoluteLeft/Top()</code>) 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 <code>StackPanel</code> 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 <code>applicationCreator</code> defaults to quirks mode when creating a new GWT app.
      </p>
      <p>
      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.
      </p>
      <h3>Potentially breaking changes and fixes</h3>
      <ul>
        <li><code>DOM.eventGetClientX/Y()</code> now takes into account the margin and border of the body element</li>
        <li>In hosted mode, all <code>DOM.eventGetXXX()</code> 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.</li>
        <li>The return value of <code>DOM.eventGetXXX()</code> 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.</li>
        <li>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.</li>
        <li>Calls to <code>History.newItem()</code> now trigger an <code>onHistoryChanged()</code> event synchronously instead of asynchronously</li>
      </ul>
      <h3>General Enhancements</h3>
      <ul>
        <li>Added support for the <code>contextmenu</code> event, which allows users to detect and override the browser's default context menu</li>
        <li>Improved performance of <code>NumberFormat</code></li>
        <li>Added support for altering the number of decimals in a currency in <code>NumberFormat</code></li>
        <li>Improved performance of Animations</li>
        <li>Improved the appearance of the default GWT style themes</li>
        <li>Improved the Showcase sample with more robust examples and more language translations</li>
        <li><code>FormPanel</code> can now wrap an existing form and still submit it to a hidden iframe</li>
      </ul>
      <h3>Fixed Issues</h3>
      <ul>
        <li><code>DOM.getAbsoluteLeft/Top()</code> and <code>DOM.eventGetClientX/Y()</code> no longer log an exception to the console in Firefox 3</li>
        <li>Fixed a memory leak in Internet Explorer</li>
        <li><code>DOM.getAbsoluteLeft/Top()</code> now takes into account the margin and border of the target element in Safari 3</li>
        <li>Fixed some bugs associated with history support</li>
      </ul>
      <p>
        See the GWT issue tracker for
        <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_5_RC2%20type%3Adefect&num=1000">
        the complete list of bug fixes and enhancements</a> in this release.
      </p>

      <hr/>
      <a name="Release_Notes_1_5_0"></a>
      <h2>Release Notes for 1.5.0 (RC)</h2>
      <p>
      This release candidate is, in a word, huge. Rather than including all the details here, please see <a href="http://code.google.com/docreader/#p(google-web-toolkit-doc-1-5)t(Whatsnewin15)">What's New in GWT 1.5?</a> 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!
      </p>

      <hr/>
      <a name="Release_Notes_1_4_60"></a>
      <h2>Release Notes for 1.4.60</h2>
      <p>
      This release has only a couple of minor changes from <a href="#Release_Notes_1_4_59">1.4.59</a>.
      </p>
      <ul>
        <li>Fixed a bug in the benchmarking that prevented source code from showing up in reports.</li>
        <li>Fixed a bug in the hosted mode servlet context emulation where getResource() would fail to
        find a file in a module's public path.</li>
        <li>Compiler output files of the form <code><i>module</i>.cache.html</code> 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.</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_4_59"></a>
      <h2>Release Notes for 1.4.59 (RC2)</h2>
      <p>
      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 <a href="#Release_Notes_1_4_10">release notes for 1.4.10</a> first.
      </p>

      <h3>New Features</h3>
      <ul>
        <li><a href="doc/html/com.google.gwt.user.client.DOM.html#eventGetCurrentEvent()">DOM.eventGetCurrentEvent()</a> now provides
        global access to the current Event object. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1309">#1309</a>)</li>
        <li><a href="doc/html/com.google.gwt.user.client.ui.PopupPanel.html#setPopupPositionAndShow(com.google.gwt.user.client.ui.PopupPanel.PositionCallback)">PopupPanel.setPopupPositionAndShow(PopupCallback callback)</a>
        now provides now provides a simpler and bulletproof way to control the layout of popups. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1120">#1120</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1243">#1243</a>)</li>
        <li>The <a href="doc/html/com.google.gwt.user.client.ui.SuggestionHandler.html">SuggestionHandler</a> interface
        can be used to respond to the user selecting a suggstion in the 
        <a href="doc/html/com.google.gwt.user.client.ui.SuggestBox.html">SuggestBox</a>. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1086">#1086</a>)</li>
        <li><a
          href="doc/html/java.util.Collection.html">Collection.toArray(Object[])</a>
        is now implemented. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=695">#695</a>)</li>
        <li>If you have it installed, <a href="http://gears.google.com/">Google Gears</a> is now accessible in hosted mode
        (Windows only). (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1252">#1252</a>)</li>
      </ul>

      <h3>General Changes</h3>
      <ul>
        <li>Startup is now faster and more reliable. In particular,
        <a href="doc/html/com.google.gwt.core.client.EntryPoint.html#onModuleLoad()">onModuleLoad()</a> 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.</li>
        <li>Linux hosted mode should be less crashy. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1105">#1105</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1281">#1281</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1358">#1358</a>)</li>
        <li>An important discussion of HTTP headers, caching, and HTTPS has been added to the 
        <a
          href="doc/html/com.google.gwt.user.client.ui.ImageBundle.html">ImageBundle</a>
        documentation. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1172">#1172</a>)</li>
        <li><a href="doc/html/com.google.gwt.user.client.ui.PopupPanel.html#center()">PopupPanel.center()</a> now causes
        the popup to be shown as well as centered. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1120">#1120</a>)</li>
        <li><a href="doc/html/com.google.gwt.user.client.ui.RichTextArea.html">RichTextArea</a> underwent number of
        bugfixes and should be stable now. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1130">#1130</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1214">#1214</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1276">#1276</a>)</li>
        <li>New <a href="doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html">RPC</a> warnings
          <ul>
            <li>Warn if a non-checked exception is used in the throws clause of a RemoteService method.</li>
            <li>Warn if no concrete, serializable subclasses can be found for a given type declared in a
            RemoteService interface.</li>
          </ul>
        </li>
        <li><a href="doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html">RPC</a> 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 <code>.gwt.rpc</code>.  This file must be deployed to your web
        server as a public resource, accessible from a 
        <a href="doc/html/com.google.gwt.user.server.rpc.RemoteServiceServlet.html">RemoteServiceServlet</a>
        via <code>ServletContext.getResource()</code>.  If
        it is not deployed properly, RPC will run in 1.3.3 compatibility mode and refuse to serialize types implementing
        <a href="doc/html/java.io.Serializable.html">Serializable</a>. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1297">#1297</a>)</li>
        <li><a href="doc/html/com.google.gwt.user.client.ui.Panel.html#adopt(com.google.gwt.user.client.ui.Widget,%20com.google.gwt.user.client.Element)">Panel.adopt(Widget, Element)</a>
        and
        <a href="doc/html/com.google.gwt.user.client.ui.Panel.html#disown(com.google.gwt.user.client.ui.Widget)">Panel.disown(Widget)</a>
        have been deprecated.  If you have subclassed Panel, please carefully review the new documentation for
        <a href="doc/html/com.google.gwt.user.client.ui.Panel.html#add(com.google.gwt.user.client.ui.Widget)">Panel.add(Widget)</a>
        and
        <a href="doc/html/com.google.gwt.user.client.ui.Panel.html#remove(com.google.gwt.user.client.ui.Widget)">Panel.remove(Widget)</a>
        for details on the correct way to add and remove Widgets from Panels.
        (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1121">#1121</a>)</li>
        <li>The benchmark viewer application is now faster, prettier, and a bit
        more user friendly.</li>
      </ul>

      <h3>Retractions from 1.4.10</h3>
      <ul>
        <li>Breaking changes to the semantics of
        <a href="doc/html/com.google.gwt.user.client.ui.UIObject.html#setStyleName(java.lang.String)">UIObject.setStyleName()</a>
        have been backed out.  All changes relative to 1.3.3 should now be
        backwards-compatible. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1079">#1079</a>)</li>
        <li>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. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1105">#1105</a>)</li>
        <li>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. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1161">#1161</a>)</li>
        <li>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. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1163">#1163</a>)</li>
        <li>A potentially breaking change to event bubbling in 1.4.10 has been
        backed out in favor of the 1.3.3 behavior. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1159">#1159</a>)</li>
      </ul>

      <h3>Fixed Issues</h3>
      <p>
      See the GWT issue tracker for
      <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_4_RC2%20type%3Adefect&num=1000">the
      complete list of bug fixes</a> in this release.</p>

      <hr/>
      <a name="Release_Notes_1_4_10"></a>
      <h2>Release Notes for 1.4.10 (RC)</h2>
      <p>
      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!
      </p>

      <h3>Behavioral Changes</h3>
      <p>Important changes in the behavior of existing GWT features.</p>
      <h4>Critical Changes to RPC</h4>
      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.
      <ul>
        <li><b>Bad code that happened to work before might not now</b><br/>
        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).
        </li>
        <li><b><a href="doc/html/java.io.Serializable.html">Serializable</a> equivalent to
        <a href="doc/html/com.google.gwt.user.client.rpc.IsSerializable.html">IsSerializable</a></b><br/>
        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.
        </li>
        <li><b>Warn about missing gwt.typeArgs</b><br/>
        Every Collection or Map type should have an associated
        <a href="doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.SerializableTypes.html">gwt.typeArgs
        javadoc annotation</a>.  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 <b>significant</b>
        reduction in the size of your compiled output by fixing these warnings.
        </li>
        <li><b>Warn about serializable subclasses that violate the serialization restrictions</b><br/>
        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.
        </li>
        <li><b>Warn about non-transient, final instance fields</b><br/>
        RPC has never actually serialized <code>final</code> instance fields, but now it explicitly warns about the existence of such fields unless they are also <code>transient</code>.  
        Thus, the warning can be addressed by making <code>final</code> instance fields <code>transient</code> as well, or it can be suppressed via a module property.
        </li>
        <li><b>Warn about local and non-static nested types that implement IsSerializable or Serializable</b><br/>
        RPC has never serialized these kinds of classes and will now generate a warning.
        </li>
        <li><b>Warn about native methods in serializable classes</b><br/>
        Attempting to serialize classes that contain <code>native</code> methods will cause UnsatisfiedLinkErrors if such methods are called in server-side code.
        </li>
      </ul>
      <h4>Module Script Tags</h4>
      <ul>
        <li>In previous versions of GWT, including external JavaScript files via a module &lt;script&gt; tag required a nested JavaScript expression &mdash; called a <i>script-ready function</i> &mdash; 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
        <a href="doc/html/com.google.gwt.doc.DeveloperGuide.Fundamentals.Modules.AutomaticResourceInjection.html">here</a>.
        </li>
      </ul>
      <h4>Additional Hosted Mode Checks Related to JSNI</h4>
      <ul>
        <li>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
        <a href="doc/html/com.google.gwt.doc.DeveloperGuide.JavaScriptNativeInterface.Marshaling.html">here</a>
        for more details.
        </li>
      </ul>

      <h3>Breaking API Changes</h3>
      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.

      <h4><a href="doc/html/com.google.gwt.core.client.JavaScriptObject.html">JavaScriptObject</a></h4>
      <ul>
        <li>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
        <a href="doc/html/com.google.gwt.user.client.Element.html">Element</a> for an example of how JavaScriptObject must
        be subclassed now (that is, if subclassing were supported...which, of course, it isn't).
        </li>
      </ul>
      <h4><a href="doc/html/com.google.gwt.user.client.DeferredCommand.html">DeferredCommand</a></h4>
      <ul>
        <li>The add() method is deprecated in favor of addCommand() in order to support the new
        <a href="doc/html/com.google.gwt.user.client.IncrementalCommand.html">IncrementalCommand</a> interface.  Had we
        simply added a new method overload, existing code that passed in a null literal would have failed to compile.</li>
        <li>The new addPause() method should be used instead of add(null).</li>
      </ul>
      <h4><a href="doc/html/com.google.gwt.user.client.ui.UIObject.html">UIObject</a></h4>
      <ul>
        <li>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.</li>
      </ul>

      <h3>New Features</h3>
      Here are a few of the coolest new features and enhancements in GWT 1.4.
      <ul>
        <li><b>Size and Speed Optimizations</b><ul>
           <li>New <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=610">size</a>
           <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=599">improvements</a> in the GWT compiler
           produce JavaScript that is 10-20% smaller; just recompile your app with 1.4.</li>
           <li>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.</li>
           <li>The above optimizations combined with <a href="#ImageBundle">ImageBundle</a>, make it possible for GWT-based applications
           to load surprisingly quickly. To see for yourself, check out startup time of the
           <a href="samples/Mail/www/com.google.gwt.sample.mail.Mail/Mail.html">Mail</a> sample.</li>
        </ul></li>
        <li><b>Deployment Enhancements</b><ul>
           <li>GWT RPC is no longer tied to exclusively to servlets. New
           <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=389">modularized RPC</a> server code makes
           it easy to connect GWT RPC to your choice of Java back-ends.</li>
           <li>Adding GWT modules to an HTML page has been simplified. Instead of adding a &lt;meta name='gwt:module'&gt; and
           &lt;script src='gwt.js'&gt;, you just add a single script element for your module.</li>
           <li>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
           <a href="http://groups.google.com/group/Google-Web-Toolkit/web/security-for-gwt-applications">big security risk</a>.</li>
        </ul></li>
        <li><b>Widget and Library Enhancements</b><ul>
           <li><a href="doc/html/com.google.gwt.user.client.ui.RichTextArea.html">RichTextArea</a> allows "drop in"
           functionality for rich text editing.</li>
           <li><a href="doc/html/com.google.gwt.user.client.ui.SuggestBox.html">SuggestBox</a> makes it easy to add
           auto-complete functionality.</li>
           <li>Splitters! <a href="doc/html/com.google.gwt.user.client.ui.HorizontalSplitPanel.html">HorizontalSplitPanel</a>
           and <a href="doc/html/com.google.gwt.user.client.ui.VerticalSplitPanel.html">VerticalSplitPanel</a> enable you to
           resize portions of the user interface.</li>
           <li><a href="doc/html/com.google.gwt.user.client.ui.PushButton.html">PushButton</a> and
           <a href="doc/html/com.google.gwt.user.client.ui.ToggleButton.html">ToggleButton</a> are easy-to-customize button
           widgets that can enhance the look-and-feel of your UI.</li>
           <li><a href="doc/html/com.google.gwt.user.client.ui.DisclosurePanel.html">DisclosurePanel</a> is a simple,
           nice-looking panel that lets users easily hide and show portions of your application UI.</li>
           <li><a href="doc/html/com.google.gwt.i18n.client.DateTimeFormat.html">DateTimeFormat</a> and
           <a href="doc/html/com.google.gwt.i18n.client.NumberFormat.html">NumberFormat</a> make it easy to format and parse
           dates, times, and numbers for users all over the world.</li>
           <li><a href="doc/html/com.google.gwt.user.client.IncrementalCommand.html">IncrementalCommand</a> helps you
           implement long-running tasks in your client code without triggering "slow script" warnings.</li>
           <li>A new <a href="http://docs.google.com/View?docid=d9s6nb7_1d723ft">benchmarking subsystem</a> 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.</li>
           <li>The oft-requested <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=21">java.io.Serializable</a> is
           now included in the JRE emulation library and is synonymous with IsSerializable for the purpose of GWT RPC.</li>
           <li><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=844">Mouse wheel events</a> are now available
           on a variety of widgets.</li>
        </ul></li>
        <a name="ImageBundle"></a>
        <li><b><a href="doc/html/com.google.gwt.user.client.ui.ImageBundle.html">ImageBundle</a></b><ul>
           <li>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.</li>
           <li>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.</li>
           <li>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.</li>
           <li>See the <a href="doc/html/com.google.gwt.doc.DeveloperGuide.UserInterface.ImageBundles.html">doc section</a> for more
           details.</li>
        </ul></li>
      </ul>
      
      <p>
      See the GWT issue tracker for
      <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_4_RC%20type%3Aenhancement&num=1000">the
      complete list of enhancements</a> in this release.</p>
 
      <h3>Fixed Issues</h3>
      <p>
      See the GWT issue tracker for
      <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_4_RC%20type%3Adefect&num=1000">the
      complete list of bug fixes</a> in this release.</p>

      <hr/>
      <a name="Release_Notes_1_3_3"></a>
      <h2>Release Notes for 1.3.3</h2>
      <p>
      This version has only minor functional changes from 1.3.1, listed below.
      </p>

      <h3>Fixed Issues</h3>
      <ul>
        <li><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=319">Issue #319 - Calling native super method in implementation class results in infinite loop in web mode</a></li>
        <li><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=496">Issue #496 - gwt.js in gwt-user.jar lacks Apache 2.0 license header</a></li>
        <li><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=497">Issue #497 - Unexpected internal compiler error - Analyzing permutation #1</a></li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_3_1"></a>
      <h2>Release Notes for 1.3.1 (RC)</h2>
      <p>
      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.
      </p>

      <h3>Useful Links</h3>
      <ul>
        <li><b><a href="http://code.google.com/webtoolkit/makinggwtbetter.html">Making GWT Better</a></b>
        <br>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.</li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/list">The GWT Issue Tracker</a></b>
        <br>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.</li>
        <li><b><a href="http://google-web-toolkit.googlecode.com/svn/">The GWT Subversion Repository</a></b>
        <br>Visit the online repository to browse the GWT source without a Subversion client.</li>
      </ul>
      
      <hr/>
      <a name="Release_Notes_1_2_22"></a>
      <h2>Release Notes for 1.2.22</h2>
      <p>
      This is the official GWT 1.2 release, the follow up to the <a href="#Release_Notes_1_2_11">GWT 1.2 Release Candidate</a>.
      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.</p>
      
      <h3>About OS X Hosted Mode Support</h3>
      GWT's hosted mode support is available only on OS X 1.4 (Tiger) or later.

      <h3>Useful Links</h3>
      <ul>
        
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_2_Final">Changes included in GWT 1.2 since the RC</a></b>
        <br>Also see the GWT Blog for a discussion of the <a href="http://googlewebtoolkit.blogspot.com/2006/11/wrapping-up-gwt-12-soon.html">noteworthy issues related to 1.2 RC</a></li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_2_RC">New features and bug fixes in GWT 1.2 RC</a></b></li>
      </ul>
      
      <h3>Breaking API Changes</h3>
      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.
      
      <h4>com.google.gwt.http.client.RequestBuilder</h4>
      The method <code>addHeader()</code> was renamed to <code>setHeader()</code> 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.

      <hr/>
      <a name="Release_Notes_1_2_11"></a>
      <h2>Release Notes for 1.2.11 (RC)</h2>
      <p>
      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.
      
      <p>
      See the GWT issue tracker for <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_2_RC">the complete list of enhancements and bug fixes</a> in this release.</p>
      
      <h3>New Features</h3>
      <ul>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=91">Full support for OS X development</a></b>
        <br>Develop with GWT on OS X as easily as on Linux and Windows</li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=93">Much faster hosted mode</a></b>
        <br>Hosted mode startup time has improved significantly, but, even better, refreshes are now lightning fast &mdash; even when your source changes</li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=52">New HTTP request module</a></b>
        <br>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</li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=10">Widgets in TreeItems</a></b>
        <br>Tree items can now contain arbitrary widgets...finally, you can easily create trees with checkboxes :-)</li>
      </ul>
      </p>
      
      <hr/>
      <a name="Release_Notes_1_1_10"></a>
      <h2>Release Notes for 1.1.10</h2>
      <p/>
      <h3>Fixed Issues</h3>
      <ul>
        <li>Normalized behavior of GWT.getModuleBaseURL() with respect to hosted mode, web mode, RPC, and automatic resource injection
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/6c2b23e90008b6b9">post #1</a>,
         <a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/1bb47f2cff671ef0">post #2</a>,
         <a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3408c38464c57d4a">post #3</a>]
        </li>
        <li>Clarified message in Grid class related to row/column out of bounds error
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/e5e130cba766d126">post</a>]
        </li>
        <li>i18nCreator fixed to work with Java 5.0
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3b6452a068ebec63">post</a>]
        </li>
        <li>I18NSync (and therefore -i18n scripts) changed to replace dots with underscores when generating method names
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/6a4e05beb094a5a2">post</a>]
        </li>
        <li>Additional character escaping in JSON strings
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/5f437d12ba83fff0">post</a>]
        </li>
        <li>Fixed bug calling toString() on nested JSON objects
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/ee81aa5411dece71">post</a>]
        </li>
        <li>Fixed bug that caused the default font size of text in a FocusPanel to be zero
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/2f5abf147c5550c4">post</a>]
        </li>
        <li>Fixed TabPanel.insert() with asHTML argument
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/8f427dbe76ce2c49/">post</a>]
        </li>
        <li>Popups and DialogBoxes no longer underlap lists and combos in IE6
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/6815ec29d2c404e2">post</a>]
        </li>
        <li>DialogBoxes can no longer be dragged beoynd the upper left corner of the browser window
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/28390f32c42f7940">post</a>]
        </li>
        <li>Buttons inside of FormPanels no longer automatically submit on Firefox; this is still a problem some versions of Safari and Opera
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/72bea3a6d4feeaeb">post</a>]
        </li>
        <li>TabPanel now sets the height of the internal DeckPanel to 100% to ensure all available space is used
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/4cd09f04bc515696">post</a>]
        </li>
        <li>Fixed bug in Mozilla that was causing DialogBox.onKeyPressPreview() to see key as 0
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/8147b4b219a8fbc7">post</a>]
        </li>
        <li>DockPanel no longer lays out with a DeferredCommand; this makes it possible to correctly measure the size of PopupPanel
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/7bbb89e4c97ae1e6">post</a>]
        </li>
        <li>SimplePanel is no longer abstract
        </li>
        <li>Double click now fires correctly on IE6
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/2d16242dc7fb830f">post</a>]
        </li>
        <li>Fixed RPC bug that caused deserialization errors or infinite loops with self-referential object graphs
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/2a8658e93e2a8de3">post</a>]
        </li>
        <li>Fixed RPC bug that caused deserialization to fail on character arrays containing null characters
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/f60f5d5552a3d26b">post</a>]
        </li>
        <li>Serializable classes whose superclass is serialized by a custom field serializer are now correctly deserialized on the server
        </li>
        <li>Fixed bug related to FocusPanel that sometimes manifested during RPC async responses
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/edd16ede4f891db8">post</a>]
        </li>
        <li>Fixed bug in JUnit assertEquals() for floating point values (delta was not honored correctly)
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/b0e06cc253915b86">post</a>]
        </li>
        <li>Fixed internal compiler errors related to nested local subclasses, empty for loop expressions, and no-op unary plus operator.
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/d8ecf70acc4e5b0e">post #1</a>,
         <a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/4da8dcbab9479a80">post #2</a>,
         <a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/a9f17bf30d0116b">post #3</a>]
        </li>
        <li>Fixed infinite loop in Integer.toHexString()
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3f9c3f4df08fb523">post</a>]
        </li>
        <li>Compiler now handling filesystem symbolic links in project structure
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/1597c73888d1acd9">post</a>]
        </li>
        <li>Fixed rare JVM crash in Windows hosted mode related to JSNI function pointers
        </li>
      </ul>
      
      <hr/>
      <a name="Release_Notes_1_1_0"></a>
      <h2>Release Notes for 1.1.0 (RC)</h2>
      <p/>
      <h3>New Features</h3>
      <ul>
        <li><b><a href="doc/html/com.google.gwt.user.client.ui.FileUpload.html">FileUpload widget</a></b><br>The much-requested file upload widget
        </li><li><b><a href="doc/html/com.google.gwt.user.client.ui.FormPanel.html">FormPanel widget</a></b><br>Easily submit traditional HTML forms from GWT apps
        </li><li><b><a href="doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html">RPC optimizations</a></b><br>Client and server performance improvements and a more compact wire format
        </li><li><b><a href="doc/html/com.google.gwt.doc.DeveloperGuide.Fundamentals.Modules.AutomaticResourceInjection.html">Automatic Resource Injection</a></b><br>Modules can contain references to external JavaScript and CSS files, causing them to be automatically loaded when the module itself is loaded
        </li><li><b><a href="doc/html/com.google.gwt.doc.DeveloperGuide.Internationalization.html">Internationalization</a></b><br>Easily localize strings and formatted messages
        </li><li><b><a href="doc/html/com.google.gwt.xml.client.html">XML classes</a></b><br>An XML library based on the W3C DOM
        </li><li><b><a href="doc/html/com.google.gwt.json.client.html">JSON classes</a></b><br>JSON has moved into <code>gwt-user.jar</code>, and it's much faster than the sample that shipped with 1.0.21
        </li><li><b><a href="doc/html/com.google.gwt.doc.DeveloperGuide.JUnitIntegration.html">JUnit enhancements</a></b><br>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
        </li><li><b><a href="doc/javadoc/index.html">Javadoc</a></b><br>Now included for your convenience, with sample code fragments
        </li><li><b><code>gwt-servlet.jar</code></b><br>Although you should continue to build against <code>gwt-user.jar</code> as always, 
        you only need to deploy <code>gwt-servlet.jar</code> with your webapps; it contains the subset of <code>gwt-user.jar</code> you'll need to support RPC
      </li></ul>
         There are also a significant number of bug fixes from all the great feedback we've gotten from the developer forum. 
         Please see the <a href="#Release_Notes">additional release notes</a> 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.
      </p>
      
      <h3>Fixed Issues</h3>
      <ul>
        <li><a href="http://code.google.com/webtoolkit/issues/4794724.html">Issue #4794724 - Servlet container problems due to gwt-user.jar including javax.servlet classes</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/1676686.html">Issue #1676686 - Hosted mode problems in Windows 2000</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/6606675.html">Issue #6606675 - ListBox and Image widgets are missing CSS style names</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/5922226.html">Issue #5922226 - Casts from interface types to concrete class types can fail</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/4137736.html">Issue #4137736 - Referencing an outer local from a field initializer causes NullPointerException</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/2518888.html">Issue #2518888 - Problem with "return" statements in constructors</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/9984353.html">Issue #9984353 - Hosted Mode server throws IllegalArgumentException when system is set to non-english locale</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/3733199.html">Issue #3733199 - Shrinking Grid via resizeRows() leads to inconsistent state</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/7659250.html">Issue #7659250 - Hosted mode on default Fedora Core 5 complains of missing libstdc++.so.5</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/6531240.html">Issue #6531240 - Empty if, while, do, and for statements cause Compiler Error</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/4927592.html">Issue #4927592 - Multiple initializations in for loop initializer causes internal compiler error.</a></li>
      </ul>

      <p>See the <a href="#Appendix">appendix of fixed issues</a> for the nitty-gritty list of things that we have fixed in this release, including smaller issues.</p>

      <h3>Behavioral Changes</h3>
      <p>Important changes in the behavior of existing GWT features.</p>
      <h4>Module Source and Public Paths</h4>
      <ul>
        <li>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.
        </li>
      </ul>
      <h4>JUnit Modules</h4>
      <ul>
        <li>GWT test modules (that is, modules intended to run GWTTestCase-derived JUnit test cases) no longer
        need to inherit the <code>com.google.gwt.junit.JUnit</code> 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.
        </li>
      </ul>

      <h3>Breaking API Changes</h3>
      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.

      <h4>com.google.gwt.user.client.ui.HasWidgets</h4>
      <ul>
        <li>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.</li>
        <li>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.</li>
        <li>Its iterator is now required to support the remove() method.</li>
      </ul>
      <h4>com.google.gwt.user.client.ui.Composite</h4>
      <ul>
        <li>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.</li>
      </ul>
      <h4>com.google.gwt.user.client.ui.SimplePanel and subclasses</h4>
      <ul>
        <li>
        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. 
        </li>
      </ul>
      <h4>com.google.gwt.user.client.Cookies</h4>
      <ul>
        <li>Cookies.getCookie() is now static, as it should have been from the beginning.  There is no need to instantiate this class now.</li>
        <li>You can now set cookies as well!</li>
      </ul>

      <a name="Appendix"></a>
      <h3>Appendix: Complete List of Fixed Issues</h3>

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

      <hr/>
      <a name="Release_Notes_1_0_21"></a>
      <h2>Release Notes for 1.0.21</h2>
      <p/>
      <h3>Fixed Issues</h3>
      <ul>
         <li><a href='http://code.google.com/webtoolkit/issues/5823700.html'>Issue #5823700 - GWT hosted mode does not work when IE 7 is installed</a>
         <li><a href='http://code.google.com/webtoolkit/issues/8840603.html'>Issue #8840603 - GWT applications do not run in IE 7</a>
         <li><a href='http://code.google.com/webtoolkit/issues/3844117.html'>Issue #3844117 - Cannot reference a final local variable from a deep inner class</a>
         <li><a href='http://code.google.com/webtoolkit/issues/9157420.html'>Issue #9157420 - Compiler reports errors for non-ASCII characters (UTF-8 not supported)</a>
         <li><a href='http://code.google.com/webtoolkit/issues/1524429.html'>Issue #1524429 - RPC exception due to empty strings</a>
         <li><a href='http://code.google.com/webtoolkit/issues/6000056.html'>Issue #6000056 - ArrayStoreException initializing multi-dimensional arrays</a>
         <li><a href='http://code.google.com/webtoolkit/issues/3490506.html'>Issue #3490506 - Tree widget remove() bug</a>
         <li><a href='http://code.google.com/webtoolkit/issues/8201889.html'>Issue #8201889 - Generated RPC proxy code fails to pull in String intrinsically</a>
         <li><a href='http://code.google.com/webtoolkit/issues/1600857.html'>Issue #1600857 - TabPanel getWidgetIndex() recursion</a>
         <li><a href='http://code.google.com/webtoolkit/issues/2705290.html'>Issue #2705290 - TabPanel widget does not remove tabs properly</a>
         <li><a href='http://code.google.com/webtoolkit/issues/9377889.html'>Issue #9377889 - TabBar method insertTab() not honoring 'asHTML' parameter</a>
         <li><a href='http://code.google.com/webtoolkit/issues/4387606.html'>Issue #4387606 - FlexTable and Grid issues</a>
      </ul>
   </body></html>
