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