#existing API

name_old gwt1462userApi
#sourceFiles and excludedFiles are specified as colon-separated list of files
sourceFiles_old @OLDROOT@/dev/core/super/com/google/gwt/dev/jjs/intrinsic:@OLDROOT@/user/super/com/google/gwt/emul:@OLDROOT@/user/src/com/google/gwt/core/client:@OLDROOT@/user/src/com/google/gwt/user/client:@OLDROOT@/user/src/com/google/gwt/http/client:@OLDROOT@/user/com/google/gwt/i18n
excludedFiles_old @OLDROOT@/user/com/google/gwt/benchmarks

##############################################
#new Api

name_new gwt15userApi
#sourceFiles and excludedFiles are specified as colon-separated list of files
#works with GWT 1.5 Milestone 2, revision 2415
sourceFiles_new ./dev/core/super/com/google/gwt/dev/jjs/intrinsic:./user/super/com/google/gwt/emul:./user/src/com/google/gwt/core/client:./user/src/com/google/gwt/user/client:./user/src/com/google/gwt/http/client:./user/src/com/google/gwt/dom:./user/src/com/google/gwt/i18n
excludedFiles_new ./user/src/com/google/gwt/benchmarks:./user/src/com/google/gwt/i18n/rebind:./user/src/com/google/gwt/i18n/tools


##############################################
#Api  whitelist
# when adding to the white-list, include comments as to why the addition is
# being made. This needs to be done for this initial white-list below

  package com.google.gwt.core.client
    class com.google.gwt.core.client.JavaScriptObject
      com.google.gwt.core.client.JavaScriptObject::hostedModeReference MISSING
      com.google.gwt.core.client.JavaScriptObject::equals(Ljava/lang/Object;) FINAL_ADDED
      com.google.gwt.core.client.JavaScriptObject::hashCode() FINAL_ADDED
      com.google.gwt.core.client.JavaScriptObject::toString() FINAL_ADDED
  package com.google.gwt.lang
    class com.google.gwt.lang.Array
      com.google.gwt.lang.Array::Array(IIILjava/lang/String;) MISSING
      com.google.gwt.lang.Array::clonify([Ljava/lang/Object;I) MISSING
      com.google.gwt.lang.Array::initDims(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;) MISSING
      com.google.gwt.lang.Array::initValues(Ljava/lang/String;IILjava/lang/Object;) MISSING
  package com.google.gwt.user.client
    class com.google.gwt.user.client.Element
      com.google.gwt.user.client.Element::equals(Ljava/lang/Object;) FINAL_ADDED
      com.google.gwt.user.client.Element::hashCode() FINAL_ADDED
      com.google.gwt.user.client.Element::toString() FINAL_ADDED
    class com.google.gwt.user.client.Event
      com.google.gwt.user.client.Event::equals(Ljava/lang/Object;) FINAL_ADDED
      com.google.gwt.user.client.Event::hashCode() FINAL_ADDED
      com.google.gwt.user.client.Event::toString() FINAL_ADDED
  package com.google.gwt.user.client.impl
    class com.google.gwt.user.client.impl.DOMImplMozillaOld
      com.google.gwt.user.client.impl.DOMImplMozillaOld::appendChild(Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::compare(Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::createElement(Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::createInputElement(Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::createInputRadioElement(Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::createSelectElement(Z) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getAbsoluteLeft(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getAbsoluteTop(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getElementAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getElementById(Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getElementProperty(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getElementPropertyBoolean(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getElementPropertyInt(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getFirstChild(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getImgSrc(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getInnerHTML(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getInnerText(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getIntStyleAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getNextSibling(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getParent(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::getStyleAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::iframeGetSrc(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::init() MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::initMozilla() MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::insertBefore(Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::insertListItem(Lcom/google/gwt/user/client/Element;Ljava/lang/String;Ljava/lang/String;I) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::isOrHasChild(Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::removeChild(Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::removeElementAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::scrollIntoView(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::setElementAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::setElementProperty(Lcom/google/gwt/user/client/Element;Ljava/lang/String;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::setElementPropertyBoolean(Lcom/google/gwt/user/client/Element;Ljava/lang/String;Z) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::setElementPropertyInt(Lcom/google/gwt/user/client/Element;Ljava/lang/String;I) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::setImgSrc(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::setInnerHTML(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::setInnerText(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::setIntStyleAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;I) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::setOptionText(Lcom/google/gwt/user/client/Element;Ljava/lang/String;I) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::setStyleAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::toString(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::windowGetClientHeight() MISSING
      com.google.gwt.user.client.impl.DOMImplMozillaOld::windowGetClientWidth() MISSING
    class com.google.gwt.user.client.impl.DOMImplOpera
      com.google.gwt.user.client.impl.DOMImplOpera::appendChild(Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::compare(Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::createElement(Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::createInputElement(Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::createInputRadioElement(Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::createSelectElement(Z) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getAbsoluteLeft(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getAbsoluteTop(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getElementAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getElementById(Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getElementProperty(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getElementPropertyBoolean(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getElementPropertyInt(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getFirstChild(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getImgSrc(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getInnerHTML(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getInnerText(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getIntStyleAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getNextSibling(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getParent(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::getStyleAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::iframeGetSrc(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::init() MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::insertBefore(Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::insertListItem(Lcom/google/gwt/user/client/Element;Ljava/lang/String;Ljava/lang/String;I) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::isOrHasChild(Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::removeChild(Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::removeElementAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::scrollIntoView(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::setElementAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::setElementProperty(Lcom/google/gwt/user/client/Element;Ljava/lang/String;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::setElementPropertyBoolean(Lcom/google/gwt/user/client/Element;Ljava/lang/String;Z) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::setElementPropertyInt(Lcom/google/gwt/user/client/Element;Ljava/lang/String;I) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::setImgSrc(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::setInnerHTML(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::setInnerText(Lcom/google/gwt/user/client/Element;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::setIntStyleAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;I) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::setOptionText(Lcom/google/gwt/user/client/Element;Ljava/lang/String;I) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::setStyleAttribute(Lcom/google/gwt/user/client/Element;Ljava/lang/String;Ljava/lang/String;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::toString(Lcom/google/gwt/user/client/Element;) MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::windowGetClientHeight() MISSING
      com.google.gwt.user.client.impl.DOMImplOpera::windowGetClientWidth() MISSING
  package com.google.gwt.user.client.rpc.core.java.lang
    com.google.gwt.user.client.rpc.core.java.lang.boolean_Array_CustomFieldSerializer MISSING
    com.google.gwt.user.client.rpc.core.java.lang.byte_Array_CustomFieldSerializer MISSING
    com.google.gwt.user.client.rpc.core.java.lang.char_Array_CustomFieldSerializer MISSING
    com.google.gwt.user.client.rpc.core.java.lang.double_Array_CustomFieldSerializer MISSING
    com.google.gwt.user.client.rpc.core.java.lang.float_Array_CustomFieldSerializer MISSING
    com.google.gwt.user.client.rpc.core.java.lang.int_Array_CustomFieldSerializer MISSING
    com.google.gwt.user.client.rpc.core.java.lang.long_Array_CustomFieldSerializer MISSING
    com.google.gwt.user.client.rpc.core.java.lang.short_Array_CustomFieldSerializer MISSING
  package com.google.gwt.user.client.ui
    class com.google.gwt.user.client.ui.Button
      com.google.gwt.user.client.ui.Button::setElement(Lcom/google/gwt/user/client/Element;) FINAL_ADDED
      com.google.gwt.user.client.ui.Button::setElement(Lcom/google/gwt/user/client/Element;) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [protected void setElement(com.google.gwt.user.client.Element elem), protected final void setElement(com.google.gwt.dom.client.Element elem)] This might break API source compatibility
    class com.google.gwt.user.client.ui.ChangeListenerCollection
      com.google.gwt.user.client.ui.ChangeListenerCollection::add(ILjava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.ChangeListenerCollection::add(Ljava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.ChangeListenerCollection::set(ILjava/lang/Object;) MISSING
    class com.google.gwt.user.client.ui.CheckBox
      com.google.gwt.user.client.ui.CheckBox::setElement(Lcom/google/gwt/user/client/Element;) FINAL_ADDED
      com.google.gwt.user.client.ui.CheckBox::setElement(Lcom/google/gwt/user/client/Element;) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [protected void setElement(com.google.gwt.user.client.Element elem), protected final void setElement(com.google.gwt.dom.client.Element elem)] This might break API source compatibility
    class com.google.gwt.user.client.ui.ClickListenerCollection
      com.google.gwt.user.client.ui.ClickListenerCollection::add(ILjava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.ClickListenerCollection::add(Ljava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.ClickListenerCollection::set(ILjava/lang/Object;) MISSING
    class com.google.gwt.user.client.ui.FocusListenerCollection
      com.google.gwt.user.client.ui.FocusListenerCollection::add(ILjava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.FocusListenerCollection::add(Ljava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.FocusListenerCollection::set(ILjava/lang/Object;) MISSING
    class com.google.gwt.user.client.ui.FormHandlerCollection
      com.google.gwt.user.client.ui.FormHandlerCollection::add(ILjava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.FormHandlerCollection::add(Ljava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.FormHandlerCollection::set(ILjava/lang/Object;) MISSING
    class com.google.gwt.user.client.ui.KeyboardListenerCollection
      com.google.gwt.user.client.ui.KeyboardListenerCollection::add(ILjava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.KeyboardListenerCollection::add(Ljava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.KeyboardListenerCollection::set(ILjava/lang/Object;) MISSING
    class com.google.gwt.user.client.ui.ListBox
      com.google.gwt.user.client.ui.ListBox::setElement(Lcom/google/gwt/user/client/Element;) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [protected final void setElement(com.google.gwt.dom.client.Element elem), protected void setElement(com.google.gwt.user.client.Element elem)] This might break API source compatibility
      com.google.gwt.user.client.ui.ListBox::setElement(Lcom/google/gwt/user/client/Element;) FINAL_ADDED
    class com.google.gwt.user.client.ui.LoadListenerCollection
      com.google.gwt.user.client.ui.LoadListenerCollection::add(ILjava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.LoadListenerCollection::add(Ljava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.LoadListenerCollection::set(ILjava/lang/Object;) MISSING
    class com.google.gwt.user.client.ui.MenuItem
      com.google.gwt.user.client.ui.MenuItem::setElement(Lcom/google/gwt/user/client/Element;) FINAL_ADDED
      com.google.gwt.user.client.ui.MenuItem::setElement(Lcom/google/gwt/user/client/Element;) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [protected final void setElement(com.google.gwt.dom.client.Element elem), protected void setElement(com.google.gwt.user.client.Element elem)] This might break API source compatibility
    class com.google.gwt.user.client.ui.MouseListenerCollection
      com.google.gwt.user.client.ui.MouseListenerCollection::add(ILjava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.MouseListenerCollection::add(Ljava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.MouseListenerCollection::set(ILjava/lang/Object;) MISSING
    class com.google.gwt.user.client.ui.MouseWheelListenerCollection
      com.google.gwt.user.client.ui.MouseWheelListenerCollection::add(ILjava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.MouseWheelListenerCollection::add(Ljava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.MouseWheelListenerCollection::set(ILjava/lang/Object;) MISSING
    class com.google.gwt.user.client.ui.PopupListenerCollection
      com.google.gwt.user.client.ui.PopupListenerCollection::add(ILjava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.PopupListenerCollection::add(Ljava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.PopupListenerCollection::set(ILjava/lang/Object;) MISSING
    class com.google.gwt.user.client.ui.PushButton
      com.google.gwt.user.client.ui.PushButton::setElement(Lcom/google/gwt/user/client/Element;) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [protected final void setElement(com.google.gwt.dom.client.Element elem), protected void setElement(com.google.gwt.user.client.Element elem)] This might break API source compatibility
      com.google.gwt.user.client.ui.PushButton::setElement(Lcom/google/gwt/user/client/Element;) FINAL_ADDED
    class com.google.gwt.user.client.ui.RichTextArea
      com.google.gwt.user.client.ui.RichTextArea::setElement(Lcom/google/gwt/user/client/Element;) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [protected final void setElement(com.google.gwt.dom.client.Element elem), protected void setElement(com.google.gwt.user.client.Element elem)] This might break API source compatibility
      com.google.gwt.user.client.ui.RichTextArea::setElement(Lcom/google/gwt/user/client/Element;) FINAL_ADDED
    class com.google.gwt.user.client.ui.ScrollListenerCollection
      com.google.gwt.user.client.ui.ScrollListenerCollection::add(ILjava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.ScrollListenerCollection::add(Ljava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.ScrollListenerCollection::set(ILjava/lang/Object;) MISSING
    class com.google.gwt.user.client.ui.TabListenerCollection
      com.google.gwt.user.client.ui.TabListenerCollection::add(ILjava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.TabListenerCollection::add(Ljava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.TabListenerCollection::set(ILjava/lang/Object;) MISSING
    class com.google.gwt.user.client.ui.TableListenerCollection
      com.google.gwt.user.client.ui.TableListenerCollection::add(ILjava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.TableListenerCollection::add(Ljava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.TableListenerCollection::set(ILjava/lang/Object;) MISSING
    class com.google.gwt.user.client.ui.TextBoxBase
      com.google.gwt.user.client.ui.TextBoxBase::setElement(Lcom/google/gwt/user/client/Element;) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [protected void setElement(com.google.gwt.user.client.Element elem), protected final void setElement(com.google.gwt.dom.client.Element elem)] This might break API source compatibility
      com.google.gwt.user.client.ui.TextBoxBase::setElement(Lcom/google/gwt/user/client/Element;) FINAL_ADDED
    class com.google.gwt.user.client.ui.ToggleButton
      com.google.gwt.user.client.ui.ToggleButton::setElement(Lcom/google/gwt/user/client/Element;) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [protected void setElement(com.google.gwt.user.client.Element elem), protected final void setElement(com.google.gwt.dom.client.Element elem)] This might break API source compatibility
      com.google.gwt.user.client.ui.ToggleButton::setElement(Lcom/google/gwt/user/client/Element;) FINAL_ADDED
    class com.google.gwt.user.client.ui.TreeItem
      com.google.gwt.user.client.ui.TreeItem::setElement(Lcom/google/gwt/user/client/Element;) FINAL_ADDED
      com.google.gwt.user.client.ui.TreeItem::setElement(Lcom/google/gwt/user/client/Element;) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [protected final void setElement(com.google.gwt.dom.client.Element elem), protected void setElement(com.google.gwt.user.client.Element elem)] This might break API source compatibility
    class com.google.gwt.user.client.ui.TreeListenerCollection
      com.google.gwt.user.client.ui.TreeListenerCollection::add(ILjava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.TreeListenerCollection::add(Ljava/lang/Object;) MISSING
      com.google.gwt.user.client.ui.TreeListenerCollection::set(ILjava/lang/Object;) MISSING
    class com.google.gwt.user.client.ui.Widget
      com.google.gwt.user.client.ui.Widget::setElement(Lcom/google/gwt/user/client/Element;) FINAL_ADDED
      com.google.gwt.user.client.ui.Widget::setElement(Lcom/google/gwt/user/client/Element;) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [protected final void setElement(com.google.gwt.dom.client.Element elem), protected void setElement(com.google.gwt.user.client.Element elem)] This might break API source compatibility
  package java.lang
    class java.lang.Byte
      java.lang.Byte::compareTo(Ljava/lang/Object;) MISSING
    class java.lang.Character
      java.lang.Character::compareTo(Ljava/lang/Object;) MISSING
    java.lang.Class FINAL_ADDED
    class java.lang.Double
      java.lang.Double::compareTo(Ljava/lang/Object;) MISSING
    class java.lang.Float
      java.lang.Float::compareTo(Ljava/lang/Object;) MISSING
    class java.lang.Integer
      java.lang.Integer::compareTo(Ljava/lang/Object;) MISSING
    class java.lang.Long
      java.lang.Long::compareTo(Ljava/lang/Object;) MISSING
    class java.lang.Number
      java.lang.Number::__hexDigits MISSING
      java.lang.Number::__decodeAndValidateLong(Ljava/lang/String;JJ) MISSING
      java.lang.Number::__parseAndValidateLong(Ljava/lang/String;IJJ) MISSING
    class java.lang.Object
      java.lang.Object::typeName MISSING
    class java.lang.Short
      java.lang.Short::compareTo(Ljava/lang/Object;) MISSING
    class java.lang.String
      java.lang.String::String([CII) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [public String(char[] value, int offset, int count), public String(int[] codePoints, int offset, int count)] This might break API source compatibility
      java.lang.String::compareTo(Ljava/lang/Object;) MISSING
    class java.lang.StringBuffer
      java.lang.StringBuffer::append([CII) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [public java.lang.StringBuffer append(char[] x, int start, int len), public java.lang.StringBuffer append(java.lang.CharSequence x, int start, int end)] This might break API source compatibility
      java.lang.StringBuffer::insert(I[CII) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [public java.lang.StringBuffer insert(int index, char[] x, int offset, int len), public java.lang.StringBuffer insert(int index, java.lang.CharSequence chars, int start, int end)] This might break API source compatibility
  package java.util
    class java.util.ArrayList
      java.util.ArrayList::indexOutOfBounds(I) MISSING
    class java.util.Arrays
      java.util.Arrays::sort([Ljava/lang/Object;) OVERLOADED_METHOD_CALL Many methods in the new API with similar signatures. Methods = [public static void sort(float[] array), public static void sort(short[] array), public static void sort(double[] array), public static void sort(java.lang.Object[] array), public static void sort(byte[] array), public static void sort(long[] array), public static void sort(int[] array)] This might break API source compatibility
    class java.util.Date
      java.util.Date::__parse(Ljava/lang/String;) MISSING
      java.util.Date::compareTo(Ljava/lang/Object;) MISSING
    class java.util.Vector
      java.util.Vector::indexOutOfBounds(I) MISSING

