HiveOpConverter is on it's way to become a monster class. It is already ~1300 lines long, and expected to grow. It should be refactored, cut into multiple classes in a reasonable way. It is a natural way to do this is to create separate visitor classes for the different RelNodes, which are already handled in different functions within HiveOpConverter. That way HiveOpConverter can be the dispatcher among those visitor classes, while each of them are handling some specific work, potentially requesting sub nodes to be dispatched by HiveOpConverter. The functions used by multiple visitors should be put into some utility class.