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 bug that didn't read package.path from environment.</li>
|
||||||
<li>Fix pluggable scripting engine lookup, simplify implementation, and add unit tests.</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>Coerce script engine eval() return values to Java.</li>
|
||||||
|
<li>Fix Lua to Java coercion directly on Java classes.</li>
|
||||||
|
|
||||||
</ul></td></tr>
|
</ul></td></tr>
|
||||||
</table></td></tr></table>
|
</table></td></tr></table>
|
||||||
|
|||||||
@@ -131,11 +131,12 @@ public class CoerceJavaToLua {
|
|||||||
public static LuaValue coerce(Object o) {
|
public static LuaValue coerce(Object o) {
|
||||||
if ( o == null )
|
if ( o == null )
|
||||||
return LuaValue.NIL;
|
return LuaValue.NIL;
|
||||||
|
if (o instanceof Class)
|
||||||
|
return JavaClass.forClass((Class) o);
|
||||||
Class clazz = o.getClass();
|
Class clazz = o.getClass();
|
||||||
Coercion c = (Coercion) COERCIONS.get( clazz );
|
Coercion c = (Coercion) COERCIONS.get( clazz );
|
||||||
if ( c == null ) {
|
if ( c == null ) {
|
||||||
c = o instanceof Class? JavaClass.forClass((Class)o):
|
c = clazz.isArray()? arrayCoercion:
|
||||||
clazz.isArray()? arrayCoercion:
|
|
||||||
instanceCoercion;
|
instanceCoercion;
|
||||||
COERCIONS.put( clazz, c );
|
COERCIONS.put( clazz, c );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,6 +54,30 @@ public class LuaJavaCoercionTest extends TestCase {
|
|||||||
assertEquals( String.class, o.getClass() );
|
assertEquals( String.class, o.getClass() );
|
||||||
assertEquals( "777", o );
|
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() {
|
public void testJavaIntArrayToLuaTable() {
|
||||||
int[] i = { 222, 333 };
|
int[] i = { 222, 333 };
|
||||||
|
|||||||
Reference in New Issue
Block a user