Revision: 7095
Author: j...@google.com
Date: Fri Nov 20 19:14:08 2009
Log: Merge trunk r7094 into this branch

Handle onModuleLoad errors, misc devmode bug fixes and cleanups

     svn merge --ignore-ancestry -c7094 \
       https://google-web-toolkit.googlecode.com/svn/trunk/ .


http://code.google.com/p/google-web-toolkit/source/detail?r=7095

Modified:
  /releases/2.0/branch-info.txt
  /releases/2.0/dev/core/src/com/google/gwt/dev/shell/BrowserChannel.java
   
/releases/2.0/dev/core/src/com/google/gwt/dev/shell/BrowserChannelServer.java
  /releases/2.0/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java
  /releases/2.0/dev/core/src/com/google/gwt/dev/shell/ModuleSpaceOOPHM.java
   
/releases/2.0/dev/core/src/com/google/gwt/dev/shell/OophmSessionHandler.java
   
/releases/2.0/dev/core/src/com/google/gwt/dev/shell/log/SwingTreeLogger.java

=======================================
--- /releases/2.0/branch-info.txt       Fri Nov 20 16:14:24 2009
+++ /releases/2.0/branch-info.txt       Fri Nov 20 19:14:08 2009
@@ -954,3 +954,7 @@
    Fired onload events for images that are cached.
    svn merge --ignore-ancestry -c 7092  
https://google-web-toolkit.googlecode.com/svn/trunk .

+tr...@7094 was merged into this branch
+ Handle onModuleLoad errors, misc devmode bug fixes and cleanups
+    svn merge --ignore-ancestry -c7094 \
+      https://google-web-toolkit.googlecode.com/svn/trunk/ .
=======================================
--- /releases/2.0/dev/core/src/com/google/gwt/dev/shell/BrowserChannel.java     
 
Thu Nov 19 13:50:21 2009
+++ /releases/2.0/dev/core/src/com/google/gwt/dev/shell/BrowserChannel.java     
 
Fri Nov 20 19:14:08 2009
@@ -264,7 +264,8 @@
       * @param sessionKey opaque key for this session, null if using an old  
plugin
       * @param userAgentIcon byte array containing an icon (which fits  
within
       *     24x24) representing the user agent or null if unavailable
-     * @return a TreeLogger to use for the module's logs
+     * @return a TreeLogger to use for the module's logs, or null if the  
module
+     *     load failed
       */
      public abstract TreeLogger loadModule(BrowserChannel channel,
          String moduleName, String userAgent, String url, String tabKey,
@@ -1290,6 +1291,13 @@
     * <p>See {...@link UserAgentIconMessage}.
     */
    protected static class RequestIconMessage extends Message {
+
+    /**
+     * Receive a RequestIconMessage, assuming the message tag has already  
been
+     * read.
+     *
+     * @throws IOException
+     */
      public static RequestIconMessage receive(BrowserChannel channel)
          throws IOException {
        return new RequestIconMessage(channel);
@@ -1603,8 +1611,7 @@
    }

    protected BrowserChannel(InputStream inputStream, OutputStream  
outputStream,
-      ObjectRefFactory objectRefFactory)
-      throws IOException {
+      ObjectRefFactory objectRefFactory) {
      streamFromOtherSide = new DataInputStream(inputStream);
      streamToOtherSide = new DataOutputStream(outputStream);
      socket = null;
@@ -1684,10 +1691,11 @@
     * React to messages from the other side, where a return value is  
expected.
     *
     * @param handler
+   * @throws BrowserChannelException
     * @throws RemoteDeathError
     */
    public ReturnMessage reactToMessagesWhileWaitingForReturn(
-      SessionHandler handler) {
+      SessionHandler handler) throws BrowserChannelException,  
RemoteDeathError {
      do {
        try {
          getStreamToOtherSide().flush();
=======================================
---  
/releases/2.0/dev/core/src/com/google/gwt/dev/shell/BrowserChannelServer.java   
 
Thu Nov 19 13:50:21 2009
+++  
/releases/2.0/dev/core/src/com/google/gwt/dev/shell/BrowserChannelServer.java   
 
Fri Nov 20 19:14:08 2009
@@ -105,7 +105,7 @@
    // @VisibleForTesting
    BrowserChannelServer(TreeLogger initialLogger, InputStream inputStream,
        OutputStream outputStream, SessionHandler handler,
-      boolean ignoreRemoteDeath) throws IOException {
+      boolean ignoreRemoteDeath) {
      super(inputStream, outputStream, new ServerObjectRefFactory());
      this.handler = handler;
      this.ignoreRemoteDeath = ignoreRemoteDeath;
@@ -166,30 +166,34 @@
        Value returnValue = msg.getReturnValue();
        convertToJsValue(ccl, remoteObjects, returnValue, returnJsValue);
        if (msg.isException()) {
+        Object exceptionValue;
          if (returnValue.isNull() || returnValue.isUndefined()) {
-          throw ModuleSpace.createJavaScriptException(ccl, null);
-
+          exceptionValue = null;
          } else if (returnValue.isString()) {
-          throw ModuleSpace.createJavaScriptException(ccl,
-              returnValue.getString());
-
+          exceptionValue = returnValue.getString();
          } else if (returnValue.isJsObject()) {
-          Object jso = JsValueGlue.createJavaScriptObject(returnJsValue,  
ccl);
-          throw ModuleSpace.createJavaScriptException(ccl, jso);
-
+          exceptionValue =  
JsValueGlue.createJavaScriptObject(returnJsValue,
+              ccl);
          } else if (returnValue.isJavaObject()) {
            Object object =  
remoteObjects.get(returnValue.getJavaObject().getRefid());
            Object target = ((JsValueOOPHM.DispatchObjectOOPHM)  
object).getTarget();
            if (target instanceof Throwable) {
              throw (Throwable) (target);
            } else {
-            // JS throwing random Java Objects, which we'll wrap is  
JSException
-            throw ModuleSpace.createJavaScriptException(ccl, target);
-          }
-        }
-        // JS throwing random primitives, which we'll wrap is JSException
-        throw ModuleSpace.createJavaScriptException(ccl,
-            returnValue.getValue().toString());
+            // JS throwing random Java Objects, which we'll wrap in  
JSException
+            exceptionValue = target;
+          }
+        } else {
+          // JS throwing random primitives, which we'll wrap as a string in
+          // JSException
+          exceptionValue = returnValue.getValue().toString();
+        }
+        RuntimeException exception = ModuleSpace.createJavaScriptException(
+            ccl, exceptionValue);
+        // reset the stack trace to here to minimize GWT infrastructure in
+        // the stack trace
+        exception.fillInStackTrace();
+        throw exception;
        }
      } catch (IOException e) {
        throw new RemoteDeathError(e);
@@ -375,6 +379,18 @@
          + " @ " + sessionKey);
      logger = handler.loadModule(this, moduleName, userAgent, url,
          tabKey, sessionKey, iconBytes);
+    if (logger == null) {
+      // got an error
+      try {
+        Value errMsg = new Value();
+        errMsg.setString("An error occurred loading the GWT module "
+            + moduleName);
+        ReturnMessage.send(this, true, errMsg);
+        return;
+      } catch (IOException e) {
+        throw new RemoteDeathError(e);
+      }
+    }
      try {
        // send LoadModule response
        try {
=======================================
--- /releases/2.0/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java        
 
Mon Nov 16 11:48:59 2009
+++ /releases/2.0/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java        
 
Fri Nov 20 19:14:08 2009
@@ -60,7 +60,8 @@
      try {
        Class<?> javaScriptExceptionClass = Class.forName(
            "com.google.gwt.core.client.JavaScriptException", true, cl);
-      Constructor<?> ctor =  
javaScriptExceptionClass.getDeclaredConstructor(Object.class);
+      Constructor<?> ctor =  
javaScriptExceptionClass.getDeclaredConstructor(
+          Object.class);
        return (RuntimeException) ctor.newInstance(new Object[] {exception});
      } catch (InstantiationException e) {
        caught = e;
@@ -123,17 +124,14 @@

    protected final ModuleSpaceHost host;

-  private final Object key;
-
    private final TreeLogger logger;

    private final String moduleName;

    protected ModuleSpace(TreeLogger logger, ModuleSpaceHost host,
-      String moduleName, Object key) {
+      String moduleName) {
      this.host = host;
      this.moduleName = moduleName;
-    this.key = key;
      this.logger = logger;
      threadLocalLogger.set(host.getLogger());
    }
=======================================
---  
/releases/2.0/dev/core/src/com/google/gwt/dev/shell/ModuleSpaceOOPHM.java       
 
Mon Nov 16 13:33:45 2009
+++  
/releases/2.0/dev/core/src/com/google/gwt/dev/shell/ModuleSpaceOOPHM.java       
 
Fri Nov 20 19:14:08 2009
@@ -30,7 +30,7 @@

    public ModuleSpaceOOPHM(ModuleSpaceHost msh, String moduleName,
        BrowserChannelServer channel) {
-    super(msh.getLogger(), msh, moduleName, moduleName);
+    super(msh.getLogger(), msh, moduleName);
      this.channel = channel;
      msh.getLogger().log(TreeLogger.DEBUG,
          "Created ModuleSpaceOOPHM for " + moduleName, null);
=======================================
---  
/releases/2.0/dev/core/src/com/google/gwt/dev/shell/OophmSessionHandler.java    
 
Thu Nov 19 13:50:21 2009
+++  
/releases/2.0/dev/core/src/com/google/gwt/dev/shell/OophmSessionHandler.java    
 
Fri Nov 20 19:14:08 2009
@@ -115,7 +115,7 @@
      serverChannel.convertToJsValue(cl, localObjects, thisVal, jsThis);

      TreeLogger branch = TreeLogger.NULL;
-    if (logger.isLoggable(TreeLogger.DEBUG)) {
+    if (logger.isLoggable(TreeLogger.SPAM)) {
        StringBuffer logMsg = new StringBuffer();
        logMsg.append("Client invoke of ");
        logMsg.append(methodDispatchId);
@@ -130,13 +130,13 @@
        }
        logMsg.append(" on ");
        logMsg.append(jsThis.toString());
-      branch = logger.branch(TreeLogger.DEBUG, logMsg.toString(), null);
+      branch = logger.branch(TreeLogger.SPAM, logMsg.toString(), null);
      }
      JsValueOOPHM[] jsArgs = new JsValueOOPHM[args.length];
      for (int i = 0; i < args.length; ++i) {
        jsArgs[i] = new JsValueOOPHM();
        serverChannel.convertToJsValue(cl, localObjects, args[i], jsArgs[i]);
-      branch.log(TreeLogger.DEBUG, " arg " + i + " = " +  
jsArgs[i].toString(),
+      branch.log(TreeLogger.SPAM, " arg " + i + " = " +  
jsArgs[i].toString(),
            null);
      }
      JsValueOOPHM jsRetVal = new JsValueOOPHM();
@@ -196,6 +196,7 @@
        moduleHandle.unload();
        moduleMap.remove(serverChannel);
        moduleHandleMap.remove(serverChannel);
+      return null;
      } finally {
        PerfLogger.end();
        PerfLogger.end();
=======================================
---  
/releases/2.0/dev/core/src/com/google/gwt/dev/shell/log/SwingTreeLogger.java    
 
Thu Nov  5 08:47:31 2009
+++  
/releases/2.0/dev/core/src/com/google/gwt/dev/shell/log/SwingTreeLogger.java    
 
Fri Nov 20 19:14:08 2009
@@ -176,7 +176,7 @@
        if (helpInfo != null) {
          URL url = helpInfo.getURL();
          String anchorText = helpInfo.getAnchorText();
-        if (anchorText == null) {
+        if (anchorText == null && url != null) {
            anchorText = url.toExternalForm();
          }
          String prefix = helpInfo.getPrefix();

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

Reply via email to