From cbf4b410804f74656a93516ab492b991254ee4f2 Mon Sep 17 00:00:00 2001 From: kohsuke Date: Sat, 5 Sep 2009 14:48:11 +0000 Subject: [PATCH] made multiple @Argument work co-operatively. git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@21485 71c3de6d-444a-0410-be80-ed276b4c234a --- .../hudson/cli/declarative/MethodBinder.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/core/src/main/java/hudson/cli/declarative/MethodBinder.java b/core/src/main/java/hudson/cli/declarative/MethodBinder.java index 5a343acc65..a801701c8e 100644 --- a/core/src/main/java/hudson/cli/declarative/MethodBinder.java +++ b/core/src/main/java/hudson/cli/declarative/MethodBinder.java @@ -28,6 +28,7 @@ import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; import org.kohsuke.args4j.Option; import org.kohsuke.args4j.spi.Setter; +import org.kohsuke.args4j.spi.OptionHandler; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationTargetException; @@ -56,6 +57,9 @@ class MethodBinder { final Class[] paramTypes = method.getParameterTypes(); arguments = new Object[params.length]; + // to work in cooperation with earlier arguments, add bias to all the ones that this one defines. + final int bias = parser.getArguments().size(); + Annotation[][] pa = method.getParameterAnnotations(); for (int i=0; i0) a = new ArgumentImpl((Argument)a,bias); parser.addArgument(setter,(Argument)a); } } @@ -94,4 +99,46 @@ class MethodBinder { throw e; } } + + /** + * {@link Argument} implementation that adds a bias to {@link #index()}. + */ + @SuppressWarnings({"ClassExplicitlyAnnotation"}) + private static final class ArgumentImpl implements Argument { + private final Argument base; + private final int bias; + + private ArgumentImpl(Argument base, int bias) { + this.base = base; + this.bias = bias; + } + + public String usage() { + return base.usage(); + } + + public String metaVar() { + return base.metaVar(); + } + + public boolean required() { + return base.required(); + } + + public Class handler() { + return base.handler(); + } + + public int index() { + return base.index()+bias; + } + + public boolean multiValued() { + return base.multiValued(); + } + + public Class annotationType() { + return base.annotationType(); + } + } } -- GitLab