Visitor Propagation
This commit is contained in:
parent
ce15d7e435
commit
e0716ef657
48 changed files with 251 additions and 126 deletions
|
@ -116,6 +116,7 @@ public class Annotation extends JavaElement{
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
if(!visitor.canPropagate()) return bag;
|
||||
|
||||
if(this.values != null)
|
||||
for(Value value : this.values.values()){
|
||||
|
|
|
@ -70,6 +70,7 @@ public class AnnotationClass extends ClassBase{
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
if(!visitor.canPropagate()) return bag;
|
||||
|
||||
bag.merge(super.visit(visitor));
|
||||
|
||||
|
|
|
@ -79,14 +79,13 @@ public class Class extends ClassBase{
|
|||
|
||||
@Override
|
||||
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||
System.out.println("VISIT CLASS "+visitor);
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
if(!visitor.canPropagate()) return bag;
|
||||
|
||||
bag.merge(super.visit(visitor));
|
||||
|
||||
for(JavaElement element : this.elements){
|
||||
System.out.println("VISIT CLASS "+visitor+" -> "+element);
|
||||
bag.merge(element.visit(visitor));
|
||||
}
|
||||
|
||||
|
|
|
@ -51,6 +51,8 @@ public abstract class ClassBase extends Annotable implements AnnotableBuffer, Cl
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor){
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
if(!visitor.canPropagate()) return bag;
|
||||
|
||||
List<Annotation> annotations = getAnnotations();
|
||||
if(annotations != null)
|
||||
for(Annotation annotation : annotations){
|
||||
|
|
|
@ -75,6 +75,7 @@ public class Enumeration extends ClassBase{
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
if(!visitor.canPropagate()) return bag;
|
||||
|
||||
bag.merge(super.visit(visitor));
|
||||
|
||||
|
|
|
@ -138,6 +138,7 @@ public class Function extends Annotable implements VariableContainer, OperationC
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor){
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
if(!visitor.canPropagate()) return bag;
|
||||
|
||||
List<Annotation> annotations = getAnnotations();
|
||||
if(annotations != null)
|
||||
|
|
|
@ -39,7 +39,7 @@ public class Import extends JavaElement{
|
|||
@Override
|
||||
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
return null;
|
||||
return new VisitorBag();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -75,6 +75,7 @@ public class Interface extends ClassBase{
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor){
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
if(!visitor.canPropagate()) return bag;
|
||||
|
||||
bag.merge(super.visit(visitor));
|
||||
|
||||
|
|
|
@ -89,6 +89,7 @@ public class JavaFile extends JavaElement implements ClassContainer, AnnotableBu
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor){
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
if(!visitor.canPropagate()) return bag;
|
||||
|
||||
if(this.imports != null)
|
||||
for(Import imp : this.imports){
|
||||
|
|
|
@ -86,6 +86,7 @@ public class Variable extends Annotable{
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor){
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
if(!visitor.canPropagate()) return bag;
|
||||
|
||||
List<Annotation> annotations = getAnnotations();
|
||||
if(annotations != null)
|
||||
|
|
|
@ -4,7 +4,6 @@ import java.util.List;
|
|||
import java.util.function.Function;
|
||||
|
||||
import dev.peerat.parser.java.JavaElement;
|
||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||
import dev.peerat.parser.visitor.Visitor;
|
||||
import dev.peerat.parser.visitor.VisitorBag;
|
||||
|
||||
|
@ -40,6 +39,8 @@ public class ArrayAccessValue extends Value{
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
bag.merge(this.base.visit(visitor));
|
||||
bag.merge(this.access.visit(visitor));
|
||||
return bag;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ import java.util.List;
|
|||
import java.util.function.Function;
|
||||
|
||||
import dev.peerat.parser.java.JavaElement;
|
||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||
import dev.peerat.parser.visitor.Visitor;
|
||||
import dev.peerat.parser.visitor.VisitorBag;
|
||||
|
||||
|
@ -34,6 +33,7 @@ public class ArrayValue extends Value{
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
for(Value value : this.values) bag.merge(value.visit(visitor));
|
||||
return bag;
|
||||
}
|
||||
|
||||
|
|
|
@ -51,6 +51,8 @@ public class BiValue extends Value{
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
bag.merge(left.visit(visitor));
|
||||
bag.merge(right.visit(visitor));
|
||||
return bag;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ import java.util.function.Function;
|
|||
|
||||
import dev.peerat.parser.Token;
|
||||
import dev.peerat.parser.java.JavaElement;
|
||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||
import dev.peerat.parser.visitor.Visitor;
|
||||
import dev.peerat.parser.visitor.VisitorBag;
|
||||
|
||||
|
@ -41,6 +40,7 @@ public class CastValue extends Value{
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
bag.merge(value.visit(visitor));
|
||||
return bag;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@ import dev.peerat.parser.java.Annotation;
|
|||
import dev.peerat.parser.java.JavaElement;
|
||||
import dev.peerat.parser.java.Variable;
|
||||
import dev.peerat.parser.java.Variable.VariableContainer;
|
||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||
import dev.peerat.parser.visitor.Visitor;
|
||||
import dev.peerat.parser.visitor.VisitorBag;
|
||||
|
||||
|
@ -77,6 +76,9 @@ public class InstanceValue extends Value implements VariableContainer, FunctionC
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
|
||||
for(Value value : parameters) bag.merge(value.visit(visitor));
|
||||
for(JavaElement content : elements) bag.merge(content.visit(visitor));
|
||||
return bag;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@ import dev.peerat.parser.java.Variable.VariableContainer;
|
|||
import dev.peerat.parser.java.operation.Operation;
|
||||
import dev.peerat.parser.java.operation.Operation.OperationContainer;
|
||||
import dev.peerat.parser.java.value.Value.ValueContainer;
|
||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||
import dev.peerat.parser.visitor.Visitor;
|
||||
import dev.peerat.parser.visitor.VisitorBag;
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ import java.util.function.Function;
|
|||
|
||||
import dev.peerat.parser.Token;
|
||||
import dev.peerat.parser.java.JavaElement;
|
||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||
import dev.peerat.parser.visitor.Visitor;
|
||||
import dev.peerat.parser.visitor.VisitorBag;
|
||||
|
||||
|
@ -53,6 +52,9 @@ public class MethodCallValue extends Value{
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor){
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
if(base != null) bag.merge(base.visit(visitor));
|
||||
System.out.println("go on "+parameters);
|
||||
for(Value value : parameters) bag.merge(value.visit(visitor));
|
||||
return bag;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ import java.util.function.Function;
|
|||
|
||||
import dev.peerat.parser.Token;
|
||||
import dev.peerat.parser.java.JavaElement;
|
||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||
import dev.peerat.parser.visitor.Visitor;
|
||||
import dev.peerat.parser.visitor.VisitorBag;
|
||||
|
||||
|
@ -46,6 +45,7 @@ public class ModifierValue extends Value{
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
bag.merge(value.visit(visitor));
|
||||
return bag;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ import java.util.function.Function;
|
|||
|
||||
import dev.peerat.parser.Token;
|
||||
import dev.peerat.parser.java.JavaElement;
|
||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||
import dev.peerat.parser.visitor.Visitor;
|
||||
import dev.peerat.parser.visitor.VisitorBag;
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ import java.util.List;
|
|||
import java.util.function.Function;
|
||||
|
||||
import dev.peerat.parser.java.JavaElement;
|
||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||
import dev.peerat.parser.visitor.Visitor;
|
||||
import dev.peerat.parser.visitor.VisitorBag;
|
||||
|
||||
|
@ -51,6 +50,9 @@ public class TriValue extends Value{
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
bag.merge(check.visit(visitor));
|
||||
bag.merge(success.visit(visitor));
|
||||
bag.merge(fail.visit(visitor));
|
||||
return bag;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ import java.util.function.Function;
|
|||
|
||||
import dev.peerat.parser.Token;
|
||||
import dev.peerat.parser.java.JavaElement;
|
||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||
import dev.peerat.parser.visitor.Visitor;
|
||||
import dev.peerat.parser.visitor.VisitorBag;
|
||||
|
||||
|
@ -41,6 +40,7 @@ public class VariableAccessValue extends Value{
|
|||
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||
VisitorBag bag = new VisitorBag();
|
||||
bag.merge(base.visit(visitor));
|
||||
return bag;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,8 +5,8 @@ import dev.peerat.parser.visitor.VisitorBag;
|
|||
|
||||
public class JavaAnnotationClassVisitor extends JavaVisitor<AnnotationClass>{
|
||||
|
||||
public JavaAnnotationClassVisitor(){
|
||||
super(AnnotationClass.class);
|
||||
public JavaAnnotationClassVisitor(boolean propagate){
|
||||
super(AnnotationClass.class, propagate);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -18,8 +18,8 @@ public class JavaAnnotationVisitor extends JavaVisitor<Annotation>{
|
|||
private BiPredicate<String, Value> valueFilter;
|
||||
private Function<String, JavaVisitor<?>> valueFilterVisitor;
|
||||
|
||||
public JavaAnnotationVisitor(){
|
||||
super(Annotation.class);
|
||||
public JavaAnnotationVisitor(boolean propagate){
|
||||
super(Annotation.class, propagate);
|
||||
}
|
||||
|
||||
public JavaAnnotationVisitor nameFilter(Predicate<String> validator){
|
||||
|
|
|
@ -12,8 +12,8 @@ public class JavaClassBaseVisitor extends JavaVisitor<ClassBase>{
|
|||
|
||||
private Visitor<JavaElement> validator;
|
||||
|
||||
public JavaClassBaseVisitor(){
|
||||
super(ClassBase.class);
|
||||
public JavaClassBaseVisitor(boolean propagate){
|
||||
super(ClassBase.class, propagate);
|
||||
}
|
||||
|
||||
public JavaClassBaseVisitor annotationFilter(Visitor<JavaElement> visitor){
|
||||
|
|
|
@ -13,8 +13,8 @@ public class JavaClassVisitor extends JavaVisitor<dev.peerat.parser.java.Class>{
|
|||
private Predicate<Integer> modifierFilter;
|
||||
private Visitor<JavaElement> elementVisitor;
|
||||
|
||||
public JavaClassVisitor(){
|
||||
super(dev.peerat.parser.java.Class.class);
|
||||
public JavaClassVisitor(boolean propagate){
|
||||
super(dev.peerat.parser.java.Class.class, propagate);
|
||||
}
|
||||
|
||||
public JavaClassVisitor nameFilter(Predicate<String> validator){
|
||||
|
@ -116,11 +116,15 @@ public class JavaClassVisitor extends JavaVisitor<dev.peerat.parser.java.Class>{
|
|||
}
|
||||
|
||||
if(this.elementVisitor != null){
|
||||
for(JavaElement elements : element.getElements()){
|
||||
VisitorBag visited = this.elementVisitor.visit(elements);
|
||||
bag.merge(visited);
|
||||
if(!visited.isValidated()) return bag;
|
||||
boolean validatedOne = false;
|
||||
for(JavaElement content : element.getElements()){
|
||||
VisitorBag visited = content.visit(this.elementVisitor);
|
||||
if(visited.isValidated()){
|
||||
bag.merge(visited);
|
||||
validatedOne = true;
|
||||
}
|
||||
}
|
||||
if(!validatedOne) return bag;
|
||||
}
|
||||
|
||||
bag.compute(element);
|
||||
|
|
|
@ -5,8 +5,8 @@ import dev.peerat.parser.visitor.VisitorBag;
|
|||
|
||||
public class JavaEnumerationVisitor extends JavaVisitor<Enumeration>{
|
||||
|
||||
public JavaEnumerationVisitor(){
|
||||
super(Enumeration.class);
|
||||
public JavaEnumerationVisitor(boolean propagate){
|
||||
super(Enumeration.class,propagate);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -5,8 +5,8 @@ import dev.peerat.parser.visitor.VisitorBag;
|
|||
|
||||
public class JavaFunctionVisitor extends JavaVisitor<Function>{
|
||||
|
||||
public JavaFunctionVisitor(){
|
||||
super(Function.class);
|
||||
public JavaFunctionVisitor(boolean propagate){
|
||||
super(Function.class, propagate);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -13,8 +13,8 @@ public class JavaImportVisitor extends JavaVisitor<Import>{
|
|||
private boolean staticPredicate;
|
||||
private boolean nonStaticPredicate;
|
||||
|
||||
public JavaImportVisitor(){
|
||||
super(Import.class);
|
||||
public JavaImportVisitor(boolean propagate){
|
||||
super(Import.class, propagate);
|
||||
}
|
||||
|
||||
public JavaImportVisitor named(Predicate<String> predicate){
|
||||
|
|
|
@ -5,8 +5,8 @@ import dev.peerat.parser.visitor.VisitorBag;
|
|||
|
||||
public class JavaInterfaceVisitor extends JavaVisitor<Interface>{
|
||||
|
||||
public JavaInterfaceVisitor(){
|
||||
super(Interface.class);
|
||||
public JavaInterfaceVisitor(boolean propagate){
|
||||
super(Interface.class, propagate);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -11,8 +11,8 @@ public class JavaVariableVisitor extends JavaVisitor<Variable>{
|
|||
private Predicate<String> nameFilter;
|
||||
private Predicate<Integer> modifierFilter;
|
||||
|
||||
public JavaVariableVisitor(){
|
||||
super(Variable.class);
|
||||
public JavaVariableVisitor(boolean propagate){
|
||||
super(Variable.class, propagate);
|
||||
}
|
||||
|
||||
public JavaVariableVisitor typeFilter(Predicate<String> validator){
|
||||
|
|
|
@ -22,7 +22,7 @@ public abstract class JavaVisitor<T extends JavaElement> extends Visitor<JavaEle
|
|||
//TODO current system don't do litteraly ALL, juste DIRECT SUB ELEMENT
|
||||
|
||||
public static <T extends JavaElement> JavaVisitor<T> base(Visitor<T> visitor){
|
||||
return new JavaVisitor<T>(null){
|
||||
return new JavaVisitor<T>(null,true){
|
||||
|
||||
@Override
|
||||
public boolean canVisit(Class<?> type){
|
||||
|
@ -36,9 +36,9 @@ public abstract class JavaVisitor<T extends JavaElement> extends Visitor<JavaEle
|
|||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static JavaVisitor<JavaElement> allJavaElement(){
|
||||
return new JavaVisitor<JavaElement>(JavaElement.class){
|
||||
|
||||
private static JavaVisitor<JavaElement> javaElement(boolean propagate){
|
||||
return new JavaVisitor<JavaElement>(JavaElement.class, propagate){
|
||||
|
||||
@Override
|
||||
public VisitorBag visitElement(JavaElement element){
|
||||
|
@ -49,99 +49,204 @@ public abstract class JavaVisitor<T extends JavaElement> extends Visitor<JavaEle
|
|||
|
||||
};
|
||||
}
|
||||
|
||||
public static JavaVisitor<JavaElement> allJavaElement(){
|
||||
return javaElement(true);
|
||||
}
|
||||
|
||||
public static JavaClassBaseVisitor allClassBase(){
|
||||
return new JavaClassBaseVisitor();
|
||||
return new JavaClassBaseVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaClassVisitor allClass(){
|
||||
return new JavaClassVisitor();
|
||||
return new JavaClassVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaInterfaceVisitor allInterface(){
|
||||
return new JavaInterfaceVisitor();
|
||||
return new JavaInterfaceVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaEnumerationVisitor allEnum(){
|
||||
return new JavaEnumerationVisitor();
|
||||
return new JavaEnumerationVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaAnnotationClassVisitor allAnnotationClass(){
|
||||
return new JavaAnnotationClassVisitor();
|
||||
return new JavaAnnotationClassVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaAnnotationVisitor allAnnotation(){
|
||||
return new JavaAnnotationVisitor();
|
||||
return new JavaAnnotationVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaVariableVisitor allVariable(){
|
||||
return new JavaVariableVisitor();
|
||||
return new JavaVariableVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaFunctionVisitor allFunction(){
|
||||
return new JavaFunctionVisitor();
|
||||
return new JavaFunctionVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaValueVisitor allValue(){
|
||||
return new JavaValueVisitor();
|
||||
return new JavaValueVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaArrayAccessValueVisitor allArrayAccessValue(){
|
||||
return new JavaArrayAccessValueVisitor();
|
||||
return new JavaArrayAccessValueVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaArrayValueVisitor allArrayValue(){
|
||||
return new JavaArrayValueVisitor();
|
||||
return new JavaArrayValueVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaBiValueVisitor allBiValue(){
|
||||
return new JavaBiValueVisitor();
|
||||
return new JavaBiValueVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaCastValueVisitor allCastValue(){
|
||||
return new JavaCastValueVisitor();
|
||||
return new JavaCastValueVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaInstanceValueVisitor allInstanceValue(){
|
||||
return new JavaInstanceValueVisitor();
|
||||
return new JavaInstanceValueVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaLambdaValueVisitor allLambdaValue(){
|
||||
return new JavaLambdaValueVisitor();
|
||||
return new JavaLambdaValueVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaMethodCallValueVisitor allMethodCallValue(){
|
||||
return new JavaMethodCallValueVisitor();
|
||||
return new JavaMethodCallValueVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaModifierValueVisitor allModifierValue(){
|
||||
return new JavaModifierValueVisitor();
|
||||
return new JavaModifierValueVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaStaticValueVisitor allStaticValue(){
|
||||
return new JavaStaticValueVisitor();
|
||||
return new JavaStaticValueVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaTriValueVisitor allTriValue(){
|
||||
return new JavaTriValueVisitor();
|
||||
return new JavaTriValueVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaVariableAccessValueVisitor allVariableAccessValue(){
|
||||
return new JavaVariableAccessValueVisitor();
|
||||
return new JavaVariableAccessValueVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaOperationVisitor allOperation(){
|
||||
return new JavaOperationVisitor();
|
||||
return new JavaOperationVisitor(true);
|
||||
}
|
||||
|
||||
public static JavaImportVisitor allImport(){
|
||||
return new JavaImportVisitor();
|
||||
return new JavaImportVisitor(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static JavaVisitor<JavaElement> javaElement(){
|
||||
return javaElement(false);
|
||||
}
|
||||
|
||||
public static JavaClassBaseVisitor classBase(){
|
||||
return new JavaClassBaseVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaClassVisitor clazz(){
|
||||
return new JavaClassVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaInterfaceVisitor interfaceClass(){
|
||||
return new JavaInterfaceVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaEnumerationVisitor enumClass(){
|
||||
return new JavaEnumerationVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaAnnotationClassVisitor annotationClass(){
|
||||
return new JavaAnnotationClassVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaAnnotationVisitor annotation(){
|
||||
return new JavaAnnotationVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaVariableVisitor variable(){
|
||||
return new JavaVariableVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaFunctionVisitor function(){
|
||||
return new JavaFunctionVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaValueVisitor value(){
|
||||
return new JavaValueVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaArrayAccessValueVisitor arrayAccessValue(){
|
||||
return new JavaArrayAccessValueVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaArrayValueVisitor arrayValue(){
|
||||
return new JavaArrayValueVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaBiValueVisitor biValue(){
|
||||
return new JavaBiValueVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaCastValueVisitor castValue(){
|
||||
return new JavaCastValueVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaInstanceValueVisitor instanceValue(){
|
||||
return new JavaInstanceValueVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaLambdaValueVisitor lambdaValue(){
|
||||
return new JavaLambdaValueVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaMethodCallValueVisitor methodCallValue(){
|
||||
return new JavaMethodCallValueVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaModifierValueVisitor modifierValue(){
|
||||
return new JavaModifierValueVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaStaticValueVisitor staticValue(){
|
||||
return new JavaStaticValueVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaTriValueVisitor triValue(){
|
||||
return new JavaTriValueVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaVariableAccessValueVisitor variableAccessValue(){
|
||||
return new JavaVariableAccessValueVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaOperationVisitor operation(){
|
||||
return new JavaOperationVisitor(false);
|
||||
}
|
||||
|
||||
public static JavaImportVisitor imp(){
|
||||
return new JavaImportVisitor(false);
|
||||
}
|
||||
|
||||
private Class<?> type;
|
||||
private boolean propagate;
|
||||
|
||||
public JavaVisitor(Class<?> type){
|
||||
public JavaVisitor(Class<?> type, boolean propagate){
|
||||
this.type = type;
|
||||
this.propagate = propagate;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -150,6 +255,11 @@ public abstract class JavaVisitor<T extends JavaElement> extends Visitor<JavaEle
|
|||
return this.type.isAssignableFrom(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPropagate(){
|
||||
return this.propagate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VisitorBag visit(JavaElement element){
|
||||
return visitElement((T) element);
|
||||
|
|
|
@ -6,8 +6,8 @@ import dev.peerat.parser.visitor.VisitorBag;
|
|||
|
||||
public class JavaOperationVisitor extends JavaVisitor<Operation>{
|
||||
|
||||
public JavaOperationVisitor(){
|
||||
super(Operation.class);
|
||||
public JavaOperationVisitor(boolean propagate){
|
||||
super(Operation.class, propagate);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -11,8 +11,8 @@ public class JavaArrayAccessValueVisitor extends JavaVisitor<ArrayAccessValue>{
|
|||
private Visitor<Value> basePredicate;
|
||||
private Visitor<Value> accessPredicate;
|
||||
|
||||
public JavaArrayAccessValueVisitor(){
|
||||
super(ArrayAccessValue.class);
|
||||
public JavaArrayAccessValueVisitor(boolean propagate){
|
||||
super(ArrayAccessValue.class, propagate);
|
||||
}
|
||||
|
||||
public JavaArrayAccessValueVisitor checkBase(Visitor<Value> visitor){
|
||||
|
|
|
@ -6,8 +6,8 @@ import dev.peerat.parser.java.visitor.JavaVisitor;
|
|||
|
||||
public class JavaArrayValueVisitor extends JavaVisitor<ArrayValue> {
|
||||
|
||||
public JavaArrayValueVisitor() {
|
||||
super(ArrayValue.class);
|
||||
public JavaArrayValueVisitor(boolean propagate){
|
||||
super(ArrayValue.class, propagate);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -15,8 +15,8 @@ public class JavaBiValueVisitor extends JavaVisitor<BiValue> {
|
|||
private Predicate<String> actionPredicate;
|
||||
private Visitor<Value> rightPredicate;
|
||||
|
||||
public JavaBiValueVisitor() {
|
||||
super(BiValue.class);
|
||||
public JavaBiValueVisitor(boolean propagate){
|
||||
super(BiValue.class, propagate);
|
||||
}
|
||||
|
||||
public JavaBiValueVisitor left(Visitor<Value> visitor) {
|
||||
|
|
|
@ -11,8 +11,8 @@ public class JavaCastValueVisitor extends JavaVisitor<CastValue> {
|
|||
private Predicate<String> typePredicate;
|
||||
private Visitor<Value> valuePredicate;
|
||||
|
||||
public JavaCastValueVisitor() {
|
||||
super(CastValue.class);
|
||||
public JavaCastValueVisitor(boolean propagate) {
|
||||
super(CastValue.class, propagate);
|
||||
}
|
||||
|
||||
public JavaCastValueVisitor type(Predicate<String> checker) {
|
||||
|
|
|
@ -10,8 +10,8 @@ public class JavaInstanceValueVisitor extends JavaVisitor<InstanceValue> {
|
|||
|
||||
private Predicate<String> namePredicate;
|
||||
|
||||
public JavaInstanceValueVisitor(){
|
||||
super(InstanceValue.class);
|
||||
public JavaInstanceValueVisitor(boolean propagate){
|
||||
super(InstanceValue.class, propagate);
|
||||
}
|
||||
|
||||
public JavaInstanceValueVisitor named(Predicate<String> predicate){
|
||||
|
|
|
@ -4,8 +4,8 @@ import dev.peerat.parser.java.visitor.JavaVisitor;
|
|||
import dev.peerat.parser.visitor.VisitorBag;
|
||||
public class JavaLambdaValueVisitor extends JavaVisitor<LambdaValue>{
|
||||
|
||||
public JavaLambdaValueVisitor(){
|
||||
super(LambdaValue.class);
|
||||
public JavaLambdaValueVisitor(boolean propagate){
|
||||
super(LambdaValue.class, propagate);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -7,8 +7,8 @@ import dev.peerat.parser.java.value.Value;
|
|||
import dev.peerat.parser.Token;
|
||||
import java.util.function.Predicate;
|
||||
public class JavaMethodCallValueVisitor extends JavaVisitor<MethodCallValue>{
|
||||
public JavaMethodCallValueVisitor(){
|
||||
super(MethodCallValue.class);
|
||||
public JavaMethodCallValueVisitor(boolean propagate){
|
||||
super(MethodCallValue.class, propagate);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -11,8 +11,8 @@ public class JavaModifierValueVisitor extends JavaVisitor<ModifierValue> {
|
|||
private Predicate<String> modifierPredicate;
|
||||
private Visitor<Value> valuePredicate;
|
||||
|
||||
public JavaModifierValueVisitor() {
|
||||
super(ModifierValue.class);
|
||||
public JavaModifierValueVisitor(boolean propagate) {
|
||||
super(ModifierValue.class, propagate);
|
||||
}
|
||||
|
||||
public JavaModifierValueVisitor modifier(Predicate<String> checker) {
|
||||
|
|
|
@ -9,8 +9,8 @@ import dev.peerat.parser.visitor.VisitorBag;
|
|||
public class JavaStaticValueVisitor extends JavaVisitor<StaticValue> {
|
||||
private Predicate<String> tokenPredicate;
|
||||
|
||||
public JavaStaticValueVisitor() {
|
||||
super(StaticValue.class);
|
||||
public JavaStaticValueVisitor(boolean propagate) {
|
||||
super(StaticValue.class, propagate);
|
||||
}
|
||||
|
||||
public JavaStaticValueVisitor token(Predicate<String> checker) {
|
||||
|
|
|
@ -11,8 +11,8 @@ public class JavaTriValueVisitor extends JavaVisitor<TriValue> {
|
|||
private Visitor<Value> successPredicate;
|
||||
private Visitor<Value> failPredicate;
|
||||
|
||||
public JavaTriValueVisitor() {
|
||||
super(TriValue.class);
|
||||
public JavaTriValueVisitor(boolean propagate) {
|
||||
super(TriValue.class, propagate);
|
||||
}
|
||||
|
||||
public JavaTriValueVisitor check(Visitor<Value> visitor) {
|
||||
|
|
|
@ -6,8 +6,8 @@ import dev.peerat.parser.visitor.VisitorBag;
|
|||
|
||||
public class JavaValueVisitor extends JavaVisitor<Value>{
|
||||
|
||||
public JavaValueVisitor(){
|
||||
super(Value.class);
|
||||
public JavaValueVisitor(boolean propagate){
|
||||
super(Value.class, propagate);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -5,8 +5,8 @@ import dev.peerat.parser.java.visitor.JavaVisitor;
|
|||
import dev.peerat.parser.visitor.VisitorBag;
|
||||
|
||||
public class JavaVariableAccessValueVisitor extends JavaVisitor<VariableAccessValue> {
|
||||
public JavaVariableAccessValueVisitor() {
|
||||
super(VariableAccessValue.class);
|
||||
public JavaVariableAccessValueVisitor(boolean propagate) {
|
||||
super(VariableAccessValue.class, propagate);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
package dev.peerat.parser.visitor;
|
||||
|
||||
import static dev.peerat.parser.java.visitor.JavaVisitor.base;
|
||||
import static dev.peerat.parser.java.visitor.JavaVisitor.allClass;
|
||||
import static dev.peerat.parser.java.visitor.JavaVisitor.allAnnotation;
|
||||
import static dev.peerat.parser.java.visitor.JavaVisitor.allJavaElement;
|
||||
import static dev.peerat.parser.visitor.Operator.collect;
|
||||
import static dev.peerat.parser.visitor.Operator.and;
|
||||
import static dev.peerat.parser.visitor.Operator.or;
|
||||
import static dev.peerat.parser.java.visitor.JavaVisitor.*;
|
||||
import static dev.peerat.parser.visitor.Operator.*;
|
||||
|
||||
import dev.peerat.parser.java.JavaFile;
|
||||
import dev.peerat.parser.java.JavaParser;
|
||||
|
@ -17,46 +12,17 @@ public class Example {
|
|||
|
||||
JavaParser parser = new JavaParser();
|
||||
JavaFile container = new JavaFile();
|
||||
parser.parse("package dev.peerat.test; public class Example{ public void helloTest(){ System.out.println(\"hello\"); } }", container);
|
||||
|
||||
parser.parse("package dev.peerat.test; public class Example{ private int i = j; public void helloTest(){ System.out.println(\"hello\"); } }", container);
|
||||
|
||||
VisitorBag result = container.visit(
|
||||
allClass()
|
||||
.isPublic()
|
||||
.elements(
|
||||
collect(allJavaElement())
|
||||
collect(variable())
|
||||
)
|
||||
);
|
||||
|
||||
System.out.println("allJavaElement in class : "+result.toList());
|
||||
|
||||
result = container.visit(base(collect(
|
||||
allClass()
|
||||
.isPublic()
|
||||
.elements(
|
||||
allJavaElement()
|
||||
)
|
||||
)));
|
||||
|
||||
System.out.println("all class: "+result.toList());
|
||||
|
||||
result = container.visit(base(
|
||||
collect(
|
||||
allClass()
|
||||
.isPublic()
|
||||
.elements(
|
||||
or(
|
||||
allAnnotation().nameFilter((name) -> name.startsWith("T")),
|
||||
allAnnotation().valueFilter((name, value) -> name.startsWith("t"))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
;
|
||||
|
||||
System.out.println("and op : "+result.toList());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -33,6 +33,11 @@ public class Operator{
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPropagate(){
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -63,6 +68,11 @@ public class Operator{
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPropagate(){
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -81,6 +91,11 @@ public class Operator{
|
|||
public boolean canVisit(Class<?> type){
|
||||
return visitor.canVisit(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPropagate(){
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -104,6 +119,11 @@ public class Operator{
|
|||
// System.out.println("collect can visit ? "+type);
|
||||
return visitor.canVisit(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPropagate(){
|
||||
return visitor.canPropagate();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -119,6 +139,11 @@ public class Operator{
|
|||
public boolean canVisit(Class<?> type) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPropagate(){
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@ public abstract class Visitor<T>{
|
|||
|
||||
public abstract boolean canVisit(Class<?> type); //TODO change "Class<?> type" into "Object element" ?
|
||||
|
||||
public abstract boolean canPropagate();
|
||||
|
||||
public abstract VisitorBag visit(T element);
|
||||
|
||||
}
|
||||
|
|
|
@ -6,6 +6,8 @@ import java.util.List;
|
|||
//only one pass in parameter or visit ?
|
||||
public class VisitorBag{
|
||||
|
||||
private static Object VALIDATE_BAG = new Object();
|
||||
|
||||
private List<Object> collect;
|
||||
private List<Object> list;
|
||||
|
||||
|
@ -22,6 +24,7 @@ public class VisitorBag{
|
|||
public void merge(VisitorBag bag){
|
||||
// System.out.println("merge("+collect+", "+list+") <- "+Thread.currentThread().getStackTrace()[2]);
|
||||
this.collect.addAll(bag.collect);
|
||||
if(!this.collect.isEmpty()) list.add(VALIDATE_BAG);
|
||||
// System.out.println("merged("+collect+", "+list+") <- "+Thread.currentThread().getStackTrace()[2]);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue