@Override
  public boolean visit(final Node node) {
    if (node instanceof ClassNode) {
      return visit((ClassNode<?>) node);
    } else if (node instanceof PackageNode) {
      return visit((PackageNode) node);
    } else if (node instanceof NamedParameterNode) {
      return visit((NamedParameterNode<?>) node);
    }
    throw new ClassCastException(
        "Node " + node.getClass() + " cannot be casted to one of the known subclasses."
            + " Override this method to handle the case.");
  }
@ Override public boolean visit ( final Node node ) { if ( node instanceof ClassNode ) { return visit ( ( ClassNode < ? > ) node ) ; } else if ( node instanceof PackageNode ) { return visit ( ( PackageNode ) node ) ; } else if ( node instanceof NamedParameterNode ) { return visit ( ( NamedParameterNode < ? > ) node ) ; } throw new ClassCastException ( "Node " + node . getClass ( ) + " cannot be casted to one of the known subclasses." + " Override this method to handle the case." ) ; }
Manually dispatch between different types of Nodes and call a proper visit() method.
Currently dispatches between ClassNode, PackageNode, and NamedParameterNode types.

@param node TANG configuration node.
@return true to proceed with the next node, false to cancel.
@throws ClassCastException if Node is not one of ClassNode, PackageNode,
or NamedParameterNode.