Big refactoring of StandardGeneratorContext so that only one instance is created during a compile. Many things now share the same StandardGeneratorContext, which allows .finish() calls to be chunked, which is somewhat faster in some cases. Also, a lot of plumbing gets cleaner because we avoid situations where we had to pass around all the components needed to create a new StandardGeneratorContext on the fly. Review by: spoon git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5340 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/Precompile.java b/dev/core/src/com/google/gwt/dev/Precompile.java index 6736b30..21b5f1e 100644 --- a/dev/core/src/com/google/gwt/dev/Precompile.java +++ b/dev/core/src/com/google/gwt/dev/Precompile.java
@@ -35,8 +35,8 @@ import com.google.gwt.dev.jjs.JavaToJavaScriptCompiler; import com.google.gwt.dev.jjs.JsOutputOption; import com.google.gwt.dev.jjs.UnifiedAst; -import com.google.gwt.dev.jjs.impl.FragmentLoaderCreator; import com.google.gwt.dev.shell.CheckForUpdates; +import com.google.gwt.dev.shell.StandardGeneratorContext; import com.google.gwt.dev.shell.StandardRebindOracle; import com.google.gwt.dev.shell.CheckForUpdates.UpdateResult; import com.google.gwt.dev.util.Memory; @@ -255,6 +255,7 @@ private static class DistillerRebindPermutationOracle implements RebindPermutationOracle { + private StandardGeneratorContext generatorContext; private Permutation[] permutations; private StaticPropertyOracle[] propertyOracles; private RebindOracle[] rebindOracles; @@ -265,6 +266,8 @@ permutations = new Permutation[perms.size()]; propertyOracles = new StaticPropertyOracle[perms.size()]; rebindOracles = new RebindOracle[perms.size()]; + generatorContext = new StandardGeneratorContext(compilationState, module, + genDir, generatorResourcesDir, generatorArtifacts); BindingProperty[] orderedProps = perms.getOrderedProperties(); SortedSet<ConfigurationProperty> configPropSet = module.getProperties().getConfigurationProperties(); ConfigurationProperty[] configProps = configPropSet.toArray(new ConfigurationProperty[configPropSet.size()]); @@ -273,9 +276,8 @@ String[] orderedPropValues = perms.getOrderedPropertyValues(i); propertyOracles[i] = new StaticPropertyOracle(orderedProps, orderedPropValues, configProps); - rebindOracles[i] = new StandardRebindOracle(compilationState, - propertyOracles[i], module, rules, genDir, generatorResourcesDir, - generatorArtifacts); + rebindOracles[i] = new StandardRebindOracle(propertyOracles[i], rules, + generatorContext); permutations[i] = new Permutation(i, propertyOracles[i]); } } @@ -298,6 +300,10 @@ return Util.toArray(String.class, answers); } + public StandardGeneratorContext getGeneratorContext() { + return generatorContext; + } + public int getPermuationCount() { return rebindOracles.length; } @@ -420,12 +426,8 @@ module, compilationState, generatorArtifacts, new PropertyPermutations(module.getProperties()), genDir, generatorResourcesDir); - FragmentLoaderCreator fragmentLoaderCreator = new FragmentLoaderCreator( - compilationState, module, genDir, generatorResourcesDir, - generatorArtifacts); - JavaToJavaScriptCompiler.precompile(logger, module, rpo, - fragmentLoaderCreator, declEntryPts, additionalRootTypes, jjsOptions, - true); + JavaToJavaScriptCompiler.precompile(logger, module, rpo, declEntryPts, + additionalRootTypes, jjsOptions, true); return true; } catch (UnableToCompleteException e) { // Already logged. @@ -459,12 +461,9 @@ generatedArtifacts, new PropertyPermutations(module.getProperties(), firstPerm, numPerms), genDir, generatorResourcesDir); - FragmentLoaderCreator fragmentLoaderCreator = new FragmentLoaderCreator( - compilationState, module, genDir, generatorResourcesDir, - generatedArtifacts); PerfLogger.start("Precompile"); UnifiedAst unifiedAst = JavaToJavaScriptCompiler.precompile(logger, - module, rpo, fragmentLoaderCreator, declEntryPts, null, jjsOptions, + module, rpo, declEntryPts, null, jjsOptions, rpo.getPermuationCount() == 1); PerfLogger.end();
diff --git a/dev/core/src/com/google/gwt/dev/jdt/RebindPermutationOracle.java b/dev/core/src/com/google/gwt/dev/jdt/RebindPermutationOracle.java index a8b010c..c1c9baf 100644 --- a/dev/core/src/com/google/gwt/dev/jdt/RebindPermutationOracle.java +++ b/dev/core/src/com/google/gwt/dev/jdt/RebindPermutationOracle.java
@@ -17,6 +17,7 @@ import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.UnableToCompleteException; +import com.google.gwt.dev.shell.StandardGeneratorContext; /** * Abstract the process of determining all of the possible deferred binding @@ -29,4 +30,9 @@ */ String[] getAllPossibleRebindAnswers(TreeLogger logger, String sourceTypeName) throws UnableToCompleteException; + + /** + * Returns the global StandardGeneratorContext. + */ + StandardGeneratorContext getGeneratorContext(); }
diff --git a/dev/core/src/com/google/gwt/dev/jdt/WebModeCompilerFrontEnd.java b/dev/core/src/com/google/gwt/dev/jdt/WebModeCompilerFrontEnd.java index 8aca693..e98eaf2 100644 --- a/dev/core/src/com/google/gwt/dev/jdt/WebModeCompilerFrontEnd.java +++ b/dev/core/src/com/google/gwt/dev/jdt/WebModeCompilerFrontEnd.java
@@ -37,6 +37,7 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -51,12 +52,10 @@ public static CompilationUnitDeclaration[] getCompilationUnitDeclarations( TreeLogger logger, String[] seedTypeNames, CompilationState compilationState, - RebindPermutationOracle rebindPermOracle, - FragmentLoaderCreator fragmentLoaderCreator) + RebindPermutationOracle rebindPermOracle) throws UnableToCompleteException { - return new WebModeCompilerFrontEnd(compilationState, rebindPermOracle, - fragmentLoaderCreator).getCompilationUnitDeclarations(logger, - seedTypeNames); + return new WebModeCompilerFrontEnd(compilationState, rebindPermOracle).getCompilationUnitDeclarations( + logger, seedTypeNames); } private final FragmentLoaderCreator fragmentLoaderCreator; @@ -69,11 +68,11 @@ * compiler than WebModeCompilerFrontEnd currently has. */ private WebModeCompilerFrontEnd(CompilationState compilationState, - RebindPermutationOracle rebindPermOracle, - FragmentLoaderCreator fragmentLoaderCreator) { + RebindPermutationOracle rebindPermOracle) { super(compilationState, false); this.rebindPermOracle = rebindPermOracle; - this.fragmentLoaderCreator = fragmentLoaderCreator; + this.fragmentLoaderCreator = new FragmentLoaderCreator( + rebindPermOracle.getGeneratorContext()); } /** @@ -177,61 +176,18 @@ FindDeferredBindingSitesVisitor v = new FindDeferredBindingSitesVisitor(); cud.traverse(v, cud.scope); Map<String, MessageSendSite> requestedTypes = v.getSites(); + Map<String, String[]> rebindAnswers = new HashMap<String, String[]>(); + boolean doFinish = false; // For each, ask the host for every possible deferred binding answer. for (String reqType : requestedTypes.keySet()) { MessageSendSite site = requestedTypes.get(reqType); - try { String[] resultTypes = rebindPermOracle.getAllPossibleRebindAnswers( logger, reqType); - // Check that each result is instantiable. - for (int i = 0; i < resultTypes.length; ++i) { - String typeName = resultTypes[i]; - - // This causes the compiler to find the additional type, possibly - // winding its back to ask for the compilation unit from the source - // oracle. - ReferenceBinding type = resolvePossiblyNestedType(typeName); - - // Sanity check rebind results. - if (type == null) { - FindDeferredBindingSitesVisitor.reportRebindProblem(site, - "Rebind result '" + typeName + "' could not be found"); - continue; - } - if (!type.isClass()) { - FindDeferredBindingSitesVisitor.reportRebindProblem(site, - "Rebind result '" + typeName + "' must be a class"); - continue; - } - if (type.isAbstract()) { - FindDeferredBindingSitesVisitor.reportRebindProblem(site, - "Rebind result '" + typeName + "' cannot be abstract"); - continue; - } - if (type.isNestedType() && !type.isStatic()) { - FindDeferredBindingSitesVisitor.reportRebindProblem(site, - "Rebind result '" + typeName - + "' cannot be a non-static nested class"); - continue; - } - if (type.isLocalType()) { - FindDeferredBindingSitesVisitor.reportRebindProblem(site, - "Rebind result '" + typeName + "' cannot be a local class"); - continue; - } - // Look for a noArg ctor. - MethodBinding noArgCtor = type.getExactConstructor(TypeBinding.NO_PARAMETERS); - if (noArgCtor == null) { - FindDeferredBindingSitesVisitor.reportRebindProblem(site, - "Rebind result '" + typeName - + "' has no default (zero argument) constructors"); - continue; - } - dependentTypeNames.add(typeName); - } + rebindAnswers.put(reqType, resultTypes); Collections.addAll(dependentTypeNames, resultTypes); + doFinish = true; } catch (UnableToCompleteException e) { FindDeferredBindingSitesVisitor.reportRebindProblem(site, "Failed to resolve '" + reqType + "' via deferred binding"); @@ -247,20 +203,83 @@ * between loaders and runAsync sites will be made in ReplaceRunAsyncs. */ for (MessageSendSite site : v.getRunAsyncSites()) { - FragmentLoaderCreator loaderCreator = fragmentLoaderCreator; String resultType; try { - resultType = loaderCreator.create(logger); + resultType = fragmentLoaderCreator.create(logger); dependentTypeNames.add(resultType); + doFinish = true; } catch (UnableToCompleteException e) { FindDeferredBindingSitesVisitor.reportRebindProblem(site, "Failed to create a runAsync fragment loader"); } } + if (doFinish) { + try { + rebindPermOracle.getGeneratorContext().finish(logger); + } catch (UnableToCompleteException e) { + throw new RuntimeException("Unable to commit generated files", e); + } + } + + // Sanity check all rebind answers. + for (String reqType : requestedTypes.keySet()) { + MessageSendSite site = requestedTypes.get(reqType); + String[] resultTypes = rebindAnswers.get(reqType); + // Check that each result is instantiable. + for (String typeName : resultTypes) { + checkRebindResultInstantiable(site, typeName); + } + } + return dependentTypeNames.toArray(Empty.STRINGS); } + private void checkRebindResultInstantiable(MessageSendSite site, + String typeName) { + /* + * This causes the compiler to find the additional type, possibly winding + * its back to ask for the compilation unit from the source oracle. + */ + ReferenceBinding type = resolvePossiblyNestedType(typeName); + + // Sanity check rebind results. + if (type == null) { + FindDeferredBindingSitesVisitor.reportRebindProblem(site, + "Rebind result '" + typeName + "' could not be found"); + return; + } + if (!type.isClass()) { + FindDeferredBindingSitesVisitor.reportRebindProblem(site, + "Rebind result '" + typeName + "' must be a class"); + return; + } + if (type.isAbstract()) { + FindDeferredBindingSitesVisitor.reportRebindProblem(site, + "Rebind result '" + typeName + "' cannot be abstract"); + return; + } + if (type.isNestedType() && !type.isStatic()) { + FindDeferredBindingSitesVisitor.reportRebindProblem(site, + "Rebind result '" + typeName + + "' cannot be a non-static nested class"); + return; + } + if (type.isLocalType()) { + FindDeferredBindingSitesVisitor.reportRebindProblem(site, + "Rebind result '" + typeName + "' cannot be a local class"); + return; + } + // Look for a noArg ctor. + MethodBinding noArgCtor = type.getExactConstructor(TypeBinding.NO_PARAMETERS); + if (noArgCtor == null) { + FindDeferredBindingSitesVisitor.reportRebindProblem(site, + "Rebind result '" + typeName + + "' has no default (zero argument) constructors"); + return; + } + } + /** * Get the CompilationUnit for a named type or throw an * UnableToCompleteException.
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java index b35872b..e8347c4 100644 --- a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java +++ b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
@@ -339,7 +339,6 @@ * @param logger the logger to use * @param module the module to compile * @param rpo the RebindPermutationOracle - * @param fragmentLoaderCreator a FragmentLoaderCreator * @param declEntryPts the set of entry classes declared in a GWT module; * these will be automatically rebound * @param additionalRootTypes additional classes that should serve as code @@ -352,8 +351,8 @@ * {@link OutOfMemoryError} occurs */ public static UnifiedAst precompile(TreeLogger logger, ModuleDef module, - RebindPermutationOracle rpo, FragmentLoaderCreator fragmentLoaderCreator, - String[] declEntryPts, String[] additionalRootTypes, JJSOptions options, + RebindPermutationOracle rpo, String[] declEntryPts, + String[] additionalRootTypes, JJSOptions options, boolean singlePermutation) throws UnableToCompleteException { if (additionalRootTypes == null) { @@ -381,7 +380,7 @@ // CompilationUnitDeclaration[] goldenCuds = WebModeCompilerFrontEnd.getCompilationUnitDeclarations( logger, allRootTypes.toArray(new String[0]), - module.getCompilationState(logger), rpo, fragmentLoaderCreator); + module.getCompilationState(logger), rpo); // Free up memory. if (!options.isCompilationStateRetained()) {
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/FragmentLoaderCreator.java b/dev/core/src/com/google/gwt/dev/jjs/impl/FragmentLoaderCreator.java index a650e28..85b74c1 100644 --- a/dev/core/src/com/google/gwt/dev/jjs/impl/FragmentLoaderCreator.java +++ b/dev/core/src/com/google/gwt/dev/jjs/impl/FragmentLoaderCreator.java
@@ -19,16 +19,12 @@ import com.google.gwt.core.ext.PropertyOracle; 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.dev.cfg.BindingProperty; import com.google.gwt.dev.cfg.ConfigurationProperty; -import com.google.gwt.dev.cfg.PublicOracle; import com.google.gwt.dev.cfg.StaticPropertyOracle; -import com.google.gwt.dev.javac.CompilationState; import com.google.gwt.dev.jdt.FindDeferredBindingSitesVisitor; import com.google.gwt.dev.shell.StandardGeneratorContext; -import java.io.File; import java.io.PrintWriter; import java.util.List; @@ -51,31 +47,26 @@ private static final String UNCAUGHT_EXCEPTION_HANDLER_CLASS = GWT_CLASS + ".UncaughtExceptionHandler"; - private final ArtifactSet artifactSet; - private final CompilationState compilationState; - private int entryNumber; - private final File genDir; - private final File outDir; - private final PublicOracle publicOracle; + private final StandardGeneratorContext context; + private int entryNumber = 0; + private final PropertyOracle propOracle; /** * Construct a FragmentLoaderCreator. The reason it needs so many parameters * is that it uses generator infrastructure. */ - public FragmentLoaderCreator(CompilationState compilationState, - PublicOracle publicOracle, File genDir, File moduleOutDir, - ArtifactSet artifactSet) { - this.compilationState = compilationState; - this.publicOracle = publicOracle; - this.genDir = genDir; - this.outDir = moduleOutDir; - this.artifactSet = artifactSet; + public FragmentLoaderCreator(StandardGeneratorContext context) { + // An empty property oracle is fine, because fragment loaders aren't + // affected by properties anyway + this.propOracle = new StaticPropertyOracle(new BindingProperty[0], + new String[0], new ConfigurationProperty[0]); + this.context = context; } public String create(TreeLogger logger) throws UnableToCompleteException { - chooseEntryNumber(); - StandardGeneratorContext context = makeGeneratorContext(); - + // First entry is 1. + ++entryNumber; + context.setPropertyOracle(propOracle); PrintWriter loaderWriter = getSourceWriterForLoader(logger, context); if (loaderWriter == null) { logger.log(TreeLogger.ERROR, "Failed to create island loader named " @@ -97,22 +88,9 @@ writeCallbackListClass(logger, context); writeLoaderSuperclass(logger, context); - context.finish(logger); - return getLoaderQualifiedName(); } - /** - * Pick the lowest-numbered entry number that has not yet had loaders - * generated. - */ - private void chooseEntryNumber() { - entryNumber = 1; - while (compilationState.getTypeOracle().findType(getLoaderQualifiedName()) != null) { - entryNumber++; - } - } - private void generateLoaderFields(PrintWriter srcWriter) { srcWriter.println("// Whether the code for this entry point has loaded"); srcWriter.println("private static boolean loaded = false;"); @@ -212,7 +190,8 @@ + FindDeferredBindingSitesVisitor.MAGIC_CLASS + ".getUncaughtExceptionHandler();"); - srcWriter.println(" " + getCallbackListSimpleName() + " next = callbacksHead;"); + srcWriter.println(" " + getCallbackListSimpleName() + + " next = callbacksHead;"); srcWriter.println(" callbacksHead = callbacksHead.next;"); srcWriter.println(" if (callbacksHead == null) {"); srcWriter.println(" callbacksTail = null;"); @@ -286,16 +265,6 @@ return printWriter; } - private StandardGeneratorContext makeGeneratorContext() { - // An empty property oracle is fine, because fragment loaders aren't - // affected by properties anyway - PropertyOracle propOracle = new StaticPropertyOracle( - new BindingProperty[0], new String[0], new ConfigurationProperty[0]); - StandardGeneratorContext context = new StandardGeneratorContext( - compilationState, propOracle, publicOracle, genDir, outDir, artifactSet); - return context; - } - private void writeCallbackListClass(TreeLogger logger, GeneratorContext ctx) throws UnableToCompleteException { PrintWriter printWriter = ctx.tryCreate(logger, getPackage(), @@ -318,10 +287,10 @@ /** * Create a stand-in superclass of the actual loader. This is used to keep the - * liveness analyzer from thinking the real <code>runCallbacks()</code> method - * is available until <code>onLoad</code> has been called and the real loader - * instantiated. A little work on TypeTightener could prevent the need for - * this class. + * liveness analyzer from thinking the real <code>runCallbacks()</code> + * method is available until <code>onLoad</code> has been called and the + * real loader instantiated. A little work on TypeTightener could prevent the + * need for this class. */ private void writeLoaderSuperclass(TreeLogger logger, GeneratorContext ctx) throws UnableToCompleteException {
diff --git a/dev/core/src/com/google/gwt/dev/shell/ShellModuleSpaceHost.java b/dev/core/src/com/google/gwt/dev/shell/ShellModuleSpaceHost.java index 0a526c3..04d6967 100644 --- a/dev/core/src/com/google/gwt/dev/shell/ShellModuleSpaceHost.java +++ b/dev/core/src/com/google/gwt/dev/shell/ShellModuleSpaceHost.java
@@ -90,8 +90,10 @@ // It has to wait until now because we need to inject javascript. // Rules rules = module.getRules(); - rebindOracle = new StandardRebindOracle(module.getCompilationState(logger), - propOracle, module, rules, genDir, shellDir, new ArtifactSet()); + StandardGeneratorContext genCtx = new StandardGeneratorContext( + module.getCompilationState(logger), module, genDir, shellDir, + new ArtifactSet()); + rebindOracle = new StandardRebindOracle(propOracle, rules, genCtx); // Create a completely isolated class loader which owns all classes // associated with a particular module. This effectively builds a
diff --git a/dev/core/src/com/google/gwt/dev/shell/StandardGeneratorContext.java b/dev/core/src/com/google/gwt/dev/shell/StandardGeneratorContext.java index ec88f90..5309c38 100644 --- a/dev/core/src/com/google/gwt/dev/shell/StandardGeneratorContext.java +++ b/dev/core/src/com/google/gwt/dev/shell/StandardGeneratorContext.java
@@ -263,7 +263,7 @@ private final Map<OutputStream, PendingResource> pendingResourcesByOutputStream = new IdentityHashMap<OutputStream, PendingResource>(); - private final PropertyOracle propOracle; + private transient PropertyOracle propOracle; private final PublicOracle publicOracle; @@ -274,10 +274,9 @@ * available in the supplied type oracle although it isn't strictly required. */ public StandardGeneratorContext(CompilationState compilationState, - PropertyOracle propOracle, PublicOracle publicOracle, File genDir, - File generatorResourcesDir, ArtifactSet allGeneratedArtifacts) { + PublicOracle publicOracle, File genDir, File generatorResourcesDir, + ArtifactSet allGeneratedArtifacts) { this.compilationState = compilationState; - this.propOracle = propOracle; this.publicOracle = publicOracle; this.genDir = genDir; this.generatorResourcesDir = generatorResourcesDir; @@ -425,6 +424,14 @@ this.currentGenerator = currentGenerator; } + /** + * Sets the current transient property oracle to answer current property + * questions. + */ + public void setPropertyOracle(PropertyOracle propOracle) { + this.propOracle = propOracle; + } + public final PrintWriter tryCreate(TreeLogger logger, String packageName, String simpleTypeName) { String typeName; @@ -442,12 +449,8 @@ return null; } - // Has anybody tried to create this type during this iteration? + // Type recently generated? if (newlyGeneratedTypeNames.contains(typeName)) { - final String msg = "A request to create type '" - + typeName - + "' was received while the type itself was being created; this might be a generator or configuration bug"; - logger.log(TreeLogger.WARN, msg, null); return null; }
diff --git a/dev/core/src/com/google/gwt/dev/shell/StandardRebindOracle.java b/dev/core/src/com/google/gwt/dev/shell/StandardRebindOracle.java index 3d27016..d466458 100644 --- a/dev/core/src/com/google/gwt/dev/shell/StandardRebindOracle.java +++ b/dev/core/src/com/google/gwt/dev/shell/StandardRebindOracle.java
@@ -19,14 +19,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.dev.cfg.PublicOracle; import com.google.gwt.dev.cfg.Rule; import com.google.gwt.dev.cfg.Rules; -import com.google.gwt.dev.javac.CompilationState; import com.google.gwt.dev.jdt.RebindOracle; import com.google.gwt.dev.util.Util; -import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -45,24 +42,21 @@ */ private final class Rebinder { - private final StandardGeneratorContext genCtx; - private final Set<Rule> usedRules = new HashSet<Rule>(); private final List<String> usedTypeNames = new ArrayList<String>(); - public Rebinder() { - genCtx = new StandardGeneratorContext(compilationState, propOracle, - publicOracle, genDir, generatorResourcesDir, allGeneratedArtifacts); - } - public String rebind(TreeLogger logger, String typeName, ArtifactAcceptor artifactAcceptor) throws UnableToCompleteException { + genCtx.setPropertyOracle(propOracle); String result = tryRebind(logger, typeName); - ArtifactSet newlyGeneratedArtifacts = genCtx.finish(logger); - if (!newlyGeneratedArtifacts.isEmpty() && artifactAcceptor != null) { - artifactAcceptor.accept(logger, newlyGeneratedArtifacts); + if (artifactAcceptor != null) { + // Go ahead and call finish() to accept new artifacts. + ArtifactSet newlyGeneratedArtifacts = genCtx.finish(logger); + if (!newlyGeneratedArtifacts.isEmpty()) { + artifactAcceptor.accept(logger, newlyGeneratedArtifacts); + } } if (result == null) { result = typeName; @@ -128,32 +122,19 @@ } } - private final ArtifactSet allGeneratedArtifacts; - private final Map<String, String> cache = new HashMap<String, String>(); - private final CompilationState compilationState; - - private final File genDir; - - private final File generatorResourcesDir; + private final StandardGeneratorContext genCtx; private final PropertyOracle propOracle; - private final PublicOracle publicOracle; - private final Rules rules; - public StandardRebindOracle(CompilationState compilationState, - PropertyOracle propOracle, PublicOracle publicOracle, Rules rules, - File genDir, File generatorResourcesDir, ArtifactSet allGeneratedArtifacts) { - this.compilationState = compilationState; + public StandardRebindOracle(PropertyOracle propOracle, Rules rules, + StandardGeneratorContext genCtx) { this.propOracle = propOracle; - this.publicOracle = publicOracle; this.rules = rules; - this.genDir = genDir; - this.generatorResourcesDir = generatorResourcesDir; - this.allGeneratedArtifacts = allGeneratedArtifacts; + this.genCtx = genCtx; } public String rebind(TreeLogger logger, String typeName)
diff --git a/dev/core/test/com/google/gwt/dev/shell/StandardGeneratorContextTest.java b/dev/core/test/com/google/gwt/dev/shell/StandardGeneratorContextTest.java index 05fc32a..18d7685 100644 --- a/dev/core/test/com/google/gwt/dev/shell/StandardGeneratorContextTest.java +++ b/dev/core/test/com/google/gwt/dev/shell/StandardGeneratorContextTest.java
@@ -154,8 +154,9 @@ public StandardGeneratorContextTest() { tempGenDir = createTempDir("gwt-gen-"); tempOutDir = createTempDir("gwt-out-"); - genCtx = new StandardGeneratorContext(mockCompilationState, mockPropOracle, + genCtx = new StandardGeneratorContext(mockCompilationState, mockPublicOracle, tempGenDir, tempOutDir, artifactSet); + genCtx.setPropertyOracle(mockPropOracle); genCtx.setCurrentGenerator(Generator.class); }