Mercurial Hosting > luan
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 |