fixed bug: invoke java variable parameter type method problem
This commit is contained in:
@@ -21,6 +21,7 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package org.luaj.vm2.libs.jse;
|
package org.luaj.vm2.libs.jse;
|
||||||
|
|
||||||
|
import java.lang.reflect.Array;
|
||||||
import org.luaj.vm2.Varargs;
|
import org.luaj.vm2.Varargs;
|
||||||
import org.luaj.vm2.libs.VarArgFunction;
|
import org.luaj.vm2.libs.VarArgFunction;
|
||||||
import org.luaj.vm2.libs.jse.CoerceLuaToJava.Coercion;
|
import org.luaj.vm2.libs.jse.CoerceLuaToJava.Coercion;
|
||||||
@@ -48,7 +49,7 @@ class JavaMember extends VarArgFunction {
|
|||||||
|
|
||||||
protected JavaMember(Class[] params, int modifiers) {
|
protected JavaMember(Class[] params, int modifiers) {
|
||||||
boolean isvarargs = ((modifiers & METHOD_MODIFIERS_VARARGS) != 0);
|
boolean isvarargs = ((modifiers & METHOD_MODIFIERS_VARARGS) != 0);
|
||||||
fixedargs = new Coercion[isvarargs? params.length-1: params.length];
|
fixedargs = new CoerceLuaToJava.Coercion[isvarargs? params.length-1: params.length];
|
||||||
for ( int i=0; i<fixedargs.length; i++ )
|
for ( int i=0; i<fixedargs.length; i++ )
|
||||||
fixedargs[i] = CoerceLuaToJava.getCoercion( params[i] );
|
fixedargs[i] = CoerceLuaToJava.getCoercion( params[i] );
|
||||||
varargs = isvarargs? CoerceLuaToJava.getCoercion( params[params.length-1] ): null;
|
varargs = isvarargs? CoerceLuaToJava.getCoercion( params[params.length-1] ): null;
|
||||||
@@ -73,6 +74,11 @@ class JavaMember extends VarArgFunction {
|
|||||||
a[i] = fixedargs[i].coerce( args.arg(i+1) );
|
a[i] = fixedargs[i].coerce( args.arg(i+1) );
|
||||||
} else {
|
} else {
|
||||||
int n = Math.max(fixedargs.length,args.narg());
|
int n = Math.max(fixedargs.length,args.narg());
|
||||||
|
// This situation indicates that the method has only one input parameter,
|
||||||
|
// and the parameter is a variable parameter type, etc: append(String...args).
|
||||||
|
if (n == 0 && varargs instanceof CoerceLuaToJava.ArrayCoercion) {
|
||||||
|
return new Object[] {Array.newInstance(((CoerceLuaToJava.ArrayCoercion)varargs).componentType,0)};
|
||||||
|
}
|
||||||
a = new Object[n];
|
a = new Object[n];
|
||||||
for ( int i=0; i<fixedargs.length; i++ )
|
for ( int i=0; i<fixedargs.length; i++ )
|
||||||
a[i] = fixedargs[i].coerce( args.arg(i+1) );
|
a[i] = fixedargs[i].coerce( args.arg(i+1) );
|
||||||
|
|||||||
Reference in New Issue
Block a user