Improve decoration design-pattern model of exceptions

This commit is contained in:
2020-03-15 18:33:06 +01:00
parent 2c1bae2974
commit 61e7793f24
5 changed files with 34 additions and 8 deletions

View File

@@ -5,6 +5,8 @@ import com.xenomachina.argparser.mainBody
import io.smnp.cli.model.entity.Arguments
import io.smnp.cli.model.enumeration.ModulesPrintMode
import io.smnp.environment.DefaultEnvironment
import io.smnp.error.EnvironmentException
import io.smnp.error.PositionException
import io.smnp.error.SmnpException
import io.smnp.ext.DefaultModuleRegistry
import io.smnp.interpreter.DefaultInterpreter
@@ -41,8 +43,13 @@ fun main(args: Array<String>): Unit = mainBody {
DefaultModuleRegistry.registeredModules().forEach { println(it) }
}
} catch (e: SmnpException) {
System.err.println(e.friendlyName)
val position = e.exceptionChain.mapNotNull { it as? PositionException }.lastOrNull()?.position ?: ""
val stacktrace = e.exceptionChain.mapNotNull { it as? EnvironmentException }.lastOrNull()?.let {
"\nStack trace:\n${it.environment.stackTrace()}"
} ?: ""
System.err.println(e.friendlyName + " " + position)
System.err.println(e.message)
System.err.println(stacktrace)
exitProcess(1)
}
}