diff --git a/user/src/com/google/gwt/core/client/impl/Impl.java b/user/src/com/google/gwt/core/client/impl/Impl.java
index 879a3eb4b70..12757e192ed 100644
--- a/user/src/com/google/gwt/core/client/impl/Impl.java
+++ b/user/src/com/google/gwt/core/client/impl/Impl.java
@@ -28,12 +28,6 @@
*/
public final class Impl {
- static {
- if (GWT.isScript() && StackTraceCreator.collector != null) {
- // Just enforces loading of StackTraceCreator early on, nothing else to do here...
- }
- }
-
private static final int WATCHDOG_ENTRY_DEPTH_CHECK_INTERVAL_MS = 2000;
/**
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 36088515828..ff067016c6e 100644
--- a/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
+++ b/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
@@ -65,6 +65,7 @@ abstract static class Collector {
* This legacy {@link Collector} simply crawls arguments.callee.caller for browsers
* that doesn't support {@code Error.stack} property.
*/
+ @Deprecated
static class CollectorLegacy extends Collector {
@Override
@@ -306,11 +307,11 @@ public StackTraceElement[] getStackTrace(Object ignored) {
* Collect necessary information to construct stack trace trace later in time.
*/
public static void captureStackTrace(Object error) {
- collector.collect(error);
+ getCollector().collect(error);
}
public static StackTraceElement[] constructJavaStackTrace(Throwable thrown) {
- StackTraceElement[] stackTrace = collector.getStackTrace(thrown);
+ StackTraceElement[] stackTrace = getCollector().getStackTrace(thrown);
return dropInternalFrames(stackTrace);
}
@@ -338,26 +339,10 @@ private static void splice(Object[] arr, int length) {
}
}
- // Visible for testing
- static final Collector collector;
-
- static {
- // Ensure old Safari falls back to legacy Collector implementation.
- boolean enforceLegacy = !supportsErrorStack();
- Collector c = GWT.create(Collector.class);
- collector = (c instanceof CollectorModern && enforceLegacy) ? new CollectorLegacy() : c;
+ static Collector getCollector() {
+ return GWT.create(Collector.class);
}
- private static native boolean supportsErrorStack() /*-{
- // Error.stackTraceLimit is cheaper to check and available in both IE and Chrome
- if (Error.stackTraceLimit > 0) {
- $wnd.Error.stackTraceLimit = Error.stackTraceLimit = 64;
- return true;
- }
-
- return "stack" in new Error();
- }-*/;
-
private static native JsArrayString getFnStack(Object e) /*-{
return (e && e["fnStack"]) ? e["fnStack"] : [];
}-*/;
diff --git a/user/test/com/google/gwt/core/client/impl/StackTraceEmulTest.java b/user/test/com/google/gwt/core/client/impl/StackTraceEmulTest.java
index 6a3822ac069..2b7e9c3e5f4 100644
--- a/user/test/com/google/gwt/core/client/impl/StackTraceEmulTest.java
+++ b/user/test/com/google/gwt/core/client/impl/StackTraceEmulTest.java
@@ -37,7 +37,7 @@ protected String[] getTraceJse(Object thrown) {
@Override
public void testCollectorType() {
- assertTrue(StackTraceCreator.collector instanceof StackTraceCreator.CollectorEmulated);
+ assertTrue(StackTraceCreator.getCollector() instanceof StackTraceCreator.CollectorEmulated);
}
/**
diff --git a/user/test/com/google/gwt/core/client/impl/StackTraceNativeTest.java b/user/test/com/google/gwt/core/client/impl/StackTraceNativeTest.java
index 1a6cd3591c8..7ea5f13c406 100644
--- a/user/test/com/google/gwt/core/client/impl/StackTraceNativeTest.java
+++ b/user/test/com/google/gwt/core/client/impl/StackTraceNativeTest.java
@@ -17,7 +17,6 @@
import static com.google.gwt.core.client.impl.StackTraceExamples.TYPE_ERROR;
-import com.google.gwt.core.client.impl.StackTraceCreator.CollectorLegacy;
import com.google.gwt.core.client.impl.StackTraceCreator.CollectorModern;
import com.google.gwt.junit.DoNotRunWith;
import com.google.gwt.junit.Platform;
@@ -49,7 +48,7 @@ protected String[] getTraceJava() {
@Override
protected String[] getTraceRecursion() {
// First two frames are optional as they are automatically stripped by EDGE.
- final String[] expectedModern = {
+ return new String[]{
"?" + Impl.getNameOf("@java.lang.Throwable::new(Ljava/lang/String;)"),
"?" + Impl.getNameOf("@java.lang.Exception::new(Ljava/lang/String;)"),
Impl.getNameOf("@com.google.gwt.core.client.impl.StackTraceExamples::throwException2(*)"),
@@ -62,16 +61,6 @@ protected String[] getTraceRecursion() {
Impl.getNameOf("@com.google.gwt.core.client.impl.StackTraceExamples::getLiveException(*)"),
Impl.getNameOf("@com.google.gwt.core.client.impl.StackTraceTestBase::testTraceRecursion()"),
};
-
- final String[] expectedLegacy = {
- Impl.getNameOf("@java.lang.Throwable::new(Ljava/lang/String;)"),
- Impl.getNameOf("@java.lang.Exception::new(Ljava/lang/String;)"),
- Impl.getNameOf("@com.google.gwt.core.client.impl.StackTraceExamples::throwException2(*)"),
- Impl.getNameOf("@com.google.gwt.core.client.impl.StackTraceExamples::throwException1(*)"),
- Impl.getNameOf("@com.google.gwt.core.client.impl.StackTraceExamples::throwRecursive(*)"),
- };
-
- return isLegacyCollector() ? expectedLegacy : expectedModern;
}
@Override
@@ -87,12 +76,6 @@ protected String[] getTraceJse(Object thrown) {
Impl.getNameOf("@com.google.gwt.core.client.impl.StackTraceTestBase::assertJse(*)"),
};
- final String[] limited_wrap = {
- Impl.getNameOf("@com.google.gwt.lang.Exceptions::toJava(*)"),
- Impl.getNameOf("@com.google.gwt.core.client.impl.StackTraceExamples::getLiveException(*)"),
- Impl.getNameOf("@com.google.gwt.core.client.impl.StackTraceTestBase::assertJse(*)"),
- };
-
final String[] limited_fillInStackTrace = {
Impl.getNameOf("@java.lang.Throwable::fillInStackTrace()"),
Impl.getNameOf("@com.google.gwt.core.client.impl.StackTraceExamples::getLiveException(*)"),
@@ -101,28 +84,14 @@ protected String[] getTraceJse(Object thrown) {
// For legacy browsers and non-error javascript exceptions (e.g. throw "string"), we can only
// construct stack trace from the catch block and below.
- return isLegacyCollector()
- ? limited_wrap : (thrown != TYPE_ERROR ? limited_fillInStackTrace : full);
+ return thrown != TYPE_ERROR ? limited_fillInStackTrace : full;
}
public void testCollectorType() {
- if (isSafari5()) {
- assertTrue(isLegacyCollector());
- } else {
- assertTrue(isModernCollector());
- }
- }
-
- private static boolean isLegacyCollector() {
- return StackTraceCreator.collector instanceof CollectorLegacy;
+ assertTrue(isModernCollector());
}
private static boolean isModernCollector() {
- return StackTraceCreator.collector instanceof CollectorModern;
+ return StackTraceCreator.getCollector() instanceof CollectorModern;
}
-
- private static native boolean isSafari5() /*-{
- return navigator.userAgent.match(' Safari/') && !navigator.userAgent.match(' Chrom')
- && !!navigator.userAgent.match(' Version/5.');
- }-*/;
}