CommonInsertTransformNode.java
package dev.civl.abc.ast.node.common.acsl;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import dev.civl.abc.ast.node.IF.acsl.ContractNode;
import dev.civl.abc.ast.node.IF.acsl.InsertTransformNode;
import dev.civl.abc.ast.node.IF.statement.BlockItemNode;
import dev.civl.abc.token.IF.Source;
import dev.civl.abc.token.IF.SyntaxException;
public class CommonInsertTransformNode extends CommonTransformNode
implements
InsertTransformNode {
private List<BlockItemNode> nodesToInsert;
private boolean insertAfter;
public CommonInsertTransformNode(Source source,
List<BlockItemNode> nodesToInsert, boolean insertAfter) {
super(source);
this.nodesToInsert = nodesToInsert;
this.insertAfter = insertAfter;
}
@Override
public List<BlockItemNode> transform(List<BlockItemNode> items)
throws SyntaxException {
List<BlockItemNode> result = new ArrayList<BlockItemNode>();
if (!insertAfter) {
result.addAll(nodesToInsert);
}
result.addAll(items);
if (insertAfter) {
result.addAll(nodesToInsert);
}
return result;
}
@Override
public ContractNode copy() {
List<BlockItemNode> nodesToInsertCopy = new ArrayList<BlockItemNode>();
for (BlockItemNode node : nodesToInsert) {
nodesToInsertCopy.add(node.copy());
}
return new CommonInsertTransformNode(this.getSource(), nodesToInsertCopy, insertAfter);
}
@Override
protected void printBody(PrintStream out) {
out.print("transform insert");
}
}