docs: protected boolean areBranchCompatible(PlanNode plan1, PlanNode plan2) {
  		if (plan1 == null || plan2 == null) {
  			throw new NullPointerException();
  		}
  		
  		// if there is no open branch, the children are always compatible.
  		// in most plans, that will be the dominant case
  		if (this.hereJoinedBranches == null || this.hereJoinedBranches.isEmpty()) {
  			return true;
  		}
  
  		for (OptimizerNode joinedBrancher : hereJoinedBranches) {
  			final PlanNode branch1Cand = plan1.getCandidateAtBranchPoint(joinedBrancher);
  			final PlanNode branch2Cand = plan2.getCandidateAtBranchPoint(joinedBrancher);
  			
  			if (branch1Cand != null && branch2Cand != null && branch1Cand != branch2Cand) {
  				return false;
  			}
  		}
  		return true;
  	}