package dev.peerat.parser.java; import java.util.ArrayList; import java.util.List; import dev.peerat.parser.Token; import dev.peerat.parser.java.visitor.JavaVisitor; import dev.peerat.parser.visitor.VisitorBag; public class Enumeration extends ClassBase{ private Token extend; private List elements; public Enumeration(List annotations, int mod, Token name){ super(annotations, mod, name); this.elements = new ArrayList<>(); } public Enumeration(List annotations, int mod, Token name, Token extend){ this(annotations, mod, name); this.extend = extend; } @Override public void addFunction(Function function) { this.elements.add(function); } @Override public void addVariable(Variable variable) { this.elements.add(variable); } @Override public void addClass(ClassBase clazz){ this.elements.add(clazz); } public Token getExtension(){ return this.extend; } public List getElements(){ return this.elements; } @Override public E find(java.util.function.Function finder){ E annotation = super.find(finder); if(annotation != null) return annotation; if(elements != null){ for(JavaElement element : this.elements){ if(finder.apply(element)) return (E) element; } } return null; } @Override public void findAll(java.util.function.Function finder, List list){ super.findAll(finder, 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) { if(visitor.canVisit(getClass())) return visitor.visit(this); VisitorBag bag = new VisitorBag(); bag.merge(super.visit(visitor)); for(JavaElement element : this.elements){ bag.merge(element.visit(visitor)); } return bag; } }