93 lines
3.1 KiB
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;
|
|
}
|
|
}
|