예제 #1
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;
    }