LGTM. Nothing controversial I believe.

This is a pretty big change though, so maybe an additional pair of eyes
would be better (but maybe you also have an internal review ongoing?)


http://gwt-code-reviews.appspot.com/1827804/diff/1/user/src/com/google/gwt/core/client/impl/Impl.java
File user/src/com/google/gwt/core/client/impl/Impl.java (right):

http://gwt-code-reviews.appspot.com/1827804/diff/1/user/src/com/google/gwt/core/client/impl/Impl.java#newcode279
user/src/com/google/gwt/core/client/impl/Impl.java:279: if
(unloadSupport.isUnloadSupported() && Impl.isModuleUnloaded()) {
On 2012/10/08 22:27:38, cromwellian wrote:
On 2012/09/14 09:24:16, tbroyer wrote:
> "Impl." qualifier is superfluous

Done.

Apparently not.

http://gwt-code-reviews.appspot.com/1827804/diff/1/user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java
File user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java
(right):

http://gwt-code-reviews.appspot.com/1827804/diff/1/user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java#newcode93
user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java:93:
GWT.UncaughtExceptionHandler uncaughtExceptionHandler =
GWT.getUncaughtExceptionHandler();
On 2012/09/14 17:23:41, cromwellian wrote:
I agree with the umbrella exception, but this method is also called
from JSNI
directly in some spots. We don't want a bubbling exception to prevent
removal
from disposeables (it could be moved before the call to d.dispose())
but more
generally, probaly don't want all of the try/catch logic in JS.

I could split this into a version that has the try catch (for JSNI
calls) and
leave a version for Java callers without.

Maybe add a comment at least, documenting why it's needed (called
directly from JSNI outside $entry scope), so that someone revisiting
this code in a few months won't be tempted to remove it.

I otherwise like the idea of splitting this method (most probably rather
add Impl.disposeWithoutError with the try/catch, called from JSNI, and
let Impl.dispose simply call UnloadSupport#dispose, to be called from
Java, and remove the try/catch from here; and of course add try/catch in
disposeAll to build an UmbrellaException)

http://gwt-code-reviews.appspot.com/1827804/diff/1/user/src/com/google/gwt/user/client/ui/PotentialElement.java
File user/src/com/google/gwt/user/client/ui/PotentialElement.java
(right):

http://gwt-code-reviews.appspot.com/1827804/diff/1/user/src/com/google/gwt/user/client/ui/PotentialElement.java#newcode49
user/src/com/google/gwt/user/client/ui/PotentialElement.java:49:
$wnd.GwtPotentialElementShim = null;
On 2012/10/08 22:27:38, cromwellian wrote:
I removed it for now, but I think I will have to use a global
eval/set-timeout/script-tag-inject trick to have it constructed via a
string in
the host page. The shim code is clearly residing in the <IFRAME>'s
module
source, and letting the host page hold a reference to it will likely
cause the
entire source to be retained (because of the way the VM preserves
debugging
info)

Does it really need to be a global in $wnd? Can't it be in 'window'
instead and/or possibly use the module name as a prefix/suffix? (similar
to DOMImplTrident's window['__gwt_dispatchEvent_' + moduleName])

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/core/client/GWT.java
File user/src/com/google/gwt/core/client/GWT.java (right):

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/core/client/GWT.java#newcode88
user/src/com/google/gwt/core/client/GWT.java:88: public static void
exportUnloadModule() {
How about a com.google.gwt.core.UnloadEnabled module that defines
gwt.unloadEnabled to true and defines an entry-point that automatically
calls exportUnloadModule?
Or possibly simply define the entry-point in Core.gwt.xml
(exportUnloadModule will be a no-op when unload support is disabled so
it should be compiled out anyway)

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/core/client/GWT.java#newcode293
user/src/com/google/gwt/core/client/GWT.java:293: * cleaned up. This
memory is not typically called by the GWT module itself, but exported so
that another module
Did you mean 'method' rather than 'memory' here?

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/core/client/impl/Impl.java
File user/src/com/google/gwt/core/client/impl/Impl.java (right):

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/core/client/impl/Impl.java#newcode248
user/src/com/google/gwt/core/client/impl/Impl.java:248: private static
void disposeAll() {
There should probably be a comment here explaining where this method is
called from?

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java
File user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java
(right):

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java#newcode63
user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java:63:
var $moduleName = __gwtModuleFunction.__moduleName;
Maybe add a comment that unfortunately GWT.getModuleName() isn't
assigned yet?

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java#newcode76
user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java:76:
// Browsers without Object.keys don't benefit from nulling windowj
typo on 'windowj'

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java#newcode78
user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java:78:
var frame = window.frameElement;
Should a similar comment be added here about frameElement support?

// Browsers without window.frameElement don't benefit from removing the
iframe

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java#newcode157
user/src/com/google/gwt/core/client/impl/UnloadSupportEnabled.java:157:
final int timerId = UnloadSupport.setTimeout0(func, time, disposable);
nit: "UnloadSupport." qualifier is superfluous

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplStandard.java
File
user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplStandard.java
(right):

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplStandard.java#newcode140
user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplStandard.java:140:
@com.google.gwt.user.client.impl.DOMImpl::addDisposableEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Lcom/google/gwt/core/client/JavaScriptObject;Z)(elem,
Use "addDisposableEvent(*)(elem, ..." to make it more readable?

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/client/History.java
File user/src/com/google/gwt/user/client/History.java (right):

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/client/History.java#newcode79
user/src/com/google/gwt/user/client/History.java:79: impl.dispose();
Couldn't it be simplified to Impl.dispose(impl) here? (and letting
HistoryImpl implement Disposable)

Or are you expecting to make Disposable compile out completely when
unload support is disabled?

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/client/impl/DOMImpl.java
File user/src/com/google/gwt/user/client/impl/DOMImpl.java (right):

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/client/impl/DOMImpl.java#newcode24
user/src/com/google/gwt/user/client/impl/DOMImpl.java:24: import
com.google.gwt.user.client.DOM;
Argl, circular dependency: DOM calls DOMImpl which calls DOM.

Anyway, this circular dependency is not needed: all methods from DOM
that we all here actually simply defer to DOMImpl, so we can just
s/DOM\./this./

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/client/impl/DOMImpl.java#newcode42
user/src/com/google/gwt/user/client/impl/DOMImpl.java:42:
elem.__gwt_disposeEvent.push({event: event, handler: handler, capture:
capture});
Note JsArray uses the 'arr[arr.length] = x' idiom as it was benchmarked
faster than 'arr.push(x)' IIRC.

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/client/impl/DOMImpl.java#newcode85
user/src/com/google/gwt/user/client/impl/DOMImpl.java:85: private static
boolean isJavaObjectFromOurModule(EventListener listener) {
We already have isMyListener. Either use it, or rewrite it to use
isJavaObjectFromOurModule.

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/client/impl/DOMImpl.java#newcode93
user/src/com/google/gwt/user/client/impl/DOMImpl.java:93: for (var
diEvent in diEvents) {
diEvents is supposed to be an array, arrays shouldn't be iterated with a
for(…in…) loop:

   for (var i = 0, l = diEvents.length; i < l; i++) {
     var diEvent = diEvents[i];

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/client/impl/DOMImplTrident.java
File user/src/com/google/gwt/user/client/impl/DOMImplTrident.java
(right):

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/client/impl/DOMImplTrident.java#newcode233
user/src/com/google/gwt/user/client/impl/DOMImplTrident.java:233:
protected void disposeEventSystem() {
Add a TODO?

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/client/impl/HistoryImpl.java
File user/src/com/google/gwt/user/client/impl/HistoryImpl.java (right):

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/client/impl/HistoryImpl.java#newcode61
user/src/com/google/gwt/user/client/impl/HistoryImpl.java:61: private
JavaScriptObject oldHandler;
nit: missing new line above this one

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/client/ui/impl/FocusImplStandard.java
File user/src/com/google/gwt/user/client/ui/impl/FocusImplStandard.java
(right):

http://gwt-code-reviews.appspot.com/1827804/diff/10001/user/src/com/google/gwt/user/client/ui/impl/FocusImplStandard.java#newcode60
user/src/com/google/gwt/user/client/ui/impl/FocusImplStandard.java:60:
@com.google.gwt.user.client.impl.DOMImpl::addDisposableEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Lcom/google/gwt/core/client/JavaScriptObject;Z)(input,
addDisposableEvent(*)

http://gwt-code-reviews.appspot.com/1827804/

--
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors


Reply via email to