peer-at-code-parser-java/src/dev/peerat/parser/java/visitor/JavaClassVisitor.java

130 lines
4 KiB
Java

package dev.peerat.parser.java.visitor;
import java.util.function.Predicate;
import dev.peerat.parser.java.Class;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class JavaClassVisitor extends JavaVisitor<dev.peerat.parser.java.Class>{
private Predicate<String> nameFilter;
private Predicate<Integer> modifierFilter;
private Visitor<JavaElement> elementVisitor;
public JavaClassVisitor(){
super(dev.peerat.parser.java.Class.class);
}
public JavaClassVisitor nameFilter(Predicate<String> validator){
this.nameFilter = (this.nameFilter == null) ? validator : this.nameFilter.and(validator);
return this;
}
public JavaClassVisitor isPublic(){
Predicate<Integer> validator = (mod) -> (mod & 0x1) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return this;
}
public JavaClassVisitor isPrivate(){
Predicate<Integer> validator = (mod) -> (mod & 0x2) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return this;
}
public JavaClassVisitor isProtected(){
Predicate<Integer> validator = (mod) -> (mod & 0x4) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return this;
}
public JavaClassVisitor isStatic(){
Predicate<Integer> validator = (mod) -> (mod & 0x8) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return this;
}
public JavaClassVisitor isFinal(){
Predicate<Integer> validator = (mod) -> (mod & 0x10) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return this;
}
public JavaClassVisitor isSynchronized(){
Predicate<Integer> validator = (mod) -> (mod & 0x20) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return this;
}
public JavaClassVisitor isVolatile(){
Predicate<Integer> validator = (mod) -> (mod & 0x40) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return this;
}
public JavaClassVisitor isTransient(){
Predicate<Integer> validator = (mod) -> (mod & 0x80) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return this;
}
public JavaClassVisitor isNative(){
Predicate<Integer> validator = (mod) -> (mod & 0x100) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return this;
}
public JavaClassVisitor isAbstract(){
Predicate<Integer> validator = (mod) -> (mod & 0x400) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return this;
}
public JavaClassVisitor isStrict(){
Predicate<Integer> validator = (mod) -> (mod & 0x800) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return this;
}
public JavaClassVisitor isPackageLevel(){
Predicate<Integer> validator = (mod) -> (mod & 0x1) == 0 && (mod & 0x2) == 0 && (mod & 0x4) == 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return this;
}
public JavaClassVisitor elements(Visitor<JavaElement> visitor){
this.elementVisitor = visitor;
return this;
}
// ??
//isSynthetic
//isMandated
// ??
@Override
public VisitorBag visitElement(Class element){
VisitorBag bag = new VisitorBag();
if(nameFilter != null){
if(!nameFilter.test(element.getName().getValue())) return bag;
}
if(this.modifierFilter != null){
//check MOD
}
if(this.elementVisitor != null){
for(JavaElement elements : element.getElements()){
VisitorBag visited = this.elementVisitor.visit(elements);
bag.merge(visited);
if(!visited.isValidated()) return bag;
}
}
bag.compute(element);
return bag;
}
}