Fix JAnalysisDecoratedType regarding JsInterop.

JAnalysisDecoratedType was supposed to forward most
of the methods to the underlying type, however it
was inheriting the default implementation of some of
the methods introduced for JsInterop from JType.

Change-Id: I9b377d680ce1c0b395067680638d4eb676cbe63f
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JArrayType.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JArrayType.java
index d05cdc4..df5ebad 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JArrayType.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JArrayType.java
@@ -58,6 +58,11 @@
     return "[" + elementType.getJsniSignatureName();
   }
 
+  @Override
+  public JEnumType isEnumOrSubclass() {
+    return null;
+  }
+
   public JType getLeafType() {
     if (leafType == null) {
       if (elementType instanceof JArrayType) {
@@ -95,6 +100,16 @@
   }
 
   @Override
+  public boolean isJsType() {
+    return false;
+  }
+
+  @Override
+  public boolean isJsFunction() {
+    return false;
+  }
+
+  @Override
   public boolean isJsNative() {
     return getLeafType().isJsNative();
   }
@@ -111,6 +126,11 @@
   }
 
   @Override
+  public boolean isJavaLangObject() {
+    return false;
+  }
+
+  @Override
   public boolean replaces(JType originalType) {
     return (originalType instanceof JArrayType)
         && elementType.replaces(((JArrayType) originalType).getElementType());
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JDeclaredType.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JDeclaredType.java
index 29d8d15..56d77c5 100755
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JDeclaredType.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JDeclaredType.java
@@ -366,6 +366,11 @@
   }
 
   @Override
+  public boolean isArrayType() {
+    return false;
+  }
+
+  @Override
   public boolean isJsType() {
     return isJsType;
   }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JInterfaceType.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JInterfaceType.java
index 01f1c27..be8f9c3 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JInterfaceType.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JInterfaceType.java
@@ -76,6 +76,16 @@
     return false;
   }
 
+  @Override
+  public boolean isJavaLangObject() {
+    return false;
+  }
+
+  @Override
+  public JEnumType isEnumOrSubclass() {
+    return null;
+  }
+
   public boolean hasDefaultMethods() {
     assert !isExternal();
     return Iterables.any(getMethods(), new Predicate<JMethod>() {
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JPrimitiveType.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JPrimitiveType.java
index 9bcabb5..c13dae2 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JPrimitiveType.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JPrimitiveType.java
@@ -75,6 +75,31 @@
   }
 
   @Override
+  public boolean isArrayType() {
+    return false;
+  }
+
+  @Override
+  public boolean isJsType() {
+    return false;
+  }
+
+  @Override
+  public boolean isJsFunction() {
+    return false;
+  }
+
+  @Override
+  public boolean isJsNative() {
+    return false;
+  }
+
+  @Override
+  public boolean canBeImplementedExternally() {
+    return false;
+  }
+
+  @Override
   public boolean canBeSubclass() {
     return false;
   }
@@ -98,6 +123,11 @@
     return signatureName;
   }
 
+  @Override
+  public JEnumType isEnumOrSubclass() {
+    return null;
+  }
+
   public String getWrapperTypeName() {
     return wrapperTypeName;
   }
@@ -118,6 +148,11 @@
   }
 
   @Override
+  public boolean isJavaLangObject() {
+    return false;
+  }
+
+  @Override
   public void traverse(JVisitor visitor, Context ctx) {
     if (visitor.visit(this, ctx)) {
     }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JReferenceType.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JReferenceType.java
index 9107568..8398ab3 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JReferenceType.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JReferenceType.java
@@ -41,6 +41,11 @@
         }
 
         @Override
+        public JEnumType isEnumOrSubclass() {
+          return null;
+        }
+
+        @Override
         public boolean isAbstract() {
           return false;
         }
@@ -56,11 +61,46 @@
         }
 
         @Override
+        public boolean isArrayType() {
+          return false;
+        }
+
+        @Override
         public boolean isNullType() {
           return true;
         }
 
         @Override
+        public boolean isJsType() {
+          return false;
+        }
+
+        @Override
+        public boolean isJsFunction() {
+          return false;
+        }
+
+        @Override
+        public boolean isJsNative() {
+          return false;
+        }
+
+        @Override
+        public boolean canBeImplementedExternally() {
+          return false;
+        }
+
+        @Override
+        public boolean canBeReferencedExternally() {
+          return false;
+        }
+
+        @Override
+        public boolean isJavaLangObject() {
+          return false;
+        }
+
+        @Override
         public void traverse(JVisitor visitor, Context ctx) {
           if (visitor.visit(this, ctx)) {
           }
@@ -146,11 +186,41 @@
     }
 
     @Override
+    public boolean isJsType() {
+      return ref.isJsType();
+    }
+
+    @Override
+    public boolean isJsFunction() {
+      return ref.isJsFunction();
+    }
+
+    @Override
     public boolean isJsoType() {
       return ref.isJsoType();
     }
 
     @Override
+    public boolean isJsNative() {
+      return ref.isJsNative();
+    }
+
+    @Override
+    public boolean canBeImplementedExternally() {
+      return ref.canBeImplementedExternally();
+    }
+
+    @Override
+    public boolean canBeReferencedExternally() {
+      return ref.canBeReferencedExternally();
+    }
+
+    @Override
+    public boolean isJavaLangObject() {
+      return ref.isJavaLangObject();
+    }
+
+    @Override
     public boolean isExternal() {
       return ref.isExternal();
     }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JType.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JType.java
index 82a40f5..a645b8b 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JType.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JType.java
@@ -62,9 +62,7 @@
    */
   public abstract boolean canBeNull();
 
-  public boolean isArrayType() {
-    return false;
-  }
+  public abstract boolean isArrayType();
 
   /**
    * Returns {@code true} if this is {@link JReferenceType.JNullType.INSTANCE}.
@@ -73,29 +71,17 @@
     return false;
   }
 
-  public boolean isJsType() {
-    return false;
-  }
+  public abstract boolean isJsType();
 
-  public boolean isJsFunction() {
-    return false;
-  }
+  public abstract boolean isJsFunction();
 
-  public boolean isJsNative() {
-    return false;
-  }
+  public abstract boolean isJsNative();
 
-  public boolean canBeImplementedExternally() {
-    return false;
-  }
+  public abstract boolean canBeImplementedExternally();
 
-  public boolean canBeReferencedExternally() {
-    return false;
-  }
+  public abstract boolean canBeReferencedExternally();
 
-  public boolean isJavaLangObject() {
-    return false;
-  }
+  public abstract boolean isJavaLangObject();
 
   /**
    * Returns {@code true} if this is a JavaScriptObject type.
@@ -161,9 +147,7 @@
    * Returns the (closest) enum supertype if the type is a subclass of an enum; it returns
    * {@code this} if {@code this} is a {@link JEnumType} and {@code null} otherwise.
    */
-  public JEnumType isEnumOrSubclass() {
-    return null;
-  }
+  public abstract JEnumType isEnumOrSubclass();
 
   /**
    * Binary name of the type.