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