docs: public static Set<SelectorName> getSelectorsReferencedBy( Visitable visitable ) {
          final Set<SelectorName> symbols = new HashSet<SelectorName>();
          // Walk the entire structure, so only supply a StrategyVisitor (that does no navigation) ...
          visitAll(visitable, new AbstractVisitor() {
              @Override
              public void visit( AllNodes allNodes ) {
                  if (allNodes.hasAlias()) {
                      symbols.add(allNodes.alias());
                  } else {
                      symbols.add(allNodes.name());
                  }
              }
  
              @Override
              public void visit( ChildNode childNode ) {
                  symbols.add(childNode.selectorName());
              }
  
              @Override
              public void visit( ChildNodeJoinCondition joinCondition ) {
                  symbols.add(joinCondition.childSelectorName());
                  symbols.add(joinCondition.parentSelectorName());
              }
  
              @Override
              public void visit( Column column ) {
                  symbols.add(column.selectorName());
              }
  
              @Override
              public void visit( DescendantNode descendant ) {
                  symbols.add(descendant.selectorName());
              }
  
              @Override
              public void visit( DescendantNodeJoinCondition joinCondition ) {
                  symbols.add(joinCondition.ancestorSelectorName());
                  symbols.add(joinCondition.descendantSelectorName());
              }
  
              @Override
              public void visit( EquiJoinCondition joinCondition ) {
                  symbols.add(joinCondition.selector1Name());
                  symbols.add(joinCondition.selector2Name());
              }
  
              @Override
              public void visit( FullTextSearch fullTextSearch ) {
                  symbols.add(fullTextSearch.selectorName());
              }
  
              @Override
              public void visit( FullTextSearchScore fullTextSearchScore ) {
                  symbols.add(fullTextSearchScore.selectorName());
              }
  
              @Override
              public void visit( Length length ) {
                  symbols.add(length.selectorName());
              }
  
              @Override
              public void visit( NodeDepth depth ) {
                  symbols.add(depth.selectorName());
              }
  
              @Override
              public void visit( NodePath path ) {
                  symbols.add(path.selectorName());
              }
  
              @Override
              public void visit( NodeLocalName node ) {
                  symbols.add(node.selectorName());
              }
  
              @Override
              public void visit( NodeName node ) {
                  symbols.add(node.selectorName());
              }
  
              @Override
              public void visit( NamedSelector node ) {
                  if (node.hasAlias()) {
                      symbols.add(node.alias());
                  } else {
                      symbols.add(node.name());
                  }
              }
  
              @Override
              public void visit( PropertyExistence prop ) {
                  symbols.add(prop.selectorName());
              }
  
              @Override
              public void visit( PropertyValue prop ) {
                  symbols.add(prop.selectorName());
              }
  
              @Override
              public void visit( Subquery obj ) {
                  // do nothing ...
              }
  
              @Override
              public void visit( ReferenceValue ref ) {
                  symbols.add(ref.selectorName());
              }
  
              @Override
              public void visit( SameNode node ) {
                  symbols.add(node.selectorName());
              }
  
              @Override
              public void visit( SameNodeJoinCondition joinCondition ) {
                  symbols.add(joinCondition.selector1Name());
                  symbols.add(joinCondition.selector2Name());
              }
          });
          return symbols;
      }