From 112af1df833b11b2aa2005d3b91c978c888dcda1 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 7 Sep 2017 21:40:44 +0300 Subject: [PATCH] Log runtime errors --- .../main/java/com/annimon/hotarufx/Main.java | 7 ++----- .../hotarufx/exceptions/Exceptions.java | 18 ++++++++++++++++++ .../ui/controller/EditorController.java | 12 ++++++++++-- 3 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/com/annimon/hotarufx/exceptions/Exceptions.java diff --git a/app/src/main/java/com/annimon/hotarufx/Main.java b/app/src/main/java/com/annimon/hotarufx/Main.java index d92071e..1fdb57f 100644 --- a/app/src/main/java/com/annimon/hotarufx/Main.java +++ b/app/src/main/java/com/annimon/hotarufx/Main.java @@ -1,10 +1,9 @@ package com.annimon.hotarufx; +import com.annimon.hotarufx.exceptions.Exceptions; import com.annimon.hotarufx.ui.control.ClickableHyperLink; import com.annimon.hotarufx.ui.controller.EditorController; import java.io.IOException; -import java.io.PrintWriter; -import java.io.StringWriter; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; @@ -33,9 +32,7 @@ public class Main extends Application { controller.setPrimaryStage(primaryStage); primaryStage.setScene(scene); } catch (IOException ex) { - val sw = new StringWriter(); - ex.printStackTrace(new PrintWriter(sw)); - val text = new TextArea(sw.toString()); + val text = new TextArea(Exceptions.stackTraceToString(ex)); text.setEditable(false); primaryStage.setScene(new Scene(text)); } diff --git a/app/src/main/java/com/annimon/hotarufx/exceptions/Exceptions.java b/app/src/main/java/com/annimon/hotarufx/exceptions/Exceptions.java new file mode 100644 index 0000000..78fab8e --- /dev/null +++ b/app/src/main/java/com/annimon/hotarufx/exceptions/Exceptions.java @@ -0,0 +1,18 @@ +package com.annimon.hotarufx.exceptions; + +import java.io.PrintWriter; +import java.io.StringWriter; +import lombok.val; + +public final class Exceptions { + + private Exceptions() { + throw new IllegalStateException("Oh là là!"); + } + + public static String stackTraceToString(Throwable throwable) { + val sw = new StringWriter(); + throwable.printStackTrace(new PrintWriter(sw)); + return sw.toString(); + } +} diff --git a/app/src/main/java/com/annimon/hotarufx/ui/controller/EditorController.java b/app/src/main/java/com/annimon/hotarufx/ui/controller/EditorController.java index 2876c7d..efc65e2 100644 --- a/app/src/main/java/com/annimon/hotarufx/ui/controller/EditorController.java +++ b/app/src/main/java/com/annimon/hotarufx/ui/controller/EditorController.java @@ -4,6 +4,8 @@ import com.annimon.hotarufx.Main; import com.annimon.hotarufx.bundles.BundleLoader; import com.annimon.hotarufx.bundles.CompositionBundle; import com.annimon.hotarufx.bundles.NodesBundle; +import com.annimon.hotarufx.exceptions.Exceptions; +import com.annimon.hotarufx.exceptions.HotaruRuntimeException; import com.annimon.hotarufx.io.DocumentListener; import com.annimon.hotarufx.io.DocumentManager; import com.annimon.hotarufx.io.FileManager; @@ -144,7 +146,13 @@ public class EditorController implements Initializable, DocumentListener { logPane.setExpanded(true); return; } - program.accept(new InterpreterVisitor(), context); + try { + program.accept(new InterpreterVisitor(), context); + } catch (RuntimeException e) { + logError(Exceptions.stackTraceToString(e)); + logPane.setExpanded(true); + return; + } val stage = new Stage(); val composition = context.composition(); @@ -258,7 +266,7 @@ public class EditorController implements Initializable, DocumentListener { " .add(300 ms, 200)\n" + " .add(1 sec, 50)\n" + "\n" + - "render(A)"); + "render(A)\n"); } private String readProgram(String path) {