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