Patch for interim state of incremental compile.
If a user manually switches GwtAstBuilder on/off, cached units may
not have the AST partial data.

Review at http://gwt-code-reviews.appspot.com/1464804


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10388 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java b/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
index 0f25c04..c620035 100644
--- a/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
+++ b/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
@@ -340,13 +340,16 @@
    */
   public static void addArchive(CompilationUnitArchive module) {
     UnitCache unitCache = instance.unitCache;
-    for (CompilationUnit unit : module.getUnits().values()) {
-      CompilationUnit cachedCompilationUnit = unitCache.find(unit.getResourcePath());
+    for (CachedCompilationUnit archivedUnit : module.getUnits().values()) {
+      if (archivedUnit.getTypesSerializedVersion() != GwtAstBuilder.getSerializationVersion()) {
+        continue;
+      }
+      CompilationUnit cachedCompilationUnit = unitCache.find(archivedUnit.getResourcePath());
       // A previously cached unit might be from the persistent cache or another
-      // archive
+      // archive.
       if (cachedCompilationUnit == null
-          || cachedCompilationUnit.getLastModified() < unit.getLastModified()) {
-        unitCache.addArchivedUnit(unit);
+          || cachedCompilationUnit.getLastModified() < archivedUnit.getLastModified()) {
+        unitCache.addArchivedUnit(archivedUnit);
       }
     }
   }
diff --git a/dev/core/src/com/google/gwt/dev/javac/CompilationUnitArchive.java b/dev/core/src/com/google/gwt/dev/javac/CompilationUnitArchive.java
index 6cf2468..8de15f4 100644
--- a/dev/core/src/com/google/gwt/dev/javac/CompilationUnitArchive.java
+++ b/dev/core/src/com/google/gwt/dev/javac/CompilationUnitArchive.java
@@ -66,7 +66,7 @@
   }
 
   private final String topModuleName;
-  private transient Map<String, CompilationUnit> units;
+  private transient Map<String, CachedCompilationUnit> units;
 
   /**
    * Create an archive object.  Note that data is retained in memory only until
@@ -77,7 +77,7 @@
    *          {@link com.google.gwt.dev.CompileModule}.
    */
   public CompilationUnitArchive(String topModuleName) {
-    units = new TreeMap<String, CompilationUnit>();
+    units = new TreeMap<String, CachedCompilationUnit>();
     this.topModuleName = topModuleName;
   }
 
@@ -85,10 +85,10 @@
    * Add a compilation unit to the archive.
    */
   public void addUnit(CompilationUnit unit) {
-    units.put(unit.getResourcePath(), unit);
+    units.put(unit.getResourcePath(), unit.asCachedCompilationUnit());
   }
 
-  public CompilationUnit findUnit(String resourcePath) {
+  public CachedCompilationUnit findUnit(String resourcePath) {
     return units.get(resourcePath);
   }
 
@@ -102,7 +102,7 @@
   /**
    * Retrieve all units stored in this archive.
    */
-  public Map<String, CompilationUnit> getUnits() {
+  public Map<String, CachedCompilationUnit> getUnits() {
     return ImmutableMap.copyOf(units);
   }
 
@@ -119,20 +119,20 @@
 
   private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
     stream.defaultReadObject();
-    units = new TreeMap<String, CompilationUnit>();
-    CompilationUnit unitsIn[] = (CompilationUnit[]) stream.readObject();
-    for (CompilationUnit unit : unitsIn) {
+    units = new TreeMap<String, CachedCompilationUnit>();
+    CachedCompilationUnit unitsIn[] = (CachedCompilationUnit[]) stream.readObject();
+    for (CachedCompilationUnit unit : unitsIn) {
       assert unit != null;
       addUnit(unit);
     }
   }
 
-  // CompilationUnits are serialized as a sorted array in order to make sure the
+  // CachedCompilationUnits are serialized as a sorted array in order to make sure the
   // output format is deterministic.
   private void writeObject(ObjectOutputStream stream) throws IOException {
     stream.defaultWriteObject();
-    CompilationUnit unitsOut[] = units.values().toArray(new CompilationUnit[units.size()]);
-    Arrays.sort(unitsOut, CompilationUnit.COMPARATOR);
+    CachedCompilationUnit unitsOut[] = units.values().toArray(new CachedCompilationUnit[units.size()]);
+    Arrays.sort(unitsOut, CachedCompilationUnit.COMPARATOR);
     stream.writeObject(unitsOut);
   }
 }