Improved scripting error messages.

This commit is contained in:
sk89q 2011-01-22 16:23:04 -08:00
parent e94e1e29ce
commit 768ff9387c
3 changed files with 17 additions and 3 deletions

View File

@ -2203,13 +2203,15 @@ public class WorldEditController {
} catch (ScriptException e) {
player.printError("Failed to execute:");;
player.printRaw(e.getMessage());
e.printStackTrace();
} catch (NumberFormatException e) {
throw e;
} catch (WorldEditException e) {
throw e;
} catch (Throwable e) {
player.printError("Failed to execute (exception):");
player.printError("Failed to execute (see console):");
player.printRaw(e.getClass().getCanonicalName());
e.printStackTrace();
} finally {
for (EditSession editSession : scriptContext.getEditSessions()) {
session.remember(editSession);

View File

@ -22,6 +22,7 @@ package com.sk89q.worldedit.scripting;
import java.util.Map;
import javax.script.ScriptException;
import org.mozilla.javascript.*;
import com.sk89q.worldedit.WorldEditException;
public class RhinoCraftScriptEngine implements CraftScriptEngine {
private int timeLimit;
@ -38,7 +39,7 @@ public class RhinoCraftScriptEngine implements CraftScriptEngine {
@Override
public Object evaluate(String script, String filename, Map<String, Object> args)
throws ScriptException {
throws ScriptException, Throwable {
RhinoContextFactory factory = new RhinoContextFactory(timeLimit);
Context cx = factory.enterContext();
ScriptableObject scriptable = new ImporterTopLevel(cx);
@ -53,6 +54,13 @@ public class RhinoCraftScriptEngine implements CraftScriptEngine {
} catch (Error e) {
throw new ScriptException(e.getMessage());
} catch (RhinoException e) {
if (e instanceof WrappedException) {
Throwable cause = ((WrappedException)e).getCause();
if (cause instanceof WorldEditException) {
throw ((WrappedException)e).getCause();
}
}
String msg;
int line = (line = e.lineNumber()) == 0 ? -1 : line;

View File

@ -22,6 +22,7 @@ package com.sk89q.worldedit.scripting;
import java.util.Map;
import javax.script.ScriptException;
import com.sk89q.worldedit.WorldEditController;
import com.sk89q.worldedit.WorldEditException;
import sun.org.mozilla.javascript.internal.*;
public class SunRhinoCraftScriptEngine implements CraftScriptEngine {
@ -63,7 +64,10 @@ public class SunRhinoCraftScriptEngine implements CraftScriptEngine {
throw new ScriptException(e.getMessage());
} catch (RhinoException e) {
if (e instanceof WrappedException) {
throw ((WrappedException)e).getCause();
Throwable cause = ((WrappedException)e).getCause();
if (cause instanceof WorldEditException) {
throw ((WrappedException)e).getCause();
}
}
String msg;