Improves error handling (foreground still needs testing).

This commit is contained in:
Markil3
2021-09-14 11:21:02 -06:00
parent 3eab100a08
commit 849771853c
11 changed files with 623 additions and 181 deletions

View File

@@ -5,6 +5,8 @@
package edu.regis.universeplayer.addon;
import com.google.gson.*;
import edu.regis.universeplayer.browserCommands.CommandConfirmation;
import edu.regis.universeplayer.browserCommands.MessageRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -266,4 +268,10 @@ public class BrowserLink extends MessageRunner
}
return returnValue;
}
@Override
public Object getErrorObject(Throwable e)
{
return new CommandConfirmation(e);
}
}

View File

@@ -21,7 +21,7 @@ public class ThrowableSerializer implements JsonSerializer<Throwable>, JsonDeser
{
stack.add(context.serialize(trace));
}
ob.add("trace", stack);
ob.add("stack", stack);
JsonArray suppressed = new JsonArray();
for (Throwable throwable: src.getSuppressed())
{
@@ -35,19 +35,37 @@ public class ThrowableSerializer implements JsonSerializer<Throwable>, JsonDeser
public Throwable deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{
JsonObject ob = json.getAsJsonObject();
Throwable throwable = new Throwable(ob.get("message").getAsString(), context.deserialize(ob.get("cause"), typeOfT));
throwable.initCause(context.deserialize(ob.get("cause"), Throwable.class));
JsonArray traceJson = ob.getAsJsonArray("trace");
StackTraceElement[] trace = new StackTraceElement[traceJson.size()];
for (int i = 0; i < trace.length; i++)
Throwable cause = context.deserialize(ob.get("cause"), typeOfT);
Throwable throwable;
if (cause == null)
{
trace[i] = context.deserialize(traceJson.get(i), StackTraceElement.class);
throwable = new Throwable(ob.get("message").getAsString());
}
throwable.setStackTrace(trace);
JsonArray suppressed = ob.getAsJsonArray("suppressed");
for (JsonElement el: suppressed)
else
{
throwable.addSuppressed(context.deserialize(el, Throwable.class));
throwable = new Throwable(ob.get("message").getAsString(), context
.deserialize(ob.get("cause"), typeOfT));
throwable.initCause(context.deserialize(ob.get("cause"), Throwable.class));
}
JsonArray traceJson = ob.getAsJsonArray("stack");
if (traceJson != null)
{
StackTraceElement[] trace = new StackTraceElement[traceJson.size()];
for (int i = 0; i < trace.length; i++)
{
trace[i] = context
.deserialize(traceJson.get(i), StackTraceElement.class);
}
throwable.setStackTrace(trace);
}
JsonArray suppressed = ob.getAsJsonArray("suppressed");
if (suppressed != null)
{
for (JsonElement el : suppressed)
{
throwable.addSuppressed(context
.deserialize(el, Throwable.class));
}
}
return throwable;
}