コード例 #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
 // -- NamedJavaFunction methods
 @Override
 public int invoke(LuaState luaState) {
   Iterable<?> iterable = luaState.checkJavaObject(1, Iterable.class);
   luaState.pushJavaObject(new ElementIterator(iterable.iterator()));
   luaState.pushJavaObject(iterable);
   luaState.pushNil();
   return 3;
 }
コード例 #3
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;
    }
コード例 #4
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;
    }
コード例 #5
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;
    }