// -- 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; }
// -- JavaFunction methods @Override public int invoke(LuaState luaState) { // Check arguments String className = luaState.checkString(1); boolean doImport = luaState.toBoolean(2); // Load Class<?> clazz = loadType(luaState, className); luaState.pushJavaObject(clazz); // Import if (doImport) { luaState.rawGet(LuaState.REGISTRYINDEX, LuaState.RIDX_GLOBALS); String name = clazz.getName(); int index = name.indexOf('.'); while (index >= 0) { String part = name.substring(0, index); luaState.getField(-1, part); if (!luaState.isTable(-1)) { luaState.pop(1); luaState.newTable(); luaState.pushValue(-1); luaState.setField(-3, part); } luaState.remove(-2); name = name.substring(index + 1); index = name.indexOf('.'); } luaState.pushValue(-2); luaState.setField(-2, name); luaState.pop(1); } luaState.pushBoolean(doImport); // Return return 2; }