예제 #1
0
  /** Function called when a proxy object function is invoked. */
  public Object invoke(Object proxy, Method method, Object[] args) throws LuaException {
    synchronized (obj.L) {
      String methodName = method.getName();
      LuaObject func = obj.getField(methodName);

      if (func.isNil()) {
        return null;
      }

      Class<?> retType = method.getReturnType();
      Object ret;

      // Checks if returned type is void. if it is returns null.
      if (retType.equals(Void.class) || retType.equals(void.class)) {
        func.call(args, 0);
        ret = null;
      } else {
        ret = func.call(args, 1)[0];
        if (ret != null && ret instanceof Double) {
          ret = LuaState.convertLuaNumber((Double) ret, retType);
        }
      }

      return ret;
    }
  }