From ce19dae60ea4f078c529b9f17dee18e186d1ede7 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Sun, 2 Mar 2025 19:02:38 +0100 Subject: [PATCH] [BETA] base Visitor in all JavaElement + base Visitor Pattern + refractor VisitorBag + debug (commentary & commented sysout) --- .../peerat/parser/StreamTokenValidator.java | 65 --------- src/dev/peerat/parser/StreamTokenizer.java | 7 - src/dev/peerat/parser/StreamableTree.java | 3 - src/dev/peerat/parser/java/Annotation.java | 7 +- .../peerat/parser/java/AnnotationClass.java | 9 +- src/dev/peerat/parser/java/Class.java | 9 +- src/dev/peerat/parser/java/ClassBase.java | 12 +- src/dev/peerat/parser/java/Enumeration.java | 9 +- src/dev/peerat/parser/java/Function.java | 13 +- src/dev/peerat/parser/java/Import.java | 3 +- src/dev/peerat/parser/java/Interface.java | 9 +- src/dev/peerat/parser/java/JavaElement.java | 2 +- src/dev/peerat/parser/java/JavaFile.java | 11 +- src/dev/peerat/parser/java/JavaParser.java | 16 +++ src/dev/peerat/parser/java/Variable.java | 9 +- .../java/operation/AssignOperation.java | 9 +- .../parser/java/operation/BreakOperation.java | 2 +- .../parser/java/operation/CatchOperation.java | 2 +- .../java/operation/ContinueOperation.java | 2 +- .../parser/java/operation/DoOperation.java | 2 +- .../parser/java/operation/ElseOperation.java | 2 +- .../java/operation/FinallyOperation.java | 2 +- .../parser/java/operation/ForOperation.java | 15 +- .../java/operation/ForeachOperation.java | 9 +- .../parser/java/operation/IfOperation.java | 9 +- .../parser/java/operation/OperationBag.java | 7 +- .../java/operation/ReturnOperation.java | 7 +- .../java/operation/SwitchOperation.java | 2 +- .../java/operation/SynchronizedOperation.java | 9 +- .../parser/java/operation/ThrowOperation.java | 7 +- .../parser/java/operation/TryOperation.java | 9 +- .../parser/java/operation/WhileOperation.java | 9 +- .../peerat/parser/java/value/ArrayValue.java | 7 +- src/dev/peerat/parser/java/value/BiValue.java | 9 +- .../parser/java/value/InnerElementValue.java | 7 +- .../parser/java/value/InstanceValue.java | 7 +- .../peerat/parser/java/value/LambdaValue.java | 7 +- .../parser/java/value/MethodCallValue.java | 9 +- .../parser/java/value/ModifierValue.java | 7 +- .../peerat/parser/java/value/StaticValue.java | 2 +- .../peerat/parser/java/value/TriValue.java | 11 +- .../java/value/VariableAccessValue.java | 7 +- .../java/visitor/JavaAnnotationVisitor.java | 33 ++++- .../java/visitor/JavaClassBaseVisitor.java | 42 ++++++ .../parser/java/visitor/JavaClassVisitor.java | 130 ++++++++++++++++++ .../java/visitor/JavaFunctionVisitor.java | 22 +++ .../java/visitor/JavaVariableVisitor.java | 99 +++++++++++++ .../parser/java/visitor/JavaVisitor.java | 53 ++++--- .../internal/chain/JavaVisitorChain.java | 22 --- .../chain/JavaVisitorChainPredicate.java | 25 ---- src/dev/peerat/parser/visitor/Example.java | 45 +++--- src/dev/peerat/parser/visitor/Operator.java | 73 +++++++++- src/dev/peerat/parser/visitor/Visitor.java | 4 + src/dev/peerat/parser/visitor/VisitorBag.java | 49 +++++++ .../parser/visitor/bag/ListVisitorBag.java | 29 ---- .../peerat/parser/visitor/bag/VisitorBag.java | 12 -- 56 files changed, 642 insertions(+), 357 deletions(-) delete mode 100644 src/dev/peerat/parser/StreamTokenValidator.java delete mode 100644 src/dev/peerat/parser/StreamTokenizer.java delete mode 100644 src/dev/peerat/parser/StreamableTree.java create mode 100644 src/dev/peerat/parser/java/visitor/JavaClassBaseVisitor.java create mode 100644 src/dev/peerat/parser/java/visitor/JavaClassVisitor.java create mode 100644 src/dev/peerat/parser/java/visitor/JavaFunctionVisitor.java create mode 100644 src/dev/peerat/parser/java/visitor/JavaVariableVisitor.java delete mode 100644 src/dev/peerat/parser/java/visitor/internal/chain/JavaVisitorChain.java delete mode 100644 src/dev/peerat/parser/java/visitor/internal/chain/JavaVisitorChainPredicate.java create mode 100644 src/dev/peerat/parser/visitor/VisitorBag.java delete mode 100644 src/dev/peerat/parser/visitor/bag/ListVisitorBag.java delete mode 100644 src/dev/peerat/parser/visitor/bag/VisitorBag.java diff --git a/src/dev/peerat/parser/StreamTokenValidator.java b/src/dev/peerat/parser/StreamTokenValidator.java deleted file mode 100644 index ff03569..0000000 --- a/src/dev/peerat/parser/StreamTokenValidator.java +++ /dev/null @@ -1,65 +0,0 @@ -package dev.peerat.parser; - -import java.io.BufferedReader; -import java.util.function.BiConsumer; -import java.util.function.Function; - -public class StreamTokenValidator extends TokenValidator{ - - private StreamTokenizer tokenizer; - private int validated; - private int index; - private BufferedReader reader; - - public StreamTokenValidator(StreamTokenizer tokenizer){ - super(new Token[0]); - this.tokenizer = tokenizer; - } - -// private boolean nextToken(){ -// -// } -// -// public boolean hasNext(){ -// return validated < elements.length; -// } -// -// public boolean validate(Function action){ -// if(validated >= this.elements.length) return false; -// if(!hasNext()) return false; -// if(action.apply(this.elements[validated])){ -// if(validated+1 > MAX_VALIDATE){ -// MAX_VALIDATE = validated+1; -// TOKENS = elements.length; -// } -// this.validated++; -// return true; -// } -// return false; -// } -// -// public boolean validate(Function action, BiConsumer filler){ -// if(validate(action)){ -// filler.accept(getBag(), elements[validated-1]); -// return true; -// } -// return false; -// } -// -// public TokenValidator branch(){ -// StreamTokenValidator branch = new StreamTokenValidator(reader); -// branch.elements = this.elements; -// branch.index = Math.max(0, this.validated-1); -// branch.validated = this.validated; -// branch.setBag(getBag()); -// return branch; -// } - - public void merge(TokenValidator branch){ - StreamTokenValidator validator = (StreamTokenValidator)branch; - this.index = validator.index; - this.validated = validator.validated; - setBag(branch.getBag()); - } - -} diff --git a/src/dev/peerat/parser/StreamTokenizer.java b/src/dev/peerat/parser/StreamTokenizer.java deleted file mode 100644 index 0ff55ea..0000000 --- a/src/dev/peerat/parser/StreamTokenizer.java +++ /dev/null @@ -1,7 +0,0 @@ -package dev.peerat.parser; - -public class StreamTokenizer extends Tokenizer{ - - - -} diff --git a/src/dev/peerat/parser/StreamableTree.java b/src/dev/peerat/parser/StreamableTree.java deleted file mode 100644 index f002b6a..0000000 --- a/src/dev/peerat/parser/StreamableTree.java +++ /dev/null @@ -1,3 +0,0 @@ -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 fd1bb2b..ac3e56a 100644 --- a/src/dev/peerat/parser/java/Annotation.java +++ b/src/dev/peerat/parser/java/Annotation.java @@ -8,8 +8,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class Annotation extends JavaElement{ @@ -142,11 +141,11 @@ public class Annotation extends JavaElement{ @Override public VisitorBag visit(JavaVisitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); if(this.values != null) for(Value value : this.values.values()){ - bag.compute(value.visit(visitor).toList().toArray()); + bag.merge(value.visit(visitor)); } return bag; diff --git a/src/dev/peerat/parser/java/AnnotationClass.java b/src/dev/peerat/parser/java/AnnotationClass.java index 9c6d9ea..fb03f57 100644 --- a/src/dev/peerat/parser/java/AnnotationClass.java +++ b/src/dev/peerat/parser/java/AnnotationClass.java @@ -5,8 +5,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class AnnotationClass extends ClassBase{ @@ -95,12 +94,12 @@ public class AnnotationClass extends ClassBase{ @Override public VisitorBag visit(JavaVisitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); - bag.compute(super.visit(visitor).toList().toArray()); + bag.merge(super.visit(visitor)); for(JavaElement element : this.elements){ - bag.compute(element.visit(visitor).toList().toArray()); + bag.merge(element.visit(visitor)); } return bag; diff --git a/src/dev/peerat/parser/java/Class.java b/src/dev/peerat/parser/java/Class.java index a282a8e..cfc3ee5 100644 --- a/src/dev/peerat/parser/java/Class.java +++ b/src/dev/peerat/parser/java/Class.java @@ -5,8 +5,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class Class extends ClassBase{ @@ -110,12 +109,12 @@ public class Class extends ClassBase{ @Override public VisitorBag visit(JavaVisitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); - bag.compute(super.visit(visitor).toList().toArray()); + bag.merge(super.visit(visitor)); for(JavaElement element : this.elements){ - bag.compute(element.visit(visitor).toList().toArray()); + bag.merge(element.visit(visitor)); } return bag; diff --git a/src/dev/peerat/parser/java/ClassBase.java b/src/dev/peerat/parser/java/ClassBase.java index 6a719cf..c171e5f 100644 --- a/src/dev/peerat/parser/java/ClassBase.java +++ b/src/dev/peerat/parser/java/ClassBase.java @@ -8,12 +8,13 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public abstract class ClassBase extends Annotable implements AnnotableBuffer, ClassContainer, FunctionContainer, VariableContainer{ + //Why not name and modifier here ? + private List annotationBuffer; public ClassBase(List annotations){ @@ -33,12 +34,13 @@ public abstract class ClassBase extends Annotable implements AnnotableBuffer, Cl } @Override - public VisitorBag visit(JavaVisitor visitor) { - VisitorBag bag = new ListVisitorBag(); + public VisitorBag visit(JavaVisitor visitor){ + if(visitor.canVisit(getClass())) return visitor.visit(this); + VisitorBag bag = new VisitorBag(); List annotations = getAnnotations(); if(annotations != null) for(Annotation annotation : annotations){ - bag.compute(annotation.visit(visitor).toList().toArray()); + bag.merge(annotation.visit(visitor)); } return bag; } diff --git a/src/dev/peerat/parser/java/Enumeration.java b/src/dev/peerat/parser/java/Enumeration.java index e09506d..a716c4e 100644 --- a/src/dev/peerat/parser/java/Enumeration.java +++ b/src/dev/peerat/parser/java/Enumeration.java @@ -5,8 +5,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class Enumeration extends ClassBase{ @@ -100,12 +99,12 @@ public class Enumeration extends ClassBase{ @Override public VisitorBag visit(JavaVisitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); - bag.compute(super.visit(visitor).toList().toArray()); + bag.merge(super.visit(visitor)); for(JavaElement element : this.elements){ - bag.compute(element.visit(visitor).toList().toArray()); + bag.merge(element.visit(visitor)); } return bag; diff --git a/src/dev/peerat/parser/java/Function.java b/src/dev/peerat/parser/java/Function.java index 7cd4daf..03d247a 100644 --- a/src/dev/peerat/parser/java/Function.java +++ b/src/dev/peerat/parser/java/Function.java @@ -10,8 +10,7 @@ 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.visitor.JavaVisitor; -import dev.peerat.parser.visitor.bag.ListVisitorBag; -import dev.peerat.parser.visitor.bag.VisitorBag; +import dev.peerat.parser.visitor.VisitorBag; public class Function extends Annotable implements VariableContainer, OperationContainer{ @@ -162,23 +161,23 @@ public class Function extends Annotable implements VariableContainer, OperationC } @Override - public VisitorBag visit(JavaVisitor visitor) { + public VisitorBag visit(JavaVisitor visitor){ if(visitor.canVisit(getClass())) return visitor.visit(this); - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); List annotations = getAnnotations(); if(annotations != null) for(Annotation annotation : annotations){ - bag.compute(annotation.visit(visitor).toList().toArray()); + bag.merge(annotation.visit(visitor)); } if(this.parameters != null) for(Variable variable : this.parameters){ - bag.compute(variable.visit(visitor).toList().toArray()); + bag.merge(variable.visit(visitor)); } for(JavaElement element : this.elements){ - bag.compute(element.visit(visitor).toList().toArray()); + bag.merge(element.visit(visitor)); } return bag; diff --git a/src/dev/peerat/parser/java/Import.java b/src/dev/peerat/parser/java/Import.java index 0bea781..4cd78c8 100644 --- a/src/dev/peerat/parser/java/Import.java +++ b/src/dev/peerat/parser/java/Import.java @@ -5,8 +5,7 @@ import java.util.function.Function; 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; +import dev.peerat.parser.visitor.VisitorBag; public class Import extends JavaElement{ diff --git a/src/dev/peerat/parser/java/Interface.java b/src/dev/peerat/parser/java/Interface.java index de71bd9..1ce06f2 100644 --- a/src/dev/peerat/parser/java/Interface.java +++ b/src/dev/peerat/parser/java/Interface.java @@ -5,8 +5,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class Interface extends ClassBase{ @@ -100,11 +99,11 @@ public class Interface extends ClassBase{ @Override public VisitorBag visit(JavaVisitor visitor){ if(visitor.canVisit(getClass())) return visitor.visit(this); - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); - bag.compute(super.visit(visitor).toList().toArray()); + bag.merge(super.visit(visitor)); - for(JavaElement element : this.elements) bag.compute(element.visit(visitor).toList().toArray()); + for(JavaElement element : this.elements) bag.merge(element.visit(visitor)); return bag; } diff --git a/src/dev/peerat/parser/java/JavaElement.java b/src/dev/peerat/parser/java/JavaElement.java index a66a329..af747b1 100644 --- a/src/dev/peerat/parser/java/JavaElement.java +++ b/src/dev/peerat/parser/java/JavaElement.java @@ -5,7 +5,7 @@ import java.util.function.Function; import dev.peerat.parser.ElementBuilder; import dev.peerat.parser.java.visitor.JavaVisitor; -import dev.peerat.parser.visitor.bag.VisitorBag; +import dev.peerat.parser.visitor.VisitorBag; public abstract class JavaElement implements ElementBuilder{ diff --git a/src/dev/peerat/parser/java/JavaFile.java b/src/dev/peerat/parser/java/JavaFile.java index ad24c58..b62a727 100644 --- a/src/dev/peerat/parser/java/JavaFile.java +++ b/src/dev/peerat/parser/java/JavaFile.java @@ -8,8 +8,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class JavaFile extends JavaElement implements ClassContainer, AnnotableBuffer{ @@ -109,18 +108,18 @@ public class JavaFile extends JavaElement implements ClassContainer, AnnotableBu @Override public VisitorBag visit(JavaVisitor visitor){ if(visitor.canVisit(getClass())) return visitor.visit(this); - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); if(this.imports != null) for(Import imp : this.imports){ - bag.compute(imp.visit(visitor).toList().toArray()); + bag.merge(imp.visit(visitor)); } - bag.compute(mainClazz.visit(visitor).toList().toArray()); + bag.merge(mainClazz.visit(visitor)); if(this.subClazz != null) for(ClassBase clazz : this.subClazz){ - bag.compute(clazz.visit(visitor).toList().toArray()); + bag.merge(clazz.visit(visitor)); } return bag; diff --git a/src/dev/peerat/parser/java/JavaParser.java b/src/dev/peerat/parser/java/JavaParser.java index 39c15d0..9438071 100644 --- a/src/dev/peerat/parser/java/JavaParser.java +++ b/src/dev/peerat/parser/java/JavaParser.java @@ -24,6 +24,22 @@ import dev.peerat.parser.tree.SyntaxTreeRegistery; public class JavaParser extends Parser{ + + //TODO + /** + * Visitor: + * All Visitor Types with all possible (wanted) queries + * VisitorBag -> collecter ce qui doit ĂȘtre collecter only + 1 element, n elements, n pair d'element,... + * VisitorBag -> validation de sous-ensemble, et non capture pour autant. + * VisitorBag -> Operators + * AST: + * Terminer les arbres + * Bind correctement tout (dĂ©placer les noms & modifiers des classes dans ClassBase) + * + * + * + */ + // public static void main(String[] args) throws Exception{ // Timing main = Timing.of(); // diff --git a/src/dev/peerat/parser/java/Variable.java b/src/dev/peerat/parser/java/Variable.java index a7f06b8..8a08df4 100644 --- a/src/dev/peerat/parser/java/Variable.java +++ b/src/dev/peerat/parser/java/Variable.java @@ -9,8 +9,7 @@ import dev.peerat.parser.TokenType; import dev.peerat.parser.java.Annotation.Annotable; 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; +import dev.peerat.parser.visitor.VisitorBag; public class Variable extends Annotable{ @@ -105,15 +104,15 @@ public class Variable extends Annotable{ @Override public VisitorBag visit(JavaVisitor visitor){ if(visitor.canVisit(getClass())) return visitor.visit(this); - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); List annotations = getAnnotations(); if(annotations != null) for(Annotation annotation : annotations){ - bag.compute(annotation.visit(visitor).toList().toArray()); + bag.merge(annotation.visit(visitor)); } - if(this.value != null) bag.compute(this.value.visit(visitor).toList().toArray()); + if(this.value != null) bag.merge(this.value.visit(visitor)); return bag; } diff --git a/src/dev/peerat/parser/java/operation/AssignOperation.java b/src/dev/peerat/parser/java/operation/AssignOperation.java index bf19ce4..a56e0f1 100644 --- a/src/dev/peerat/parser/java/operation/AssignOperation.java +++ b/src/dev/peerat/parser/java/operation/AssignOperation.java @@ -7,8 +7,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class AssignOperation extends Operation{ @@ -51,9 +50,9 @@ public class AssignOperation extends Operation{ @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()); + VisitorBag bag = new VisitorBag(); + bag.merge(left.visit(visitor)); + bag.merge(right.visit(visitor)); return bag; } } diff --git a/src/dev/peerat/parser/java/operation/BreakOperation.java b/src/dev/peerat/parser/java/operation/BreakOperation.java index 8453d66..836b07c 100644 --- a/src/dev/peerat/parser/java/operation/BreakOperation.java +++ b/src/dev/peerat/parser/java/operation/BreakOperation.java @@ -6,7 +6,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class BreakOperation extends Operation{ diff --git a/src/dev/peerat/parser/java/operation/CatchOperation.java b/src/dev/peerat/parser/java/operation/CatchOperation.java index 8a2b53d..6db042b 100644 --- a/src/dev/peerat/parser/java/operation/CatchOperation.java +++ b/src/dev/peerat/parser/java/operation/CatchOperation.java @@ -4,7 +4,7 @@ import java.util.List; import dev.peerat.parser.Token; import dev.peerat.parser.java.visitor.JavaVisitor; -import dev.peerat.parser.visitor.bag.VisitorBag; +import dev.peerat.parser.visitor.VisitorBag; public class CatchOperation extends OperationBag{ diff --git a/src/dev/peerat/parser/java/operation/ContinueOperation.java b/src/dev/peerat/parser/java/operation/ContinueOperation.java index 2dbc2ae..0e301d9 100644 --- a/src/dev/peerat/parser/java/operation/ContinueOperation.java +++ b/src/dev/peerat/parser/java/operation/ContinueOperation.java @@ -6,7 +6,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class ContinueOperation extends Operation{ diff --git a/src/dev/peerat/parser/java/operation/DoOperation.java b/src/dev/peerat/parser/java/operation/DoOperation.java index 80c0fce..862f1af 100644 --- a/src/dev/peerat/parser/java/operation/DoOperation.java +++ b/src/dev/peerat/parser/java/operation/DoOperation.java @@ -1,7 +1,7 @@ package dev.peerat.parser.java.operation; import dev.peerat.parser.java.visitor.JavaVisitor; -import dev.peerat.parser.visitor.bag.VisitorBag; +import dev.peerat.parser.visitor.VisitorBag; public class DoOperation extends OperationBag{ diff --git a/src/dev/peerat/parser/java/operation/ElseOperation.java b/src/dev/peerat/parser/java/operation/ElseOperation.java index 9398a87..0e07fb8 100644 --- a/src/dev/peerat/parser/java/operation/ElseOperation.java +++ b/src/dev/peerat/parser/java/operation/ElseOperation.java @@ -1,7 +1,7 @@ package dev.peerat.parser.java.operation; import dev.peerat.parser.java.visitor.JavaVisitor; -import dev.peerat.parser.visitor.bag.VisitorBag; +import dev.peerat.parser.visitor.VisitorBag; public class ElseOperation extends OperationBag{ diff --git a/src/dev/peerat/parser/java/operation/FinallyOperation.java b/src/dev/peerat/parser/java/operation/FinallyOperation.java index 1449b4b..4d0f793 100644 --- a/src/dev/peerat/parser/java/operation/FinallyOperation.java +++ b/src/dev/peerat/parser/java/operation/FinallyOperation.java @@ -1,7 +1,7 @@ package dev.peerat.parser.java.operation; import dev.peerat.parser.java.visitor.JavaVisitor; -import dev.peerat.parser.visitor.bag.VisitorBag; +import dev.peerat.parser.visitor.VisitorBag; public class FinallyOperation extends OperationBag{ diff --git a/src/dev/peerat/parser/java/operation/ForOperation.java b/src/dev/peerat/parser/java/operation/ForOperation.java index a14e169..c33bfd5 100644 --- a/src/dev/peerat/parser/java/operation/ForOperation.java +++ b/src/dev/peerat/parser/java/operation/ForOperation.java @@ -7,8 +7,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class ForOperation extends OperationBag{ @@ -98,25 +97,25 @@ public class ForOperation extends OperationBag{ @Override public VisitorBag visit(JavaVisitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); if(init_vars != null) for(Variable variable : this.init_vars){ - bag.compute(variable.visit(visitor).toList().toArray()); + bag.merge(variable.visit(visitor)); } if(init_values != null) for(Value value : this.init_values){ - bag.compute(value.visit(visitor).toList().toArray()); + bag.merge(value.visit(visitor)); } - bag.compute(condition.visit(visitor).toList().toArray()); + bag.merge(condition.visit(visitor)); if(this.updates != null) for(Value value : this.updates){ - bag.compute(value.visit(visitor).toList().toArray()); + bag.merge(value.visit(visitor)); } - bag.compute(super.visit(visitor).toList().toArray()); + bag.merge(super.visit(visitor)); return bag; } } diff --git a/src/dev/peerat/parser/java/operation/ForeachOperation.java b/src/dev/peerat/parser/java/operation/ForeachOperation.java index 2341f8c..9363c0b 100644 --- a/src/dev/peerat/parser/java/operation/ForeachOperation.java +++ b/src/dev/peerat/parser/java/operation/ForeachOperation.java @@ -7,8 +7,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class ForeachOperation extends OperationBag{ @@ -57,9 +56,9 @@ public class ForeachOperation extends OperationBag{ @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()); + VisitorBag bag = new VisitorBag(); + bag.merge(this.iterator.visit(visitor)); + bag.merge(super.visit(visitor)); return bag; } } diff --git a/src/dev/peerat/parser/java/operation/IfOperation.java b/src/dev/peerat/parser/java/operation/IfOperation.java index a11cb6d..3397c75 100644 --- a/src/dev/peerat/parser/java/operation/IfOperation.java +++ b/src/dev/peerat/parser/java/operation/IfOperation.java @@ -6,8 +6,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class IfOperation extends OperationBag{ @@ -43,9 +42,9 @@ public class IfOperation extends OperationBag{ @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()); + VisitorBag bag = new VisitorBag(); + bag.merge(condition.visit(visitor)); + bag.merge(super.visit(visitor)); return bag; } } diff --git a/src/dev/peerat/parser/java/operation/OperationBag.java b/src/dev/peerat/parser/java/operation/OperationBag.java index 4dabecf..67453c0 100644 --- a/src/dev/peerat/parser/java/operation/OperationBag.java +++ b/src/dev/peerat/parser/java/operation/OperationBag.java @@ -10,8 +10,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public abstract class OperationBag extends Operation implements VariableContainer, OperationContainer{ @@ -57,9 +56,9 @@ public abstract class OperationBag extends Operation implements VariableContaine @Override public VisitorBag visit(JavaVisitor visitor){ - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); for(JavaElement element : this.elements){ - bag.compute(element.visit(visitor).toList().toArray()); + bag.merge(element.visit(visitor)); } return bag; } diff --git a/src/dev/peerat/parser/java/operation/ReturnOperation.java b/src/dev/peerat/parser/java/operation/ReturnOperation.java index 6f30c26..d31cc30 100644 --- a/src/dev/peerat/parser/java/operation/ReturnOperation.java +++ b/src/dev/peerat/parser/java/operation/ReturnOperation.java @@ -7,8 +7,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class ReturnOperation extends Operation{ @@ -43,8 +42,8 @@ public class ReturnOperation extends Operation{ @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()); + VisitorBag bag = new VisitorBag(); + if(this.value != null) bag.merge(this.value.visit(visitor)); return bag; } } diff --git a/src/dev/peerat/parser/java/operation/SwitchOperation.java b/src/dev/peerat/parser/java/operation/SwitchOperation.java index c9a0ddc..2320a63 100644 --- a/src/dev/peerat/parser/java/operation/SwitchOperation.java +++ b/src/dev/peerat/parser/java/operation/SwitchOperation.java @@ -6,7 +6,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class SwitchOperation extends Operation{ diff --git a/src/dev/peerat/parser/java/operation/SynchronizedOperation.java b/src/dev/peerat/parser/java/operation/SynchronizedOperation.java index 084d062..04f8935 100644 --- a/src/dev/peerat/parser/java/operation/SynchronizedOperation.java +++ b/src/dev/peerat/parser/java/operation/SynchronizedOperation.java @@ -6,8 +6,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class SynchronizedOperation extends OperationBag{ @@ -43,9 +42,9 @@ public class SynchronizedOperation extends OperationBag{ @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()); + VisitorBag bag = new VisitorBag(); + bag.merge(this.value.visit(visitor)); + bag.merge(super.visit(visitor)); return bag; } } diff --git a/src/dev/peerat/parser/java/operation/ThrowOperation.java b/src/dev/peerat/parser/java/operation/ThrowOperation.java index d48b061..25d16a9 100644 --- a/src/dev/peerat/parser/java/operation/ThrowOperation.java +++ b/src/dev/peerat/parser/java/operation/ThrowOperation.java @@ -7,8 +7,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class ThrowOperation extends Operation{ @@ -42,8 +41,8 @@ public class ThrowOperation extends Operation{ @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()); + VisitorBag bag = new VisitorBag(); + bag.merge(this.value.visit(visitor)); return bag; } diff --git a/src/dev/peerat/parser/java/operation/TryOperation.java b/src/dev/peerat/parser/java/operation/TryOperation.java index 9d0fd1d..6edcc73 100644 --- a/src/dev/peerat/parser/java/operation/TryOperation.java +++ b/src/dev/peerat/parser/java/operation/TryOperation.java @@ -6,8 +6,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class TryOperation extends OperationBag{ @@ -48,9 +47,9 @@ public class TryOperation extends OperationBag{ @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()); + VisitorBag bag = new VisitorBag(); + if(this.resource != null) bag.merge(this.resource.visit(visitor)); + bag.merge(super.visit(visitor)); return bag; } } diff --git a/src/dev/peerat/parser/java/operation/WhileOperation.java b/src/dev/peerat/parser/java/operation/WhileOperation.java index b02dfbd..e60a985 100644 --- a/src/dev/peerat/parser/java/operation/WhileOperation.java +++ b/src/dev/peerat/parser/java/operation/WhileOperation.java @@ -6,8 +6,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class WhileOperation extends OperationBag{ @@ -42,9 +41,9 @@ public class WhileOperation extends OperationBag{ @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()); + VisitorBag bag = new VisitorBag(); + bag.merge(this.condition.visit(visitor)); + bag.merge(super.visit(visitor)); return bag; } } diff --git a/src/dev/peerat/parser/java/value/ArrayValue.java b/src/dev/peerat/parser/java/value/ArrayValue.java index 6d9dd0c..38119b0 100644 --- a/src/dev/peerat/parser/java/value/ArrayValue.java +++ b/src/dev/peerat/parser/java/value/ArrayValue.java @@ -5,8 +5,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class ArrayValue extends Value{ @@ -38,9 +37,9 @@ public class ArrayValue extends Value{ @Override public VisitorBag visit(JavaVisitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); for(Value value : this.values){ - bag.compute(value.visit(visitor).toList().toArray()); + bag.merge(value.visit(visitor)); } return bag; } diff --git a/src/dev/peerat/parser/java/value/BiValue.java b/src/dev/peerat/parser/java/value/BiValue.java index b822da0..8e9eaab 100644 --- a/src/dev/peerat/parser/java/value/BiValue.java +++ b/src/dev/peerat/parser/java/value/BiValue.java @@ -5,8 +5,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class BiValue extends Value{ @@ -55,9 +54,9 @@ public class BiValue extends Value{ @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()); + VisitorBag bag = new VisitorBag(); + bag.merge(left.visit(visitor)); + bag.merge(right.visit(visitor)); return bag; } } diff --git a/src/dev/peerat/parser/java/value/InnerElementValue.java b/src/dev/peerat/parser/java/value/InnerElementValue.java index ace913a..b3cd885 100644 --- a/src/dev/peerat/parser/java/value/InnerElementValue.java +++ b/src/dev/peerat/parser/java/value/InnerElementValue.java @@ -5,8 +5,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class InnerElementValue extends Value{ @@ -38,8 +37,8 @@ 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()); + VisitorBag bag = new VisitorBag(); + bag.merge(this.element.visit(visitor)); return bag; } diff --git a/src/dev/peerat/parser/java/value/InstanceValue.java b/src/dev/peerat/parser/java/value/InstanceValue.java index 0e32a12..507e900 100644 --- a/src/dev/peerat/parser/java/value/InstanceValue.java +++ b/src/dev/peerat/parser/java/value/InstanceValue.java @@ -6,8 +6,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class InstanceValue extends Value{ @@ -51,10 +50,10 @@ public class InstanceValue extends Value{ @Override public VisitorBag visit(JavaVisitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); if(this.parameters != null) for(Value value : this.parameters){ - bag.compute(value.visit(visitor).toList().toArray()); + bag.merge(value.visit(visitor)); } return bag; } diff --git a/src/dev/peerat/parser/java/value/LambdaValue.java b/src/dev/peerat/parser/java/value/LambdaValue.java index 2515eef..ee8b576 100644 --- a/src/dev/peerat/parser/java/value/LambdaValue.java +++ b/src/dev/peerat/parser/java/value/LambdaValue.java @@ -11,8 +11,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class LambdaValue extends Value implements OperationContainer, VariableContainer{ @@ -66,9 +65,9 @@ public class LambdaValue extends Value implements OperationContainer, VariableCo @Override public VisitorBag visit(JavaVisitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); for(JavaElement element : this.operations){ - bag.compute(element.visit(visitor).toList().toArray()); + bag.merge(element.visit(visitor)); } return bag; } diff --git a/src/dev/peerat/parser/java/value/MethodCallValue.java b/src/dev/peerat/parser/java/value/MethodCallValue.java index 83a3a1a..22132e4 100644 --- a/src/dev/peerat/parser/java/value/MethodCallValue.java +++ b/src/dev/peerat/parser/java/value/MethodCallValue.java @@ -6,8 +6,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class MethodCallValue extends Value{ @@ -57,11 +56,11 @@ 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()); + VisitorBag bag = new VisitorBag(); + bag.merge(this.base.visit(visitor)); if(this.parameters != null) for(Value value : this.parameters){ - bag.compute(value.visit(visitor).toList().toArray()); + bag.merge(value.visit(visitor)); } return bag; } diff --git a/src/dev/peerat/parser/java/value/ModifierValue.java b/src/dev/peerat/parser/java/value/ModifierValue.java index a07c977..dd96fe7 100644 --- a/src/dev/peerat/parser/java/value/ModifierValue.java +++ b/src/dev/peerat/parser/java/value/ModifierValue.java @@ -6,8 +6,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class ModifierValue extends Value{ @@ -50,8 +49,8 @@ public class ModifierValue extends 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()); + VisitorBag bag = new VisitorBag(); + bag.merge(value.visit(visitor)); return bag; } } diff --git a/src/dev/peerat/parser/java/value/StaticValue.java b/src/dev/peerat/parser/java/value/StaticValue.java index 628d9d6..03b17b8 100644 --- a/src/dev/peerat/parser/java/value/StaticValue.java +++ b/src/dev/peerat/parser/java/value/StaticValue.java @@ -6,7 +6,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class StaticValue extends Value{ diff --git a/src/dev/peerat/parser/java/value/TriValue.java b/src/dev/peerat/parser/java/value/TriValue.java index a7e25e7..19d26d1 100644 --- a/src/dev/peerat/parser/java/value/TriValue.java +++ b/src/dev/peerat/parser/java/value/TriValue.java @@ -5,8 +5,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class TriValue extends Value{ @@ -55,11 +54,11 @@ public class TriValue extends Value{ @Override public VisitorBag visit(JavaVisitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); - bag.compute(this.check.visit(visitor).toList().toArray()); - bag.compute(this.success.visit(visitor).toList().toArray()); - bag.compute(this.fail.visit(visitor).toList().toArray()); + bag.merge(this.check.visit(visitor)); + bag.merge(this.success.visit(visitor)); + bag.merge(this.fail.visit(visitor)); return bag; } diff --git a/src/dev/peerat/parser/java/value/VariableAccessValue.java b/src/dev/peerat/parser/java/value/VariableAccessValue.java index ba3fe59..09707bd 100644 --- a/src/dev/peerat/parser/java/value/VariableAccessValue.java +++ b/src/dev/peerat/parser/java/value/VariableAccessValue.java @@ -6,8 +6,7 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public class VariableAccessValue extends Value{ @@ -45,8 +44,8 @@ public class VariableAccessValue 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()); + VisitorBag bag = new VisitorBag(); + bag.merge(this.base.visit(visitor)); return bag; } diff --git a/src/dev/peerat/parser/java/visitor/JavaAnnotationVisitor.java b/src/dev/peerat/parser/java/visitor/JavaAnnotationVisitor.java index c828ff1..1d7ee33 100644 --- a/src/dev/peerat/parser/java/visitor/JavaAnnotationVisitor.java +++ b/src/dev/peerat/parser/java/visitor/JavaAnnotationVisitor.java @@ -3,25 +3,26 @@ package dev.peerat.parser.java.visitor; import java.util.Map; import java.util.Map.Entry; import java.util.function.BiPredicate; +import java.util.function.Function; 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; +import dev.peerat.parser.visitor.VisitorBag; public class JavaAnnotationVisitor extends JavaVisitor{ private Predicate nameFilter; private Predicate keyFilter; - private BiPredicate valueFilter; + private BiPredicate valueFilter; + private Function> valueFilterVisitor; public JavaAnnotationVisitor(){ super(Annotation.class); } - public JavaAnnotationVisitor filterName(Predicate validator){ + public JavaAnnotationVisitor nameFilter(Predicate validator){ this.nameFilter = (this.nameFilter == null) ? validator : this.nameFilter.and(validator); return this; } @@ -31,14 +32,21 @@ public class JavaAnnotationVisitor extends JavaVisitor{ return this; } - public JavaAnnotationVisitor filterValue(BiPredicate validator){ + public JavaAnnotationVisitor valueFilter(BiPredicate validator){ this.valueFilter = (this.valueFilter == null) ? validator : this.valueFilter.and(validator); return this; } + //unique ? + public JavaAnnotationVisitor valueFilter(Function> visitor){ + System.out.println("filter value visitor"); + this.valueFilterVisitor = visitor; + return this; + } + @Override public VisitorBag visitElement(Annotation element){ - VisitorBag bag = new ListVisitorBag(); + VisitorBag bag = new VisitorBag(); if(nameFilter != null){ if(!nameFilter.test(element.getName().getValue())) return bag; } @@ -59,6 +67,19 @@ public class JavaAnnotationVisitor extends JavaVisitor{ } } + if(this.valueFilterVisitor != null){ + Map paramters = element.getParameters(); + if(paramters == null) return bag; + //ALL LIKE THIS? + boolean findOne = false; + for(Entry entry : paramters.entrySet()){ + VisitorBag vbag = this.valueFilterVisitor.apply(entry.getKey().getValue()).visit(entry.getValue()); + bag.merge(vbag); + if(vbag.isValidated()) findOne = true; + } + if(!findOne) return bag; + } + bag.compute(element); return bag; } diff --git a/src/dev/peerat/parser/java/visitor/JavaClassBaseVisitor.java b/src/dev/peerat/parser/java/visitor/JavaClassBaseVisitor.java new file mode 100644 index 0000000..3e9a188 --- /dev/null +++ b/src/dev/peerat/parser/java/visitor/JavaClassBaseVisitor.java @@ -0,0 +1,42 @@ +package dev.peerat.parser.java.visitor; + +import java.util.List; + +import dev.peerat.parser.java.Annotation; +import dev.peerat.parser.java.ClassBase; +import dev.peerat.parser.java.JavaElement; +import dev.peerat.parser.visitor.Visitor; +import dev.peerat.parser.visitor.VisitorBag; + +public class JavaClassBaseVisitor extends JavaVisitor{ + + private Visitor validator; + + public JavaClassBaseVisitor(){ + super(ClassBase.class); + } + + public JavaClassBaseVisitor annotationFilter(Visitor visitor){ + this.validator = visitor; + return this; + } + + @Override + public VisitorBag visitElement(ClassBase element){ + VisitorBag bag = new VisitorBag(); + + if(this.validator != null){ + List annotations = element.getAnnotations(); + if(annotations == null) return bag; + for(Annotation annotation : annotations){ + VisitorBag vbag = this.validator.visit(annotation); + bag.merge(vbag); + if(!vbag.isValidated()) return bag; //check fail TODO + } + } + + bag.compute(element); + return bag; + } + +} diff --git a/src/dev/peerat/parser/java/visitor/JavaClassVisitor.java b/src/dev/peerat/parser/java/visitor/JavaClassVisitor.java new file mode 100644 index 0000000..7a9c006 --- /dev/null +++ b/src/dev/peerat/parser/java/visitor/JavaClassVisitor.java @@ -0,0 +1,130 @@ +package dev.peerat.parser.java.visitor; + +import java.util.function.Predicate; + +import dev.peerat.parser.java.Class; +import dev.peerat.parser.java.JavaElement; +import dev.peerat.parser.visitor.Visitor; +import dev.peerat.parser.visitor.VisitorBag; + +public class JavaClassVisitor extends JavaVisitor{ + + private Predicate nameFilter; + private Predicate modifierFilter; + private Visitor elementVisitor; + + public JavaClassVisitor(){ + super(dev.peerat.parser.java.Class.class); + } + + public JavaClassVisitor nameFilter(Predicate validator){ + this.nameFilter = (this.nameFilter == null) ? validator : this.nameFilter.and(validator); + return this; + } + + public JavaClassVisitor isPublic(){ + Predicate validator = (mod) -> (mod & 0x1) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaClassVisitor isPrivate(){ + Predicate validator = (mod) -> (mod & 0x2) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaClassVisitor isProtected(){ + Predicate validator = (mod) -> (mod & 0x4) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaClassVisitor isStatic(){ + Predicate validator = (mod) -> (mod & 0x8) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaClassVisitor isFinal(){ + Predicate validator = (mod) -> (mod & 0x10) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaClassVisitor isSynchronized(){ + Predicate validator = (mod) -> (mod & 0x20) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaClassVisitor isVolatile(){ + Predicate validator = (mod) -> (mod & 0x40) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaClassVisitor isTransient(){ + Predicate validator = (mod) -> (mod & 0x80) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaClassVisitor isNative(){ + Predicate validator = (mod) -> (mod & 0x100) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaClassVisitor isAbstract(){ + Predicate validator = (mod) -> (mod & 0x400) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaClassVisitor isStrict(){ + Predicate validator = (mod) -> (mod & 0x800) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaClassVisitor isPackageLevel(){ + Predicate validator = (mod) -> (mod & 0x1) == 0 && (mod & 0x2) == 0 && (mod & 0x4) == 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaClassVisitor elements(Visitor visitor){ + this.elementVisitor = visitor; + return this; + } + + // ?? + //isSynthetic + //isMandated + // ?? + + @Override + public VisitorBag visitElement(Class element){ + VisitorBag bag = new VisitorBag(); + if(nameFilter != null){ + if(!nameFilter.test(element.getName().getValue())) return bag; + } + + if(this.modifierFilter != null){ + //check MOD + } + + if(this.elementVisitor != null){ + for(JavaElement elements : element.getElements()){ + VisitorBag visited = this.elementVisitor.visit(elements); + bag.merge(visited); + if(!visited.isValidated()) return bag; + } + } + + bag.compute(element); + return bag; + } + +} diff --git a/src/dev/peerat/parser/java/visitor/JavaFunctionVisitor.java b/src/dev/peerat/parser/java/visitor/JavaFunctionVisitor.java new file mode 100644 index 0000000..65ad029 --- /dev/null +++ b/src/dev/peerat/parser/java/visitor/JavaFunctionVisitor.java @@ -0,0 +1,22 @@ +package dev.peerat.parser.java.visitor; + +import dev.peerat.parser.java.Function; +import dev.peerat.parser.visitor.VisitorBag; + +public class JavaFunctionVisitor extends JavaVisitor{ + + public JavaFunctionVisitor(){ + super(Function.class); + } + + @Override + public VisitorBag visitElement(Function element){ + VisitorBag bag = new VisitorBag(); + + + + bag.compute(element); + return bag; + } + +} diff --git a/src/dev/peerat/parser/java/visitor/JavaVariableVisitor.java b/src/dev/peerat/parser/java/visitor/JavaVariableVisitor.java new file mode 100644 index 0000000..d554360 --- /dev/null +++ b/src/dev/peerat/parser/java/visitor/JavaVariableVisitor.java @@ -0,0 +1,99 @@ +package dev.peerat.parser.java.visitor; + +import java.util.function.Predicate; + +import dev.peerat.parser.java.Variable; +import dev.peerat.parser.visitor.VisitorBag; + +public class JavaVariableVisitor extends JavaVisitor{ + + private Predicate typeFilter; + private Predicate nameFilter; + private Predicate modifierFilter; + + public JavaVariableVisitor(){ + super(Variable.class); + } + + public JavaVariableVisitor typeFilter(Predicate validator){ + this.typeFilter = (this.typeFilter == null) ? validator : this.typeFilter.and(validator); + return this; + } + + public JavaVariableVisitor nameFilter(Predicate validator){ + this.nameFilter = (this.nameFilter == null) ? validator : this.nameFilter.and(validator); + return this; + } + + public JavaVariableVisitor isPublic(){ + Predicate validator = (mod) -> (mod & 0x1) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaVariableVisitor isPrivate(){ + Predicate validator = (mod) -> (mod & 0x2) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaVariableVisitor isProtected(){ + Predicate validator = (mod) -> (mod & 0x4) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaVariableVisitor isStatic(){ + Predicate validator = (mod) -> (mod & 0x8) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaVariableVisitor isFinal(){ + Predicate validator = (mod) -> (mod & 0x10) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaVariableVisitor isVolatile(){ + Predicate validator = (mod) -> (mod & 0x40) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaVariableVisitor isTransient(){ + Predicate validator = (mod) -> (mod & 0x80) != 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + public JavaVariableVisitor isPackageLevel(){ + Predicate validator = (mod) -> (mod & 0x1) == 0 && (mod & 0x2) == 0 && (mod & 0x4) == 0; + this.modifierFilter = (this.modifierFilter == null) ? validator : this.modifierFilter.and(validator); + return this; + } + + @Override + public VisitorBag visitElement(Variable element){ + VisitorBag bag = new VisitorBag(); + + if(typeFilter != null){ + //ellipse ? + if(!typeFilter.test(element.getType().getValue())) return bag; + } + + if(nameFilter != null){ + if(!nameFilter.test(element.getName().getValue())) return bag; + } + + if(this.modifierFilter != null){ + if(!this.modifierFilter.test(element.getModifier())) return bag; + } + + bag.compute(element); + return bag; + } + + + +} diff --git a/src/dev/peerat/parser/java/visitor/JavaVisitor.java b/src/dev/peerat/parser/java/visitor/JavaVisitor.java index 5fcfb8c..572b0a9 100644 --- a/src/dev/peerat/parser/java/visitor/JavaVisitor.java +++ b/src/dev/peerat/parser/java/visitor/JavaVisitor.java @@ -1,32 +1,50 @@ 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; +import dev.peerat.parser.visitor.VisitorBag; public abstract class JavaVisitor extends Visitor{ - public static JavaVisitor base(JavaVisitor visitor){ - return visitor; + public static JavaVisitor base(Visitor visitor){ + return new JavaVisitor(null){ + + @Override + public boolean canVisit(Class type){ +// System.out.println("base can visit ? "+type); + return visitor.canVisit(type); + } + + @Override + public VisitorBag visitElement(T element){ + return visitor.visit(element); + } + }; } public static JavaVisitor allJavaElement(){ - return null; + return new JavaVisitor(JavaElement.class){ + + @Override + public VisitorBag visitElement(JavaElement element){ + VisitorBag bag = new VisitorBag(); + bag.compute(element); + return bag; + } + + }; } - public static JavaVisitor allClassBase(){ - return null; + public static JavaClassBaseVisitor allClassBase(){ + return new JavaClassBaseVisitor(); } - public static JavaVisitor allClass(){ - return null; + public static JavaClassVisitor allClass(){ + return new JavaClassVisitor(); } public static JavaVisitor allInterface(){ @@ -45,12 +63,12 @@ public abstract class JavaVisitor extends Visitor allVariable(){ - return null; + public static JavaVariableVisitor allVariable(){ + return new JavaVariableVisitor(); } - public static JavaVisitor allFunction(){ - return null; + public static JavaFunctionVisitor allFunction(){ + return new JavaFunctionVisitor(); } public static JavaVisitor allValue(){ @@ -71,11 +89,14 @@ public abstract class JavaVisitor extends Visitor type){ +// System.out.println("can "+type+" visit "+this.type+" ? from "+Thread.currentThread().getStackTrace()[2]); return this.type.isAssignableFrom(type); } - public VisitorBag visit(Object element){ + @Override + public VisitorBag visit(JavaElement element){ return visitElement((T) element); } diff --git a/src/dev/peerat/parser/java/visitor/internal/chain/JavaVisitorChain.java b/src/dev/peerat/parser/java/visitor/internal/chain/JavaVisitorChain.java deleted file mode 100644 index 7d7aff3..0000000 --- a/src/dev/peerat/parser/java/visitor/internal/chain/JavaVisitorChain.java +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index 4bf569a..0000000 --- a/src/dev/peerat/parser/java/visitor/internal/chain/JavaVisitorChainPredicate.java +++ /dev/null @@ -1,25 +0,0 @@ -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 index 726e6fc..d9ecd52 100644 --- a/src/dev/peerat/parser/visitor/Example.java +++ b/src/dev/peerat/parser/visitor/Example.java @@ -1,37 +1,42 @@ package dev.peerat.parser.visitor; -import static dev.peerat.parser.java.visitor.JavaVisitor.allAnnotation; +import static dev.peerat.parser.java.visitor.JavaVisitor.base; +import static dev.peerat.parser.java.visitor.JavaVisitor.allClass; +import static dev.peerat.parser.java.visitor.JavaVisitor.allJavaElement; +import static dev.peerat.parser.visitor.Operator.collect; -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 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); + parser.parse("package dev.peerat.test; public class Example{ public void helloTest(){ System.out.println(\"hello\"); } }", container); -// JavaVisitor visitor = JavaVisitor.base( -// key( -// allJavaElement() -// ), -// value( -// allAnnotation().filterName((name) -> name.equals("Test")) -// ) -// ); - JavaVisitor visitor = JavaVisitor.base( - allAnnotation().filterName((name) -> name.equals("Test")) - ); + VisitorBag result = container.visit( + allClass() + .isPublic() + .elements( + collect(allJavaElement()) + ) + ); + + System.out.println("result: "+result.toList()); + + result = container.visit(base(collect( + allClass() + .isPublic() + .elements( + allJavaElement() + ) + ))); + + System.out.println("result: "+result.toList()); - 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 index 6ede38e..7f48f00 100644 --- a/src/dev/peerat/parser/visitor/Operator.java +++ b/src/dev/peerat/parser/visitor/Operator.java @@ -1,13 +1,48 @@ package dev.peerat.parser.visitor; +import java.util.function.Predicate; + public class Operator{ - public static > T and(Visitor... visitors){ - return null; + //Success ? Fail ? + public static > T and(T... visitors){ + return (T) new Visitor(){ + @Override + public VisitorBag visit(E element){ + VisitorBag bag = new VisitorBag(); + for(T visitor : visitors){ + VisitorBag vbag = visitor.visit(element); + bag.merge(vbag); + if(!vbag.isValidated()) return new VisitorBag(); + } + return bag; + } + + @Override + public boolean canVisit(Class type){ + return true; + } + }; } - public static > T or(Visitor... visitors){ - return null; + //Quid de si c'est empty ? + public static > T or(T... visitors){ + return (T) new Visitor(){ + @Override + public VisitorBag visit(E element){ + VisitorBag bag = new VisitorBag(); + for(T visitor : visitors){ + VisitorBag vbag = visitor.visit(element); + bag.merge(vbag); + } + return bag; + } + + @Override + public boolean canVisit(Class type) { + return true; + } + }; } public static > T key(Visitor visitor){ @@ -17,5 +52,35 @@ public class Operator{ public static > T value(Visitor visitor){ return null; } + + public static Visitor collect(Visitor visitor){ + return new Visitor(){ + @Override + public VisitorBag visit(E element){ + return visitor.visit(element).collect(); + } + + @Override + public boolean canVisit(Class type){ +// System.out.println("collect can visit ? "+type); + return visitor.canVisit(type); + } + }; + } + + public static > T count(T visitor, Predicate validator){ + return (T) new Visitor(){ + @Override + public VisitorBag visit(E element){ + VisitorBag visited = visitor.visit(element); + return validator.test(visited.toList().size()) ? visited : new VisitorBag(); + } + + @Override + public boolean canVisit(Class type) { + return true; + } + }; + } } diff --git a/src/dev/peerat/parser/visitor/Visitor.java b/src/dev/peerat/parser/visitor/Visitor.java index 48dc41e..3347955 100644 --- a/src/dev/peerat/parser/visitor/Visitor.java +++ b/src/dev/peerat/parser/visitor/Visitor.java @@ -2,4 +2,8 @@ package dev.peerat.parser.visitor; public abstract class Visitor{ + public abstract boolean canVisit(Class type); //change "Class type" into "Object element" ? + + public abstract VisitorBag visit(T element); + } diff --git a/src/dev/peerat/parser/visitor/VisitorBag.java b/src/dev/peerat/parser/visitor/VisitorBag.java new file mode 100644 index 0000000..6b0cd1e --- /dev/null +++ b/src/dev/peerat/parser/visitor/VisitorBag.java @@ -0,0 +1,49 @@ +package dev.peerat.parser.visitor; + +import java.util.ArrayList; +import java.util.List; + +//only one pass in parameter or visit ? +public class VisitorBag{ + + private List collect; + private List list; + + public VisitorBag(){ + this.collect = new ArrayList<>(); + this.list = new ArrayList<>(); + } + + public void compute(Object element){ +// System.out.println("compute("+collect+", "+list+") "+element+" <- "+Thread.currentThread().getStackTrace()[2]); + this.list.add(element); + } + + public void merge(VisitorBag bag){ +// System.out.println("merge("+collect+", "+list+") <- "+Thread.currentThread().getStackTrace()[2]); + this.collect.addAll(bag.collect); +// System.out.println("merged("+collect+", "+list+") <- "+Thread.currentThread().getStackTrace()[2]); + } + + public boolean isValidated(){ + return !this.list.isEmpty(); + } + + public List computeList(){ + return this.list; + } + + VisitorBag collect(){ + this.collect.addAll(this.list); +// System.out.println("collected("+collect+", "+list+") <- "+Thread.currentThread().getStackTrace()[2]); + return this; + } + + public T toElement(){ + return (T) this.collect.get(0); + } + + public List toList(){ + return (List) this.collect; + } +} \ No newline at end of file diff --git a/src/dev/peerat/parser/visitor/bag/ListVisitorBag.java b/src/dev/peerat/parser/visitor/bag/ListVisitorBag.java deleted file mode 100644 index 5c78dd4..0000000 --- a/src/dev/peerat/parser/visitor/bag/ListVisitorBag.java +++ /dev/null @@ -1,29 +0,0 @@ -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 deleted file mode 100644 index 19731c0..0000000 --- a/src/dev/peerat/parser/visitor/bag/VisitorBag.java +++ /dev/null @@ -1,12 +0,0 @@ -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