Better cast optimization where only one concrete type exists.
http://gwt-code-reviews.appspot.com/154807/show

Review by: cromwellian


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7636 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/TypeTightener.java b/dev/core/src/com/google/gwt/dev/jjs/impl/TypeTightener.java
index 04ed496..2a9edbc 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/TypeTightener.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/TypeTightener.java
@@ -387,8 +387,14 @@
         return;
       }
 
-      JReferenceType toType = (JReferenceType) x.getCastType();
-      JReferenceType fromType = (JReferenceType) argType;
+      JReferenceType toType = getSingleConcreteType(x.getCastType());
+      if (toType == null) {
+        toType = (JReferenceType) x.getCastType();
+      }
+      JReferenceType fromType = getSingleConcreteType(argType); 
+      if (fromType == null) {
+        fromType = (JReferenceType) argType;
+      }
 
       boolean triviallyTrue = false;
       boolean triviallyFalse = false;
@@ -465,8 +471,14 @@
         return;
       }
 
-      JReferenceType toType = x.getTestType();
-      JReferenceType fromType = (JReferenceType) argType;
+      JReferenceType toType = getSingleConcreteType(x.getTestType());
+      if (toType == null) {
+        toType = x.getTestType();
+      }
+      JReferenceType fromType = getSingleConcreteType(argType); 
+      if (fromType == null) {
+        fromType = (JReferenceType) argType;
+      }
 
       boolean triviallyTrue = false;
       boolean triviallyFalse = false;