diff --git a/dev/core/src/com/google/gwt/dev/javac/JsniChecker.java b/dev/core/src/com/google/gwt/dev/javac/JsniChecker.java
index 6156334..7ec360a 100644
--- a/dev/core/src/com/google/gwt/dev/javac/JsniChecker.java
+++ b/dev/core/src/com/google/gwt/dev/javac/JsniChecker.java
@@ -207,7 +207,7 @@
       }
       FieldBinding target = getField(clazz, jsniRef);
       if (target == null) {
-        emitWarning("jsni", "Referencing field '" + jsniRef.className() + "."
+        emitError("JSNI Referencing field '" + jsniRef.className() + "."
             + jsniRef.memberName()
             + "': unable to resolve field, expect subsequent failures");
         return;
@@ -231,7 +231,7 @@
       assert jsniRef.isMethod();
       MethodBinding target = getMethod(clazz, jsniRef);
       if (target == null) {
-        emitWarning("jsni", "Referencing method '" + jsniRef.className() + "."
+        emitError("JSNI Referencing method '" + jsniRef.className() + "."
             + jsniRef.memberSignature()
             + "': unable to resolve method, expect subsequent failures");
         return;
@@ -318,7 +318,7 @@
           checkFieldRef(clazz, jsniRef);
         }
       } else {
-        emitWarning("jsni", "Referencing class '" + className
+        emitError("JSNI Referencing class '" + className
             + "': unable to resolve class, expect subsequent failures");
       }
     }
diff --git a/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java b/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java
index 1e841a0..06a83fd 100644
--- a/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java
+++ b/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java
@@ -135,7 +135,7 @@
 
       JsniRef parsed = JsniRef.parse(jsniMemberRef);
       if (parsed == null) {
-        logger.log(TreeLogger.WARN, "Malformed JSNI reference '"
+        logger.log(TreeLogger.ERROR, "Malformed JSNI reference '"
             + jsniMemberRef + "'; expect subsequent failures",
             new NoSuchFieldError(jsniMemberRef));
         return -1;
@@ -155,7 +155,7 @@
          * semantics of the hand-written JS.
          */
         if (singleJsoImplTypes.contains(canonicalizeClassName(className))) {
-          logger.log(TreeLogger.WARN,
+          logger.log(TreeLogger.ERROR,
               "Invalid JSNI reference to SingleJsoImpl interface (" + className
                   + "); consider using a trampoline. "
                   + "Expect subsequent failures.", new NoSuchFieldError(
@@ -166,7 +166,7 @@
         int memberId = dispClassInfo.getMemberId(memberName);
         if (memberId < 0) {
           if (!className.startsWith("java.")) {
-            logger.log(TreeLogger.WARN, "Member '" + memberName
+            logger.log(TreeLogger.ERROR, "Member '" + memberName
                 + "' in JSNI reference '" + jsniMemberRef
                 + "' could not be found; expect subsequent failures",
                 new NoSuchFieldError(memberName));
@@ -176,7 +176,7 @@
         return synthesizeDispId(dispClassInfo.getClassId(), memberId);
       }
 
-      logger.log(TreeLogger.WARN, "Class '" + className
+      logger.log(TreeLogger.ERROR, "Class '" + className
           + "' in JSNI reference '" + jsniMemberRef
           + "' could not be found; expect subsequent failures",
           new ClassNotFoundException(className));
diff --git a/dev/core/test/com/google/gwt/dev/javac/JsniCheckerTest.java b/dev/core/test/com/google/gwt/dev/javac/JsniCheckerTest.java
index f041ca9..07a8f8a 100644
--- a/dev/core/test/com/google/gwt/dev/javac/JsniCheckerTest.java
+++ b/dev/core/test/com/google/gwt/dev/javac/JsniCheckerTest.java
@@ -270,7 +270,7 @@
     code.append("}\n");
 
     // Cannot resolve, missing synthetic enclosing instance.
-    shouldGenerateWarning(code, 7, "Referencing method 'Buggy.Inner.new(Z)': "
+    shouldGenerateError(code, 7, "JSNI Referencing method 'Buggy.Inner.new(Z)': "
         + "unable to resolve method, expect subsequent failures");
 
     code = new StringBuffer();
@@ -505,8 +505,8 @@
     code.append("    @Foo::x;\n");
     code.append("  }-*/;\n");
     code.append("}\n");
-    shouldGenerateWarning(code, 3,
-        "Referencing class 'Foo': unable to resolve class, expect subsequent failures");
+    shouldGenerateError(code, 3,
+        "JSNI Referencing class 'Foo': unable to resolve class, expect subsequent failures");
   }
 
   public void testUnresolvedField() {
@@ -516,10 +516,10 @@
     code.append("    @Buggy::x;\n");
     code.append("  }-*/;\n");
     code.append("}\n");
-    shouldGenerateWarning(
+    shouldGenerateError(
         code,
         3,
-        "Referencing field 'Buggy.x': unable to resolve field, expect subsequent failures");
+        "JSNI Referencing field 'Buggy.x': unable to resolve field, expect subsequent failures");
   }
 
   public void testUnresolvedMethod() {
@@ -529,10 +529,10 @@
     code.append("    @Buggy::x(Ljava/lang/String);\n");
     code.append("  }-*/;\n");
     code.append("}\n");
-    shouldGenerateWarning(
+    shouldGenerateError(
         code,
         3,
-        "Referencing method 'Buggy.x(Ljava/lang/String)': unable to resolve method, expect subsequent failures");
+        "JSNI Referencing method 'Buggy.x(Ljava/lang/String)': unable to resolve method, expect subsequent failures");
   }
 
   public void testUnsafeAnnotation() {
diff --git a/dev/core/test/com/google/gwt/dev/javac/JsniCollectorTest.java b/dev/core/test/com/google/gwt/dev/javac/JsniCollectorTest.java
index 752f32e..37621d4 100644
--- a/dev/core/test/com/google/gwt/dev/javac/JsniCollectorTest.java
+++ b/dev/core/test/com/google/gwt/dev/javac/JsniCollectorTest.java
@@ -54,9 +54,9 @@
       assertEquals(source.indexOf('@'), problem.getSourceStart());
     }
     assertEquals(3, problem.getSourceLineNumber());
-    assertTrue(problem.isWarning());
+    assertTrue(problem.isError());
     assertEquals(
-        "Referencing method 'Foo.m(Ljava/lang/String)': unable to resolve method, expect subsequent failures",
+        "JSNI Referencing method 'Foo.m(Ljava/lang/String)': unable to resolve method, expect subsequent failures",
         problem.getMessage());
   }
 
