[gwt-contrib] Automatic Split Point Creation and JS Stack Emulation
Hi all, I have two questions. I was wondering why wouldn't it be possible to automatically create the split point based on the information provided by the AST and Compilation Analysis We know precisely where the code cost JS size and where are the call sites for a given split point. Why not hooking up the AST to create a balanced tree and thus create several small sized fragment ? Those generated split points would be adapted regarding the code evolution and the user would never care of this hidden functionality the second question has nothing to do with the first one :-) As I said to Fred privately, I don't see how SymbolsMaps and JSEmulatedStack fit together. When I activate JSEmulatedStack module, all work perfectly (my stacktrace contains line numbers and filenames) but the methods names are still obfuscated. In the extra directory, the SymbolMaps has been effectively generated by the linker but how and when can I merge in production the StackTrace with the SymbolMaps to unobfuscate the StackTrace ? Last but not least, is JSEmulatedStack a feature of GWT 2 MS1 ? thanks all for taking time to respond Sami --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6278 committed - Changes to hyperlink, indexable hyperlink, and Showcase...
Revision: 6278 Author: kpro...@google.com Date: Thu Oct 1 06:38:59 2009 Log: Changes to hyperlink, indexable hyperlink, and Showcase Review by: rice, zundel http://code.google.com/p/google-web-toolkit/source/detail?r=6278 Modified: /branches/crawlability/eclipse/README.txt /branches/crawlability/samples/showcase/src/com/google/gwt/sample/showcase/client/Showcase.java /branches/crawlability/samples/showcase/src/com/google/gwt/sample/showcase/server/CrawlServlet.java /branches/crawlability/servlet/build.xml /branches/crawlability/user/src/com/google/gwt/user/client/History.java /branches/crawlability/user/src/com/google/gwt/user/client/ui/IndexableHyperlink.java === --- /branches/crawlability/eclipse/README.txt Mon Sep 28 07:05:23 2009 +++ /branches/crawlability/eclipse/README.txt Thu Oct 1 06:38:59 2009 @@ -240,6 +240,39 @@ 4) Now you should be able to run the 'Hello' project from the Run dialog! +== Launching 'Showcase' == + +1) Import the 'Showcase' project if you haven't already. + + File-Import-General-Existing Projects into Workspace-Next + Browse to the 'trunk/eclipse' folder and select it + Deselect All + Select 'Showcase' + +2) Non-windows users: Replace the windows project dependency. + + Right-click on the Showcase project and select 'Properties'. + Select 'Java Build Path', the 'Libraries'. + Click on GWT_ROOT/build/staging/gwt-windows-0.0.0/gwt-servlet.jar and +'Edit'. Change gwt-windows-0.0.0 to gwt-linux-0.0.0 or gwt-mac-0.0.0. + +3) Non-windows users: Replace the gwt-dev-windows project dependency and paths. + + Run-Open Run Dialog...-Java Application-Showcase + Select the 'Classpath' tab + Remove gwt-dev-windows paths + Select 'User Entries' + Advanced-Add Folder- Add gwt-dev-platform/core/super + Select the (default classpath) item and use the 'Down' button +to make it the last item in the list. + You could also just edit Showcase.launch and search/replace windows with +linux or mac. + +4) Repeat step 2 for the 'Showcase compile' project. + +5) Now you should be able to run the 'Showcase' project from the + Run dialog! + == Creating a Launch config for a new project == === --- /branches/crawlability/samples/showcase/src/com/google/gwt/sample/showcase/client/Showcase.java Tue Sep 29 07:49:01 2009 +++ /branches/crawlability/samples/showcase/src/com/google/gwt/sample/showcase/client/Showcase.java Thu Oct 1 06:38:59 2009 @@ -222,8 +222,6 @@ app.getMainMenu().ensureSelectedItemVisible(); Window.setTitle(item.getText()); - - // Show the associated ContentWidget displayContentWidget(itemWidgets.get(item)); } @@ -234,9 +232,9 @@ app.addSelectionHandler(new SelectionHandlerTreeItem() { public void onSelection(SelectionEventTreeItem event) { TreeItem item = event.getSelectedItem(); -String historyToken = ((Hyperlink) item.getWidget()).getTargetHistoryToken(); ContentWidget content = itemWidgets.get(item); if (content != null !content.equals(app.getContent())) { + String historyToken = ((Hyperlink) item.getWidget()).getTargetHistoryToken(); History.newItem(historyToken); } } @@ -415,11 +413,11 @@ */ private void setupMainMenuOption(TreeItem parent, ContentWidget content, AbstractImagePrototype image) { - // Create the TreeItem -Hyperlink hl = new IndexableHyperlink(image.getHTML() + + content.getName(),true,getContentWidgetToken(content)); +Hyperlink hl = new IndexableHyperlink(image.getHTML() + ++ content.getName(), true, getContentWidgetToken(content)); TreeItem option = parent.addItem(hl); - + // Map the item to its history token and content widget itemWidgets.put(option, content); itemTokens.put(getContentWidgetToken(content), option); === --- /branches/crawlability/samples/showcase/src/com/google/gwt/sample/showcase/server/CrawlServlet.java Mon Sep 28 07:05:23 2009 +++ /branches/crawlability/samples/showcase/src/com/google/gwt/sample/showcase/server/CrawlServlet.java Thu Oct 1 06:38:59 2009 @@ -38,26 +38,54 @@ */ public final class CrawlServlet implements Filter { + /** + * Special URL token that gets passed from the crawler to the servlet filter. + * This token is used in case there are already existing query parameters. + */ + private static final String ESCAPED_FRAGMENT_FORMAT1 = _escaped_fragment_=; + /** + * Special URL token that gets passed from the crawler to the servlet filter. + * This token is used in case there are not already existing query parameters. + */ + private static final String ESCAPED_FRAGMENT_FORMAT2 = ?_escaped_fragment_=; + /** + * Length of the special URL tokens. + */ + private static final int
[gwt-contrib] Re: changes to hyperlink and Showcase sample
Thanks to both of you! Committed to branch at r6278. http://gwt-code-reviews.appspot.com/74801/diff/1002/1006 File samples/showcase/src/com/google/gwt/sample/showcase/server/CrawlServlet.java (right): http://gwt-code-reviews.appspot.com/74801/diff/1002/1006#newcode37 Line 37: * Servlet that makes this application crawlable. On 2009/09/30 20:48:34, zundel wrote: On 2009/09/30 20:38:21, kathrin wrote: On 2009/09/30 14:09:43, zundel wrote: I don't see anything in here that looks showcase specific. Is there a plan to bundle this up as a library? Good question. The plan was to ship a modified app that serves as a template for other applications, and the CrawlServlet would be part of this sample app. How do you think we could bundle this up as a library? I dunno, I was just thinking we might include this class in GWT proper and bundle it up along with the gwt-servlet distro. Then, could anyone just throw it in their web.xml? This sounds like a good idea. I'll leave this as a to-do for now until I figure out where it should best go, etc. http://gwt-code-reviews.appspot.com/74801/diff/1015/31#newcode45 Line 45: if (i == -1) { On 2009/09/30 21:01:41, Dan Rice wrote: comment Done. http://gwt-code-reviews.appspot.com/74801/diff/1015/31#newcode46 Line 46: i = queryStringSb.indexOf(?_escaped_fragment_=); On 2009/09/30 21:01:41, Dan Rice wrote: comment Done. http://gwt-code-reviews.appspot.com/74801 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Automatic Split Point Creation and JS Stack Emulation
On Thu, Oct 1, 2009 at 9:24 AM, Sami Jaber sami.ja...@gmail.com wrote: I was wondering why wouldn't it be possible to automatically create the split point based on the information provided by the AST and Compilation Analysis We know precisely where the code cost JS size and where are the call sites for a given split point. Why not hooking up the AST to create a balanced tree and thus create several small sized fragment ? Those generated split points would be adapted regarding the code evolution and the user would never care of this hidden functionality If you mean transparently changing a synchronous call into an asynchronous call, there are a couple of insurmountable (IMHO) problems: - you can't return back to the event loop or you lose the call stack, which means the browser is totally locked (except on Chrome) until the fetch returns. On most browsers, timers won't fire during a busy-wait poll and you will also get slow script warnings - async calls can fail, and you have no way of handling the errors in a useful way. Even if you throw an exception, the programmer has to be prepared for every call to fail, which in practice means only catching the exception at a high level and aborting I think it is far better to have the programmer explicitly specify the split point so they know that it is in fact an async call, can usefully handle error conditions at that point, and allows the browser to run its event loop. -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Automatic Split Point Creation and JS Stack Emulation
In fact, I meant keeping the actual code as a normal developer would have to write manually. Most of them will likely provide a kind of generic Async implementation. If one is able to find the right split point, all the call sites would be rewritten with a : GWT.runAsync() {success();failure();}. The error handling would be defined with a custom method or impl provided by the developer.. The idea is to get rid of all the boiler plate code required by codesplitting, specially all the soyc report analysis steps that many dev will (unfortunately) give up... I'm sure that I miss something, but this is the something that I would want to know :-) Sami On Thu, Oct 1, 2009 at 3:45 PM, John Tamplin j...@google.com wrote: On Thu, Oct 1, 2009 at 9:24 AM, Sami Jaber sami.ja...@gmail.com wrote: I was wondering why wouldn't it be possible to automatically create the split point based on the information provided by the AST and Compilation Analysis We know precisely where the code cost JS size and where are the call sites for a given split point. Why not hooking up the AST to create a balanced tree and thus create several small sized fragment ? Those generated split points would be adapted regarding the code evolution and the user would never care of this hidden functionality If you mean transparently changing a synchronous call into an asynchronous call, there are a couple of insurmountable (IMHO) problems: - you can't return back to the event loop or you lose the call stack, which means the browser is totally locked (except on Chrome) until the fetch returns. On most browsers, timers won't fire during a busy-wait poll and you will also get slow script warnings - async calls can fail, and you have no way of handling the errors in a useful way. Even if you throw an exception, the programmer has to be prepared for every call to fail, which in practice means only catching the exception at a high level and aborting I think it is far better to have the programmer explicitly specify the split point so they know that it is in fact an async call, can usefully handle error conditions at that point, and allows the browser to run its event loop. -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Automatic Split Point Creation and JS Stack Emulation
On Thu, Oct 1, 2009 at 10:39 AM, Sami Jaber sami.ja...@gmail.com wrote: In fact, I meant keeping the actual code as a normal developer would have to write manually. Most of them will likely provide a kind of generic Async implementation. If one is able to find the right split point, all the call sites would be rewritten with a : GWT.runAsync() {success();failure();}. The error handling would be defined with a custom method or impl provided by the developer.. The idea is to get rid of all the boiler plate code required by codesplitting, specially all the soyc report analysis steps that many dev will (unfortunately) give up... I'm sure that I miss something, but this is the something that I would want to know :-) How can the developer provide the failure handling code if that point can be made anywhere at the compiler's discretion? How can the compiler know where is a good point to split the program from a user's perspective? -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Automatic Split Point Creation and JS Stack Emulation
Yes you are right, but do you really think that in the case of a failure, you would try to change your code flow differently depending on where you are ? Except displaying a generic message, you won't be able to go further as I understand the mechanism. Concerning the second point, this is the crucial question. There are a few scenarios that could be conceivable. We can imagine that a permuation of 1 Mo could be splitted into 2 chunks of 500 Ko or 4 chunks of 250 Ko of 10 chunks of 5 Ko, that is what I call a balanced tree or balanced split points. Most people would probably want to split their permutations only to get responsiveness and decrease startup time without digging more in the code flow... But if you say that it is not possible at all, I believe you ... Sami On Thu, Oct 1, 2009 at 4:56 PM, John Tamplin j...@google.com wrote: On Thu, Oct 1, 2009 at 10:39 AM, Sami Jaber sami.ja...@gmail.com wrote: In fact, I meant keeping the actual code as a normal developer would have to write manually. Most of them will likely provide a kind of generic Async implementation. If one is able to find the right split point, all the call sites would be rewritten with a : GWT.runAsync() {success();failure();}. The error handling would be defined with a custom method or impl provided by the developer.. The idea is to get rid of all the boiler plate code required by codesplitting, specially all the soyc report analysis steps that many dev will (unfortunately) give up... I'm sure that I miss something, but this is the something that I would want to know :-) How can the developer provide the failure handling code if that point can be made anywhere at the compiler's discretion? How can the compiler know where is a good point to split the program from a user's perspective? -- John A. Tamplin Software Engineer (GWT), Google --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Automatic Split Point Creation and JS Stack Emulation
On Thu, Oct 1, 2009 at 8:18 AM, Sami Jaber sami.ja...@gmail.com wrote: Yes you are right, but do you really think that in the case of a failure, you would try to change your code flow differently depending on where you are ? Except displaying a generic message, you won't be able to go further as I understand the mechanism. Concerning the second point, this is the crucial question. There are a few scenarios that could be conceivable. We can imagine that a permuation of 1 Mo could be splitted into 2 chunks of 500 Ko or 4 chunks of 250 Ko of 10 chunks of 5 Ko, that is what I call a balanced tree or balanced split points. Most people would probably want to split their permutations only to get responsiveness and decrease startup time without digging more in the code flow... But if you say that it is not possible at all, I believe you ... I'm not sure that it's not possible, I think it's more that doing it under automatic control is undesirable. A split point will, on first execution, introduce a delay in processing. Such delays can be acceptable if the programmer can control where they go. If the compiler introduces a delay at an apparently random place in the code, the delay could very well be disruptive. Forcing the programmer to choose when to allow delays and when not leaves the control in the programmer's hands, and prevents automatically-generated catastrophes. Ian --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Comment on UiBinder in google-web-toolkit
Comment by Yegor.Jbanov: @xavier.mehaut According to samples above, one of the goals is to support a subset of the native HTML syntax, such as div and span. XML looks like a reasonable compromise to achieve this. In JavaFX it would not be as natural. My 2 cents. For more information: http://code.google.com/p/google-web-toolkit/wiki/UiBinder --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6279 committed - Test batches will be sent to the client as they are executed by JUnitS...
Revision: 6279 Author: jlaba...@google.com Date: Thu Oct 1 10:34:33 2009 Log: Test batches will be sent to the client as they are executed by JUnitShell if NoBatchingStrategy (the default) is used. This allows users to use test runners that shard test methods across different clients. Patch by: jlabanca Review by: fabbott http://code.google.com/p/google-web-toolkit/source/detail?r=6279 Added: /trunk/user/test/com/google/gwt/junit/CompileStrategyTest.java Modified: /trunk/user/src/com/google/gwt/junit/BatchingStrategy.java /trunk/user/src/com/google/gwt/junit/CompileStrategy.java /trunk/user/src/com/google/gwt/junit/JUnitShell.java /trunk/user/test/com/google/gwt/junit/BatchingStrategyTest.java /trunk/user/test/com/google/gwt/junit/JUnitSuite.java === --- /dev/null +++ /trunk/user/test/com/google/gwt/junit/CompileStrategyTest.java Thu Oct 1 10:34:33 2009 @@ -0,0 +1,274 @@ +/* + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the License); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.gwt.junit; + +import com.google.gwt.core.ext.TreeLogger; +import com.google.gwt.core.ext.UnableToCompleteException; +import com.google.gwt.dev.cfg.ModuleDef; +import com.google.gwt.junit.JUnitShell.Strategy; +import com.google.gwt.junit.client.GWTTestCase; +import com.google.gwt.junit.client.impl.JUnitHost.TestInfo; + +import junit.framework.TestCase; + +import java.util.ArrayList; +import java.util.List; + +/** + * Tests of {...@link BatchingStrategy}. This test must run after a + * {...@link GWTTestCase} to ensure that JUnitShell is already initialized. + */ +public class CompileStrategyTest extends TestCase { + + /** + * A mock {...@link RunStyle} used for testing. + */ + private static class MockRunStyle extends RunStyle { + +public MockRunStyle() { + super(null); +} + +@Override +public boolean isLocal() { + return true; +} + +@Override +public void launchModule(String moduleName) { +} + +@Override +public void maybeCompileModule(String moduleName) { +} + } + + /** + * A mock {...@link JUnitMessageQueue} used for testing. + */ + private static class MockJUnitMessageQueue extends JUnitMessageQueue { + +/** + * The test blocks added to the queue. + */ +private ListTestInfo[] testBlocks; + +/** + * Indicates that this is the last test block. + */ +private boolean isLastBlock; + +public MockJUnitMessageQueue() { + super(1); +} + +@Override +void addTestBlocks(ListTestInfo[] newTestBlocks, boolean isLastBlock) { + assertNull(testBlocks); + this.testBlocks = newTestBlocks; + this.isLastBlock = isLastBlock; +} + +void assertIsLastBlock(boolean expected) { + assertEquals(expected, isLastBlock); +} + +void assertTestBlocks(ListTestInfo[] expected) { + if (expected == null || testBlocks == null) { +assertEquals(expected, testBlocks); +return; + } + + assertEquals(expected.size(), testBlocks.size()); + for (int i = 0; i testBlocks.size(); i++) { +TestInfo[] actualBlock = testBlocks.get(i); +TestInfo[] expectedBlock = expected.get(i); +assertEquals(expectedBlock.length, actualBlock.length); +for (int j = 0; j expectedBlock.length; j++) { + assertEquals(expectedBlock[j], actualBlock[j]); +} + } +} + } + + /** + * A mock {...@link CompileStrategy} used for testing. + */ + private static class MockCompileStrategy extends CompileStrategy { + +/** + * The number of modules to mock. + */ +private int mockModuleCount; + +private MockJUnitMessageQueue messageQueue = new MockJUnitMessageQueue(); + +/** + * Construct a new {...@link MockCompileStrategy}. + * + * @param mockModuleCount the number of modules + */ +public MockCompileStrategy(int mockModuleCount) { + this.mockModuleCount = mockModuleCount; +} + +@Override +public ModuleDef maybeCompileModule(String moduleName, +String syntheticModuleName, Strategy strategy, RunStyle runStyle, +BatchingStrategy batchingStrategy, TreeLogger treeLogger) { + fail(This method should not be called.); + return null; +} + +@Override +MockJUnitMessageQueue getMessageQueue() { + return messageQueue; +} + +@Override +int getModuleCount() { + return
[gwt-contrib] [google-web-toolkit] r6280 committed - Merging tr...@6278:6279 trunk....
Revision: 6280 Author: jlaba...@google.com Date: Thu Oct 1 10:42:54 2009 Log: Merging tr...@6278:6279 trunk. - NoBatchingStrategy now runs tests as they are executed by JUnit. svn merge -r6278:6279 --ignore-ancestry https://google-web-toolkit.googlecode.com/svn/trunk/ . http://code.google.com/p/google-web-toolkit/source/detail?r=6280 Added: /branches/snapshot-2009.09.23-r6200/user/test/com/google/gwt/junit/CompileStrategyTest.java Modified: /branches/snapshot-2009.09.23-r6200/branch-info.txt /branches/snapshot-2009.09.23-r6200/user/src/com/google/gwt/junit/BatchingStrategy.java /branches/snapshot-2009.09.23-r6200/user/src/com/google/gwt/junit/CompileStrategy.java /branches/snapshot-2009.09.23-r6200/user/src/com/google/gwt/junit/JUnitShell.java /branches/snapshot-2009.09.23-r6200/user/test/com/google/gwt/junit/BatchingStrategyTest.java /branches/snapshot-2009.09.23-r6200/user/test/com/google/gwt/junit/JUnitSuite.java === --- /dev/null +++ /branches/snapshot-2009.09.23-r6200/user/test/com/google/gwt/junit/CompileStrategyTest.java Thu Oct 1 10:42:54 2009 @@ -0,0 +1,274 @@ +/* + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the License); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.gwt.junit; + +import com.google.gwt.core.ext.TreeLogger; +import com.google.gwt.core.ext.UnableToCompleteException; +import com.google.gwt.dev.cfg.ModuleDef; +import com.google.gwt.junit.JUnitShell.Strategy; +import com.google.gwt.junit.client.GWTTestCase; +import com.google.gwt.junit.client.impl.JUnitHost.TestInfo; + +import junit.framework.TestCase; + +import java.util.ArrayList; +import java.util.List; + +/** + * Tests of {...@link BatchingStrategy}. This test must run after a + * {...@link GWTTestCase} to ensure that JUnitShell is already initialized. + */ +public class CompileStrategyTest extends TestCase { + + /** + * A mock {...@link RunStyle} used for testing. + */ + private static class MockRunStyle extends RunStyle { + +public MockRunStyle() { + super(null); +} + +@Override +public boolean isLocal() { + return true; +} + +@Override +public void launchModule(String moduleName) { +} + +@Override +public void maybeCompileModule(String moduleName) { +} + } + + /** + * A mock {...@link JUnitMessageQueue} used for testing. + */ + private static class MockJUnitMessageQueue extends JUnitMessageQueue { + +/** + * The test blocks added to the queue. + */ +private ListTestInfo[] testBlocks; + +/** + * Indicates that this is the last test block. + */ +private boolean isLastBlock; + +public MockJUnitMessageQueue() { + super(1); +} + +@Override +void addTestBlocks(ListTestInfo[] newTestBlocks, boolean isLastBlock) { + assertNull(testBlocks); + this.testBlocks = newTestBlocks; + this.isLastBlock = isLastBlock; +} + +void assertIsLastBlock(boolean expected) { + assertEquals(expected, isLastBlock); +} + +void assertTestBlocks(ListTestInfo[] expected) { + if (expected == null || testBlocks == null) { +assertEquals(expected, testBlocks); +return; + } + + assertEquals(expected.size(), testBlocks.size()); + for (int i = 0; i testBlocks.size(); i++) { +TestInfo[] actualBlock = testBlocks.get(i); +TestInfo[] expectedBlock = expected.get(i); +assertEquals(expectedBlock.length, actualBlock.length); +for (int j = 0; j expectedBlock.length; j++) { + assertEquals(expectedBlock[j], actualBlock[j]); +} + } +} + } + + /** + * A mock {...@link CompileStrategy} used for testing. + */ + private static class MockCompileStrategy extends CompileStrategy { + +/** + * The number of modules to mock. + */ +private int mockModuleCount; + +private MockJUnitMessageQueue messageQueue = new MockJUnitMessageQueue(); + +/** + * Construct a new {...@link MockCompileStrategy}. + * + * @param mockModuleCount the number of modules + */ +public MockCompileStrategy(int mockModuleCount) { + this.mockModuleCount = mockModuleCount; +} + +@Override +public ModuleDef maybeCompileModule(String moduleName, +String syntheticModuleName, Strategy strategy, RunStyle runStyle, +BatchingStrategy batchingStrategy, TreeLogger treeLogger) { + fail(This method
[gwt-contrib] Re: Comment on LayoutDesign in google-web-toolkit
It is expected that it should work fine on IE[678], and did last time I checked (and the tests still pass). If you could follow up with the specific issues you're running into, it would be quite helpful. On Wed, Sep 30, 2009 at 5:44 AM, codesite-nore...@google.com wrote: Comment by federico.monaldi: i'm trying to use this new classes from the trunk, everithing works fine in firefox but the layout seems doesn't work in explorer is this expected or i've miss something? For more information: http://code.google.com/p/google-web-toolkit/wiki/LayoutDesign --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Add .if.enabled to emma ant targets to avoid confusion
Reviewers: Ray Ryan, Description: Description === The ant targets compile.emma and -create.emma.coverage only run if emma.enabled is defined, but they may cause confusion because it looks like they always run. Fix === Changed the names to compile.emma.if.enabled and -create.emma.coverage.if.enabled to avoid confusion. Testing === I'm less confused. I'll run ant test and ant test -Demma.enabled=true before submitting. Please review this at http://gwt-code-reviews.appspot.com/75801 Affected files: build-tools/ant-gwt/build.xml common.ant.xml dev/core/build.xml tools/api-checker/build.xml user/build.xml Index: build-tools/ant-gwt/build.xml === --- build-tools/ant-gwt/build.xml (revision 6278) +++ build-tools/ant-gwt/build.xml (working copy) @@ -15,7 +15,7 @@ /gwt.javac /target - target name=compile.tests depends=build, compile.emma description=Compiles the test code for this project + target name=compile.tests depends=build, compile.emma.if.enabled description=Compiles the test code for this project mkdir dir=${javac.junit.out} / gwt.javac srcdir=test destdir=${javac.junit.out} classpath Index: tools/api-checker/build.xml === --- tools/api-checker/build.xml (revision 6278) +++ tools/api-checker/build.xml (working copy) @@ -22,7 +22,7 @@ /gwt.javac /target - target name=compile.tests depends=compile.emma description=Compiles the test code for this project + target name=compile.tests depends=compile.emma.if.enabled description=Compiles the test code for this project mkdir dir=${javac.junit.out} / gwt.javac srcdir=test destdir=${javac.junit.out} classpath Index: common.ant.xml === --- common.ant.xml (revision 6278) +++ common.ant.xml (working copy) @@ -192,7 +192,7 @@ echo message=Writing test results to @{test.reports} for @{test.cases} / mkdir dir=@{test.reports} / - antcall target=-create.emma.coverage + antcall target=-create.emma.coverage.if.enabled param name=test.emma.coverage value=@{test.emma.coverage}/ /antcall condition property=emma.lib value=${emma.dir}/emma-2.0.5312-patched.jar else= @@ -357,7 +357,7 @@ taskdef resource=emma_ant.properties classpathref=emma.taskdef.lib / - target name=compile.emma description=Instruments emma classes unless=emma.compiled + target name=compile.emma.if.enabled description=Instruments emma classes unless=emma.compiled delete dir=${javac.emma.out} / property name=emma.compiled value=true / antcall target=-compile.emma.if.enabled / @@ -376,7 +376,7 @@ /emma /target - target name=-create.emma.coverage description=Create the emma coverage directory if=emma.enabled + target name=-create.emma.coverage.if.enabled description=Create the emma coverage directory if=emma.enabled delete dir=${test.emma.coverage} / mkdir dir=${test.emma.coverage} / /target Index: user/build.xml === --- user/build.xml (revision 6278) +++ user/build.xml (working copy) @@ -66,7 +66,7 @@ gwt.ant dir=../dev/core target=compile.tests / /target - target name=compile.tests depends=compile.dev.core.tests, compile.emma description=Compiles the test code for this project + target name=compile.tests depends=compile.dev.core.tests, compile.emma.if.enabled description=Compiles the test code for this project mkdir dir=${javac.junit.out} / gwt.javac srcdir=test excludes=com/google/gwt/langtest/** destdir=${javac.junit.out} classpath Index: dev/core/build.xml === --- dev/core/build.xml (revision 6278) +++ dev/core/build.xml (working copy) @@ -7,7 +7,7 @@ property name=gwt.junit.testcase.dev.core.includes value=**/com/google/**/*Test.class / property name=gwt.junit.testcase.dev.core.excludes value= / - target name=compile.tests depends=build, compile.emma description=Compiles the test code for this project + target name=compile.tests depends=build, compile.emma.if.enabled description=Compiles the test code for this project mkdir dir=${javac.junit.out} / gwt.javac srcdir=test destdir=${javac.junit.out} classpath --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6281 committed - Create a branch for abstracting out the Development Mode UI....
Revision: 6281 Author: j...@google.com Date: Thu Oct 1 11:31:25 2009 Log: Create a branch for abstracting out the Development Mode UI. svn copy \ https://google-web-toolkit.googlecode.com/svn/branches/farewell...@6280 \ https://google-web-toolkit.googlecode.com/svn/changes/jat/abstractui http://code.google.com/p/google-web-toolkit/source/detail?r=6281 Added: /changes/jat/abstractui --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6282 committed - Set branch-info to match this branch.
Revision: 6282 Author: j...@google.com Date: Thu Oct 1 11:39:10 2009 Log: Set branch-info to match this branch. http://code.google.com/p/google-web-toolkit/source/detail?r=6282 Modified: /changes/jat/abstractui/branch-info.txt === --- /changes/jat/abstractui/branch-info.txt Wed Sep 30 17:53:07 2009 +++ /changes/jat/abstractui/branch-info.txt Thu Oct 1 11:39:10 2009 @@ -1,19 +1,8 @@ -Created from tr...@6101 - -svn copy -r6226 \ -https://google-web-toolkit.googlecode.com/svn/branches/farewellSwt \ - https://google-web-toolkit.googlecode.com/svn/changes/jat/noswt-merge6200 +Created from farewellSwt @6280 +== +svn copy \ + https://google-web-toolkit.googlecode.com/svn/branches/farewell...@6280 \ +https://google-web-toolkit.googlecode.com/svn/changes/jat/abstractui Merged from trunk -svn merge https://google-web-toolkit.googlecode.com/svn/trunk \ --r6101:6142 -svn merge --ignore-ancestry -r6142:6200 \ -https://google-web-toolkit.googlecode.com/svn/trunk -(via changes/jat/noswt-merge6200) -svn merge https://google-web-toolkit.googlecode.com/svn/trunk \ - -r6200:6239 . -svn merge https://google-web-toolkit.googlecode.com/svn/trunk \ - -r6239:6249 . -svn merge https://google-web-toolkit.googlecode.com/svn/trunk \ - --ignore-ancestry -r6249:6270 . --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Any plans for supporting Scala ?
Has there ever been discussions about supporting scala ? What I like most about GWT is that it allows to write rich AJAX client using a strongly typed language (java), which is pretty unique. I have come to enjoy Scala very much, being able to write GWT apps in Scala would be totally awesome. I would think that compiling from scala source to javascript would actually be easyer than from java, scala closures for example could translate almost directly to javascipt closures. I assume that significant part of your java-javascript translater could be resused, and the fact that scala lives in the JVM would certainly help. What kind of effort would it take ? --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Restore UiBinder's JRE tests
LGTM. I'm a bit hesitant about die == UnableToCompleteException in TreeLogger in general, but have no issues with it here. (As an example, I'm not sure that's the right exception to throw for an issue early in starting hosted mode shell, although it's maybe not clearly the wrong exception either.) http://gwt-code-reviews.appspot.com/72805 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Any plans for supporting Scala ?
I think Lex Spoon knows a thing or two about Scala. I'm really surprised, nay shocked, that he hasn't ported GWT to Scala yet, on his lunch break! j/k :-) 2009/10/1 Maxime Lévesque maxime.leves...@gmail.com What kind of effort would it take ? --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] GWT Trunk build broken?
Since the new Mail Sample was commited I can't do a full build. Am I missing something? brgds, Papick G. Taboada --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: GWT Trunk build broken?
Do you need to update your tools dir? On Thu, Oct 1, 2009 at 3:46 PM, P.G.Taboada pgtabo...@googlemail.com wrote: Since the new Mail Sample was commited I can't do a full build. Am I missing something? brgds, Papick G. Taboada --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: GWT Trunk build broken?
Hmm, it is up-to-date... [java] Compiling module com.google.gwt.sample.mail.Mail [java]Scanning for additional dependencies: file:/java/gwt/ samples/mail/src/com/google/gwt/sample/mail/client/Mail.java [java] Adding '2' new generated units [java] Validating newly compiled units [java] Removing units with errors [java][ERROR] Errors in 'transient source for com.google.gwt.sample.mail.client.Mail_BinderImpl' [java] [ERROR] Line 20: The method addNorth (Widget, double) in the type DockLayoutPanel is not applicable for the arguments (TopPanel, int, int) [java] [ERROR] Line 21: The method addWest (Widget, double) in the type DockLayoutPanel is not applicable for the arguments (Shortcuts, int, int) [java] [ERROR] Line 22: The method addNorth (Widget, double) in the type DockLayoutPanel is not applicable for the arguments (MailList, int, int) The new sample is using the UIBinder and the new DockLayoutPanel. No java compile error (obviously), but GWT compilation fails. brgds, Papick ps: thanks for the very interesting talk on the google io :-) On 2 Okt., 00:47, Ray Ryan rj...@google.com wrote: Do you need to update your tools dir? On Thu, Oct 1, 2009 at 3:46 PM, P.G.Taboada pgtabo...@googlemail.com wrote: Since the new Mail Sample was commited I can't do a full build. Am I missing something? brgds, Papick G. Taboada --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6283 committed - Checkpoint work on abstracting out develmode UI.
Revision: 6283 Author: j...@google.com Date: Thu Oct 1 17:01:51 2009 Log: Checkpoint work on abstracting out develmode UI. http://code.google.com/p/google-web-toolkit/source/detail?r=6283 Added: /changes/jat/abstractui/dev/core/src/com/google/gwt/dev/SwingUI.java Deleted: /changes/jat/abstractui/dev/core/src/com/google/gwt/dev/shell/BrowserWindowController.java Modified: /changes/jat/abstractui/dev/core/src/com/google/gwt/dev/HostedModeBase.java /changes/jat/abstractui/dev/oophm/overlay/com/google/gwt/dev/GWTShell.java /changes/jat/abstractui/dev/oophm/overlay/com/google/gwt/dev/HostedMode.java /changes/jat/abstractui/dev/oophm/src/com/google/gwt/dev/OophmHostedModeBase.java /changes/jat/abstractui/user/src/com/google/gwt/junit/JUnitShell.java === --- /dev/null +++ /changes/jat/abstractui/dev/core/src/com/google/gwt/dev/SwingUI.java Thu Oct 1 17:01:51 2009 @@ -0,0 +1,243 @@ +/* + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the License); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.gwt.dev; + +import com.google.gwt.core.ext.TreeLogger; +import com.google.gwt.core.ext.TreeLogger.Type; +import com.google.gwt.dev.HostedModeBase.DevelopmentModeUI; +import com.google.gwt.dev.OophmHostedModeBase.TabPanelCollection; +import com.google.gwt.dev.WebServerPanel.RestartAction; +import com.google.gwt.dev.shell.ShellMainWindow; +import com.google.gwt.dev.util.collect.HashMap; + +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.File; +import java.net.URL; +import java.util.IdentityHashMap; +import java.util.Map; + +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.JFrame; +import javax.swing.JTabbedPane; +import javax.swing.WindowConstants; + +/** + * Implements the Swing UI for development mode. + */ +public class SwingUI extends DevelopmentModeUI { + + private final MapModuleHandle, ModulePanel moduleTabs = new IdentityHashMapModuleHandle, ModulePanel(); + private final MapDevelModeTabKey, ModuleTabPanel tabPanels = new HashMapDevelModeTabKey, ModuleTabPanel(); + + public class SwingModuleHandle implements ModuleHandle { + +public TreeLogger getLogger() { + // TODO(jat) Auto-generated method stub + return null; +} + + } + + private final HostedModeBase hostedModeBase; + private JFrame frame; + private JTabbedPane tabs; + private ShellMainWindow mainWnd; + private WebServerPanel webServerLog; + + public SwingUI(HostedModeBase hostedModeBase) { +this.hostedModeBase = hostedModeBase; + } + + @Override + public void initialize() { +if (hostedModeBase.isHeadless()) { + return; +} +ImageIcon gwtIcon = loadImageIcon(icon24.png); +frame = new JFrame(GWT Development Mode); +tabs = new JTabbedPane(); +if (hostedModeBase.options.alsoLogToFile()) { + hostedModeBase.options.getLogDir().mkdirs(); +} +mainWnd = new ShellMainWindow(hostedModeBase.options.getLogLevel(), +hostedModeBase.options.getLogFile(main.log)); +tabs.addTab(Development Mode, gwtIcon, mainWnd, GWT Development mode); +frame.getContentPane().add(tabs); +frame.setSize(950, 700); +frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); +frame.addWindowListener(new WindowAdapter() { + @Override + public void windowClosed(WindowEvent e) { +callback(DONE, null); + } +}); +frame.setIconImage(loadImageIcon(icon16.png).getImage()); +frame.setVisible(true); + } + + protected static final String PACKAGE_PATH = SwingUI.class.getPackage( + ).getName().replace('.', '/').concat(/shell/); + + /** + * Loads an image from the classpath in this package. + */ + static ImageIcon loadImageIcon(String name) { +return loadImageIcon(name, true); + } + + /** + * Loads an image from the classpath, optionally prepending this package. + * + * @param name name of an image file. + * @param prependPackage true if {...@link #PACKAGE_PATH} should be prepended to + * this name. + */ + static ImageIcon loadImageIcon(String name, boolean prependPackage) { +ClassLoader cl = OophmHostedModeBase.class.getClassLoader(); +if (prependPackage) { + name = PACKAGE_PATH + name; +} + +URL url = (name == null) ? null : cl.getResource(name); +if (url != null) { + ImageIcon image = new ImageIcon(url); + return image; +} else { + //
[gwt-contrib] Re: Add .if.enabled to emma ant targets to avoid confusion
On 2009/10/01 18:00:03, jlabanca wrote: LGTM Thanks http://gwt-code-reviews.appspot.com/75801 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Restore UiBinder's JRE tests
Ah, sorry. Depending on exactly when you need it, you want the classpath element of the compile.tests task around line 75, the defined path test.extraclasspaths around line 35; you might also consider compile task, circa line 45, though I think you shouldn't need that. Generally, searching for classpath in the build.xml should get you to suspicious areas to think about, but I think those are the key two. On Thu, Oct 1, 2009 at 5:10 PM, Ray Ryan rj...@google.com wrote: Thanks. I still need an answer to my actual question, though: See the classpath changes to eclipse/user/.classpath? Where do I make the same changes to user/build.xml? On Thu, Oct 1, 2009 at 12:41 PM, fabb...@google.com wrote: LGTM. I'm a bit hesitant about die == UnableToCompleteException in TreeLogger in general, but have no issues with it here. (As an example, I'm not sure that's the right exception to throw for an issue early in starting hosted mode shell, although it's maybe not clearly the wrong exception either.) http://gwt-code-reviews.appspot.com/72805 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: GWT Trunk build broken?
Try doing an ant clean first. Thanks, John LaBanca jlaba...@google.com On Thu, Oct 1, 2009 at 6:52 PM, P.G.Taboada pgtabo...@googlemail.comwrote: Hmm, it is up-to-date... [java] Compiling module com.google.gwt.sample.mail.Mail [java]Scanning for additional dependencies: file:/java/gwt/ samples/mail/src/com/google/gwt/sample/mail/client/Mail.java [java] Adding '2' new generated units [java] Validating newly compiled units [java] Removing units with errors [java][ERROR] Errors in 'transient source for com.google.gwt.sample.mail.client.Mail_BinderImpl' [java] [ERROR] Line 20: The method addNorth (Widget, double) in the type DockLayoutPanel is not applicable for the arguments (TopPanel, int, int) [java] [ERROR] Line 21: The method addWest (Widget, double) in the type DockLayoutPanel is not applicable for the arguments (Shortcuts, int, int) [java] [ERROR] Line 22: The method addNorth (Widget, double) in the type DockLayoutPanel is not applicable for the arguments (MailList, int, int) The new sample is using the UIBinder and the new DockLayoutPanel. No java compile error (obviously), but GWT compilation fails. brgds, Papick ps: thanks for the very interesting talk on the google io :-) On 2 Okt., 00:47, Ray Ryan rj...@google.com wrote: Do you need to update your tools dir? On Thu, Oct 1, 2009 at 3:46 PM, P.G.Taboada pgtabo...@googlemail.com wrote: Since the new Mail Sample was commited I can't do a full build. Am I missing something? brgds, Papick G. Taboada --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---