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.
