[gwt-contrib] Re: New API proposal: BatchedCommand
Okay, here's a strawman for a new-and-improved proposal. All these would be in core. // Deferred command = on the other side of the event loop interface DeferredCommands { public static DeferredCommands get(); public void add(Command cmd); public void add(Command cmd, boolean asap); // asap = faster than setTimeout(0) public void addPause(); } // Finally command = before you end the current stack trace interface FinallyCommands { public static FinallyCommands get(); public void add(Command cmd); } // Incremental command = call repeatedly quickly to avoid SSWs interface IncrementalCommands { public static IncrementalCommands get(); public void add(Command cmd); public void add(Command cmd, boolean asap); } // Timed command = call based clock time (aka regular old timers) interface TimedCommands { public static TimedCommand get(); public TimerController scheduleOnce(Command cmd, int millis); public TimerController scheduleRecurring(Command cmd, int millis); } // Allows optional control over a timer after it's created. // If the return values in scheduleOnce, etc. aren't used, extra code can maybe optimize away. interface TimerController { public void pause(); public void resume(); public void cancel(); } I think that maybe consolidating timers into this mix might be a bit much, but, then again, if we're graduating Command to core, then it seems like it would be nice to make it the uniform callback interface. -- Bruce On Thu, Sep 3, 2009 at 9:28 PM, Bruce Johnson br...@google.com wrote: I like it a lot Ray. (To be completely honest, I knew you were going to say all that, so I decided to sandbag and let you do the typing :-) I question if it's really appropriate to explicitly say PreEventLoop and PostEventLoop considering that...sometimes...the event loop can actually run re-entrantly. Those names sound like a very strong guarantee that I don't think we can reliably guarantee. It's more like PreCurrentJavaScriptStackFullyUnwinding and PostEventLoop. Actually, to take a step back (which is my very favorite thing to do), there are several kinds of things that could be consolidated: 1) Single-shot timers 2) Recurring timers 3) Incremental commands that run as soon as possible after the event loop (faster than setTimeout(0)) 4) Incremental commands that run after the event loop via setTimeout(0) 5) Deferred commands that run as soon as possible after the event loop (faster than setTimeout(0)) 6) Deferred commands that run after the event loop via setTimeout(0) 7) Execute-this-before-you-unwind-the-JS-stack-in-which-it-was-enqueued (aka BatchedCommand) 8) Arguably, runAsync (although it's purpose is so functionally different it would probalby be a mistake to munge it in) #3 and #5 might look funny, but it is generally possible to run code *after* the event loop but *much* sooner than setTimeout(0), which is usually clamped to some pretty long duration such as 10ms. The reason you wouldn't want to do #3 and #5 as the default for deferred commands is that it would keep the CPU overly busy if you did it a bunch in a row. It would very likely drain mobile batteries quickly, even. @Ray (or anyone): Can you think of an awesome way to reconcile those behind a consistent API? On Thu, Sep 3, 2009 at 4:52 PM, Joel Webber j...@google.com wrote: ++(++Ray) Anything we can do to sensibly get this crap out of .user and into .core (or some other common location) would be very, very good. If, as a side-effect, we could get DeferredCommand to *not* use IncrementalCommand (the latter brings in fairly significant dependencies that are enough to matter for small apps), that would be even better. On Thu, Sep 3, 2009 at 4:46 PM, Scott Blum sco...@google.com wrote: ++Ray. On Thu, Sep 3, 2009 at 4:38 PM, Ray Ryan rj...@google.com wrote: The mechanism is just brilliant. I have reservations about the api. bikeshed it seemed kinda nice to have one less type Except that we have one more type, BatchedCommand, which looks exactly like Command, except with a different name, and you have to subclass it rather than implement it... A simple thing we could do is: - create com.google.gwt.core.client, - change com.google.gwt.user.client.Command to extend the new one - deprecate com.google.gwt.user.client.Command - And have BatchedCommand accept com.google.gwt.core.client And the two names, DeferredComand and BatchedCommand, don't give much clue as to which does what. And of course BatchedCommand doesn't actually provide any batching service. If we were doing all this from scratch, I suspect we would wind up with something like this in core (presuming we're happy with IncrementalCommand and addPause): package com.google.gwt.core.dispatch public interface Command { void execute(); } public interface IncrementalCommand { boolean execute(); } public class
[gwt-contrib] Re: update logging to provide performance metrics
I think I'd rather look at any such work as orthogonal perf metrics data gathering since it is really is, functionally, an independent question of the log level. For example, we might want to see the effect of logging itself on the speed of hosted mode refresh. I think some sort of separate global collector mechanism would be a better design. On Wed, Sep 2, 2009 at 9:48 AM, John Tamplin j...@google.com wrote: On Wed, Sep 2, 2009 at 8:58 AM, Freeland Abbott fabb...@google.comwrote: Is the TIMING log level a good idea, though, and sorted correctly? I waffled a bit on whether to make it be a new log level or an orthogonal flag I'm not sure it makes sense as a log level -- I think perhaps a separate flag to trigger timing information is useful, though it isn't clear how that will wind up different than the existing PerfLogger usage. -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: New API proposal: BatchedCommand
On Wed, Sep 2, 2009 at 6:07 PM, Scott Blum sco...@google.com wrote: I do agree with John that we should really discuss how this can be implemented. It's already implemented! Is there some magic trick to make the browser execute a piece of code at the time you want, or do we need to go and modify all our event code (like with the global uncaught exception handler)? No trick, it's as bad as you'd hope it wasn't. On the positive side, it's already been done -- I'm just augmenting the tests for the various subsystems such as RequestBuilder and event dispatching to make sure we tighten the correctness noose as much as possible. Longer term, Bob and I both would really like to find a general mechanism for making this pattern easy to do from any path into a GWT module from the outside, exactly along the lines of what Matt was talking about. I think rolling this functionality into gwt-exporter (and then rolling that sort of functionality directly into GWT proper) will get us pretty far down the road. Code review request forthcoming, possibly tomorrow. -- Bruce --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: UiBinder first impressions
Hi Sony, I just wanted to clarify that UiBinder is based on XHTML not merely to make coding more succinct vs. Java code. I agree that we could in theory provide fluent APIs that could make Java imperative UI code much more succinct than it is now. But there are three other big motivations for UiBinder that wouldn't be address by fluent APIs that I wanted to share. First, specifying layouts in XHTML encouages developers (by making it easier) to use HTML rather than widgets/panels where the two are effectively equivalent anyway. For example, it's just as easy to use div instead of FlowPanel when you're already working in XHTML, yet div is much, much better. Browsers can parse and render HTML string fragments much faster than they can executing JavaScript that builds DOM structures programmatically. So, really, UiBinder is a trojan horse to get people to write apps that are smaller and run faster :-) Secondly, many teams we've worked with at Google really like that UiBinder creates a firm wall between the aesthetics of the UI vs. its programatic behavior, which supports well the MVP pattern that is becoming increasingly recognizes as The Right Way to architect internet-based client/server apps. It's also a good way to divide work in teams that have designers and developers; designers can mess with the XHTML, developers can mess with the code and if they ever diverge, you'll get a compile-time error. This seems to really facilitate the kind of workflow in which a lot of people have expressed interest since GWT 1.0. We're excited to finally be getting there. Finally, GWT is all about finding coding patterns with which tools (IDEs in particular) are useful. UiBinder's XHTML syntax makes it easier to write good tools because it isn't as expressive as full-blown code: more restrictive language means more ability to analyze it statically, which is what tools are all about. Fluent APIs that would encourage people to write UIs with Java code are less amenable to creating good tools for them. For example, the Google Plugin is already working on tools to make editing UiBinder templates easy breezy, and we hope other IDEs will do the same. -- Bruce On Mon, Aug 17, 2009 at 11:32 AM, SonyMathew xsonymat...@gmail.com wrote: One point I have tried injecting into the GWT community is the importance of fluent APIs. GWT's Java API is currently quite cumbersome for layouts and it seems folks immediately jumped to the conclusion that Java doesn't work and have gone the route of using XML for layouts. I am not against folks that want XML layouts but there are many that feel fluent APIs in Java for layouts will be even more productive Even if you layout your initial UI in XML you are still going to need to modify it dynamically in Java based on various events - so you end up having a eye sore mix. I put out an example of a fluent API called AxisPanel (search for it) - its not a great implementation - but it pretty much let me layout everything pretty quickly and changed the pace of my GWT development drastically - especially when it came to modifying layouts with new requirements. Speaking for myself - I would like to see more such APIs (and better implementations than my AxisPanel) that folks can rely on as part of the Core GWT. I don't think developers starting a new GWT project would adopt XML layouts if they could fluently layout in Java right alongside the rest of their coding (at-least thats my theory).. Sony On Aug 10, 8:59 am, Arthur Kalmenson arthur.k...@gmail.com wrote: Hello everyone, We've been playing with UiBinder and I thought it'd be a good idea to share what we've seen so far (and ask some questions). Some of the apps we write are used by more then one hospital and this requires a tailored UI depending on the user's preferences and to store additional information that a particular hospital needs to keep track of. At the moment, writing UI in a swing style, we program to interfaces and use GIN to bind everything together. Using different AbstractGinModules and Ginjectors, we can tie the application together in different ways using different UI implementations. What would be the way to do this with UiBinder? From what we could tell, one would use UiTemplate, but there doesn't seem to be a way to configure the String in UiTemplate easily through a GIN module. Are there alternatives? Following the programming to interfaces theme, we've been doing that with UiBinder, but have run into an issue when trying to build a larger UI page out of smaller ui.xml classes. It seems that referring to interfaces in ui.xml doesn't work, so you need to work with direct concrete classes. But this would force you to use a particular implementation when we'd like to keep it generic. Lastly, I guess this is something just for consideration for the future, but having the GEP work with UiBinder would make using it a lot easier. For example, having
[gwt-contrib] Re: Nullness tracking
Any numbers, by the way, on the before/after effects? On Tue, Aug 25, 2009 at 2:54 PM, sp...@google.com wrote: Reviewers: scottb, Description: Tracks nullness within the compiler by adding a JNonNull type. See http://code.google.com/p/google-web-toolkit/issues/detail?id=1819 . Please review this at http://gwt-code-reviews.appspot.com/62805 Affected files: dev/core/src/com/google/gwt/core/ext/soyc/impl/SizeMapRecorder.java dev/core/src/com/google/gwt/dev/jjs/CorrelationFactory.java dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java dev/core/src/com/google/gwt/dev/jjs/ast/JArrayRef.java dev/core/src/com/google/gwt/dev/jjs/ast/JBinaryOperation.java dev/core/src/com/google/gwt/dev/jjs/ast/JCastOperation.java dev/core/src/com/google/gwt/dev/jjs/ast/JConditional.java dev/core/src/com/google/gwt/dev/jjs/ast/JGwtCreate.java dev/core/src/com/google/gwt/dev/jjs/ast/JMethod.java dev/core/src/com/google/gwt/dev/jjs/ast/JNewArray.java dev/core/src/com/google/gwt/dev/jjs/ast/JNewInstance.java dev/core/src/com/google/gwt/dev/jjs/ast/JNonNullType.java dev/core/src/com/google/gwt/dev/jjs/ast/JNullType.java dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java dev/core/src/com/google/gwt/dev/jjs/ast/JReboundEntryPoint.java dev/core/src/com/google/gwt/dev/jjs/ast/JReferenceType.java dev/core/src/com/google/gwt/dev/jjs/ast/JStringLiteral.java dev/core/src/com/google/gwt/dev/jjs/ast/JThisRef.java dev/core/src/com/google/gwt/dev/jjs/ast/JTypeOracle.java dev/core/src/com/google/gwt/dev/jjs/ast/JVariable.java dev/core/src/com/google/gwt/dev/jjs/ast/js/JsniFieldRef.java dev/core/src/com/google/gwt/dev/jjs/impl/ArrayNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java dev/core/src/com/google/gwt/dev/jjs/impl/CastNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/CloneExpressionVisitor.java dev/core/src/com/google/gwt/dev/jjs/impl/CodeSplitter.java dev/core/src/com/google/gwt/dev/jjs/impl/ControlFlowAnalyzer.java dev/core/src/com/google/gwt/dev/jjs/impl/DeadCodeElimination.java dev/core/src/com/google/gwt/dev/jjs/impl/EqualityNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/FragmentExtractor.java dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java dev/core/src/com/google/gwt/dev/jjs/impl/JavaScriptObjectNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/JavaToJavaScriptMap.java dev/core/src/com/google/gwt/dev/jjs/impl/LongCastNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/LongEmulationNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/MakeCallsStatic.java dev/core/src/com/google/gwt/dev/jjs/impl/MethodCallTightener.java dev/core/src/com/google/gwt/dev/jjs/impl/ResolveRebinds.java dev/core/src/com/google/gwt/dev/jjs/impl/SourceGenerationVisitor.java dev/core/src/com/google/gwt/dev/jjs/impl/TypeTightener.java dev/core/src/com/google/gwt/dev/js/JsSourceGenerationVisitorWithSizeBreakdown.java dev/core/test/com/google/gwt/dev/jjs/JjsTypeTest.java --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: UiBinder first impressions
No plans to do drag-n-drop or anything wysiwyg. We'll probably continue to focus on the basics. On Tuesday, August 25, 2009, Miroslav Pokorny miroslav.poko...@gmail.com wrote: Extras... Are there any plans to build a ui tool (maybe in swing) so designers can drag n drop available widgets and have the view instantly updated? Other kool features might include save the file etc.Some of the extra features in interface builder. Thoughts...? On 26/08/2009, at 2:14 AM, Bruce Johnson br...@google.com wrote: Hi Sony, I just wanted to clarify that UiBinder is based on XHTML not merely to make coding more succinct vs. Java code. I agree that we could in theory provide fluent APIs that could make Java imperative UI code much more succinct than it is now. But there are three other big motivations for UiBinder that wouldn't be address by fluent APIs that I wanted to share. First, specifying layouts in XHTML encouages developers (by making it easier) to use HTML rather than widgets/panels where the two are effectively equivalent anyway. For example, it's just as easy to use div instead of FlowPanel when you're already working in XHTML, yet div is much, much better. Browsers can parse and render HTML string fragments much faster than they can executing JavaScript that builds DOM structures programmatically. So, really, UiBinder is a trojan horse to get people to write apps that are smaller and run faster :-) Secondly, many teams we've worked with at Google really like that UiBinder creates a firm wall between the aesthetics of the UI vs. its programatic behavior, which supports well the MVP pattern that is becoming increasingly recognizes as The Right Way to architect internet-based client/server apps. It's also a good way to divide work in teams that have designers and developers; designers can mess with the XHTML, developers can mess with the code and if they ever diverge, you'll get a compile-time error. This seems to really facilitate the kind of workflow in which a lot of people have expressed interest since GWT 1.0. We're excited to finally be getting there. Finally, GWT is all about finding coding patterns with which tools (IDEs in particular) are useful. UiBinder's XHTML syntax makes it easier to write good tools because it isn't as expressive as full-blown code: more restrictive language means more ability to analyze it statically, which is what tools are all about. Fluent APIs that would encourage people to write UIs with Java code are less amenable to creating good tools for them. For example, the Google Plugin is already working on tools to make editing UiBinder templates easy breezy, and we hope other IDEs will do the same. -- Bruce On Mon, Aug 17, 2009 at 11:32 AM, SonyMathew xsonymat...@gmail.com wrote: One point I have tried injecting into the GWT community is the importance of fluent APIs. GWT's Java API is currently quite cumbersome for layouts and it seems folks immediately jumped to the conclusion that Java doesn't work and have gone the route of using XML for layouts. I am not against folks that want XML layouts but there are many that feel fluent APIs in Java for layouts will be even more productive Even if you layout your initial UI in XML you are still going to need to modify it dynamically in Java based on various events - so you end up having a eye sore mix. I put out an example of a fluent API called AxisPanel (search for it) - its not a great implementation - but it pretty much let me layout everything pretty quickly and changed the pace of my GWT development drastically - especially when it came to modifying layouts with new requirements. Speaking for myself - I would like to see more such APIs (and better implementations than my AxisPanel) that folks can rely on as part of the Core GWT. I don't think developers starting a new GWT project would adopt XML layouts if they could fluently layout in Java right alongside the rest of their coding (at-least thats my theory).. Sony On Aug 10, 8:59 am, Arthur Kalmenson arthur.k...@gmail.com wrote: Hello everyone, We've been playing with UiBinder and I thought it'd be a good idea to share what we've seen so far (and ask some questions). Some of the apps we write are used by more then one hospital and this requires a tailored UI depending on the user's preferences and to store additional information that a particular hospital needs to keep track of. At the moment, writing UI in a swing style, we program to interfaces and use GIN t --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Stop trying to launch firefox, terminology changes
LGTM, but would be nice to tweak the instructional message. http://gwt-code-reviews.appspot.com/56817/diff/1/2 File dev/oophm/src/com/google/gwt/dev/OophmHostedModeBase.java (right): http://gwt-code-reviews.appspot.com/56817/diff/1/2#newcode321 Line 321: Please connect a browser with the GWT Plugin to the URL); The phrasing sounds a bit like you are telling them to connect a browser *to* the GWT plugin. I'd suggest, Using a browser with the GWT Development Plugin, please browse to the following URL: http://gwt-code-reviews.appspot.com/56817 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Implement conditional set-property and extend-property declarations
LGTM if you implement all the suggestions. http://gwt-code-reviews.appspot.com/57802/diff/1001/54 File dev/core/src/com/google/gwt/dev/cfg/BindingProperty.java (right): http://gwt-code-reviews.appspot.com/57802/diff/1001/54#newcode73 Line 73: return conditionalValues; Better to make it unmodifiable to prevent future errors from creeping in http://gwt-code-reviews.appspot.com/57802/diff/1001/65 File dev/core/src/com/google/gwt/dev/cfg/ModuleDefSchema.java (right): http://gwt-code-reviews.appspot.com/57802/diff/1001/65#newcode323 Line 323: protected Schema __extend_property_begin(BindingProperty property, Let's remove the ability to use conditionals on extend-property for now, as we discussed on the phone. http://gwt-code-reviews.appspot.com/57802/diff/1001/68 File dev/core/src/com/google/gwt/dev/cfg/PropertyPermutations.java (right): http://gwt-code-reviews.appspot.com/57802/diff/1001/68#newcode88 Line 88: + bindingProps.toString()); BindingProperty.toString() isn't implement; need to make it pretty for this error message to make sense http://gwt-code-reviews.appspot.com/57802/diff/1001/70 File dev/core/src/com/google/gwt/dev/shell/ModuleSpacePropertyOracle.java (right): http://gwt-code-reviews.appspot.com/57802/diff/1001/70#newcode196 Line 196: values = prop.getAllowedValues(winner); can you assign at declaration in 195 http://gwt-code-reviews.appspot.com/57802 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Rework emulated stack trace with conditional properties
On Thu, Aug 13, 2009 at 12:55 PM, b...@google.com wrote: @Bruce, does the following work for you? set-property name=compiler.emulatedStack value=true,false any when-property-is name=user.agent value=ie6 / when-property-is name=user.agent value=ie8 / /any /set-property property-provider name=compiler.emulatedStack { return location.search.indexOf('emulatedStack') != -1 ? 'true' : 'false'; } /property-provider When you say, does it work for me, do you mean do I like it, or does it literally run? I didn't run it (but can, if that's helpful), but I do like the looks of it. It seems like exactly when I'd expect to see. Reviewing the updated code now. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Rework emulated stack trace with conditional properties
LGTM, pending an LGTM on the other conditional property patch http://gwt-code-reviews.appspot.com/56816/diff/1/6 File user/src/com/google/gwt/junit/JUnit.gwt.xml (right): http://gwt-code-reviews.appspot.com/56816/diff/1/6#newcode34 Line 34: !-- TODO(bobv): This is temporary until subset-of-permutation-matrix work is done. -- Probably want to remove this now? http://gwt-code-reviews.appspot.com/56816/diff/1/6#newcode44 Line 44: /set-property To double-check, you're leaving these off because you know that they can already generate their own stack traces without emulation? http://gwt-code-reviews.appspot.com/56816 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Clean up GWTCompiler output
End this email below is what it looks like when I run the compiler on a modified Hello sample using the default compiler log level. How is the signal-to-noise ratio? I think it's not great. A few areas for improvement: - Lower the log level for Creating Split Point Map file for SOYC; seems like this should be TRACE, since they don't actually have info that is really context-relevant; it's more telling you what code path the compiler itself is following; it might seem more useful if it listed the file name. - Maybe get rid of Done; the presence of subsequent outdented logs should make it clear enough that the preceding step has finished - Lower the log level of permutation timings to INFO - Decide how to make the permutation counting look like it makes sense; in particular, specifying I of N, you expect the indices to range 1..N rather than 0..(N-1). Every time I see that last mesage 8 of 9 I keep feeling disappointed that I never see 9 of 9 :-) - Lower the log level of the Linking subtree, and specify what war directory is being linked into, such as Linking into war at /usr/local/myproject/war Also, on another note, when you run the compiler with -treeLogger, we still get some console noise that looks like this: Permutation took 516 ms Permutation took 284 ms Permutation took 187 ms Permutation took 147 ms Permutation took 196 ms Permutation took 131 ms Permutation took 177 ms Permutation took 140 ms Permutation took 134 ms I think we have a stray System.out? In the end, it seems like the default log level ought to produce treelogger output that looks like this: Compiling module com.google.gwt.sample.hello.Hello Compilation succeeded -- 6.889s Arguably, it should even be silent unless there's a problem. Thoughts? Anyone eager to write a patch for changes along these lines? -- Bruce === Actual log below === Compiling module com.google.gwt.sample.hello.Hello Compiling 9 permutations Worker permutation 0 of 9 Creating Split Point Map file for SOYC Done Permutation took 294 ms Worker permutation 1 of 9 Creating Split Point Map file for SOYC Done Permutation took 291 ms Worker permutation 2 of 9 Creating Split Point Map file for SOYC Done Permutation took 197 ms Worker permutation 3 of 9 Creating Split Point Map file for SOYC Done Permutation took 154 ms Worker permutation 4 of 9 Creating Split Point Map file for SOYC Done Permutation took 198 ms Worker permutation 5 of 9 Creating Split Point Map file for SOYC Done Permutation took 194 ms Worker permutation 6 of 9 Creating Split Point Map file for SOYC Done Permutation took 184 ms Worker permutation 7 of 9 Creating Split Point Map file for SOYC Done Permutation took 145 ms Worker permutation 8 of 9 Creating Split Point Map file for SOYC Done Permutation took 131 ms Permutation compile succeeded Linking into war Link succeeded Compilation succeeded -- 6.889s --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Prettier GWT version names for upcoming 2.0 releases
Exactly :-) On Wednesday, August 12, 2009, Joel Webber j...@google.com wrote: Makes sense to me. So the first one will be gwt-2.0.0-m0, right? On Tue, Aug 11, 2009 at 11:40 PM, Bruce Johnson br...@google.com wrote: Mostly, this writeup is aimed at people who have been working on GWT's own build-related stuff, but if anyone else has objections, now would be a good time to raise them (though it seems unlikely anyone would). In the past, we've never had a good naming scheme for distros other than the general availability distro. For milestones, we used the convention 0.0.rev, which probably scares people off and isn't at all self-descriptive. For RCs and GAs, we used major.minor.bugfix (e.g. 1.5.0 was 1.5 RC1, 1.5.1 was 1.5 RC2, and 1.5.2 was GA). This is all too ad hoc and confusing. Here's the new proposal: major.minor.bugfix (e.g. 2.1.0, 2.1.1, 2.1.2)= This is an official, supported build. Every new minor (or bigger) release would start with a bugfix number of 0. major.minor.bugfix-rcn (e.g. 2.0.0-rc1, 2.0.0-rc2)= This is release candidate build n for the specified upcoming GWT release major.minor.bugfix-mn (e.g. 2.0.0-m1, 2.0.0-m2)= This is milestone build n for the specified upcoming GWT release In other words, the stream of announced code drops for 2.0 will look like this (assuming 2 milestone and 1 rc): 1) gwt-2.0.0-m1.zip2) gwt-2.0.0-m2.zip3) gwt-2.0.0-rc1.zip4) gwt-2.0.0.zip Note that we would always include the RC number, even if there's just one (because you never know if another one is coming). I'm very happy to report that there seems to be no need to change even a single line of code, as best I can tell. (Thank you to whomever wrote the version string parsing code to ignore non-digit prefixes and suffixes.) Thus, by simply following this convention when we set GWT_VERSION in the continuous build, everything should work just fine. -- Bruce P.S. No, Joel, we can't start counting at 0, even though it makes more sense :-) I can read your mind. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Prettier GWT version names for upcoming 2.0 releases
Duh, Kelly. Everybody knows that you always start counting at 1 when there's a number immediately following a space or a non-digit and you start counting at 0 when there's a number that immediately follows a period. It's such a logical and obvious system that I thought the rules would be self-evident. On Wed, Aug 12, 2009 at 9:24 AM, Kelly Norton knor...@google.com wrote: No, no, Joel, we will start counting at 1 not 0. The first release will be gwt-2.1.1-m1. I think the naming scheme is good (even if sometimes starts with 0, other times with 1). /kel On Wed, Aug 12, 2009 at 9:12 AM, Joel Webber j...@google.com wrote: Makes sense to me. So the first one will be gwt-2.0.0-m0, right? On Tue, Aug 11, 2009 at 11:40 PM, Bruce Johnson br...@google.com wrote: Mostly, this writeup is aimed at people who have been working on GWT's own build-related stuff, but if anyone else has objections, now would be a good time to raise them (though it seems unlikely anyone would). In the past, we've never had a good naming scheme for distros other than the general availability distro. For milestones, we used the convention 0.0.rev, which probably scares people off and isn't at all self-descriptive. For RCs and GAs, we used major.minor.bugfix (e.g. 1.5.0 was 1.5 RC1, 1.5.1 was 1.5 RC2, and 1.5.2 was GA). This is all too ad hoc and confusing. Here's the new proposal: major.minor.bugfix (e.g. 2.1.0, 2.1.1, 2.1.2) = This is an official, supported build. Every new minor (or bigger) release would start with a bugfix number of 0. major.minor.bugfix-rcn (e.g. 2.0.0-rc1, 2.0.0-rc2) = This is release candidate build n for the specified upcoming GWT release major.minor.bugfix-mn (e.g. 2.0.0-m1, 2.0.0-m2) = This is milestone build n for the specified upcoming GWT release In other words, the stream of announced code drops for 2.0 will look like this (assuming 2 milestone and 1 rc): 1) gwt-2.0.0-m1.zip 2) gwt-2.0.0-m2.zip 3) gwt-2.0.0-rc1.zip 4) gwt-2.0.0.zip Note that we would always include the RC number, even if there's just one (because you never know if another one is coming). I'm very happy to report that there seems to be no need to change even a single line of code, as best I can tell. (Thank you to whomever wrote the version string parsing code to ignore non-digit prefixes and suffixes.) Thus, by simply following this convention when we set GWT_VERSION in the continuous build, everything should work just fine. -- Bruce P.S. No, Joel, we can't start counting at 0, even though it makes more sense :-) I can read your mind. -- If you received this communication by mistake, you are entitled to one free ice cream cone on me. Simply print out this email including all relevant SMTP headers and present them at my desk to claim your creamy treat. We'll have a laugh at my emailing incompetence, and play a game of ping pong. (offer may not be valid in all States). --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Prettier GWT version names for upcoming 2.0 releases
Senator Blum, Do you mean disturbing as in 1) revolting, 2) distressing, or 3) disordering? It seems that mathematics has successfully survived similar notational issues, such as the whole X vs. X' thing. Willing to give it a chance? On Wed, Aug 12, 2009 at 4:47 PM, Scott Blum sco...@google.com wrote: I find the fact that 2.0.0 is now ambiguous to be disturbing, admiral. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Prettier GWT version names for upcoming 2.0 releases
The version update notification thing is admittedly a problem, and so it's true we maybe would need to tweak that. Not changing code most certaily wasn't the justification for the naming scheme I proposed (slap me the day I let that be a reason to justify a lame approach). Alternate proposals, naysayers? On Wed, Aug 12, 2009 at 6:49 PM, John Tamplin j...@google.com wrote: On Wed, Aug 12, 2009 at 6:39 PM, Bruce Johnson br...@google.com wrote: Senator Blum, Do you mean disturbing as in 1) revolting, 2) distressing, or 3) disordering? It seems that mathematics has successfully survived similar notational issues, such as the whole X vs. X' thing. I dislike the fact that normal ordering rules do no apply here. For example, you promoted the fact that version checking code doesn't have to change, it does -- otherwise, you won't get prompted to upgrade from 2.0.0-rc1 to 2.0.0. I would also prefer 2.0.0-ms1 rather than -m1 for better clarity and symmetry with -rc1. Willing to give it a chance? I don't feel strongly enough to fight hard for something different, but I would prefer having a straightforward comparison do the right thing. We can certainly make the comparator understand the particular naming scheme, but that doesn't do well when/if we decide to change it (as it happens, that isn't a problem for older versions but it might be for future versions if we change the scheme). -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Fix non-fatal WeakMapping compile errors
LGTM http://gwt-code-reviews.appspot.com/57810 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: DTO compiler optimization
There's sometimes an important difference between the kind of object model that is appropriate to send to the client and one you'd use on the server. That's the reason we haven't historically tried to make it easier to do no-brainer sharing of server-side object models to the client (i.e. because it seems likely on average there would be way too much wasted data transferred, which would lead to slowness). Clearly, you see that issue, too, based on your suggestion. How well would the transient keyword or the @GwtTransient annotation satisfy the use case you gave? On Mon, Aug 10, 2009 at 1:10 PM, Nathan Wells nwwe...@gmail.com wrote: I have hesitated to bring this up, since I'm relatively new to GWT, and I would hate to waste anyone's time with explaining what is hopefully common knowledge to me. Specifically, I thinking about the DTO problem. I think the general opinion about DTOs is that they are a necessary evil when working with GWT. And let me say, they are a very minor blemish on a life-saving framework. But, It seems to me that the problem has a more elegant solution. I would propose that all we need to do is increase the granularity of GWT compiler control. For clarification, I would like to be able to tell the compiler at the class member level (either through annotations or *.gwt.xml) what should be client-side and what should be server-side. As an example, compiling the following class wouldn't be a problem: class Foo implements Serializable { @ServerOnly static long serialVersionUID = 325490285; //default, of course compiles to java byte-code and js. String bar; @ServerOnly void setBar(String bar) { //a method which might reference un-emulated JRE classes } String getBar() { return bar; } } I hope that makes sense... that way, our the same class could be used on server and client side. Hurray for OO! Again, I'm sure there are some unforeseen consequences of this design, not the least of which is the possibility that it would require basically rebuilding the GWT compiler. I'm just hoping that this discussion might answer other n00b questions in the future :) --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Prettier GWT version names for upcoming 2.0 releases
Mostly, this writeup is aimed at people who have been working on GWT's own build-related stuff, but if anyone else has objections, now would be a good time to raise them (though it seems unlikely anyone would). In the past, we've never had a good naming scheme for distros other than the general availability distro. For milestones, we used the convention 0.0.rev, which probably scares people off and isn't at all self-descriptive. For RCs and GAs, we used major.minor.bugfix (e.g. 1.5.0 was 1.5 RC1, 1.5.1 was 1.5 RC2, and 1.5.2 was GA). This is all too ad hoc and confusing. Here's the new proposal: major.minor.bugfix (e.g. 2.1.0, 2.1.1, 2.1.2) = This is an official, supported build. Every new minor (or bigger) release would start with a bugfix number of 0. major.minor.bugfix-rcn (e.g. 2.0.0-rc1, 2.0.0-rc2) = This is release candidate build n for the specified upcoming GWT release major.minor.bugfix-mn (e.g. 2.0.0-m1, 2.0.0-m2) = This is milestone build n for the specified upcoming GWT release In other words, the stream of announced code drops for 2.0 will look like this (assuming 2 milestone and 1 rc): 1) gwt-2.0.0-m1.zip 2) gwt-2.0.0-m2.zip 3) gwt-2.0.0-rc1.zip 4) gwt-2.0.0.zip Note that we would always include the RC number, even if there's just one (because you never know if another one is coming). I'm very happy to report that there seems to be no need to change even a single line of code, as best I can tell. (Thank you to whomever wrote the version string parsing code to ignore non-digit prefixes and suffixes.) Thus, by simply following this convention when we set GWT_VERSION in the continuous build, everything should work just fine. -- Bruce P.S. No, Joel, we can't start counting at 0, even though it makes more sense :-) I can read your mind. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Add GWT#getUserAgentProperty()
Let me play devil's advocate, at least against the idea of returning the string directly. I fear that making this value easily accessible will encourage people to write conditional tests all over the place, which is brittle (i.e. because we're very subtly locked into particular user.agent values) and less optimal (because it isn't clear that the resulting patterns will optimize well). I guarantee you people will create maps of (user agent string key) = (functor), which will thoroughly default compiler optimizations. Can you talk a bit more about the motivation, so we could consider alternatives? On Fri, Aug 7, 2009 at 10:50 AM, Ray Ryan rj...@google.com wrote: I say where's the unit test? On Fri, Aug 7, 2009 at 7:14 AM, j...@google.com wrote: On 2009/08/07 13:56:08, jlabanca wrote: So there's one problem here: The GWT class is in the Core module, which doesn't (and shouldn't) depend upon the UserAgent module. I think that to get this right, we'll need to do one of the following things: - Add this code to some class in User. Not my favorite option. - Add a new UserAgent module that lives in its own package, so that we can add UserAgent-related stuff to a class there. Perhaps com.google.gwt.ua.UserAgent? - I kind of like this option, because (a) it gets UserAgent out of the user packgage, where it never should have been in the first place, and (b) it gives me a place to put other UserAgent-related methods I need to add. What say you? http://gwt-code-reviews.appspot.com/57804 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Inlining nocache.js
2 requests is very impressive, Arthur! This is the sort of conscientiousness (i.e. for optimizing user experience) I hope all GWT developers would strive for. Nice work. And yes, we'd like to help you get that down to 1, too. On Fri, Aug 7, 2009 at 9:43 AM, Arthur Kalmenson arthur.k...@gmail.comwrote: I'd love to see this in the trunk too. We have only 2 round trips on start up now, thanks to ClientBundle. Getting it down to one will be very slick! -- Arthur Kalmenson On Fri, Aug 7, 2009 at 8:41 AM, Cameron Braidcame...@braid.com.au wrote: I'd be keen to see this land in trunk ! Cam 2009/8/7 John Tamplin j...@google.com On Fri, Aug 7, 2009 at 3:51 AM, George Georgovassilis g.georgovassi...@gmail.com wrote: I'd like to save first time visitors that roundtrip to fetch nocache.js. Instead I've declared the module HTML page as non- cacheable (works nice thanks to E-Tag) and moved images and GWT- compiler output to a fully cacheable directory. After inlining nocache.js into the module HTML I had to change the paths to the XYZ.cache.html permutations, but couldn't get RPC to work reliably across all browsers. Is there a way to do this cleanly? There is a Google-internal linker that does this, and will be cleaned up and moved to GWT itself in the near future. I don't know an exact timeframe for this however. -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Inlining nocache.js
The best you can do for a cold cache is 2 round-trips (including the host page) if you inline the selection script (.nocache.js) in the host page. You definitely do want the compiled script (.cache.html) *not* embedded in the host page, so that it can have cache forever semantics. Then, when users have a warm cache, it's literally exactly 1 round-trip for the module to start. BTW, once you do inline the selection script, it will be more important to get the HTTP semantics just right. Although it says nocache, the proper semantics are must-revalidate, so typically, the host page won't have changed on the server, and thus it becomes an If-Modified-Since (IMS) request with a Not-Modified (NM) response. In other words, the best case for a warm cache is this 1 round-trip: IMS = NM, which is very cheap because there's no response payload. Your code can start essentially instantly on a decent network. On Fri, Aug 7, 2009 at 11:39 AM, Arthur Kalmenson arthur.k...@gmail.comwrote: Are you counting fetching the host HTML page? With this approach, the selection script is done away with but you still have a fetch for the compiled script so that it can remain permanently cacheable. You could theoretically inline it into the host page, but since none of that is cacheable that would only make sense for very tiny compiled outputs. I don't think firebug counts the initial request to fetch the host page, so two requests. One for the nocache.js and another for the cachable HTML. With the inlining of the nocache.js file, you could get it down to 0 requests if the retrieved page is cached forever. Are you saying to inline the generated JS in the host page too? How could you do that? Don't you need the selector script to pick the correct compiled version? Maybe I'm just not understanding what you mean. 2 requests is very impressive, Arthur! This is the sort of conscientiousness (i.e. for optimizing user experience) I hope all GWT developers would strive for. Nice work. And yes, we'd like to help you get that down to 1, too. Thanks Bruce! But it's really all thanks to Bob's ClientBundle :) -- Arthur Kalmenson On Fri, Aug 7, 2009 at 9:57 AM, John Tamplinj...@google.com wrote: On Fri, Aug 7, 2009 at 9:43 AM, Arthur Kalmenson arthur.k...@gmail.com wrote: I'd love to see this in the trunk too. We have only 2 round trips on start up now, thanks to ClientBundle. Getting it down to one will be very slick! Are you counting fetching the host HTML page? With this approach, the selection script is done away with but you still have a fetch for the compiled script so that it can remain permanently cacheable. You could theoretically inline it into the host page, but since none of that is cacheable that would only make sense for very tiny compiled outputs. Note that there is a cost, as your host HTML page now can't be cached (since the selection script essentially runs in the server). If your host page is complex, this may be a net loss. You could try leaving it cacheable but setting Vary headers for the pieces that you use to make the decision, but my understanding is that many caches do not handle this properly. Also, you cannot use any deferred binding properties that can't be determined by the HTTP fetch of your host page. -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: lightweight events for runAsync in draft mode
On Fri, Aug 7, 2009 at 12:20 PM, Lex Spoon sp...@google.com wrote: One place I would quibble about is compiler transforms that we consider to be optimizations, because an optimization should preserve behavior. Thus, a test case should not have any easy way to be sensitive to the choice. Going back to the code splitting example, it would be within spec for the code splitter *not* to generate a download event for a particular split point, even though it's not that clever right now. That flexibility makes it very hard to think up an API for querying the code splitter's settings. Certainly on and off isn't enough information, at least going forward. The sorts of compiler optimizations tests I was referring to were to-be-written tests of complex optimizations where the whole point of the test is to ensure the compiler is doing exactly the transform we intend it to. IOW, the sort of stuff Scott is working on testing infrastructure for. I mostly see your point about the splitter, and in cases like that where you aren't trying to test the exact decisions/implementation, then it seems reasonable to have something that's a bit looser. OTOH, one could argue that it's good to have tests that verify specific behavior that is intended for the current implementation rather than adherence to the spec. Would anyone see anything bad, for the narrow code splitting example, with adding a LWM event saying split point requested, but code already present? This approach would mean I can finish up the runAsync LWM patch on Monday or Tuesday. No objections here, especially if the code already present event is meaningful for web mode where indeed the needed code has already been downloaded. That could be useful thing to know at runtime in production. Looks good to me. For the short term, how does it strike you to also have a way to query config and binding properties? While it might not be what we want in the long run, it looks very practical right now. For example, disable this test when user.agent=opera. Another example would be, disable this test if class metadata is off. Given the near-term state of module specifications, querying the property looks more direct than needing to define a class that corresponds to them. I like the pragmatism, but I fear the repercussions of a intermediate generalized solution that would encouraged the string literal names of properties and flags all over client code. I'd rather we switched things over to The Right Way (whatever we deem that to be) rather than have a half-done waypoint. However, The Right Thing could be something very different than what I proposed -- see the JUnit discussion below. Also, while thinking about how to set up the annotations, or and and would seem helpful in some cases. Run this test if the agent is iphone *or* the agent is android. Run this test if the agent is iphone *and* class metadata is on. So it would be good to include them, or something equally powerful, in the supported annotations. My idea here might be considered a hack. I was thinking that and could be represented as pairs of (to, from) tuples, and that or could be represented as separate test cases that simply delegate, such as @RunWhen(Browser.class, Browser_IPhone.class) public void testIPhone() { doTestIPhoneOrAndroid(); } @RunWhen(Browser.class, Browser_Android.class) public void testAndroid() { doTestIPhoneOrAndroid(); } private void doTestIPhoneOrAndroid() { ... } Now that I look at it, it's kinda hacky, but then again it may not be very common. Hopefully not, or we're not doing a good job of creating portable APIs. On the downside, using assumeThat() means that the test runner still has to run the tests. With annotations, the test runner can know ahead of time which tests are relevant on which platforms. Would our test runners make good use of that information? Enough to merit the implementation time and the larger GWT user manual? I think assumeThat() might indeed be a good general solution, along the lines of your examples. It subsumes the annotations I proposed, and it's nice that it could be generalized easily to any sort of tests. Also, it *might* be possible for the compiler to optimize it statically somewhat such that if a test contained assumeThat(X) where X was statically know to be false, the whole method could go away. (Of course, we'd need that behavior to be generalized somehow -- I'm not proposing JUnit-specific compiler behavior, which would be way too hacky). --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Questions and concerns with HandlerManager
Are there lots of folks on the list that have the same sorts of feedback on HandlerManager? I ask because, as a fly on the wall here, this conversation doesn't sound like it's converging, and I'd like to declare this thread dead for now so that we can move onto other things. We have a lot of other things to be giving attention to so that we can get GWT 2.0 out. If we need to revisit these issues in the future, we certainly can. -- Bruce On Fri, Aug 7, 2009 at 4:43 PM, Ed post2edb...@hotmail.com wrote: class HandlerManagerSource { ... } Interesting how you put Generics in the HandlerManager Of course this is a no go area as you explained. Try my HandlerManager scenario like I described above; only the event contains the actual source generics, and of course not he HandlerManager... Let me know if you want some code of this ? So I can grep something together... I might need a bit of time for that... and let me know where to send it to? To be honest, I'm having a really hard time understanding the structure you're describing. Maybe a bit of (heavily elided) code would help clarify it? H... I could give some code, but I think in words the need for the interceptor is clear: The user selects something and the interceptor will indicate if the selection is allowed to be committed (like a 2-phase db transaction) or not.. Can you give me more details about what you not understand here please? I am afraid that the code only make it less understandable as it's complex.. due to the asynchrone behavior. If you could describe *precisely* what you think should be opened up in HandlerManager, it would help me to make a reasonable judgment. As it stands, it all seems very vague to me. H... can't remember the *precise* details anymore... it was already some time ago... :( One thing I remember was that I wanted to change the source in the HandlerManager, which wasn't possible as it can only be set through the constructor.. On Aug 7, 10:07 pm, Joel Webber j...@google.com wrote: On Fri, Aug 7, 2009 at 1:34 PM, Ed post2edb...@hotmail.com wrote: It costs me a bit to go back in time as these issues are already from some time back.. Let me try to give some input on these points. 2) I don't fully understand what the problem is here. Could you give an example that shows that it breaks? It's actually worse than I thought. If I add a type parameter to HandlerManager, I get something like class HandlerManagerSource { ... } But I have no way to specify the source type when it's declared in Widget: class Widget { HandlerManager??? handlerManager; } The Source type parameter would force me to declare a separate HandlerManager field in each subclass of Widget. But then I can't subclass a widget and get the source type correct -- I'd need *another* handlerManager field. 3) Ok, let me give an example and hope I have some luck here... ;) I remember we had this same discussion about primitive-simple Widget interfaces, you asked me the same thing (together with Bruce), I gave some concrete interfaces.. and never heard anyting :(... My app is very simple in layout: a menu on the left and the content on the right. You can navigate to another piece of content by clicking on the next/prev button in the content screen part or by clicking in the menu. If the user navigates away from the current content screen (by clicking next/previous... or the menu), and the current shown content isn't valid, he will be asked for a confirmation. If yes, the action (=going to the new content and saving the current shown content) will be performed, if no, the action is canceled and he stays on the same content screen. I implement this through an interceptor (aynchrone in this case) that will take care of the confirmation and some other side-actions. It makes it clean and transparent. What I do roughly: I inject the interceptor in the presenter. When the select value in the model changes it will first inform the interceptor with a callback. The call back contains different methods that are called by the HandlerManager implementation to indicate success/ cancelation. In case of success (the user clicks Ok), it will inform the callback about this such that the property change can be made permanent. The handlermanager will then inform the listeners and after that call the callback to indicate that they are all informed If you need more details, let me know ? To be honest, I'm having a really hard time understanding the structure you're describing. Maybe a bit of (heavily elided) code would help clarify it? After describing the above, you might understand that it's desirable to open up the GWT Handlermanager to add these functionality directly to it, instead of making a copy and changing it.. Probably this is need
[gwt-contrib] Re: Questions and concerns with HandlerManager
Dead! (for now) On Fri, Aug 7, 2009 at 5:10 PM, Ed post2edb...@hotmail.com wrote: Then I would declare it dead Bruce! With all do respect: I do very complex things with GWT and do walk on his boundaries... And to my experience - I am a bit lonely out here... (yes I know it sounds a bit arrogant...) And yes, I agree that you guys have better things to do to make GWT first more mature before they support these complex things... Buttt... it would be nice if these things aren't forgotten and put on the nice-to-have list... and not on the forget-list. I think that adding (more) primitive (characteristic) widget/panel interfaces, like we discussed before has an higher priority, so I hope you guys add this to gwt 2.0. I am still suprised about the few people complain about this. But I have pointed out concrete clear cases that show the need for this...(like you asked before) Just my thoughts... BTW: Joe if you want some code about my HandlerManager to be able to define the source through generics, let me know... On Aug 7, 10:55 pm, Bruce Johnson br...@google.com wrote: Are there lots of folks on the list that have the same sorts of feedback on HandlerManager? I ask because, as a fly on the wall here, this conversation doesn't sound like it's converging, and I'd like to declare this thread dead for now so that we can move onto other things. We have a lot of other things to be giving attention to so that we can get GWT 2.0 out. If we need to revisit these issues in the future, we certainly can. -- Bruce On Fri, Aug 7, 2009 at 4:43 PM, Ed post2edb...@hotmail.com wrote: class HandlerManagerSource { ... } Interesting how you put Generics in the HandlerManager Of course this is a no go area as you explained. Try my HandlerManager scenario like I described above; only the event contains the actual source generics, and of course not he HandlerManager... Let me know if you want some code of this ? So I can grep something together... I might need a bit of time for that... and let me know where to send it to? To be honest, I'm having a really hard time understanding the structure you're describing. Maybe a bit of (heavily elided) code would help clarify it? H... I could give some code, but I think in words the need for the interceptor is clear: The user selects something and the interceptor will indicate if the selection is allowed to be committed (like a 2-phase db transaction) or not.. Can you give me more details about what you not understand here please? I am afraid that the code only make it less understandable as it's complex.. due to the asynchrone behavior. If you could describe *precisely* what you think should be opened up in HandlerManager, it would help me to make a reasonable judgment. As it stands, it all seems very vague to me. H... can't remember the *precise* details anymore... it was already some time ago... :( One thing I remember was that I wanted to change the source in the HandlerManager, which wasn't possible as it can only be set through the constructor.. On Aug 7, 10:07 pm, Joel Webber j...@google.com wrote: On Fri, Aug 7, 2009 at 1:34 PM, Ed post2edb...@hotmail.com wrote: It costs me a bit to go back in time as these issues are already from some time back.. Let me try to give some input on these points. 2) I don't fully understand what the problem is here. Could you give an example that shows that it breaks? It's actually worse than I thought. If I add a type parameter to HandlerManager, I get something like class HandlerManagerSource { ... } But I have no way to specify the source type when it's declared in Widget: class Widget { HandlerManager??? handlerManager; } The Source type parameter would force me to declare a separate HandlerManager field in each subclass of Widget. But then I can't subclass a widget and get the source type correct -- I'd need *another* handlerManager field. 3) Ok, let me give an example and hope I have some luck here... ;) I remember we had this same discussion about primitive-simple Widget interfaces, you asked me the same thing (together with Bruce), I gave some concrete interfaces.. and never heard anyting :(... My app is very simple in layout: a menu on the left and the content on the right. You can navigate to another piece of content by clicking on the next/prev button in the content screen part or by clicking in the menu. If the user navigates away from the current content screen (by clicking next/previous... or the menu), and the current shown content isn't valid, he will be asked for a confirmation. If yes, the action (=going to the new content and saving the current shown content
[gwt-contrib] Re: UIBinder
We're shooting for a milestone drop in a few weeks, and we're planning for an RC by the end of the quarter. But, you know how predicting dates goes... On 8/4/09, Claudemir Todo Bom claude...@gmail.com wrote: is there an ETA for 2.0? On Aug 4, 10:42 am, Ray Ryan rj...@google.com wrote: How does today strike you? It's headed into gwt trunk, and will be part of the 2.0 release. On Tuesday, August 4, 2009, brett.wooldridge brett.wooldri...@gmail.com wrote: Ping. This not this month any more, it's early next. Got a revised (rough) ETA for UIBinder in SVN? I would even love to hear definitely this month, but we don't know when. -Brett On Jul 15, 1:25 am, Ray Ryan rj...@google.com wrote: It's coming RSN. We're trying to get UiBinder into GWT 2.0. It will certainly be in SVN this month or early next. I know I've been saying that for a while, but now we're actually, like, working to make it happen. On Mon, Jul 13, 2009 at 11:05 PM, brett.wooldridge brett.wooldri...@gmail.com wrote: I've read the docs for UIBinder in the wiki, and like everyone else who has read it, I am anxious to start using it. However, even though the doc and examples are in the wiki, I am unable to find the UIBinder code in svn. Is it available? Or can it be made available? Rough or not, documented or not, there are many developers who would like to start playing with it (and helping to fix issues). Thanks Brett --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Async interface black magic
Although it feels less convenient, the async nature of RPC is actually valuable for usability. It forces you to think about what to do in the application UI while a potentially long-running activity is taking place. When you consider that a network round-trip combined with time spent on the server could easily take multiple seconds on average, that's an awful long time to have the UI thread blocked doing nothing. If it were possible to write blocking (or even, seemingly blocking) calls, it would be too tempting to not think about the user experience -- in other words, in most apps the UI would simply hang -- and it's probably prescibing a horrible user experience. On Mon, Aug 3, 2009 at 6:57 AM, John Patterson jdpatter...@gmail.comwrote: On 3 Aug 2009, at 20:53, Miroslav Pokorny wrote: The Async interface is necessary because one does not want to use sync (blocking) rpc calls back to the server. When using blocking calls the entire browser freezes which is especially bad give responses arenot instantwous. I was suggesting the use of continuations to _mimic_ blocking calls but allow the thread to continue. Then from your Java code you would not need to worry about passing in a callback to every service method. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: faster size breakdown with non-fractional billing
Because it's easy to bikeshed: can we make the -soyc (-soycExtra) flag more like -style in that it has multiple values rather than having two separate flags? Or is there a rationale for this style that I'm missing. When Bob V's permutation control changes land, we want to make all of this sort of stuff fall into the category of deferred binding properties, so that you could, for example, create one permutaiton with style PRETTY, another with style DETAILED, etc. Having the -soyc flag follow a name/value pattern would make it more amenable to this change. On Mon, Aug 3, 2009 at 8:53 AM, kpro...@google.com wrote: On 2009/07/16 22:28:18, Lex wrote: I think this is a great step forward. This version of Soyc is much more intuitive, and will make it much easier to explain. There are a couple of things that occurred to me, but otherwise it LGTM: 1. Is the detailed output truly a more detailed version of the version that uses JavaToJavaScriptMaps? I think that because of inlining, etc., and the resulting partial billing, you will end up with different cumulative sizes for fragments. This is probably fine, but if I were using Soyc and wanted to get more detailed information, and got different numbers, I would think that there is a bug. How can we set expectations correctly? 2) I'm not the biggest fan of having two compiler flags, -soyc and -soycExtra, but if you are, then it's fine. A few small comments are in the code. http://gwt-code-reviews.appspot.com/51804 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: faster size breakdown with non-fractional billing
Based on what you said, I like a lot as is. Thanks for explaining it. On Mon, Aug 3, 2009 at 2:52 PM, Lex Spoon sp...@google.com wrote: On Mon, Aug 3, 2009 at 1:58 PM, Bruce Johnsonbr...@google.com wrote: Because it's easy to bikeshed: can we make the -soyc (-soycExtra) flag more like -style in that it has multiple values rather than having two separate flags? Or is there a rationale for this style that I'm missing. When Bob V's permutation control changes land, we want to make all of this sort of stuff fall into the category of deferred binding properties, so that you could, for example, create one permutaiton with style PRETTY, another with style DETAILED, etc. Having the -soyc flag follow a name/value pattern would make it more amenable to this change. There is no immediate use case for the detailed information. However, I hated to remove all that code when we might need it later. Thus, I left -soyc as the normal use case, and added -XsoycExtra for those use cases that might conceivably need it in the future. It's not a documented option, and it's not listed when you run the compiler with -help. How does that sound, Bruce and Kathrin (and anyone else interested)? It seems very helpful if -soyc is the only option users need to supply. There is even talk of having the -soyc option go ahead and run the dashboard generator, thus giving you final HTML output without needing to add the second step. On a related note, I agree with Kathrin that it's not precisely detailed or extra information that this flag gives you. It's different information, different enough that you can't compute one from the other. I named it extra in a hurry. Can anyone think of anything that would be less misleading? -Lex --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Web mode stack traces - propose stackElement.getFileName() return 'JavaScript' instead of 'Unknown'
I prefer Unknown because it's an indication you are looking at suboptimal stack trace output. JavaScript makes it sound like we actually intend for you to be looking at that output, when in fact, you really want to use symbol maps to reverse lookup the Java idents. On Fri, Jul 31, 2009 at 2:42 PM, Fred Sauer fre...@google.com wrote: Web mode stack traces are steadily improving. You can even get line numbers (by inheriting com.google.gwt.core.EmulateJsStack). Without the extra instrumentation you web mode stack traces might look something like this: at Unknown.$NullPointerException() at Unknown.onClick_6() at Unknown.dispatch() at Unknown.$fireEvent() at Unknown.$fireEvent_0() at Unknown.$fireEvent_1() at Unknown.fireNativeEvent() at Unknown.onBrowserEvent() at Unknown.dispatchEventImpl() at Unknown.dispatchEventAndCatch() at Unknown.anonymous() I was thinking it might make slightly more sense if we replaced 'Unknown' with 'JavaScript', e.g. at JavaScript.$NullPointerException() at JavaScript.onClick_6() at JavaScript.dispatch() at JavaScript.$fireEvent() at JavaScript.$fireEvent_0() at JavaScript.$fireEvent_1() at JavaScript.fireNativeEvent() at JavaScript.onBrowserEvent() at JavaScript.dispatchEventImpl() at JavaScript.dispatchEventAndCatch() at JavaScript.anonymous() Anyone have strong opinions wither way? -- Fred Sauer Developer Advocate Google Inc. 1600 Amphitheatre Parkway Mountain View, CA 94043 fre...@google.com --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Web mode stack traces - propose stackElement.getFileName() return 'JavaScript' instead of 'Unknown'
) On Fri, Jul 31, 2009 at 5:00 PM, Fred Sauer fre...@google.com wrote: I can't wait! On Fri, Jul 31, 2009 at 4:58 PM, Bruce Johnson br...@google.com wrote: 4 cheers for Bob! w00t, w00t, w00t and w00t. Also, note that this is phase 1 in a larger plan. For Bob's next feat of magic, he's going to provide better control over permutations, allowing you to, say, include the (expensive) stack traces below for only a small percentage of users -- as well as all sorts of other cool, unrelated things that involve carving up your permutation space more powerfully On Fri, Jul 31, 2009 at 4:36 PM, Ray Cromwell cromwell...@gmail.comwrote: On Fri, Jul 31, 2009 at 4:33 PM, Fred Sauer fre...@google.com wrote: You get the following, which notably can be pasted into Eclipse's Stack Trace Console view so that the filename:lineNumber pairs become clickable hyperlinks: That's just awesome beyond belief. -- Fred Sauer Developer Advocate Google Inc. 1600 Amphitheatre Parkway Mountain View, CA 94043 fre...@google.com -- Fred Sauer Developer Advocate Google Inc. 1600 Amphitheatre Parkway Mountain View, CA 94043 fre...@google.com --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: patch to enable web tests using HtmlUnit
Fantastic! On Thu, Jul 30, 2009 at 1:52 PM, Ray Ryan rj...@google.com wrote: WAHOO! On Thu, Jul 30, 2009 at 1:48 PM, Amit Manjhi amitman...@google.comwrote: Thanks Scott. Commited the changes at r5844 with a fix the first thing and a TODO for the second thing. On Thu, Jul 30, 2009 at 10:48 AM, sco...@google.com wrote: LGTM with nits. http://gwt-code-reviews.appspot.com/54809/diff/1096/1130 File user/src/com/google/gwt/junit/JUnitShell.java (right): http://gwt-code-reviews.appspot.com/54809/diff/1096/1130#newcode220 Line 220: + e.g. IE6,IE7,FF2,FF3...; Could the exact list be gotten from RunStyleHtmlUnit? Then you don't need to update this message if the set of browsers changes. http://gwt-code-reviews.appspot.com/54809/diff/1096/1129 File user/src/com/google/gwt/junit/RunStyleHtmlUnit.java (right): http://gwt-code-reviews.appspot.com/54809/diff/1096/1129#newcode149 Line 149: threads.add(hut); Is there any way to, say, pause here waiting for the other thread to get to an okay state that would could call a successful launch? Might be nice to detect report errors early. http://gwt-code-reviews.appspot.com/54809 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Force emulated stack traces when running JUnit tests?
Yes, I think we would want to. My point is that we also would want to run the non-instrumented code. I have to think there could be subtle downstream behavioral differences (e.g. compiler optimizations that do/don't happen) based on whether the stack trace code is generated. Thus, I'm saying we should test both. On Thu, Jul 23, 2009 at 1:09 PM, BobV b...@google.com wrote: Technically, wouldn't it just mean we should not pin down the value of the deferred binding property that controls it? It would double the number of permutations, tho. But wouldn't we actually want to run the instrumented code, to make sure that the instrumentation itself doesn't break something? -- Bob Vawter Google Web Toolkit Team --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
GWT 1.7 Now Available
Hi everyone, (Most people are probably already quite aware of the new GWT 1.7 release, but we wanted to send out an official announcement we could pin to the top of the message list.) GWT 1.7 is a minor update that adds better support for Internet Explorer 8, Firefox 3.5, and Safari 4. Each of these new browser versions introduced at least one change that negatively impacted compiled GWT modules, so we recommend that you do update to GWT 1.7 and recompile your existing applications to ensure that they work with the latest versions of browsers. No source code changes on your part should be required. Normally, a minor update such as this would have been named 1.6.5 (the previous latest version of GWT was 1.6.4), but we did add the value ie8 to the user.agent deferred binding property, which could impact projects using custom deferred binding rules that are sensitive to that property. Thus, we went withGWT 1.7 rather than GWT 1.6.5, to indicate that you may need to pay attention to that change. Details are in the release notes. In every other respect, this is just a bugfix release, so in the vast majority of cases, the update-recompile process should be nearly effortless. Download here: http://code.google.com/p/google-web-toolkit/downloads/list?can=1q=GWT+1.7.0 Cheers, Bruce, on behalf of your friendly GWT Team --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~--~~~~--~~--~--~---
[gwt-contrib] Re: Generators and hosted mode refresh
@Scott: Hasn't there been a subtle shift in this regard? With GWT 1.5, didn't we conclude that loading classes at least for annotations would make the most sense? I think now that we have enhanced the CCL, for deRPC, to delegate to grey area classes that aren't strictly in the client space, maybe we actually could run generators in the CCL. On Wed, Jul 22, 2009 at 10:24 AM, Brian Stoler bsto...@google.com wrote: Hi Scott, Gin uses reflection because it reuses the heavy lifting from Guice, which is not GWT-aware. Seems like both issues could be resolved if generators were loaded in the client code ClassLoader. Is there a technical or philosophical problem with doing so? I can understand it might not be at the top of the priority list right now, but wanted to know if it would be a bad thing if someone were to propose a patch. -brian On Wed, Jul 22, 2009 at 7:20 AM, Scott Blum sco...@google.com wrote: Generally speaking, you do not want to use reflection inside a generator to try to view the client code. That's what TypeOracle is for, that's the supported way of viewing client code. As for the separate issue of modifying and recompiling a generator itself while running, you're right in that we don't explicitly support it. Using unit tests during generator development as you suggest sounds like a good strategy to me. In some cases, you might also get your IDE to do a hot-replace if you modify the code while debugging, but this can be flaky. On Wed, Jul 22, 2009 at 6:45 AM, Alen Vrecko alen_vre...@yahoo.comwrote: Hi, continuing from http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/c65457fa4df351c1 . Sorry for the added garbage could have known better to post it here in the first place. I see generators as en extension to client code therefore I expect them to behave a bit like client code namely refresh recompiles the generator and client class code changes are visible to the generator. As recompiling the generator feature goes maybe it is a bit like fairytale i.e. not really needed. Will just write the unit tests for generators in any case before running the hosted mode and not play with the generator on the fly with change code shutdown-start hosted mode repeat. But seeing the latest class files inside generator is needed for refresh to work in some cases. Sure you can do much with TypeOracle but you can't instantiate the JType. Afaik there is no bridge between a JType and Class type. What do you think? Cheers Alen --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Force emulated stack traces when running JUnit tests?
On Wed, Jul 22, 2009 at 4:57 PM, Scott Blum sco...@google.com wrote: On Wed, Jul 22, 2009 at 4:46 PM, BobV b...@google.com wrote: Should running a web-mode test case always turn on the emulated stack trace code? Would always on mean that it generates code even for browsers that have native stack traces (i.e. FF)? Generally, as much as I hate to say it, it seems we'd want variations of the tests both with and without stack trace code, so that we don't inadvertently break one mode or the other. It is much like -draftCompile in this respect. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] GWT 1.7 Now Available
Hi everyone, GWT 1.7 is a minor update that adds better support for Internet Explorer 8, Firefox 3.5, and Safari 4. Each of these new browser versions introduced at least one change that negatively impacted compiled GWT modules, so we recommend that you do update to GWT 1.7 and recompile your existing applications to ensure that they work with the latest versions of browsers. No source code changes on your part should be required. Normally, a minor update such as this would have been named 1.6.5 (the previous latest version of GWT was 1.6.4), but we did add the value ie8 to the user.agent deferred binding property, which could impact projects using custom deferred binding rules that are sensitive to that property. Thus, we went with GWT 1.7 rather than GWT 1.6.5, to indicate that you may need to pay attention to that change. Details are in the release notes. In every other respect, this is just a bugfix release, so in the vast majority of cases, the update-recompile process should be nearly effortless. Download here: http://code.google.com/p/google-web-toolkit/downloads/list?can=1q=GWT+1.7.0 Cheers, Bruce, on behalf of your friendly GWT Team --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: SOYC generates more dependency trees
On Mon, Jul 6, 2009 at 10:11 AM, kpro...@google.com wrote: I see two options: a) a full-blown query language (far off, but would be very cool), or b) a UI driven by use cases and/or specific questions, which we spell out explicitly for the user, either in the UI itself or else in an accompaying doc. What do you think? We can break it into phases. For GWT 2.0, we ought to polish up the aesthetics of what we already have. Post-2.0, I think a query language makes the most sense, but only if it is a reasonable amount of effort (a few weeks). Once we have a query engine on SOYC data, then we can build any kind of out-of-the-box HTML reports we want, formulated as a set of canned queries. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
Re: Horizontal tabs in a TabPanel
Just looked at some of the option avaliable, I think i'm going to add options into a stackpanel then putting the tabl panel and stackpanel into a dock panel. Just wondering how to incorporate it so everything looks awhole is it all done through a CSS? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~--~~~~--~~--~--~---
Horizontal tabs in a TabPanel
Instead of having the tabs in a tab panel alight to the top left corner, is there anyway to align them to the right? (not right hand corner but to the right-hand side) Kinda like what they're doing right now with this discussion group...? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~--~~~~--~~--~--~---
Error installing GWT plugin for Eclipse
I can't the eclipse pligin to instal... i keep getting this error! http://i616.photobucket.com/albums/tt248/chukkii_2009/error-1.jpg --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~--~~~~--~~--~--~---
[gwt-contrib] Re: Make i18n generator use ResourceOracle
On Wed, Jun 24, 2009 at 1:59 PM, Scott Blum sco...@google.com wrote: Lots. Like, a whole lot. I had a measurement at one time but lost them. :( Would take a while to remeasure. Sold. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: naming runAsync calls
On Wed, Jun 24, 2009 at 5:08 PM, Lex Spoon sp...@google.com wrote: Thoughts? The main downside I know of is the one John Tamplin has pointed out: if there are multiple runAsync calls within a single class -- as sometimes happens -- then the programmer has to code up some new classes that will only be used for naming. Can we live with that? I think so. It's less anxiety-inducing to create a class as a moniker (even if it's a bit artificial) rather than fret about picking a good string literal (will it collide?, what naming scheme should I use?, I wish I hadn't used that other naming scheme in that other part of the code...should I go fix it up right now?). Plus, your IDE can help you create moniker classes and, when needed, efficiently rename/refactor them. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: naming runAsync calls
Four additional arguments in favor of using split point moniker classes is that they 1) are easier to find within an IDE (i.e. Show References in your IDE from a moniker class declaration would show you the associated runAsync call), 2) can take advantage of inheritance as a way to group split points into meaningful families (which would make them more easily browsable and navigable in javadoc and in an IDE), 3) can be javadoc'ed to explain what they do, and 4) they could potentially be augmented with additional hints to the code splitter using annotations (these are a stretch; Lex might be able to think of more realistic example annotations) /** * Split points in this hierarchy relate to the email functionality within the office suite. */ class EmailSplitPoint extends OfficeSuiteSplitPoint { } /** * This split point carves out all heavyweight functionality related to composing emails, * most importantly, the rich text area clases. */ @ProhibitPreloading @MustBeExclusiveFragment class EmailCompositionSplitPoint extends EmailSplitPoint { } // ... elsewhere ... void onComposeButtonClicked() { GWT.runAsync(EmailCompositionSplitPoint.class, new AsyncCallback() { public void onError(Throwable e) { ... } public void onSucess() { new EmailCompositionView().activate(); } }); } On Wed, Jun 24, 2009 at 6:50 PM, Cameron Braid came...@braid.com.au wrote: Each of these different libraries would be enclosed within a unique GWT module therefore when you refer to the split point name, can't you just use the module name + split point name ? in module ThirdParty : GWT.runAsync(one, new RunAsyncCallback() { ... }); in MyModule : GWT.runAsync(one, new RunAsyncCallback() { ... }); extend-configuration-property name=compiler.splitpoint.initial.sequence value=MyModule#one / extend-configuration-property name=compiler.splitpoint.initial.sequence value=ThirdParty#one / Cam 2009/6/25 Lex Spoon sp...@google.com On Wed, Jun 24, 2009 at 2:15 PM, Lex Spoonsp...@google.com wrote: Overall, unless I missed something, Okay, Bruce pointed out a new constraint to me: if different libraries name their runAsync calls, then we want to able to refer to those calls reliably even if different libraries choose the same name. This isn't an issue immediately, but it likely will be in the future. Thinking about libraries, I would add another constraint: we don't want libraries to have to expose their implementation. Library writers should ideally be able to document a named runAsync call without exposing the precise arrangement of their internal classes. After some discussion at the office, a tweak to option 4 fixes things up handily. Instead of passing in a string to the method, act like a Java framework and require passing in a class literal. A typical use in application code would pass in the enclosing top-level class: package org.foodity.impl; class Cookies { ... GWT.runAsync(Cookies.class, new RunAsyncCallback() { ... }); ... } A library writer could instead specify a public class, so as not to expose their internal factoring. A user of the name in a gwt.xml file would use the fully qualified version: extend-configuration-property name=compiler.splitpoint.initial.sequence value=org.foodity.impl.Cookies / A user in another Java file would use imports to make the name short: import org.foodity.impl.Cookies; RunAsyncQueue.startPrefetching(Cookies.class); Thoughts? The main downside I know of is the one John Tamplin has pointed out: if there are multiple runAsync calls within a single class -- as sometimes happens -- then the programmer has to code up some new classes that will only be used for naming. Can we live with that? Lex --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: naming runAsync calls
I guess the compiler would have to verify that each call to runAsync uses a unique moniker - is there anything else ? I think that's it. Pretty easy to check, and pretty easy for a developer to reason about, too. Must the moniker class exists in your own module ? I don't think it ought to be so restricted unless anyone can think of a reason to. It would actually be a good bit harder to implement to enforce that rule. Would you only allow leaf classes to be used as monikers, i.e. could you use OfficeSuiteSplitPoint.class as a moniker ? This would also work, although it's still too new an idea to say whether it would be wise to use such a pattern in practice. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: i18n support for concrete default locale
Apologies that I'm wy late to this party, but the whole template search/replace thing doesn't seem ideal in that something like a typo in the template name could cause some seriously hard-to-debug code. Did you consider the case that if a property provider returns null, then the fallback would get used? I like that idea because (1) it doesn't rely on textual search/replace and (2) it seems like a good pattern to form the basis of property provider chaining, which is a long-standing problem for properties that get extended. That is, if a derived module extends a property, it usually wants to also extend the property provider, which today involves brittle copy/paste. It would be great to figure out some protocol for calling each property provider -- most-derived to least -- such that the first one that return non-null is taken to be the official answer, and returning null means ask the next most derived provider for this same property. -- Bruce On Mon, Jun 15, 2009 at 11:03 PM, Freeland Abbott fabb...@google.comwrote: Revision to the concept, for design review: See http://code.google.com/p/google-web-toolkit/wiki/DefaultLocaleBinding, but the short-and-sweet is: - Introduction of XML tag set-property-fallback name=*propname* value=*fallbackString*/. It's fine, and expected, to set this zero, one, or many times for any given property. - A new field gets added in BindingProperty, with setter and getter, and a default value of empty string - getPropertyProvider() is rewritten to return, not the literal property provider string, but the result of replacing all instances of /*-FALLBACK-*/ with the fallback string, whether empty or otherwise. - For my default locale use case, our I18N.gwt.xml sets the locale fallback to default, and user code sets it to something real if the user doesn't like that. On Wed, Jun 10, 2009 at 11:49 AM, Freeland Abbott fabb...@google.comwrote: Yes, he and I already discussed it. I was initially trying to avoid needing a new XML tag when the existing one was such a near fit, but the legacy linker support issues convinced me we needed it. On Tue, Jun 9, 2009 at 5:37 PM, Bruce Johnson br...@google.com wrote: I like what jat said. Freeland? On Tue, Jun 9, 2009 at 5:33 PM, j...@google.com wrote: The alternative to this would be Bruce's suggestion of defining a specific fallback value for a selection property rather than using config properties for it. That would narrow the scope to exactly what we know we want to support and simplify the linker changes and avoids the breaking API change for existing linkers (where they have to supply the config properties to avoid breaking, which means the same linker can't work for GWT 1.6 and GWT 2.0). Something like: set-property-fallback name=locale value=default/ and the last set value wins. http://gwt-code-reviews.appspot.com/34832/diff/1/2 File dev/core/src/com/google/gwt/core/ext/linker/impl/SelectionScriptLinker.java (right): http://gwt-code-reviews.appspot.com/34832/diff/1/2#newcode194 Line 194: new TreeSetConfigurationProperty()); It seems like allowing this could cause incorrect behavior. I know it is a tradeoff of not breaking existing code, but if there is a linker which calls this method, any code depending on config property lookup will just break. http://gwt-code-reviews.appspot.com/34832/diff/1/2#newcode223 Line 223: } It looks like we are just substituting the empty string for unknown properties, which is especially bad if the call is relayed through the above method. http://gwt-code-reviews.appspot.com/34832/diff/1/4 File dev/core/src/com/google/gwt/dev/cfg/StaticPropertyOracle.java (right): http://gwt-code-reviews.appspot.com/34832/diff/1/4#newcode149 Line 149: for (String v : prop.getAllowedValues()) { setValues.addAll(cprop.getAllowedValues())? Also, maybe this should be computed in getPossibleValues() instead. http://gwt-code-reviews.appspot.com/34832/diff/1/5 File dev/core/src/com/google/gwt/dev/shell/ModuleSpacePropertyOracle.java (right): http://gwt-code-reviews.appspot.com/34832/diff/1/5#newcode127 Line 127: for (String v : cprop.getAllowedValues()) { setValues.addAll(cprop.getAllowedValues())? Also, maybe this should be computed in getPossibleValues() instead. http://gwt-code-reviews.appspot.com/34832/diff/1/7 File user/src/com/google/gwt/i18n/I18N.gwt.xml (right): http://gwt-code-reviews.appspot.com/34832/diff/1/7#newcode51 Line 51: $wnd['__gwt_Locale'] = locale || '/*-GWTCONFIGPROP(default.locale)-*/'; I think we haven't nailed this down enough that we want anyone else using it and expecting it to keep working. So, I would suggest a comment here to that effect. http://gwt-code-reviews.appspot.com/34832/diff/1/7#newcode55 Line 55: return /*-GWTCONFIGPROP(default.locale)-*/; Since these can all be empty strings, I would suggest storing /*-GWTCONFIGPROP(default.locale)-*/ || 'default
[gwt-contrib] Re: i18n support for concrete default locale
It couldn't have been that easy. Surely someone disagrees? On Tue, Jun 23, 2009 at 11:57 AM, John Tamplin j...@google.com wrote: On Tue, Jun 23, 2009 at 11:52 AM, Freeland Abbott fabb...@google.comwrote: I like the general idea, yes. A complication is that one of the changes John asked for, specific for the i18n provider, was to return */*-FALLBACK-*/ || default*, with the idea that a null/undefined fallback should be gracefully handled, since an invalid locale return is going to break the generators. I'm personally a bit less concerned there (user both overrode the default and also misconfigured = generator should test for and gracefully explain), but in the i18n case we do have a fallback fallback to return, so I said okay. That wouldn't work for chaining, first because you don't always have such a fallback, and second because with a chain you couldn't put the fallback into the provider, and having set-property-fallback-fallback / or set-property-fallback exponent=n ... / is silly. Maybe if null gets all the way beck to the top, just replace it with an empty string, and the i18n code should treat that equivalently to default (it already does in many places). -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] GWTTestCase/JUnit tweak to make mixing TestCase and GWTTestCase easier
Reviewers: scottb, amitmanjhi, Description: This patch treats any GWTTestCase-derived classes that return 'null' from getModuleName() as if they were simply pure Java tests. Why does this matter? Suppose you're writing tests for code that has both a pure Java implementation and a super-sourced version of the same types. Naturally, you want to re-use the same tests for both implementations. With this patch, you can have the common tests extend GWTTestCase but return 'null' from getModuleName(), thus causing the pure Java version of the code to be tested. Then you can create a subclass that actually does return a module name, which causes the same tests to run in a proper GWT environment. Please review this at http://gwt-code-reviews.appspot.com/47804 Affected files: user/src/com/google/gwt/junit/client/GWTTestCase.java user/src/com/google/gwt/junit/tools/GWTTestSuite.java --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: GWTTestCase/JUnit tweak to make mixing TestCase and GWTTestCase easier
Thanks, r5617. On Tue, Jun 23, 2009 at 8:23 PM, amitman...@google.com wrote: LGTM with one inline comment and one design question Is it better to have a special case handling of null or is it better to introduce a default non-null value for this purpose? http://gwt-code-reviews.appspot.com/47804/diff/1/3 File user/src/com/google/gwt/junit/client/GWTTestCase.java (right): http://gwt-code-reviews.appspot.com/47804/diff/1/3#newcode122 Line 122: */ Update the javadoc with the null use case? http://gwt-code-reviews.appspot.com/47804 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: naming runAsync calls
Great writeup. Thanks for bringing some organization to the thread. I agree with you that #1 seems overall best after the analysis. Now can we bikeshed about the annotation name? @RunAsyncName() seems harder to understand than something that says code splitting, such as @SplitPointName(Foo). After all, we do call these things split points. On Mon, Jun 22, 2009 at 5:08 PM, Lex Spoon sp...@google.com wrote: Okay, we now have a suite of options. Does anyone see any particularly strong reason to pick among them? The options I see are: 1. Annotate the surrounding method with something like @RunAsyncName(Foo) 2. Use the fully-qualified method name surrounding the call. 3. Use the fully-qualified type name of the callback object. 4. Use a new parameter to runAsync indicating the name. #2 is what's in trunk right now, but it is quite verbose. I think we shouldn't stick with that unless we can make it more concise. One way to do htat would be to make JSNI references more concise if they refer to a method that isn't overloaded. We could let * be used as the parameter list in that case. As much as I like that idea, it would take a few days to implement, so the opportunity cost would be high. For #3, it's not necessarily unambiguous, as pointed out. Thus, it loses one of the main feature of #2. Additionally, it looks harder to spec to me. We would have to tell people something like: to name a runAsync call, make sure to put the call within a method with at least one argument, and then specify the type of that first argument. Can anyone tighten up that spec and make it competitive? Overall, both #2 and #3 take extra work compared to the others. #2 requires implementation work, and #3 requires at the least some extra working to spec it. #1 and #4 both look good to me, though I admit a slight preference for #1. That slight preference is mainly because it would mean we get to stick with a single GWT.runAsync method in the magic GWT class, which seems better for a few small reasons. That said, we could certaily go that route if there's a reason to prefer it. Thoughts welcome. I still think the annotations (option 1) look good, but don't want to push for that it if will cause some trouble or miss some opportunity. Is there a reason to prefer 4 over 1? Is 2 or 3 worth the extra work, or else, does anyone see how to make 2 or 3 easier to implement? Lex --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: naming runAsync calls
+1 Ian! Great point. Not sure why we didn't think of that before. On Monday, June 22, 2009, Ian Petersen ispet...@gmail.com wrote: On Mon, Jun 22, 2009 at 2:08 PM, Lex Spoonsp...@google.com wrote: The options I see are: 1. Annotate the surrounding method with something like @RunAsyncName(Foo) 2. Use the fully-qualified method name surrounding the call. 3. Use the fully-qualified type name of the callback object. 4. Use a new parameter to runAsync indicating the name. One possible refinement to option 1, since it seems likely to win: put the annotation on the onSuccess rather than on the method that contains the runAsync invocation. Here's what I mean: // ... surrounding code ... GWT.runAsync(new AsyncCallback() { public void onFailure(Throwable caught) { // deal with failure } @SplitPointName(I like Bruce's idea) public void onSuccess() { // deal with success } }); // ... surrounding code ... I'm not sure if it's better or worse, but it seems more flexible than requiring a surrounding method. To be a little bit forgiving to the developer, you could make it a compile-time warning if onFailure is annotated and an error if both onFailure and onSuccess are annotated with different names--it makes the generator code more complex but lets the user be a little bit forgetful. Not sure if that's really necessary, though. Ian --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: naming runAsync calls
A slight tweak to what Ian said: What if we got this effect by simpy requiring you to use interfaces that extend AsyncCallback as a way to reify split points? interface EmailCompositionView extends AsyncCallback { ... } Then you definitely have a fully-qualified name for a split point if you need it: the name of the interface itself. My worry about Ian's proposal is that method overloading complicate things (would you use JSNI-style refs to disambiguate?). And my worry with user-assigned names is that actually may conflict, when you consider that library writers probably will want to ship libraries with split points. Again, using interfaces guarantees we don't introduce a new axis of name conflict. -- Bruce On Fri, Jun 19, 2009 at 11:44 AM, Ian Petersen ispet...@gmail.com wrote: On Fri, Jun 19, 2009 at 8:33 AM, Lex Spoonsp...@google.com wrote: This looks like a straightforward and easily understood way to name calls to runAsync. What do others think? As a brainstorm-quality idea, what about requiring that runAsync invocations are in their own methods (as you mentioned) but not requiring an annotation? Any given method already has a fully qualified name (it's even globally unique within the program) so why introduce yet another name in the annotation? Some compiler magic to make this happen might be a nice-to-have: RunAsyncRef ref = new RunAsyncRef(ClassContainingMethod.class, methodName); You could statically determine that it's valid, use ref as a token to refer to fragments as necessary, and avoid having to specify package.ClassName.methodName because you take advantage of the import statements. Dunno what you'd do with it, of course. Ian --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
Re: Two Questions around flex table sizing and
OK, I hate to answer my own question, but I think I found how to solve question #2 - which more or less solves Question #1 (although if anyone has another technique I'd love to hear about it). So, if anyone else is researching this - here's a solution to maintaining cell sizing after hiding its contents. Performing the following on the cell itself appears to then maintain it's size after the link is hidden. flexTable.getCellFormatter().setWidth( 0, 0, 150); On Thu, Jun 18, 2009 at 4:33 PM, bpetro brucepe...@gmail.com wrote: I'm creating a header which has three columns - the middle of which is the main title. The left is a logout link and the right is an image... Question1: Is there a way to force centering the middle column to the page instead of just within the cell itself? One approach is to ensure the cells on the left and right are equal sizes... is there another solution as well? Working on trying to make two outside cells being equal sizes leads to another question. If I hide the logout link during the login screen - the remaining two cells shift around. Is there a way to hide the contents of a cell but keep its sizing as is? THANKS! --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~--~~~~--~~--~--~---
[gwt-contrib] Re: Changing JsArrayT extends JavaScriptObject to JsArrayT
++ z = x + y you can rename each variable on assignment, yielding the following x1 = 1 y1 = 2 z1 = x1 + y1 x2 = x1 + 1 y2 = y1 + 1 z2 = x2 + y2 This produces an SSA-like form, with each variable defined only once. At first glance, it looks like a de-optimization, but a later pass that does constant folding, copy propagation, and dead elimination will clean this up. As an example, after copy propagation x1 = 1 y1 = 1 z1 = 1 + 2 x2 = 1 + 1 y2 = 2 + 1 z2 = x2 + y2 after constant folding x1 = 1 y1 = 1 z1 = 3 x2 = 2 y2 = 3 z2 = x2 + y2 after DCE (x1/y1/z1 no longer referenced) x2 = 2 y2 = 3 z2 = x2 + y2 after copy prop x2 = 2 y2 = 3 z2 = 2 + 3 after constant fold x2 = 2 y2 = 3 z2 = 5 after DCE z2 = 5 Finally, after renaming registers back to their original names z = 5 A register allocation style pass can further eliminate temporaries later. However, do to proper CFA/DFA, we may want to build a real SSA form, complete with phi functions, so we may do cross-block optimizations. Effects on the Builder Pattern Another recent list discussion concerned optimizing the Builder Pattern. Flattening the AST and using SSA techniques can have a positive effect on this as well. Consider: Builder b = new Builder(); b.setA(10).setB(20).setC(30); After conversion to static methods. setC(setB(setA(b, 10), 20), 30); Flattening/SSA: t1 = setA(b, 10) t2 = setB(t1, 20) t3 = setC(t2, 30) After inlining: b.A = 10; t1 = b; t1.B = 20; t2 = t1 t2.C = 30 t3 = t2 After copy prop: b.A = 10 t1 = b b.B = 20 t2 = b b.C = 30 After dead code elimination: b.A = 10 b.B = 20 b.C = 30 On Tue, Jun 16, 2009 at 6:30 PM, Bruce Johnsonbr...@google.com wrote: Re: Wave access, I was really mostly just being playful, but I'll most certainly beg and plead to get this group early in the line if at all possible. Meanwhile, I agree with Cameron that we should make sure to discuss the major ideas here on the mailing list, even if some of the initial specifics are fleshed out in a wave. I definitely don't want people who don't yet have Wave accounts to feel penalized just because they weren't able to go to I/O. (But if you didn't go to I/O this year, I really hope you can next year -- it's fantastic to meet together in person.) On Tue, Jun 16, 2009 at 9:22 PM, Cameron Braid came...@braid.com.au wrote: Unfortunately I wasn't able to attend Google I/O, however I did watch a few of the sessions online. I signed up for the sandbox, but it appears that google aren't going to grant access to non IO attendees for a little while yet. I'd appreciate an invite, but I understand if that's not feasible. Cheers Cameron 2009/6/17 Ray Cromwell cromwell...@gmail.com Cameron, were you at Google I/O or did you sign up for the sandbox? I can ask a Googler to invite you if not. -Ray On Mon, Jun 15, 2009 at 6:21 PM, Cameron Braid came...@braid.com.au wrote: 2009/6/16 Bruce Johnson br...@google.com I'm starting to make a bit o' progress on this. I'll send out a design doc real soon now. BTW, anyone on the Contributors list here have Wave sandbox accounts? Sure would be easier to discuss this in a wave... No :( But if you are offering invites, send one this way :) Otherwise, its probably wise to keep the discussion in a place where all interested parties can participate. Cam -- Miguel --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Changing JsArrayT extends JavaScriptObject to JsArrayT
On Wed, Jun 17, 2009 at 1:16 PM, Ray Cromwell cromwell...@gmail.com wrote: One of the things that interested me about the potential of building a limited whole-program CFG was the ability to aggressively (and correctly) prune clinits. Now, if the eager clinit hoisting is acceptable, than this would be overkill, but if not, then the way to do it is to compute the immediate dominator hierarchy for each block. I have to think that we should do eager clinit hoisting as a first step and focus on just intraprocedural at first. We can always get better from there. (I will argue in some future thread that up-front clinits is actually the model Java ought to use anyway.) --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Changing JsArrayT extends JavaScriptObject to JsArrayT
On Wed, Jun 17, 2009 at 3:01 PM, Ray Cromwell cromwell...@gmail.com wrote: Bruce, By type cloning, do you mean using typeflow information to compute a set of types for a given reference, and then speculatively type tightening? I'm talking about something else, but you're right about the Will explain more in the bottom section. We can compute the set of potential concrete types for 'list' as {LinkedList, ArrayList}. Therefore, we can inline the call to list.get(n), as: This is what Scott and Lex have been calling something like, set-base type tightening. If someNonInlineableMethod() is only ever reached from blocks where the parameter is ArrayList, then the 'l' parameter can be tightened to ArrayList. You need CFG/flow analysis because methodA(List l) might call methodB(List l) where the chain is only ever invoked with ArrayList. We do a CFG-independent version of what you're talking about. We do tighten parameter types, but only based on the (tightened) types of all the call sites, without regard to control flow. === Type Cloning === What I mean by type cloning is this: for every unique (lexical) occurrence of an allocation of type T, clone T into T' as if it were an independent type, but arrange that T' is indistinguishable from T w.r.t. casts, instanceof, and getClass(). In other words, you could never determine at runtime that the object wasn't actually a genuine T. Now, optimize as normal. To see how this could play out: class BasicListE { private E[] elems; @SuppressWarnings(unchecked) public void add(E elem) { if (elems == null) { elems = (E[]) new Object[] {elem}; } else { E[] newElems = (E[]) new Object[elems.length + 1]; System.arraycopy(elems, 0, newElems, 0, elems.length); newElems[newElems.length - 1] = elem; elems = newElems; } } public int size() { return elems == null ? 0 : elems.length; } public IteratorE iterator() { final int n = size(); return new IteratorE() { private final int i = 0; public boolean hasNext() { return i n; } public E next() { return elems[i]; } public void remove() { // nothing } }; } } // Then in some other code, you could write... void foo() { BasicListString b = new BasicListString(); for (int i = 0, n = b.size(); i n; ++i) { // Removed by dead code elim. } for (String s: b) { // Also removed by dead code elim. } } In the above, b is of type BasicList' (a clone of BasicList that can be independently optimized). Thus, you can see that BasicList' does not have the add() method called, which means that, for this particular use of the type, the 'elems' field will always be null. Consequently, size() can be statically known to return 0. Similarly, the iterator's hasNext() method can be statically shown to always return false in the for/each loop. The key point is that the usage of a type in one context would not affect how the type itself could be optimized in other contexts. As it stands today, we can't do the above optimization if anywhere in the program someone calls BasicList#add(). A great practical example is Widgets firing events. You want widgets to be *able* to fire events *if* someone actually wants to listen to them. In the cases where you can see that there are no listeners to a widget, you'd really like the entirely of the even-firing infrastructur to completely disappear. So, I think it can be a big win. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Changing JsArrayT extends JavaScriptObject to JsArrayT
Stefan, if it's really urgent, I would suggest just forking JsArray into your own project packages for a while. They're simple enough that it won't be much trouble to unfork when something better comes along -- the collections I have in mind for core GWT are a little more ambitious, and so they will inevtiably take longer than you'll want to wait. On Wed, Jun 17, 2009 at 6:37 PM, Stefan Haustein haust...@google.comwrote: On Tue, Jun 16, 2009 at 12:54 AM, Stefan Haustein haust...@google.comwrote: Ray, I think we can improve the class over time -- any reasonable starting point (even without iterators or with non-optimal iterators) would help significantly. Ray, I am blocking on this for other size optimizations. Do you know when you would have some kind of starting point ready to submit? If it is still a while away, I'd like to move ahead with a copy of JsArray that is not limited to JSO content. Stefan Stefan On Sat, Jun 13, 2009 at 4:21 AM, Ray Cromwell cromwell...@gmail.comwrote: BTW, the last proposal is very unsafe with some form of escape analysis since it is unsafe to pass references to classes which reference local scope to other scopes. Another possibility is a form of 'destructuring' of Iterator classes by inlining them completely into local scope vs escape analysis and then forgoing separate construction. A simpler way to maintain for-each with JRE collections without creating objects is to change the way that for-each deals with IterableT when T is a List. The compiler could change: for(T x : foo) { ... } where foo is a ListT into for(int i=0; ifoo.size(); ++i) { T x = foo.get(i); } instead of calling foo.iterator() and using Iterator methods. -Ray On Fri, Jun 12, 2009 at 7:31 PM, Ray Cromwellcromwell...@gmail.com wrote: I'm in the process of some final tweaks on GQuery, so I'll look at how much of my private JSArray class I can move over as a patch. One possibility for avoiding Iterator object creation without using flyweights is to introduce a new Iterator type which contains methods which are parameterized by the collection and which use my Extension Method/Category method JSO trick. public class FastIteratorT extends JavaScriptObject { protected FastIterator() {} public S, T extends ListS FastIteratorS make(TS list) { return (FastIteratorS)(GWT.isScript() ? makeWeb() : makeHosted()); } private final native FastIterator makeWeb() /*-{ return 0; }-*/; private final native FastIterator makeHosted() /*-{ return [0]; }-*/; public final int value() { return GWT.isScript() ? valueWeb() : valueHosted(); } public native int valueWeb() /*-{ return this; }-*/; public native int valueHosted() /*-{ return this[0]; }-*/; public native hasNext(ListT list) { return value() list.size(); } public native T next(ListT list) { return list.get(value()++); // unsure if using value() as rvalue will work here } } then you should be able to write code like ListString foo = getList(); FastIteratorString iter = FastIterator.make(foo); while(iter.hasNext(foo)) { String s = iter.next(foo); } Why doesn't this create any additional objects? Because 'iter'/FastIterator is actually a native JS number/scalar type, and what this is really doing is simulating the addition of hasNext()/next() to the number's prototype. We could dispense with the need for an additional parameter if GWT had a magic method for allocating new local variables/symbols in the local scope. Imagine if writing VariableT x = GWT.createVariable(0); was a magic method that just generated a 'var x = 0' declaration, only it promised to always be inlined and do so in the caller's scope. 'Variable' would be a magic class that never creates fields on the actual object themselves and are pruned/removed at runtime. Then you could have FastIterator impersonate a reference to the underlying ListT, and rewrite hasNext()/next() as: VariableInt x = GWT.createVariableInt(0); public boolean hasNext() { return x.get() this.size(); } public T next() { return this.get(x.get()++); // or x.postIncrement() } this would produce code that would create no additional objects as well as maintain Iterator-like interface. -Ray On Thu, Jun 11, 2009 at 7:25 AM, Stefan Hausteinhaust...@google.com wrote: +1 Ray Could you contribute your implementation(s)? On Thu, Jun 11, 2009 at 12:51 PM, Joel Webber j...@google.com wrote: +1 Ray. Now here's the really tricky question. Is there any way we can take advantage of Javascript's for (x in y) { ... } syntax (and should we, given its spotty performance)? My intuition tells me that the only way we could use it would be through a callback, because there's nothing like .NET generators/yield in Javascript. On Wed, Jun
[gwt-contrib] Re: Reducing noise in GWT compiler output
That would be marvelous. I hadn't thought through the implications of IHM, but it seems like it might solve the problem. What about types that aren't IHM compatible, such as those containing JSNI? Could those still cause spurious errors? On Tue, Jun 16, 2009 at 6:29 PM, Scott Blum sco...@google.com wrote: Instant hosted mode should really change the game, right? We will no longer be speculatively compiling anything for TypeOracle since we'll be using class files that should already exist. On Mon, Jun 15, 2009 at 11:21 PM, John Tamplin j...@google.com wrote: On Mon, Jun 15, 2009 at 11:11 PM, Bruce Johnson br...@google.com wrote: We've known for a while that the GWT compiler is spammy, even at default log levels. There is a reason for this behavior, believe it or not: TypeOracle's JClassType#getSubtypes() call. Because generators can ask for the subtypes of any type, the compiler has to parse essentially everything, not just those types that are statically reachable from a module's entry point(s). We sometimes refer to it as speculative parsing. Overall, the behavior is vitally useful for code generators, especially RPC and I18n, and it's generally useful anytime you need to do something factory-like, where you might have used Class.forName() if it were available. So, I'm not proposing that we change that behavior. The problem is that in the process of speculatively parsing everything on the client source path, inevitably we end up encountering source files that can't actually be meaninfully compiled given the current client source path and other various reasons for mismatches. It can happen when you have more than one module.gwt.xml in the same location with different sets of inherited modules. We ought to find a way to keep quieter about problems we find during that speculative parse. We want to *not* spam the log when the source file was found speculatively but definitely still report errors when they really are relevant to getting a clean compile. This isn't as simple as it might sound. It isn't just a how do we code it question. Imagine you have a GWT module that needs RPC. Because RPC can use polymorphism, you might have an RPC method whose return type is Shape (vs. concrete subtypes Circle, Square, Triangle). This is handled magically in the GWT RPC generator because it can see those subtypes of Shape and quietly generate deserializers in the generated RPC proxy. The tricky bit is when Circle.java has a syntax error, say. The type Circle won't be found as a subtype of Shape in the type oracle, so the GWT RPC generator won't know to emit a deserializer for it. (To be precise, it won't even know that it *ought* to try to do so.) We have a choice: either we emit a string of non-fatal errors regarding the failure to parse Circle.java or we don't. If we do, we get the spam we hate today, but at least we've informed the developer that something fishy may happen, since it wasn't a perfectly clean compile. If we don't emit such errors, then a module will quietly appear to compile, even when there are compilation problems that might affect the intended behavior (in this case, when a server responds to the client with a Circle object, the client won't know how to deserialize it). All that said, I don't think it will be big a problem in practice if we log less and risk the kind of surprise failure I described with something like RPC. After all, javac (or your IDE) would complain about Cirlce.java not compiling anyway, so the only real failure mode happens if you *only* compile with the GWT compiler -- and that seems pretty unlikely, especially if you're working in an IDE. Here's a proposal for the new behavior. When the GWT compile invokes JDT to do the front-end compile, capture the errors in an in-memory data structure (keyed by type name?) but do not log them right away. After the JDT front-end compile settles, create a set of known statically reachable types from the entry point classes (the entry point classes are reachable from themselves by definition). Only log errors on compilation unit in that set of dependencies, and do not log errors in an other case. Anybody see any problems with this idea? I think this would omit log messages that make you say, What on earth does NumberFormat_fr_Test.java have to do with my compiling Hello.java? How does that fit with instant hosted mode? -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Comment on OverlayTypes in google-web-toolkit
+1 to field overlays. Just need to schedule the work. On Mon, Jun 15, 2009 at 9:23 AM, BobV b...@google.com wrote: On Mon, Jun 15, 2009 at 7:26 AM, Joel Webberj...@google.com wrote: I'm assuming we'd have to rewrite new and field access operators to these classes in the hosted-mode classloader, right? I haven't messed with the hosted-mode classloader in a *very* long time, so we may be doing this already for all I know. If that's feasible, this sounds like it would be pretty useful. In particular, it seems that it would be particularly nice for JSON overlays. Rewriting get/setField opcodes to call into JsValueGlue wouldn't be any harder than anything else HostedModeRewriter currently does. -- Bob Vawter Google Web Toolkit Team --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Changing JsArrayT extends JavaScriptObject to JsArrayT
I'm starting to make a bit o' progress on this. I'll send out a design doc real soon now. BTW, anyone on the Contributors list here have Wave sandbox accounts? Sure would be easier to discuss this in a wave... On Mon, Jun 15, 2009 at 7:54 PM, Stefan Haustein haust...@google.comwrote: Ray, I think we can improve the class over time -- any reasonable starting point (even without iterators or with non-optimal iterators) would help significantly. Stefan On Sat, Jun 13, 2009 at 4:21 AM, Ray Cromwell cromwell...@gmail.comwrote: BTW, the last proposal is very unsafe with some form of escape analysis since it is unsafe to pass references to classes which reference local scope to other scopes. Another possibility is a form of 'destructuring' of Iterator classes by inlining them completely into local scope vs escape analysis and then forgoing separate construction. A simpler way to maintain for-each with JRE collections without creating objects is to change the way that for-each deals with IterableT when T is a List. The compiler could change: for(T x : foo) { ... } where foo is a ListT into for(int i=0; ifoo.size(); ++i) { T x = foo.get(i); } instead of calling foo.iterator() and using Iterator methods. -Ray On Fri, Jun 12, 2009 at 7:31 PM, Ray Cromwellcromwell...@gmail.com wrote: I'm in the process of some final tweaks on GQuery, so I'll look at how much of my private JSArray class I can move over as a patch. One possibility for avoiding Iterator object creation without using flyweights is to introduce a new Iterator type which contains methods which are parameterized by the collection and which use my Extension Method/Category method JSO trick. public class FastIteratorT extends JavaScriptObject { protected FastIterator() {} public S, T extends ListS FastIteratorS make(TS list) { return (FastIteratorS)(GWT.isScript() ? makeWeb() : makeHosted()); } private final native FastIterator makeWeb() /*-{ return 0; }-*/; private final native FastIterator makeHosted() /*-{ return [0]; }-*/; public final int value() { return GWT.isScript() ? valueWeb() : valueHosted(); } public native int valueWeb() /*-{ return this; }-*/; public native int valueHosted() /*-{ return this[0]; }-*/; public native hasNext(ListT list) { return value() list.size(); } public native T next(ListT list) { return list.get(value()++); // unsure if using value() as rvalue will work here } } then you should be able to write code like ListString foo = getList(); FastIteratorString iter = FastIterator.make(foo); while(iter.hasNext(foo)) { String s = iter.next(foo); } Why doesn't this create any additional objects? Because 'iter'/FastIterator is actually a native JS number/scalar type, and what this is really doing is simulating the addition of hasNext()/next() to the number's prototype. We could dispense with the need for an additional parameter if GWT had a magic method for allocating new local variables/symbols in the local scope. Imagine if writing VariableT x = GWT.createVariable(0); was a magic method that just generated a 'var x = 0' declaration, only it promised to always be inlined and do so in the caller's scope. 'Variable' would be a magic class that never creates fields on the actual object themselves and are pruned/removed at runtime. Then you could have FastIterator impersonate a reference to the underlying ListT, and rewrite hasNext()/next() as: VariableInt x = GWT.createVariableInt(0); public boolean hasNext() { return x.get() this.size(); } public T next() { return this.get(x.get()++); // or x.postIncrement() } this would produce code that would create no additional objects as well as maintain Iterator-like interface. -Ray On Thu, Jun 11, 2009 at 7:25 AM, Stefan Hausteinhaust...@google.com wrote: +1 Ray Could you contribute your implementation(s)? On Thu, Jun 11, 2009 at 12:51 PM, Joel Webber j...@google.com wrote: +1 Ray. Now here's the really tricky question. Is there any way we can take advantage of Javascript's for (x in y) { ... } syntax (and should we, given its spotty performance)? My intuition tells me that the only way we could use it would be through a callback, because there's nothing like .NET generators/yield in Javascript. On Wed, Jun 10, 2009 at 7:26 PM, Ray Cromwell cromwell...@gmail.com wrote: My take on this is that there is many places where I'd like to avoid JRE collections, but the basic JsArray is too much of a downgrade. I don't mind changing it to T if it doesn't effect performance cause then I could subclass it, but as an example of the stuff I would like in a 'FastArrayList' that is not a collections derivative: 1) add() instead of just set(length(), item) (e.g. push) 2)
[gwt-contrib] Reducing noise in GWT compiler output
We've known for a while that the GWT compiler is spammy, even at default log levels. There is a reason for this behavior, believe it or not: TypeOracle's JClassType#getSubtypes() call. Because generators can ask for the subtypes of any type, the compiler has to parse essentially everything, not just those types that are statically reachable from a module's entry point(s). We sometimes refer to it as speculative parsing. Overall, the behavior is vitally useful for code generators, especially RPC and I18n, and it's generally useful anytime you need to do something factory-like, where you might have used Class.forName() if it were available. So, I'm not proposing that we change that behavior. The problem is that in the process of speculatively parsing everything on the client source path, inevitably we end up encountering source files that can't actually be meaninfully compiled given the current client source path and other various reasons for mismatches. It can happen when you have more than one module.gwt.xml in the same location with different sets of inherited modules. We ought to find a way to keep quieter about problems we find during that speculative parse. We want to *not* spam the log when the source file was found speculatively but definitely still report errors when they really are relevant to getting a clean compile. This isn't as simple as it might sound. It isn't just a how do we code it question. Imagine you have a GWT module that needs RPC. Because RPC can use polymorphism, you might have an RPC method whose return type is Shape (vs. concrete subtypes Circle, Square, Triangle). This is handled magically in the GWT RPC generator because it can see those subtypes of Shape and quietly generate deserializers in the generated RPC proxy. The tricky bit is when Circle.java has a syntax error, say. The type Circle won't be found as a subtype of Shape in the type oracle, so the GWT RPC generator won't know to emit a deserializer for it. (To be precise, it won't even know that it *ought* to try to do so.) We have a choice: either we emit a string of non-fatal errors regarding the failure to parse Circle.java or we don't. If we do, we get the spam we hate today, but at least we've informed the developer that something fishy may happen, since it wasn't a perfectly clean compile. If we don't emit such errors, then a module will quietly appear to compile, even when there are compilation problems that might affect the intended behavior (in this case, when a server responds to the client with a Circle object, the client won't know how to deserialize it). All that said, I don't think it will be big a problem in practice if we log less and risk the kind of surprise failure I described with something like RPC. After all, javac (or your IDE) would complain about Cirlce.java not compiling anyway, so the only real failure mode happens if you *only* compile with the GWT compiler -- and that seems pretty unlikely, especially if you're working in an IDE. Here's a proposal for the new behavior. When the GWT compile invokes JDT to do the front-end compile, capture the errors in an in-memory data structure (keyed by type name?) but do not log them right away. After the JDT front-end compile settles, create a set of known statically reachable types from the entry point classes (the entry point classes are reachable from themselves by definition). Only log errors on compilation unit in that set of dependencies, and do not log errors in an other case. Anybody see any problems with this idea? I think this would omit log messages that make you say, What on earth does NumberFormat_fr_Test.java have to do with my compiling Hello.java? -- Bruce --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: DockLayoutPanel
No, it's not checked in yet, but I think Joel might started a branch to land it before t long. It isn't literally the same code as in Wave, but it's logically equivalent. Joel can say a lot more about it than me. On Thu, Jun 11, 2009 at 5:36 PM, dflorey daniel.flo...@gmail.com wrote: Is the DockLayoutPanel presented at Google IO already in svn? The one that is being used by the wave client? I've not been able to find it... --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Moving PagingScrollTable Friends to Trunk
I'll be the bad guy and try to lower expectations: whatever we end up doing, it has to be fast. We've seen some *horrible* usability problems with fancy tables -- even at a small number of rows -- and so don't be surprised if we have to pare back features and reduce API flexibility to ensure that a few key use cases are sufficiently high performance. -- Bruce On Tue, Jun 9, 2009 at 10:12 AM, John LaBanca jlaba...@google.com wrote: We'll definitely keep these things in mind when moving stuff over to GWT trunk. We've also found a lot of general usability problems, such as the fact the the table doesn't layout naturally, which means apps require active layout. During the transfer, we'll refactor quite a few things to make them more usable. Specifically, we'd like to provide a version that allows you to bulk renderer the header and footer into the same table element, eliminated the three separate tables and fixed layout. You would lose the scrolling feature, but you would not have to use active layout. When we start moving stuff into trunk or while its in my branch (as in right now), thats a good time to point out specific problems or requests. Its much harder to change the API after we make an official release. Thanks, John LaBanca jlaba...@google.com On Tue, Jun 9, 2009 at 5:01 AM, David david.no...@gmail.com wrote: Jay, We are experiencing the same ideas here. We store column ordering and widths on the server but we have no way of getting events in the UI to know when changes have been complete. wouldn't it be nice that the dnd was included as well, I could really use the DND of columns! Was it hard to implement ? We did not yet bother to investigate since we have to focus on getting functionality complete first. David On Tue, Jun 9, 2009 at 10:00 AM, jayjay.gin...@gmail.com wrote: As I see that this has begun (yeah), I'd like to throw out a few requests: * Please, please, please -- ensure that this is as extensible as possible. Here's just one example--I've integrated the gwt-dnd library to allow drag-n-drop re-ordering of columns. There are a couple of funny corner cases, though, because I have no way of knowing when a column resize has completed. Obviously, if you're resizing the column, you're not interested in dragging it to a new location. I strongly encourage you to think three, four, five times about making a method private or package protected. Liberal use of JavaDoc with strongly worded warnings to those of us who need to customize the widgets. I know this cuts down on your ability to make under-the-cover changes from release to release, but it makes it so that folks like me don't have to resort to things like JSNI trickery or copying the entire class or set of classes into our own code base. * As a direct follow up to #1, fire some more events. For example, fire an event when a column resize starts and when it ends. * Flexibility is great, but often I'm just interested in the simple cases...simple. My example here is the multiple-row header stuff. It's GREAT! I LOVE it! (And better yet, our customers have been screaming for this!) But, I don't always need/want it. And, it can make things more complex. One idea would be to overload methods like getHeader() on AbstractColumnDefinition...add a version that doesn't take a 'row' parameter, and so just assumes there's only 1 row. * More use of generics, less casting (for me). Some examples: o AbstractColumnDefinition returns Object for the getHeader() method. Why not declare this as class AbstractColumnDefinitionRowType, ColType, HeaderType? o Rather than: public TableDefinitionRowType getTableDefinition (), how about adding a TABLE_DEFINITION type to the class (e.g., class PagingScrollTableTABLE_DEFINITION extends TableDefinitionRowType, so that the method could be declared as public TABLE_DEFINITION getTableDefinition()? I apologize if I'm being overly simplistic or if I'm asking too much. I definitely apologize for not following up my suggestions with proposed patches. And I sincerely hope that my suggestions are taken only as the most positive form of feedback possible. I LOVE GWT. We've bet our company on the fact that GWT is *the* best way for writing the kind of interactive and rich apps our users are demanding. I want to do whatever I can (with my limited time outside of my job) to help make this toolkit even better. Thanks! jay --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: HashMap Optimization: return null for put and remove
Yes, please do create an issue for it, and reply to this thread with the issue id. On Tue, Jun 9, 2009 at 11:21 AM, Damon Lundin damon.lun...@gmail.comwrote: I don't expect this to necessarily be done any time soon, but is there anything I need to do to make sure that it doesn't get lost? Should I file a feature request? --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: i18n support for concrete default locale
I like what jat said. Freeland? On Tue, Jun 9, 2009 at 5:33 PM, j...@google.com wrote: The alternative to this would be Bruce's suggestion of defining a specific fallback value for a selection property rather than using config properties for it. That would narrow the scope to exactly what we know we want to support and simplify the linker changes and avoids the breaking API change for existing linkers (where they have to supply the config properties to avoid breaking, which means the same linker can't work for GWT 1.6 and GWT 2.0). Something like: set-property-fallback name=locale value=default/ and the last set value wins. http://gwt-code-reviews.appspot.com/34832/diff/1/2 File dev/core/src/com/google/gwt/core/ext/linker/impl/SelectionScriptLinker.java (right): http://gwt-code-reviews.appspot.com/34832/diff/1/2#newcode194 Line 194: new TreeSetConfigurationProperty()); It seems like allowing this could cause incorrect behavior. I know it is a tradeoff of not breaking existing code, but if there is a linker which calls this method, any code depending on config property lookup will just break. http://gwt-code-reviews.appspot.com/34832/diff/1/2#newcode223 Line 223: } It looks like we are just substituting the empty string for unknown properties, which is especially bad if the call is relayed through the above method. http://gwt-code-reviews.appspot.com/34832/diff/1/4 File dev/core/src/com/google/gwt/dev/cfg/StaticPropertyOracle.java (right): http://gwt-code-reviews.appspot.com/34832/diff/1/4#newcode149 Line 149: for (String v : prop.getAllowedValues()) { setValues.addAll(cprop.getAllowedValues())? Also, maybe this should be computed in getPossibleValues() instead. http://gwt-code-reviews.appspot.com/34832/diff/1/5 File dev/core/src/com/google/gwt/dev/shell/ModuleSpacePropertyOracle.java (right): http://gwt-code-reviews.appspot.com/34832/diff/1/5#newcode127 Line 127: for (String v : cprop.getAllowedValues()) { setValues.addAll(cprop.getAllowedValues())? Also, maybe this should be computed in getPossibleValues() instead. http://gwt-code-reviews.appspot.com/34832/diff/1/7 File user/src/com/google/gwt/i18n/I18N.gwt.xml (right): http://gwt-code-reviews.appspot.com/34832/diff/1/7#newcode51 Line 51: $wnd['__gwt_Locale'] = locale || '/*-GWTCONFIGPROP(default.locale)-*/'; I think we haven't nailed this down enough that we want anyone else using it and expecting it to keep working. So, I would suggest a comment here to that effect. http://gwt-code-reviews.appspot.com/34832/diff/1/7#newcode55 Line 55: return /*-GWTCONFIGPROP(default.locale)-*/; Since these can all be empty strings, I would suggest storing /*-GWTCONFIGPROP(default.locale)-*/ || 'default' in a variable and reusing that. Things will fall over if the property provider returns a value that is not valid. http://gwt-code-reviews.appspot.com/34832/diff/1/8 File user/src/com/google/gwt/i18n/rebind/AbstractLocalizableImplCreator.java (right): http://gwt-code-reviews.appspot.com/34832/diff/1/8#newcode136 Line 136: logger.log(Type.WARN, default.locale has more than one value, using Is this even possible since the config property definition says it isn't multivalued? http://gwt-code-reviews.appspot.com/34832 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Changing JsArrayT extends JavaScriptObject to JsArrayT
Please also look at the compiled JS. I think the less restrictive bound will cause the compiler to generate worse code (e.g. dynamic casts in some or all contexts) which would make it a non-starter. On Mon, Jun 8, 2009 at 6:22 PM, Stefan Haustein haust...@google.com wrote: Hi, I'd like to submit a patch (see below) that changes JsArrayT extends JavaScriptObject to JsArrayT Motivation: Support more lightweight code in places where we depend on Javascript anyway. In particular, I would like to remove the dependency on LinkedList in AsyncFragmentLoader in a follow-up change. I have verified that this change does not introduce any new test failures. Stefan Index: user/src/com/google/gwt/core/client/JsArray.java === --- user/src/com/google/gwt/core/client/JsArray.java(revision 5522) +++ user/src/com/google/gwt/core/client/JsArray.java(working copy) @@ -34,7 +34,7 @@ * * @param T the concrete type of object contained in this array */ -public class JsArrayT extends JavaScriptObject extends JavaScriptObject { +public class JsArrayT extends JavaScriptObject { protected JsArray() { } -- Stefan Haustein Google UK Limited Registered Office: Belgrave House, 76 Buckingham Palace Road, London SW1W 9TQ; Registered in England Number: 3977902 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Changing JsArrayT extends JavaScriptObject to JsArrayT
What you describe, Ray, is definitely going to happen. It has to. I have begun a design doc for that very thing. I'll float it for comments as soon as I'm finished with the first draft. On Mon, Jun 8, 2009 at 8:02 PM, Ray Cromwell cromwell...@gmail.com wrote: In particular, I use my own JsArray/JsMap implementation to avoid JRE collections in GQuery. Perhaps rather than patching JsArray, there should just be something like FastArrayList and FastMap which do not implement JRE Collections, but are nothing more than wrappers around JS arrays and objects for storing arbitrary Java objects. I suspect this is what motivates the patch? -Ray On Tue, Jun 9, 2009 at 8:16 AM, John Tamplinj...@google.com wrote: On Mon, Jun 8, 2009 at 6:22 PM, Stefan Haustein haust...@google.com wrote: I'd like to submit a patch (see below) that changes JsArrayT extends JavaScriptObject to JsArrayT Motivation: Support more lightweight code in places where we depend on Javascript anyway. In particular, I would like to remove the dependency on LinkedList in AsyncFragmentLoader in a follow-up change. I have verified that this change does not introduce any new test failures. What does it mean to store non-JS values in a pure JS array? What sort of things do you want to store that aren't JSO's but would reasonably work? -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: slow startup of hosted mode
Sounds like an easy patch waiting to be made? Takers? On Fri, Jun 5, 2009 at 12:21 PM, Freeland Abbott fabb...@google.com wrote: Since we later use outFile.setLastModified(artifact.getLastModified()), thus ensuring equality, yeah, that = is wrong On Fri, Jun 5, 2009 at 9:45 AM, Joel Webber j...@google.com wrote: Agreed, this comparison looks wrong, though it's not immediately obvious to me how this affects hosted-mode startup (linking the compiled output, I could see being affected). @bob, scott: Any thoughts on this? On Fri, Jun 5, 2009 at 8:14 AM, Sanjiv Jivan sanjiv.ji...@gmail.comwrote: Hi, Some of the users of SmartGWT have reported slow startup in hosted mode. A user narrowed down the problem to the following call in StandardLinkerContext. outFile.lastModified() = artifact.getLastModified() When changed to outFile.lastModified() artifact.getLastModified(), the startup is normal. http://code.google.com/p/google-web-toolkit/issues/detail?id=3700 Can you guys comment on whether this is a valid change? One other thing that I noticed was that when I moved the resources (skin images) from the public path of my main module (SmartGwt), to a secondary module (SmartGwtXXXSkin), and the user is required to inherit both these modules, the hosted mode startup slowed down a fair bit compared to when he inherited only one module that also had the skins resources. Does this ring a bell? If not, I'll try to dig a little deeper into this and provide more information. Thanks, Sanjiv --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: A big GWT splash made by Wave
Hi Gary, We're happy to share both of those. In fact, neither one of those is really considered proprietary; it's more just that they aren't really generalized properly for widespread use. We'll put them in trunk as soon as time allows (which is likely on the order of weeks at a minimum). On Thu, Jun 4, 2009 at 11:34 PM, Gary Miller miller.ga...@gmail.com wrote: Hey All Now that the outside world has been give a peek at how Google is using GWT ... http://code.google.com/events/io/sessions/GoogleWavePoweredByGWT.html I was wondering if / when some of the propriety stuff might be made available to the outside world e.g. - Declarative UI / UiBinder - Server-side script selection - My applause to the GWT team from their involvement in Wave. Regards Gary --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
Re: GWT Compile error
I do have this class (com.extjs.gxt.ui.client.data.BeanModelLookup) in my classpath. any idea? On Apr 19, 4:25 pm, Salvador Diaz diaz.salva...@gmail.com wrote: If you read the whole stacktrace you'll see that there are other errors: Scanning for additional dependencies: jar:file:/D:/Program%20Files/ gxt-2.0-m1/gxt.jar!/com/extjs/gxt/ui/client/data/BeanModelLookup.java Computing all possible rebind results for 'com.extjs.gxt.ui.client.data.BeanModelLookup' Rebinding com.extjs.gxt.ui.client.data.BeanModelLookup Invoking generate-with class='com.extjs.gxt.ui.rebind.core.BeanModelGenerator'/ [ERROR] Class com.extjs.gxt.ui.client.data.BeanModelLookup not found. It looks like it's a problem with your module declarations but without more details I can't be sure. Cheers, Salvador On Apr 18, 1:22 pm, bruce bruce.gao@gmail.com wrote: when I try compile a sample of Extjs-GWT. it hit the follow exception. but I have the missing class com.pipnet.resources.client.model.Customer in the same project. anybody can tell me why? thanks a lot Compiling module com.pipnet.desktop.Desktop Refreshing module from source Refreshing TypeOracle Processing types in compilation unit: file:/C:/Documents%20and %20Settings/bruce.gao/workspace_3.4/Desktop/src/com/pipnet/resources/ client/model/CustomerBeanModel.java Found type 'CustomerBeanModel' Resolving annotation '@BEAN (com.pipnet.resources.client.model.Customer.class)' [ERROR] java.lang.ClassNotFoundException: com.pipnet.resources.client.model.Customer at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:242) at com.google.gwt.dev.javac.TypeOracleMediator.getClassLiteral (TypeOracleMediator.java:763) at com.google.gwt.dev.javac.TypeOracleMediator.getAnnotationElementValue (TypeOracleMediator.java:674) at com.google.gwt.dev.javac.TypeOracleMediator.createAnnotationInstance (TypeOracleMediator.java:442) at com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotation (TypeOracleMediator.java:836) at com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotations (TypeOracleMediator.java:857) at com.google.gwt.dev.javac.TypeOracleMediator.resolveTypeDeclaration (TypeOracleMediator.java:1384) at com.google.gwt.dev.javac.TypeOracleMediator.addNewUnits (TypeOracleMediator.java:389) at com.google.gwt.dev.javac.TypeOracleMediator.refresh (TypeOracleMediator.java:417) at com.google.gwt.dev.javac.CompilationState.refresh (CompilationState.java:179) at com.google.gwt.dev.javac.CompilationState.init (CompilationState.java:93) at com.google.gwt.dev.cfg.ModuleDef.getCompilationState (ModuleDef.java:264) at com.google.gwt.dev.Precompile.precompile(Precompile.java:283) at com.google.gwt.dev.Compiler.run(Compiler.java:170) at com.google.gwt.dev.Compiler$1.run(Compiler.java:124) at com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java: 84) at com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger (CompileTaskRunner.java:78) at com.google.gwt.dev.Compiler.main(Compiler.java:131) Scanning for additional dependencies: jar:file:/D:/Program%20Files/ gxt-2.0-m1/gxt.jar!/com/extjs/gxt/ui/client/data/BeanModelLookup.java Computing all possible rebind results for 'com.extjs.gxt.ui.client.data.BeanModelLookup' Rebinding com.extjs.gxt.ui.client.data.BeanModelLookup Invoking generate-with class='com.extjs.gxt.ui.rebind.core.BeanModelGenerator'/ [ERROR] Class com.extjs.gxt.ui.client.data.BeanModelLookup not found. java.lang.NullPointerException at com.extjs.gxt.ui.rebind.core.BeanModelGenerator.getMarkerBean (BeanModelGenerator.java:170) at com.extjs.gxt.ui.rebind.core.BeanModelGenerator.generate (BeanModelGenerator.java:53) at com.google.gwt.dev.cfg.RuleGenerateWith.realize (RuleGenerateWith.java:49) at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.tryRebind (StandardRebindOracle.java:113) at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind (StandardRebindOracle.java:62) at com.google.gwt.dev.shell.StandardRebindOracle.rebind
[gwt-contrib] Re: Speedups for -soyc compilation
Any numbers on the amount of improvement? On Tue, May 26, 2009 at 11:04 AM, r...@google.com wrote: Reviewers: spoon, kprobst, scottb, Description: This patch incorporates Kathrin's StringBuilder work along with other miscellaneous speedups found by using JProfiler. Please review this at http://gwt-code-reviews.appspot.com/34818 Affected files: dev/core/src/com/google/gwt/core/ext/soyc/Range.java dev/core/src/com/google/gwt/core/ext/soyc/Story.java dev/core/src/com/google/gwt/core/ext/soyc/impl/DependencyRecorder.java dev/core/src/com/google/gwt/core/ext/soyc/impl/StandardClassMember.java dev/core/src/com/google/gwt/core/ext/soyc/impl/StoryImpl.java dev/core/src/com/google/gwt/core/ext/soyc/impl/StoryRecorder.java dev/core/src/com/google/gwt/dev/CompilePerms.java dev/core/src/com/google/gwt/dev/jjs/CorrelationFactory.java dev/core/src/com/google/gwt/dev/jjs/InternalCompilerException.java dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java dev/core/src/com/google/gwt/dev/jjs/SourceInfo.java dev/core/src/com/google/gwt/dev/jjs/SourceInfoCorrelation.java dev/core/src/com/google/gwt/dev/jjs/SourceOrigin.java dev/core/src/com/google/gwt/dev/jjs/ast/JField.java dev/core/src/com/google/gwt/dev/jjs/ast/JModVisitor.java dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java dev/core/src/com/google/gwt/dev/jjs/ast/JTypeOracle.java dev/core/src/com/google/gwt/dev/jjs/impl/ArrayNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/AssertionNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/AssertionRemover.java dev/core/src/com/google/gwt/dev/jjs/impl/CastNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/CatchBlockNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/CodeSplitter.java dev/core/src/com/google/gwt/dev/jjs/impl/CompoundAssignmentNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/ControlFlowAnalyzer.java dev/core/src/com/google/gwt/dev/jjs/impl/DeadCodeElimination.java dev/core/src/com/google/gwt/dev/jjs/impl/EqualityNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/Finalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/FragmentExtractor.java dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java dev/core/src/com/google/gwt/dev/jjs/impl/JavaScriptObjectNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/JsoDevirtualizer.java dev/core/src/com/google/gwt/dev/jjs/impl/LongCastNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/LongEmulationNormalizer.java dev/core/src/com/google/gwt/dev/jjs/impl/MakeCallsStatic.java dev/core/src/com/google/gwt/dev/jjs/impl/MethodCallTightener.java dev/core/src/com/google/gwt/dev/jjs/impl/MethodInliner.java dev/core/src/com/google/gwt/dev/jjs/impl/Pruner.java dev/core/src/com/google/gwt/dev/jjs/impl/RecordRebinds.java dev/core/src/com/google/gwt/dev/jjs/impl/ReplaceRebinds.java dev/core/src/com/google/gwt/dev/jjs/impl/ReplaceRunAsyncs.java dev/core/src/com/google/gwt/dev/jjs/impl/ResolveRebinds.java dev/core/src/com/google/gwt/dev/jjs/impl/TypeTightener.java --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
Re: Cannot iterate HashSet
The difference is in how your string is created. I would make a guess that getValue() returns null at some point and the call to toString() generates a NPE type error in javascript. Concatenation like in your second snippet, will create a new string and concatenate the return of getValue(). Null is okay to concatenate. To verify, do a check for null or look for null in your output. On May 24, 8:05 am, Yulia yuli...@gmail.com wrote: After all day beating my head against the keybord I found where the problem was. I reverted all changes to stable version and statrted to add code bit by bit and noticed that after changes in AttributeValue.toString() method my program started to fail again. This code doesn't work: @Override public String toString() { return getValue().toString(); } But this code works: @Override public String toString() { return +getValue(); } But it should be the same... Maybe I misunderstand something, can somebody explain me the difference? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~--~~~~--~~--~--~---
[gwt-contrib] Re: Fix for issue 3649 (parallel script loading in iframe liner)
candidate for 1.6.5? On Thursday, May 14, 2009, knor...@google.com wrote: LGTM++ A few new spacing issues showed up. It could be tabs. http://gwt-code-reviews.appspot.com/33808/diff/1005/1007 File dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js (right): http://gwt-code-reviews.appspot.com/33808/diff/1005/1007#newcode47 Line 47: // The frame that will contain the compiled script (created in There's some weird extra spacing here. http://gwt-code-reviews.appspot.com/33808/diff/1005/1007#newcode322 Line 322: scriptFrame.id = '__MODULE_NAME__'; More weird spacing. http://gwt-code-reviews.appspot.com/33808/diff/1005/1007#newcode359 Line 359: // Mark this module's script as done loading and (possibly) start the Is there extra space at the end of this line? http://gwt-code-reviews.appspot.com/33808 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: GWT String's hashCode is not random enough
It's worth mentioning that, while this algorithm is surely a lot slower than before, it won't slow down HashMap, which already has a fast-path for string keys that does not actually use hashCode(). On Thu, May 14, 2009 at 8:33 PM, amitman...@google.com wrote: LGTM except the simple changes for the test code. Once everyone has weighed in and the patch is ready to go in, I volunteer to commit it on your behalf. Thanks for the patch! http://gwt-code-reviews.appspot.com/34811/diff/1/3 File user/super/com/google/gwt/emul/java/lang/String.java (right): http://gwt-code-reviews.appspot.com/34811/diff/1/3#newcode134 Line 134: } LGTM++ http://gwt-code-reviews.appspot.com/34811/diff/1/2 File user/test/com/google/gwt/emultest/java/lang/StringTest.java (right): http://gwt-code-reviews.appspot.com/34811/diff/1/2#newcode218 Line 218: int[] savedHash = new int[testStrings.length]; LGTM except 2 minor comments: (i) formatting of the line with int[] javaHashes is not consistent with what we follow for Gwt. (ii) You can rewrite this function to get rid of the savedHash array. http://gwt-code-reviews.appspot.com/34811 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Incubator Questions
We do expect to start moving a cluster of the most popular widgets from the incubator into the GWT trunk this quarter, so things like the paging table, etc. will almost certainly be in the next GWT major release. On Fri, May 1, 2009 at 1:53 AM, Gilles B gilles.broch...@gmail.com wrote: I am currently using gen2 tables. It's realy a good stuff and this part realy miss in GWT widgets with paging (or not), columns sort and such cool mechanisms. I have tried other tables implementations but this one is not so big and work fine for me. As example, Smart GWT offers a realy good and more beautifull component but I doesn't want to include such full framework implying some js library extra dependance (half commercial). The gwt as a toolkit approach seems better and its avoid the big library syndrom (Including hundred of script, css, resources, javacode in your app if you only want a single component) As 1.6 only provide an additionnal calendar I was a little bit disappointed expected more widgets in this version. Is there a plan to add such widgets in future releases or is it a choice to provide a basic set and opening the field to third party libraries ? --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Feature idea
It seems like the general functionality (i.e. GWT.isLiteral()) ought to be implemented at the same time as method cloning. That's what makes me excited about the whole thing. Otherwise, at least for me, it's hard to wrap my head around how you could usefully emit different code for the same method for different call sites. Maybe I'm missing something. A similar but related concept that I think would be the best first step is a parameter annotation called @MustBeLiteral. Then any method could become a GWT.create() indirectly because you'd be able to write: public T T myFactory(@MustBeLiteral Class? extends T classLit) { T t = GWT.create(classLit); // do some stuff to tweak the t instance return t; } That seems way useful and perhaps the easiest of everything to implement. On Mon, Apr 27, 2009 at 9:30 AM, Joel Webber j...@google.com wrote: Cool, I had no idea GCC provided that information. I won't claim to be one of the compiler gurus, but this sounds pretty feasible to me, and to Ray's point, might be a useful way of loosening the GWT.create() magic a bit. @Lex, Scott: What do you think? Is this relatively easy and useful? On Mon, Apr 27, 2009 at 4:49 AM, Vitali Lovich vlov...@gmail.com wrote: Yeah, probably from a compiler's perspective, the value check may be more complicated (the value may only be available after the AST stage depending on when optimization is done) It can possibly bloat the resultant code (since I believe you may have to build different implementations of each function and you may get overhead, even if you inline). However, I think this might be an OK tradeoff since the assumption would be that you are optimizing for speed as opposed to size if you use something like GWT.isLiteral. On Mon, Apr 27, 2009 at 3:45 AM, Ray Cromwell cromwell...@gmail.comwrote: +1 I suggested a similar feature a few days ago privately, I called it GWT.isLiteral(), since the underlying check is if its an AST literal in the compiler, although in my example, you can't do value comparisons, just assertions on the literal. The value checks would be done via traditional operators. On Mon, Apr 27, 2009 at 12:33 AM, Vitali Lovich vlov...@gmail.com wrote: Kinda like with GCC, allow detection of constant values (i.e. __builtin_constant_p). This way, you could do something like void addParameter (HashMap h, int size, String key, Object value) { if (GWT.isConstantValue(h, null)) { if (GWT.isConstantValue(size, 0)) size = 10; h = new HashMap(size); } h.put(key, value). } you could have the performance of void addParameter (HashMap h?, int size?, String key, Object value) as if you wrote overloaded methods without needing to write several different methods that just supply default values back forth. Sometimes, it's also possible to use a better algorithm if parameters have a known constant value. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] RR: Design doc for multi-valued configuration properties
Hi GWT community, At a recent meeting intended to be a discussion of how to design blacklist support for RPC, we realized that we wanted to make some changes to the new set-configuration-property module XML support. It ended up becaming a prerequisite to continuing with RPC blacklist support. In an effort to get these changes made quickly so that we can get on with blacklist support, I've written up notes from that meeting into the following design doc: http://code.google.com/p/google-web-toolkit/wiki/MultiValuedConfigProperties Please comment in the design doc or on this thread if you have thoughts. -- Bruce --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: subtree logging for problems
Would you be willing to drop a before and after example of the output for those of watching from the stands? On Wed, Apr 22, 2009 at 1:55 PM, Freeland Abbott fabb...@google.com wrote: Thanks. Typo fixed, submit at r5269. On Tue, Apr 21, 2009 at 6:27 PM, Lex Spoon sp...@google.com wrote: LGTM. There's a typo in ProblemReport: accessir. -Lex On 4/21/09, Freeland Abbott fabb...@google.com wrote: Here's the promised follow-on to my earlier, fixing the subtype logging to be a subtree logger. I'm still bothered by the multiple entries for E extends java.lang.Object, but I'm not sure which is the better way to fix it... I think I would like to change JType constructors and/or .equals, to generalize to e.g. id1 extends java.lang.Object or id1 extends Mapid2 extends KeyType, id3 implements ValType, but I'm not sure how such a change might impact other uses of JType and children elsewhere... I would like to think it was beneficial. The other, more localized approach would be to change the TIC map key from JClassType to String, and to do the identifier-abstraction as types were stringified in STOB, only. Thoughts? --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Java source transformation
On Tue, Apr 21, 2009 at 12:38 PM, nicolas de loof nicolas.del...@gmail.comwrote: The only critism I'd have is the requirement to use GWT.create() to get code from a generator. This is a requirement when the generated code doesn't extend the source type (for example for Async interfaces) but not when the genrator is used to add some capabilities (ie acts as a decorator), for example to add PropertyChangeListener to a model bean. Perhaps if you could distill down a more concrete example, it could get the wheels turning. Enhancements to GWT.create() certainly aren't off the table. Ray Cromwell has made some pretty useful-sounding suggestions in the past. We just have to find large-group consensus on what makes the most sense, striking a balance between power, clarity, and of course, optimizability. Here's a quick back-of-envelope pattern that could possibly work: class PersonBean { void setName(String name): String getName(); } interface MethodCallLogger { } class MyEntryPoint { class PersonBeanWithMethodCallLogger extends PersonBean implements MethodCallLogger { // empty, but a subclass gets generated } public void onModuleLoad() { // Have a generate-with rule for MethodCallLoggerGenerator, triggered by assignability to MethodCallLogger PersonBean pb = GWT.create(PersonBeanWithMethodCallLogger.class); pb.setName(Nicolas); } } // Generated... class PersonBeanWithMethodCallLoggerImpl extends PersonBeanWithMethodCallLogger { void setName(String name) { someLogger.log(setName(' + name + ') called); super.setName(name); } ... } As formulated above, this pattern doesn't compose well. But it might be that we can forge a pattern like this into something everyone likes eventually. -- Bruce This makes unit testing more difficult as code that uses GWT.create cannot run in classic jUnit. It would be great to have the compiler use generator-extended classes even when created using the standard new keyword. Thanks a lot for the explanation. Nicolas 2009/4/21 Bruce Johnson br...@google.com A sort of philosophical meta-point that may or may not be of interest... When we started GWT, we were worried about managing the complexity of compile-time code generation, so we tried to find the simplest, most easy-to-debug approach we could think of. GWT's model of never changing existing code[1], but only adding new Java source during the compile, is really a design choice, not a technical limitation. The benefit of the current design is that you can add -gen to hosted mode and map the corresponding folder into your source path, and then easily step through all your code, both handwritten and generated, in the debugger. This avoids tricky or confusing situations wherein the source code you see appears to be doing something different than the bytecode that's running. It seems good to avoid that kind of dichotomy, on the principle that straightforward-though-verbose is generally better than fancy-but-confusing. [1] Overlay types were the first time we ever even did bytecode rewriting, and that support is implemented at a very deep level. Also, JSOs are intended to be among only a very few magic things in GWT (basically, JSNI, GWT.create(), GWT.runAsync(), and JSOs). We went to a lot of effort to ensure that JSOs worked according to a fixed set of rules that are not hard to comply with, even if people don't fully understand why the implementation requires it. On Mon, Apr 20, 2009 at 11:11 AM, Thomas Broyer t.bro...@gmail.comwrote: On 20 avr, 08:43, nicolas de loof nicolas.del...@gmail.com wrote: I wonder if there is any way to also pre-process Java sources, for example this would enable support for Aspect Oriented Programming or maybe some DataBinding framework. Depends what you mean by pre-process... Generally, generators analyze the class they're called for (for example, looking for specific annotations on methods or on the class itself) and according to this generate a Java class extending the one they've been called for. (is this understandable? is this at least no-so-bad english?) In many case the generator will create from MyClassX some MyClassXImpl or equivalent that extends the original one, bu not REPLACE it as Java source. This is what I mean by pre-process. For example, to implement a AOP framework I'd like to instrument all calls to some method. For this reason I'd like a generator / pre-processor to check the source files and detect the matching pointcuts to add some adived code. Many other example can apply, including annotation processing for declarative coding (ex : @Property annotation to automagically introduce the required PropertyChangeListeners) You would generate a subclass that delegates to super.method() after/ before the aspect(s) code. I never tried it myself, but I'n not sure a generator can REPLACE the original Java Source. AFAICT
[gwt-contrib] Re: UiBinder
No update yet, unfortunately. We have to get ourselves organized again now that GWT 1.6 is out the door, and then we'll have a better idea of when it will be available. On Tue, Apr 14, 2009 at 12:54 AM, Gary Miller miller.ga...@gmail.comwrote: Any news on when UiBinder will be available to the outside world? Thanks Gary --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RR : Chunk the JavaScript in the initial fragment
It still sounds to me like the route Scott suggested and Bob agreed with would be better, so as to avoid the whole issue of re-lexing the JS during link. On Tue, Apr 14, 2009 at 1:19 AM, Vitali Lovich vlov...@gmail.com wrote: Should've mentioned this in the original post, but probably the TokenStream.javahttp://mxr.mozilla.org/mozilla/source/js/rhino/src/org/mozilla/javascript/TokenStream.javaclass is the scanner you would be interested in I believe. On Tue, Apr 14, 2009 at 1:14 AM, Vitali Lovich vlov...@gmail.com wrote: Hey guys, Rhino http://www.mozilla.org/rhino/ (one of Mozilla's javascript engines) is written entirely in Java supports JS 1.7 if that helps. I'm sure there's a parser component in there that can be extracted if the license is compatible (MPL/GPL). There's also GromJS http://www.bauk.ws/gromjs.html (public domain I think). On the other hand these are probably overkill for your needs. On Tue, Apr 14, 2009 at 12:33 AM, Lex Spoon sp...@google.com wrote: On Mon, Apr 13, 2009 at 1:53 PM, John Tamplin j...@google.com wrote: On Mon, Apr 13, 2009 at 3:51 PM, Scott Blum sco...@google.com wrote: If we were playing Mao, I would give you a card penalty for stating the obvious. :-) But uh, reliably tracking whether or not you're in a string literal is about as much fun as writing a JavaScript parser. In fact, it might be *exactly* as fun, if you know what I mean. String literals have to be known at parse time, so it seems to me all you have to look for is start/stop quotes (of both sorts) while handling embedded ones of the wrong variety and escaped ones of the right variety. That looks like it can be handled with a single character lookahead scanner, and very little complexity -- what am I missing? It would be awesome if there were a simple lexer available for JavaScript. Given a token stream, brace counting would sound feasible. However, from what I hear it's pretty complicated even to tokenize JavaScript. I don't know exactly what is so hard, but last time I asked, regex literals came up. Lex --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: UiBinder
On Tue, Apr 14, 2009 at 12:12 PM, Chris chrish...@gmail.com wrote: As you get organized for the next release(s), It would be nice to have more frequent releases with one or two major features. There are some major enhancements sitting in trunk (RunAsync is the one I'm really looking forward too). I realize this might not be possible with this type of project and the resources required to put out a releases. I hear ya, but you're right that doing an actual release does require a lot of effort, so there's a natural lower-limit as to how often we really can do official releases. No promises, but it's worth noting that trunk is quite stable these days. Teams within Google are using the trunk all the time, so we have an incentive to keep it stable on average. -- Bruce --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: One last memory review
w00t! Vacation commits FTW! (Just kidding; @Scott: please rest) On Thu, Apr 9, 2009 at 11:52 AM, Scott Blum sco...@google.com wrote: FYI: I just committed the last of my outstanding memory work to trunk. Lex kindly agreed to watch the build and do a roll-back for me if something breaks. On Tue, Apr 7, 2009 at 10:33 PM, Scott Blum sco...@google.com wrote: On Tue, Apr 7, 2009 at 4:12 PM, Lex Spoon sp...@google.com wrote: 5178: Also tightened up the recursive method slightly, and managing the computed set better. This works because once a class transitions from hasClinit - !hasClinit, there's no possible way it can ever go back. Small problem: I believe line 644-646 in the patched version is intended to test target, not type. If that sounds right, then the rest LGTM. Otherwise, let's discuss how this is supposed to work. Nice catch! I botched a manual inlining of lines 636-641 in the original. By the way, this algorithm could be sped up if, it mattered for performance. Instead of repeatedly recursing for each type, start by marking classes where hasLiveCode() as having clinits. Then, propagate clinit-ness backwards along the getClinitTargets() graph. Any class not reached does not needs its clinit. The advantage probably doesn't matter in this case in practice, but I mention it because this funny algorithm pattern keeps coming up. That is a better approach, I'll have to remember that next time I run into this pattern. Thanks, Scott --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
Announcing GWT 1.6...and quite a bit more
Hi Folks! Exciting news today. Rather than attempting to describe everything here, let me point you to some blog posts that hopefully you will find interesting: GWT 1.6 and friends: http://googlewebtoolkit.blogspot.com/2009/04/introducing-gwt-16-and-friends.html Seriously this time, the new language on App Engine: Java http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html Google Plugin for Eclipse -- Peanut Butter to Eclipse's Chocolate http://googlewebtoolkit.blogspot.com/2009/04/google-plugin-for-eclipse-peanut-butter.html -- Bruce, on behalf of the GWT, App Engine, and Google Plugin teams --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~--~~~~--~~--~--~---
[gwt-contrib] Re: [google-web-toolkit commit] r5193 - Fix error message to include the property name when a binding vs. configuration property ...
@Bob: Kudos for fixing this instead of just observing the problem and moving on. You rock for setting this kind of example. On Tue, Apr 7, 2009 at 1:52 PM, codesite-nore...@google.com wrote: Author: b...@google.com Date: Tue Apr 7 10:47:05 2009 New Revision: 5193 Modified: trunk/dev/core/src/com/google/gwt/dev/cfg/ModuleDefSchema.java Log: Fix error message to include the property name when a binding vs. configuration property mismatch occurs. Patch by: bobv Review by: jgw (TBR) Modified: trunk/dev/core/src/com/google/gwt/dev/cfg/ModuleDefSchema.java == --- trunk/dev/core/src/com/google/gwt/dev/cfg/ModuleDefSchema.java (original) +++ trunk/dev/core/src/com/google/gwt/dev/cfg/ModuleDefSchema.java Tue Apr 7 10:47:05 2009 @@ -791,8 +791,8 @@ if (concreteType.isInstance(prop)) { return prop; } -logger.log(TreeLogger.ERROR, The specified property ' + attr -+ ' is not of the correct type; found ' +logger.log(TreeLogger.ERROR, The specified property ' ++ prop.getName() + ' is not of the correct type; found ' + prop.getClass().getSimpleName() + ' expecting ' + concreteType.getSimpleName() + '); } else { --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Announcing GWT 1.6...and quite a bit more
Hi Folks! Exciting news today. Rather than attempting to describe everything here, let me point you to some blog posts that hopefully you will find interesting: GWT 1.6 and friends: http://googlewebtoolkit.blogspot.com/2009/04/introducing-gwt-16-and-friends.html Seriously this time, the new language on App Engine: Java http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html Google Plugin for Eclipse -- Peanut Butter to Eclipse's Chocolate http://googlewebtoolkit.blogspot.com/2009/04/google-plugin-for-eclipse-peanut-butter.html -- Bruce, on behalf of the GWT, App Engine, and Google Plugin teams --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RFC : Adding deprecations to gwt.xml files
Sounds pretty useful. We should lock its behavior down more, though. Maybe just deprecated superceded-by=othermodule/ where superceded-by is optional. It would be helpful to have consistent-looking deprecation messages, so we probably shouldn't leave the text open-ended. On Mon, Apr 6, 2009 at 11:57 AM, BobV b...@google.com wrote: I'm in the process of migrating ClientBundle into trunk and it occurred to me that even if you remove the use of all deprecated types from your code, your module might still inherit an otherwise-unused module. What do you think about adding another tag to gwt.xml as follows? module deprecated href=http://google.com/more_info; This module has been replaced by blah-blah-blah./deprecated /module -- Bob Vawter Google Web Toolkit Team --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RFC : Adding deprecations to gwt.xml files
On Mon, Apr 6, 2009 at 1:35 PM, BobV b...@google.com wrote: On Mon, Apr 6, 2009 at 1:28 PM, Bruce Johnson br...@google.com wrote: Sounds pretty useful. We should lock its behavior down more, though. Maybe Locking it down is just going to get in the way because we can't cover all of the types of messages that you'd necessarily want to be able to convey in tag attributes. I may not be thinking about the spectrum clearly enough. Do you have some examples in mind? It seems like the 99% case is people saying Don't use this anymore; use that instead. Developers will just have to be judicious in their use of a free-form message; it more-or-less works for JavaDoc. (tangent: ModuleDoc?) In javadoc, it has always seemed like an un-usefully underconstrained tag. Everbody says exactly the same things, phrased every-so-slightly differently. If you want to lock it down, the most useful thing to be able to specify is a URL with additional information. I don't think that handles the most common use case, though. Wouldn't the most common thing be, Don't use this; use that? Most people will go to the absolute minimum trouble necessary, so it's unlikely people would be included to create an actual URL to point to. (IMHO) --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RFC : Adding deprecations to gwt.xml files
On Mon, Apr 6, 2009 at 4:17 PM, BobV b...@google.com wrote: I'm thinking of the case that I have where transitioning from ImmutableResourceBundle to ClientBundle could use some documentation to indicate where there have been changes. So how about use this instead and more information here and lose the free-form data? How does that manifest as XML? --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RFC : Adding deprecations to gwt.xml files
(BTW, I could be wrong about the whole let's not have freeform text. It was just one guy's opinion that it makes things too inconsistent. I'd like to hear if other people agree/disagree.) @Other people: agree/disagree? Assuming people do agree that it's a bit better to avoid freeform text, then Bob, I like your most recent suggestion with John's addendum. On Mon, Apr 6, 2009 at 4:37 PM, John Tamplin j...@google.com wrote: On Mon, Apr 6, 2009 at 4:26 PM, BobV b...@google.com wrote: How does that manifest as XML? deprecated superceded-by=othermodule href=http://google.com/something; / where both attributes are optional. The URL will be presented by using the AbstractTreeLogger.log() method that takes a HelpInfo object. superceded-by should probably accept a comma-separated list of modules in case the functionality gets split up. -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: RFC : Adding deprecations to gwt.xml files
On Mon, Apr 6, 2009 at 4:51 PM, John Tamplin j...@google.com wrote: On Mon, Apr 6, 2009 at 4:47 PM, Bruce Johnson br...@google.com wrote: (BTW, I could be wrong about the whole let's not have freeform text. It was just one guy's opinion that it makes things too inconsistent. I'd like to hear if other people agree/disagree.) @Other people: agree/disagree? I think there may be some case where you want/need more explanation, especially if it is of the form If you were doing X, use module A -- if you were doing Y, use module B. However, I think the URL will address most of that and it is easy enough to extend it later for free-form text if it becomes useful to do so -- it is harder to remove it if we add it now but it isn't useful. The one question I have is where will the URL point for an unreleased version? Ie, say we deprecate something in trunk, where would we make the URL point for more information? The compiler does this already by including reference to HTML files that are included in the distro. It is important that this could work (i.e. file URLs). --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Review: JsArrays patch
Let's not add this extra type JsArrayBase into the hierarchy. Why can't we just push the various methods down? We can always factor upward in the future. If we need shared implementation, we can factor that out into a package-private JsArrayImpl class. On Fri, Mar 27, 2009 at 1:28 PM, Freeland Abbott gwt.team.fabb...@gmail.com wrote: Scott, we already talked about this, but here's the patch for public review. The basic goal is to surface the native length, sort, push, and shift operators for JsArrays... I know you mentioned that IE6's push may be slower than indexed extension, and thus a candidate for deferred binding, but I wanted to get a basic implementation in first. There should be only checkstyle changes from what we discussed (though that obviously doesn't help the rest GWTC). I also added some checkstyle fixes to JavaScriptObject, introduced by my c5082. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Review: JsArrays patch
Kelly, since you have experience with this, I'd like you to be the decider (i.e. Freeland is now waiting on your LGTM). On Fri, Mar 27, 2009 at 2:16 PM, Freeland Abbott gwt.team.fabb...@gmail.com wrote: I think the argument is more for unnecessary rather than bad... although without JsArrayBase (we can make it package-protected, and call it JsArrayImpl if anyone cares), we duplicate the JSNI implementation for a couple trivial methods. I thought refactoring them into one place was nice, but trivial enough that I'm not fighting over it. Revised patch attached; I can go either way on this. On Fri, Mar 27, 2009 at 2:06 PM, Scott Blum sco...@google.com wrote: I'm going to punt this review to Bruce Kelly, 'cause I have no idea why having JsArrayBase would be bad. :) On Fri, Mar 27, 2009 at 1:28 PM, Freeland Abbott gwt.team.fabb...@gmail.com wrote: Scott, we already talked about this, but here's the patch for public review. The basic goal is to surface the native length, sort, push, and shift operators for JsArrays... I know you mentioned that IE6's push may be slower than indexed extension, and thus a candidate for deferred binding, but I wanted to get a basic implementation in first. There should be only checkstyle changes from what we discussed (though that obviously doesn't help the rest GWTC). I also added some checkstyle fixes to JavaScriptObject, introduced by my c5082. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Adding ClientBundle to trunk
This stuff sucks. Revert it. Just kidding. wt! On Wed, Mar 25, 2009 at 7:31 PM, BobV b...@google.com wrote: After 16+ months of on-and-off development, ClientBundle (nee ImmutableResourceBundle) is moving to GWT trunk. $ find user/src/com/google/gwt/resources/ user/test/com/google/gwt/resources/ -name *.java | xargs wc | grep total 9871 34391 317990 total The com.google.gwt.resources.Resources module is not included from User by default, so this commit should be a no-op for those tracking GWT and incubator trunk. Note also that some non-trivial API changes have occurred, includes renames and removal of methods marked as deprecated. The initial add at r5083 includes the following resource types: - CssResource - DataResource - ExternalTextResource - GwtCreateResource - ImageResource - TextResource TODO in priority order: - Move StyleInjector as a separate commit. - Which package is most appropriate? - Deprecate incubator versions and provide transition documentation. - A very rough guide to changes is here http://code.google.com/p/google-web-toolkit/wiki/ClientBundle - Deprecate ImageBundle with replacement. - Begin switching gwt.user and sample apps to ClientBundle -- Bob Vawter Google Web Toolkit Team --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Announcing GWT 1.6 Release Candidate
Are the spring jar and its dependencies in your WEB-INF/lib folder? We did introduce an extra convenience mode recently, hence the message [WARN] Server class 'org.apache.commons. collections.map.CaseInsensitiveMap' could not be found in the web app, but was found on the system classpath which makes me think it's related to that new functionality. (Of course, either way, this looks like it could be a bug in the new helpful class loading logic.) -- Bruce On Sun, Mar 22, 2009 at 7:01 PM, Alejandro D. Garin aga...@gmail.comwrote: Hi, I have problems creating a new project and then adding Spring 2.5 jar and setting up a context listener in web.xml like this: context-param param-namecontextConfigLocation/param-name param-value/WEB-INF/applicationContext.xml/param-value /context-param listener listener-class org.springframework.web.context.ContextLoaderListener /listener-class /listener This configuration works OK with M2. Ideas? Thanks. *Hosted Mode messages*: [WARN] Server class 'org.apache.commons.collections.map.CaseInsensitiveMap' could not be found in the web app, but was found on the system classpath [WARN] Adding classpath entry 'file:/F:/java/gwt-windows-1.6.2/gwt-dev-windows.jar' to the web app classpath for this session [WARN] failed com.google.gwt.dev.shell.jetty.jettylauncher$webappcontextwithrel...@2c507f {/,F:\java\ganymede\TaskTimer\war} java.lang.LinkageError: loader constraint violation: loader (instance of com/google/gwt/dev/shell/jetty/JettyLauncher$WebAppContextWithReload$WebAppClassLoaderExtension) previously initiated loading for a different type with name org/apache/commons/logging/Log at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload$WebAppClassLoaderExtension.findClass(JettyLauncher.java:303) at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:366) at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337) at java.lang.ClassLoader.loadClassInternal(Unknown Source) at org.springframework.core.CollectionFactory.createConcurrentMapIfPossible(CollectionFactory.java:195) at org.springframework.web.context.ContextLoader.clinit(ContextLoader.java:153) at org.springframework.web.context.ContextLoaderListener.createContextLoader(ContextLoaderListener.java:53) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:44) at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:543) at org.mortbay.jetty.servlet.Context.startContext(Context.java:136) at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220) at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513) at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448) at com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload.doStart(JettyLauncher.java:397) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) at org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) at org.mortbay.jetty.Server.doStart(Server.java:222) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:449) at com.google.gwt.dev.HostedMode.doStartUpServer(HostedMode.java:367) at com.google.gwt.dev.HostedModeBase.startUp(HostedModeBase.java:590) at com.google.gwt.dev.HostedModeBase.run(HostedModeBase.java:397) at com.google.gwt.dev.HostedMode.main(HostedMode.java:232) [WARN] failed requestloghand...@1e5da76 java.lang.LinkageError: loader constraint violation: loader (instance of com/google/gwt/dev/shell/jetty/JettyLauncher$WebAppContextWithReload$WebAppClassLoaderExtension) previously initiated loading for a different type with name org/apache/commons/logging/Log at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source
[gwt-contrib] Re: ImageBundle pruning
A great idea, and it's something Bob Vawter has been pushing for for ages now. We do need to add some new architecture to make it possible. It might be possible to hack it in by doing weird with generators and linkers working in concert, but realistically, the right way will take a good bit of extra work. Bob can probably talk about it a lot more concretely. On Thu, Mar 19, 2009 at 8:57 AM, Robert Hanson iamroberthan...@gmail.comwrote: Maybe I being naive, but is it be possible to use pruning with ImageBundles so that only referenced images are included in the compiled output? In my case I have a bundle of 250 flags of the world, and all 250 are included in the compiled output even though I am only using a few of them. Maybe this planned? Or maybe this is not possible with the current architecture? Just trying to understand the underlying mechanism. Thanks. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
Announcing GWT 1.6 Release Candidate
Good news! Google Web Toolkit 1.6 RC is ready for you to download and try out: http://code.google.com/p/google-web-toolkit/downloads/list?q=1.6.2 For background on what's new in GWT 1.6, please see the still-in-progress doc: http://code.google.com/docreader/?p=google-web-toolkit-doc-1-6s=google-web-toolkit-doc-1-6t=ReleaseNotes_1_6 as well as previous 1.6-related announcements: Announcing GWT 1.6 Milestone 1 http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3e7e6cc3b35ad98a and Announcing GWT 1.6 Milestone 2 http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/33df9cc75aead5a1 For complete details, the GWT issue tracker has the full list of changes: http://code.google.com/p/google-web-toolkit/issues/list?can=2q=milestone:1_6_RC%20status:FixedNotReleased,Fixedsort=priority We expect this to be a short RC cycle, so a more comprehensive blog post with an overview of the features in GWT 1.6 should be just around the corner. -- Bruce, on behalf of the GWT team --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~--~~~~--~~--~--~---
[gwt-contrib] Announcing GWT 1.6 Release Candidate
Good news! Google Web Toolkit 1.6 RC is ready for you to download and try out: http://code.google.com/p/google-web-toolkit/downloads/list?q=1.6.2 For background on what's new in GWT 1.6, please see the still-in-progress doc: http://code.google.com/docreader/?p=google-web-toolkit-doc-1-6s=google-web-toolkit-doc-1-6t=ReleaseNotes_1_6 as well as previous 1.6-related announcements: Announcing GWT 1.6 Milestone 1 http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3e7e6cc3b35ad98a and Announcing GWT 1.6 Milestone 2 http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/33df9cc75aead5a1 For complete details, the GWT issue tracker has the full list of changes: http://code.google.com/p/google-web-toolkit/issues/list?can=2q=milestone:1_6_RC%20status:FixedNotReleased,Fixedsort=priority We expect this to be a short RC cycle, so a more comprehensive blog post with an overview of the features in GWT 1.6 should be just around the corner. -- Bruce, on behalf of the GWT team --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: JavaScript Bundling
On Wed, Mar 11, 2009 at 9:32 PM, Thomas Broyer t.bro...@gmail.com wrote: a) use a GWT Linker [1,2] to prepend scripts dependencies (script/ in your modules' gwt.xml) to the selection script; the problem is that the selection script isn't (shouldn't be) cached, so it should remain as small as possible. It's good to paranoid about the speed of the selection script download, but in practice this probably isn't so bad if you have properly configured HTTP headers. The exact semantics for the selection scripts are must revalidate rather than cannot cache. In other words, an If-Modified-Since request for the selection script should be returning Not Modified except when the app is actually redeployed on the server. Thus, I kinda like (a). --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Scaling images in resource bundles
Bob has started the process of landing ClientBundle (the fancy new name for IRB) into the GWT trunk, so this kind of functionality will have a proper ongoing home sooner rather than later. On Wed, Mar 11, 2009 at 9:08 PM, John Tamplin j...@google.com wrote: John Labanca demo'd image transforms last year - I think the resolution was to wait for IRB/etc to make it into GWT and add it then. j...@google.com (from Android) On Mar 11, 2009 8:06 PM, Ray Ryan rj...@google.com wrote: Sounds like a good idea to me. Would you mind putting something on the issue tracker? Patches welcome, rjrjr On Wed, Mar 11, 2009 at 5:00 PM, Vitali Lovich vlov...@gmail.com wrote: Would it be possible... --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: code review requested - add OOPHM support for HostedMode
nice! On Wed, Mar 11, 2009 at 7:30 PM, John Tamplin j...@google.com wrote: This patch, relative to trunk r4993, adds support for the HostedMode target for OOPHM. There is a lot of duplication still between OOPHM and non-OOPHM, but I didn't think it was worth the trouble of separating it out considering the expected lifespan of non-OOPHM. -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---