Cleans up logging structure in hosted mode. A lot of stuff was appearing in the shell's top logger directly. This adds nesting levels in certain places to make the logging much more clear. Compare before and after with -logLevel SPAM to see what I'm talking about. Each instance of ModuleSpace now has its own unique logger. This allows log messages related to a particular hosted mode session to be collected into one place. For example, all rebind spam for a particular refresh cycle will be collected together. The only exception is that GWT.log() will continue to go to the top level for high visibility. Review by: bruce (TBR) git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/1.6@4701 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/HostedMode.java b/dev/core/src/com/google/gwt/dev/HostedMode.java index 7ddbc49..e861dfe 100644 --- a/dev/core/src/com/google/gwt/dev/HostedMode.java +++ b/dev/core/src/com/google/gwt/dev/HostedMode.java
@@ -339,7 +339,7 @@ for (String moduleName : options.getModuleNames()) { TreeLogger loadLogger = getTopLogger().branch(TreeLogger.DEBUG, - "Loading module " + moduleName); + "Bootstrap link for command-line module " + moduleName); try { ModuleDef module = loadModule(loadLogger, moduleName, false); @@ -405,12 +405,14 @@ return false; } try { + TreeLogger logger = getTopLogger().branch(TreeLogger.DEBUG, + "Initializing module '" + module.getName() + "' for hosted mode"); boolean shouldRefreshPage = false; if (module.isGwtXmlFileStale()) { shouldRefreshPage = true; - module = loadModule(getTopLogger(), module.getCanonicalName(), false); + module = loadModule(logger, module.getCanonicalName(), false); } - link(getTopLogger(), module); + link(logger, module); return shouldRefreshPage; } catch (UnableToCompleteException e) { // Already logged. @@ -441,18 +443,21 @@ */ private void link(TreeLogger logger, ModuleDef module) throws UnableToCompleteException { + TreeLogger linkLogger = logger.branch(TreeLogger.DEBUG, "Linking module '" + + module.getName() + "'"); + // TODO: move the module-specific computations to a helper function. File moduleOutDir = new File(options.getWarDir(), module.getName()); File moduleExtraDir = (options.getExtraDir() == null) ? null : new File( options.getExtraDir(), module.getName()); // Create a new active linker stack for the fresh link. - StandardLinkerContext linkerStack = new StandardLinkerContext(logger, + StandardLinkerContext linkerStack = new StandardLinkerContext(linkLogger, module, options); linkerStacks.put(module.getName(), linkerStack); - ArtifactSet artifacts = linkerStack.invokeLink(logger); - linkerStack.produceOutputDirectory(logger, artifacts, moduleOutDir, + ArtifactSet artifacts = linkerStack.invokeLink(linkLogger); + linkerStack.produceOutputDirectory(linkLogger, artifacts, moduleOutDir, moduleExtraDir); } @@ -467,6 +472,9 @@ */ private void relink(TreeLogger logger, ModuleDef module, ArtifactSet newlyGeneratedArtifacts) throws UnableToCompleteException { + TreeLogger linkLogger = logger.branch(TreeLogger.DEBUG, + "Relinking module '" + module.getName() + "'"); + // TODO: move the module-specific computations to a helper function. File moduleOutDir = new File(options.getWarDir(), module.getName()); File moduleExtraDir = (options.getExtraDir() == null) ? null : new File( @@ -476,9 +484,9 @@ StandardLinkerContext linkerStack = linkerStacks.get(module.getName()); assert linkerStack != null; - ArtifactSet artifacts = linkerStack.invokeRelink(logger, + ArtifactSet artifacts = linkerStack.invokeRelink(linkLogger, newlyGeneratedArtifacts); - linkerStack.produceOutputDirectory(logger, artifacts, moduleOutDir, + linkerStack.produceOutputDirectory(linkLogger, artifacts, moduleOutDir, moduleExtraDir); } }
diff --git a/dev/core/src/com/google/gwt/dev/HostedModeBase.java b/dev/core/src/com/google/gwt/dev/HostedModeBase.java index f67553d..ad964af 100644 --- a/dev/core/src/com/google/gwt/dev/HostedModeBase.java +++ b/dev/core/src/com/google/gwt/dev/HostedModeBase.java
@@ -202,8 +202,9 @@ } } - public abstract ModuleSpaceHost createModuleSpaceHost(BrowserWidget widget, - final String moduleName) throws UnableToCompleteException; + public abstract ModuleSpaceHost createModuleSpaceHost(TreeLogger logger, + BrowserWidget widget, String moduleName) + throws UnableToCompleteException; public TreeLogger getLogger() { return getTopLogger();
diff --git a/dev/core/src/com/google/gwt/dev/SwtHostedModeBase.java b/dev/core/src/com/google/gwt/dev/SwtHostedModeBase.java index 0fac666..a737d3b 100644 --- a/dev/core/src/com/google/gwt/dev/SwtHostedModeBase.java +++ b/dev/core/src/com/google/gwt/dev/SwtHostedModeBase.java
@@ -49,12 +49,10 @@ private class SwtBrowserWidgetHostImpl extends BrowserWidgetHostImpl { @Override - public ModuleSpaceHost createModuleSpaceHost(BrowserWidget widget, - final String moduleName) throws UnableToCompleteException { - TreeLogger logger = getLogger(); - + public ModuleSpaceHost createModuleSpaceHost(TreeLogger logger, + BrowserWidget widget, String moduleName) + throws UnableToCompleteException { // Switch to a wait cursor. - // Shell widgetShell = widget.getShell(); try { Cursor waitCursor = display.getSystemCursor(SWT.CURSOR_WAIT); @@ -66,8 +64,8 @@ assert (moduleDef != null); TypeOracle typeOracle = moduleDef.getTypeOracle(logger); - ShellModuleSpaceHost host = doCreateShellModuleSpaceHost(logger, - typeOracle, moduleDef); + ShellModuleSpaceHost host = doCreateShellModuleSpaceHost( + getTopLogger(), typeOracle, moduleDef); return host; } finally { Cursor normalCursor = display.getSystemCursor(SWT.CURSOR_ARROW);
diff --git a/dev/core/src/com/google/gwt/dev/cfg/ModuleDef.java b/dev/core/src/com/google/gwt/dev/cfg/ModuleDef.java index 6ab4a8f..7517cee 100644 --- a/dev/core/src/com/google/gwt/dev/cfg/ModuleDef.java +++ b/dev/core/src/com/google/gwt/dev/cfg/ModuleDef.java
@@ -378,6 +378,8 @@ public synchronized void refresh(TreeLogger logger) throws UnableToCompleteException { PerfLogger.start("ModuleDef.refresh"); + logger = logger.branch(TreeLogger.DEBUG, "Refreshing module '" + getName() + + "'"); // Refresh resource oracles. lazyPublicOracle.refresh(logger);
diff --git a/dev/core/src/com/google/gwt/dev/javac/CompilationState.java b/dev/core/src/com/google/gwt/dev/javac/CompilationState.java index 3ada290..2c52e79 100644 --- a/dev/core/src/com/google/gwt/dev/javac/CompilationState.java +++ b/dev/core/src/com/google/gwt/dev/javac/CompilationState.java
@@ -96,6 +96,8 @@ @SuppressWarnings("unchecked") public void addGeneratedCompilationUnits(TreeLogger logger, Set<? extends CompilationUnit> generatedCups) { + logger = logger.branch(TreeLogger.DEBUG, "Adding '" + generatedCups.size() + + "' new generated units"); for (CompilationUnit unit : generatedCups) { String typeName = unit.getTypeName(); assert (!unitMap.containsKey(typeName)); @@ -154,6 +156,8 @@ * TODO: something more optimal with generated files? */ public void refresh(TreeLogger logger) { + logger = logger.branch(TreeLogger.DEBUG, "Refreshing module from source"); + // Always remove all generated compilation units. for (Iterator<CompilationUnit> it = unitMap.values().iterator(); it.hasNext();) { CompilationUnit unit = it.next(); @@ -183,6 +187,9 @@ private void compile(TreeLogger logger, Set<CompilationUnit> newUnits) { PerfLogger.start("CompilationState.compile"); if (jdtCompiler.doCompile(newUnits)) { + logger = logger.branch(TreeLogger.DEBUG, + "Validating newly compiled units"); + // Dump all units with direct errors; we cannot safely check them. boolean anyErrors = CompilationUnitInvalidator.invalidateUnitsWithErrors( logger, newUnits);
diff --git a/dev/core/src/com/google/gwt/dev/javac/TypeOracleMediator.java b/dev/core/src/com/google/gwt/dev/javac/TypeOracleMediator.java index e3d9e96..0fd5810 100644 --- a/dev/core/src/com/google/gwt/dev/javac/TypeOracleMediator.java +++ b/dev/core/src/com/google/gwt/dev/javac/TypeOracleMediator.java
@@ -411,6 +411,7 @@ * Full refresh based on new units. */ public void refresh(TreeLogger logger, Set<CompilationUnit> units) { + logger = logger.branch(TreeLogger.DEBUG, "Refreshing TypeOracle"); binaryMapper.clear(); typeOracle.reset(); addNewUnits(logger, units);
diff --git a/dev/core/src/com/google/gwt/dev/shell/BrowserWidget.java b/dev/core/src/com/google/gwt/dev/shell/BrowserWidget.java index 8ac02f1..5a0ddcc 100644 --- a/dev/core/src/com/google/gwt/dev/shell/BrowserWidget.java +++ b/dev/core/src/com/google/gwt/dev/shell/BrowserWidget.java
@@ -332,7 +332,7 @@ * * @param space ModuleSpace instance to initialize */ - protected final void attachModuleSpace(ModuleSpace space) + protected final void attachModuleSpace(TreeLogger logger, ModuleSpace space) throws UnableToCompleteException { Object key = space.getKey(); loadedModules.put(key, space);
diff --git a/dev/core/src/com/google/gwt/dev/shell/BrowserWidgetHost.java b/dev/core/src/com/google/gwt/dev/shell/BrowserWidgetHost.java index 8e73ae9..b917a1b 100644 --- a/dev/core/src/com/google/gwt/dev/shell/BrowserWidgetHost.java +++ b/dev/core/src/com/google/gwt/dev/shell/BrowserWidgetHost.java
@@ -42,8 +42,8 @@ void compile(String[] modules) throws UnableToCompleteException; // Factor this out if BrowserWidget becomes decoupled from hosted mode - ModuleSpaceHost createModuleSpaceHost(BrowserWidget widget, String moduleName) - throws UnableToCompleteException; + ModuleSpaceHost createModuleSpaceHost(TreeLogger logger, + BrowserWidget widget, String moduleName) throws UnableToCompleteException; TreeLogger getLogger();
diff --git a/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java b/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java index 1671046..10aedbc 100644 --- a/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java +++ b/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java
@@ -81,14 +81,17 @@ private final Object key; + private final TreeLogger logger; + private final String moduleName; - protected ModuleSpace(ModuleSpaceHost host, String moduleName, Object key) { + protected ModuleSpace(TreeLogger logger, ModuleSpaceHost host, + String moduleName, Object key) { this.host = host; this.moduleName = moduleName; this.key = key; - TreeLogger hostLogger = host.getLogger(); - threadLocalLogger.set(hostLogger); + this.logger = logger; + threadLocalLogger.set(host.getLogger()); } public void dispose() { @@ -247,10 +250,13 @@ Object[] args) throws Throwable { JsValue result = invokeNative(name, jthis, types, args); if (!result.isUndefined()) { - getLogger().log( + logger.log( TreeLogger.WARN, - "JSNI method '" + name + "' returned a value of type " - + result.getTypeString() + " but was declared void; it should not have returned a value at all", + "JSNI method '" + + name + + "' returned a value of type " + + result.getTypeString() + + " but was declared void; it should not have returned a value at all", null); } } @@ -259,12 +265,12 @@ * Allows client-side code to log to the tree logger. */ public void log(String message, Throwable e) { - TreeLogger logger = host.getLogger(); TreeLogger.Type type = TreeLogger.INFO; if (e != null) { type = TreeLogger.ERROR; } - logger.log(type, message, e); + // Log at the top level for visibility. + getLogger().log(type, message, e); } /** @@ -465,7 +471,7 @@ protected String rebind(String sourceName) throws UnableToCompleteException { try { - String result = host.rebind(host.getLogger(), sourceName); + String result = host.rebind(logger, sourceName); if (result != null) { return result; } else { @@ -480,7 +486,8 @@ } private String composeResultErrorMsgPrefix(String name, String typePhrase) { - return "Something other than " + typePhrase + " was returned from JSNI method '" + name + "'"; + return "Something other than " + typePhrase + + " was returned from JSNI method '" + name + "'"; } private boolean isUserFrame(StackTraceElement element) {
diff --git a/dev/linux/src/com/google/gwt/dev/shell/moz/BrowserWidgetMoz.java b/dev/linux/src/com/google/gwt/dev/shell/moz/BrowserWidgetMoz.java index e1f8aef..addbfb0 100644 --- a/dev/linux/src/com/google/gwt/dev/shell/moz/BrowserWidgetMoz.java +++ b/dev/linux/src/com/google/gwt/dev/shell/moz/BrowserWidgetMoz.java
@@ -37,34 +37,32 @@ private class ExternalObjectImpl implements ExternalObject { public boolean gwtOnLoad(int scriptObject, String moduleName, String version) { - try { - if (moduleName == null) { - // Indicates one or more modules are being unloaded. - // - handleUnload(scriptObject); - return true; - } + if (moduleName == null) { + // Indicates one or more modules are being unloaded. + return handleUnload(scriptObject); + } + TreeLogger logger = getHost().getLogger().branch(TreeLogger.DEBUG, + "Loading an instance of module '" + moduleName + "'"); + try { if (!validHostedHtmlVersion(version)) { return false; } Object key = new Integer(scriptObject); // Attach a new ModuleSpace to make it programmable. - // - ModuleSpaceHost msh = getHost().createModuleSpaceHost( + ModuleSpaceHost msh = getHost().createModuleSpaceHost(logger, BrowserWidgetMoz.this, moduleName); - ModuleSpace moduleSpace = new ModuleSpaceMoz(msh, scriptObject, + ModuleSpace moduleSpace = new ModuleSpaceMoz(logger, msh, scriptObject, moduleName, key); - attachModuleSpace(moduleSpace); + attachModuleSpace(logger, moduleSpace); return true; } catch (Throwable e) { // We do catch Throwable intentionally because there are a ton of things // that can go wrong trying to load a module, including Error-derived // things like NoClassDefFoundError. - // - getHost().getLogger().log(TreeLogger.ERROR, - "Failure to load module '" + moduleName + "'", e); + logger.log(TreeLogger.ERROR, "Failure to load module '" + moduleName + + "'", e); return false; } } @@ -85,12 +83,19 @@ * * @param scriptObject window to unload, 0 if all */ - protected void handleUnload(int scriptObject) { - Integer key = null; - if (scriptObject != 0) { - key = new Integer(scriptObject); + protected boolean handleUnload(int scriptObject) { + try { + Integer key = null; + if (scriptObject != 0) { + key = new Integer(scriptObject); + } + doUnload(key); + return true; + } catch (Throwable e) { + getHost().getLogger().log(TreeLogger.ERROR, + "Failure to unload modules", e); + return false; } - doUnload(key); } }
diff --git a/dev/linux/src/com/google/gwt/dev/shell/moz/ModuleSpaceMoz.java b/dev/linux/src/com/google/gwt/dev/shell/moz/ModuleSpaceMoz.java index b6de40f..6ee992e 100644 --- a/dev/linux/src/com/google/gwt/dev/shell/moz/ModuleSpaceMoz.java +++ b/dev/linux/src/com/google/gwt/dev/shell/moz/ModuleSpaceMoz.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.dev.shell.moz; +import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.dev.shell.CompilingClassLoader; import com.google.gwt.dev.shell.JsValue; import com.google.gwt.dev.shell.JsValueGlue; @@ -32,9 +33,9 @@ /** * Constructs a browser interface for use with a Mozilla global window object. */ - public ModuleSpaceMoz(ModuleSpaceHost host, int scriptGlobalObject, - String moduleName, Object key) { - super(host, moduleName, key); + public ModuleSpaceMoz(TreeLogger logger, ModuleSpaceHost host, + int scriptGlobalObject, String moduleName, Object key) { + super(logger, host, moduleName, key); // Hang on to the parent window. //
diff --git a/dev/mac/src/com/google/gwt/dev/shell/mac/BrowserWidgetSaf.java b/dev/mac/src/com/google/gwt/dev/shell/mac/BrowserWidgetSaf.java index 3d0fe1a..a0097f1 100644 --- a/dev/mac/src/com/google/gwt/dev/shell/mac/BrowserWidgetSaf.java +++ b/dev/mac/src/com/google/gwt/dev/shell/mac/BrowserWidgetSaf.java
@@ -52,13 +52,14 @@ } public boolean gwtOnLoad(int scriptObject, String moduleName, String version) { - try { - if (moduleName == null) { - // Indicates one or more modules are being unloaded. - handleUnload(scriptObject); - return true; - } + if (moduleName == null) { + // Indicates one or more modules are being unloaded. + return handleUnload(scriptObject); + } + TreeLogger logger = getHost().getLogger().branch(TreeLogger.DEBUG, + "Loading an instance of module '" + moduleName + "'"); + try { if (!validHostedHtmlVersion(version)) { return false; } @@ -66,7 +67,7 @@ // Attach a new ModuleSpace to make it programmable. // Integer key = new Integer(scriptObject); - ModuleSpaceHost msh = getHost().createModuleSpaceHost( + ModuleSpaceHost msh = getHost().createModuleSpaceHost(logger, BrowserWidgetSaf.this, moduleName); /* @@ -76,17 +77,17 @@ */ final int globalContext = globalContexts.get(scriptObject).intValue(); - ModuleSpace moduleSpace = new ModuleSpaceSaf(msh, scriptObject, + ModuleSpace moduleSpace = new ModuleSpaceSaf(logger, msh, scriptObject, globalContext, moduleName, key); - attachModuleSpace(moduleSpace); + attachModuleSpace(logger, moduleSpace); return true; } catch (Throwable e) { // We do catch Throwable intentionally because there are a ton of things // that can go wrong trying to load a module, including Error-dervied // things like NoClassDefFoundError. // - getHost().getLogger().log(TreeLogger.ERROR, - "Failure to load module '" + moduleName + "'", e); + logger.log(TreeLogger.ERROR, "Failure to load module '" + moduleName + + "'", e); return false; } } @@ -117,12 +118,19 @@ * * @param scriptObject window to unload, 0 if all */ - protected void handleUnload(int scriptObject) { - Integer key = null; - if (scriptObject != 0) { - key = new Integer(scriptObject); + protected boolean handleUnload(int scriptObject) { + try { + Integer key = null; + if (scriptObject != 0) { + key = new Integer(scriptObject); + } + doUnload(key); + return true; + } catch (Throwable e) { + getHost().getLogger().log(TreeLogger.ERROR, + "Failure to unload modules", e); + return false; } - doUnload(key); } }
diff --git a/dev/mac/src/com/google/gwt/dev/shell/mac/ModuleSpaceSaf.java b/dev/mac/src/com/google/gwt/dev/shell/mac/ModuleSpaceSaf.java index 1959d43..d4eaa4a 100644 --- a/dev/mac/src/com/google/gwt/dev/shell/mac/ModuleSpaceSaf.java +++ b/dev/mac/src/com/google/gwt/dev/shell/mac/ModuleSpaceSaf.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.dev.shell.mac; +import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.dev.shell.CompilingClassLoader; import com.google.gwt.dev.shell.JsValue; import com.google.gwt.dev.shell.JsValueGlue; @@ -36,9 +37,10 @@ * @param moduleName name of the module * @param key unique key for this instance of the module */ - public ModuleSpaceSaf(ModuleSpaceHost host, int scriptGlobalObject, - int scriptGlobalContext, String moduleName, Object key) { - super(host, moduleName, key); + public ModuleSpaceSaf(TreeLogger logger, ModuleSpaceHost host, + int scriptGlobalObject, int scriptGlobalContext, String moduleName, + Object key) { + super(logger, host, moduleName, key); // Hang on to the global execution state. // @@ -86,7 +88,7 @@ int argc = args.length; int[] argv = new int[argc]; // GC protect passed arguments on the Java stack for call duration. - JsValueSaf[] jsValueArgs = new JsValueSaf[argc]; + JsValueSaf[] jsValueArgs = new JsValueSaf[argc]; for (int i = 0; i < argc; ++i) { JsValueSaf jsValue = jsValueArgs[i] = new JsValueSaf(); JsValueGlue.set(jsValue, isolatedClassLoader, types[i], args[i]);
diff --git a/dev/windows/src/com/google/gwt/dev/shell/ie/BrowserWidgetIE6.java b/dev/windows/src/com/google/gwt/dev/shell/ie/BrowserWidgetIE6.java index 6e3aa62..ead6a81 100644 --- a/dev/windows/src/com/google/gwt/dev/shell/ie/BrowserWidgetIE6.java +++ b/dev/windows/src/com/google/gwt/dev/shell/ie/BrowserWidgetIE6.java
@@ -51,13 +51,14 @@ */ public boolean gwtOnLoad(IDispatch frameWnd, String moduleName, String version) { - try { - if (moduleName == null) { - // Indicates one or more modules are being unloaded. - handleUnload(frameWnd); - return true; - } + if (moduleName == null) { + // Indicates one or more modules are being unloaded. + return handleUnload(frameWnd); + } + TreeLogger logger = getHost().getLogger().branch(TreeLogger.DEBUG, + "Loading an instance of module '" + moduleName + "'"); + try { if (!validHostedHtmlVersion(version)) { throw new HResultException(COM.E_INVALIDARG); } @@ -69,19 +70,19 @@ // Attach a new ModuleSpace to make it programmable. // - ModuleSpaceHost msh = getHost().createModuleSpaceHost( + ModuleSpaceHost msh = getHost().createModuleSpaceHost(logger, BrowserWidgetIE6.this, moduleName); - ModuleSpaceIE6 moduleSpace = new ModuleSpaceIE6(msh, frameWnd, + ModuleSpaceIE6 moduleSpace = new ModuleSpaceIE6(logger, msh, frameWnd, moduleName, key); - attachModuleSpace(moduleSpace); + attachModuleSpace(logger, moduleSpace); return true; } catch (Throwable e) { // We do catch Throwable intentionally because there are a ton of things // that can go wrong trying to load a module, including Error-derived // things like NoClassDefFoundError. // - getHost().getLogger().log(TreeLogger.ERROR, - "Failure to load module '" + moduleName + "'", e); + logger.log(TreeLogger.ERROR, "Failure to load module '" + moduleName + + "'", e); return false; } } @@ -122,12 +123,19 @@ * * @param frameWnd window to unload, null if all */ - protected void handleUnload(IDispatch frameWnd) { - Integer key = null; - if (frameWnd != null) { - key = new Integer(getIntProperty(frameWnd, "__gwt_module_id")); + protected boolean handleUnload(IDispatch frameWnd) { + try { + Integer key = null; + if (frameWnd != null) { + key = new Integer(getIntProperty(frameWnd, "__gwt_module_id")); + } + doUnload(key); + return true; + } catch (Throwable e) { + getHost().getLogger().log(TreeLogger.ERROR, + "Failure to unload modules", e); + return false; } - doUnload(key); } @Override
diff --git a/dev/windows/src/com/google/gwt/dev/shell/ie/ModuleSpaceIE6.java b/dev/windows/src/com/google/gwt/dev/shell/ie/ModuleSpaceIE6.java index 2ff7941..9a91973 100644 --- a/dev/windows/src/com/google/gwt/dev/shell/ie/ModuleSpaceIE6.java +++ b/dev/windows/src/com/google/gwt/dev/shell/ie/ModuleSpaceIE6.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.dev.shell.ie; +import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.dev.shell.CompilingClassLoader; import com.google.gwt.dev.shell.JsValue; import com.google.gwt.dev.shell.ModuleSpace; @@ -85,9 +86,9 @@ * * @param moduleName */ - public ModuleSpaceIE6(ModuleSpaceHost host, IDispatch scriptFrameWindow, - String moduleName, Object key) { - super(host, moduleName, key); + public ModuleSpaceIE6(TreeLogger logger, ModuleSpaceHost host, + IDispatch scriptFrameWindow, String moduleName, Object key) { + super(logger, host, moduleName, key); window = new OleAutomation(scriptFrameWindow); }