// -- JavaFunction methods @SuppressWarnings("unchecked") @Override public int invoke(LuaState luaState) { if (luaState.isJavaObject(1, Map.class)) { Map<Object, Object> map = luaState.toJavaObject(1, Map.class); luaState.pushJavaObject(new LuaMap(map)); } else if (luaState.isJavaObject(1, List.class)) { List<Object> list = luaState.toJavaObject(1, List.class); luaState.pushJavaObject(new LuaList(list)); } else { luaState.checkArg( 1, false, String.format("expected map or list, got %s", luaState.typeName(1))); } return 1; }
// -- NamedJavaFunction methods @Override public int invoke(LuaState luaState) { // Find class final Class<?> clazz; if (luaState.isJavaObject(2, Class.class)) { clazz = luaState.checkJavaObject(2, Class.class); } else { String className = luaState.checkString(2); clazz = loadType(luaState, className); } // Get the object final Object object = luaState.checkJavaObject(1, clazz); // Push result luaState.pushJavaObject( new TypedJavaObject() { @Override public Object getObject() { return object; } @Override public Class<?> getType() { return clazz; } @Override public boolean isStrong() { return false; } }); return 1; }
// -- JavaFunction methods @Override public int invoke(LuaState luaState) { // Get the object Object object = luaState.checkJavaObject(1, Object.class); // Find class Class<?> clazz; if (luaState.isJavaObject(2, Class.class)) { clazz = luaState.checkJavaObject(2, Class.class); } else { String className = luaState.checkString(2); clazz = loadType(luaState, className); } // Type check luaState.pushBoolean(clazz.isInstance(object)); return 1; }
// -- JavaFunction methods @Override public int invoke(LuaState luaState) { // Check table luaState.checkType(1, LuaType.TABLE); // Get interfaces int interfaceCount = luaState.getTop() - 1; luaState.checkArg(2, interfaceCount > 0, "no interface specified"); Class<?>[] interfaces = new Class<?>[interfaceCount]; for (int i = 0; i < interfaceCount; i++) { if (luaState.isJavaObject(i + 2, Class.class)) { interfaces[i] = luaState.checkJavaObject(i + 2, Class.class); } else { String interfaceName = luaState.checkString(i + 2); interfaces[i] = loadType(luaState, interfaceName); } } // Create proxy luaState.pushJavaObjectRaw(luaState.getProxy(1, interfaces)); return 1; }
// -- JavaFunction methods @Override public int invoke(LuaState luaState) { // Find class Class<?> clazz; if (luaState.isJavaObject(1, Class.class)) { clazz = luaState.checkJavaObject(1, Class.class); } else { String className = luaState.checkString(1); clazz = loadType(luaState, className); } // Instantiate Object object; int dimensionCount = luaState.getTop() - 1; switch (dimensionCount) { case 0: try { object = clazz.newInstance(); } catch (InstantiationException e) { throw new RuntimeException(e); } catch (IllegalAccessException e) { throw new RuntimeException(e); } break; case 1: object = Array.newInstance(clazz, luaState.checkInteger(2)); break; default: int[] dimensions = new int[dimensionCount]; for (int i = 0; i < dimensionCount; i++) { dimensions[i] = luaState.checkInteger(i + 2); } object = Array.newInstance(clazz, dimensions); } // Return luaState.pushJavaObject(object); return 1; }