code: public static List<String> applySpecialPaths(List<String> pathTokens) throws IllegalArgumentException {
          final ArrayList<String> newTokens = new ArrayList<String>();
          for (String pathToken : pathTokens) {
              if (isCurrentToken(pathToken)) { continue; } else if (isReverseToken(pathToken)) {
                  final int size = newTokens.size();
                  if (size == 0) {
                      throw VFSMessages.MESSAGES.onRootPath();
                  }
                  newTokens.remove(size - 1);
              } else { newTokens.add(pathToken); }
          }
          return newTokens;
      }
docs: Apply any . or .. paths in the pathTokens parameter, returning the minimal token list.
  
  @param pathTokens the path tokens
  @return the simple path tokens
  @throws IllegalArgumentException if reverse path goes over the top path