From 4f1057732144ec9747ab9477aa3306d2a8223b5f Mon Sep 17 00:00:00 2001 From: yugecin Date: Sun, 15 Jan 2017 00:20:20 +0100 Subject: [PATCH] make the error handler a single instance and always dump the displaycontainer --- src/yugecin/opsudance/OpsuDance.java | 4 +- .../opsudance/errorhandling/ErrorHandler.java | 46 +++++++++++-------- .../opsudance/kernel/OpsuDanceModule.java | 3 ++ 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/src/yugecin/opsudance/OpsuDance.java b/src/yugecin/opsudance/OpsuDance.java index 293019bd..2d4ed702 100644 --- a/src/yugecin/opsudance/OpsuDance.java +++ b/src/yugecin/opsudance/OpsuDance.java @@ -76,7 +76,7 @@ public class OpsuDance { try { container.setup(); } catch (LWJGLException e) { - ErrorHandler.error("could not initialize GL", e, container).preventContinue().show(); + ErrorHandler.error("could not initialize GL", e).preventContinue().show(); System.exit(1); } Exception caughtException = null; @@ -86,7 +86,7 @@ public class OpsuDance { caughtException = e; } container.teardown(); - return caughtException != null && ErrorHandler.error("update/render error", caughtException, container).show().shouldIgnoreAndContinue(); + return caughtException != null && ErrorHandler.error("update/render error", caughtException).show().shouldIgnoreAndContinue(); } private void initDatabase() { diff --git a/src/yugecin/opsudance/errorhandling/ErrorHandler.java b/src/yugecin/opsudance/errorhandling/ErrorHandler.java index 411afa0c..9592de0c 100644 --- a/src/yugecin/opsudance/errorhandling/ErrorHandler.java +++ b/src/yugecin/opsudance/errorhandling/ErrorHandler.java @@ -17,9 +17,11 @@ */ package yugecin.opsudance.errorhandling; +import com.google.inject.Inject; import itdelatrisu.opsu.Options; import itdelatrisu.opsu.Utils; import org.newdawn.slick.util.Log; +import yugecin.opsudance.core.DisplayContainer; import yugecin.opsudance.utils.MiscUtils; import javax.swing.*; @@ -39,31 +41,38 @@ import java.net.URLEncoder; */ public class ErrorHandler { - private final String customMessage; - private final Throwable cause; - private final String errorDump; - private final String messageBody; + private static ErrorHandler instance; + + private final DisplayContainer displayContainer; + + private String customMessage; + private Throwable cause; + private String errorDump; + private String messageBody; private boolean preventContinue; private boolean preventReport; private boolean ignoreAndContinue; - private ErrorHandler(String customMessage, Throwable cause, ErrorDumpable[] errorInfoProviders) { + @Inject + public ErrorHandler(DisplayContainer displayContainer) { + this.displayContainer = displayContainer; + instance = this; + } + + private ErrorHandler init(String customMessage, Throwable cause) { this.customMessage = customMessage; this.cause = cause; StringWriter dump = new StringWriter(); - for (ErrorDumpable infoProvider : errorInfoProviders) { - try { - infoProvider.writeErrorDump(dump); - } catch (Exception e) { - dump - .append("### ") - .append(e.getClass().getSimpleName()) - .append(" while creating errordump for ") - .append(infoProvider.getClass().getSimpleName()); - e.printStackTrace(new PrintWriter(dump)); - } + try { + displayContainer.writeErrorDump(dump); + } catch (Exception e) { + dump + .append("### ") + .append(e.getClass().getSimpleName()) + .append(" while creating errordump"); + e.printStackTrace(new PrintWriter(dump)); } errorDump = dump.toString(); @@ -76,10 +85,11 @@ public class ErrorHandler { Log.error("====== start unhandled exception dump"); Log.error(messageBody); Log.error("====== end unhandled exception dump"); + return this; } - public static ErrorHandler error(String message, Throwable cause, ErrorDumpable... errorInfoProviders) { - return new ErrorHandler(message, cause, errorInfoProviders); + public static ErrorHandler error(String message, Throwable cause) { + return instance.init(message, cause); } public ErrorHandler preventReport() { diff --git a/src/yugecin/opsudance/kernel/OpsuDanceModule.java b/src/yugecin/opsudance/kernel/OpsuDanceModule.java index 0708d3f1..19897f19 100644 --- a/src/yugecin/opsudance/kernel/OpsuDanceModule.java +++ b/src/yugecin/opsudance/kernel/OpsuDanceModule.java @@ -22,6 +22,7 @@ import yugecin.opsudance.PreStartupInitializer; import yugecin.opsudance.core.DisplayContainer; import yugecin.opsudance.core.Demux; import yugecin.opsudance.core.state.transitions.EmptyTransitionState; +import yugecin.opsudance.errorhandling.ErrorHandler; import yugecin.opsudance.states.EmptyRedState; import yugecin.opsudance.states.EmptyState; import yugecin.opsudance.core.state.transitions.FadeInTransitionState; @@ -35,6 +36,8 @@ public class OpsuDanceModule extends AbstractModule { bind(Demux.class).asEagerSingleton(); bind(DisplayContainer.class).asEagerSingleton(); + bind(ErrorHandler.class).asEagerSingleton(); + bind(EmptyTransitionState.class).asEagerSingleton(); bind(FadeInTransitionState.class).asEagerSingleton(); bind(FadeOutTransitionState.class).asEagerSingleton();