[gwt-contrib] [google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events.
[google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events. Details are at http://code.google.com/p/google-web-toolkit/source/branch?spec=issue3083&branch=%2Fbranches%2F1_6_clean_events General Comment: CloseEvent: http://code.google.com/p/google-web-toolkit/source/browse/branches/1_6_clean_events/user/src/com/google/gwt/event/logical/shared/CloseEvent.java?spec=issue3083&r=3969 Line-by-line comments: File: /branches/1_6_clean_events/user/src/com/google/gwt/event/logical/shared/CloseEvent.java (r3969) === Line 59:* @param the target type --- I don't understand the difference between the target and the source for this event. Line 84:* Constructor. Should only be used by subclasses, almost always for testing. --- See my comments in BeforeSelectionEvent. Line 107: // @param autoClosed was the close event triggered automatically --- I think this comment took a wrong turn; it doesn't seem to apply. Line 126: protected final void setAutoClosed(boolean autoClosed) { --- It really seems like autoClosed and target should both be construction time invariants. Respond to these comments at http://code.google.com/p/google-web-toolkit/source/branch?spec=issue3083&branch=%2Fbranches%2F1_6_clean_events -- You received this message because you starred this review, or because your project has directed all notifications to a mailing list that you subscribe to. You may adjust your review notification preferences at: http://code.google.com/hosting/settings --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events.
[google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events. Details are at http://code.google.com/p/google-web-toolkit/source/branch?spec=issue3083&branch=%2Fbranches%2F1_6_clean_events General Comment: JsHandlerRegistry: http://code.google.com/p/google-web-toolkit/source/browse/branches/1_6_clean_events/user/src/com/google/gwt/event/shared/JsHandlerRegistry.java?spec=issue3083&r=4009 Line-by-line comments: File: /branches/1_6_clean_events/user/src/com/google/gwt/event/shared/JsHandlerRegistry.java (r4009) === Line 36: return (JsHandlerRegistry) JavaScriptObject.createObject(); --- This could be JavaScriptObject.createObject().cast() if you like that style. Line 45: public final void addHandler(HandlerManager manager, --- What do we get out of trying to flatten these? Comparing this to the simpler approach of just always keeping unflattened structure seems complex. What are the tradeoffs that led us to adopt this approach? Line 87: // unsafe cast instead. --- I don't see how getHandler could get inlined at all. Doesn't the possible throwing of IndexOutOfBounds exception prevent that? Now that we have some benchmark baselines, we can use these to guide out decisions about doing linguistically ugly things like unchecked type conversions. Line 114: // unsafe cast instead. --- Same comment here as the last method. Line 121: throw new IndexOutOfBoundsException("index: " + index); --- I really don't know the right answer here, but should we consider making this an assertion? Line 145: final native int getCount(int index) /*-{ --- private Line 150: final native void unflatten(int base) /*-{ --- private Line 154: for(var i = 0; i < count;i++){ --- Indentation is off. Line 174: return this[base + 1]; --- Extra space after return. Respond to these comments at http://code.google.com/p/google-web-toolkit/source/branch?spec=issue3083&branch=%2Fbranches%2F1_6_clean_events -- You received this message because you starred this review, or because your project has directed all notifications to a mailing list that you subscribe to. You may adjust your review notification preferences at: http://code.google.com/hosting/settings --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events.
[google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events. Details are at http://code.google.com/p/google-web-toolkit/source/branch?spec=issue3083&branch=%2Fbranches%2F1_6_clean_events General Comment: JavaHandlerRegistry: http://code.google.com/p/google-web-toolkit/source/browse/branches/1_6_clean_events/user/src/com/google/gwt/event/shared/JavaHandlerRegistry.java?spec=issue3083&r=3969 Line-by-line comments: File: /branches/1_6_clean_events/user/src/com/google/gwt/event/shared/JavaHandlerRegistry.java (r3969) === Line 27: class JavaHandlerRegistry extends HashMap, ArrayList> { --- I think this class should contain a HashMap and not be a HashMap. It offers a much simpler API than HashMap. Line 33: super.put(type, l); --- super.put? We don't override put so super isn't necessary, but this also becomes a non-issue if this isn't a subclass of HashMap. Line 54: assert (index < handlerCount); --- shouldn't this be assert index < getHandlerCount(eventKey) Otherwise you'll always compute the handlerCount even when assertions are turned off. Line 61: if (l == null) { --- would probably be clearer as return (l == null) ? 0 : l.size(); Line 70: if (l != null) { --- Given the existence of HandlerRegistrations, why is it even valid to ask to remove something that isn't there? Line 77: // This cast is safe because we control the puts. --- We don't actually control the puts, someone could accidently put some invalid gunk in by calling put directly in HandlerManager. Now that's not highly likely, but the fact that it's possible is another strike against the subclass. Respond to these comments at http://code.google.com/p/google-web-toolkit/source/branch?spec=issue3083&branch=%2Fbranches%2F1_6_clean_events -- You received this message because you starred this review, or because your project has directed all notifications to a mailing list that you subscribe to. You may adjust your review notification preferences at: http://code.google.com/hosting/settings --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events.
[google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events. Details are at http://code.google.com/p/google-web-toolkit/source/branch?spec=issue3083&branch=%2Fbranches%2F1_6_clean_events General Comment: HandlerManager: http://code.google.com/p/google-web-toolkit/source/browse/branches/1_6_clean_events/user/src/com/google/gwt/event/shared/HandlerManager.java?spec=issue3083&r=4006 Line-by-line comments: File: /branches/1_6_clean_events/user/src/com/google/gwt/event/shared/HandlerManager.java (r4006) === Line 30: static int EXPECTED_HANDLERS = 5; --- Why is this package-private? testability? Line 31: private static final boolean useJs = GWT.isClient(); --- This should probably be useJsRegistry Line 40: public static boolean isLive(GwtEvent event) { --- Why make GwtEvent.isLive protected if we're going to make a public delegate to it? Line 49: public static void revive(GwtEvent event) { --- Why make GwtEvent.revive protected if we're going to offer a public delegate to it? Line 50: if (event.isLive() == false) { --- if (!event.isLive()) { Line 58: index += EXPECTED_HANDLERS + 2; --- It seems weird that HandlerManager has to be concerned with the stride of the underlying registry. And the EXPECTED_HANDLERS is really a detail of JsHandlerRegistry. Seems like this should defer to the registry for the next key index. That would allow EXPECTED_HANDLERS to move into JsHandlerRegistry and JavaHandlerRegistry can return serial indexes if it wants to. Line 63: int firingDepth = 0; --- There seems something unholy about the union between HandlerManager and the registries. They seem to share logic in a way that suggests that they aren't properly encapsulated ... or that they are the same thing and that the registries should become nested classes. firingDepth, like EXPECTED_HANDLERS, seems unnecessarily package-private, but I'll have to keep looking to understand exactly why the relationship is so intimate. Line 76: private ArrayList addQueue; --- I think this should be a List as well. I have to admit that I don't really like the concurrent modification scheme. Did we consider doing a simple copy of the handler collection on modification when firing is active? While that will likely be slower to add a handler during firings, it would likely be faster in the common case. And since web mode could take advantage of Array.slice, I'm not sure that there would be a significant difference in the mod-while-firing case. Plus, there are a few things that trouble me about this scheme: 1 - It does seem kind of complex having to enqueue mods into lazily created Lists. 2 - The fact that we end up with List
[gwt-contrib] Re: [google-web-toolkit] [EMAIL PROTECTED] commented on revision r4004.
BTW: does this feature send an email directly to the committer who committed the revision? On Tue, Nov 11, 2008 at 10:38 PM, <[EMAIL PROTECTED]> wrote: > > [google-web-toolkit] [EMAIL PROTECTED] commented on revision r4004. > Details are at > http://code.google.com/p/google-web-toolkit/source/detail?r=4004 > > Score: Neutral > > General Comment: > - Let's not make the default deployment directory actually > called 'deployDir' how about the module name or some derivative thereof? > - projectCreator currently doesn't run; it should be removed from the > distro if we're going to get rid of it > - Please review the descriptions on the command-line switches for > consitency; the only thing I saw off the bat was inconsistent use of > periods (we traditional do not use periods in this context) > > Respond to these comments at > http://code.google.com/p/google-web-toolkit/source/detail?r=4004 > -- > You received this message because you starred this review, or because > your project has directed all notifications to a mailing list that you > subscribe to. > You may adjust your review notification preferences at: > http://code.google.com/hosting/settings > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] [EMAIL PROTECTED] commented on revision r4004.
[google-web-toolkit] [EMAIL PROTECTED] commented on revision r4004. Details are at http://code.google.com/p/google-web-toolkit/source/detail?r=4004 Score: Neutral General Comment: - Let's not make the default deployment directory actually called 'deployDir' how about the module name or some derivative thereof? - projectCreator currently doesn't run; it should be removed from the distro if we're going to get rid of it - Please review the descriptions on the command-line switches for consitency; the only thing I saw off the bat was inconsistent use of periods (we traditional do not use periods in this context) Respond to these comments at http://code.google.com/p/google-web-toolkit/source/detail?r=4004 -- You received this message because you starred this review, or because your project has directed all notifications to a mailing list that you subscribe to. You may adjust your review notification preferences at: http://code.google.com/hosting/settings --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: runAsync fragment loading bug in IE
Yes lgtm to cameron's change, sorry I ignored email for a while. On Nov 10, 2008 6:08 PM, "Lex Spoon" <[EMAIL PROTECTED]> wrote: On Mon, Nov 10, 2008 at 2:33 PM, Kelly Norton <[EMAIL PROTECTED]> wrote: > For iframe loading, Came... Can I consider that an LGTM? > However, I am wondering how this is going to work > in the xs case where the code is loaded into... No, that sounds like a problem all right. For independent reasons, using XHR instead of script tags sounds better, anyway. The downloaded result could then be eval-ed in the correct scope. That strategy would seem to work fine for the XS linker, so long as the call to eval happens within the anonymous function. Lex --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: [google-web-toolkit] [EMAIL PROTECTED] commented on revision r4022.
Was this review directed at a different revision? Project Hosting error or user error? On Tue, Nov 11, 2008 at 6:11 PM, <[EMAIL PROTECTED]> wrote: > > [google-web-toolkit] [EMAIL PROTECTED] commented on revision r4022. > Details are at > http://code.google.com/p/google-web-toolkit/source/detail?r=4022 > > Score: Neutral > > General Comment: > See the one inline comment. Two other comments: > - projectCreator currently doesn't run; it should be removed from the > distro if we're going to get rid of it > - Please review the descriptions on the command-line switches for > consitency; the only thing I saw off the bat was inconsistent use of > periods (we traditional do not use periods in this context) > > Line-by-line comments: > > File: > /releases/1.6/user/src/com/google/gwt/user/tools/ApplicationCreator.java > (r4004) > > === > > Line 552: return "Specifies the deploy directory (defaults to > deployDir)"; > > --- > Shouldn't the parenthetical comment be "defaults to 'war'"? > > Respond to these comments at > http://code.google.com/p/google-web-toolkit/source/detail?r=4022 > -- > You received this message because you starred this review, or because > your project has directed all notifications to a mailing list that you > subscribe to. > You may adjust your review notification preferences at: > http://code.google.com/hosting/settings > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] [EMAIL PROTECTED] commented on revision r4022.
[google-web-toolkit] [EMAIL PROTECTED] commented on revision r4022. Details are at http://code.google.com/p/google-web-toolkit/source/detail?r=4022 Score: Neutral General Comment: See the one inline comment. Two other comments: - projectCreator currently doesn't run; it should be removed from the distro if we're going to get rid of it - Please review the descriptions on the command-line switches for consitency; the only thing I saw off the bat was inconsistent use of periods (we traditional do not use periods in this context) Line-by-line comments: File: /releases/1.6/user/src/com/google/gwt/user/tools/ApplicationCreator.java (r4004) === Line 552: return "Specifies the deploy directory (defaults to deployDir)"; --- Shouldn't the parenthetical comment be "defaults to 'war'"? Respond to these comments at http://code.google.com/p/google-web-toolkit/source/detail?r=4022 -- You received this message because you starred this review, or because your project has directed all notifications to a mailing list that you subscribe to. You may adjust your review notification preferences at: http://code.google.com/hosting/settings --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: IFrameTemplate.js broken for noserver hosted mode in trunk
On Tue, Nov 11, 2008 at 1:47 AM, Cameron Braid <[EMAIL PROTECTED]> wrote: > hosted.html expects the querystring to contain only the module strongName > where as it curently contains strongName + ".cache.html" > > IFrameTemplate.js in maybeInjectFrame() appends .cache.html to the > strongName (line 298). Thanks, Cameron. I did not previously know about noserver mode, so I didn't even try not to break it. Your fix looks good to me. I've put in a slightly refactored version at revision 4022. Lex --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit commit] r4022 - trunk/dev/core/src/com/google/gwt/core/linker
Author: [EMAIL PROTECTED] Date: Tue Nov 11 14:56:29 2008 New Revision: 4022 Modified: trunk/dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js Log: Fixes the URL for the hosted.html file when using the IFrameLinker with noserver hosted mode. Suggested by: Cameron Braid Review by: jat Modified: trunk/dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js == --- trunk/dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js (original) +++ trunk/dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js Tue Nov 11 14:56:29 2008 @@ -295,7 +295,7 @@ millis:(new Date()).getTime(), type: 'moduleRequested' }); - iframe.contentWindow.location.replace(base + strongName + '.cache.html'); + iframe.contentWindow.location.replace(base + initialHtml); } } @@ -351,13 +351,16 @@ }); var strongName; + var initialHtml; if (isHostedMode()) { -strongName = "hosted.html?__MODULE_FUNC__"; +strongName = ""; +initialHtml = "hosted.html?__MODULE_FUNC__"; } else { try { // __PERMUTATIONS_BEGIN__ // Permutation logic // __PERMUTATIONS_END__ + initialHtml = strongName + ".cache.html"; } catch (e) { // intentionally silent on property failure return; --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit commit] r4021 - branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/mu seum/client/defaultm...
Author: [EMAIL PROTECTED] Date: Tue Nov 11 14:06:28 2008 New Revision: 4021 Modified: branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForDisclosurePanelEvents.java branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForEventsFiring.java branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForPopupEvents.java branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForTableEvents.java Log: Fixes for ajr's review of 6 Nov Modified: branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForDisclosurePanelEvents.java == --- branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForDisclosurePanelEvents.java (original) +++ branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForDisclosurePanelEvents.java Tue Nov 11 14:06:28 2008 @@ -53,7 +53,7 @@ @Override public String getInstructions() { -return "Click on disclosure panel, see the expected events firing"; +return "Click on disclosure panel, see the expected Open and Close events firing"; } @Override Modified: branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForEventsFiring.java == --- branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForEventsFiring.java (original) +++ branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForEventsFiring.java Tue Nov 11 14:06:28 2008 @@ -109,244 +109,11 @@ layout.setHTML(0, 1, "Event"); layout.setHTML(0, 2, "Status"); -// Mouse and click events -{ - // Create a button to trigger events - Button button = new Button("Double-click me") { -@Override -public void onBrowserEvent(Event event) { - super.onBrowserEvent(event); - - // Verify that values associated with events are defined. For some - // values, we just want to make sure we can get them without any - // errors. - assert event.getClientX() > 0; - assert event.getClientY() > 0; - assert event.getScreenX() > 0; - assert event.getScreenY() > 0; - event.getAltKey(); - event.getCtrlKey(); - event.getShiftKey(); - event.getMetaKey(); -} - }; - - // Setup the tests - addTest(Event.ONCLICK, "click", button); - addDependentTest(Event.ONMOUSEDOWN, "mousedown"); - addDependentTest(Event.ONMOUSEUP, "mouseup"); - addDependentTest(Event.ONMOUSEOVER, "mouseover"); - addDependentTest(Event.ONMOUSEOUT, "mouseout"); - addDependentTest(Event.ONMOUSEMOVE, "mousemove"); - - // Add event handlers - button.addClickHandler(new ClickHandler() { -public void onClick(ClickEvent event) { - passTest(event.getNativeEvent()); -} - }); - button.addMouseDownHandler(new MouseDownHandler() { -public void onMouseDown(MouseDownEvent event) { - event.getNativeButton(); - passTest(event.getNativeEvent()); -} - }); - button.addMouseUpHandler(new MouseUpHandler() { -public void onMouseUp(MouseUpEvent event) { - event.getNativeButton(); - passTest(event.getNativeEvent()); -} - }); - button.addMouseMoveHandler(new MouseMoveHandler() { -public void onMouseMove(MouseMoveEvent event) { - passTest(event.getNativeEvent()); -} - }); - button.addMouseOutHandler(new MouseOutHandler() { -public void onMouseOut(MouseOutEvent event) { - assert event.getFromElement() != null; - assert event.getToElement() != null; - passTest(event.getNativeEvent()); -} - }); - button.addMouseOverHandler(new MouseOverHandler() { -public void onMouseOver(MouseOverEvent event) { - assert event.getFromElement() != null; - assert event.getToElement() != null; - passTest(event.getNativeEvent()); -} - }); -} - -// Keyboard events -{ - // Setup a text box to trigger the events - TextBox textBox = new TextBox(); - - // Setup the tests - textBox.setText("Type a letter"); - addTest(Event.ONKEYDOWN, "keydown", textBox); - addDependentTest(Event.ONKEYPRESS, "keypress"); - addDependentTest(Event.ONKEYUP, "keyup"); - addDependentTest(Event.ONFOCUS, "focus"); - addDependentTest(Event.ONBLUR, "blur"); -
[gwt-contrib] [google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events.
[google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events. Details are at http://code.google.com/p/google-web-toolkit/source/branch?spec=issue3083&branch=%2Fbranches%2F1_6_clean_events General Comment: Fixes submitted as r4021 Line-by-line comments: File: /branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForDisclosurePanelEvents.java (r3969) === Line 56: return "Click on disclosure panel, see the expected events firing"; --- fixed File: /branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForEventsFiring.java (r3943) === Line 113: { --- Fixed File: /branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForPopupEvents.java (r3943) === Line 64: + (autoHide ? "auto hide" : " persistant"); --- fixed File: /branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForTableEvents.java (r3943) === Line 32: * A simple tree used to quickly exercise tree behavior. --- fixed File: /branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForTreeEvents.java (r3950) === Line 75: return "Open each node, ensure you see the right events in the window title"; --- Looks like this was fixed already. File: /branches/1_6_clean_events/user/super/com/google/gwt/emul/java/lang/StringBuilder.java (r3963) === Line 33: public class StringBuilder implements CharSequence, Appendable { --- It's in the 1.6 branch. I think your diff is against the branch point, not against 1.6 head (from which we refreshed last week), thus the confusion. File: /branches/1_6_clean_events/user/super/com/google/gwt/emul/java/util/TreeSet.java (r3963) === Line 27: public class TreeSet extends AbstractSet implements SortedSet, Serializable { --- Again, this is from a 1.6 merge. File: /branches/1_6_clean_events/user/test/com/google/gwt/dev/jjs/test/HostedTest.java (r3936) === Line 600: --- Not seeing anything missing here. Do you remember what this was about? File: /branches/1_6_clean_events/user/test/com/google/gwt/i18n/client/TestAnnotatedMessages.java (r3963) === Line 29: // @GenerateKeys("com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator") --- Not in our scope. I expect JAT left this in on purpose. Line 61: String optionalArgument(@Optional --- Actually a 1.6 change, though I agree with you. Death to the auto formatter. Line 84: String pluralWidgetsOther(@PluralCount --- ditto File: /branches/1_6_clean_events/user/test/com/google/gwt/i18n/client/TestConstants.java (r3963) === Line 24: public interface TestConstants extends com.google.gwt.i18n.client.Constants { --- Actually from 1.6 File: /branches/1_6_clean_events/user/test/com/google/gwt/i18n/client/gen/Shapes.java (r3963) === Line 22: public interface Shapes extends com.google.gwt.i18n.client.Constants { --- 1.6 merge fu File: /branches/1_6_clean_events/user/test/com/google/gwt/user/server/rpc/CollectionsTestServiceImpl.java
[gwt-contrib] [google-web-toolkit] EmilyCrutcher commented on revision r4018.
[google-web-toolkit] EmilyCrutcher commented on revision r4018. Details are at http://code.google.com/p/google-web-toolkit/source/detail?r=4018 General Comment: Our import formatter automatically does that as the gwt style guidelines say no x.* imports. Now, for static imports we may wish to change this, but that would be a larger conversation. Respond to these comments at http://code.google.com/p/google-web-toolkit/source/detail?r=4018 -- You received this message because you starred this review, or because your project has directed all notifications to a mailing list that you subscribe to. You may adjust your review notification preferences at: http://code.google.com/hosting/settings --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events.
[google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events. Details are at http://code.google.com/p/google-web-toolkit/source/branch?spec=issue3083&branch=%2Fbranches%2F1_6_clean_events General Comment: Another comment on GwtEvent. http://code.google.com/p/google-web-toolkit/source/browse/branches/1_6_clean_events/user/src/com/google/gwt/event/shared/GwtEvent.java?spec=issue3083&r=3969 Line-by-line comments: File: /branches/1_6_clean_events/user/src/com/google/gwt/event/shared/GwtEvent.java (r3969) === Line 59: private boolean dead; --- Do we need this? It seems like dead == true and source == null have the same meaning. Respond to these comments at http://code.google.com/p/google-web-toolkit/source/branch?spec=issue3083&branch=%2Fbranches%2F1_6_clean_events -- You received this message because you starred this review, or because your project has directed all notifications to a mailing list that you subscribe to. You may adjust your review notification preferences at: http://code.google.com/hosting/settings --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events.
[google-web-toolkit] [EMAIL PROTECTED] commented on branch /branches/1_6_clean_events. Details are at http://code.google.com/p/google-web-toolkit/source/branch?spec=issue3083&branch=%2Fbranches%2F1_6_clean_events General Comment: BeforeSelectionEvent (but it has questions relevant to all logical/shared events) http://code.google.com/p/google-web-toolkit/source/browse/branches/1_6_clean_events/user/src/com/google/gwt/event/logical/shared/BeforeSelectionEvent.java?spec=issue3083&r=3969 Line-by-line comments: File: /branches/1_6_clean_events/user/src/com/google/gwt/event/logical/shared/BeforeSelectionEvent.java (r3969) === Line 39:* @param The event source. --- remove the period at the end. Line 41:* handlers and a handler manager. --- Remove periods. Also, isn't that second sentence already communicated by the type signature. Can we just drop it altogether? Line 47: if (TYPE != null) { --- If no one has called getType() yet, is it valid for someone to try to fire this type of event? Should we assert that TYPE != null instead of doing a runtime check? Line 60:* Gets the abstract type associated with this event. --- Can probably remove "abstract" Line 76:* Constructor. Should only be used by subclasses, almost always for testing. --- Can we just say "Used for testing." everything else is implied by the signature. Line 113: @SuppressWarnings("unchecked") --- This seems odd to me and as I think about it, it points to the fact that GwtEvent.Type has type params but doesn't seem to make use of those type params in any way. Should GwtEvent.Type remove the H type param? Respond to these comments at http://code.google.com/p/google-web-toolkit/source/branch?spec=issue3083&branch=%2Fbranches%2F1_6_clean_events -- You received this message because you starred this review, or because your project has directed all notifications to a mailing list that you subscribe to. You may adjust your review notification preferences at: http://code.google.com/hosting/settings --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] ray.ryan commented on revision r4018.
[google-web-toolkit] ray.ryan commented on revision r4018. Details are at http://code.google.com/p/google-web-toolkit/source/detail?r=4018 Score: Positive General Comment: LGTM Just one tiny nit, do with it what you will. Line-by-line comments: File: /branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/SuggestBox.java (r4018) === Line 21: import static com.google.gwt.event.dom.client.KeyCodes.KEY_UP; --- Why not import static com.google.gwt.event.dom.client.KeyCodes.*;? Respond to these comments at http://code.google.com/p/google-web-toolkit/source/detail?r=4018 -- You received this message because you starred this review, or because your project has directed all notifications to a mailing list that you subscribe to. You may adjust your review notification preferences at: http://code.google.com/hosting/settings --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit commit] r4020 - in branches/1_6_clean_events/user/src/com/google/gwt/user/client: . ui
Author: [EMAIL PROTECTED] Date: Tue Nov 11 13:16:04 2008 New Revision: 4020 Added: branches/1_6_clean_events/user/src/com/google/gwt/user/client/ListenerWrapper.java (contents, props changed) - copied, changed from r4018, /branches/1_6_clean_events/user/src/com/google/gwt/user/client/L.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java (contents, props changed) - copied, changed from r4018, /branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/L.java Removed: branches/1_6_clean_events/user/src/com/google/gwt/user/client/L.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/L.java Modified: branches/1_6_clean_events/user/src/com/google/gwt/user/client/History.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/Window.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/DisclosurePanel.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/FocusPanel.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/FocusWidget.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/FormPanel.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/HTMLTable.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/Hyperlink.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/Image.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/Label.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/ListBox.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/PopupPanel.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/ScrollPanel.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/SuggestBox.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/TabBar.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/TabPanel.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/TextBoxBase.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/Tree.java Log: Renaming L to ListenerWrapper. Modified: branches/1_6_clean_events/user/src/com/google/gwt/user/client/History.java == --- branches/1_6_clean_events/user/src/com/google/gwt/user/client/History.java (original) +++ branches/1_6_clean_events/user/src/com/google/gwt/user/client/History.java Tue Nov 11 13:16:04 2008 @@ -80,7 +80,7 @@ */ @Deprecated public static void addHistoryListener(HistoryListener listener) { -L.HistoryChange.add(listener); +ListenerWrapper.HistoryChange.add(listener); } /** @@ -191,6 +191,6 @@ */ @Deprecated public static void removeHistoryListener(HistoryListener listener) { -L.HistoryChange.remove(impl.getHandlers(), listener); +ListenerWrapper.HistoryChange.remove(impl.getHandlers(), listener); } } Copied: branches/1_6_clean_events/user/src/com/google/gwt/user/client/ListenerWrapper.java (from r4018, /branches/1_6_clean_events/user/src/com/google/gwt/user/client/L.java) == --- /branches/1_6_clean_events/user/src/com/google/gwt/user/client/L.java (original) +++ branches/1_6_clean_events/user/src/com/google/gwt/user/client/ListenerWrapper.java Tue Nov 11 13:16:04 2008 @@ -37,8 +37,8 @@ * @param listener type */ @Deprecated -abstract class L implements EventHandler { - public static class HistoryChange extends L implements +abstract class ListenerWrapper implements EventHandler { + public static class HistoryChange extends ListenerWrapper implements ValueChangeHandler { @Deprecated public static void add(HistoryListener listener) { @@ -58,7 +58,7 @@ } } - public static class WindowClose extends L implements + public static class WindowClose extends ListenerWrapper implements Window.ClosingHandler, CloseHandler { @Deprecated public static void add(WindowCloseListener listener) { @@ -89,7 +89,7 @@ } } - public static class WindowResize extends L implements + public static class WindowResize extends ListenerWrapper implements ResizeHandler { @Deprecated public static void add(WindowResizeListener listener) { @@ -110,7 +110,7 @@ } } - public static class WindowScroll extends L implements + public static class WindowScroll extends ListenerWrapper implements Window.ScrollHandler { @Deprecated public static void add(WindowScrollListener listener) { @@ -141,7 +141,7 @@ int handlerCount = manager.getHandlerCount(key); for (int i = 0; i < handlerCount; i++) { Event
[gwt-contrib] [google-web-toolkit commit] r4019 - branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui
Author: [EMAIL PROTECTED] Date: Tue Nov 11 12:58:45 2008 New Revision: 4019 Modified: branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/Widget.java Log: Making ensureHandlers package protected as it is not part of the public API. Modified: branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/Widget.java == --- branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/Widget.java (original) +++ branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/Widget.java Tue Nov 11 12:58:45 2008 @@ -183,16 +183,6 @@ } /** - * Ensures the existence of the handler manager. - * - * @return the handler manager - * */ - protected HandlerManager ensureHandlers() { -return handlerManager == null ? handlerManager = new HandlerManager(this) -: handlerManager; - } - - /** * Fires an event. Usually used when passing an event from one source to * another. * @@ -294,6 +284,16 @@ * browser's document. */ protected void onUnload() { + } + + /** + * Ensures the existence of the handler manager. + * + * @return the handler manager + * */ + HandlerManager ensureHandlers() { +return handlerManager == null ? handlerManager = new HandlerManager(this) +: handlerManager; } /** --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] events branch code review, HasKeyCodes inteface --> KeyCodes class
Ray, This commit tries to get us out of figuring out how we want to use enums by giving us api breathing room to introduce them (or not) later. In specific, we now use getNativeKeyCode and getNativeButton, remove any mention of integers from KeyCodeEvent and MouseEvent, plus remove the anti-pattern encapsolated in HasKeyCodes and replaces it with a KeyCodes static class that should have its members statically imported instead. http://code.google.com/p/google-web-toolkit/source/detail?r=4018 -- "There are only 10 types of people in the world: Those who understand binary, and those who don't" --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Turning off runtime checks
On Tue, Nov 11, 2008 at 3:02 PM, Bruce Johnson <[EMAIL PROTECTED]> wrote: > How about we start a convention for -Xunsafe:yyy flags, like > > -Xunsafe:disableArrayIndexChecks > -Xunsafe:disableClassCastChecks > -Xunsafe:disableDefensiveCollections > > > then we'd want a roll-up flag like > > -Xunsafe:all > > > Of course, we'd want to not document these. > > @Ray: The compiler guys are slammed right now. But if you have anything > resembling a patch that could start this pattern, I think that's the only > realistic way to get this done in the short term. Also, I'd like to see if > Scott/Lex/anyone else disagree before we proceeded down this path. > Something related we talked about was a flag indicating the compiler was free to generate code that would be broken if you get certain compiler warnings. For example, the compiler has to insert casts even when you have List because it is possible other dealing with a raw List put something besides a String in it. Such a use would generate a warning, so if you didn't suppress the warning and you didn't get one, it would be ok for the compiler to remove some extra code. Probably better to make it a failure, so something like -assumeGenericCorrectness or something, and what would previously be a warning regarding generics before would now be an error but you would produce better code. -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
I agree. I think sometime soon when I get some bandwidth I can provide some mock container/component classes to demonstrate the desired use case (say, a structured canvas drawing application ala Visio or Lombardi) -Ray On Tue, Nov 11, 2008 at 12:38 PM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > What is clear is that this is a use case that needs to be addressed before > 1.6 ships. However, I think it will actually be a lot easier to talk about > after the initial patch lands in 1.6/trunk and is therefore more visible to > all our users. > > Cheers, > > Emily > > > > > On Tue, Nov 11, 2008 at 3:00 PM, Emily Crutcher <[EMAIL PROTECTED]> wrote: >> >> If you did not have an event preview defined, then it is only a null >> check, which are cheap. >> >> If you did have one defined you would have had to have two implementations >> of fireEvent and your inherited version had better call our fireEvent >> somewhere or else your add/remove handler code will break in mysterious >> ways, so you will still have the same number of dispatches. >> >> >> >> >> On Tue, Nov 11, 2008 at 2:34 PM, Ray Cromwell <[EMAIL PROTECTED]> >> wrote: >>> >>> BTW, I'm also curious as to the performance implications. A subtype of >>> HandlerManager with override fireEvent() could theoretically be >>> type-tightened and staticified, even inlined, because the field inside >>> the calling widgets can typically be declared with a concrete leaf >>> type (MyHandlerManager manager = ...). With the event preview >>> mechanism, the dispatch will always be doubly indirect with >>> null-checks, plus if more than one implementation of the interface >>> exists that is reachable from module entry point, type tigthening will >>> be hampered and it will always be a polymorphic dispatch. >>> >>> -Ray >>> >>> On Tue, Nov 11, 2008 at 11:30 AM, Ray Cromwell <[EMAIL PROTECTED]> >>> wrote: >>> > I'm not sure if the event preview mechanism would completely solve all >>> > the problems, but it appears to offer essentially an "override" >>> > capability to fireEvent. If you recall our earlier discussions, the >>> > use case goes something like this: >>> > >>> > 1) a virtual widget system exists which implements widgets which are >>> > not actually backed by any real DOM elements, but rather drawn into a >>> > Canvas, similar to lightweight components in Swing. (GWT Widget is >>> > more like an AWT model, with the DOM being the 'peer') >>> > >>> > 2) we wish to introduce an event system for these widgets, complete >>> > with an event propagation model based on component events having the >>> > capability of propagating to a parent container >>> > >>> > 3) Our original discussion was to have the source implement an >>> > interface like PropagationModel. A subclass of HandlerManager which >>> > check if source instanceof PropagationModel, and if so, use the >>> > interface to a) check if the event is a type that should be propagated >>> > b) check if it hasn't had stopPropagation() called and c) grab the >>> > parent widget and refire the event. >>> > >>> > What I'm not sure of, is if I shoe-horn all this functionality into >>> > the preview mechanism, if it will still play nice with all the >>> > fireDepth/queuing stuff that was recently added. >>> > >>> > >>> > -Ray >>> > >>> > On Tue, Nov 11, 2008 at 10:37 AM, Emily Crutcher <[EMAIL PROTECTED]> >>> > wrote: >>> >> The fireEvent method is currently final because our >>> >> addHandler/removeHandler is relying on our version of fireEvents being >>> >> called because we are handling concurrent adds and removes using an >>> >> internal >>> >> counter managed by fireEvent. >>> >> >>> >> By the way, as the GwtEventPreview interface is meant to address just >>> >> this >>> >> use case, would it work in your case? Not that we are implementing it >>> >> right >>> >> now, but it would be good to know if we have a working solution. >>> >> >>> >> >>> >> Also, how important is having a protected widget createHandlers() >>> >> method? >>> >> Currently I've been talked out of it under the hypothesis it can be >>> >> added >>> >> later. >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> On Tue, Nov 11, 2008 at 12:42 PM, Ray Ryan <[EMAIL PROTECTED]> wrote: >>> >>> >>> >>> None that I can see. Kelly, I think you pushed for this clampdown. >>> >>> Still >>> >>> want it? >>> >>> rjrjr >>> >>> >>> >>> On Tue, Nov 11, 2008 at 9:41 AM, Ray Cromwell <[EMAIL PROTECTED]> >>> >>> wrote: >>> >>> I would prefer HandlerManager not be so finalized. I had a real use >>> case for creating a version of fireEvent that dealt with DOM-like >>> event bubbling for non-DOM events, the effect of freezing >>> HandlerManager overrides would deny me the ability of creating a >>> EventBubblingHandlerManager. Is there a good reason to prevent >>> subclassing and overriding fireEvent? >>> -Ray >>> >>> >>> On Tue, Nov 11, 2008 at 8:28 AM, Emily Crutcher <[EMAIL
[gwt-contrib] [google-web-toolkit commit] r4018 - in branches/1_6_clean_events: reference/code-museum/src/com/google/gwt/museum/client/defa...
Author: [EMAIL PROTECTED] Date: Tue Nov 11 12:41:10 2008 New Revision: 4018 Added: branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/KeyCodes.java (contents, props changed) - copied, changed from r4000, /branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/HasKeyCodes.java Removed: branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/HasKeyCodes.java Modified: branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForEventsFiring.java branches/1_6_clean_events/samples/mail/src/com/google/gwt/sample/mail/client/AboutDialog.java branches/1_6_clean_events/samples/showcase/src/com/google/gwt/sample/showcase/client/content/other/CwFrame.java branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/KeyCodeEvent.java branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/KeyDownHandler.java branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/KeyUpHandler.java branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/MouseEvent.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/L.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/MenuBar.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/SuggestBox.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/TabBar.java branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/Tree.java Log: Removed HasKeyCodes interface, instead now we want uses who were inheriting constants from KeyboardListener to statically import KeyCodes instead. Punting on enum issue by removing the buttons from MouseEvent altogether and renaming both getKeyCode and getButton Modified: branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForEventsFiring.java == --- branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForEventsFiring.java (original) +++ branches/1_6_clean_events/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/VisualsForEventsFiring.java Tue Nov 11 12:41:10 2008 @@ -147,13 +147,13 @@ }); button.addMouseDownHandler(new MouseDownHandler() { public void onMouseDown(MouseDownEvent event) { - event.getButton(); + event.getNativeButton(); passTest(event.getNativeEvent()); } }); button.addMouseUpHandler(new MouseUpHandler() { public void onMouseUp(MouseUpEvent event) { - event.getButton(); + event.getNativeButton(); passTest(event.getNativeEvent()); } }); @@ -200,7 +200,7 @@ event.isControlKeyDown(); event.isShiftKeyDown(); event.isMetaKeyDown(); - assert event.getKeyCode() > 0; + assert event.getNativeKeyCode() > 0; passTest(event.getNativeEvent()); } }); @@ -210,7 +210,7 @@ event.isControlKeyDown(); event.isShiftKeyDown(); event.isMetaKeyDown(); - assert event.getKeyCode() > 0; + assert event.getNativeKeyCode() > 0; passTest(event.getNativeEvent()); } }); Modified: branches/1_6_clean_events/samples/mail/src/com/google/gwt/sample/mail/client/AboutDialog.java == --- branches/1_6_clean_events/samples/mail/src/com/google/gwt/sample/mail/client/AboutDialog.java (original) +++ branches/1_6_clean_events/samples/mail/src/com/google/gwt/sample/mail/client/AboutDialog.java Tue Nov 11 12:41:10 2008 @@ -17,7 +17,7 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.dom.client.HasKeyCodes; +import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.HTML; @@ -60,8 +60,8 @@ // Use the popup's key preview hooks to close the dialog when either // enter or escape is pressed. switch (key) { - case HasKeyCodes.KEY_ENTER: - case HasKeyCodes.KEY_ESCAPE: + case KeyCodes.KEY_ENTER: + case KeyCodes.KEY_ESCAPE: hide(); break; } Modified: branches/1_6_clean_events/samples/showcase/src/com/google/gwt/sample/showcase/client/content/other/CwFrame.java == --- branches/1_6_clean_events/samples/showcase/src/com/google/gwt/sample/showcase/client/content/other/CwFrame.java (original) +++ branches/1_6_clean_events/samples/showcase/src/com/goo
[gwt-contrib] Re: RR:GwtEventPreview
What is clear is that this is a use case that needs to be addressed before 1.6 ships. However, I think it will actually be a lot easier to talk about after the initial patch lands in 1.6/trunk and is therefore more visible to all our users. Cheers, Emily On Tue, Nov 11, 2008 at 3:00 PM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > If you did not have an event preview defined, then it is only a null check, > which are cheap. > > If you did have one defined you would have had to have two implementations > of fireEvent and your inherited version had better call our fireEvent > somewhere or else your add/remove handler code will break in mysterious > ways, so you will still have the same number of dispatches. > > > > > > On Tue, Nov 11, 2008 at 2:34 PM, Ray Cromwell <[EMAIL PROTECTED]>wrote: > >> BTW, I'm also curious as to the performance implications. A subtype of >> HandlerManager with override fireEvent() could theoretically be >> type-tightened and staticified, even inlined, because the field inside >> the calling widgets can typically be declared with a concrete leaf >> type (MyHandlerManager manager = ...). With the event preview >> mechanism, the dispatch will always be doubly indirect with >> null-checks, plus if more than one implementation of the interface >> exists that is reachable from module entry point, type tigthening will >> be hampered and it will always be a polymorphic dispatch. >> >> -Ray >> >> On Tue, Nov 11, 2008 at 11:30 AM, Ray Cromwell <[EMAIL PROTECTED]> >> wrote: >> > I'm not sure if the event preview mechanism would completely solve all >> > the problems, but it appears to offer essentially an "override" >> > capability to fireEvent. If you recall our earlier discussions, the >> > use case goes something like this: >> > >> > 1) a virtual widget system exists which implements widgets which are >> > not actually backed by any real DOM elements, but rather drawn into a >> > Canvas, similar to lightweight components in Swing. (GWT Widget is >> > more like an AWT model, with the DOM being the 'peer') >> > >> > 2) we wish to introduce an event system for these widgets, complete >> > with an event propagation model based on component events having the >> > capability of propagating to a parent container >> > >> > 3) Our original discussion was to have the source implement an >> > interface like PropagationModel. A subclass of HandlerManager which >> > check if source instanceof PropagationModel, and if so, use the >> > interface to a) check if the event is a type that should be propagated >> > b) check if it hasn't had stopPropagation() called and c) grab the >> > parent widget and refire the event. >> > >> > What I'm not sure of, is if I shoe-horn all this functionality into >> > the preview mechanism, if it will still play nice with all the >> > fireDepth/queuing stuff that was recently added. >> > >> > >> > -Ray >> > >> > On Tue, Nov 11, 2008 at 10:37 AM, Emily Crutcher <[EMAIL PROTECTED]> >> wrote: >> >> The fireEvent method is currently final because our >> >> addHandler/removeHandler is relying on our version of fireEvents being >> >> called because we are handling concurrent adds and removes using an >> internal >> >> counter managed by fireEvent. >> >> >> >> By the way, as the GwtEventPreview interface is meant to address just >> this >> >> use case, would it work in your case? Not that we are implementing it >> right >> >> now, but it would be good to know if we have a working solution. >> >> >> >> >> >> Also, how important is having a protected widget createHandlers() >> method? >> >> Currently I've been talked out of it under the hypothesis it can be >> added >> >> later. >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> On Tue, Nov 11, 2008 at 12:42 PM, Ray Ryan <[EMAIL PROTECTED]> wrote: >> >>> >> >>> None that I can see. Kelly, I think you pushed for this clampdown. >> Still >> >>> want it? >> >>> rjrjr >> >>> >> >>> On Tue, Nov 11, 2008 at 9:41 AM, Ray Cromwell <[EMAIL PROTECTED]> >> >>> wrote: >> >> I would prefer HandlerManager not be so finalized. I had a real use >> case for creating a version of fireEvent that dealt with DOM-like >> event bubbling for non-DOM events, the effect of freezing >> HandlerManager overrides would deny me the ability of creating a >> EventBubblingHandlerManager. Is there a good reason to prevent >> subclassing and overriding fireEvent? >> -Ray >> >> >> On Tue, Nov 11, 2008 at 8:28 AM, Emily Crutcher <[EMAIL PROTECTED]> >> wrote: >> > Do you have a proposal in mind? Everything we tightened down we had >> > good >> > reason to do so. >> > On Tue, Nov 11, 2008 at 11:17 AM, Ray Ryan <[EMAIL PROTECTED]> >> wrote: >> >> >> >> And as Emily and I just chatted offline, if we're loosening things >> up >> >> I'd >> >> rather see us allow folks to provide their own HandlerManager >> >> implementation >> >> (or
[gwt-contrib] Re: Turning off runtime checks
How about we start a convention for -Xunsafe:yyy flags, like -Xunsafe:disableArrayIndexChecks -Xunsafe:disableClassCastChecks -Xunsafe:disableDefensiveCollections then we'd want a roll-up flag like -Xunsafe:all Of course, we'd want to not document these. @Ray: The compiler guys are slammed right now. But if you have anything resembling a patch that could start this pattern, I think that's the only realistic way to get this done in the short term. Also, I'd like to see if Scott/Lex/anyone else disagree before we proceeded down this path. On Tue, Nov 11, 2008 at 2:47 PM, Ray Cromwell <[EMAIL PROTECTED]> wrote: > > Is there any objection to changing the checkIndex() method in > AbstractList to an assert? I suppose one might want JRE behavior in HM > even if assertions are disabled, but perhaps we could just check > !GWT.isScript() and use if vs assert. I noticed that if you hammer on > ArrayList, a very large number of calls are generated to checkIndex. > Current, about 1.5% of runtime. There's also it's friend, setCheck > too. > > These seem like easy performance wins with very little work, of > course, we want the compiler to continue to get better at well, like > doing range check elimination where it can. :) > > -Ray > > On Tue, Nov 11, 2008 at 7:54 AM, Bruce Johnson <[EMAIL PROTECTED]> wrote: > > On Tue, Nov 11, 2008 at 10:51 AM, Isaac Truett <[EMAIL PROTECTED]> > wrote: > >> > >> > I'm curious what things you're referring to here. Generally, I think > >> > we're > >> > pretty open to more checks in hosted mode. As an example, hosted mode > >> > always > >> > runs with assertions enabled. > >> > >> More assertions are exactly what I've been hoping for. The one case > >> that's stuck with me was issue 2365. As I understand it, those > >> assertions (and the check method, if only called in assertions) will > >> all be compiled away, so there's no size or performance penalty in web > >> mode. > > > > That's exactly right. And as we add new library classes, I anticipate > we'll > > be doing a lot more assertion checking versus if/then/throw type tests. > This > > is one area where I honestly believe the traditional Java patterns are > just > > plain wrong: coding that's far too defensive. > > > > > > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Turning off runtime checks
Our JRE isn't run in hosted mode, so that shouldn't be an issue. Let's use the pattern of calling checkIndex within an assert, and having checkIndex always return true if it doesn't throw. On Tue, Nov 11, 2008 at 2:47 PM, Ray Cromwell <[EMAIL PROTECTED]> wrote: > > Is there any objection to changing the checkIndex() method in > AbstractList to an assert? I suppose one might want JRE behavior in HM > even if assertions are disabled, but perhaps we could just check > !GWT.isScript() and use if vs assert. I noticed that if you hammer on > ArrayList, a very large number of calls are generated to checkIndex. > Current, about 1.5% of runtime. There's also it's friend, setCheck > too. > > These seem like easy performance wins with very little work, of > course, we want the compiler to continue to get better at well, like > doing range check elimination where it can. :) > > -Ray > > On Tue, Nov 11, 2008 at 7:54 AM, Bruce Johnson <[EMAIL PROTECTED]> wrote: > > On Tue, Nov 11, 2008 at 10:51 AM, Isaac Truett <[EMAIL PROTECTED]> > wrote: > >> > >> > I'm curious what things you're referring to here. Generally, I think > >> > we're > >> > pretty open to more checks in hosted mode. As an example, hosted mode > >> > always > >> > runs with assertions enabled. > >> > >> More assertions are exactly what I've been hoping for. The one case > >> that's stuck with me was issue 2365. As I understand it, those > >> assertions (and the check method, if only called in assertions) will > >> all be compiled away, so there's no size or performance penalty in web > >> mode. > > > > That's exactly right. And as we add new library classes, I anticipate > we'll > > be doing a lot more assertion checking versus if/then/throw type tests. > This > > is one area where I honestly believe the traditional Java patterns are > just > > plain wrong: coding that's far too defensive. > > > > > > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
If you did not have an event preview defined, then it is only a null check, which are cheap. If you did have one defined you would have had to have two implementations of fireEvent and your inherited version had better call our fireEvent somewhere or else your add/remove handler code will break in mysterious ways, so you will still have the same number of dispatches. On Tue, Nov 11, 2008 at 2:34 PM, Ray Cromwell <[EMAIL PROTECTED]> wrote: > BTW, I'm also curious as to the performance implications. A subtype of > HandlerManager with override fireEvent() could theoretically be > type-tightened and staticified, even inlined, because the field inside > the calling widgets can typically be declared with a concrete leaf > type (MyHandlerManager manager = ...). With the event preview > mechanism, the dispatch will always be doubly indirect with > null-checks, plus if more than one implementation of the interface > exists that is reachable from module entry point, type tigthening will > be hampered and it will always be a polymorphic dispatch. > > -Ray > > On Tue, Nov 11, 2008 at 11:30 AM, Ray Cromwell <[EMAIL PROTECTED]> > wrote: > > I'm not sure if the event preview mechanism would completely solve all > > the problems, but it appears to offer essentially an "override" > > capability to fireEvent. If you recall our earlier discussions, the > > use case goes something like this: > > > > 1) a virtual widget system exists which implements widgets which are > > not actually backed by any real DOM elements, but rather drawn into a > > Canvas, similar to lightweight components in Swing. (GWT Widget is > > more like an AWT model, with the DOM being the 'peer') > > > > 2) we wish to introduce an event system for these widgets, complete > > with an event propagation model based on component events having the > > capability of propagating to a parent container > > > > 3) Our original discussion was to have the source implement an > > interface like PropagationModel. A subclass of HandlerManager which > > check if source instanceof PropagationModel, and if so, use the > > interface to a) check if the event is a type that should be propagated > > b) check if it hasn't had stopPropagation() called and c) grab the > > parent widget and refire the event. > > > > What I'm not sure of, is if I shoe-horn all this functionality into > > the preview mechanism, if it will still play nice with all the > > fireDepth/queuing stuff that was recently added. > > > > > > -Ray > > > > On Tue, Nov 11, 2008 at 10:37 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > >> The fireEvent method is currently final because our > >> addHandler/removeHandler is relying on our version of fireEvents being > >> called because we are handling concurrent adds and removes using an > internal > >> counter managed by fireEvent. > >> > >> By the way, as the GwtEventPreview interface is meant to address just > this > >> use case, would it work in your case? Not that we are implementing it > right > >> now, but it would be good to know if we have a working solution. > >> > >> > >> Also, how important is having a protected widget createHandlers() > method? > >> Currently I've been talked out of it under the hypothesis it can be > added > >> later. > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> On Tue, Nov 11, 2008 at 12:42 PM, Ray Ryan <[EMAIL PROTECTED]> wrote: > >>> > >>> None that I can see. Kelly, I think you pushed for this clampdown. > Still > >>> want it? > >>> rjrjr > >>> > >>> On Tue, Nov 11, 2008 at 9:41 AM, Ray Cromwell <[EMAIL PROTECTED]> > >>> wrote: > > I would prefer HandlerManager not be so finalized. I had a real use > case for creating a version of fireEvent that dealt with DOM-like > event bubbling for non-DOM events, the effect of freezing > HandlerManager overrides would deny me the ability of creating a > EventBubblingHandlerManager. Is there a good reason to prevent > subclassing and overriding fireEvent? > -Ray > > > On Tue, Nov 11, 2008 at 8:28 AM, Emily Crutcher <[EMAIL PROTECTED]> > wrote: > > Do you have a proposal in mind? Everything we tightened down we had > > good > > reason to do so. > > On Tue, Nov 11, 2008 at 11:17 AM, Ray Ryan <[EMAIL PROTECTED]> > wrote: > >> > >> And as Emily and I just chatted offline, if we're loosening things > up > >> I'd > >> rather see us allow folks to provide their own HandlerManager > >> implementation > >> (or wrapper around ours) than just try to predict the one or two > hooks > >> they'll find useful. > >> rjrjr > >> > >> On Tue, Nov 11, 2008 at 7:59 AM, Emily Crutcher <[EMAIL PROTECTED]> > >> wrote: > >>> > >>> We have made the fireEvents() final in handler manager and made it > >>> impossible for users to replace the handler manager in widget, so > I > >>> think > >>> this change would be necessary to preserve the full spirit of what >
[gwt-contrib] Re: RR:GwtEventPreview
On Tue, Nov 11, 2008 at 2:30 PM, Ray Cromwell <[EMAIL PROTECTED]> wrote: > I'm not sure if the event preview mechanism would completely solve all > the problems, but it appears to offer essentially an "override" > capability to fireEvent. If you recall our earlier discussions, the > use case goes something like this: > > > What I'm not sure of, is if I shoe-horn all this functionality into > the preview mechanism, if it will still play nice with all the > fireDepth/queuing stuff that was recently added. > > Yes, that was the use case that I has in mind, and it plays nicely with the fireDepth/queuing mechanism. The use case in analogous to onAttach and onLoad, in that basically we need to be able to perform setup and teardown actions before/after the user code runs. Originally I had a protected method onBeforeEventFired, but Ray R. pointed out that if we instead delegated to a listener, it would be more flexible then forcing everyone to subclass handler manager while still allowing us to subclass handler manager when required. In your use case, I was actually assuming that your PropagationModel would implement GwtEventPreview directly, and be installed where ever appropriate, thereby avoiding a whole bunch of subclasses of widgets and the handler manager itself. -- "There are only 10 types of people in the world: Those who understand binary, and those who don't" --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Turning off runtime checks
Is there any objection to changing the checkIndex() method in AbstractList to an assert? I suppose one might want JRE behavior in HM even if assertions are disabled, but perhaps we could just check !GWT.isScript() and use if vs assert. I noticed that if you hammer on ArrayList, a very large number of calls are generated to checkIndex. Current, about 1.5% of runtime. There's also it's friend, setCheck too. These seem like easy performance wins with very little work, of course, we want the compiler to continue to get better at well, like doing range check elimination where it can. :) -Ray On Tue, Nov 11, 2008 at 7:54 AM, Bruce Johnson <[EMAIL PROTECTED]> wrote: > On Tue, Nov 11, 2008 at 10:51 AM, Isaac Truett <[EMAIL PROTECTED]> wrote: >> >> > I'm curious what things you're referring to here. Generally, I think >> > we're >> > pretty open to more checks in hosted mode. As an example, hosted mode >> > always >> > runs with assertions enabled. >> >> More assertions are exactly what I've been hoping for. The one case >> that's stuck with me was issue 2365. As I understand it, those >> assertions (and the check method, if only called in assertions) will >> all be compiled away, so there's no size or performance penalty in web >> mode. > > That's exactly right. And as we add new library classes, I anticipate we'll > be doing a lot more assertion checking versus if/then/throw type tests. This > is one area where I honestly believe the traditional Java patterns are just > plain wrong: coding that's far too defensive. > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Linker artifacts in WAR
Bob Something tells me the packer proposal might be very useful. To package GWT apps for offline Android execution, Android demands that various artifacts be placed in precise directories on disk before being packaged into an APK. Maybe Thomas can comment about how this would impact his GWT-in-the-Air library. -Ray On Tue, Nov 11, 2008 at 11:09 AM, BobV <[EMAIL PROTECTED]> wrote: > > On Tue, Nov 11, 2008 at 2:02 PM, Lex Spoon <[EMAIL PROTECTED]> wrote: >> One big question: why a separate packer step? My naive understanding >> is that the point of a linker is to decide where the various bits of >> compiler output will go on disk. Is there a reason to discontinue >> that? It sounds possibly quite confusing to have both packers and >> linkers that the user must choose. > > The idea of a packer is separable (the thing that actually writes bits > to disk), but not currently separate. I'm just calling it out as an > affirmation that we don't want to do this. > > -- > Bob Vawter > Google Web Toolkit Team > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
BTW, I'm also curious as to the performance implications. A subtype of HandlerManager with override fireEvent() could theoretically be type-tightened and staticified, even inlined, because the field inside the calling widgets can typically be declared with a concrete leaf type (MyHandlerManager manager = ...). With the event preview mechanism, the dispatch will always be doubly indirect with null-checks, plus if more than one implementation of the interface exists that is reachable from module entry point, type tigthening will be hampered and it will always be a polymorphic dispatch. -Ray On Tue, Nov 11, 2008 at 11:30 AM, Ray Cromwell <[EMAIL PROTECTED]> wrote: > I'm not sure if the event preview mechanism would completely solve all > the problems, but it appears to offer essentially an "override" > capability to fireEvent. If you recall our earlier discussions, the > use case goes something like this: > > 1) a virtual widget system exists which implements widgets which are > not actually backed by any real DOM elements, but rather drawn into a > Canvas, similar to lightweight components in Swing. (GWT Widget is > more like an AWT model, with the DOM being the 'peer') > > 2) we wish to introduce an event system for these widgets, complete > with an event propagation model based on component events having the > capability of propagating to a parent container > > 3) Our original discussion was to have the source implement an > interface like PropagationModel. A subclass of HandlerManager which > check if source instanceof PropagationModel, and if so, use the > interface to a) check if the event is a type that should be propagated > b) check if it hasn't had stopPropagation() called and c) grab the > parent widget and refire the event. > > What I'm not sure of, is if I shoe-horn all this functionality into > the preview mechanism, if it will still play nice with all the > fireDepth/queuing stuff that was recently added. > > > -Ray > > On Tue, Nov 11, 2008 at 10:37 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: >> The fireEvent method is currently final because our >> addHandler/removeHandler is relying on our version of fireEvents being >> called because we are handling concurrent adds and removes using an internal >> counter managed by fireEvent. >> >> By the way, as the GwtEventPreview interface is meant to address just this >> use case, would it work in your case? Not that we are implementing it right >> now, but it would be good to know if we have a working solution. >> >> >> Also, how important is having a protected widget createHandlers() method? >> Currently I've been talked out of it under the hypothesis it can be added >> later. >> >> >> >> >> >> >> >> >> >> On Tue, Nov 11, 2008 at 12:42 PM, Ray Ryan <[EMAIL PROTECTED]> wrote: >>> >>> None that I can see. Kelly, I think you pushed for this clampdown. Still >>> want it? >>> rjrjr >>> >>> On Tue, Nov 11, 2008 at 9:41 AM, Ray Cromwell <[EMAIL PROTECTED]> >>> wrote: I would prefer HandlerManager not be so finalized. I had a real use case for creating a version of fireEvent that dealt with DOM-like event bubbling for non-DOM events, the effect of freezing HandlerManager overrides would deny me the ability of creating a EventBubblingHandlerManager. Is there a good reason to prevent subclassing and overriding fireEvent? -Ray On Tue, Nov 11, 2008 at 8:28 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > Do you have a proposal in mind? Everything we tightened down we had > good > reason to do so. > On Tue, Nov 11, 2008 at 11:17 AM, Ray Ryan <[EMAIL PROTECTED]> wrote: >> >> And as Emily and I just chatted offline, if we're loosening things up >> I'd >> rather see us allow folks to provide their own HandlerManager >> implementation >> (or wrapper around ours) than just try to predict the one or two hooks >> they'll find useful. >> rjrjr >> >> On Tue, Nov 11, 2008 at 7:59 AM, Emily Crutcher <[EMAIL PROTECTED]> >> wrote: >>> >>> We have made the fireEvents() final in handler manager and made it >>> impossible for users to replace the handler manager in widget, so I >>> think >>> this change would be necessary to preserve the full spirit of what >>> we've >>> been doing to upgrade the user's event system. >>> >>> However, we can tell people to use super-source to replace their >>> handler >>> manager class instead. It is not as clean of a solution, but it will >>> work, >>> and we can wait to see if anyone truly howls for this feature and put >>> it >>> into gwt 2.0 instead, then it can be a cool upgrade instead :-). >>> >>> >>>Cheers, >>> >>> Emily >>> >>> >>> On Tue, Nov 11, 2008 at 10:31 AM, Bruce Johnson <[EMAIL PROTECTED]> >>> wrote: Is this really part of the handl
[gwt-contrib] Re: RR:GwtEventPreview
I'm not sure if the event preview mechanism would completely solve all the problems, but it appears to offer essentially an "override" capability to fireEvent. If you recall our earlier discussions, the use case goes something like this: 1) a virtual widget system exists which implements widgets which are not actually backed by any real DOM elements, but rather drawn into a Canvas, similar to lightweight components in Swing. (GWT Widget is more like an AWT model, with the DOM being the 'peer') 2) we wish to introduce an event system for these widgets, complete with an event propagation model based on component events having the capability of propagating to a parent container 3) Our original discussion was to have the source implement an interface like PropagationModel. A subclass of HandlerManager which check if source instanceof PropagationModel, and if so, use the interface to a) check if the event is a type that should be propagated b) check if it hasn't had stopPropagation() called and c) grab the parent widget and refire the event. What I'm not sure of, is if I shoe-horn all this functionality into the preview mechanism, if it will still play nice with all the fireDepth/queuing stuff that was recently added. -Ray On Tue, Nov 11, 2008 at 10:37 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > The fireEvent method is currently final because our > addHandler/removeHandler is relying on our version of fireEvents being > called because we are handling concurrent adds and removes using an internal > counter managed by fireEvent. > > By the way, as the GwtEventPreview interface is meant to address just this > use case, would it work in your case? Not that we are implementing it right > now, but it would be good to know if we have a working solution. > > > Also, how important is having a protected widget createHandlers() method? > Currently I've been talked out of it under the hypothesis it can be added > later. > > > > > > > > > > On Tue, Nov 11, 2008 at 12:42 PM, Ray Ryan <[EMAIL PROTECTED]> wrote: >> >> None that I can see. Kelly, I think you pushed for this clampdown. Still >> want it? >> rjrjr >> >> On Tue, Nov 11, 2008 at 9:41 AM, Ray Cromwell <[EMAIL PROTECTED]> >> wrote: >>> >>> I would prefer HandlerManager not be so finalized. I had a real use >>> case for creating a version of fireEvent that dealt with DOM-like >>> event bubbling for non-DOM events, the effect of freezing >>> HandlerManager overrides would deny me the ability of creating a >>> EventBubblingHandlerManager. Is there a good reason to prevent >>> subclassing and overriding fireEvent? >>> -Ray >>> >>> >>> On Tue, Nov 11, 2008 at 8:28 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: >>> > Do you have a proposal in mind? Everything we tightened down we had >>> > good >>> > reason to do so. >>> > On Tue, Nov 11, 2008 at 11:17 AM, Ray Ryan <[EMAIL PROTECTED]> wrote: >>> >> >>> >> And as Emily and I just chatted offline, if we're loosening things up >>> >> I'd >>> >> rather see us allow folks to provide their own HandlerManager >>> >> implementation >>> >> (or wrapper around ours) than just try to predict the one or two hooks >>> >> they'll find useful. >>> >> rjrjr >>> >> >>> >> On Tue, Nov 11, 2008 at 7:59 AM, Emily Crutcher <[EMAIL PROTECTED]> >>> >> wrote: >>> >>> >>> >>> We have made the fireEvents() final in handler manager and made it >>> >>> impossible for users to replace the handler manager in widget, so I >>> >>> think >>> >>> this change would be necessary to preserve the full spirit of what >>> >>> we've >>> >>> been doing to upgrade the user's event system. >>> >>> >>> >>> However, we can tell people to use super-source to replace their >>> >>> handler >>> >>> manager class instead. It is not as clean of a solution, but it will >>> >>> work, >>> >>> and we can wait to see if anyone truly howls for this feature and put >>> >>> it >>> >>> into gwt 2.0 instead, then it can be a cool upgrade instead :-). >>> >>> >>> >>> >>> >>>Cheers, >>> >>> >>> >>> Emily >>> >>> >>> >>> >>> >>> On Tue, Nov 11, 2008 at 10:31 AM, Bruce Johnson <[EMAIL PROTECTED]> >>> >>> wrote: >>> >>> Is this really part of the handler update? If this can wait, let's >>> wait. >>> We need to wrap up the changes to handlers ASAP. >>> On Tue, Nov 11, 2008 at 9:37 AM, Emily Crutcher <[EMAIL PROTECTED]> >>> wrote: >>> > >>> > I've managed to convince myself that it would be a trivial amount >>> > of >>> > work to introduce a GwtEventPreview interface into the events >>> > package and >>> > that the change would be a good one. In specific we would have: >>> > >>> > public interface GwtEventPreview { >>> > boolean onGwtEventPreview(GwtEvent event); >>> > } >>> > >>> > and, in HandlerManager: >>> > >>> > public void setGwtEventPreview(GwtEventPreview preview) >>> > >>> > >>> > Then, in the final fireEvent method, if a preview has been >>>
[gwt-contrib] Re: Linker artifacts in WAR
On Tue, Nov 11, 2008 at 2:02 PM, Lex Spoon <[EMAIL PROTECTED]> wrote: > One big question: why a separate packer step? My naive understanding > is that the point of a linker is to decide where the various bits of > compiler output will go on disk. Is there a reason to discontinue > that? It sounds possibly quite confusing to have both packers and > linkers that the user must choose. The idea of a packer is separable (the thing that actually writes bits to disk), but not currently separate. I'm just calling it out as an affirmation that we don't want to do this. -- Bob Vawter Google Web Toolkit Team --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Linker artifacts in WAR
On Tue, Nov 11, 2008 at 11:34 AM, BobV <[EMAIL PROTECTED]> wrote: > Here's a strawman proposal for handling different types of > EmittedArtifacts in the Linker API and how that would interact with a > WAR output format. Cool. First, it's great to have a list of the categories of output. There seem to not be very many. The following names seem straightforward to me: browser (not listed): things that need to be served out to the browser server (listed as "context"): things needed on the server, but not being sent out extra: other stuff, such as SOYC output and log files One big question: why a separate packer step? My naive understanding is that the point of a linker is to decide where the various bits of compiler output will go on disk. Is there a reason to discontinue that? It sounds possibly quite confusing to have both packers and linkers that the user must choose. With a linker-only strategy, wouldn't all we need to do would be: 1. Update the artifacts to match the new categories. 2. Update the linkers to deal with these. Someone wanting a non-war deployment would have to either pick out the pieces from one of the standard linkers, or write their own linker. Both seem pretty easy. Lex --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit commit] r4017 - branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client
Author: [EMAIL PROTECTED] Date: Tue Nov 11 10:43:20 2008 New Revision: 4017 Modified: branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/DomEvent.java Log: Fix NPE in DomEvent#fireNativeEvent, reviewed by ecc Modified: branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/DomEvent.java == --- branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/DomEvent.java (original) +++ branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/DomEvent.java Tue Nov 11 10:43:20 2008 @@ -109,12 +109,14 @@ * Fires the given native event on the specified handlers. * * @param nativeEvent the native event - * @param handlers the event manager containing the handlers to fire + * @param handlers the event manager containing the handlers to fire (may be + * null) */ public static void fireNativeEvent(Event nativeEvent, HandlerManager handlers) { -if (registered != null) { +assert nativeEvent != null : "nativeEvent must not be null"; +if (registered != null && handlers != null) { final DomEvent.Type typeKey = registered.unsafeGet(nativeEvent.getType()); - if (handlers != null) { + if (typeKey != null) { // Store and restore native event just in case we are in recursive // loop. Event currentNative = typeKey.flyweight.nativeEvent; --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
The fireEvent method is currently final because our addHandler/removeHandler is relying on our version of fireEvents being called because we are handling concurrent adds and removes using an internal counter managed by fireEvent. By the way, as the GwtEventPreview interface is meant to address just this use case, would it work in your case? Not that we are implementing it right now, but it would be good to know if we have a working solution. Also, how important is having a protected widget createHandlers() method? Currently I've been talked out of it under the hypothesis it can be added later. On Tue, Nov 11, 2008 at 12:42 PM, Ray Ryan <[EMAIL PROTECTED]> wrote: > None that I can see. Kelly, I think you pushed for this clampdown. Still > want it? > rjrjr > > > On Tue, Nov 11, 2008 at 9:41 AM, Ray Cromwell <[EMAIL PROTECTED]>wrote: > >> I would prefer HandlerManager not be so finalized. I had a real use >> case for creating a version of fireEvent that dealt with DOM-like >> event bubbling for non-DOM events, the effect of freezing >> HandlerManager overrides would deny me the ability of creating a >> EventBubblingHandlerManager. Is there a good reason to prevent >> subclassing and overriding fireEvent? >> -Ray >> >> >> On Tue, Nov 11, 2008 at 8:28 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: >> > Do you have a proposal in mind? Everything we tightened down we had good >> > reason to do so. >> > On Tue, Nov 11, 2008 at 11:17 AM, Ray Ryan <[EMAIL PROTECTED]> wrote: >> >> >> >> And as Emily and I just chatted offline, if we're loosening things up >> I'd >> >> rather see us allow folks to provide their own HandlerManager >> implementation >> >> (or wrapper around ours) than just try to predict the one or two hooks >> >> they'll find useful. >> >> rjrjr >> >> >> >> On Tue, Nov 11, 2008 at 7:59 AM, Emily Crutcher <[EMAIL PROTECTED]> >> wrote: >> >>> >> >>> We have made the fireEvents() final in handler manager and made it >> >>> impossible for users to replace the handler manager in widget, so I >> think >> >>> this change would be necessary to preserve the full spirit of what >> we've >> >>> been doing to upgrade the user's event system. >> >>> >> >>> However, we can tell people to use super-source to replace their >> handler >> >>> manager class instead. It is not as clean of a solution, but it will >> work, >> >>> and we can wait to see if anyone truly howls for this feature and put >> it >> >>> into gwt 2.0 instead, then it can be a cool upgrade instead :-). >> >>> >> >>> >> >>>Cheers, >> >>> >> >>> Emily >> >>> >> >>> >> >>> On Tue, Nov 11, 2008 at 10:31 AM, Bruce Johnson <[EMAIL PROTECTED]> >> wrote: >> >> Is this really part of the handler update? If this can wait, let's >> wait. >> We need to wrap up the changes to handlers ASAP. >> On Tue, Nov 11, 2008 at 9:37 AM, Emily Crutcher <[EMAIL PROTECTED]> >> wrote: >> > >> > I've managed to convince myself that it would be a trivial amount of >> > work to introduce a GwtEventPreview interface into the events >> package and >> > that the change would be a good one. In specific we would have: >> > >> > public interface GwtEventPreview { >> > boolean onGwtEventPreview(GwtEvent event); >> > } >> > >> > and, in HandlerManager: >> > >> > public void setGwtEventPreview(GwtEventPreview preview) >> > >> > >> > Then, in the final fireEvent method, if a preview has been >> installed, >> > the event is routed through the preview first and is only fired if >> the >> > preview returns true. >> > Can anyone think of any problems with this logic, any reason this >> > change would take more then a few minutes to create, or >> > any potentially better solutions which we might want to use instead? >> As we >> > can certainly wait until GWT 2.0 to introduce something like this if >> we can >> > think of any conceivable objections. >> > >> > Cheers, >> > Emily >> > >> > >> > >> > >> > -- >> > "There are only 10 types of people in the world: Those who >> understand >> > binary, and those who don't" >> > >> > >> >> >> >>> >> > >> > >> > >> > -- >> > "There are only 10 types of people in the world: Those who understand >> > binary, and those who don't" >> > >> > > >> > >> > > > > > -- "There are only 10 types of people in the world: Those who understand binary, and those who don't" --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
None that I can see. Kelly, I think you pushed for this clampdown. Still want it? rjrjr On Tue, Nov 11, 2008 at 9:41 AM, Ray Cromwell <[EMAIL PROTECTED]> wrote: > I would prefer HandlerManager not be so finalized. I had a real use > case for creating a version of fireEvent that dealt with DOM-like > event bubbling for non-DOM events, the effect of freezing > HandlerManager overrides would deny me the ability of creating a > EventBubblingHandlerManager. Is there a good reason to prevent > subclassing and overriding fireEvent? > -Ray > > > On Tue, Nov 11, 2008 at 8:28 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > > Do you have a proposal in mind? Everything we tightened down we had good > > reason to do so. > > On Tue, Nov 11, 2008 at 11:17 AM, Ray Ryan <[EMAIL PROTECTED]> wrote: > >> > >> And as Emily and I just chatted offline, if we're loosening things up > I'd > >> rather see us allow folks to provide their own HandlerManager > implementation > >> (or wrapper around ours) than just try to predict the one or two hooks > >> they'll find useful. > >> rjrjr > >> > >> On Tue, Nov 11, 2008 at 7:59 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > >>> > >>> We have made the fireEvents() final in handler manager and made it > >>> impossible for users to replace the handler manager in widget, so I > think > >>> this change would be necessary to preserve the full spirit of what > we've > >>> been doing to upgrade the user's event system. > >>> > >>> However, we can tell people to use super-source to replace their > handler > >>> manager class instead. It is not as clean of a solution, but it will > work, > >>> and we can wait to see if anyone truly howls for this feature and put > it > >>> into gwt 2.0 instead, then it can be a cool upgrade instead :-). > >>> > >>> > >>>Cheers, > >>> > >>> Emily > >>> > >>> > >>> On Tue, Nov 11, 2008 at 10:31 AM, Bruce Johnson <[EMAIL PROTECTED]> > wrote: > > Is this really part of the handler update? If this can wait, let's > wait. > We need to wrap up the changes to handlers ASAP. > On Tue, Nov 11, 2008 at 9:37 AM, Emily Crutcher <[EMAIL PROTECTED]> > wrote: > > > > I've managed to convince myself that it would be a trivial amount of > > work to introduce a GwtEventPreview interface into the events package > and > > that the change would be a good one. In specific we would have: > > > > public interface GwtEventPreview { > > boolean onGwtEventPreview(GwtEvent event); > > } > > > > and, in HandlerManager: > > > > public void setGwtEventPreview(GwtEventPreview preview) > > > > > > Then, in the final fireEvent method, if a preview has been installed, > > the event is routed through the preview first and is only fired if > the > > preview returns true. > > Can anyone think of any problems with this logic, any reason this > > change would take more then a few minutes to create, or > > any potentially better solutions which we might want to use instead? > As we > > can certainly wait until GWT 2.0 to introduce something like this if > we can > > think of any conceivable objections. > > > > Cheers, > > Emily > > > > > > > > > > -- > > "There are only 10 types of people in the world: Those who understand > > binary, and those who don't" > > > > > > > >>> > > > > > > > > -- > > "There are only 10 types of people in the world: Those who understand > > binary, and those who don't" > > > > > > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
I would prefer HandlerManager not be so finalized. I had a real use case for creating a version of fireEvent that dealt with DOM-like event bubbling for non-DOM events, the effect of freezing HandlerManager overrides would deny me the ability of creating a EventBubblingHandlerManager. Is there a good reason to prevent subclassing and overriding fireEvent? -Ray On Tue, Nov 11, 2008 at 8:28 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > Do you have a proposal in mind? Everything we tightened down we had good > reason to do so. > On Tue, Nov 11, 2008 at 11:17 AM, Ray Ryan <[EMAIL PROTECTED]> wrote: >> >> And as Emily and I just chatted offline, if we're loosening things up I'd >> rather see us allow folks to provide their own HandlerManager implementation >> (or wrapper around ours) than just try to predict the one or two hooks >> they'll find useful. >> rjrjr >> >> On Tue, Nov 11, 2008 at 7:59 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: >>> >>> We have made the fireEvents() final in handler manager and made it >>> impossible for users to replace the handler manager in widget, so I think >>> this change would be necessary to preserve the full spirit of what we've >>> been doing to upgrade the user's event system. >>> >>> However, we can tell people to use super-source to replace their handler >>> manager class instead. It is not as clean of a solution, but it will work, >>> and we can wait to see if anyone truly howls for this feature and put it >>> into gwt 2.0 instead, then it can be a cool upgrade instead :-). >>> >>> >>>Cheers, >>> >>> Emily >>> >>> >>> On Tue, Nov 11, 2008 at 10:31 AM, Bruce Johnson <[EMAIL PROTECTED]> wrote: Is this really part of the handler update? If this can wait, let's wait. We need to wrap up the changes to handlers ASAP. On Tue, Nov 11, 2008 at 9:37 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > > I've managed to convince myself that it would be a trivial amount of > work to introduce a GwtEventPreview interface into the events package and > that the change would be a good one. In specific we would have: > > public interface GwtEventPreview { > boolean onGwtEventPreview(GwtEvent event); > } > > and, in HandlerManager: > > public void setGwtEventPreview(GwtEventPreview preview) > > > Then, in the final fireEvent method, if a preview has been installed, > the event is routed through the preview first and is only fired if the > preview returns true. > Can anyone think of any problems with this logic, any reason this > change would take more then a few minutes to create, or > any potentially better solutions which we might want to use instead? As > we > can certainly wait until GWT 2.0 to introduce something like this if we > can > think of any conceivable objections. > > Cheers, > Emily > > > > > -- > "There are only 10 types of people in the world: Those who understand > binary, and those who don't" > > >>> > > > > -- > "There are only 10 types of people in the world: Those who understand > binary, and those who don't" > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
Actually, we also should get some good feedback from the first gwt 1.6 milestone. That will also help us calibrate how important this feature is to folks, and we can always introduce something like it after the milestone if it seems to be very much missed. On Tue, Nov 11, 2008 at 11:36 AM, Ray Ryan <[EMAIL PROTECTED]> wrote: > The only proposal I have in mind right now is that we stop messing with > stuff and get the branch merged. > rjrjr > > > On Tue, Nov 11, 2008 at 8:28 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > >> Do you have a proposal in mind? Everything we tightened down we had good >> reason to do so. >> >> On Tue, Nov 11, 2008 at 11:17 AM, Ray Ryan <[EMAIL PROTECTED]> wrote: >> >>> And as Emily and I just chatted offline, if we're loosening things up I'd >>> rather see us allow folks to provide their own HandlerManager implementation >>> (or wrapper around ours) than just try to predict the one or two hooks >>> they'll find useful. >>> rjrjr >>> >>> >>> On Tue, Nov 11, 2008 at 7:59 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: >>> We have made the fireEvents() final in handler manager and made it impossible for users to replace the handler manager in widget, so I think this change would be necessary to preserve the full spirit of what we've been doing to upgrade the user's event system. However, we can tell people to use super-source to replace their handler manager class instead. It is not as clean of a solution, but it will work, and we can wait to see if anyone truly howls for this feature and put it into gwt 2.0 instead, then it can be a cool upgrade instead :-). Cheers, Emily On Tue, Nov 11, 2008 at 10:31 AM, Bruce Johnson <[EMAIL PROTECTED]>wrote: > Is this really part of the handler update? If this can wait, let's > wait. We need to wrap up the changes to handlers ASAP. > > On Tue, Nov 11, 2008 at 9:37 AM, Emily Crutcher <[EMAIL PROTECTED]>wrote: > >> I've managed to convince myself that it would be a trivial amount of >> work to introduce a GwtEventPreview interface into the events package and >> that the change would be a good one. In specific we would have: >> >> >> public interface GwtEventPreview { >> boolean onGwtEventPreview(GwtEvent event); >> } >> >> >> and, in HandlerManager: >> >> public void setGwtEventPreview(GwtEventPreview preview) >> >> >> >> Then, in the final fireEvent method, if a preview has been installed, >> the event is routed through the preview first and is only fired if the >> preview returns true. >> >> Can anyone think of any problems with this logic, any reason this >> change would take more then a few minutes to create, or >> any potentially better solutions which we might want to use instead? As >> we >> can certainly wait until GWT 2.0 to introduce something like this if we >> can >> think of any conceivable objections. >> >> >> Cheers, >> >> Emily >> >> >> >> >> >> -- >> "There are only 10 types of people in the world: Those who understand >> binary, and those who don't" >> >> >> > > > > -- "There are only 10 types of people in the world: Those who understand binary, and those who don't" >>> >>> >> >> >> -- >> "There are only 10 types of people in the world: Those who understand >> binary, and those who don't" >> > > -- "There are only 10 types of people in the world: Those who understand binary, and those who don't" --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR: Want to introduce HasElement interface above UIObject
1. Its more API clutter Yep, the question is it useful api clutter. 2. Can't users just add listeners directly to their widgets that they put into the tabs? Not necessarily, the tabs maybe added via some sort of injection dependency. For instance, extra functionality, including tabs, are often added based upon the groups a user belows to. So, when the programmer wants to use a custom keyboard navigation on her tab panel, she would have to go into places scattered throughout the code base in order to convert all of the tabs to widgets which support keyboard events and add her handlers there. 3. We have a lot of widgets that "wrap" content. Will they all have wrappers? Not unless there is a compelling reason for them to do so. Here, we are replacing functionality that already allows users to access these internal widgets through the onKeyDown() and onClick() public methods. Now, when there is a compelling reason, we would be exposing sub-parts using get*Wrapper which returns a characteristic interface, so if this is the wrong pattern, we should figure it out before we publish it! 4. I think this is too implementation specific to make public. The fact that we wrap tabs in a ClickDecoratorPanel so we can catch events and style them is just an implementation. We could just as easily (well, not as easily) catch events on the outer element and determine where the event occured. Completely agreed, that is why rather then exposing ClickDecoratorPanel we are exposing a characteristic interface instead. P.S. Ray wins a cookie because he was right about you having an opinion on this :-). On Tue, Nov 11, 2008 at 10:43 AM, John LaBanca <[EMAIL PROTECTED]> wrote: > At first glance, I don't see the need for a public TabWrapper interface. > Can you tell me what the use case is for this? My main concerns are the > following: > 1. Its more API clutter > 2. Can't users just add listeners directly to their widgets that they put > into the tabs? > 3. We have a lot of widgets that "wrap" content. Will they all have > wrappers? > 4. I think this is too implementation specific to make public. The fact > that we wrap tabs in a ClickDecoratorPanel so we can catch events and style > them is just an implementation. We could just as easily (well, not as > easily) catch events on the outer element and determine where the event > occured. > > But, since you obviously thought this out, I'm sure I'm missing some key > point. > > Thanks, > John LaBanca > [EMAIL PROTECTED] > > > > On Mon, Nov 10, 2008 at 8:16 PM, Ray Ryan <[EMAIL PROTECTED]> wrote: > >> (Reviving the old Response Requested meaning of RR--there is no patch >> here, but rather a design question.) >> >> Take a look at the new TabWrapper getTabWrapper(int index) method on >> TabBar in the 1_6_clean_events branch: >> >> >> http://code.google.com/p/google-web-toolkit/source/browse/branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/TabBar.java >> >> See that interface it returns, TabWrapper extends HasAllKeyHandlers, >> HasClickHandlers? Emily and I would like to make that more useful without >> necessarily committing to it being a Widget. >> To that end, we'd like to introduce a new interface, HasElement, which >> will hold most or all of the public API of UIObject. We'd make similar use >> of the interface for DialogBox#getCaptionWrapper(), and one or two other >> places that I hope Emily will remind me of. >> >> Any objections or warnings before we go ahead and make the change? >> >> rjrjr >> >> > > > > -- "There are only 10 types of people in the world: Those who understand binary, and those who don't" --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
The only proposal I have in mind right now is that we stop messing with stuff and get the branch merged. rjrjr On Tue, Nov 11, 2008 at 8:28 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > Do you have a proposal in mind? Everything we tightened down we had good > reason to do so. > > On Tue, Nov 11, 2008 at 11:17 AM, Ray Ryan <[EMAIL PROTECTED]> wrote: > >> And as Emily and I just chatted offline, if we're loosening things up I'd >> rather see us allow folks to provide their own HandlerManager implementation >> (or wrapper around ours) than just try to predict the one or two hooks >> they'll find useful. >> rjrjr >> >> >> On Tue, Nov 11, 2008 at 7:59 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: >> >>> We have made the fireEvents() final in handler manager and made it >>> impossible for users to replace the handler manager in widget, so I think >>> this change would be necessary to preserve the full spirit of what we've >>> been doing to upgrade the user's event system. >>> >>> However, we can tell people to use super-source to replace their handler >>> manager class instead. It is not as clean of a solution, but it will work, >>> and we can wait to see if anyone truly howls for this feature and put it >>> into gwt 2.0 instead, then it can be a cool upgrade instead :-). >>> >>> >>>Cheers, >>> >>> Emily >>> >>> >>> >>> On Tue, Nov 11, 2008 at 10:31 AM, Bruce Johnson <[EMAIL PROTECTED]>wrote: >>> Is this really part of the handler update? If this can wait, let's wait. We need to wrap up the changes to handlers ASAP. On Tue, Nov 11, 2008 at 9:37 AM, Emily Crutcher <[EMAIL PROTECTED]>wrote: > I've managed to convince myself that it would be a trivial amount of > work to introduce a GwtEventPreview interface into the events package and > that the change would be a good one. In specific we would have: > > > public interface GwtEventPreview { > boolean onGwtEventPreview(GwtEvent event); > } > > > and, in HandlerManager: > > public void setGwtEventPreview(GwtEventPreview preview) > > > > Then, in the final fireEvent method, if a preview has been installed, > the event is routed through the preview first and is only fired if the > preview returns true. > > Can anyone think of any problems with this logic, any reason this > change would take more then a few minutes to create, or > any potentially better solutions which we might want to use instead? As > we > can certainly wait until GWT 2.0 to introduce something like this if we > can > think of any conceivable objections. > > > Cheers, > > Emily > > > > > > -- > "There are only 10 types of people in the world: Those who understand > binary, and those who don't" > > > >>> >>> >>> -- >>> "There are only 10 types of people in the world: Those who understand >>> binary, and those who don't" >>> >> >> > > > -- > "There are only 10 types of people in the world: Those who understand > binary, and those who don't" > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Turning off runtime checks
On Tue, Nov 11, 2008 at 10:51 AM, Isaac Truett <[EMAIL PROTECTED]> wrote: > > > I'm curious what things you're referring to here. Generally, I think > we're > > pretty open to more checks in hosted mode. As an example, hosted mode > always > > runs with assertions enabled. > > More assertions are exactly what I've been hoping for. The one case > that's stuck with me was issue 2365. As I understand it, those > assertions (and the check method, if only called in assertions) will > all be compiled away, so there's no size or performance penalty in web > mode. That's exactly right. And as we add new library classes, I anticipate we'll be doing a lot more assertion checking versus if/then/throw type tests. This is one area where I honestly believe the traditional Java patterns are just plain wrong: coding that's far too defensive. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
Do you have a proposal in mind? Everything we tightened down we had good reason to do so. On Tue, Nov 11, 2008 at 11:17 AM, Ray Ryan <[EMAIL PROTECTED]> wrote: > And as Emily and I just chatted offline, if we're loosening things up I'd > rather see us allow folks to provide their own HandlerManager implementation > (or wrapper around ours) than just try to predict the one or two hooks > they'll find useful. > rjrjr > > > On Tue, Nov 11, 2008 at 7:59 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > >> We have made the fireEvents() final in handler manager and made it >> impossible for users to replace the handler manager in widget, so I think >> this change would be necessary to preserve the full spirit of what we've >> been doing to upgrade the user's event system. >> >> However, we can tell people to use super-source to replace their handler >> manager class instead. It is not as clean of a solution, but it will work, >> and we can wait to see if anyone truly howls for this feature and put it >> into gwt 2.0 instead, then it can be a cool upgrade instead :-). >> >> >>Cheers, >> >> Emily >> >> >> >> On Tue, Nov 11, 2008 at 10:31 AM, Bruce Johnson <[EMAIL PROTECTED]> wrote: >> >>> Is this really part of the handler update? If this can wait, let's wait. >>> We need to wrap up the changes to handlers ASAP. >>> >>> On Tue, Nov 11, 2008 at 9:37 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: >>> I've managed to convince myself that it would be a trivial amount of work to introduce a GwtEventPreview interface into the events package and that the change would be a good one. In specific we would have: public interface GwtEventPreview { boolean onGwtEventPreview(GwtEvent event); } and, in HandlerManager: public void setGwtEventPreview(GwtEventPreview preview) Then, in the final fireEvent method, if a preview has been installed, the event is routed through the preview first and is only fired if the preview returns true. Can anyone think of any problems with this logic, any reason this change would take more then a few minutes to create, or any potentially better solutions which we might want to use instead? As we can certainly wait until GWT 2.0 to introduce something like this if we can think of any conceivable objections. Cheers, Emily -- "There are only 10 types of people in the world: Those who understand binary, and those who don't" >>> >>> >>> >>> >> >> >> -- >> "There are only 10 types of people in the world: Those who understand >> binary, and those who don't" >> > > -- "There are only 10 types of people in the world: Those who understand binary, and those who don't" --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Turning off runtime checks
Maybe John can comment on issue #2365 in particular. On Tue, Nov 11, 2008 at 10:51 AM, Isaac Truett <[EMAIL PROTECTED]> wrote: > > > I'm curious what things you're referring to here. Generally, I think > we're > > pretty open to more checks in hosted mode. As an example, hosted mode > always > > runs with assertions enabled. > > More assertions are exactly what I've been hoping for. The one case > that's stuck with me was issue 2365. As I understand it, those > assertions (and the check method, if only called in assertions) will > all be compiled away, so there's no size or performance penalty in web > mode. > > > > On Tue, Nov 11, 2008 at 10:43 AM, Bruce Johnson <[EMAIL PROTECTED]> wrote: > > On Tue, Nov 11, 2008 at 10:38 AM, Isaac Truett <[EMAIL PROTECTED]> > wrote: > >> > >> > We've been kicking around the idea of an "unsafe but fast" compile for > >> > exactly this reason. > >> > >> I always thought the compile was "unsafe" already. > > > > Only for things that are truly unaffordable, like null checks on every > > object access. > > > >> > >> I've even suggested adding more hosted mode-only checks > >> and been rejected because of the "cost" of such runtime validations. > > > > I'm curious what things you're referring to here. Generally, I think > we're > > pretty open to more checks in hosted mode. As an example, hosted mode > always > > runs with assertions enabled. > > > > > > > > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
And as Emily and I just chatted offline, if we're loosening things up I'd rather see us allow folks to provide their own HandlerManager implementation (or wrapper around ours) than just try to predict the one or two hooks they'll find useful. rjrjr On Tue, Nov 11, 2008 at 7:59 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > We have made the fireEvents() final in handler manager and made it > impossible for users to replace the handler manager in widget, so I think > this change would be necessary to preserve the full spirit of what we've > been doing to upgrade the user's event system. > > However, we can tell people to use super-source to replace their handler > manager class instead. It is not as clean of a solution, but it will work, > and we can wait to see if anyone truly howls for this feature and put it > into gwt 2.0 instead, then it can be a cool upgrade instead :-). > > >Cheers, > > Emily > > > > On Tue, Nov 11, 2008 at 10:31 AM, Bruce Johnson <[EMAIL PROTECTED]> wrote: > >> Is this really part of the handler update? If this can wait, let's wait. >> We need to wrap up the changes to handlers ASAP. >> >> On Tue, Nov 11, 2008 at 9:37 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: >> >>> I've managed to convince myself that it would be a trivial amount of work >>> to introduce a GwtEventPreview interface into the events package and that >>> the change would be a good one. In specific we would have: >>> >>> >>> public interface GwtEventPreview { >>> boolean onGwtEventPreview(GwtEvent event); >>> } >>> >>> >>> and, in HandlerManager: >>> >>> public void setGwtEventPreview(GwtEventPreview preview) >>> >>> >>> >>> Then, in the final fireEvent method, if a preview has been installed, the >>> event is routed through the preview first and is only fired if the preview >>> returns true. >>> >>> Can anyone think of any problems with this logic, any reason this change >>> would take more then a few minutes to create, or any potentially better >>> solutions which we might want to use instead? As we can certainly wait >>> until GWT 2.0 to introduce something like this if we can think of >>> any conceivable objections. >>> >>> >>> Cheers, >>> >>> Emily >>> >>> >>> >>> >>> >>> -- >>> "There are only 10 types of people in the world: Those who understand >>> binary, and those who don't" >>> >>> >>> >> >> >> >> > > > -- > "There are only 10 types of people in the world: Those who understand > binary, and those who don't" > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: IFrameTemplate.js broken for noserver hosted mode in trunk
Lex is going to take a look at this, it was part of the runAsync changes. On Tue, Nov 11, 2008 at 1:47 AM, Cameron Braid <[EMAIL PROTECTED]> wrote: > hosted.html expects the querystring to contain only the module strongName > where as it curently contains strongName + ".cache.html" > > IFrameTemplate.js in maybeInjectFrame() appends .cache.html to the > strongName (line 298). > > Either IFrameTemplate.js needs to not append .cache.html for hostedmode, or > hostd.html needds to strip it out. > > A suggested fix (which I have verified in my dev environment) is this : > > Index: dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js > === > --- dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js(revision > 3953) > +++ dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js(working > copy) > @@ -295,7 +295,7 @@ > millis:(new Date()).getTime(), > type: 'moduleRequested' >}); > - iframe.contentWindow.location.replace(base + strongName + > '.cache.html'); > + iframe.contentWindow.location.replace(base + strongName + > strongNameExt); > } >} > > @@ -351,9 +351,12 @@ >}); > >var strongName; > + var strongNameExt; >if (isHostedMode()) { > strongName = "hosted.html?__MODULE_FUNC__"; > +strongNameExt = ""; >} else { > +strongNameExt = ".cache.html"; > try { > // __PERMUTATIONS_BEGIN__ >// Permutation logic > > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: runAsync fragment loading bug in IE
On Tue, Nov 11, 2008 at 10:50 AM, John LaBanca <[EMAIL PROTECTED]> wrote: >> Do I remember correctly that you have looked at script-loading gymnastics >> in the HTML host pages before? > > No, I looked into style sheet loading gymnastics while working on the > Showcase so we could load style sheets dynamically. I can't recall that > I've ever messed around with script loading. > > Still, the patch looks good to me. Thanks, John. Also, Kelly and Cameron. It's in revision 4016. -Lex --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
We have made the fireEvents() final in handler manager and made it impossible for users to replace the handler manager in widget, so I think this change would be necessary to preserve the full spirit of what we've been doing to upgrade the user's event system. However, we can tell people to use super-source to replace their handler manager class instead. It is not as clean of a solution, but it will work, and we can wait to see if anyone truly howls for this feature and put it into gwt 2.0 instead, then it can be a cool upgrade instead :-). Cheers, Emily On Tue, Nov 11, 2008 at 10:31 AM, Bruce Johnson <[EMAIL PROTECTED]> wrote: > Is this really part of the handler update? If this can wait, let's wait. We > need to wrap up the changes to handlers ASAP. > > On Tue, Nov 11, 2008 at 9:37 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > >> I've managed to convince myself that it would be a trivial amount of work >> to introduce a GwtEventPreview interface into the events package and that >> the change would be a good one. In specific we would have: >> >> >> public interface GwtEventPreview { >> boolean onGwtEventPreview(GwtEvent event); >> } >> >> >> and, in HandlerManager: >> >> public void setGwtEventPreview(GwtEventPreview preview) >> >> >> >> Then, in the final fireEvent method, if a preview has been installed, the >> event is routed through the preview first and is only fired if the preview >> returns true. >> >> Can anyone think of any problems with this logic, any reason this change >> would take more then a few minutes to create, or any potentially better >> solutions which we might want to use instead? As we can certainly wait >> until GWT 2.0 to introduce something like this if we can think of >> any conceivable objections. >> >> >> Cheers, >> >> Emily >> >> >> >> >> >> -- >> "There are only 10 types of people in the world: Those who understand >> binary, and those who don't" >> >> >> > > > > -- "There are only 10 types of people in the world: Those who understand binary, and those who don't" --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR: eager upref
On Mon, Nov 10, 2008 at 6:42 PM, Scott Blum <[EMAIL PROTECTED]> wrote: > Here is the result of our live desk review. Thank you. After some quick tests, I committed it at revision 4015. -Lex --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit commit] r4016 - trunk/dev/core/src/com/google/gwt/core/linker
Author: [EMAIL PROTECTED] Date: Tue Nov 11 07:53:27 2008 New Revision: 4016 Modified: trunk/dev/core/src/com/google/gwt/core/linker/IFrameLinker.java Log: When creating a script tag to load code for runAsync, create the tag in the same DOM element that the tag will be attached to. Suggested by: Cameron Braid Review by: jlabanca, knorton Modified: trunk/dev/core/src/com/google/gwt/core/linker/IFrameLinker.java == --- trunk/dev/core/src/com/google/gwt/core/linker/IFrameLinker.java (original) +++ trunk/dev/core/src/com/google/gwt/core/linker/IFrameLinker.java Tue Nov 11 07:53:27 2008 @@ -85,7 +85,7 @@ out.print("function __gwtStartLoadingFragment(frag) {"); out.newlineOpt(); out.indentIn(); -out.print(" var script = $doc.createElement('script');"); +out.print(" var script = document.createElement('script');"); out.newlineOpt(); out.print(" script.src = '" + strongName + "-' + frag + '" + FRAGMENT_EXTENSION + "';"); out.print(" document.getElementsByTagName('head').item(0).appendChild(script);"); --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Turning off runtime checks
> I'm curious what things you're referring to here. Generally, I think we're > pretty open to more checks in hosted mode. As an example, hosted mode always > runs with assertions enabled. More assertions are exactly what I've been hoping for. The one case that's stuck with me was issue 2365. As I understand it, those assertions (and the check method, if only called in assertions) will all be compiled away, so there's no size or performance penalty in web mode. On Tue, Nov 11, 2008 at 10:43 AM, Bruce Johnson <[EMAIL PROTECTED]> wrote: > On Tue, Nov 11, 2008 at 10:38 AM, Isaac Truett <[EMAIL PROTECTED]> wrote: >> >> > We've been kicking around the idea of an "unsafe but fast" compile for >> > exactly this reason. >> >> I always thought the compile was "unsafe" already. > > Only for things that are truly unaffordable, like null checks on every > object access. > >> >> I've even suggested adding more hosted mode-only checks >> and been rejected because of the "cost" of such runtime validations. > > I'm curious what things you're referring to here. Generally, I think we're > pretty open to more checks in hosted mode. As an example, hosted mode always > runs with assertions enabled. > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: runAsync fragment loading bug in IE
> > Do I remember correctly that you have looked at script-loading gymnastics > in the HTML host pages before? > No, I looked into style sheet loading gymnastics while working on the Showcase so we could load style sheets dynamically. I can't recall that I've ever messed around with script loading. Still, the patch looks good to me. Thanks, John LaBanca [EMAIL PROTECTED] On Mon, Nov 10, 2008 at 6:08 PM, Lex Spoon <[EMAIL PROTECTED]> wrote: > On Mon, Nov 10, 2008 at 2:33 PM, Kelly Norton <[EMAIL PROTECTED]> wrote: > > For iframe loading, Cameron's change is correct. We should be loading > > code into the document corresponding to our code context and not the > > host page context. > > Can I consider that an LGTM? > > > > However, I am wondering how this is going to work > > in the xs case where the code is loaded into an anonymous function in > > the host page context? > > No, that sounds like a problem all right. For independent reasons, > using XHR instead of script tags sounds better, anyway. The > downloaded result could then be eval-ed in the correct scope. That > strategy would seem to work fine for the XS linker, so long as the > call to eval happens within the anonymous function. > > > Lex > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Review request: JSE (Invalid argument) in AbstractScrollTable
LGTM Thanks, John LaBanca [EMAIL PROTECTED] On Mon, Nov 10, 2008 at 9:31 PM, Isaac Truett <[EMAIL PROTECTED]> wrote: > John, > > I wanted to run this one-liner by you before committing. I'm seeing > the JSE below in hosted mode when the body of my PagingScrollTable is > empty and has 0 height. The headerHeight is positive and (totalHeight > - headerHeight - footerHeight) comes out to a negative number. The > patch following the stacktrace fixes the problem. > > Thanks, > Isaac > > > [ERROR] Uncaught exception escaped > com.google.gwt.core.client.JavaScriptException: (Error): Invalid argument. > number: -2147024809 > description: Invalid argument. >at com.google.gwt.dom.client.Style$.setProperty$(Native Method) >at com.google.gwt.user.client.DOM.setStyleAttribute(DOM.java:1201) >at > com.google.gwt.gen2.table.client.AbstractScrollTable.resizeTablesVerticallyNow(AbstractScrollTable.java:1375) >at > com.google.gwt.gen2.table.client.AbstractScrollTable$1.execute(AbstractScrollTable.java:614) >at > com.google.gwt.user.client.CommandExecutor.doExecuteCommands(CommandExecutor.java:311) >at > com.google.gwt.user.client.CommandExecutor$2.run(CommandExecutor.java:206) >at com.google.gwt.user.client.Timer.fireImpl(Timer.java:164) >at com.google.gwt.user.client.Timer.fireAndCatch(Timer.java:150) >at com.google.gwt.user.client.Timer.fire(Timer.java:142) > > > > Index: src/com/google/gwt/gen2/table/client/AbstractScrollTable.java > === > --- src/com/google/gwt/gen2/table/client/AbstractScrollTable.java > (revision > 1195) > +++ src/com/google/gwt/gen2/table/client/AbstractScrollTable.java > (working copy) > @@ -1395,7 +1395,7 @@ > DOM.setStyleAttribute(footerWrapper, "height", footerHeight + "px"); > } > DOM.setStyleAttribute(dataWrapper, "height", > -(totalHeight - headerHeight - footerHeight) + "px"); > +Math.max(totalHeight - headerHeight - footerHeight, 0) + "px"); > DOM.setStyleAttribute(dataWrapper, "overflow", "hidden"); > DOM.setStyleAttribute(dataWrapper, "overflow", "auto"); > scrollTables(true); > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR: Want to introduce HasElement interface above UIObject
At first glance, I don't see the need for a public TabWrapper interface. Can you tell me what the use case is for this? My main concerns are the following: 1. Its more API clutter 2. Can't users just add listeners directly to their widgets that they put into the tabs? 3. We have a lot of widgets that "wrap" content. Will they all have wrappers? 4. I think this is too implementation specific to make public. The fact that we wrap tabs in a ClickDecoratorPanel so we can catch events and style them is just an implementation. We could just as easily (well, not as easily) catch events on the outer element and determine where the event occured. But, since you obviously thought this out, I'm sure I'm missing some key point. Thanks, John LaBanca [EMAIL PROTECTED] On Mon, Nov 10, 2008 at 8:16 PM, Ray Ryan <[EMAIL PROTECTED]> wrote: > (Reviving the old Response Requested meaning of RR--there is no patch here, > but rather a design question.) > > Take a look at the new TabWrapper getTabWrapper(int index) method on > TabBar in the 1_6_clean_events branch: > > > http://code.google.com/p/google-web-toolkit/source/browse/branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/TabBar.java > > See that interface it returns, TabWrapper extends HasAllKeyHandlers, > HasClickHandlers? Emily and I would like to make that more useful without > necessarily committing to it being a Widget. > To that end, we'd like to introduce a new interface, HasElement, which will > hold most or all of the public API of UIObject. We'd make similar use of the > interface for DialogBox#getCaptionWrapper(), and one or two other places > that I hope Emily will remind me of. > > Any objections or warnings before we go ahead and make the change? > > rjrjr > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Turning off runtime checks
On Tue, Nov 11, 2008 at 10:38 AM, Isaac Truett <[EMAIL PROTECTED]> wrote: > > > We've been kicking around the idea of an "unsafe but fast" compile for > > exactly this reason. > > I always thought the compile was "unsafe" already. Only for things that are truly unaffordable, like null checks on every object access. > I've even suggested adding more hosted mode-only checks > and been rejected because of the "cost" of such runtime validations. > I'm curious what things you're referring to here. Generally, I think we're pretty open to more checks in hosted mode. As an example, hosted mode always runs with assertions enabled. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
> Can you think of any other relevant use cases? 4. Uncaught exception in onGwtEventPreview(). On Tue, Nov 11, 2008 at 10:25 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > The naming was mimicking the EventPreview interface we have for the > underlying native events. Don't mind changing it, but it seems like > the consistency is nice. > I think the testing should be fairly trivial as we have three use cases. > > no event preview set on a handler manager. > an event preview set on a handler manager that returns false > an event preview set on a handler manager that returns true > > Can you think of any other relevant use cases? I'll wait until after the > kids are asleep tonight to implement, so if any of you can think of any > objections throughout the day, please pipe up! Especially any reason that > would lead us to believe that his is not the canonical solution we want to > implement. > > > > On Tue, Nov 11, 2008 at 10:11 AM, Ray Ryan <[EMAIL PROTECTED]> wrote: >> >> It's fine with me if the trivial amount of time it will take to add >> includes time for test coverage. >> On naming, how about GwtEventPreviewer and setEventPreviewer. >> rjrjr >> On Tue, Nov 11, 2008 at 6:37 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: >>> >>> I've managed to convince myself that it would be a trivial amount of work >>> to introduce a GwtEventPreview interface into the events package and that >>> the change would be a good one. In specific we would have: >>> >>> public interface GwtEventPreview { >>> boolean onGwtEventPreview(GwtEvent event); >>> } >>> >>> and, in HandlerManager: >>> >>> public void setGwtEventPreview(GwtEventPreview preview) >>> >>> >>> Then, in the final fireEvent method, if a preview has been installed, the >>> event is routed through the preview first and is only fired if the preview >>> returns true. >>> Can anyone think of any problems with this logic, any reason this change >>> would take more then a few minutes to create, or any potentially better >>> solutions which we might want to use instead? As we can certainly wait >>> until GWT 2.0 to introduce something like this if we can think of >>> any conceivable objections. >>> >>> Cheers, >>> Emily >>> >>> >>> >>> >>> -- >>> "There are only 10 types of people in the world: Those who understand >>> binary, and those who don't" >> > > > > -- > "There are only 10 types of people in the world: Those who understand > binary, and those who don't" > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Turning off runtime checks
On Tue, Nov 11, 2008 at 10:38 AM, Isaac Truett <[EMAIL PROTECTED]> wrote: > > > We've been kicking around the idea of an "unsafe but fast" compile for > > exactly this reason. > > I always thought the compile was "unsafe" already. Hasn't the GWT > philosophy been to perform type safety/bounds/null checks only in > hosted mode, if at all? Are there many such checks currently left in > compiled code? I've even suggested adding more hosted mode-only checks > and been rejected because of the "cost" of such runtime validations. > It depends... we've definitely avoided doing certain checks in the JRE, but we do most of the language-level checks the JVM would do (with the notable exception of array bounds checking). But I definitely take your point to heart. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Turning off runtime checks
That's a great find, Ray. In terms of ideal product direction, I'd rather consider a flag like that (at least, one that's documented) as the last resort. Extra options tend to lead to option-shock, and we don't want people to have to think about things like that too much. Instead, I think we ought to prioritize doing better optimizations of the sort Scott mentioned because they would help not only this issue but many other aspects of performance as well. Then, once we've done everything we can reasonably think of, it might be worth considering complicating things with an extra published flag. All that said, I personally wouldn't object to a "-Xunsafe:" family of undocumented flags that people can use at their discretion. We should just try our best to ensure almost nobody ever has to really know about such flags. Do you have a patch for that, by any chance? :-) On Tue, Nov 11, 2008 at 10:30 AM, Scott Blum <[EMAIL PROTECTED]> wrote: > We've been kicking around the idea of an "unsafe but fast" compile for > exactly this reason. > OTOH, there are a couple of things we could do to make the type checks > faster even in the short term: > > 1) Do actual null tracking so as to omit the null check part in many cases. > > 2) Get away from using typeIdArray in favor of having cast information > accessible directly off the object, which should be faster. > > 3) Make sure it's inlined in all cases. > > > On Tue, Nov 11, 2008 at 2:14 AM, Ray Cromwell <[EMAIL PROTECTED]>wrote: > >> >> Heads up guys, >> >> I just profiled my app trying to squeeze every last drop of >> performance out for speedups on the iPhone which has slow Javascript, >> and I noticed that the canCastUnsafe/dynamicCast functions are >> collectively eating up 8.5% of the total runtime. It seems that the >> sole purpose of dynamicCast() is to throw a ClassCastException where >> the JVM would, but in production web-deployment mode, I would honestly >> prefer the option of having these checks omitted. Yes, there are some >> cases where throwing the exception would give the end user a better >> error message, but if the user is able to reproduce incorrect >> behavior, I think I would prefer to direct them to a debug >> build/permutation which has the checks. It seems the major place where >> this could trip up legitimate code is if someone was triggering CCEs >> on purpose and expecting to catch them with an exception handler. >> >> The main reason these checks are being inserted is because I switched >> from using a custom collection, to a List, and the compiler >> appears to be unable to use the generic type information of the JField >> to determine that the cast is unneccessary. >> >> Anyway, the question for discussion is, should the compiler have an >> -O2 mode which eliminates range checks, runtime cast checks, etc >> >> -Ray >> >> >> > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Turning off runtime checks
> We've been kicking around the idea of an "unsafe but fast" compile for > exactly this reason. I always thought the compile was "unsafe" already. Hasn't the GWT philosophy been to perform type safety/bounds/null checks only in hosted mode, if at all? Are there many such checks currently left in compiled code? I've even suggested adding more hosted mode-only checks and been rejected because of the "cost" of such runtime validations. On Tue, Nov 11, 2008 at 10:30 AM, Scott Blum <[EMAIL PROTECTED]> wrote: > We've been kicking around the idea of an "unsafe but fast" compile for > exactly this reason. > OTOH, there are a couple of things we could do to make the type checks > faster even in the short term: > 1) Do actual null tracking so as to omit the null check part in many cases. > 2) Get away from using typeIdArray in favor of having cast information > accessible directly off the object, which should be faster. > 3) Make sure it's inlined in all cases. > > On Tue, Nov 11, 2008 at 2:14 AM, Ray Cromwell <[EMAIL PROTECTED]> wrote: >> >> Heads up guys, >> >> I just profiled my app trying to squeeze every last drop of >> performance out for speedups on the iPhone which has slow Javascript, >> and I noticed that the canCastUnsafe/dynamicCast functions are >> collectively eating up 8.5% of the total runtime. It seems that the >> sole purpose of dynamicCast() is to throw a ClassCastException where >> the JVM would, but in production web-deployment mode, I would honestly >> prefer the option of having these checks omitted. Yes, there are some >> cases where throwing the exception would give the end user a better >> error message, but if the user is able to reproduce incorrect >> behavior, I think I would prefer to direct them to a debug >> build/permutation which has the checks. It seems the major place where >> this could trip up legitimate code is if someone was triggering CCEs >> on purpose and expecting to catch them with an exception handler. >> >> The main reason these checks are being inserted is because I switched >> from using a custom collection, to a List, and the compiler >> appears to be unable to use the generic type information of the JField >> to determine that the cast is unneccessary. >> >> Anyway, the question for discussion is, should the compiler have an >> -O2 mode which eliminates range checks, runtime cast checks, etc >> >> -Ray >> >> > > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
The naming was mimicking the EventPreview interface we have for the underlying native events. Don't mind changing it, but it seems like the consistency is nice. I think the testing should be fairly trivial as we have three use cases. 1. no event preview set on a handler manager. 2. an event preview set on a handler manager that returns false 3. an event preview set on a handler manager that returns true Can you think of any other relevant use cases? I'll wait until after the kids are asleep tonight to implement, so if any of you can think of any objections throughout the day, please pipe up! Especially any reason that would lead us to believe that his is not the canonical solution we want to implement. On Tue, Nov 11, 2008 at 10:11 AM, Ray Ryan <[EMAIL PROTECTED]> wrote: > It's fine with me if the trivial amount of time it will take to add > includes time for test coverage. > > On naming, how about GwtEventPreviewer and setEventPreviewer. > > rjrjr > > On Tue, Nov 11, 2008 at 6:37 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > >> I've managed to convince myself that it would be a trivial amount of work >> to introduce a GwtEventPreview interface into the events package and that >> the change would be a good one. In specific we would have: >> >> >> public interface GwtEventPreview { >> boolean onGwtEventPreview(GwtEvent event); >> } >> >> >> and, in HandlerManager: >> >> public void setGwtEventPreview(GwtEventPreview preview) >> >> >> >> Then, in the final fireEvent method, if a preview has been installed, the >> event is routed through the preview first and is only fired if the preview >> returns true. >> >> Can anyone think of any problems with this logic, any reason this change >> would take more then a few minutes to create, or any potentially better >> solutions which we might want to use instead? As we can certainly wait >> until GWT 2.0 to introduce something like this if we can think of >> any conceivable objections. >> >> >> Cheers, >> >> Emily >> >> >> >> >> >> -- >> "There are only 10 types of people in the world: Those who understand >> binary, and those who don't" >> > > -- "There are only 10 types of people in the world: Those who understand binary, and those who don't" --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
Is this really part of the handler update? If this can wait, let's wait. We need to wrap up the changes to handlers ASAP. On Tue, Nov 11, 2008 at 9:37 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > I've managed to convince myself that it would be a trivial amount of work > to introduce a GwtEventPreview interface into the events package and that > the change would be a good one. In specific we would have: > > > public interface GwtEventPreview { > boolean onGwtEventPreview(GwtEvent event); > } > > > and, in HandlerManager: > > public void setGwtEventPreview(GwtEventPreview preview) > > > > Then, in the final fireEvent method, if a preview has been installed, the > event is routed through the preview first and is only fired if the preview > returns true. > > Can anyone think of any problems with this logic, any reason this change > would take more then a few minutes to create, or any potentially better > solutions which we might want to use instead? As we can certainly wait > until GWT 2.0 to introduce something like this if we can think of > any conceivable objections. > > > Cheers, > > Emily > > > > > > -- > "There are only 10 types of people in the world: Those who understand > binary, and those who don't" > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Turning off runtime checks
We've been kicking around the idea of an "unsafe but fast" compile for exactly this reason. OTOH, there are a couple of things we could do to make the type checks faster even in the short term: 1) Do actual null tracking so as to omit the null check part in many cases. 2) Get away from using typeIdArray in favor of having cast information accessible directly off the object, which should be faster. 3) Make sure it's inlined in all cases. On Tue, Nov 11, 2008 at 2:14 AM, Ray Cromwell <[EMAIL PROTECTED]> wrote: > > Heads up guys, > > I just profiled my app trying to squeeze every last drop of > performance out for speedups on the iPhone which has slow Javascript, > and I noticed that the canCastUnsafe/dynamicCast functions are > collectively eating up 8.5% of the total runtime. It seems that the > sole purpose of dynamicCast() is to throw a ClassCastException where > the JVM would, but in production web-deployment mode, I would honestly > prefer the option of having these checks omitted. Yes, there are some > cases where throwing the exception would give the end user a better > error message, but if the user is able to reproduce incorrect > behavior, I think I would prefer to direct them to a debug > build/permutation which has the checks. It seems the major place where > this could trip up legitimate code is if someone was triggering CCEs > on purpose and expecting to catch them with an exception handler. > > The main reason these checks are being inserted is because I switched > from using a custom collection, to a List, and the compiler > appears to be unable to use the generic type information of the JField > to determine that the cast is unneccessary. > > Anyway, the question for discussion is, should the compiler have an > -O2 mode which eliminates range checks, runtime cast checks, etc > > -Ray > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit commit] r4015 - in trunk/dev/core/src/com/google/gwt/dev: . jjs/impl
Author: [EMAIL PROTECTED] Date: Tue Nov 11 07:29:02 2008 New Revision: 4015 Modified: trunk/dev/core/src/com/google/gwt/dev/GWTCompiler.java trunk/dev/core/src/com/google/gwt/dev/jjs/impl/CodeSplitter.java trunk/dev/core/src/com/google/gwt/dev/jjs/impl/ControlFlowAnalyzer.java trunk/dev/core/src/com/google/gwt/dev/jjs/impl/Pruner.java Log: Removes UpRefVisitor from ControlFlowAnalyzer, which scans the whole program to find extra methods that need rescuing due to virtual method calls. Instead, such methods are now checked at the time a new method or type becomes instantiable. Also, adds PerfLogger calls to GWTCompiler, to make it easy to time an entire compile. Review by: scottb Modified: trunk/dev/core/src/com/google/gwt/dev/GWTCompiler.java == --- trunk/dev/core/src/com/google/gwt/dev/GWTCompiler.java (original) +++ trunk/dev/core/src/com/google/gwt/dev/GWTCompiler.java Tue Nov 11 07:29:02 2008 @@ -20,6 +20,7 @@ import com.google.gwt.dev.CompilePerms.CompilePermsOptionsImpl; import com.google.gwt.dev.CompileTaskRunner.CompileTask; import com.google.gwt.dev.Precompile.PrecompileOptionsImpl; +import com.google.gwt.dev.util.PerfLogger; import com.google.gwt.dev.util.arg.ArgHandlerExtraDir; import java.io.File; @@ -100,6 +101,7 @@ if (options.isValidateOnly()) { return new Precompile(options).run(logger); } else { + PerfLogger.start("compile"); logger = logger.branch(TreeLogger.INFO, "Compiling module " + options.getModuleName()); if (new Precompile(options).run(logger)) { @@ -112,11 +114,13 @@ if (new CompilePerms(permsOptions).run(logger)) { if (new Link(options).run(logger)) { logger.log(TreeLogger.INFO, "Compilation succeeded"); +PerfLogger.end(); return true; } } } logger.log(TreeLogger.ERROR, "Compilation failed"); + PerfLogger.end(); return false; } } Modified: trunk/dev/core/src/com/google/gwt/dev/jjs/impl/CodeSplitter.java == --- trunk/dev/core/src/com/google/gwt/dev/jjs/impl/CodeSplitter.java (original) +++ trunk/dev/core/src/com/google/gwt/dev/jjs/impl/CodeSplitter.javaTue Nov 11 07:29:02 2008 @@ -267,7 +267,6 @@ initiallyLive = new ControlFlowAnalyzer(jprogram); traverseEntry(initiallyLive, 0); -initiallyLive.finishTraversal(); methodsInJavaScript = fragmentExtractor.findAllMethodsInJavaScript(); } @@ -310,7 +309,6 @@ // Traverse leftoversFragmentHasLoaded, because it should not // go into any of the exclusive fragments. cfa.traverseFromLeftoversFragmentHasLoaded(); - cfa.finishTraversal(); allButOnes.add(cfa); } @@ -326,7 +324,6 @@ traverseEntry(everything, entry); } everything.traverseFromLeftoversFragmentHasLoaded(); -everything.finishTraversal(); return everything; } @@ -368,7 +365,6 @@ for (int base = 1; base < numEntries; base++) { ControlFlowAnalyzer baseCfa = new ControlFlowAnalyzer(initiallyLive); traverseEntry(baseCfa, base); - baseCfa.finishTraversal(); LivenessPredicate baseLive = new CfaLivenessPredicate(baseCfa); // secondary base Modified: trunk/dev/core/src/com/google/gwt/dev/jjs/impl/ControlFlowAnalyzer.java == --- trunk/dev/core/src/com/google/gwt/dev/jjs/impl/ControlFlowAnalyzer.java (original) +++ trunk/dev/core/src/com/google/gwt/dev/jjs/impl/ControlFlowAnalyzer.java Tue Nov 11 07:29:02 2008 @@ -57,15 +57,15 @@ import com.google.gwt.dev.js.ast.JsVisitor; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; /** * This class finds out what code in a program is live based on starting - * execution at a specified location. Note that the client must call - * [EMAIL PROTECTED] #finishTraversal()} after the other traversal methods have been - * called, or the results will be incomplete. + * execution at a specified location. */ public class ControlFlowAnalyzer { @@ -182,7 +182,7 @@ // Rescue my super type rescue(type.extnds, true, isInstantiated); - // Rescue my clinit (it won't ever be explicitly referenced + // Rescue my clinit (it won't ever be explicitly referenced) rescue(type.methods.get(0)); // JLS 12.4.1: don't rescue my super interfaces just because I'm rescued. @@ -192,6 +192,8 @@ rescue(intfType, false, isInstantiated); } + rescueMethodsIfInstantiable(type); + return false; } @@ -256,6 +258,8 @@ accept(it); } + rescueMethodsIfIns
[gwt-contrib] [google-web-toolkit commit] r4014 - releases/1.6/user
Author: [EMAIL PROTECTED] Date: Tue Nov 11 07:11:09 2008 New Revision: 4014 Modified: releases/1.6/user/build.xml Log: Leverage -workDir to allow parallelized testing without clobbering. Patch by: fabbott Modified: releases/1.6/user/build.xml == --- releases/1.6/user/build.xml (original) +++ releases/1.6/user/build.xml Tue Nov 11 07:11:09 2008 @@ -78,7 +78,7 @@ - + @@ -87,7 +87,7 @@ - + @@ -95,7 +95,7 @@ - + @@ -103,7 +103,7 @@ - + --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR:GwtEventPreview
It's fine with me if the trivial amount of time it will take to add includes time for test coverage. On naming, how about GwtEventPreviewer and setEventPreviewer. rjrjr On Tue, Nov 11, 2008 at 6:37 AM, Emily Crutcher <[EMAIL PROTECTED]> wrote: > I've managed to convince myself that it would be a trivial amount of work > to introduce a GwtEventPreview interface into the events package and that > the change would be a good one. In specific we would have: > > > public interface GwtEventPreview { > boolean onGwtEventPreview(GwtEvent event); > } > > > and, in HandlerManager: > > public void setGwtEventPreview(GwtEventPreview preview) > > > > Then, in the final fireEvent method, if a preview has been installed, the > event is routed through the preview first and is only fired if the preview > returns true. > > Can anyone think of any problems with this logic, any reason this change > would take more then a few minutes to create, or any potentially better > solutions which we might want to use instead? As we can certainly wait > until GWT 2.0 to introduce something like this if we can think of > any conceivable objections. > > > Cheers, > > Emily > > > > > > -- > "There are only 10 types of people in the world: Those who understand > binary, and those who don't" > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit commit] r4013 - releases/1.6/dev/core/src/com/google/gwt/dev
Author: [EMAIL PROTECTED] Date: Tue Nov 11 07:07:46 2008 New Revision: 4013 Modified: releases/1.6/dev/core/src/com/google/gwt/dev/GWTCompiler.java releases/1.6/dev/core/src/com/google/gwt/dev/GWTShell.java releases/1.6/dev/core/src/com/google/gwt/dev/Link.java Log: Fix build by making -out actually work for GWTCompiler, Link, and GWTShell.java Patch by: fabbott, scottb Modified: releases/1.6/dev/core/src/com/google/gwt/dev/GWTCompiler.java == --- releases/1.6/dev/core/src/com/google/gwt/dev/GWTCompiler.java (original) +++ releases/1.6/dev/core/src/com/google/gwt/dev/GWTCompiler.java Tue Nov 11 07:07:46 2008 @@ -22,6 +22,7 @@ import com.google.gwt.dev.Link.LinkOptionsImpl; import com.google.gwt.dev.Precompile.PrecompileOptionsImpl; import com.google.gwt.dev.util.arg.ArgHandlerExtraDir; +import com.google.gwt.dev.util.arg.ArgHandlerOutDir; import java.io.File; @@ -34,6 +35,7 @@ public ArgProcessor(CompilerOptions options) { super(options); registerHandler(new ArgHandlerExtraDir(options)); + registerHandler(new ArgHandlerOutDir(options)); } @Override Modified: releases/1.6/dev/core/src/com/google/gwt/dev/GWTShell.java == --- releases/1.6/dev/core/src/com/google/gwt/dev/GWTShell.java (original) +++ releases/1.6/dev/core/src/com/google/gwt/dev/GWTShell.java Tue Nov 11 07:07:46 2008 @@ -43,6 +43,7 @@ import com.google.gwt.dev.util.arg.ArgHandlerLogLevel; import com.google.gwt.dev.util.arg.ArgHandlerOutDir; import com.google.gwt.dev.util.arg.ArgHandlerScriptStyle; +import com.google.gwt.dev.util.arg.ArgHandlerWorkDir; import com.google.gwt.dev.util.log.AbstractTreeLogger; import com.google.gwt.util.tools.ArgHandlerExtra; import com.google.gwt.util.tools.ArgHandlerFlag; @@ -438,12 +439,13 @@ registerHandler(new ArgHandlerLogLevel(options)); registerHandler(new ArgHandlerGenDir(options)); -registerHandler(new ArgHandlerExtraDir(options)); +registerHandler(new ArgHandlerWorkDir(options)); if (!noURLs) { registerHandler(new ArgHandlerStartupURLsExtra()); } +registerHandler(new ArgHandlerExtraDir(options)); registerHandler(new ArgHandlerOutDir(options)); registerHandler(new ArgHandlerScriptStyle(options)); Modified: releases/1.6/dev/core/src/com/google/gwt/dev/Link.java == --- releases/1.6/dev/core/src/com/google/gwt/dev/Link.java (original) +++ releases/1.6/dev/core/src/com/google/gwt/dev/Link.java Tue Nov 11 07:07:46 2008 @@ -28,6 +28,7 @@ import com.google.gwt.dev.cfg.StaticPropertyOracle; import com.google.gwt.dev.util.Util; import com.google.gwt.dev.util.arg.ArgHandlerExtraDir; +import com.google.gwt.dev.util.arg.ArgHandlerOutDir; import com.google.gwt.dev.util.arg.OptionExtraDir; import com.google.gwt.dev.util.arg.OptionOutDir; @@ -51,6 +52,7 @@ public ArgProcessor(LinkOptions options) { super(options); registerHandler(new ArgHandlerExtraDir(options)); + registerHandler(new ArgHandlerOutDir(options)); } @Override --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] A wee code review: Fix bug with date in DataTable
Reviewers: zundel, dglibicki, Description: Fix bug with date in DataTable private native void setValueDate(int rowIndex, int columnIndex, int value) /*-{ -this.setValue(rowIndex, columnIndex, new Date(value)); +this.setValue(rowIndex, columnIndex, new $wnd.Date(value)); }-*/; Please review this at http://galgwt-reviews.appspot.com/402 Affected files: visualization/src/com/google/gwt/visualization/client/DataTable.java Index: visualization/src/com/google/gwt/visualization/client/DataTable.java === --- visualization/src/com/google/gwt/visualization/client/DataTable.java (revision 978) +++ visualization/src/com/google/gwt/visualization/client/DataTable.java (working copy) @@ -215,6 +215,6 @@ }-*/; private native void setValueDate(int rowIndex, int columnIndex, int value) /*-{ -this.setValue(rowIndex, columnIndex, new Date(value)); +this.setValue(rowIndex, columnIndex, new $wnd.Date(value)); }-*/; } --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] RR:GwtEventPreview
I've managed to convince myself that it would be a trivial amount of work to introduce a GwtEventPreview interface into the events package and that the change would be a good one. In specific we would have: public interface GwtEventPreview { boolean onGwtEventPreview(GwtEvent event); } and, in HandlerManager: public void setGwtEventPreview(GwtEventPreview preview) Then, in the final fireEvent method, if a preview has been installed, the event is routed through the preview first and is only fired if the preview returns true. Can anyone think of any problems with this logic, any reason this change would take more then a few minutes to create, or any potentially better solutions which we might want to use instead? As we can certainly wait until GWT 2.0 to introduce something like this if we can think of any conceivable objections. Cheers, Emily -- "There are only 10 types of people in the world: Those who understand binary, and those who don't" --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Linker artifacts in WAR
I'm working on a srawman proposal for this; expect a copy later today. -- Bob Vawter Google Web Toolkit Team --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Turning off runtime checks
Seems to be a good idea! I guess it is hard to find an approach that will cover all the "contract checking" code snippets in the gwt widgets. Do you have an idea in mind how to handle this? Annotations? On 11 Nov., 08:14, "Ray Cromwell" <[EMAIL PROTECTED]> wrote: > Heads up guys, > > I just profiled my app trying to squeeze every last drop of > performance out for speedups on the iPhone which has slow Javascript, > and I noticed that the canCastUnsafe/dynamicCast functions are > collectively eating up 8.5% of the total runtime. It seems that the > sole purpose of dynamicCast() is to throw a ClassCastException where > the JVM would, but in production web-deployment mode, I would honestly > prefer the option of having these checks omitted. Yes, there are some > cases where throwing the exception would give the end user a better > error message, but if the user is able to reproduce incorrect > behavior, I think I would prefer to direct them to a debug > build/permutation which has the checks. It seems the major place where > this could trip up legitimate code is if someone was triggering CCEs > on purpose and expecting to catch them with an exception handler. > > The main reason these checks are being inserted is because I switched > from using a custom collection, to a List, and the compiler > appears to be unable to use the generic type information of the JField > to determine that the cast is unneccessary. > > Anyway, the question for discussion is, should the compiler have an > -O2 mode which eliminates range checks, runtime cast checks, etc > > -Ray --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Code Review: Example how to create a GWT based visualization.
Can we get someone to weigh in on this? This is for the integration of the Google visualization, demonstrating the 'preferred' way to create a custom visualization with GWT accessible from JavaScript. The current solution is to use the standard linker and fire a global callback $wnd.onVisualizationNameCallback() from the onModuleLoad() entry point. which I don't feel would be extensible if we had many visualizations implemented with GWT. -Eric. On Mon, Nov 10, 2008 at 10:55 AM, Uwe Maurer <[EMAIL PROTECTED]> wrote: > > > On Nov 10, 3:36 pm, [EMAIL PROTECTED] wrote: > > I added some code to have a callback from GWT to javascript, to make > > sure the GWT visualization is loaded before using it. > > > > I am wondering what is the preferred way to make sure a GWT > application is loaded before some other javascript (non GWT) in the > hosting page is executed. > > In my example I would like to load a GWT application that exports some > functions to javascript. The javascript in the hosting page need to be > executed after the GWT application is done with registering these > functions. > > Can I just put the script tag that loads the GWT application in the > ? Or is a callback from GWT to javascript necessary? If yes, > what is the best way to implement such a callback? Can the GWT > bootstrap code help or a special linker? > > As example please see this code: > http://galgwt-reviews.appspot.com/202/patch/205/207 > http://galgwt-reviews.appspot.com/202/patch/205/209 > > Thanks, > Uwe > > > > > -- Eric Z. Ayers - GWT Team - Atlanta, GA USA http://code.google.com/webtoolkit/ --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Comment on DesignOOPHM in google-web-toolkit
Comment by cristescu.sorinel: Is it going to be faster that the old one or not? that's the big question ... 'cause I waste lots of time with starting/debugging in "hosted mode" ... brrr ... Thanks, Sorinel Cristescu For more information: http://code.google.com/p/google-web-toolkit/wiki/DesignOOPHM --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---