예제 #1
0
 // -- JavaFunction methods
 @SuppressWarnings("unchecked")
 @Override
 public int invoke(LuaState luaState) {
   if (luaState.isJavaObject(1, Map.class)) {
     Map<Object, Object> map = luaState.toJavaObject(1, Map.class);
     luaState.pushJavaObject(new LuaMap(map));
   } else if (luaState.isJavaObject(1, List.class)) {
     List<Object> list = luaState.toJavaObject(1, List.class);
     luaState.pushJavaObject(new LuaList(list));
   } else {
     luaState.checkArg(
         1, false, String.format("expected map or list, got %s", luaState.typeName(1)));
   }
   return 1;
 }
예제 #2
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;
    }
예제 #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;
    }