Handle exceptions thrown from bindings as a convertible InvocationTargetException.

For example, if IncompleteRegionException is thrown by a binding, it
will result in a InvocationTargetException now with a getCause(),
which gets handled as if that exception was thrown from the actual
Method that is invoked for the command.
This commit is contained in:
sk89q 2014-06-30 22:51:21 -07:00
parent 11d37bce2b
commit 08ad5f4451
3 changed files with 7 additions and 6 deletions

View File

@ -23,6 +23,7 @@ import com.sk89q.minecraft.util.commands.CommandException;
import com.sk89q.worldedit.util.command.binding.PrimitiveBindings;
import com.sk89q.worldedit.util.command.binding.StandardBindings;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Type;
import java.util.List;
@ -77,8 +78,8 @@ public interface Binding {
* @throws ParameterException thrown if the parameter could not be formulated
* @throws CommandException on a command exception
*/
Object bind(ParameterData parameter, ArgumentStack scoped, boolean onlyConsume)
throws ParameterException, CommandException;
Object bind(ParameterData parameter, ArgumentStack scoped, boolean onlyConsume)
throws ParameterException, CommandException, InvocationTargetException;
/**
* Get a list of suggestions for the given parameter and user arguments.

View File

@ -143,7 +143,7 @@ public class BindingHelper implements Binding {
@Override
public Object bind(ParameterData parameter, ArgumentStack scoped,
boolean onlyConsume) throws ParameterException, CommandException {
boolean onlyConsume) throws ParameterException, CommandException, InvocationTargetException {
BoundMethod binding = match(parameter);
List<Object> args = new ArrayList<Object>();
args.add(scoped);
@ -178,7 +178,7 @@ public class BindingHelper implements Binding {
} else if (e.getCause() instanceof CommandException) {
throw (CommandException) e.getCause();
}
throw new RuntimeException(e.getCause());
throw e;
}
}

View File

@ -366,8 +366,8 @@ class ParametricCallable implements CommandCallable {
* @throws ParameterException on an error
* @throws CommandException on an error
*/
private Object getDefaultValue(int i, ContextArgumentStack scoped)
throws ParameterException, CommandException {
private Object getDefaultValue(int i, ContextArgumentStack scoped)
throws ParameterException, CommandException, InvocationTargetException {
CommandContext context = scoped.getContext();
ParameterData parameter = parameters[i];