107 lines
2.3 KiB
Java
107 lines
2.3 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 AnnotationClass extends ClassBase{
|
|
|
|
//where mod ????
|
|
private Token name;
|
|
private Token extend;
|
|
|
|
private List<JavaElement> elements;
|
|
|
|
public AnnotationClass(List<Annotation> annotations, Token name){
|
|
super(annotations);
|
|
this.name = name;
|
|
this.elements = new ArrayList<>();
|
|
}
|
|
|
|
@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 getName(){
|
|
return this.name;
|
|
}
|
|
|
|
public Token getExtension(){
|
|
return this.extend;
|
|
}
|
|
|
|
public List<JavaElement> getElements(){
|
|
return this.elements;
|
|
}
|
|
|
|
@Override
|
|
public void build(Builder builder) throws Exception{
|
|
super.build(builder);
|
|
|
|
builder.append("@interface");
|
|
builder.append(name);
|
|
if(extend != null){
|
|
builder.append(" extends ");
|
|
builder.append(extend);
|
|
}
|
|
builder.append("{");
|
|
if(elements != null){
|
|
for(JavaElement element : this.elements){
|
|
element.build(builder);
|
|
}
|
|
}
|
|
builder.append("}");
|
|
}
|
|
|
|
@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;
|
|
}
|
|
}
|