Fix Lua to Java coercion directly on Java classes.
This commit is contained in:
@@ -848,6 +848,7 @@ Files are no longer hosted at LuaForge.
|
||||
<li>Fix bug that didn't read package.path from environment.</li>
|
||||
<li>Fix pluggable scripting engine lookup, simplify implementation, and add unit tests.</li>
|
||||
<li>Coerce script engine eval() return values to Java.</li>
|
||||
<li>Fix Lua to Java coercion directly on Java classes.</li>
|
||||
|
||||
</ul></td></tr>
|
||||
</table></td></tr></table>
|
||||
|
||||
@@ -131,11 +131,12 @@ public class CoerceJavaToLua {
|
||||
public static LuaValue coerce(Object o) {
|
||||
if ( o == null )
|
||||
return LuaValue.NIL;
|
||||
if (o instanceof Class)
|
||||
return JavaClass.forClass((Class) o);
|
||||
Class clazz = o.getClass();
|
||||
Coercion c = (Coercion) COERCIONS.get( clazz );
|
||||
if ( c == null ) {
|
||||
c = o instanceof Class? JavaClass.forClass((Class)o):
|
||||
clazz.isArray()? arrayCoercion:
|
||||
c = clazz.isArray()? arrayCoercion:
|
||||
instanceCoercion;
|
||||
COERCIONS.put( clazz, c );
|
||||
}
|
||||
|
||||
@@ -55,6 +55,30 @@ public class LuaJavaCoercionTest extends TestCase {
|
||||
assertEquals( "777", o );
|
||||
}
|
||||
|
||||
public void testJavaClassToLuaUserdata() {
|
||||
LuaValue va = CoerceJavaToLua.coerce(ClassA.class);
|
||||
LuaValue va1 = CoerceJavaToLua.coerce(ClassA.class);
|
||||
LuaValue vb = CoerceJavaToLua.coerce(ClassB.class);
|
||||
assertSame(va, va1);
|
||||
assertNotSame(va, vb);
|
||||
LuaValue vi = CoerceJavaToLua.coerce(new ClassA());
|
||||
assertNotSame(va, vi);
|
||||
assertTrue(vi.isuserdata());
|
||||
assertTrue(vi.isuserdata(ClassA.class));
|
||||
assertFalse(vi.isuserdata(ClassB.class));
|
||||
LuaValue vj = CoerceJavaToLua.coerce(new ClassB());
|
||||
assertNotSame(vb, vj);
|
||||
assertTrue(vj.isuserdata());
|
||||
assertFalse(vj.isuserdata(ClassA.class));
|
||||
assertTrue(vj.isuserdata(ClassB.class));
|
||||
}
|
||||
|
||||
static class ClassA {
|
||||
}
|
||||
|
||||
static class ClassB {
|
||||
}
|
||||
|
||||
public void testJavaIntArrayToLuaTable() {
|
||||
int[] i = { 222, 333 };
|
||||
LuaValue v = CoerceJavaToLua.coerce(i);
|
||||
|
||||
Reference in New Issue
Block a user