Make SerializableTypeOracleBuilderTest run much faster by not building the same type oracle over and over.

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5949 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/test/com/google/gwt/user/rebind/rpc/SerializableTypeOracleBuilderTest.java b/user/test/com/google/gwt/user/rebind/rpc/SerializableTypeOracleBuilderTest.java
index b22f8d1..a7f7fe6 100644
--- a/user/test/com/google/gwt/user/rebind/rpc/SerializableTypeOracleBuilderTest.java
+++ b/user/test/com/google/gwt/user/rebind/rpc/SerializableTypeOracleBuilderTest.java
@@ -106,6 +106,8 @@
 
   private static final int EXPOSURE_NONE = TypeParameterExposureComputer.EXPOSURE_NONE;
 
+  private static TypeOracle sTypeOracle;
+
   private static void addGwtTransient(Set<CompilationUnit> units) {
     StringBuffer code = new StringBuffer();
     code.append("package com.google.gwt.user.client.rpc;\n");
@@ -251,6 +253,20 @@
     return actual;
   }
 
+  private static TypeOracle getTestTypeOracle()
+      throws UnableToCompleteException {
+    if (sTypeOracle == null) {
+      TreeLogger logger = createLogger();
+      ModuleDef moduleDef = ModuleDefLoader.createSyntheticModule(logger,
+          "com.google.gwt.user.rebind.rpc.testcases.RebindRPCTestCases.JUnit",
+          new String[] {
+              "com.google.gwt.user.rebind.rpc.testcases.RebindRPCTestCases",
+              "com.google.gwt.junit.JUnit"}, true);
+      sTypeOracle = moduleDef.getTypeOracle(logger);
+    }
+    return sTypeOracle;
+  }
+
   private static String makeSourceName(String binaryName) {
     return binaryName.replace('$', '.');
   }
@@ -291,21 +307,6 @@
         + toString(actual), Arrays.equals(expected, actual));
   }
 
-  private final ModuleDef moduleDef;
-
-  private final TypeOracle typeOracle;
-
-  public SerializableTypeOracleBuilderTest() throws UnableToCompleteException {
-    TreeLogger logger = createLogger();
-
-    moduleDef = ModuleDefLoader.createSyntheticModule(logger,
-        "com.google.gwt.user.rebind.rpc.testcases.RebindRPCTestCases.JUnit",
-        new String[] {
-            "com.google.gwt.user.rebind.rpc.testcases.RebindRPCTestCases",
-            "com.google.gwt.junit.JUnit"}, true);
-    typeOracle = moduleDef.getTypeOracle(logger);
-  }
-
   /**
    * Test with a generic class whose type parameter is exposed only in certain
    * subclasses.
@@ -872,6 +873,7 @@
       throws NotFoundException, UnableToCompleteException {
     TreeLogger logger = createLogger();
 
+    TypeOracle typeOracle = getTestTypeOracle();
     JRawType rawType = typeOracle.getType(
         ClassWithTypeParameterThatErasesToObject.class.getCanonicalName()).isGenericType().getRawType();
 
@@ -1400,6 +1402,7 @@
       UnableToCompleteException {
     TreeLogger logger = createLogger();
 
+    TypeOracle typeOracle = getTestTypeOracle();
     SerializableTypeOracleBuilder stob = createSerializableTypeOracleBuilder(
         logger, typeOracle);
     JClassType a = typeOracle.getType(ManualSerialization.A.class.getCanonicalName());
@@ -1418,6 +1421,7 @@
       UnableToCompleteException {
     TreeLogger logger = createLogger();
 
+    TypeOracle typeOracle = getTestTypeOracle();
     JClassType rawList = typeOracle.getType(List.class.getName());
     SerializableTypeOracleBuilder stob = createSerializableTypeOracleBuilder(
         logger, typeOracle);
@@ -1562,6 +1566,7 @@
       UnableToCompleteException {
     TreeLogger logger = createLogger();
 
+    TypeOracle typeOracle = getTestTypeOracle();
     JClassType a = typeOracle.getType(NoSerializableTypes.A.class.getCanonicalName());
     SerializableTypeOracleBuilder stob = createSerializableTypeOracleBuilder(
         logger, typeOracle);
@@ -1583,6 +1588,7 @@
       throws UnableToCompleteException, NotFoundException {
     TreeLogger logger = createLogger();
 
+    TypeOracle typeOracle = getTestTypeOracle();
     JClassType a = typeOracle.getType(NotAllSubtypesAreSerializable.A.class.getCanonicalName());
     SerializableTypeOracleBuilder stob = createSerializableTypeOracleBuilder(
         logger, typeOracle);
@@ -1605,6 +1611,7 @@
   public void testObjectArrayNotInstantiable() throws UnableToCompleteException {
     TreeLogger logger = createLogger();
 
+    TypeOracle typeOracle = getTestTypeOracle();
     JArrayType objectArray = typeOracle.getArrayType(typeOracle.getJavaLangObject());
     SerializableTypeOracleBuilder stob = createSerializableTypeOracleBuilder(
         logger, typeOracle);
@@ -1623,6 +1630,7 @@
   public void testObjectNotInstantiable() throws UnableToCompleteException {
     TreeLogger logger = createLogger();
 
+    TypeOracle typeOracle = getTestTypeOracle();
     SerializableTypeOracleBuilder stob = createSerializableTypeOracleBuilder(
         logger, typeOracle);
     stob.addRootType(logger, typeOracle.getJavaLangObject());
@@ -1642,6 +1650,7 @@
       throws UnableToCompleteException, NotFoundException {
     TreeLogger logger = createLogger();
 
+    TypeOracle typeOracle = getTestTypeOracle();
     SerializableTypeOracleBuilder stob = createSerializableTypeOracleBuilder(
         logger, typeOracle);
     stob.addRootType(