aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/com/jantuomi/tunkki/exception/TunkkiError.java
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2016-07-26 21:46:30 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2016-07-26 21:46:30 +0300
commit22ec5b89f053830f5ed3798abc28bd23ff7ca6a2 (patch)
treec143098b20f757181f693fd6955938b302778f0a /src/main/com/jantuomi/tunkki/exception/TunkkiError.java
parent10d98039cbd7b8c2dae808761705ce64de2c69f6 (diff)
Rename BorkError to TunkkiError
Diffstat (limited to 'src/main/com/jantuomi/tunkki/exception/TunkkiError.java')
-rw-r--r--src/main/com/jantuomi/tunkki/exception/TunkkiError.java61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/main/com/jantuomi/tunkki/exception/TunkkiError.java b/src/main/com/jantuomi/tunkki/exception/TunkkiError.java
new file mode 100644
index 0000000..b75398a
--- /dev/null
+++ b/src/main/com/jantuomi/tunkki/exception/TunkkiError.java
@@ -0,0 +1,61 @@
+package com.jantuomi.tunkki.exception;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by jan on 12.6.2016.
+ */
+public class TunkkiError extends Exception {
+
+ public enum ExceptionType {
+ IllegalTokenError,
+ SyntaxError,
+ TypeError,
+ ArgumentError,
+ UndeclaredSymbolError,
+ IncludeError,
+ GeneralError
+ }
+
+ public static Map<ExceptionType, String> errorTexts = new HashMap<>();
+
+ static {
+ errorTexts.put(ExceptionType.IllegalTokenError, "Unknown or illegal token %s found.");
+ errorTexts.put(ExceptionType.SyntaxError, "Unexpected %s.");
+ errorTexts.put(ExceptionType.TypeError, "Incompatible types %s and %s.");
+ errorTexts.put(ExceptionType.ArgumentError, "The parameter list given to function %s is either of wrong length or the parameters are of wrong type. Actual: %s");
+ errorTexts.put(ExceptionType.UndeclaredSymbolError, "No symbol %s defined, parameters: [%s].");
+ errorTexts.put(ExceptionType.IncludeError, "File %s could not be included.");
+ errorTexts.put(ExceptionType.GeneralError, "%s");
+ }
+
+ private ExceptionType exceptionType;
+ private String completeMessage;
+
+ public TunkkiError(ExceptionType exceptionType, int line, String... args) {
+ super(exceptionType.toString(), null, false, false);
+ this.exceptionType = exceptionType;
+ this.completeMessage = formatMessage(exceptionType.toString() + ": " + what(exceptionType), line, args);
+ }
+
+ private static String formatMessage(String message, int line, String... args) {
+
+ message = String.format(message, args);
+ if (line == -1) {
+ return "\n" + message;
+ } else {
+ return String.format("\nline %d: ", line) + message;
+ }
+ }
+
+ public static String what(ExceptionType type) {
+ return errorTexts.get(type);
+ }
+
+ @Override
+ public void printStackTrace() {
+ System.err.println(completeMessage);
+ }
+}