if (alsoRoots) {
assert rootElementName != null;
rv = visit(Collections.singletonList(pc), rootElementName, visitor);
} else {
rv = true;
rv = rv && visit(pc.getMinAssignees(), F_MIN_ASSIGNEES, visitor)
&& visit(pc.getMaxAssignees(), F_MAX_ASSIGNEES, visitor)
&& visit(pc.getObjectMinAssigneesViolation(), F_OBJECT_MIN_ASSIGNEES_VIOLATION, visitor)
&& visit(pc.getObjectMaxAssigneesViolation(), F_OBJECT_MAX_ASSIGNEES_VIOLATION, visitor)
&& visit(pc.getExclusion(), F_EXCLUSION, visitor)
&& visit(pc.getAssignment(), F_ASSIGNMENT, visitor)
&& visit(pc.getHasAssignment(), F_HAS_ASSIGNMENT, visitor)
&& visit(pc.getHasNoAssignment(), F_HAS_NO_ASSIGNMENT, visitor)
&& visit(pc.getModification(), F_MODIFICATION, visitor)
&& visit(pc.getObjectTimeValidity(), F_OBJECT_TIME_VALIDITY, visitor)
&& visit(pc.getAssignmentTimeValidity(), F_ASSIGNMENT_TIME_VALIDITY, visitor)
&& visit(pc.getAssignmentState(), F_ASSIGNMENT_STATE, visitor)
&& visit(pc.getObjectState(), F_OBJECT_STATE, visitor)
&& visit(pc.getSituation(), F_SITUATION, visitor)
&& visit(pc.getTransition(), F_TRANSITION, visitor)
&& visit(pc.getAnd(), F_AND, visitor)
&& visit(pc.getOr(), F_OR, visitor)
&& visit(pc.getNot(), F_NOT, visitor);