peer-at-code-parser-java/src/dev/peerat/parser/java/operation/OperationBag.java

66 lines
1.6 KiB
Java

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<JavaElement> 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<JavaElement> getElements(){
return this.elements;
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
if(elements != null){
for(JavaElement element : this.elements){
if(finder.apply(element)) return (E)element;
}
}
return null;
}
@Override
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> 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;
}
}