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
