private Part buildNewComplexPart(Part lp, Part rp) { ListSet<Part> allParts = new ListSet<Part>(); allParts.addAll(lp.getParts()); allParts.addAll(rp.getParts()); FunctionCall andCall = new FunctionCall( FunctionName.makeAnd(), Functional.apply(allParts, Part.castToExpression)); AndedParts cp = parent.buildAndedParts(andCall, allParts); if (parent.isComplete(cp)) { setComplete(cp); } else if (!parent.isComplete(cp)) { AndedParts ncp = parent.maybeMakeComplete(cp); if (ncp != null) { setComplete(ncp); return ncp; } } return cp; }