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

93 lines
3.1 KiB
Java

package dev.peerat.parser.java.visitor;
import java.util.function.Predicate;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.visitor.Visitor;
public abstract class JavaModifiableVisitor<E extends JavaElement, V> extends JavaVisitor<E, V>{
protected Predicate<Integer> modifierFilter;
protected Visitor<JavaElement> annotationVisitor; //TODO possibility to combine visitor too
public JavaModifiableVisitor(Class<?> type, boolean propagate){
super(type, propagate);
}
public V isPublic(){
Predicate<Integer> validator = (mod) -> (mod & 0x1) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return (V) this;
}
public V isPrivate(){
Predicate<Integer> validator = (mod) -> (mod & 0x2) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return (V) this;
}
public V isProtected(){
Predicate<Integer> validator = (mod) -> (mod & 0x4) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return (V) this;
}
public V isStatic(){
Predicate<Integer> validator = (mod) -> (mod & 0x8) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return (V) this;
}
public V isFinal(){
Predicate<Integer> validator = (mod) -> (mod & 0x10) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return (V) this;
}
public V isSynchronized(){
Predicate<Integer> validator = (mod) -> (mod & 0x20) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return (V) this;
}
public V isVolatile(){
Predicate<Integer> validator = (mod) -> (mod & 0x40) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return (V) this;
}
public V isTransient(){
Predicate<Integer> validator = (mod) -> (mod & 0x80) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return (V) this;
}
public V isNative(){
Predicate<Integer> validator = (mod) -> (mod & 0x100) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return (V) this;
}
public V isAbstract(){
Predicate<Integer> validator = (mod) -> (mod & 0x400) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return (V) this;
}
public V isStrict(){
Predicate<Integer> validator = (mod) -> (mod & 0x800) != 0;
this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator);
return (V) this;
}
public V 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 (V) this;
}
public V annotation(Visitor<JavaElement> visitor){
this.annotationVisitor = visitor;
return (V) this;
}
}