package dev.peerat.parser.java.operation; import java.util.ArrayList; import java.util.List; import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Operation; import dev.peerat.parser.java.Variable; import dev.peerat.parser.java.Operation.OperationContainer; import dev.peerat.parser.java.Variable.VariableContainer; import dev.peerat.parser.java.visitor.JavaVisitor; import dev.peerat.parser.visitor.VisitorBag; public abstract class OperationBag extends Operation implements VariableContainer, OperationContainer{ private List elements; public OperationBag(){ this.elements = new ArrayList<>(); } @Override public void addVariable(Variable variable){ this.elements.add(variable); } @Override public void addOperation(Operation operation){ this.elements.add(operation); } public List getElements(){ return this.elements; } @Override public E find(Function finder){ if(elements != null){ for(JavaElement element : this.elements){ if(finder.apply(element)) return (E)element; } } return null; } @Override public void findAll(Function finder, List list){ if(elements != null){ for(JavaElement element : this.elements){ if(finder.apply(element)) list.add((E)element); element.findAll(finder, list); } } } @Override public VisitorBag visit(JavaVisitor visitor){ VisitorBag bag = new VisitorBag(); for(JavaElement element : this.elements){ bag.merge(element.visit(visitor)); } return bag; } }