Adds no-op functionaliy to Throwable and friends.

This is in preparation for J2CL having its own java.lang.Throwable.


Change-Id: I0eddd3e45aa15ad5059f5735c9e951226e61183d
Review-Link: https://gwt-review.googlesource.com/#/c/21900/
diff --git a/user/super/com/google/gwt/emul/java/lang/JsException.java b/user/super/com/google/gwt/emul/java/lang/JsException.java
index 7a37e9c..faf8565 100644
--- a/user/super/com/google/gwt/emul/java/lang/JsException.java
+++ b/user/super/com/google/gwt/emul/java/lang/JsException.java
@@ -22,8 +22,13 @@
  */
 public class JsException extends RuntimeException {
 
+  private static final Object UNINITIALIZED = "__noinit__";
+
+  private Object backingJsObject = UNINITIALIZED;
+
   protected JsException(Object backingJsObject) {
     super(backingJsObject);
+    this.backingJsObject = backingJsObject;
   }
 
   JsException(String msg) {
@@ -33,4 +38,10 @@
   JsException() {
     super();
   }
+
+  // Note that this initialization path is only used for J2CL transpiler, not in GWT.
+  @Override
+  void privateInitError(Object error) {
+    super.privateInitError(backingJsObject == UNINITIALIZED ? error : backingJsObject);
+  }
 }
diff --git a/user/super/com/google/gwt/emul/java/lang/NullPointerException.java b/user/super/com/google/gwt/emul/java/lang/NullPointerException.java
index 3bb6113..c5a8c35 100644
--- a/user/super/com/google/gwt/emul/java/lang/NullPointerException.java
+++ b/user/super/com/google/gwt/emul/java/lang/NullPointerException.java
@@ -35,7 +35,7 @@
     super(typeError);
   }
 
-  @Override
+  // Do not add @Override since J2CL doesn't have the method.
   Object createError(String msg) {
     return new NativeTypeError(msg);
   }
diff --git a/user/super/com/google/gwt/emul/java/lang/Throwable.java b/user/super/com/google/gwt/emul/java/lang/Throwable.java
index 7467655..3ea313d 100644
--- a/user/super/com/google/gwt/emul/java/lang/Throwable.java
+++ b/user/super/com/google/gwt/emul/java/lang/Throwable.java
@@ -117,6 +117,9 @@
     return new NativeError(msg);
   }
 
+  // Called by J2CL transpiler. Do not remove!
+  void privateInitError(Object error) { }
+
   @SuppressWarnings("unusable-by-js")
   private static native Object fixIE(Object e) /*-{
     // In IE -unlike every other browser-, the stack property is not defined until you throw it.