comparison src/luan/LuanJavaFunction.java @ 57:19ca9c4c6c7f

auto-convert table to java array git-svn-id: https://luan-java.googlecode.com/svn/trunk@58 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Sun, 06 Jan 2013 19:17:56 +0000
parents c84274b18f0c
children a68ccb7aaa9c
comparison
equal deleted inserted replaced
56:c84274b18f0c 57:19ca9c4c6c7f
369 return t.asSet(); 369 return t.asSet();
370 } 370 }
371 return obj; 371 return obj;
372 } 372 }
373 }; 373 };
374
375 private static class ArgArray implements ArgConverter {
376 private final Object[] a;
377
378 ArgArray(Class cls) {
379 a = (Object[])Array.newInstance(cls.getComponentType(),0);
380 }
381
382 public Object convert(Object obj) {
383 if( obj instanceof LuanTable ) {
384 LuanTable t = (LuanTable)obj;
385 if( t.isList() ) {
386 try {
387 return t.asList().toArray(a);
388 } catch(ArrayStoreException e) {}
389 }
390 }
391 return obj;
392 }
393 }
374 394
375 private static boolean takesLuaState(JavaMethod m) { 395 private static boolean takesLuaState(JavaMethod m) {
376 Class<?>[] paramTypes = m.getParameterTypes(); 396 Class<?>[] paramTypes = m.getParameterTypes();
377 return paramTypes.length > 0 && paramTypes[0].equals(LuanState.class); 397 return paramTypes.length > 0 && paramTypes[0].equals(LuanState.class);
378 } 398 }
414 return ARG_MAP; 434 return ARG_MAP;
415 if( cls.equals(List.class) ) 435 if( cls.equals(List.class) )
416 return ARG_LIST; 436 return ARG_LIST;
417 if( cls.equals(Set.class) ) 437 if( cls.equals(Set.class) )
418 return ARG_SET; 438 return ARG_SET;
439 if( cls.isArray() && !cls.getComponentType().isPrimitive() )
440 return new ArgArray(cls);
419 return ARG_SAME; 441 return ARG_SAME;
420 } 442 }
421 443
422 444
423 445