Revision: 6812
Author: [email protected]
Date: Tue Nov 10 12:03:27 2009
Log: Merging tr...@6789, 6790, 6791 into this branch
  for i in 6789 6790 6791 ; do svn merge --ignore-ancestry -c $i  
https://google-web-toolkit.googlecode.com/svn/trunk .; done

Patch by: scottb


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

Added:
  /releases/2.0/dev/core/test/com/google/gwt/dev/jjs/ast
   
/releases/2.0/dev/core/test/com/google/gwt/dev/jjs/impl/RunAsyncNameTest.java
Deleted:
   
/releases/2.0/dev/core/test/com/google/gwt/dev/javac/JProgramLastFragmentLoadingBeforeTest.java
  /releases/2.0/dev/core/test/com/google/gwt/dev/javac/RunAsyncNameTest.java
Modified:
  /releases/2.0/branch-info.txt
  /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/ModuleDefSchema.java
  /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/Rule.java
  /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/RuleFail.java
  /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java
  /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/RuleReplaceWith.java
   
/releases/2.0/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java
  /releases/2.0/dev/core/src/com/google/gwt/dev/javac/TypeOracleMediator.java
   
/releases/2.0/dev/core/test/com/google/gwt/core/ext/typeinfo/JEnumTypeTest.java
   
/releases/2.0/dev/core/test/com/google/gwt/dev/javac/JavaCompilationSuite.java
   
/releases/2.0/dev/core/test/com/google/gwt/dev/jjs/impl/OptimizerTestBase.java
Replaced:
   
/releases/2.0/dev/core/test/com/google/gwt/dev/jjs/ast/JProgramLastFragmentLoadingBeforeTest.java

=======================================
--- /dev/null
+++  
/releases/2.0/dev/core/test/com/google/gwt/dev/jjs/impl/RunAsyncNameTest.java   
 
Tue Nov 10 12:03:27 2009
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may  
not
+ * use this file except in compliance with the License. You may obtain a  
copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,  
WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations  
under
+ * the License.
+ */
+package com.google.gwt.dev.jjs.impl;
+
+import com.google.gwt.core.ext.TreeLogger;
+import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.dev.javac.impl.MockJavaResource;
+import com.google.gwt.dev.util.UnitTestTreeLogger;
+
+/**
+ * This class tests naming of runAsync calls. Mostly it tests names that  
are
+ * invalid.
+ */
+public class RunAsyncNameTest extends OptimizerTestBase {
+  @Override
+  public void setUp() {
+    sourceOracle.addOrReplace(new MockJavaResource("test.CallRunAsync") {
+      @Override
+      protected CharSequence getContent() {
+        StringBuffer code = new StringBuffer();
+        code.append("package test;\n");
+        code.append("import com.google.gwt.core.client.GWT;\n");
+        code.append("public class CallRunAsync {\n");
+        code.append("  public static int notAmethod;");
+        code.append("  public static void call0() { }\n");
+        code.append("  public static void call1() {\n");
+        code.append("    GWT.runAsync(null);\n");
+        code.append("  }\n");
+        code.append("  public static void call2() {\n");
+        code.append("    GWT.runAsync(null);\n");
+        code.append("    GWT.runAsync(null);\n");
+        code.append("  }\n");
+        code.append("}\n");
+        return code;
+      }
+    });
+  }
+
+  /**
+   * Tests that it's an error to call the 2-argument version of  
GWT.runAsync
+   * with anything but a class literal.
+   */
+  public void testNonLiteralInCall() {
+    UnitTestTreeLogger logger;
+    {
+      UnitTestTreeLogger.Builder builder = new  
UnitTestTreeLogger.Builder();
+      builder.setLowestLogLevel(TreeLogger.ERROR);
+      builder.expectError("Errors in /mock/test/EntryPoint.java", null);
+      builder.expectError(
+          "Line 5:  Only class literals may be used to name a call to  
GWT.runAsync()",
+          null);
+      builder.expectError("Cannot proceed due to previous errors", null);
+      logger = builder.createLogger();
+      this.logger = logger;
+    }
+
+    addSnippetImport("com.google.gwt.core.client.GWT");
+    try {
+      compileSnippet("void", "GWT.runAsync((new Object()).getClass(),  
null);");
+      fail("Expected compilation to fail");
+    } catch (UnableToCompleteException e) {
+      // expected
+    }
+
+    logger.assertCorrectLogEntries();
+  }
+}
=======================================
---  
/releases/2.0/dev/core/test/com/google/gwt/dev/javac/JProgramLastFragmentLoadingBeforeTest.java
  
Mon Nov  2 12:44:54 2009
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may  
not
- * use this file except in compliance with the License. You may obtain a  
copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,  
WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations  
under
- * the License.
- */
-package com.google.gwt.dev.javac;
-
-import com.google.gwt.dev.jjs.ast.JProgram;
-import com.google.gwt.dev.util.collect.Lists;
-
-import junit.framework.TestCase;
-
-import java.util.List;
-
-/**
- * Tests {...@link JProgram#lastFragmentLoadingBefore(int, int...)}.
- */
-public class JProgramLastFragmentLoadingBeforeTest extends TestCase {
-
-  public void testBasics() {
-    List<Integer> initialSeq = Lists.create(4, 3, 2);
-    int numSps = 10;
-
-    // Very simple
-    assertEquals(0, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
0,
-        1, 2, 3));
-
-    // Equal fragments load at the same time
-    assertEquals(0,
-        JProgram.lastFragmentLoadingBefore(initialSeq, numSps, 0, 0));
-    assertEquals(1,
-        JProgram.lastFragmentLoadingBefore(initialSeq, numSps, 1, 1));
-    assertEquals(3,
-        JProgram.lastFragmentLoadingBefore(initialSeq, numSps, 3, 3));
-    assertEquals(6,
-        JProgram.lastFragmentLoadingBefore(initialSeq, numSps, 6, 6));
-    assertEquals(11, JProgram.lastFragmentLoadingBefore(initialSeq,  
numSps, 11,
-        11));
-
-    // Zero loads first
-    assertEquals(0, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
11,
-        0));
-    assertEquals(0, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
10,
-        0));
-    assertEquals(0,
-        JProgram.lastFragmentLoadingBefore(initialSeq, numSps, 3, 0));
-
-    // Initial sequence fragments load before all others
-    assertEquals(3, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
3,
-        10));
-    assertEquals(3, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
10,
-        3));
-
-    // Earlier initial sequence fragments load before the others
-    assertEquals(4, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
2,
-        3, 4));
-    assertEquals(3,
-        JProgram.lastFragmentLoadingBefore(initialSeq, numSps, 2, 3));
-    assertEquals(4, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
4,
-        3, 2));
-
-    // For non-equal exclusive fragments, leftovers is the common  
predecessor
-    assertEquals(11, JProgram.lastFragmentLoadingBefore(initialSeq,  
numSps, 1,
-        7));
-
-    // Leftovers is before any exclusive
-    assertEquals(11, JProgram.lastFragmentLoadingBefore(initialSeq,  
numSps, 7,
-        11));
-  }
-
-  public void testWithEmptyInitial() {
-    List<Integer> initialSeq = Lists.create();
-    int numSps = 10;
-
-    // Simple case
-    assertEquals(0, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
0,
-        1, 2, 3));
-
-    // Equal fragments load at the same time
-    assertEquals(0,
-        JProgram.lastFragmentLoadingBefore(initialSeq, numSps, 0, 0));
-    assertEquals(6,
-        JProgram.lastFragmentLoadingBefore(initialSeq, numSps, 6, 6));
-    assertEquals(11, JProgram.lastFragmentLoadingBefore(initialSeq,  
numSps, 11,
-        11));
-
-    // Zero loads first
-    assertEquals(0, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
11,
-        0));
-    assertEquals(0, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
10,
-        0));
-    assertEquals(0,
-        JProgram.lastFragmentLoadingBefore(initialSeq, numSps, 3, 0));
-
-    // For non-equal exclusive fragments, leftovers is the common  
predecessor
-    assertEquals(11, JProgram.lastFragmentLoadingBefore(initialSeq,  
numSps, 1,
-        7));
-
-    // Leftovers is before any exclusive
-    assertEquals(11, JProgram.lastFragmentLoadingBefore(initialSeq,  
numSps, 7,
-        11));
-
-    // With just one argument, return it
-    assertEquals(0, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
0));
-    assertEquals(3, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
3));
-    assertEquals(11, JProgram.lastFragmentLoadingBefore(initialSeq,  
numSps, 11));
-  }
-
-  public void testWithNoSplitPoints() {
-    List<Integer> initialSeq = Lists.create();
-    int numSps = 0;
-
-    assertEquals(0,
-        JProgram.lastFragmentLoadingBefore(initialSeq, numSps, 0, 0));
-    assertEquals(0, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
0,
-        0, 0));
-    assertEquals(0, JProgram.lastFragmentLoadingBefore(initialSeq, numSps,  
0));
-  }
-}
=======================================
---  
/releases/2.0/dev/core/test/com/google/gwt/dev/javac/RunAsyncNameTest.java      
 
Tue Sep  8 11:07:39 2009
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may  
not
- * use this file except in compliance with the License. You may obtain a  
copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,  
WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations  
under
- * the License.
- */
-package com.google.gwt.dev.javac;
-
-import com.google.gwt.core.ext.TreeLogger;
-import com.google.gwt.core.ext.UnableToCompleteException;
-import com.google.gwt.dev.javac.impl.MockJavaResource;
-import com.google.gwt.dev.jjs.impl.OptimizerTestBase;
-import com.google.gwt.dev.util.UnitTestTreeLogger;
-
-/**
- * This class tests naming of runAsync calls. Mostly it tests names that  
are
- * invalid.
- */
-public class RunAsyncNameTest extends OptimizerTestBase {
-  @Override
-  public void setUp() {
-    sourceOracle.addOrReplace(new MockJavaResource("test.CallRunAsync") {
-      @Override
-      protected CharSequence getContent() {
-        StringBuffer code = new StringBuffer();
-        code.append("package test;\n");
-        code.append("import com.google.gwt.core.client.GWT;\n");
-        code.append("public class CallRunAsync {\n");
-        code.append("  public static int notAmethod;");
-        code.append("  public static void call0() { }\n");
-        code.append("  public static void call1() {\n");
-        code.append("    GWT.runAsync(null);\n");
-        code.append("  }\n");
-        code.append("  public static void call2() {\n");
-        code.append("    GWT.runAsync(null);\n");
-        code.append("    GWT.runAsync(null);\n");
-        code.append("  }\n");
-        code.append("}\n");
-        return code;
-      }
-    });
-  }
-
-  /**
-   * Tests that it's an error to call the 2-argument version of  
GWT.runAsync
-   * with anything but a class literal.
-   */
-  public void testNonLiteralInCall() throws UnableToCompleteException {
-    UnitTestTreeLogger logger;
-    {
-      UnitTestTreeLogger.Builder builder = new  
UnitTestTreeLogger.Builder();
-      builder.setLowestLogLevel(TreeLogger.ERROR);
-      builder.expectError("Errors in /mock/test/EntryPoint.java", null);
-      builder.expectError(
-          "Line 5:  Only class literals may be used to name a call to  
GWT.runAsync()",
-          null);
-      builder.expectError("Cannot proceed due to previous errors", null);
-      logger = builder.createLogger();
-      this.logger = logger;
-    }
-
-    addSnippetImport("com.google.gwt.core.client.GWT");
-    try {
-      compileSnippet("void", "GWT.runAsync((new Object()).getClass(),  
null);");
-      fail("Expected compilation to fail");
-    } catch (UnableToCompleteException e) {
-      // expected
-    }
-
-    logger.assertCorrectLogEntries();
-  }
-}
=======================================
--- /releases/2.0/branch-info.txt       Tue Nov 10 12:00:29 2009
+++ /releases/2.0/branch-info.txt       Tue Nov 10 12:03:27 2009
@@ -509,3 +509,12 @@
   Fixes custom PluralRule classes that are nested
      svn merge --ignore-ancestry -c6809 \
        https://google-web-toolkit.googlecode.com/svn/trunk/ .
+
+tr...@6789,6790,6791 were merged into this branch
+  -- Shuffles some test classes around; adds missing tests to
+JavaCompilationSuite convenience test suite.
+  -- Model Enum.valueOf and Enum.values in TypeOracle since they are an
+implicit part of the language.
+  -- Generators now exist per-StandardGeneratorContext to avoid concurrency
+issues.
+  for i in 6789 6790 6791 ; do svn merge --ignore-ancestry -c $i  
https://google-web-toolkit.googlecode.com/svn/trunk .; done
=======================================
--- /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/ModuleDefSchema.java      
 
Wed Nov  4 06:59:39 2009
+++ /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/ModuleDefSchema.java      
 
Tue Nov 10 12:03:27 2009
@@ -336,8 +336,14 @@
        return new FullConditionSchema(rule.getRootCondition());
      }

-    protected Schema __generate_with_begin(Generator gen) {
-      RuleGenerateWith rule = new RuleGenerateWith(gen);
+    protected Schema __generate_with_begin(Class<? extends Generator>  
generator)
+        throws UnableToCompleteException {
+      if (!Generator.class.isAssignableFrom(generator)) {
+        logger.log(TreeLogger.ERROR, "A generator must extend "
+            + Generator.class.getName(), null);
+        throw new UnableToCompleteException();
+      }
+      RuleGenerateWith rule = new RuleGenerateWith(generator);
        moduleDef.getRules().prepend(rule);
        return new FullConditionSchema(rule.getRootCondition());
      }
@@ -1147,8 +1153,6 @@
        ConfigurationProperty.class);
    private boolean foundAnyPublic;
    private boolean foundExplicitSourceOrSuperSource;
-  private final ObjAttrCvt<Generator> genAttrCvt = new  
ObjAttrCvt<Generator>(
-      Generator.class);
    private final JsProgram jsPgm = new JsProgram();
    private final LinkerNameAttrCvt linkerNameAttrCvt = new  
LinkerNameAttrCvt();
    private final ModuleDefLoader loader;
@@ -1180,7 +1184,6 @@
          configurationPropAttrCvt);
      registerAttributeConverter(PropertyValue.class, propValueAttrCvt);
      registerAttributeConverter(PropertyValue[].class,  
propValueArrayAttrCvt);
-    registerAttributeConverter(Generator.class, genAttrCvt);
      registerAttributeConverter(LinkerName.class, linkerNameAttrCvt);
      registerAttributeConverter(NullableName.class, nullableNameAttrCvt);
      registerAttributeConverter(Class.class, classAttrCvt);
=======================================
--- /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/Rule.java Mon Aug 17  
09:47:12 2009
+++ /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/Rule.java Tue Nov 10  
12:03:27 2009
@@ -15,9 +15,9 @@
   */
  package com.google.gwt.dev.cfg;

-import com.google.gwt.core.ext.GeneratorContext;
  import com.google.gwt.core.ext.TreeLogger;
  import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.dev.javac.StandardGeneratorContext;

  /**
   * Abstract base class for various kinds of deferred binding rules.
@@ -30,14 +30,16 @@
      return rootCondition;
    }

-  public boolean isApplicable(TreeLogger logger, GeneratorContext context,
-      String typeName) throws UnableToCompleteException {
+  public boolean isApplicable(TreeLogger logger,
+      StandardGeneratorContext context, String typeName)
+      throws UnableToCompleteException {
      return rootCondition.isTrue(logger, context.getPropertyOracle(),
          context.getTypeOracle(), typeName);
    }

-  public abstract String realize(TreeLogger logger, GeneratorContext  
context,
-      String typeName) throws UnableToCompleteException;
+  public abstract String realize(TreeLogger logger,
+      StandardGeneratorContext context, String typeName)
+      throws UnableToCompleteException;

    protected void dispose() {
    }
=======================================
--- /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/RuleFail.java     Wed Dec 
 
27 12:51:02 2006
+++ /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/RuleFail.java     Tue Nov 
 
10 12:03:27 2009
@@ -15,16 +15,16 @@
   */
  package com.google.gwt.dev.cfg;

-import com.google.gwt.core.ext.GeneratorContext;
  import com.google.gwt.core.ext.TreeLogger;
  import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.dev.javac.StandardGeneratorContext;

  /**
   * A rule to explicitly fail during a deferred binding requrest.
   */
  public class RuleFail extends Rule {

-  public String realize(TreeLogger logger, GeneratorContext context,
+  public String realize(TreeLogger logger, StandardGeneratorContext  
context,
        String typeName) throws UnableToCompleteException {
      logger.log(TreeLogger.ERROR, "Deferred binding request failed for  
type '"
          + typeName + "'", null);
=======================================
--- /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java     
 
Tue Jul 28 21:11:02 2009
+++ /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java     
 
Tue Nov 10 12:03:27 2009
@@ -16,7 +16,6 @@
  package com.google.gwt.dev.cfg;

  import com.google.gwt.core.ext.Generator;
-import com.google.gwt.core.ext.GeneratorContext;
  import com.google.gwt.core.ext.TreeLogger;
  import com.google.gwt.core.ext.UnableToCompleteException;
  import com.google.gwt.dev.javac.StandardGeneratorContext;
@@ -28,51 +27,18 @@
   */
  public class RuleGenerateWith extends Rule {

-  private Generator generator;
-
-  public RuleGenerateWith(Generator generator) {
-    this.generator = generator;
+  private Class<? extends Generator> generatorClass;
+
+  public RuleGenerateWith(Class<? extends Generator> generatorClass) {
+    this.generatorClass = generatorClass;
    }

-  public String realize(TreeLogger logger, GeneratorContext context,
+  public String realize(TreeLogger logger, StandardGeneratorContext  
context,
        String typeName) throws UnableToCompleteException {
-
-    String msg = "Invoking " + toString();
-    logger = logger.branch(TreeLogger.DEBUG, msg, null);
-
-    if (context instanceof StandardGeneratorContext) {
-      ((StandardGeneratorContext)  
context).setCurrentGenerator(generator.getClass());
-    }
-
-    long before = System.currentTimeMillis();
-    try {
-      String className = generator.generate(logger, context, typeName);
-      long after = System.currentTimeMillis();
-      if (className == null) {
-        msg = "Generator returned null, so the requested type will be used  
as is";
-      } else {
-        msg = "Generator returned class '" + className + "'";
-      }
-      logger.log(TreeLogger.DEBUG, msg, null);
-
-      msg = "Finished in " + (after - before) + " ms";
-      logger.log(TreeLogger.DEBUG, msg, null);
-
-      return className;
-    } catch (RuntimeException e) {
-      logger.log(TreeLogger.ERROR, "Generator '"
-          + generator.getClass().getName()
-          + "' threw threw an exception while rebinding '" + typeName  
+ "'", e);
-      throw new UnableToCompleteException();
-    }
+    return context.runGenerator(logger, generatorClass, typeName);
    }

    public String toString() {
-    return "<generate-with class='" + generator.getClass().getName()  
+ "'/>";
-  }
-
-  @Override
-  protected void dispose() {
-    generator = null;
+    return "<generate-with class='" + generatorClass.getName() + "'/>";
    }
  }
=======================================
--- /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/RuleReplaceWith.java      
 
Wed Dec 27 12:51:02 2006
+++ /releases/2.0/dev/core/src/com/google/gwt/dev/cfg/RuleReplaceWith.java      
 
Tue Nov 10 12:03:27 2009
@@ -15,9 +15,9 @@
   */
  package com.google.gwt.dev.cfg;

-import com.google.gwt.core.ext.GeneratorContext;
  import com.google.gwt.core.ext.TreeLogger;
  import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.dev.javac.StandardGeneratorContext;

  /**
   * A rule to replace the type being rebound with an explicitly named class.
@@ -34,7 +34,7 @@
      return replacementTypeName;
    }

-  public String realize(TreeLogger logger, GeneratorContext context,
+  public String realize(TreeLogger logger, StandardGeneratorContext  
context,
        String typeName) throws UnableToCompleteException {
      return replacementTypeName;
    }
=======================================
---  
/releases/2.0/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java
        
Thu Nov  5 11:49:42 2009
+++  
/releases/2.0/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java
        
Tue Nov 10 12:03:27 2009
@@ -272,6 +272,8 @@

    private final Map<PrintWriter, Generated>  
uncommittedGeneratedCupsByPrintWriter = new IdentityHashMap<PrintWriter,  
Generated>();

+  private final Map<Class<? extends Generator>, Generator> generators =  
new IdentityHashMap<Class<? extends Generator>, Generator>();
+
    /**
     * Normally, the compiler host would be aware of the same types that are
     * available in the supplied type oracle although it isn't strictly  
required.
@@ -426,6 +428,46 @@
    public final TypeOracle getTypeOracle() {
      return compilationState.getTypeOracle();
    }
+
+  public String runGenerator(TreeLogger logger,
+      Class<? extends Generator> generatorClass, String typeName)
+      throws UnableToCompleteException {
+    String msg = "Invoking " + toString();
+    logger = logger.branch(TreeLogger.DEBUG, msg, null);
+
+    Generator generator = generators.get(generatorClass);
+    if (generator == null) {
+      try {
+        generator = generatorClass.newInstance();
+        generators.put(generatorClass, generator);
+      } catch (Throwable e) {
+        logger.log(TreeLogger.ERROR,
+            "Unexpected error trying to instantiate Generator '"
+                + generatorClass.getName() + "'", e);
+        throw new UnableToCompleteException();
+      }
+    }
+
+    setCurrentGenerator(generatorClass);
+
+    long before = System.currentTimeMillis();
+    try {
+      String className = generator.generate(logger, this, typeName);
+      long after = System.currentTimeMillis();
+      if (className == null) {
+        msg = "Generator returned null, so the requested type will be used  
as is";
+      } else {
+        msg = "Generator returned class '" + className + "'";
+      }
+      msg += "; in " + (after - before) + " ms";
+      logger.log(TreeLogger.DEBUG, msg, null);
+      return className;
+    } catch (RuntimeException e) {
+      logger.log(TreeLogger.ERROR, "Generator '" + generatorClass.getName()
+          + "' threw threw an exception while rebinding '" + typeName  
+ "'", e);
+      throw new UnableToCompleteException();
+    }
+  }

    public void setCurrentGenerator(Class<? extends Generator>  
currentGenerator) {
      this.currentGenerator = currentGenerator;
=======================================
---  
/releases/2.0/dev/core/src/com/google/gwt/dev/javac/TypeOracleMediator.java     
 
Tue Nov 10 11:37:16 2009
+++  
/releases/2.0/dev/core/src/com/google/gwt/dev/javac/TypeOracleMediator.java     
 
Tue Nov 10 12:03:27 2009
@@ -933,13 +933,6 @@
        // Leave enum constructors out of TypeOracle
        return true;
      }
-    if (type.isEnum() != null
-        && (methodData.getAccess() & Opcodes.ACC_STATIC) != 0) {
-      // Special-case synthetic static methods that aren't marked synthetic
-      if ("values".equals(name) || "valueOf".equals(name)) {
-        return true;
-      }
-    }

      JAbstractMethod method;

=======================================
---  
/releases/2.0/dev/core/test/com/google/gwt/core/ext/typeinfo/JEnumTypeTest.java 
 
Tue Nov 10 11:37:16 2009
+++  
/releases/2.0/dev/core/test/com/google/gwt/core/ext/typeinfo/JEnumTypeTest.java 
 
Tue Nov 10 12:03:27 2009
@@ -121,7 +121,7 @@
      JClassType type = typeOracle.getType(MyEnum.class.getName());
      JEnumType enumType = validateTypeIsEnum(type);

-    assertEquals(1, enumType.getMethods().length);
+    assertEquals(3, enumType.getMethods().length);
    }

    /**
=======================================
---  
/releases/2.0/dev/core/test/com/google/gwt/dev/javac/JavaCompilationSuite.java  
 
Tue Nov 10 11:37:16 2009
+++  
/releases/2.0/dev/core/test/com/google/gwt/dev/javac/JavaCompilationSuite.java  
 
Tue Nov 10 12:03:27 2009
@@ -15,6 +15,9 @@
   */
  package com.google.gwt.dev.javac;

+import com.google.gwt.dev.javac.asm.CollectClassDataTest;
+import com.google.gwt.dev.javac.asm.CollectReferencesVisitorTest;
+import com.google.gwt.dev.javac.asm.ResolveGenericsTest;
  import com.google.gwt.dev.javac.impl.JdtBehaviorTest;

  import junit.framework.Test;
@@ -27,18 +30,28 @@
    public static Test suite() {
      TestSuite suite = new TestSuite(JavaCompilationSuite.class.getName());

+    suite.addTestSuite(ArtificialRescueCheckerTest.class);
      suite.addTestSuite(BinaryTypeReferenceRestrictionsCheckerTest.class);
      suite.addTestSuite(CompilationStateTest.class);
      suite.addTestSuite(CompilationUnitFileReferenceTest.class);
      suite.addTestSuite(GWTProblemTest.class);
      suite.addTestSuite(JavaSourceParserTest.class);
-    suite.addTestSuite(JdtBehaviorTest.class);
      suite.addTestSuite(JdtCompilerTest.class);
-    suite.addTestSuite(JProgramLastFragmentLoadingBeforeTest.class);
      suite.addTestSuite(JSORestrictionsTest.class);
      suite.addTestSuite(JsniCheckerTest.class);
      suite.addTestSuite(TypeOracleMediatorTest.class);

+    suite.addTestSuite(CollectClassDataTest.class);
+    suite.addTestSuite(CollectReferencesVisitorTest.class);
+    suite.addTestSuite(ResolveGenericsTest.class);
+
+    suite.addTestSuite(JdtBehaviorTest.class);
+
+    // TODO: Move these to another package.
+    suite.addTestSuite(GeneratedClassnameComparatorTest.class);
+    suite.addTestSuite(GeneratedClassnameFinderTest.class);
+    suite.addTestSuite(GeneratedClassnameTest.class);
+
      return suite;
    }
  }
=======================================
---  
/releases/2.0/dev/core/test/com/google/gwt/dev/jjs/impl/OptimizerTestBase.java  
 
Tue Nov 10 11:37:16 2009
+++  
/releases/2.0/dev/core/test/com/google/gwt/dev/jjs/impl/OptimizerTestBase.java  
 
Tue Nov 10 12:03:27 2009
@@ -35,7 +35,7 @@
  import java.util.TreeSet;

  /**
- * Tests {...@link DeadCodeElimination}.
+ * A useful base class for tests that build JJS ASTs.
   */
  public abstract class OptimizerTestBase extends TestCase {


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

Reply via email to