예제 #1
0
    // -- 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;
    }
예제 #2
0
    // -- 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;
    }
예제 #3
0
    // -- 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;
    }
예제 #4
0
    // -- 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;
    }
예제 #5
0
    // -- 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;
    }