code: protected boolean isFirstVisit(Object expression) {
          if (visited.contains(expression)) {
              return false;
          }
          visited.add(expression);
          return true;
      }
docs: Return true if the AST expression has not already been visited. If it is
  the first visit, register the expression so that the next visit will return false.
  
  @param expression - the AST expression to check
  @return true if the AST expression has NOT already been visited