Fix the JsFunction checks.

JsFunction was forbidden on hierachies in a previous
patch but was missing the check for the subclasses.

Change-Id: I160aceca984b2d0548a5fa4895f376e15a6c2198
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/JsInteropRestrictionChecker.java b/dev/core/src/com/google/gwt/dev/jjs/impl/JsInteropRestrictionChecker.java
index 80c8fd4..5c3c9e3 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/JsInteropRestrictionChecker.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/JsInteropRestrictionChecker.java
@@ -360,6 +360,10 @@
     if (type.getSuperClass() != jprogram.getTypeJavaLangObject()) {
       logError("JsFunction implementation '%s' cannot extend a class.", type);
     }
+
+    if (!jprogram.typeOracle.getSubTypeNames(type.getName()).isEmpty()) {
+      logError("JsFunction implementation '%s' cannot be extended by other classes.", type);
+    }
   }
 
   private void logError(String format, JType type) {
diff --git a/dev/core/test/com/google/gwt/dev/jjs/impl/JsInteropRestrictionCheckerTest.java b/dev/core/test/com/google/gwt/dev/jjs/impl/JsInteropRestrictionCheckerTest.java
index 8588dd9..2d801aa 100644
--- a/dev/core/test/com/google/gwt/dev/jjs/impl/JsInteropRestrictionCheckerTest.java
+++ b/dev/core/test/com/google/gwt/dev/jjs/impl/JsInteropRestrictionCheckerTest.java
@@ -848,6 +848,19 @@
     assertBuggyFails("JsFunction implementation 'test.EntryPoint$Buggy' cannot extend a class.");
   }
 
+  public void testJsFunctionImplementationWithSubclassesFails() throws Exception {
+    addAll(jsFunctionInterface);
+    addSnippetClassDecl(
+        "public static class BaseClass implements MyJsFunctionInterface {",
+        "  public int foo(int x) { return 0; }",
+        "}",
+        "public static class Buggy extends BaseClass  {",
+        "}");
+
+    assertBuggyFails("JsFunction implementation 'test.EntryPoint$BaseClass' cannot be extended by "
+        + "other classes.");
+  }
+
   public void testJsFunctionImplementationMarkedAsJsTypeFails() throws Exception {
     addAll(jsFunctionInterface);
     addSnippetImport("com.google.gwt.core.client.js.JsType");