/** Ends subSolvers data collection. */ protected void end() { if (subSolver != null && subSolver.subSolver == null) { if (type == OperatorDescrType.AND) { if (possibilityLists.isEmpty()) { possibilityLists.add(new HashSet<VerifierComponent>()); } List<Set<VerifierComponent>> newPossibilities = new ArrayList<Set<VerifierComponent>>(); List<Set<VerifierComponent>> sets = subSolver.getPossibilityLists(); for (Set<VerifierComponent> possibilityList : possibilityLists) { for (Set<VerifierComponent> set : sets) { Set<VerifierComponent> newSet = new HashSet<VerifierComponent>(); newSet.addAll(possibilityList); newSet.addAll(set); newPossibilities.add(newSet); } } possibilityLists = newPossibilities; } else if (type == OperatorDescrType.OR) { possibilityLists.addAll(subSolver.getPossibilityLists()); } subSolver = null; } else if (subSolver != null && subSolver.subSolver != null) { subSolver.end(); } }