// -- 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; }