nodeA and nodeB are how the storage works. baseNode and adjNode are how you traverse the graph and which is the only thing you need to understand if you want to implement some algorithms or work somehow with GraphHopper. E.g. assume this graph:
A

BC
if you set the base node to B you get A as a first adjNode, calling edgeIterator.next will give you C for the adjNode. But if you start with C as base node you will get B as the only adjNode.
Just to be sure, i saw two possible cases in calcWeight(EdgeIteratorState edgeState, boolean reverse, int prevOrNextEdgeId ) (in AbstractWeighting)
first case : edgeState.baseNode=A, edgeState.baseNode=B, and reverse = false
second case: edgeState.baseNode=B, edgeState.baseNode=A, and reverse = true
in both cases, we traverse the graph from A to B, am I correct?
for unidirectional algorithms like astar or dijkstra this is true, but not for bidirectional algorithms like dijkstrabi or astarbi. The reverse param is true in the latter cases for the āreverseā search from B happening āat the same timeā as the forward search from A. See this blog post for some overview about this topic: https://graphhopper.com/blog/2016/02/08/releasinggraphhopper06/