Skip to content

Commit

Permalink
fix: Super-source Exceptions#getStackTraceAsString on GWT.
Browse files Browse the repository at this point in the history
  • Loading branch information
crykn committed Nov 22, 2023
1 parent fd28ffd commit f002509
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 1 deletion.
2 changes: 1 addition & 1 deletion core/src/main/java/de/damios/guacamole/Exceptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public static void throwAsRuntimeException(Exception e, String msg) {

/**
* Returns a string containing the result of
* {@link Exception#printStackTrace() toString()}.
* {@link Exception#printStackTrace()}.
*/
@GwtIncompatible // java.io.PrintWriter, java.io.StringWriter
public static String getStackTraceAsString(Throwable e) {
Expand Down
73 changes: 73 additions & 0 deletions gdx-gwt/src/main/java/gwt/emu/de/damios/guacamole/Exceptions.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/*
* Copyright 2020 damios
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package de.damios.guacamole;

/**
* Static methods for dealing with exceptions.
*
* @author damios
*/
public final class Exceptions {

private Exceptions() {
throw new UnsupportedOperationException();
}

public static void throwAsRuntimeException(Exception e) {
throw new RuntimeException(e);
}

public static void throwAsRuntimeException(Exception e, String msg) {
throw new RuntimeException(msg, e);
}

/**
* Returns a string containing the result of
* {@link Exception#printStackTrace()}.
*/
public static String getStackTraceAsString(Throwable e) {
return getStackTraceAsStringImpl(e, "", "");
}

// Inspired by the emulated Throwable#printStackTraceImpl
private static String getStackTraceAsStringImpl(Throwable e, String prefix,
String ident) {
String out = "\n" + ident + prefix + e.toString();
out += getStackTraceItems(e, ident);

for (Throwable t : e.getSuppressed()) {
out += getStackTraceAsStringImpl(t, "Suppressed: ", "\t" + ident);
}

Throwable theCause = e.getCause();
if (theCause != null) {
out += getStackTraceAsStringImpl(theCause, "Caused by: ", ident);
}

return out;
}

// Inspired by the emulated Throwable#printStackTraceItems
private static String getStackTraceItems(Throwable e, String ident) {
String out = "";
for (StackTraceElement element : e.getStackTrace()) {
out += "\n" + ident + "\tat " + element;
}

return out;
}

}

0 comments on commit f002509

Please sign in to comment.