All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jetbrains.kotlinx.jupyter.exceptions.ReplException.kt Maven / Gradle / Ivy

Go to download

Implementation of REPL compiler and preprocessor for Jupyter dialect of Kotlin (IDE-compatible)

There is a newer version: 0.12.0-290
Show newest version
package org.jetbrains.kotlinx.jupyter.exceptions

import kotlinx.serialization.json.JsonObject
import java.io.PrintWriter
import java.io.StringWriter
import java.lang.reflect.InvocationTargetException

open class ReplException(message: String, cause: Throwable? = null) : Exception(message, cause) {
    open fun getAdditionalInfoJson(): JsonObject? = null

    open fun render(): String? =
        buildString {
            appendLine(message)
            val cause = cause
            if (cause != null) {
                when (cause) {
                    is InvocationTargetException -> appendLine(cause.targetException.toString())
                    is ReplCompilerException -> {
                        appendLine("Error compiling code:")
                        appendLine(cause.failedCode)
                        cause.errorResult?.let { errors ->
                            appendLine("\nErrors:")
                            appendLine(errors.getErrors())
                            appendLine()
                        }
                    }
                    else -> appendLine(cause.toString())
                }
            }
            appendLine(messageAndStackTrace(false))
        }
}

fun Throwable.messageAndStackTrace(withMessage: Boolean = true): String {
    val writer = StringWriter()
    val printer = PrintWriter(writer)
    if (withMessage) printer.println(message)
    printStackTrace(printer)
    printer.flush()
    return writer.toString()
}

fun Throwable.renderException(): String {
    return when (this) {
        is ReplException -> render().orEmpty()
        else -> messageAndStackTrace()
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy