59 lines
1.5 KiB
Java
59 lines
1.5 KiB
Java
package dev.peerat.parser.java.operation;
|
|
|
|
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.value.Value;
|
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
|
import dev.peerat.parser.visitor.bag.ListVisitorBag;
|
|
import dev.peerat.parser.visitor.bag.VisitorBag;
|
|
|
|
public class AssignOperation extends Operation{
|
|
|
|
private Value left;
|
|
private Value right;
|
|
|
|
public AssignOperation(Value left, Value right){
|
|
this.left = left;
|
|
this.right = right;
|
|
}
|
|
|
|
public Value left(){
|
|
return left;
|
|
}
|
|
|
|
public Value right(){
|
|
return right;
|
|
}
|
|
|
|
@Override
|
|
public void build(Builder builder) throws Exception{
|
|
left.build(builder);
|
|
builder.append("=");
|
|
right.build(builder);
|
|
}
|
|
|
|
@Override
|
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
|
return finder.apply(left) ? (E)left : finder.apply(right) ? (E)right : null;
|
|
}
|
|
|
|
@Override
|
|
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){
|
|
if(finder.apply(left)) list.add((E) left);
|
|
left.findAll(finder, list);
|
|
if(finder.apply(right)) list.add((E) right);
|
|
right.findAll(finder, list);
|
|
}
|
|
|
|
@Override
|
|
public VisitorBag visit(JavaVisitor<?> visitor) {
|
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
|
VisitorBag bag = new ListVisitorBag();
|
|
bag.compute(left.visit(visitor).toList().toArray());
|
|
bag.compute(right.visit(visitor).toList().toArray());
|
|
return bag;
|
|
}
|
|
}
|