Closed fdodino closed 6 years ago
Estoy trabajando en el Issue para la consola en primer lugar, logré reutilizar el código de WollokExceptionUtils utilzado para los test. El problema es que solo puedo arrojar el error del interpreter, pero cuando intento arrojar el archivo y línea me arroja del syntetic file que utiliza el REPL, al igual que su nro de línea.
Veo que originalCause da un Throwable, cosa que no tiene ni línea ni URL, es correcto?
Por ahora estoy buscando como llegar al lugar donde tratar el problema para el Wollok Program. Si alguien tiene algún tipo donde encontrarlo es bienvenido.
Bueno, terminé encontrando que hay una clase WollokInterpreterConsole en project.wollok. El tema es que tengo que utilizar la lógica que se creó para los test y se encuentra en otro proyecto. Ahora el problema es que no tiene sentido importar desde el manifest wollok.launcher, sino que la lógica que se creó para los test (WollokExceptionUtils), no debería encontrarse el project.wollok? de hecho que diferencia hay con WollokExceptionExtensions de project wollok @fdodino ?
Hay un WollokExceptionExtensions en el proyecto Wollok, ése podés utilizar. Por otra parte me llama la atención que no tengas el stack trace filtrado, que debería recuperarte la info que estás buscando. En WollokRepl lo tenés:
def dispatch void handleException(Throwable e) {
println(e.stackTraceAsString.errorStyle)
}
def dispatch void handleException(WollokProgramExceptionWrapper e) {
// Wollok-level user exception
println((e.exceptionClassName + ": " + e.wollokMessage).errorStyle)
val errorLine = e.wollokException
.convertStackTrace
.toList
.map [ stackDTO | stackDTO.toLinkForConsole ]
.join(System.lineSeparator)
if (errorLine !== null && !errorLine.equals("")) {
printlnIdent(errorLine.errorStyle)
}
}
def dispatch void handleException(WollokInterpreterException e) {
if (e.lineNumber > numberOfLinesBefore) {
printlnIdent('''«WVM_ERROR» («e.lineNumber - numberOfLinesBefore»): «e.nodeText»:'''.errorStyle)
}
if (e.cause !== null) {
indent
handleException(e.cause)
}
}
A partir de la versión 1.6.5, los tests atrapan errores del intérprete y muestran el mensaje de error evitando el stack trace completo que se imprimía antes en el label del mensaje de error.
Falta hacer eso para los mensajes de error del intérprete (WollokInterpreterError.originalCause) en programas y consola REPL:
(repasando el issue #690)