Makes Throwable.backingJsObject to not rely on exports.

Change-Id: Iae5997b7bd49b205aa40e6c9999cdef2024ad535
diff --git a/dev/build.xml b/dev/build.xml
index 66e97ac..b2092f6 100755
--- a/dev/build.xml
+++ b/dev/build.xml
@@ -32,7 +32,8 @@
         <pathelement location="${gwt.tools.lib}/junit/junit-4.8.2.jar"/>
       </classpath>
     </gwt.javac>
-    <gwt.javac srcdir="" destdir="${javac.junit.out}" excludes="**/EmulatedCharset.java,**/HashCodes.java">
+    <gwt.javac srcdir="" destdir="${javac.junit.out}"
+               excludes="**/EmulatedCharset.java,**/HashCodes.java,**/ConsoleLogger.java,**/SuperDevModeLogger.java">
       <src path="${gwt.root}/user/src" />
       <src path="${gwt.root}/user/super/com/google/gwt/emul/javaemul/internal"/>
       <classpath>
diff --git a/user/BUILD b/user/BUILD
index 05209c3..41e2e6e 100644
--- a/user/BUILD
+++ b/user/BUILD
@@ -66,6 +66,8 @@
         ],
         exclude = [
             "src/com/google/gwt/junit/**/*.java",  # see gwt-testing
+            "**/ConsoleLogger.java", # relies on internal APIs
+            "**/SuperDevModeLogger.java", # relies on ConsoleLogger
             "**/EmulatedCharset.java",
             "**/HashCodes.java",  # relies on java8 only APIs
             "**/RunStyleSelenium.java",
diff --git a/user/build.xml b/user/build.xml
index f07aa33..b67bac4 100755
--- a/user/build.xml
+++ b/user/build.xml
@@ -98,7 +98,7 @@
   <target name="compile" description="Compile all class files"
           unless="compile.complete">
     <mkdir dir="${javac.out}"/>
-    <gwt.javac excludes="**/EmulatedCharset.java,**/HashCodes.java">
+    <gwt.javac excludes="**/EmulatedCharset.java,**/HashCodes.java,**/ConsoleLogger.java,**/SuperDevModeLogger.java">
       <src path="super/com/google/gwt/emul/javaemul/internal"/>
       <classpath>
         <pathelement location="${gwt.tools.lib}/gss/2015-10-07/closure-stylesheets-library-20151007-rebased.jar"/>
diff --git a/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java b/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
index a8b2958..0222af7 100644
--- a/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
+++ b/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
@@ -374,7 +374,7 @@
   }-*/;
 
   private static native JsArrayString split(Object t) /*-{
-    var e = t.backingJsObject;
+    var e = t.@Throwable::backingJsObject;
     return (e && e.stack) ? e.stack.split('\n') : [];
   }-*/;
 }
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 bf53e83..e636ec3 100644
--- a/user/super/com/google/gwt/emul/java/lang/Throwable.java
+++ b/user/super/com/google/gwt/emul/java/lang/Throwable.java
@@ -24,7 +24,6 @@
 
 import javaemul.internal.JsUtils;
 import javaemul.internal.annotations.DoNotInline;
-
 import jsinterop.annotations.JsMethod;
 import jsinterop.annotations.JsPackage;
 import jsinterop.annotations.JsProperty;
@@ -134,6 +133,10 @@
     @com.google.gwt.core.client.impl.StackTraceCreator::captureStackTrace(*)(this);
   }-*/;
 
+  public Object getBackingJsObject() {
+    return backingJsObject;
+  }
+
   private void setBackingJsObject(Object backingJsObject) {
     this.backingJsObject = backingJsObject;
     linkBack(backingJsObject);
diff --git a/user/super/com/google/gwt/emul/javaemul/internal/ConsoleLogger.java b/user/super/com/google/gwt/emul/javaemul/internal/ConsoleLogger.java
index ebad921..26a4af7 100644
--- a/user/super/com/google/gwt/emul/javaemul/internal/ConsoleLogger.java
+++ b/user/super/com/google/gwt/emul/javaemul/internal/ConsoleLogger.java
@@ -38,7 +38,7 @@
 
   private void log(String level, Throwable t, String label, boolean expanded) {
     groupStart(label + t.toString(), expanded);
-    log(level, getBackingError(t));
+    log(level, getBackingError(t, t.getBackingJsObject()));
     Throwable cause = t.getCause();
     if (cause != null) {
       log(level, cause, "Caused by: ", false);
@@ -60,7 +60,7 @@
     groupEnd.call(console);
   }-*/;
 
-  private native String getBackingError(Throwable t) /*-{
+  private native String getBackingError(Throwable t, Object backingError) /*-{
     // Converts CollectorLegacy (IE8/IE9/Safari5) function stack to something readable.
     function stringify(fnStack) {
       if (!fnStack || fnStack.length == 0) {
@@ -68,7 +68,7 @@
       }
       return "\t" + fnStack.join("\n\t");
     }
-    var backingError = t.backingJsObject;
+
     return backingError && (backingError.stack || stringify(t["fnStack"]));
   }-*/;
 }
diff --git a/user/test/com/google/gwt/emultest/java/lang/JsExceptionTest.java b/user/test/com/google/gwt/emultest/java/lang/JsExceptionTest.java
index 68558ff..245ee41 100644
--- a/user/test/com/google/gwt/emultest/java/lang/JsExceptionTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/JsExceptionTest.java
@@ -14,6 +14,7 @@
 package com.google.gwt.emultest.java.lang;
 
 import static com.google.gwt.emultest.java.lang.JsExceptionViolator.createJsException;
+import static com.google.gwt.emultest.java.lang.JsExceptionViolator.getBackingJsObject;
 
 import com.google.gwt.testing.TestUtils;
 
@@ -155,10 +156,6 @@
     assertEquals(expected, getBackingJsObject(exception));
   }
 
-  private static native Object getBackingJsObject(Throwable e) /*-{
-    return e.backingJsObject;
-  }-*/;
-
   private static native Object makeJSO() /*-{
     return {
       toString : function() {
diff --git a/user/test/com/google/gwt/emultest/java/lang/JsExceptionViolator.java b/user/test/com/google/gwt/emultest/java/lang/JsExceptionViolator.java
index f538a5c..9ab620f 100644
--- a/user/test/com/google/gwt/emultest/java/lang/JsExceptionViolator.java
+++ b/user/test/com/google/gwt/emultest/java/lang/JsExceptionViolator.java
@@ -22,4 +22,7 @@
   public static native Exception createJsException(Object wrapped) /*-{
     return @com.google.gwt.core.client.JavaScriptException::new(Ljava/lang/Object;)(wrapped);
   }-*/;
+  public static native Object getBackingJsObject(Throwable t) /*-{
+    return t.@Throwable::backingJsObject;
+  }-*/;
 }