diff --git a/src/dev/peerat/parser/StreamableTree.java b/src/dev/peerat/parser/StreamableTree.java new file mode 100644 index 0000000..f002b6a --- /dev/null +++ b/src/dev/peerat/parser/StreamableTree.java @@ -0,0 +1,3 @@ +package dev.peerat.parser; + +public interface StreamableTree{} \ No newline at end of file diff --git a/src/dev/peerat/parser/java/Annotation.java b/src/dev/peerat/parser/java/Annotation.java index bda3571..fd1bb2b 100644 --- a/src/dev/peerat/parser/java/Annotation.java +++ b/src/dev/peerat/parser/java/Annotation.java @@ -7,6 +7,9 @@ import java.util.function.Function; import dev.peerat.parser.Token; import dev.peerat.parser.java.value.Value; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class Annotation extends JavaElement{ @@ -135,4 +138,17 @@ public class Annotation extends JavaElement{ } } } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + + if(this.values != null) + for(Value value : this.values.values()){ + bag.compute(value.visit(visitor).toList().toArray()); + } + + return bag; + } } diff --git a/src/dev/peerat/parser/java/AnnotationClass.java b/src/dev/peerat/parser/java/AnnotationClass.java index 72481db..9c6d9ea 100644 --- a/src/dev/peerat/parser/java/AnnotationClass.java +++ b/src/dev/peerat/parser/java/AnnotationClass.java @@ -4,6 +4,9 @@ import java.util.ArrayList; import java.util.List; import dev.peerat.parser.Token; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class AnnotationClass extends ClassBase{ @@ -88,4 +91,18 @@ public class AnnotationClass extends ClassBase{ } } } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + + bag.compute(super.visit(visitor).toList().toArray()); + + for(JavaElement element : this.elements){ + bag.compute(element.visit(visitor).toList().toArray()); + } + + return bag; + } } diff --git a/src/dev/peerat/parser/java/Class.java b/src/dev/peerat/parser/java/Class.java index a6246d2..a282a8e 100644 --- a/src/dev/peerat/parser/java/Class.java +++ b/src/dev/peerat/parser/java/Class.java @@ -2,12 +2,11 @@ package dev.peerat.parser.java; import java.util.ArrayList; import java.util.List; -import java.util.function.Predicate; import dev.peerat.parser.Token; -import dev.peerat.parser.StreamableTree; -import dev.peerat.parser.java.Function.FunctionStreamable; -import dev.peerat.parser.java.Variable.VariableStreamable; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class Class extends ClassBase{ @@ -107,23 +106,18 @@ public class Class extends ClassBase{ } } } - - public ClassStreamable stream(){ - return new ClassStreamable(); - } - public class ClassStreamable implements StreamableTree{ + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); - public ClassStreamable(){} + bag.compute(super.visit(visitor).toList().toArray()); - public FunctionStreamable functionFilter(Predicate filter){ return null; } + for(JavaElement element : this.elements){ + bag.compute(element.visit(visitor).toList().toArray()); + } - public FunctionStreamable constructorFilter(Predicate filter){ return null; } - - public VariableStreamable variableFilter(Predicate filter){ return null; } - - public ClassStreamable classFilter(Predicate filter){ return null; } -// public InterfaceStreamable interfaceFilter(Predicate filter){ return null; } -// public EnumStreamable enumFilter(Predicate filter){ return null; } + return bag; } } diff --git a/src/dev/peerat/parser/java/ClassBase.java b/src/dev/peerat/parser/java/ClassBase.java index 2d053cc..6a719cf 100644 --- a/src/dev/peerat/parser/java/ClassBase.java +++ b/src/dev/peerat/parser/java/ClassBase.java @@ -7,6 +7,9 @@ import dev.peerat.parser.java.Annotation.Annotable; import dev.peerat.parser.java.Annotation.AnnotableBuffer; import dev.peerat.parser.java.Function.FunctionContainer; import dev.peerat.parser.java.Variable.VariableContainer; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public abstract class ClassBase extends Annotable implements AnnotableBuffer, ClassContainer, FunctionContainer, VariableContainer{ @@ -28,4 +31,15 @@ public abstract class ClassBase extends Annotable implements AnnotableBuffer, Cl this.annotationBuffer = null; return list; } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + VisitorBag bag = new ListVisitorBag(); + List annotations = getAnnotations(); + if(annotations != null) + for(Annotation annotation : annotations){ + bag.compute(annotation.visit(visitor).toList().toArray()); + } + return bag; + } } diff --git a/src/dev/peerat/parser/java/Enumeration.java b/src/dev/peerat/parser/java/Enumeration.java index b757bcb..e09506d 100644 --- a/src/dev/peerat/parser/java/Enumeration.java +++ b/src/dev/peerat/parser/java/Enumeration.java @@ -4,6 +4,9 @@ import java.util.ArrayList; import java.util.List; import dev.peerat.parser.Token; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class Enumeration extends ClassBase{ @@ -94,4 +97,18 @@ public class Enumeration extends ClassBase{ } } + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + + bag.compute(super.visit(visitor).toList().toArray()); + + for(JavaElement element : this.elements){ + bag.compute(element.visit(visitor).toList().toArray()); + } + + return bag; + } + } diff --git a/src/dev/peerat/parser/java/Function.java b/src/dev/peerat/parser/java/Function.java index 420397e..7cd4daf 100644 --- a/src/dev/peerat/parser/java/Function.java +++ b/src/dev/peerat/parser/java/Function.java @@ -3,15 +3,15 @@ package dev.peerat.parser.java; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; -import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.TokenType; -import dev.peerat.parser.StreamableTree; import dev.peerat.parser.java.Annotation.Annotable; import dev.peerat.parser.java.Operation.OperationContainer; import dev.peerat.parser.java.Variable.VariableContainer; -import dev.peerat.parser.java.Variable.VariableStreamable; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class Function extends Annotable implements VariableContainer, OperationContainer{ @@ -161,14 +161,26 @@ public class Function extends Annotable implements VariableContainer, OperationC } } - public FunctionStreamable stream(){ - return new FunctionStreamable(); - } - - public class FunctionStreamable implements StreamableTree{ + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); - public FunctionStreamable(){} + List annotations = getAnnotations(); + if(annotations != null) + for(Annotation annotation : annotations){ + bag.compute(annotation.visit(visitor).toList().toArray()); + } - public VariableStreamable variableFilter(Predicate filter){ return null; } + if(this.parameters != null) + for(Variable variable : this.parameters){ + bag.compute(variable.visit(visitor).toList().toArray()); + } + + for(JavaElement element : this.elements){ + bag.compute(element.visit(visitor).toList().toArray()); + } + + return bag; } } diff --git a/src/dev/peerat/parser/java/Import.java b/src/dev/peerat/parser/java/Import.java index aadbb1a..0bea781 100644 --- a/src/dev/peerat/parser/java/Import.java +++ b/src/dev/peerat/parser/java/Import.java @@ -1,8 +1,14 @@ package dev.peerat.parser.java; -import dev.peerat.parser.Token; +import java.util.List; +import java.util.function.Function; -public class Import{ +import dev.peerat.parser.Token; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; + +public class Import extends JavaElement{ private boolean isStatic; private Token value; @@ -20,4 +26,25 @@ public class Import{ return this.value; } + @Override + public void build(Builder builder) throws Exception { + + } + + @Override + public E find(Function finder) { + return null; + } + + @Override + public void findAll(Function finder, List list) { + + } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + return null; + } + } diff --git a/src/dev/peerat/parser/java/Interface.java b/src/dev/peerat/parser/java/Interface.java index ef1bc97..de71bd9 100644 --- a/src/dev/peerat/parser/java/Interface.java +++ b/src/dev/peerat/parser/java/Interface.java @@ -4,6 +4,9 @@ import java.util.ArrayList; import java.util.List; import dev.peerat.parser.Token; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class Interface extends ClassBase{ @@ -93,4 +96,16 @@ public class Interface extends ClassBase{ } } } + + @Override + public VisitorBag visit(JavaVisitor visitor){ + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + + bag.compute(super.visit(visitor).toList().toArray()); + + for(JavaElement element : this.elements) bag.compute(element.visit(visitor).toList().toArray()); + + return bag; + } } diff --git a/src/dev/peerat/parser/java/JavaElement.java b/src/dev/peerat/parser/java/JavaElement.java index f05ff6b..a66a329 100644 --- a/src/dev/peerat/parser/java/JavaElement.java +++ b/src/dev/peerat/parser/java/JavaElement.java @@ -4,10 +4,14 @@ import java.util.List; import java.util.function.Function; import dev.peerat.parser.ElementBuilder; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.VisitorBag; -public abstract class JavaElement implements ElementBuilder{ +public abstract class JavaElement implements ElementBuilder{ public abstract E find(Function finder); public abstract void findAll(Function finder, List list); -} + + public abstract VisitorBag visit(JavaVisitor visitor); +} \ No newline at end of file diff --git a/src/dev/peerat/parser/java/JavaFile.java b/src/dev/peerat/parser/java/JavaFile.java index aee9691..ad24c58 100644 --- a/src/dev/peerat/parser/java/JavaFile.java +++ b/src/dev/peerat/parser/java/JavaFile.java @@ -7,6 +7,9 @@ import java.util.function.Function; import dev.peerat.parser.Bag; import dev.peerat.parser.Token; import dev.peerat.parser.java.Annotation.AnnotableBuffer; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class JavaFile extends JavaElement implements ClassContainer, AnnotableBuffer{ @@ -102,5 +105,25 @@ public class JavaFile extends JavaElement implements ClassContainer, AnnotableBu clazz.findAll(finder, list); } } + + @Override + public VisitorBag visit(JavaVisitor visitor){ + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + + if(this.imports != null) + for(Import imp : this.imports){ + bag.compute(imp.visit(visitor).toList().toArray()); + } + + bag.compute(mainClazz.visit(visitor).toList().toArray()); + + if(this.subClazz != null) + for(ClassBase clazz : this.subClazz){ + bag.compute(clazz.visit(visitor).toList().toArray()); + } + + return bag; + } } diff --git a/src/dev/peerat/parser/java/Operation.java b/src/dev/peerat/parser/java/Operation.java index f49496a..6d2a00a 100644 --- a/src/dev/peerat/parser/java/Operation.java +++ b/src/dev/peerat/parser/java/Operation.java @@ -1,37 +1,5 @@ package dev.peerat.parser.java; -import java.util.function.Predicate; - -import dev.peerat.parser.StreamableTree; -import dev.peerat.parser.java.Variable.VariableStreamable; -import dev.peerat.parser.java.operation.AssignOperation; -import dev.peerat.parser.java.operation.BreakOperation; -import dev.peerat.parser.java.operation.CatchOperation; -import dev.peerat.parser.java.operation.ContinueOperation; -import dev.peerat.parser.java.operation.DoOperation; -import dev.peerat.parser.java.operation.ElseOperation; -import dev.peerat.parser.java.operation.FinallyOperation; -import dev.peerat.parser.java.operation.ForOperation; -import dev.peerat.parser.java.operation.ForeachOperation; -import dev.peerat.parser.java.operation.IfOperation; -import dev.peerat.parser.java.operation.ReturnOperation; -import dev.peerat.parser.java.operation.SwitchOperation; -import dev.peerat.parser.java.operation.SynchronizedOperation; -import dev.peerat.parser.java.operation.ThrowOperation; -import dev.peerat.parser.java.operation.TryOperation; -import dev.peerat.parser.java.operation.WhileOperation; -import dev.peerat.parser.java.value.ArrayValue; -import dev.peerat.parser.java.value.BiValue; -import dev.peerat.parser.java.value.InnerElementValue; -import dev.peerat.parser.java.value.InstanceValue; -import dev.peerat.parser.java.value.LambdaValue; -import dev.peerat.parser.java.value.MethodCallValue; -import dev.peerat.parser.java.value.ModifierValue; -import dev.peerat.parser.java.value.StaticValue; -import dev.peerat.parser.java.value.TriValue; -import dev.peerat.parser.java.value.Value; -import dev.peerat.parser.java.value.Value.ValueStreamable; - public abstract class Operation extends JavaElement{ public static interface OperationContainer{ @@ -42,45 +10,5 @@ public abstract class Operation extends JavaElement{ public Operation(){} - public OperationStreamable stream(){ - return new OperationStreamable(); - } - - public class OperationStreamable implements StreamableTree{ - - public OperationStreamable(){} - - public OperationStreamable operationFilter(Predicate filter){ return null; } - public OperationStreamable assignOperationFilter(Predicate filter){ return null; } - public OperationStreamable breakOperationFilter(Predicate filter){ return null; } - public OperationStreamable catchOperationFilter(Predicate filter){ return null; } - public OperationStreamable continueOperationFilter(Predicate filter){ return null; } - public OperationStreamable doOperationFilter(Predicate filter){ return null; } - public OperationStreamable elseOperationFilter(Predicate filter){ return null; } - public OperationStreamable finallyOperationFilter(Predicate filter){ return null; } - public OperationStreamable foreachOperationFilter(Predicate filter){ return null; } - public OperationStreamable forOperationFilter(Predicate filter){ return null; } - public OperationStreamable ifOperationFilter(Predicate filter){ return null; } - public OperationStreamable returnOperationFilter(Predicate filter){ return null; } - public OperationStreamable switchOperationFilter(Predicate filter){ return null; } - public OperationStreamable synchronizedOperationFilter(Predicate filter){ return null; } - public OperationStreamable throwOperationFilter(Predicate filter){ return null; } - public OperationStreamable tryOperationFilter(Predicate filter){ return null; } - public OperationStreamable whileOperationFilter(Predicate filter){ return null; } - - public ValueStreamable valueFilter(Predicate filter){ return null; } - public ValueStreamable arrayValueFilter(Predicate filter){ return null; } - public ValueStreamable biValueFilter(Predicate filter){ return null; } - public ValueStreamable innerElementValueFilter(Predicate filter){ return null; } - public ValueStreamable instanceValueFilter(Predicate filter){ return null; } - public ValueStreamable lambdaValueFilter(Predicate filter){ return null; } - public ValueStreamable methodCallValueFilter(Predicate filter){ return null; } - public ValueStreamable modifierValueFilter(Predicate filter){ return null; } - public ValueStreamable staticVFilter(Predicate filter){ return null; } - public ValueStreamable triValueFilter(Predicate filter){ return null; } - - public VariableStreamable variableFilter(Predicate filter){ return null; } - - } } diff --git a/src/dev/peerat/parser/java/Variable.java b/src/dev/peerat/parser/java/Variable.java index b6368b6..a7f06b8 100644 --- a/src/dev/peerat/parser/java/Variable.java +++ b/src/dev/peerat/parser/java/Variable.java @@ -3,23 +3,14 @@ package dev.peerat.parser.java; import java.lang.reflect.Modifier; import java.util.List; import java.util.function.Function; -import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.TokenType; -import dev.peerat.parser.StreamableTree; import dev.peerat.parser.java.Annotation.Annotable; -import dev.peerat.parser.java.value.ArrayValue; -import dev.peerat.parser.java.value.BiValue; -import dev.peerat.parser.java.value.InnerElementValue; -import dev.peerat.parser.java.value.InstanceValue; -import dev.peerat.parser.java.value.LambdaValue; -import dev.peerat.parser.java.value.MethodCallValue; -import dev.peerat.parser.java.value.ModifierValue; -import dev.peerat.parser.java.value.StaticValue; -import dev.peerat.parser.java.value.TriValue; import dev.peerat.parser.java.value.Value; -import dev.peerat.parser.java.value.Value.ValueStreamable; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class Variable extends Annotable{ @@ -111,23 +102,20 @@ public class Variable extends Annotable{ } } - public VariableStreamable stream(){ - return new VariableStreamable(); + @Override + public VisitorBag visit(JavaVisitor visitor){ + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + + List annotations = getAnnotations(); + if(annotations != null) + for(Annotation annotation : annotations){ + bag.compute(annotation.visit(visitor).toList().toArray()); + } + + if(this.value != null) bag.compute(this.value.visit(visitor).toList().toArray()); + + return bag; } - public class VariableStreamable implements StreamableTree{ - - public VariableStreamable(){} - - public ValueStreamable valueFilter(Predicate filter){ return null; } - public ValueStreamable arrayValueFilter(Predicate filter){ return null; } - public ValueStreamable biValueFilter(Predicate filter){ return null; } - public ValueStreamable innerElementValueFilter(Predicate filter){ return null; } - public ValueStreamable instanceValueFilter(Predicate filter){ return null; } - public ValueStreamable lambdaValueFilter(Predicate filter){ return null; } - public ValueStreamable methodCallValueFilter(Predicate filter){ return null; } - public ValueStreamable modifierValueFilter(Predicate filter){ return null; } - public ValueStreamable staticVFilter(Predicate filter){ return null; } - public ValueStreamable triValueFilter(Predicate filter){ return null; } - } } diff --git a/src/dev/peerat/parser/java/operation/AssignOperation.java b/src/dev/peerat/parser/java/operation/AssignOperation.java index e874f8c..bf19ce4 100644 --- a/src/dev/peerat/parser/java/operation/AssignOperation.java +++ b/src/dev/peerat/parser/java/operation/AssignOperation.java @@ -6,6 +6,9 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Operation; import dev.peerat.parser.java.value.Value; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class AssignOperation extends Operation{ @@ -44,4 +47,13 @@ public class AssignOperation extends Operation{ if(finder.apply(right)) list.add((E) right); right.findAll(finder, list); } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + bag.compute(left.visit(visitor).toList().toArray()); + bag.compute(right.visit(visitor).toList().toArray()); + return bag; + } } diff --git a/src/dev/peerat/parser/java/operation/BreakOperation.java b/src/dev/peerat/parser/java/operation/BreakOperation.java index 79c15d7..8453d66 100644 --- a/src/dev/peerat/parser/java/operation/BreakOperation.java +++ b/src/dev/peerat/parser/java/operation/BreakOperation.java @@ -5,6 +5,8 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Operation; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.VisitorBag; public class BreakOperation extends Operation{ @@ -23,4 +25,10 @@ public class BreakOperation extends Operation{ @Override public void findAll(Function finder, List list){} + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + return null; + } + } diff --git a/src/dev/peerat/parser/java/operation/CatchOperation.java b/src/dev/peerat/parser/java/operation/CatchOperation.java index 474b622..8a2b53d 100644 --- a/src/dev/peerat/parser/java/operation/CatchOperation.java +++ b/src/dev/peerat/parser/java/operation/CatchOperation.java @@ -3,6 +3,8 @@ package dev.peerat.parser.java.operation; import java.util.List; import dev.peerat.parser.Token; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.VisitorBag; public class CatchOperation extends OperationBag{ @@ -28,4 +30,10 @@ public class CatchOperation extends OperationBag{ } + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + return super.visit(visitor); + } + } diff --git a/src/dev/peerat/parser/java/operation/ContinueOperation.java b/src/dev/peerat/parser/java/operation/ContinueOperation.java index 513eae7..2dbc2ae 100644 --- a/src/dev/peerat/parser/java/operation/ContinueOperation.java +++ b/src/dev/peerat/parser/java/operation/ContinueOperation.java @@ -5,6 +5,8 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Operation; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.VisitorBag; public class ContinueOperation extends Operation{ @@ -20,4 +22,10 @@ public class ContinueOperation extends Operation{ @Override public void findAll(Function finder, List list){} + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + return null; + } } diff --git a/src/dev/peerat/parser/java/operation/DoOperation.java b/src/dev/peerat/parser/java/operation/DoOperation.java index 13ad980..80c0fce 100644 --- a/src/dev/peerat/parser/java/operation/DoOperation.java +++ b/src/dev/peerat/parser/java/operation/DoOperation.java @@ -1,5 +1,8 @@ package dev.peerat.parser.java.operation; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.VisitorBag; + public class DoOperation extends OperationBag{ @Override @@ -7,4 +10,10 @@ public class DoOperation extends OperationBag{ } + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + return super.visit(visitor); + } + } diff --git a/src/dev/peerat/parser/java/operation/ElseOperation.java b/src/dev/peerat/parser/java/operation/ElseOperation.java index 2a6b887..9398a87 100644 --- a/src/dev/peerat/parser/java/operation/ElseOperation.java +++ b/src/dev/peerat/parser/java/operation/ElseOperation.java @@ -1,5 +1,8 @@ package dev.peerat.parser.java.operation; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.VisitorBag; + public class ElseOperation extends OperationBag{ @Override @@ -7,4 +10,10 @@ public class ElseOperation extends OperationBag{ } + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + return super.visit(visitor); + } + } diff --git a/src/dev/peerat/parser/java/operation/FinallyOperation.java b/src/dev/peerat/parser/java/operation/FinallyOperation.java index 361e6bf..1449b4b 100644 --- a/src/dev/peerat/parser/java/operation/FinallyOperation.java +++ b/src/dev/peerat/parser/java/operation/FinallyOperation.java @@ -1,5 +1,8 @@ package dev.peerat.parser.java.operation; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.VisitorBag; + public class FinallyOperation extends OperationBag{ @Override @@ -7,4 +10,10 @@ public class FinallyOperation extends OperationBag{ } + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + return super.visit(visitor); + } + } diff --git a/src/dev/peerat/parser/java/operation/ForOperation.java b/src/dev/peerat/parser/java/operation/ForOperation.java index 86ce14b..a14e169 100644 --- a/src/dev/peerat/parser/java/operation/ForOperation.java +++ b/src/dev/peerat/parser/java/operation/ForOperation.java @@ -6,6 +6,9 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Variable; import dev.peerat.parser.java.value.Value; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class ForOperation extends OperationBag{ @@ -91,4 +94,29 @@ public class ForOperation extends OperationBag{ public void build(Builder builder) throws Exception { } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + if(init_vars != null) + for(Variable variable : this.init_vars){ + bag.compute(variable.visit(visitor).toList().toArray()); + } + + if(init_values != null) + for(Value value : this.init_values){ + bag.compute(value.visit(visitor).toList().toArray()); + } + + bag.compute(condition.visit(visitor).toList().toArray()); + + if(this.updates != null) + for(Value value : this.updates){ + bag.compute(value.visit(visitor).toList().toArray()); + } + + bag.compute(super.visit(visitor).toList().toArray()); + return bag; + } } diff --git a/src/dev/peerat/parser/java/operation/ForeachOperation.java b/src/dev/peerat/parser/java/operation/ForeachOperation.java index f999465..2341f8c 100644 --- a/src/dev/peerat/parser/java/operation/ForeachOperation.java +++ b/src/dev/peerat/parser/java/operation/ForeachOperation.java @@ -6,6 +6,9 @@ import java.util.function.Function; import dev.peerat.parser.Token; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.value.Value; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class ForeachOperation extends OperationBag{ @@ -50,4 +53,13 @@ public class ForeachOperation extends OperationBag{ public void build(Builder builder) throws Exception { } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + bag.compute(this.iterator.visit(visitor).toList().toArray()); + bag.compute(super.visit(visitor).toList().toArray()); + return bag; + } } diff --git a/src/dev/peerat/parser/java/operation/IfOperation.java b/src/dev/peerat/parser/java/operation/IfOperation.java index f110651..a11cb6d 100644 --- a/src/dev/peerat/parser/java/operation/IfOperation.java +++ b/src/dev/peerat/parser/java/operation/IfOperation.java @@ -5,6 +5,9 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.value.Value; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class IfOperation extends OperationBag{ @@ -36,4 +39,13 @@ public class IfOperation extends OperationBag{ public void build(Builder builder) throws Exception { } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + bag.compute(condition.visit(visitor).toList().toArray()); + bag.compute(super.visit(visitor).toList().toArray()); + return bag; + } } diff --git a/src/dev/peerat/parser/java/operation/OperationBag.java b/src/dev/peerat/parser/java/operation/OperationBag.java index 9d007de..4dabecf 100644 --- a/src/dev/peerat/parser/java/operation/OperationBag.java +++ b/src/dev/peerat/parser/java/operation/OperationBag.java @@ -9,6 +9,9 @@ import dev.peerat.parser.java.Operation; import dev.peerat.parser.java.Variable; import dev.peerat.parser.java.Operation.OperationContainer; import dev.peerat.parser.java.Variable.VariableContainer; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public abstract class OperationBag extends Operation implements VariableContainer, OperationContainer{ @@ -51,5 +54,14 @@ public abstract class OperationBag extends Operation implements VariableContaine } } } + + @Override + public VisitorBag visit(JavaVisitor visitor){ + VisitorBag bag = new ListVisitorBag(); + for(JavaElement element : this.elements){ + bag.compute(element.visit(visitor).toList().toArray()); + } + return bag; + } } diff --git a/src/dev/peerat/parser/java/operation/ReturnOperation.java b/src/dev/peerat/parser/java/operation/ReturnOperation.java index ebe8aac..6f30c26 100644 --- a/src/dev/peerat/parser/java/operation/ReturnOperation.java +++ b/src/dev/peerat/parser/java/operation/ReturnOperation.java @@ -6,6 +6,9 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Operation; import dev.peerat.parser.java.value.Value; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class ReturnOperation extends Operation{ @@ -36,4 +39,12 @@ public class ReturnOperation extends Operation{ value.findAll(finder, list); } } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + if(this.value != null) bag.compute(this.value.visit(visitor).toList().toArray()); + return bag; + } } diff --git a/src/dev/peerat/parser/java/operation/SwitchOperation.java b/src/dev/peerat/parser/java/operation/SwitchOperation.java index 03abc28..c9a0ddc 100644 --- a/src/dev/peerat/parser/java/operation/SwitchOperation.java +++ b/src/dev/peerat/parser/java/operation/SwitchOperation.java @@ -5,9 +5,13 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Operation; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.VisitorBag; public class SwitchOperation extends Operation{ + //+ AND OBJECT FOR CONTAINING EVERY CASE OP + @Override public void build(Builder builder) throws Exception{ } @@ -19,4 +23,10 @@ public class SwitchOperation extends Operation{ @Override public void findAll(Function finder, List list){} + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + return null; + } } diff --git a/src/dev/peerat/parser/java/operation/SynchronizedOperation.java b/src/dev/peerat/parser/java/operation/SynchronizedOperation.java index a61a852..084d062 100644 --- a/src/dev/peerat/parser/java/operation/SynchronizedOperation.java +++ b/src/dev/peerat/parser/java/operation/SynchronizedOperation.java @@ -5,6 +5,9 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.value.Value; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class SynchronizedOperation extends OperationBag{ @@ -36,4 +39,13 @@ public class SynchronizedOperation extends OperationBag{ public void build(Builder builder) throws Exception { } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + bag.compute(this.value.visit(visitor).toList().toArray()); + bag.compute(super.visit(visitor).toList().toArray()); + return bag; + } } diff --git a/src/dev/peerat/parser/java/operation/ThrowOperation.java b/src/dev/peerat/parser/java/operation/ThrowOperation.java index bd44227..d48b061 100644 --- a/src/dev/peerat/parser/java/operation/ThrowOperation.java +++ b/src/dev/peerat/parser/java/operation/ThrowOperation.java @@ -6,6 +6,9 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Operation; import dev.peerat.parser.java.value.Value; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class ThrowOperation extends Operation{ @@ -36,4 +39,12 @@ public class ThrowOperation extends Operation{ value.findAll(finder, list); } + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + bag.compute(this.value.visit(visitor).toList().toArray()); + return bag; + } + } diff --git a/src/dev/peerat/parser/java/operation/TryOperation.java b/src/dev/peerat/parser/java/operation/TryOperation.java index 1a8dfed..9d0fd1d 100644 --- a/src/dev/peerat/parser/java/operation/TryOperation.java +++ b/src/dev/peerat/parser/java/operation/TryOperation.java @@ -5,6 +5,9 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Variable; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class TryOperation extends OperationBag{ @@ -41,4 +44,13 @@ public class TryOperation extends OperationBag{ public void build(Builder builder) throws Exception { } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + if(this.resource != null) bag.compute(this.resource.visit(visitor).toList().toArray()); + bag.compute(super.visit(visitor).toList().toArray()); + return bag; + } } diff --git a/src/dev/peerat/parser/java/operation/WhileOperation.java b/src/dev/peerat/parser/java/operation/WhileOperation.java index 98272b6..b02dfbd 100644 --- a/src/dev/peerat/parser/java/operation/WhileOperation.java +++ b/src/dev/peerat/parser/java/operation/WhileOperation.java @@ -5,6 +5,9 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.value.Value; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class WhileOperation extends OperationBag{ @@ -35,4 +38,13 @@ public class WhileOperation extends OperationBag{ public void build(Builder builder) throws Exception { } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + bag.compute(this.condition.visit(visitor).toList().toArray()); + bag.compute(super.visit(visitor).toList().toArray()); + return bag; + } } diff --git a/src/dev/peerat/parser/java/tree/ValueTree.java b/src/dev/peerat/parser/java/tree/ValueTree.java index 338c0db..b885aea 100644 --- a/src/dev/peerat/parser/java/tree/ValueTree.java +++ b/src/dev/peerat/parser/java/tree/ValueTree.java @@ -6,6 +6,7 @@ import dev.peerat.parser.Bag; import dev.peerat.parser.TokenType; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.value.BiValue; +import dev.peerat.parser.java.value.MethodCallValue; import dev.peerat.parser.java.value.ModifierValue; import dev.peerat.parser.java.value.StaticValue; import dev.peerat.parser.java.value.TriValue; @@ -67,6 +68,14 @@ public class ValueTree extends SyntaxTree { return null; }; + BiFunction methodCallValueBuilder = (parent, bag) -> { + System.out.println("methodCallValueBuilder "+bag); + MethodCallValue result = new MethodCallValue(null, null, bag.get("current"), null); + bag.set(result); + if(parent instanceof ValueContainer) ((ValueContainer)parent).addValue(result); + return null; + }; + StateTree redirectRight = new RedirectStateTree<>(value, (global, local) -> { System.out.println("redirectRight g="+global+" ,l="+local); global.set("right", local.get()); @@ -147,7 +156,7 @@ public class ValueTree extends SyntaxTree { StateTree operation_begin = value_name.equals("("); StateTree operation_end = operation_begin.equals(")"); operation_end.then(operation_call); - operation_end.end(); + operation_end.end(methodCallValueBuilder); StateTree operation_value = operation_begin.redirect(value); operation_value.then(operation_end); operation_value.equals(",") diff --git a/src/dev/peerat/parser/java/value/ArrayValue.java b/src/dev/peerat/parser/java/value/ArrayValue.java index d92c178..6d9dd0c 100644 --- a/src/dev/peerat/parser/java/value/ArrayValue.java +++ b/src/dev/peerat/parser/java/value/ArrayValue.java @@ -4,6 +4,9 @@ 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.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class ArrayValue extends Value{ @@ -31,6 +34,16 @@ public class ArrayValue extends Value{ public void findAll(Function finder, List list) { } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + for(Value value : this.values){ + bag.compute(value.visit(visitor).toList().toArray()); + } + return bag; + } diff --git a/src/dev/peerat/parser/java/value/BiValue.java b/src/dev/peerat/parser/java/value/BiValue.java index 57e7249..b822da0 100644 --- a/src/dev/peerat/parser/java/value/BiValue.java +++ b/src/dev/peerat/parser/java/value/BiValue.java @@ -4,6 +4,9 @@ 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.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class BiValue extends Value{ @@ -48,4 +51,13 @@ public class BiValue extends Value{ public String toString(){ return "[BiValue] "+left+" "+action+" "+right; } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + bag.compute(left.visit(visitor).toList().toArray()); + bag.compute(right.visit(visitor).toList().toArray()); + return bag; + } } diff --git a/src/dev/peerat/parser/java/value/InnerElementValue.java b/src/dev/peerat/parser/java/value/InnerElementValue.java index 898548a..ace913a 100644 --- a/src/dev/peerat/parser/java/value/InnerElementValue.java +++ b/src/dev/peerat/parser/java/value/InnerElementValue.java @@ -4,6 +4,9 @@ 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.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class InnerElementValue extends Value{ @@ -32,6 +35,14 @@ public class InnerElementValue extends Value{ } + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + bag.compute(this.element.visit(visitor).toList().toArray()); + return bag; + } + } diff --git a/src/dev/peerat/parser/java/value/InstanceValue.java b/src/dev/peerat/parser/java/value/InstanceValue.java index 13912ea..0e32a12 100644 --- a/src/dev/peerat/parser/java/value/InstanceValue.java +++ b/src/dev/peerat/parser/java/value/InstanceValue.java @@ -5,6 +5,9 @@ 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.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class InstanceValue extends Value{ @@ -45,4 +48,15 @@ public class InstanceValue extends Value{ } + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + if(this.parameters != null) + for(Value value : this.parameters){ + bag.compute(value.visit(visitor).toList().toArray()); + } + return bag; + } + } diff --git a/src/dev/peerat/parser/java/value/LambdaValue.java b/src/dev/peerat/parser/java/value/LambdaValue.java index 58ba07d..2515eef 100644 --- a/src/dev/peerat/parser/java/value/LambdaValue.java +++ b/src/dev/peerat/parser/java/value/LambdaValue.java @@ -10,6 +10,9 @@ import dev.peerat.parser.java.Operation; import dev.peerat.parser.java.Variable; import dev.peerat.parser.java.Operation.OperationContainer; import dev.peerat.parser.java.Variable.VariableContainer; +import dev.peerat.parser.java.visitor.JavaVisitor; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class LambdaValue extends Value implements OperationContainer, VariableContainer{ @@ -59,6 +62,16 @@ public class LambdaValue extends Value implements OperationContainer, VariableCo public void findAll(Function finder, List list) { } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + for(JavaElement element : this.operations){ + bag.compute(element.visit(visitor).toList().toArray()); + } + return bag; + } } diff --git a/src/dev/peerat/parser/java/value/MethodCallValue.java b/src/dev/peerat/parser/java/value/MethodCallValue.java index 75670a5..83a3a1a 100644 --- a/src/dev/peerat/parser/java/value/MethodCallValue.java +++ b/src/dev/peerat/parser/java/value/MethodCallValue.java @@ -5,6 +5,9 @@ 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.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class MethodCallValue extends Value{ @@ -51,4 +54,16 @@ public class MethodCallValue extends Value{ } + @Override + public VisitorBag visit(JavaVisitor visitor){ + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + bag.compute(this.base.visit(visitor).toList().toArray()); + if(this.parameters != null) + for(Value value : this.parameters){ + bag.compute(value.visit(visitor).toList().toArray()); + } + return bag; + } + } diff --git a/src/dev/peerat/parser/java/value/ModifierValue.java b/src/dev/peerat/parser/java/value/ModifierValue.java index fabcd17..a07c977 100644 --- a/src/dev/peerat/parser/java/value/ModifierValue.java +++ b/src/dev/peerat/parser/java/value/ModifierValue.java @@ -5,6 +5,9 @@ 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.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class ModifierValue extends Value{ @@ -43,4 +46,12 @@ public class ModifierValue extends Value{ public String toString(){ return "[ModifierValue] "+modifier+value; } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + bag.compute(value.visit(visitor).toList().toArray()); + return bag; + } } diff --git a/src/dev/peerat/parser/java/value/StaticValue.java b/src/dev/peerat/parser/java/value/StaticValue.java index 188f748..628d9d6 100644 --- a/src/dev/peerat/parser/java/value/StaticValue.java +++ b/src/dev/peerat/parser/java/value/StaticValue.java @@ -5,6 +5,8 @@ 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.bag.VisitorBag; public class StaticValue extends Value{ @@ -38,4 +40,10 @@ public class StaticValue extends Value{ public String toString(){ return "StaticValue["+token.getValue()+"]"; } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + return null; + } } diff --git a/src/dev/peerat/parser/java/value/TriValue.java b/src/dev/peerat/parser/java/value/TriValue.java index 8b85493..a7e25e7 100644 --- a/src/dev/peerat/parser/java/value/TriValue.java +++ b/src/dev/peerat/parser/java/value/TriValue.java @@ -4,6 +4,9 @@ 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.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; public class TriValue extends Value{ @@ -49,4 +52,16 @@ public class TriValue extends Value{ return "[TriValue] "+check+" ? "+success+" : "+fail; } + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + + bag.compute(this.check.visit(visitor).toList().toArray()); + bag.compute(this.success.visit(visitor).toList().toArray()); + bag.compute(this.fail.visit(visitor).toList().toArray()); + + return bag; + } + } diff --git a/src/dev/peerat/parser/java/value/Value.java b/src/dev/peerat/parser/java/value/Value.java index f3c3e0a..db9e097 100644 --- a/src/dev/peerat/parser/java/value/Value.java +++ b/src/dev/peerat/parser/java/value/Value.java @@ -1,7 +1,5 @@ package dev.peerat.parser.java.value; -import java.util.function.Predicate; - import dev.peerat.parser.java.JavaElement; public abstract class Value extends JavaElement{ @@ -13,23 +11,4 @@ public abstract class Value extends JavaElement{ } - public ValueStreamable stream(){ - return new ValueStreamable(); - } - - public class ValueStreamable{ - - public ValueStreamable(){} - - public ValueStreamable valueFilter(Predicate filter){ return null; } - public ValueStreamable arrayValueFilter(Predicate filter){ return null; } - public ValueStreamable biValueFilter(Predicate filter){ return null; } - public ValueStreamable innerElementValueFilter(Predicate filter){ return null; } - public ValueStreamable instanceValueFilter(Predicate filter){ return null; } - public ValueStreamable lambdaValueFilter(Predicate filter){ return null; } - public ValueStreamable methodCallValueFilter(Predicate filter){ return null; } - public ValueStreamable modifierValueFilter(Predicate filter){ return null; } - public ValueStreamable staticVFilter(Predicate filter){ return null; } - public ValueStreamable triValueFilter(Predicate filter){ return null; } - } } diff --git a/src/dev/peerat/parser/java/value/VariableAccessValue.java b/src/dev/peerat/parser/java/value/VariableAccessValue.java new file mode 100644 index 0000000..ba3fe59 --- /dev/null +++ b/src/dev/peerat/parser/java/value/VariableAccessValue.java @@ -0,0 +1,55 @@ +package dev.peerat.parser.java.value; + +import java.util.List; +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.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; + +public class VariableAccessValue extends Value{ + + private Value base; + private Token variable; + + public VariableAccessValue(Value base, Token variable){ + this.base = base; + this.variable = variable; + } + + public Value base(){ + return this.base; + } + + public Token getVariable(){ + return this.variable; + } + + @Override + public void build(Builder builder) throws Exception { + + } + + @Override + public E find(Function finder) { + return null; + } + + @Override + public void findAll(Function finder, List list) { + + } + + @Override + public VisitorBag visit(JavaVisitor visitor) { + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new ListVisitorBag(); + bag.compute(this.base.visit(visitor).toList().toArray()); + return bag; + } + + + +} diff --git a/src/dev/peerat/parser/java/visitor/JavaAnnotationVisitor.java b/src/dev/peerat/parser/java/visitor/JavaAnnotationVisitor.java new file mode 100644 index 0000000..c828ff1 --- /dev/null +++ b/src/dev/peerat/parser/java/visitor/JavaAnnotationVisitor.java @@ -0,0 +1,66 @@ +package dev.peerat.parser.java.visitor; + +import java.util.Map; +import java.util.Map.Entry; +import java.util.function.BiPredicate; +import java.util.function.Predicate; + +import dev.peerat.parser.Token; +import dev.peerat.parser.java.Annotation; +import dev.peerat.parser.java.value.Value; +import dev.peerat.parser.visitor.bag.ListVisitorBag; +import dev.peerat.parser.visitor.bag.VisitorBag; + +public class JavaAnnotationVisitor extends JavaVisitor{ + + private Predicate nameFilter; + private Predicate keyFilter; + private BiPredicate valueFilter; + + public JavaAnnotationVisitor(){ + super(Annotation.class); + } + + public JavaAnnotationVisitor filterName(Predicate validator){ + this.nameFilter = (this.nameFilter == null) ? validator : this.nameFilter.and(validator); + return this; + } + + public JavaAnnotationVisitor hasKey(Predicate validator){ + this.keyFilter = (this.keyFilter == null) ? validator : this.keyFilter.and(validator); + return this; + } + + public JavaAnnotationVisitor filterValue(BiPredicate validator){ + this.valueFilter = (this.valueFilter == null) ? validator : this.valueFilter.and(validator); + return this; + } + + @Override + public VisitorBag visitElement(Annotation element){ + VisitorBag bag = new ListVisitorBag(); + if(nameFilter != null){ + if(!nameFilter.test(element.getName().getValue())) return bag; + } + + if(keyFilter != null){ + Map paramters = element.getParameters(); + if(paramters == null) return bag; + for(Token token : paramters.keySet()){ + if(!keyFilter.test(token.getValue())) return bag; + } + } + + if(valueFilter != null){ + Map paramters = element.getParameters(); + if(paramters == null) return bag; + for(Entry entry : paramters.entrySet()){ + if(!valueFilter.test(entry.getKey().getValue(), entry.getValue())) return bag; + } + } + + bag.compute(element); + return bag; + } + +} \ No newline at end of file diff --git a/src/dev/peerat/parser/java/visitor/JavaVisitor.java b/src/dev/peerat/parser/java/visitor/JavaVisitor.java new file mode 100644 index 0000000..5fcfb8c --- /dev/null +++ b/src/dev/peerat/parser/java/visitor/JavaVisitor.java @@ -0,0 +1,83 @@ +package dev.peerat.parser.java.visitor; + +import dev.peerat.parser.java.AnnotationClass; +import dev.peerat.parser.java.ClassBase; +import dev.peerat.parser.java.Function; +import dev.peerat.parser.java.Import; +import dev.peerat.parser.java.JavaElement; +import dev.peerat.parser.java.Operation; +import dev.peerat.parser.java.Variable; +import dev.peerat.parser.java.value.Value; +import dev.peerat.parser.visitor.Visitor; +import dev.peerat.parser.visitor.bag.VisitorBag; + +public abstract class JavaVisitor extends Visitor{ + + public static JavaVisitor base(JavaVisitor visitor){ + return visitor; + } + + public static JavaVisitor allJavaElement(){ + return null; + } + + public static JavaVisitor allClassBase(){ + return null; + } + + public static JavaVisitor allClass(){ + return null; + } + + public static JavaVisitor allInterface(){ + return null; + } + + public static JavaVisitor allEnum(){ + return null; + } + + public static JavaVisitor allAnnotationClass(){ + return null; + } + + public static JavaAnnotationVisitor allAnnotation(){ + return new JavaAnnotationVisitor(); + } + + public static JavaVisitor allVariable(){ + return null; + } + + public static JavaVisitor allFunction(){ + return null; + } + + public static JavaVisitor allValue(){ + return null; + } + + public static JavaVisitor allOperation(){ + return null; + } + + public static JavaVisitor allImport(){ + return null; + } + + private Class type; + + JavaVisitor(Class type){ + this.type = type; + } + + public boolean canVisit(Class type){ + return this.type.isAssignableFrom(type); + } + + public VisitorBag visit(Object element){ + return visitElement((T) element); + } + + public abstract VisitorBag visitElement(T element); +} \ No newline at end of file diff --git a/src/dev/peerat/parser/java/visitor/internal/chain/JavaVisitorChain.java b/src/dev/peerat/parser/java/visitor/internal/chain/JavaVisitorChain.java new file mode 100644 index 0000000..7d7aff3 --- /dev/null +++ b/src/dev/peerat/parser/java/visitor/internal/chain/JavaVisitorChain.java @@ -0,0 +1,22 @@ +package dev.peerat.parser.java.visitor.internal.chain; + +import dev.peerat.parser.java.JavaElement; + +public abstract class JavaVisitorChain{ + + private JavaVisitorChain next; + + public JavaVisitorChain chain(JavaVisitorChain next){ + return this.next = next; + } + + public JavaVisitorChain chain(){ + return this.next; + } + + public boolean hasNext(){ + return this.next != null; + } + + public abstract boolean visit(T element); +} \ No newline at end of file diff --git a/src/dev/peerat/parser/java/visitor/internal/chain/JavaVisitorChainPredicate.java b/src/dev/peerat/parser/java/visitor/internal/chain/JavaVisitorChainPredicate.java new file mode 100644 index 0000000..4bf569a --- /dev/null +++ b/src/dev/peerat/parser/java/visitor/internal/chain/JavaVisitorChainPredicate.java @@ -0,0 +1,25 @@ +package dev.peerat.parser.java.visitor.internal.chain; + +import java.util.function.Predicate; + +import dev.peerat.parser.java.JavaElement; + +public class JavaVisitorChainPredicate extends JavaVisitorChain{ + + private Predicate predicate; + + public JavaVisitorChainPredicate(Predicate predicate){ + this.predicate = predicate; + } + + @Override + public boolean visit(T element){ +// if(this.predicate.test(element)){ +// if(hasNext()) return chain().visit(element); +// else return true; +// }else return false; + return false; + } + + +} diff --git a/src/dev/peerat/parser/visitor/Example.java b/src/dev/peerat/parser/visitor/Example.java new file mode 100644 index 0000000..726e6fc --- /dev/null +++ b/src/dev/peerat/parser/visitor/Example.java @@ -0,0 +1,37 @@ +package dev.peerat.parser.visitor; + +import static dev.peerat.parser.java.visitor.JavaVisitor.allAnnotation; + +import dev.peerat.parser.java.Annotation; +import dev.peerat.parser.java.Function; +import dev.peerat.parser.java.JavaFile; +import dev.peerat.parser.java.JavaParser; +import dev.peerat.parser.java.visitor.JavaVisitor; + +public class Example { + + public static void main(String[] args) throws Exception{ + + JavaParser parser = new JavaParser(); + JavaFile container = new JavaFile(); + parser.parse("package be.peerat.test; public class Example{ @Test public void helloTest(){} }", container); + +// JavaVisitor visitor = JavaVisitor.base( +// key( +// allJavaElement() +// ), +// value( +// allAnnotation().filterName((name) -> name.equals("Test")) +// ) +// ); + + JavaVisitor visitor = JavaVisitor.base( + allAnnotation().filterName((name) -> name.equals("Test")) + ); + + Function func = container.getMainClass().find((element) -> element instanceof Function); + System.out.println("1. "+func.visit(visitor).toList()); + System.out.println("2. "+container.visit(visitor).toList()); + } + +} diff --git a/src/dev/peerat/parser/visitor/Operator.java b/src/dev/peerat/parser/visitor/Operator.java new file mode 100644 index 0000000..6ede38e --- /dev/null +++ b/src/dev/peerat/parser/visitor/Operator.java @@ -0,0 +1,21 @@ +package dev.peerat.parser.visitor; + +public class Operator{ + + public static > T and(Visitor... visitors){ + return null; + } + + public static > T or(Visitor... visitors){ + return null; + } + + public static > T key(Visitor visitor){ + return null; + } + + public static > T value(Visitor visitor){ + return null; + } + +} diff --git a/src/dev/peerat/parser/visitor/Visitor.java b/src/dev/peerat/parser/visitor/Visitor.java new file mode 100644 index 0000000..48dc41e --- /dev/null +++ b/src/dev/peerat/parser/visitor/Visitor.java @@ -0,0 +1,5 @@ +package dev.peerat.parser.visitor; + +public abstract class Visitor{ + +} diff --git a/src/dev/peerat/parser/visitor/bag/ListVisitorBag.java b/src/dev/peerat/parser/visitor/bag/ListVisitorBag.java new file mode 100644 index 0000000..5c78dd4 --- /dev/null +++ b/src/dev/peerat/parser/visitor/bag/ListVisitorBag.java @@ -0,0 +1,29 @@ +package dev.peerat.parser.visitor.bag; + +import java.util.ArrayList; +import java.util.List; + +public class ListVisitorBag extends VisitorBag{ + + private List list; + + public ListVisitorBag(){ + this.list = new ArrayList<>(); + } + + @Override + public void compute(Object... elements) { + for(Object element : elements) list.add(element); + } + + @Override + public T toElement(){ + return (T) list.get(0); + } + + @Override + public List toList(){ + return (List) list; + } + +} diff --git a/src/dev/peerat/parser/visitor/bag/VisitorBag.java b/src/dev/peerat/parser/visitor/bag/VisitorBag.java new file mode 100644 index 0000000..19731c0 --- /dev/null +++ b/src/dev/peerat/parser/visitor/bag/VisitorBag.java @@ -0,0 +1,12 @@ +package dev.peerat.parser.visitor.bag; + +import java.util.List; + +public abstract class VisitorBag{ + + public abstract void compute(Object... elements); + + public abstract T toElement(); + + public abstract List toList(); +} \ No newline at end of file diff --git a/test/SpecificCase.java b/test/SpecificCase.java new file mode 100644 index 0000000..7ad5619 --- /dev/null +++ b/test/SpecificCase.java @@ -0,0 +1,39 @@ +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Reader; + +import org.junit.jupiter.api.Test; + +import dev.peerat.parser.Parser; +import dev.peerat.parser.TokenValidator; +import dev.peerat.parser.java.JavaElement; +import dev.peerat.parser.java.JavaFile; +import dev.peerat.parser.java.JavaParser; + +public class SpecificCase{ + + @Test + void genericInMethod() throws Exception{ + String clazz = "class Test{ T testIt(){ return (T)null; } }"; + Parser parser = new JavaParser(); + + BufferedReader reader = new BufferedReader(new Reader() { + public int read(char[] cbuf, int off, int len) throws IOException {return 0;} + public void close() throws IOException {} + }){ + String line = clazz; + @Override + public String readLine() throws IOException{ + String value = line; + line = null; + return value; + } + }; + parser.parse(reader, new JavaFile()); + parser.build(new BufferedWriter(new FileWriter(new File("/home/ParserV2.txt")))); + } + +} diff --git a/test/dev/peerat/parser/java/ValueTypesTests.java b/test/dev/peerat/parser/java/ValueTypesTests.java new file mode 100644 index 0000000..c8da5f4 --- /dev/null +++ b/test/dev/peerat/parser/java/ValueTypesTests.java @@ -0,0 +1,186 @@ +package dev.peerat.parser.java; + +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.function.Function; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestInstance.Lifecycle; + +import dev.peerat.parser.Parser; +import dev.peerat.parser.java.tree.JavaTreeType; +import dev.peerat.parser.java.value.BiValue; +import dev.peerat.parser.java.value.MethodCallValue; +import dev.peerat.parser.java.value.ModifierValue; +import dev.peerat.parser.java.value.StaticValue; +import dev.peerat.parser.java.value.TriValue; +import dev.peerat.parser.java.value.Value; +import dev.peerat.parser.java.value.Value.ValueContainer; + +@TestInstance(Lifecycle.PER_CLASS) +public class ValueTypesTests { + + private Parser parser; + + @BeforeAll + public void init(){ + parser = new JavaParser(JavaTreeType.VALUE); + } + + private Value parse(String value) throws Exception{ + Container container = new Container(); + parser.parse(value, container); + return container.getValue(); + } + + private static class Container extends JavaElement implements ValueContainer{ + + private Value value; + + @Override + public void addValue(Value value) { + this.value = value; + } + + public Value getValue(){ + return this.value; + } + + @Override + public void build(Builder builder) throws Exception {} + + @Override + public E find(Function finder){return null;} + + @Override + public void findAll(Function finder, List list){} + + } + + private T assertInstance(Object obj, java.lang.Class type){ + assertTrue(type.isAssignableFrom(obj.getClass())); + return (T) obj; + } + + @Test + public void onStaticValue() throws Exception{ + + //ALL FORMATED VALUES LIKE DOUBLE, FLOAT, BINARY, CHARS(?),..... + + StaticValue v; + + v = assertInstance(parse("8"), StaticValue.class); + assertEquals("8", v.getToken().getValue()); + v = assertInstance(parse("value"), StaticValue.class); + assertEquals("value", v.getToken().getValue()); + v = assertInstance(parse("\"value\""), StaticValue.class); + assertEquals("\"value\"", v.getToken().getValue()); + v = assertInstance(parse("'a'"), StaticValue.class); + assertEquals("'a'", v.getToken().getValue()); + } + + @Test + public void onBiValue() throws Exception{ + + BiValue v; + + v = assertInstance(parse("8+8"), BiValue.class); + assertEquals("8", assertInstance(v.left(), StaticValue.class).getToken().getValue()); + assertEquals("+", v.getAction()); + assertEquals("8", assertInstance(v.right(), StaticValue.class).getToken().getValue()); + + v = assertInstance(parse("8+offset"), BiValue.class); + assertEquals("8", assertInstance(v.left(), StaticValue.class).getToken().getValue()); + assertEquals("+", v.getAction()); + assertEquals("offset", assertInstance(v.right(), StaticValue.class).getToken().getValue()); + + v = assertInstance(parse("8+offset > 8"), BiValue.class); + BiValue right = assertInstance(v.right(), BiValue.class); + assertEquals("8", assertInstance(v.left(), StaticValue.class).getToken().getValue()); + assertEquals("+", v.getAction()); + assertEquals("offset", assertInstance(right.left(), StaticValue.class).getToken().getValue()); + assertEquals(">", right.getAction()); + assertEquals("8", assertInstance(right.right(), StaticValue.class).getToken().getValue()); + } + + @Test + public void onTriValue() throws Exception{ + + TriValue v; + + v = assertInstance(parse("bool ? true : false"), TriValue.class); + assertEquals("bool", assertInstance(v.getChecker(), StaticValue.class).getToken().getValue()); + assertEquals("true", assertInstance(v.success(), StaticValue.class).getToken().getValue()); + assertEquals("false", assertInstance(v.fail(), StaticValue.class).getToken().getValue()); + + v = assertInstance(parse("bool ? 8+8 : false"), TriValue.class); + assertEquals("bool", assertInstance(v.getChecker(), StaticValue.class).getToken().getValue()); + BiValue bv = assertInstance(v.success(), BiValue.class); + assertEquals("8", assertInstance(bv.left(), StaticValue.class).getToken().getValue()); + assertEquals("+", bv.getAction()); + assertEquals("8", assertInstance(bv.right(), StaticValue.class).getToken().getValue()); + assertEquals("false", assertInstance(v.fail(), StaticValue.class).getToken().getValue()); + + v = assertInstance(parse("bool ? rebool ? true : bool : false"), TriValue.class); + assertEquals("bool", assertInstance(v.getChecker(), StaticValue.class).getToken().getValue()); + assertEquals("false", assertInstance(v.fail(), StaticValue.class).getToken().getValue()); + TriValue success = assertInstance(v.success(), TriValue.class); + assertEquals("rebool", assertInstance(success.getChecker(), StaticValue.class).getToken().getValue()); + assertEquals("true", assertInstance(success.success(), StaticValue.class).getToken().getValue()); + assertEquals("bool", assertInstance(success.fail(), StaticValue.class).getToken().getValue()); + + v = assertInstance(parse("(rebool ? true : bool) ? true : false"), TriValue.class); + TriValue checker = assertInstance(v.getChecker(), TriValue.class); + assertEquals("rebool", assertInstance(checker.getChecker(), StaticValue.class).getToken().getValue()); + assertEquals("true", assertInstance(checker.success(), StaticValue.class).getToken().getValue()); + assertEquals("bool", assertInstance(checker.fail(), StaticValue.class).getToken().getValue()); + assertEquals("true", assertInstance(v.success(), StaticValue.class).getToken().getValue()); + assertEquals("false", assertInstance(v.fail(), StaticValue.class).getToken().getValue()); + } + + @Test + public void onModifierValue() throws Exception{ + + ModifierValue v; + v = assertInstance(parse("!a"), ModifierValue.class); + assertEquals("!", v.getModifier().getValue()); + assertEquals("a", assertInstance(v.getValue(), StaticValue.class).getToken().getValue()); + + v = assertInstance(parse("!(a || b)"), ModifierValue.class); + assertEquals("!", v.getModifier().getValue()); + BiValue bv = assertInstance(v.getValue(), BiValue.class); + assertEquals("a", assertInstance(bv.left(), StaticValue.class).getToken().getValue()); + assertEquals("||", bv.getAction()); + assertEquals("b", assertInstance(bv.right(), StaticValue.class).getToken().getValue()); + } + + @Test + public void onMethodCallValue() throws Exception{ + MethodCallValue v; + v = assertInstance(parse("test()"), MethodCallValue.class); + assertNull(v.base()); + assertEquals("test", v.getToken().getValue()); + assertNull(v.getGeneric()); + assertNull(v.getParameters()); + + v = assertInstance(parse("JavaParserTest.test(8+8).equals(16)"), MethodCallValue.class); + assertEquals("equals", v.getToken().getValue()); + assertEquals(1, v.getParameters().size()); + assertEquals("16", assertInstance(v.getParameters().get(0), StaticValue.class).getToken().getValue()); + v = assertInstance(v.base(), MethodCallValue.class); + assertEquals(1, v.getParameters().size()); + BiValue bv = assertInstance(v.getParameters().get(0), BiValue.class); + assertEquals("8", assertInstance(bv.left(), StaticValue.class).getToken().getValue()); + assertEquals("+", bv.getAction()); + assertEquals("8", assertInstance(bv.right(), StaticValue.class).getToken().getValue()); + assertEquals("test", v.getToken().getValue()); + assertEquals("JavaParserTest", assertInstance(v.base(), StaticValue.class).getToken().getClass()); + + v = assertInstance(parse("main.test.here.localvar.run(6)[0].validate(7)"), MethodCallValue.class); + } +} diff --git a/test/dev/peerat/parser/java/browser/BrowserLambdaTests.java b/test/dev/peerat/parser/java/browser/BrowserLambdaTests.java new file mode 100644 index 0000000..587754f --- /dev/null +++ b/test/dev/peerat/parser/java/browser/BrowserLambdaTests.java @@ -0,0 +1,77 @@ +package dev.peerat.parser.java.browser; + +import java.lang.reflect.Modifier; + +import org.junit.jupiter.api.Test; + +import dev.peerat.parser.java.JavaFile; +import dev.peerat.parser.java.JavaParser; +import dev.peerat.parser.java.Class; + +public class BrowserLambdaTests{ + + @Test + void main(){ + + try{ + JavaParser parser = new JavaParser(); + JavaFile javaFile = new JavaFile(); + parser.parse("package be.jeffcheasey88; public class Test{ public Test(){} public void test(){} }", javaFile); + + + Class clazz = (Class) javaFile.getMainClass(); + System.out.println(clazz); + clazz.stream().functionFilter((func) -> func.getName().getValue().equals("test")); + }catch(Exception ex){ + ex.printStackTrace(); + } + + } + + @Test + void findVariableGetterSetter(){ + try{ + JavaParser parser = new JavaParser(); + JavaFile javaFile = new JavaFile(); + parser.parse("package be.jeffcheasey88; public class Test{ private boolean isActive; public boolean isActive(){ return isActive;} public void setActive(boolean active){ isActive = active; } }", javaFile); + + + Class clazz = (Class) javaFile.getMainClass(); + System.out.println(clazz); + clazz.stream().variableFilter((v) -> Modifier.isPrivate(v.getModifier())); + }catch(Exception ex){ + ex.printStackTrace(); + } + } + + + /** + * + * Récupérer la liste des constructeurs + * clazz.stream().functionFilter((func) -> func.isConstructor()); + * Récupérer la liste des variables privée ainsi que leurs getter/setter + * clazz.stream().variableFilter((variable) -> variable.isPrivate()).pair((clazzStreamble, variable) clazzStreamable.functionFilter(func) -> func.getName().endsWith(variable.getName())); + * Récupérer les annotations de n'importe quel type d'element et check si toutes les variables de l'annotation sont override + * findAnnotation(true) + * pair( + * (annotation) -> findAnnotationClass((clazz) -> clazz.getName().equals(annotation.getName())) + * ) + * + * return Map; + * Récupérer toutes les méthodes qui ne font pas un return de l'un de leurs paramètres + * findFunction(func -> !func.isConstructor()) + * .findReturnOperation((func, operation) -> !func.getVariableNames().contains(operation.getVariableName())) + * .parent() + * Vérifier si une variable définie dans la class est utilisée quelque part dans celle-ci. + * findVariables((v) -> true) + * pair( + * (variable) -> findStaticValue((value) -> value.getToken().getValue().equals(variable.getName())) + * ) + * + * return Map; + * Vérifier si une méthode est override par au moins par 2 sous-classes + * + * + */ + +}