peer-at-code-parser-java/src/dev/peerat/parser/java/Enumeration.java

87 lines
1.9 KiB
Java

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<JavaElement> elements;
public Enumeration(List<Annotation> annotations, int mod, Token name){
super(annotations, mod, name);
this.elements = new ArrayList<>();
}
public Enumeration(List<Annotation> 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<JavaElement> getElements(){
return this.elements;
}
@Override
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> 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 <E extends JavaElement> void findAll(java.util.function.Function<JavaElement, Boolean> finder, List<E> 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;
}
}