130 lines
4 KiB
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;
|
|
}
|
|
|
|
}
|