peer-at-code-parser-java/src/dev/peerat/parser/java/operation/ForeachOperation.java
2025-04-27 11:53:33 +02:00

60 lines
1.4 KiB
Java

package dev.peerat.parser.java.operation;
import java.util.List;
import java.util.function.Function;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class ForeachOperation extends OperationBag{
private Token type;
private Token name;
private Value iterator;
public ForeachOperation(Token type, Token name, Value iterator){
super();
this.type = type;
this.name = name;
this.iterator = iterator;
}
public Token getType(){
return this.type;
}
public Token getName(){
return this.name;
}
public Value getIterator(){
return this.iterator;
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
if(finder.apply(iterator)) return (E)iterator;
return super.find(finder);
}
@Override
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){
if(finder.apply(iterator)) list.add((E)iterator);
iterator.findAll(finder, list);
super.findAll(finder, list);
}
@Override
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
bag.merge(this.iterator.visit(visitor));
bag.merge(super.visit(visitor));
return bag;
}
}