List<GenerationNode> (int numberInIteration, int totalIterations, String surroundedText, CustomTemplateCallback callback, boolean insertSurroundedTextAtTheEnd, GenerationNode parent) { if (myLeftOperand instanceof MulOperationNode || (myLeftOperand instanceof UnaryMulOperationNode && surroundedText != null)) { List<GenerationNode> result = new ArrayList<>(); if (myLeftOperand instanceof MulOperationNode mul) { for (int i = 0; i < mul.getRightOperand(); i++) { List<GenerationNode> parentNodes = mul.getLeftOperand().expand(i, totalIterations, surroundedText, callback, insertSurroundedTextAtTheEnd, parent); for (GenerationNode parentNode : parentNodes) { myRightOperand.expand(i, totalIterations, surroundedText, callback, insertSurroundedTextAtTheEnd, parentNode); } result.addAll(parentNodes); } } else { UnaryMulOperationNode unaryMul = (UnaryMulOperationNode)myLeftOperand; String[] lines = LineTokenizer.tokenize(StringUtil.trim(surroundedText), false); for (int i = 0; i < lines.length; i++) { String line = lines[i].trim(); List<GenerationNode> parentNodes = unaryMul.getOperand().expand(i, totalIterations, line, callback, insertSurroundedTextAtTheEnd, parent); for (GenerationNode parentNode : parentNodes) { myRightOperand.expand(i, totalIterations, line, callback, insertSurroundedTextAtTheEnd, parentNode); } result.addAll(parentNodes); } } return result; } List<GenerationNode> leftGenNodes = myLeftOperand.expand(numberInIteration, totalIterations, surroundedText, callback, insertSurroundedTextAtTheEnd, parent); if (leftGenNodes.isEmpty()) { return myRightOperand.expand(numberInIteration, totalIterations, surroundedText, callback, insertSurroundedTextAtTheEnd, parent); } for (GenerationNode leftGenNode : leftGenNodes) { myRightOperand.expand(numberInIteration,totalIterations , surroundedText, callback, insertSurroundedTextAtTheEnd, leftGenNode); } return leftGenNodes; }