Revision: 6949
Author: [email protected]
Date: Mon Nov 16 18:59:09 2009
Log: GWTShell now reuses dev mode linking code to populate its generated  
resources directory.

Review by: jat
http://code.google.com/p/google-web-toolkit/source/detail?r=6949

Modified:
  /trunk/dev/core/src/com/google/gwt/dev/DevMode.java
  /trunk/dev/core/src/com/google/gwt/dev/DevModeBase.java
  /trunk/dev/core/src/com/google/gwt/dev/GWTShell.java

=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/DevMode.java Mon Nov 16 11:37:40  
2009
+++ /trunk/dev/core/src/com/google/gwt/dev/DevMode.java Mon Nov 16 18:59:09  
2009
@@ -22,13 +22,10 @@
  import com.google.gwt.core.ext.linker.ArtifactSet;
  import com.google.gwt.core.ext.linker.impl.StandardLinkerContext;
  import com.google.gwt.dev.cfg.ModuleDef;
-import com.google.gwt.dev.shell.ArtifactAcceptor;
  import com.google.gwt.dev.shell.jetty.JettyLauncher;
  import com.google.gwt.dev.ui.RestartServerCallback;
  import com.google.gwt.dev.ui.RestartServerEvent;
  import com.google.gwt.dev.util.InstalledHelpInfo;
-import com.google.gwt.dev.util.NullOutputFileSet;
-import com.google.gwt.dev.util.OutputFileSet;
  import com.google.gwt.dev.util.OutputFileSetOnDirectory;
  import com.google.gwt.dev.util.Util;
  import com.google.gwt.dev.util.arg.ArgHandlerExtraDir;
@@ -283,18 +280,6 @@
    protected HostedModeBaseOptions createOptions() {
      return new HostedModeOptionsImpl();
    }
-
-  @Override
-  protected ArtifactAcceptor doCreateArtifactAcceptor(TreeLogger logger,
-      final ModuleDef module) throws UnableToCompleteException {
-    final StandardLinkerContext linkerContext = link(logger, module);
-    return new ArtifactAcceptor() {
-      public void accept(TreeLogger relinkLogger, ArtifactSet newArtifacts)
-          throws UnableToCompleteException {
-        relink(relinkLogger, linkerContext, module, newArtifacts);
-      }
-    };
-  }

    @Override
    protected void doShutDownServer() {
@@ -390,72 +375,24 @@
      return options.getServletContainerLauncher().getName();
    }

-  /**
-   * Perform an initial hosted mode link, without overwriting newer or
-   * unmodified files in the output folder.
-   *
-   * @param logger the logger to use
-   * @param module the module to link
-   * @throws UnableToCompleteException
-   */
-  private StandardLinkerContext link(TreeLogger logger, ModuleDef module)
-      throws UnableToCompleteException {
-    TreeLogger linkLogger = logger.branch(TreeLogger.DEBUG, "Linking  
module '"
-        + module.getName() + "'");
-
-    // Create a new active linker stack for the fresh link.
-    StandardLinkerContext linkerStack = new  
StandardLinkerContext(linkLogger,
-        module, options);
-    ArtifactSet artifacts = linkerStack.invokeLink(linkLogger);
-    produceOutput(linkLogger, linkerStack, artifacts, module);
-    return linkerStack;
-  }
-
-  private synchronized void produceOutput(TreeLogger logger,
+  protected synchronized void produceOutput(TreeLogger logger,
        StandardLinkerContext linkerStack, ArtifactSet artifacts, ModuleDef  
module)
        throws UnableToCompleteException {
      TreeLogger linkLogger = logger.branch(TreeLogger.DEBUG, "Linking  
module '"
          + module.getName() + "'");

-    try {
-      OutputFileSetOnDirectory outFileSet = new OutputFileSetOnDirectory(
-          options.getWarDir(), module.getName() + "/");
-      OutputFileSet extraFileSet = new NullOutputFileSet();
-      if (options.getExtraDir() != null) {
-        extraFileSet = new OutputFileSetOnDirectory(options.getExtraDir(),
-            module.getName() + "/");
-      }
-
-      linkerStack.produceOutput(linkLogger, artifacts, false, outFileSet);
+    OutputFileSetOnDirectory outFileSet = new OutputFileSetOnDirectory(
+        options.getWarDir(), module.getName() + "/");
+    linkerStack.produceOutput(linkLogger, artifacts, false, outFileSet);
+    outFileSet.close();
+
+    if (options.getExtraDir() != null) {
+      OutputFileSetOnDirectory extraFileSet = new OutputFileSetOnDirectory(
+          options.getExtraDir(), module.getName() + "/");
        linkerStack.produceOutput(linkLogger, artifacts, true, extraFileSet);
-
-      outFileSet.close();
        extraFileSet.close();
-    } catch (IOException e) {
-      linkLogger.log(TreeLogger.ERROR, "I/O exception", e);
-      throw new UnableToCompleteException();
      }
    }
-
-  /**
-   * Perform hosted mode relink when new artifacts are generated, without
-   * overwriting newer or unmodified files in the output folder.
-   *
-   * @param logger the logger to use
-   * @param module the module to link
-   * @param newlyGeneratedArtifacts the set of new artifacts
-   * @throws UnableToCompleteException
-   */
-  private void relink(TreeLogger logger, StandardLinkerContext  
linkerContext,
-      ModuleDef module, ArtifactSet newlyGeneratedArtifacts)
-      throws UnableToCompleteException {
-    TreeLogger linkLogger = logger.branch(TreeLogger.DEBUG,
-        "Relinking module '" + module.getName() + "'");
-
-    ArtifactSet artifacts = linkerContext.invokeRelink(linkLogger,
-        newlyGeneratedArtifacts);
-    produceOutput(linkLogger, linkerContext, artifacts, module);
-  }

    private void validateServletTags(TreeLogger logger,
        ServletValidator servletValidator, ModuleDef module, File webXml) {
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/DevModeBase.java     Mon Nov 16  
11:37:40 2009
+++ /trunk/dev/core/src/com/google/gwt/dev/DevModeBase.java     Mon Nov 16  
18:59:09 2009
@@ -18,6 +18,8 @@
  import com.google.gwt.core.ext.TreeLogger;
  import com.google.gwt.core.ext.UnableToCompleteException;
  import com.google.gwt.core.ext.TreeLogger.HelpInfo;
+import com.google.gwt.core.ext.linker.ArtifactSet;
+import com.google.gwt.core.ext.linker.impl.StandardLinkerContext;
  import com.google.gwt.dev.Precompile.PrecompileOptionsImpl;
  import com.google.gwt.dev.cfg.ModuleDef;
  import com.google.gwt.dev.cfg.ModuleDefLoader;
@@ -756,9 +758,6 @@

    protected abstract HostedModeBaseOptions createOptions();

-  protected abstract ArtifactAcceptor doCreateArtifactAcceptor(
-      TreeLogger logger, ModuleDef module) throws  
UnableToCompleteException;
-
    /**
     * Creates an instance of ShellModuleSpaceHost (or a derived class)  
using the
     * specified constituent parts. This method is made to be overridden for
@@ -776,10 +775,11 @@
      File shellBaseWorkDir = options.getShellBaseWorkDir(moduleDef);
      File sessionWorkDir = new File(shellBaseWorkDir,
          String.valueOf(uniqueId.getAndIncrement()));
-    Util.recursiveDelete(sessionWorkDir, true);
+    Util.recursiveDelete(sessionWorkDir, false);
+    ArtifactAcceptor artifactAcceptor = createArtifactAcceptor(logger,
+        moduleDef);
      return new ShellModuleSpaceHost(logger, compilationState, moduleDef,
-        options.getGenDir(), new File(sessionWorkDir, "gen"),
-        doCreateArtifactAcceptor(logger, moduleDef));
+        options.getGenDir(), new File(sessionWorkDir, "gen"),  
artifactAcceptor);
    }

    protected abstract void doShutDownServer();
@@ -903,6 +903,27 @@
            }
          });
    }
+
+  /**
+   * Perform an initial hosted mode link, without overwriting newer or
+   * unmodified files in the output folder.
+   *
+   * @param logger the logger to use
+   * @param module the module to link
+   * @throws UnableToCompleteException
+   */
+  protected final StandardLinkerContext link(TreeLogger logger, ModuleDef  
module)
+      throws UnableToCompleteException {
+    TreeLogger linkLogger = logger.branch(TreeLogger.DEBUG, "Linking  
module '"
+        + module.getName() + "'");
+
+    // Create a new active linker stack for the fresh link.
+    StandardLinkerContext linkerStack = new  
StandardLinkerContext(linkLogger,
+        module, options);
+    ArtifactSet artifacts = linkerStack.invokeLink(linkLogger);
+    produceOutput(linkLogger, linkerStack, artifacts, module);
+    return linkerStack;
+  }

    /**
     * Load a module.
@@ -922,6 +943,10 @@
      assert (moduleDef != null) : "Required module state is absent";
      return moduleDef;
    }
+
+  protected abstract void produceOutput(TreeLogger logger,
+      StandardLinkerContext linkerStack, ArtifactSet artifacts, ModuleDef  
module)
+      throws UnableToCompleteException;

    protected final void setDone() {
      blockUntilDone.release();
@@ -964,6 +989,17 @@

      return true;
    }
+
+  private ArtifactAcceptor createArtifactAcceptor(TreeLogger logger,
+      final ModuleDef module) throws UnableToCompleteException {
+    final StandardLinkerContext linkerContext = link(logger, module);
+    return new ArtifactAcceptor() {
+      public void accept(TreeLogger relinkLogger, ArtifactSet newArtifacts)
+          throws UnableToCompleteException {
+        relink(relinkLogger, linkerContext, module, newArtifacts);
+      }
+    };
+  }

    private DevModeUI createUI() {
      if (headlessMode) {
@@ -978,4 +1014,24 @@

      return new SwingUI(options);
    }
-}
+
+  /**
+   * Perform hosted mode relink when new artifacts are generated, without
+   * overwriting newer or unmodified files in the output folder.
+   *
+   * @param logger the logger to use
+   * @param module the module to link
+   * @param newlyGeneratedArtifacts the set of new artifacts
+   * @throws UnableToCompleteException
+   */
+  private void relink(TreeLogger logger, StandardLinkerContext  
linkerContext,
+      ModuleDef module, ArtifactSet newlyGeneratedArtifacts)
+      throws UnableToCompleteException {
+    TreeLogger linkLogger = logger.branch(TreeLogger.DEBUG,
+        "Relinking module '" + module.getName() + "'");
+
+    ArtifactSet artifacts = linkerContext.invokeRelink(linkLogger,
+        newlyGeneratedArtifacts);
+    produceOutput(linkLogger, linkerContext, artifacts, module);
+  }
+}
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/GWTShell.java        Mon Nov 16  
11:37:40 2009
+++ /trunk/dev/core/src/com/google/gwt/dev/GWTShell.java        Mon Nov 16  
18:59:09 2009
@@ -18,12 +18,11 @@
  import com.google.gwt.core.ext.TreeLogger;
  import com.google.gwt.core.ext.UnableToCompleteException;
  import com.google.gwt.core.ext.linker.ArtifactSet;
-import com.google.gwt.core.ext.linker.EmittedArtifact;
+import com.google.gwt.core.ext.linker.impl.StandardLinkerContext;
  import com.google.gwt.dev.cfg.ModuleDef;
-import com.google.gwt.dev.shell.ArtifactAcceptor;
  import com.google.gwt.dev.shell.WorkDirs;
  import com.google.gwt.dev.shell.tomcat.EmbeddedTomcatServer;
-import com.google.gwt.dev.util.Util;
+import com.google.gwt.dev.util.OutputFileSetOnDirectory;
  import com.google.gwt.dev.util.arg.ArgHandlerOutDir;
  import com.google.gwt.util.tools.ArgHandlerExtra;

@@ -122,9 +121,6 @@
        this.outDir = outDir;
      }
    }
-
-  public static final String GWT_SHELL_PATH = ".gwt-tmp" + File.separator
-      + "shell";

    public static String checkHost(String hostUnderConsideration,
        Set<String> hosts) {
@@ -190,28 +186,6 @@
    protected HostedModeBaseOptions createOptions() {
      return new ShellOptionsImpl();
    }
-
-  @Override
-  protected ArtifactAcceptor doCreateArtifactAcceptor(TreeLogger logger,
-      final ModuleDef module) {
-    return new ArtifactAcceptor() {
-      public void accept(TreeLogger logger, ArtifactSet artifacts)
-          throws UnableToCompleteException {
-
-        /*
-         * Copied from StandardLinkerContext.produceOutputDirectory() for  
legacy
-         * GWTShellServlet support.
-         */
-        for (EmittedArtifact artifact :  
artifacts.find(EmittedArtifact.class)) {
-          if (!artifact.isPrivate()) {
-            File outFile = new File(options.getShellPublicGenDir(module),
-                artifact.getPartialPath());
-            Util.copy(logger, artifact.getContents(logger), outFile);
-          }
-        }
-      }
-    };
-  }

    @Override
    protected void doShutDownServer() {
@@ -234,4 +208,18 @@
      }
      return EmbeddedTomcatServer.getPort();
    }
-}
+
+  protected synchronized void produceOutput(TreeLogger logger,
+      StandardLinkerContext linkerStack, ArtifactSet artifacts, ModuleDef  
module)
+      throws UnableToCompleteException {
+    TreeLogger linkLogger = logger.branch(TreeLogger.DEBUG, "Linking  
module '"
+        + module.getName() + "'");
+
+    File outputDir = options.getShellPublicGenDir(module);
+    outputDir.mkdirs();
+    OutputFileSetOnDirectory outFileSet = new OutputFileSetOnDirectory(
+        outputDir, "");
+    linkerStack.produceOutput(linkLogger, artifacts, false, outFileSet);
+    outFileSet.close();
+  }
+}

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

Reply via email to