From fb96c287cf3fd5c7c283b8d07165e8ba63a22ef4 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 Date: Sat, 10 May 2025 12:46:55 +0200 Subject: [PATCH] JavaElement -> Abstract to Interface + 'Function' to 'Predicate' + Visitor Concat in JavaArrayAccessValueVisitor Operator Count little refractor --- src/dev/peerat/parser/java/Annotation.java | 30 ++++---- .../peerat/parser/java/AnnotationClass.java | 18 ++--- src/dev/peerat/parser/java/Class.java | 18 ++--- src/dev/peerat/parser/java/Enumeration.java | 16 +++-- src/dev/peerat/parser/java/Function.java | 22 +++--- src/dev/peerat/parser/java/Import.java | 12 ++-- src/dev/peerat/parser/java/Interface.java | 16 +++-- src/dev/peerat/parser/java/JavaElement.java | 12 ++-- src/dev/peerat/parser/java/JavaFile.java | 24 ++++--- src/dev/peerat/parser/java/JavaProject.java | 11 +-- src/dev/peerat/parser/java/Variable.java | 16 +++-- .../java/builder/JavaOperationBuilder.java | 12 ++-- .../parser/java/builder/JavaValueBuilder.java | 12 ++-- .../java/operation/AssignOperation.java | 21 +++--- .../parser/java/operation/BreakOperation.java | 10 ++- .../java/operation/ContinueOperation.java | 12 +++- .../parser/java/operation/ForOperation.java | 34 ++++----- .../java/operation/ForeachOperation.java | 15 ++-- .../parser/java/operation/IfOperation.java | 22 +++--- .../parser/java/operation/Operation.java | 2 +- .../parser/java/operation/OperationBag.java | 17 +++-- .../java/operation/ReturnOperation.java | 16 +++-- .../java/operation/SwitchOperation.java | 12 +++- .../java/operation/SynchronizedOperation.java | 22 +++--- .../parser/java/operation/ThrowOperation.java | 18 ++--- .../parser/java/operation/TryOperation.java | 24 ++++--- .../parser/java/operation/WhileOperation.java | 18 ++--- .../parser/java/value/ArrayAccessValue.java | 12 ++-- .../peerat/parser/java/value/ArrayValue.java | 10 ++- src/dev/peerat/parser/java/value/BiValue.java | 10 ++- .../peerat/parser/java/value/CastValue.java | 10 ++- .../parser/java/value/InstanceValue.java | 67 +++++++++-------- .../peerat/parser/java/value/LambdaValue.java | 10 ++- .../parser/java/value/MethodCallValue.java | 10 ++- .../parser/java/value/ModifierValue.java | 8 ++- .../peerat/parser/java/value/StaticValue.java | 11 +-- .../peerat/parser/java/value/TriValue.java | 10 ++- src/dev/peerat/parser/java/value/Value.java | 2 +- .../java/value/VariableAccessValue.java | 12 ++-- .../parser/java/visitor/JavaFileVisitor.java | 71 +++++++++++++++++++ .../java/visitor/JavaVariableVisitor.java | 51 +------------ .../parser/java/visitor/JavaVisitor.java | 8 +++ .../value/JavaArrayAccessValueVisitor.java | 5 +- src/dev/peerat/parser/state/StateTree.java | 12 ++-- src/dev/peerat/parser/visitor/Example.java | 31 +++++--- src/dev/peerat/parser/visitor/Operator.java | 17 +++-- src/dev/peerat/parser/visitor/Visitor.java | 13 ++++ src/dev/peerat/parser/visitor/VisitorBag.java | 5 ++ 48 files changed, 511 insertions(+), 336 deletions(-) create mode 100644 src/dev/peerat/parser/java/visitor/JavaFileVisitor.java diff --git a/src/dev/peerat/parser/java/Annotation.java b/src/dev/peerat/parser/java/Annotation.java index 2a0fe4a..a745c40 100644 --- a/src/dev/peerat/parser/java/Annotation.java +++ b/src/dev/peerat/parser/java/Annotation.java @@ -1,9 +1,11 @@ package dev.peerat.parser.java; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.function.BiFunction; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.value.Value; @@ -11,7 +13,7 @@ import dev.peerat.parser.java.visitor.JavaVisitor; import dev.peerat.parser.visitor.Visitor; import dev.peerat.parser.visitor.VisitorBag; -public class Annotation extends JavaElement{ +public class Annotation implements JavaElement{ public static interface AnnotableBuffer{ @@ -21,7 +23,7 @@ public class Annotation extends JavaElement{ } - public static abstract class Annotable extends JavaElement{ + public static abstract class Annotable implements JavaElement{ private List annotations; @@ -52,21 +54,21 @@ public class Annotation extends JavaElement{ } @Override - public E find(Function finder){ + public E find(Predicate finder) { if(annotations != null){ for(Annotation annotation : this.annotations){ - if(finder.apply(annotation)) return (E) annotation; + if(finder.test(annotation)) return (E) annotation; } } return null; } @Override - public void findAll(Function finder, List list){ + public void findAll(Predicate finder, Collection collector) { if(annotations != null){ for(Annotation annotation : this.annotations){ - if(finder.apply(annotation)) list.add((E) annotation); - annotation.findAll(finder, list); + if(finder.test(annotation)) collector.add((E) annotation); + annotation.findAll(finder, collector); } } } @@ -93,25 +95,25 @@ public class Annotation extends JavaElement{ } @Override - public E find(Function finder){ + public E find(Predicate finder) { if(this.values != null){ for(Value value : this.values.values()){ - if(finder.apply(value)) return (E)value; + if(finder.test(value)) return (E)value; } } return null; } - + @Override - public void findAll(Function finder, List list){ + public void findAll(Predicate finder, Collection collector) { if(this.values != null){ for(Value value : this.values.values()){ - if(finder.apply(value)) list.add((E)value); - value.findAll(finder, list); + if(finder.test(value)) collector.add((E)value); + value.findAll(finder, collector); } } } - + @Override public VisitorBag visit(Visitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); diff --git a/src/dev/peerat/parser/java/AnnotationClass.java b/src/dev/peerat/parser/java/AnnotationClass.java index f80d72d..7abaf7c 100644 --- a/src/dev/peerat/parser/java/AnnotationClass.java +++ b/src/dev/peerat/parser/java/AnnotationClass.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.visitor.JavaVisitor; @@ -41,27 +43,27 @@ public class AnnotationClass extends ClassBase{ public List getElements(){ return this.elements; } - + @Override - public E find(java.util.function.Function finder){ + public E find(Predicate finder) { E annotation = super.find(finder); if(annotation != null) return annotation; if(elements != null){ for(JavaElement element : this.elements){ - if(finder.apply(element)) return (E) element; + if(finder.test(element)) return (E) element; } } return null; } - + @Override - public void findAll(java.util.function.Function finder, List list){ - super.findAll(finder, list); + public void findAll(Predicate finder, Collection collector) { + super.findAll(finder, collector); if(elements != null){ for(JavaElement element : this.elements){ - if(finder.apply(element)) list.add((E) element); - element.findAll(finder, list); + if(finder.test(element)) collector.add((E) element); + element.findAll(finder, collector); } } } diff --git a/src/dev/peerat/parser/java/Class.java b/src/dev/peerat/parser/java/Class.java index 9dd64d1..1a2b395 100644 --- a/src/dev/peerat/parser/java/Class.java +++ b/src/dev/peerat/parser/java/Class.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.visitor.Visitor; @@ -51,27 +53,27 @@ public class Class extends ClassBase{ public List getElements(){ return this.elements; } - + @Override - public E find(java.util.function.Function finder){ + public E find(Predicate finder) { E annotation = super.find(finder); if(annotation != null) return annotation; if(elements != null){ for(JavaElement element : this.elements){ - if(finder.apply(element)) return (E) element; + if(finder.test(element)) return (E) element; } } return null; } - + @Override - public void findAll(java.util.function.Function finder, List list){ - super.findAll(finder, list); + public void findAll(Predicate finder, Collection collector) { + super.findAll(finder, collector); if(elements != null){ for(JavaElement element : this.elements){ - if(finder.apply(element)) list.add((E) element); - element.findAll(finder, list); + if(finder.test(element)) collector.add((E) element); + element.findAll(finder, collector); } } } diff --git a/src/dev/peerat/parser/java/Enumeration.java b/src/dev/peerat/parser/java/Enumeration.java index 3f3f738..ee339d3 100644 --- a/src/dev/peerat/parser/java/Enumeration.java +++ b/src/dev/peerat/parser/java/Enumeration.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.visitor.JavaVisitor; @@ -46,27 +48,27 @@ public class Enumeration extends ClassBase{ public List getElements(){ return this.elements; } - + @Override - public E find(java.util.function.Function finder){ + public E find(Predicate finder) { E annotation = super.find(finder); if(annotation != null) return annotation; if(elements != null){ for(JavaElement element : this.elements){ - if(finder.apply(element)) return (E) element; + if(finder.test(element)) return (E) element; } } return null; } @Override - public void findAll(java.util.function.Function finder, List list){ - super.findAll(finder, list); + public void findAll(Predicate finder, Collection collector) { + super.findAll(finder, collector); if(elements != null){ for(JavaElement element : this.elements){ - if(finder.apply(element)) list.add((E) element); - element.findAll(finder, list); + if(finder.test(element)) collector.add((E) element); + element.findAll(finder, collector); } } } diff --git a/src/dev/peerat/parser/java/Function.java b/src/dev/peerat/parser/java/Function.java index fe75af7..c643a54 100644 --- a/src/dev/peerat/parser/java/Function.java +++ b/src/dev/peerat/parser/java/Function.java @@ -2,7 +2,9 @@ package dev.peerat.parser.java; import java.lang.reflect.Modifier; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.TokenType; @@ -100,36 +102,36 @@ public class Function extends Annotable implements VariableContainer, OperationC } @Override - public E find(java.util.function.Function finder){ + public E find(Predicate finder) { E annotation = super.find(finder); if(annotation != null) return annotation; if(parameters != null){ for(Variable param : this.parameters){ - if(finder.apply(param)) return (E) param; + if(finder.test(param)) return (E) param; } } if(elements != null){ for(JavaElement content : this.elements){ - if(finder.apply(content)) return (E) content; + if(finder.test(content)) return (E) content; } } return null; } - + @Override - public void findAll(java.util.function.Function finder, List list){ - super.findAll(finder, list); + public void findAll(Predicate finder, Collection collector) { + super.findAll(finder, collector); if(parameters != null){ for(Variable param : this.parameters){ - if(finder.apply(param)) list.add((E) param); - param.findAll(finder, list); + if(finder.test(param)) collector.add((E) param); + param.findAll(finder, collector); } } if(elements != null){ for(JavaElement content : this.elements){ - if(finder.apply(content)) list.add((E) content); - content.findAll(finder, list); + if(finder.test(content)) collector.add((E) content); + content.findAll(finder, collector); } } } diff --git a/src/dev/peerat/parser/java/Import.java b/src/dev/peerat/parser/java/Import.java index f61ada1..d643971 100644 --- a/src/dev/peerat/parser/java/Import.java +++ b/src/dev/peerat/parser/java/Import.java @@ -1,14 +1,16 @@ package dev.peerat.parser.java; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.visitor.JavaVisitor; import dev.peerat.parser.visitor.Visitor; import dev.peerat.parser.visitor.VisitorBag; -public class Import extends JavaElement{ +public class Import implements JavaElement{ private boolean isStatic; private Token value; @@ -27,15 +29,15 @@ public class Import extends JavaElement{ } @Override - public E find(Function finder) { + public E find(Predicate finder) { return null; } - + @Override - public void findAll(Function finder, List list) { + public void findAll(Predicate finder, Collection collector) { } - + @Override public VisitorBag visit(Visitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); diff --git a/src/dev/peerat/parser/java/Interface.java b/src/dev/peerat/parser/java/Interface.java index 0672323..c5a31c5 100644 --- a/src/dev/peerat/parser/java/Interface.java +++ b/src/dev/peerat/parser/java/Interface.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.visitor.JavaVisitor; @@ -46,27 +48,27 @@ public class Interface extends ClassBase{ public List getElements(){ return this.elements; } - + @Override - public E find(java.util.function.Function finder){ + public E find(Predicate finder) { E annotation = super.find(finder); if(annotation != null) return annotation; if(elements != null){ for(JavaElement element : this.elements){ - if(finder.apply(element)) return (E) element; + if(finder.test(element)) return (E) element; } } return null; } @Override - public void findAll(java.util.function.Function finder, List list){ - super.findAll(finder, list); + public void findAll(Predicate finder, Collection collector) { + super.findAll(finder, collector); if(elements != null){ for(JavaElement element : this.elements){ - if(finder.apply(element)) list.add((E) element); - element.findAll(finder, list); + if(finder.test(element)) collector.add((E) element); + element.findAll(finder, collector); } } } diff --git a/src/dev/peerat/parser/java/JavaElement.java b/src/dev/peerat/parser/java/JavaElement.java index e56bbb0..e1fe67b 100644 --- a/src/dev/peerat/parser/java/JavaElement.java +++ b/src/dev/peerat/parser/java/JavaElement.java @@ -1,16 +1,16 @@ package dev.peerat.parser.java; -import java.util.List; -import java.util.function.Function; +import java.util.Collection; +import java.util.function.Predicate; import dev.peerat.parser.visitor.Visitor; import dev.peerat.parser.visitor.VisitorBag; -public abstract class JavaElement{ +public interface JavaElement{ - public abstract E find(Function finder); + E find(Predicate finder); - public abstract void findAll(Function finder, List list); + void findAll(Predicate finder, Collection collector); - public abstract VisitorBag visit(Visitor visitor); + VisitorBag visit(Visitor 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 f9eb984..fe5d7fc 100644 --- a/src/dev/peerat/parser/java/JavaFile.java +++ b/src/dev/peerat/parser/java/JavaFile.java @@ -1,8 +1,10 @@ package dev.peerat.parser.java; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.Annotation.AnnotableBuffer; @@ -10,7 +12,7 @@ import dev.peerat.parser.java.visitor.JavaVisitor; import dev.peerat.parser.visitor.Visitor; import dev.peerat.parser.visitor.VisitorBag; -public class JavaFile extends JavaElement implements ClassContainer, AnnotableBuffer{ +public class JavaFile implements JavaElement, ClassContainer, AnnotableBuffer{ private List annotationBuffer; @@ -67,24 +69,24 @@ public class JavaFile extends JavaElement implements ClassContainer, AnnotableBu } @Override - public E find(Function finder){ - if(finder.apply(mainClazz)) return (E) mainClazz; + public E find(Predicate finder) { + if(finder.test(mainClazz)) return (E) mainClazz; for(ClassBase clazz : subClazz){ - if(finder.apply(clazz)) return (E) clazz; + if(finder.test(clazz)) return (E) clazz; } return null; } - + @Override - public void findAll(Function finder, List list){ - if(finder.apply(mainClazz)) list.add((E) mainClazz); - mainClazz.findAll(finder, list); + public void findAll(Predicate finder, Collection collector) { + if(finder.test(mainClazz)) collector.add((E) mainClazz); + mainClazz.findAll(finder, collector); for(ClassBase clazz : subClazz){ - if(finder.apply(clazz)) list.add((E) clazz); - clazz.findAll(finder, list); + if(finder.test(clazz)) collector.add((E) clazz); + clazz.findAll(finder, collector); } } - + @Override public VisitorBag visit(Visitor visitor){ if(visitor.canVisit(getClass())) return visitor.visit(this); diff --git a/src/dev/peerat/parser/java/JavaProject.java b/src/dev/peerat/parser/java/JavaProject.java index 1b34dfc..169be44 100644 --- a/src/dev/peerat/parser/java/JavaProject.java +++ b/src/dev/peerat/parser/java/JavaProject.java @@ -1,13 +1,14 @@ package dev.peerat.parser.java; import java.util.ArrayList; +import java.util.Collection; import java.util.List; -import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.visitor.Visitor; import dev.peerat.parser.visitor.VisitorBag; -public class JavaProject extends JavaElement{ +public class JavaProject implements JavaElement{ private List files; @@ -22,14 +23,14 @@ public class JavaProject extends JavaElement{ public List getFiles(){ return this.files; } - + @Override - public E find(Function finder) { + public E find(Predicate finder) { return null; } @Override - public void findAll(Function finder, List list) { + public void findAll(Predicate finder, Collection collector) { } diff --git a/src/dev/peerat/parser/java/Variable.java b/src/dev/peerat/parser/java/Variable.java index 71b94dc..187519f 100644 --- a/src/dev/peerat/parser/java/Variable.java +++ b/src/dev/peerat/parser/java/Variable.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.Annotation.Annotable; @@ -64,21 +66,21 @@ public class Variable extends Annotable{ public Value getValue(){ return this.value; } - + @Override - public E find(Function finder){ + public E find(Predicate finder) { E annotation = super.find(finder); if(annotation != null) return annotation; - return value != null ? finder.apply(value) ? (E)value : null : null; + return value != null ? finder.test(value) ? (E)value : null : null; } @Override - public void findAll(Function finder, List list){ - super.findAll(finder, list); + public void findAll(Predicate finder, Collection collector) { + super.findAll(finder, collector); if(value != null){ - if(finder.apply(value)) list.add((E)value); - value.findAll(finder, list); + if(finder.test(value)) collector.add((E)value); + value.findAll(finder, collector); } } diff --git a/src/dev/peerat/parser/java/builder/JavaOperationBuilder.java b/src/dev/peerat/parser/java/builder/JavaOperationBuilder.java index 27cc2f9..1b9c2ad 100644 --- a/src/dev/peerat/parser/java/builder/JavaOperationBuilder.java +++ b/src/dev/peerat/parser/java/builder/JavaOperationBuilder.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.builder; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.Parser; import dev.peerat.parser.java.JavaElement; @@ -28,7 +30,7 @@ public class JavaOperationBuilder extends JavaBuilder{ return this.operation; } - class Container extends JavaElement implements OperationContainer{ + class Container implements JavaElement, OperationContainer{ @Override public void addOperation(Operation operation){ @@ -36,12 +38,14 @@ public class JavaOperationBuilder extends JavaBuilder{ } @Override - public E find(Function finder) { + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } - + @Override - public void findAll(Function finder, List list) { + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub } diff --git a/src/dev/peerat/parser/java/builder/JavaValueBuilder.java b/src/dev/peerat/parser/java/builder/JavaValueBuilder.java index 82ac09f..4fc3711 100644 --- a/src/dev/peerat/parser/java/builder/JavaValueBuilder.java +++ b/src/dev/peerat/parser/java/builder/JavaValueBuilder.java @@ -1,8 +1,10 @@ package dev.peerat.parser.java.builder; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.Parser; import dev.peerat.parser.Token; @@ -121,7 +123,7 @@ public class JavaValueBuilder extends JavaBuilder{ return this.value; } - class Container extends JavaElement implements ValueContainer{ + class Container implements JavaElement, ValueContainer{ @Override public void addValue(Value value) { @@ -129,14 +131,12 @@ public class JavaValueBuilder extends JavaBuilder{ } @Override - public E find(Function finder) { + public E find(Predicate finder) { return null; } - + @Override - public void findAll(Function finder, List list) { - - } + public void findAll(Predicate finder, Collection collector) {} @Override public VisitorBag visit(Visitor visitor) { diff --git a/src/dev/peerat/parser/java/operation/AssignOperation.java b/src/dev/peerat/parser/java/operation/AssignOperation.java index 19506cf..0a86d37 100644 --- a/src/dev/peerat/parser/java/operation/AssignOperation.java +++ b/src/dev/peerat/parser/java/operation/AssignOperation.java @@ -1,11 +1,10 @@ package dev.peerat.parser.java.operation; -import java.util.List; -import java.util.function.Function; +import java.util.Collection; +import java.util.function.Predicate; 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.Visitor; import dev.peerat.parser.visitor.VisitorBag; @@ -28,16 +27,16 @@ public class AssignOperation extends Operation{ } @Override - public E find(Function finder){ - return finder.apply(left) ? (E)left : finder.apply(right) ? (E)right : null; + public E find(Predicate finder) { + return finder.test(left) ? (E)left : finder.test(right) ? (E)right : null; } - + @Override - public void findAll(Function finder, List list){ - if(finder.apply(left)) list.add((E) left); - left.findAll(finder, list); - if(finder.apply(right)) list.add((E) right); - right.findAll(finder, list); + public void findAll(Predicate finder, Collection collector) { + if(finder.test(left)) collector.add((E) left); + left.findAll(finder, collector); + if(finder.test(right)) collector.add((E) right); + right.findAll(finder, collector); } @Override diff --git a/src/dev/peerat/parser/java/operation/BreakOperation.java b/src/dev/peerat/parser/java/operation/BreakOperation.java index 82c889b..19a3a9c 100644 --- a/src/dev/peerat/parser/java/operation/BreakOperation.java +++ b/src/dev/peerat/parser/java/operation/BreakOperation.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.operation; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.visitor.JavaVisitor; @@ -13,12 +15,16 @@ public class BreakOperation extends Operation{ public BreakOperation(){} @Override - public E find(Function finder){ + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } @Override - public void findAll(Function finder, List list){} + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub + + } @Override public VisitorBag visit(Visitor visitor) { diff --git a/src/dev/peerat/parser/java/operation/ContinueOperation.java b/src/dev/peerat/parser/java/operation/ContinueOperation.java index ba526d2..52a19f5 100644 --- a/src/dev/peerat/parser/java/operation/ContinueOperation.java +++ b/src/dev/peerat/parser/java/operation/ContinueOperation.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.operation; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.visitor.JavaVisitor; @@ -11,12 +13,16 @@ import dev.peerat.parser.visitor.VisitorBag; public class ContinueOperation extends Operation{ @Override - public E find(Function finder){ + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } - + @Override - public void findAll(Function finder, List list){} + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub + + } @Override public VisitorBag visit(Visitor visitor) { diff --git a/src/dev/peerat/parser/java/operation/ForOperation.java b/src/dev/peerat/parser/java/operation/ForOperation.java index 9a5b658..03cd057 100644 --- a/src/dev/peerat/parser/java/operation/ForOperation.java +++ b/src/dev/peerat/parser/java/operation/ForOperation.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.operation; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Variable; @@ -44,50 +46,50 @@ public class ForOperation extends OperationBag{ public List getUpdates(){ return this.updates; } - + @Override - public E find(Function finder){ + public E find(Predicate finder) { if(init_vars != null){ for(Variable variable : this.init_vars){ - if(finder.apply(variable)) return (E)variable; + if(finder.test(variable)) return (E)variable; } } if(init_values != null){ for(Value value : this.init_values){ - if(finder.apply(value)) return (E)value; + if(finder.test(value)) return (E)value; } } - if(finder.apply(condition)) return (E)condition; + if(finder.test(condition)) return (E)condition; if(this.updates != null){ for(Value value : this.updates){ - if(finder.apply(value)) return (E)value; + if(finder.test(value)) return (E)value; } } return super.find(finder); } - + @Override - public void findAll(Function finder, List list){ + public void findAll(Predicate finder, Collection collector) { if(init_vars != null){ for(Variable variable : this.init_vars){ - if(finder.apply(variable)) list.add((E)variable); - variable.findAll(finder, list); + if(finder.test(variable)) collector.add((E)variable); + variable.findAll(finder, collector); } } if(init_values != null){ for(Value value : this.init_values){ - if(finder.apply(value)) list.add((E)value); - value.findAll(finder, list); + if(finder.test(value)) collector.add((E)value); + value.findAll(finder, collector); } } - if(finder.apply(condition)) list.add((E)condition); + if(finder.test(condition)) collector.add((E)condition); if(this.updates != null){ for(Value value : this.updates){ - if(finder.apply(value)) list.add((E)value); - value.findAll(finder, list); + if(finder.test(value)) collector.add((E)value); + value.findAll(finder, collector); } } - super.findAll(finder, list); + super.findAll(finder, collector); } @Override diff --git a/src/dev/peerat/parser/java/operation/ForeachOperation.java b/src/dev/peerat/parser/java/operation/ForeachOperation.java index b389e85..0af5ded 100644 --- a/src/dev/peerat/parser/java/operation/ForeachOperation.java +++ b/src/dev/peerat/parser/java/operation/ForeachOperation.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.operation; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.JavaElement; @@ -35,18 +37,17 @@ public class ForeachOperation extends OperationBag{ public Value getIterator(){ return this.iterator; } - + @Override - public E find(Function finder){ - if(finder.apply(iterator)) return (E)iterator; + public E find(Predicate finder) { + // TODO Auto-generated method stub return super.find(finder); } @Override - public void findAll(Function finder, List list){ - if(finder.apply(iterator)) list.add((E)iterator); - iterator.findAll(finder, list); - super.findAll(finder, list); + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub + super.findAll(finder, collector); } @Override diff --git a/src/dev/peerat/parser/java/operation/IfOperation.java b/src/dev/peerat/parser/java/operation/IfOperation.java index 54c2eff..3a74ce5 100644 --- a/src/dev/peerat/parser/java/operation/IfOperation.java +++ b/src/dev/peerat/parser/java/operation/IfOperation.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.operation; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.value.Value; @@ -21,20 +23,20 @@ public class IfOperation extends OperationBag{ public Value getCondition(){ return this.condition; } - - @Override - public E find(Function finder){ - if(finder.apply(condition)) return (E)condition; - return super.find(finder); - } @Override - public void findAll(Function finder, List list){ - if(finder.apply(condition)) list.add((E)condition); - condition.findAll(finder, list); - super.findAll(finder, list); + public E find(Predicate finder) { + if(finder.test(condition)) return (E)condition; + return super.find(finder); } + @Override + public void findAll(Predicate finder, Collection collector) { + if(finder.test(condition)) collector.add((E)condition); + condition.findAll(finder, collector); + super.findAll(finder, collector); + } + @Override public VisitorBag visit(Visitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); diff --git a/src/dev/peerat/parser/java/operation/Operation.java b/src/dev/peerat/parser/java/operation/Operation.java index c4b4193..a9f4301 100644 --- a/src/dev/peerat/parser/java/operation/Operation.java +++ b/src/dev/peerat/parser/java/operation/Operation.java @@ -2,7 +2,7 @@ package dev.peerat.parser.java.operation; import dev.peerat.parser.java.JavaElement; -public abstract class Operation extends JavaElement{ +public abstract class Operation implements JavaElement{ public static interface OperationContainer{ diff --git a/src/dev/peerat/parser/java/operation/OperationBag.java b/src/dev/peerat/parser/java/operation/OperationBag.java index 1e2187f..b0c94fb 100644 --- a/src/dev/peerat/parser/java/operation/OperationBag.java +++ b/src/dev/peerat/parser/java/operation/OperationBag.java @@ -1,8 +1,10 @@ package dev.peerat.parser.java.operation; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Variable; @@ -40,27 +42,28 @@ public abstract class OperationBag extends Operation implements VariableContaine public List getElements(){ return this.elements; } - + @Override - public E find(Function finder){ + public E find(Predicate finder) { if(elements != null){ for(JavaElement element : this.elements){ - if(finder.apply(element)) return (E)element; + if(finder.test(element)) return (E)element; } } return null; } - + @Override - public void findAll(Function finder, List list){ + public void findAll(Predicate finder, Collection collector) { if(elements != null){ for(JavaElement element : this.elements){ - if(finder.apply(element)) list.add((E)element); - element.findAll(finder, list); + if(finder.test(element)) collector.add((E)element); + element.findAll(finder, collector); } } } + @Override public VisitorBag visit(Visitor visitor){ VisitorBag bag = new VisitorBag(); diff --git a/src/dev/peerat/parser/java/operation/ReturnOperation.java b/src/dev/peerat/parser/java/operation/ReturnOperation.java index d1515f8..29cadad 100644 --- a/src/dev/peerat/parser/java/operation/ReturnOperation.java +++ b/src/dev/peerat/parser/java/operation/ReturnOperation.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.operation; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.value.Value; @@ -20,17 +22,17 @@ public class ReturnOperation extends Operation{ public Value getValue(){ return this.value; } - + @Override - public E find(Function finder){ - return value != null ? finder.apply(value) ? (E)value : null : null; + public E find(Predicate finder) { + return value != null ? finder.test(value) ? (E)value : null : null; } - + @Override - public void findAll(Function finder, List list){ + public void findAll(Predicate finder, Collection collector) { if(value != null){ - if(finder.apply(value)) list.add((E) value); - value.findAll(finder, list); + if(finder.test(value)) collector.add((E) value); + value.findAll(finder, collector); } } diff --git a/src/dev/peerat/parser/java/operation/SwitchOperation.java b/src/dev/peerat/parser/java/operation/SwitchOperation.java index 25d5e6f..4d44e61 100644 --- a/src/dev/peerat/parser/java/operation/SwitchOperation.java +++ b/src/dev/peerat/parser/java/operation/SwitchOperation.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.operation; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.visitor.JavaVisitor; @@ -13,12 +15,16 @@ public class SwitchOperation extends Operation{ //+ AND OBJECT FOR CONTAINING EVERY CASE OP @Override - public E find(Function finder) { + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } - + @Override - public void findAll(Function finder, List list){} + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub + + } @Override public VisitorBag visit(Visitor visitor) { diff --git a/src/dev/peerat/parser/java/operation/SynchronizedOperation.java b/src/dev/peerat/parser/java/operation/SynchronizedOperation.java index 78e5583..0d5b57f 100644 --- a/src/dev/peerat/parser/java/operation/SynchronizedOperation.java +++ b/src/dev/peerat/parser/java/operation/SynchronizedOperation.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.operation; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.value.Value; @@ -21,20 +23,20 @@ public class SynchronizedOperation extends OperationBag{ public Value getValue(){ return this.value; } - - @Override - public E find(Function finder){ - if(finder.apply(value)) return (E)value; - return super.find(finder); - } @Override - public void findAll(Function finder, List list){ - if(finder.apply(value)) list.add((E)value); - value.findAll(finder, list); - super.findAll(finder, list); + public E find(Predicate finder) { + if(finder.test(value)) return (E)value; + return super.find(finder); } + @Override + public void findAll(Predicate finder, Collection collector) { + if(finder.test(value)) collector.add((E)value); + value.findAll(finder, collector); + super.findAll(finder, collector); + } + @Override public VisitorBag visit(Visitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); diff --git a/src/dev/peerat/parser/java/operation/ThrowOperation.java b/src/dev/peerat/parser/java/operation/ThrowOperation.java index 84eb7d7..862ee89 100644 --- a/src/dev/peerat/parser/java/operation/ThrowOperation.java +++ b/src/dev/peerat/parser/java/operation/ThrowOperation.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.operation; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.value.Value; @@ -20,16 +22,16 @@ public class ThrowOperation extends Operation{ public Value getValue(){ return this.value; } - - @Override - public E find(Function finder) { - return finder.apply(value) ? (E)value : null; - } @Override - public void findAll(Function finder, List list){ - if(finder.apply(value)) list.add((E) value); - value.findAll(finder, list); + public E find(Predicate finder) { + return finder.test(value) ? (E)value : null; + } + + @Override + public void findAll(Predicate finder, Collection collector) { + if(finder.test(value)) collector.add((E) value); + value.findAll(finder, collector); } @Override diff --git a/src/dev/peerat/parser/java/operation/TryOperation.java b/src/dev/peerat/parser/java/operation/TryOperation.java index 24842bd..cdec481 100644 --- a/src/dev/peerat/parser/java/operation/TryOperation.java +++ b/src/dev/peerat/parser/java/operation/TryOperation.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.operation; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Variable; @@ -25,21 +27,21 @@ public class TryOperation extends OperationBag{ public Variable getResource(){ return this.resource; } - - @Override - public E find(Function finder){ - return resource != null ? finder.apply(resource) ? (E)resource : super.find(finder) : super.find(finder); - } @Override - public void findAll(Function finder, List list){ - if(resource != null){ - if(finder.apply(resource)) list.add((E) resource); - resource.findAll(finder, list); - } - super.findAll(finder, list); + public E find(Predicate finder) { + return resource != null ? finder.test(resource) ? (E)resource : super.find(finder) : super.find(finder); } + @Override + public void findAll(Predicate finder, Collection collector) { + if(resource != null){ + if(finder.test(resource)) collector.add((E) resource); + resource.findAll(finder, collector); + } + super.findAll(finder, collector); + } + @Override public VisitorBag visit(Visitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); diff --git a/src/dev/peerat/parser/java/operation/WhileOperation.java b/src/dev/peerat/parser/java/operation/WhileOperation.java index 6d6ea8a..5e7709c 100644 --- a/src/dev/peerat/parser/java/operation/WhileOperation.java +++ b/src/dev/peerat/parser/java/operation/WhileOperation.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.operation; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.value.Value; @@ -20,20 +22,20 @@ public class WhileOperation extends OperationBag{ public Value getCondition(){ return this.condition; } - + @Override - public E find(Function finder){ - if(finder.apply(condition)) return (E)condition; + public E find(Predicate finder) { + if(finder.test(condition)) return (E)condition; return super.find(finder); } @Override - public void findAll(Function finder, List list){ - if(finder.apply(condition)) list.add((E) condition); - condition.findAll(finder, list); - super.findAll(finder, list); + public void findAll(Predicate finder, Collection collector) { + if(finder.test(condition)) collector.add((E) condition); + condition.findAll(finder, collector); + super.findAll(finder, collector); } - + @Override public VisitorBag visit(Visitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); diff --git a/src/dev/peerat/parser/java/value/ArrayAccessValue.java b/src/dev/peerat/parser/java/value/ArrayAccessValue.java index 88c184a..f89fe53 100644 --- a/src/dev/peerat/parser/java/value/ArrayAccessValue.java +++ b/src/dev/peerat/parser/java/value/ArrayAccessValue.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.value; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.visitor.Visitor; @@ -24,14 +26,16 @@ public class ArrayAccessValue extends Value{ public Value getAccessor(){ return this.access; } - + @Override - public E find(Function finder) { + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } - + @Override - public void findAll(Function finder, List list) { + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub } diff --git a/src/dev/peerat/parser/java/value/ArrayValue.java b/src/dev/peerat/parser/java/value/ArrayValue.java index 298bfff..5235aa8 100644 --- a/src/dev/peerat/parser/java/value/ArrayValue.java +++ b/src/dev/peerat/parser/java/value/ArrayValue.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.value; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.visitor.Visitor; @@ -20,12 +22,14 @@ public class ArrayValue extends Value{ } @Override - public E find(Function finder) { + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } - + @Override - public void findAll(Function finder, List list) { + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub } diff --git a/src/dev/peerat/parser/java/value/BiValue.java b/src/dev/peerat/parser/java/value/BiValue.java index cd7c139..8062948 100644 --- a/src/dev/peerat/parser/java/value/BiValue.java +++ b/src/dev/peerat/parser/java/value/BiValue.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.value; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.visitor.JavaVisitor; @@ -33,12 +35,14 @@ public class BiValue extends Value{ } @Override - public E find(Function finder) { + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } - + @Override - public void findAll(Function finder, List list) { + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub } diff --git a/src/dev/peerat/parser/java/value/CastValue.java b/src/dev/peerat/parser/java/value/CastValue.java index c739d3c..0437720 100644 --- a/src/dev/peerat/parser/java/value/CastValue.java +++ b/src/dev/peerat/parser/java/value/CastValue.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.value; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.JavaElement; @@ -27,12 +29,14 @@ public class CastValue extends Value{ } @Override - public E find(Function finder) { + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } - + @Override - public void findAll(Function finder, List list) { + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub } diff --git a/src/dev/peerat/parser/java/value/InstanceValue.java b/src/dev/peerat/parser/java/value/InstanceValue.java index eb543b3..8601679 100644 --- a/src/dev/peerat/parser/java/value/InstanceValue.java +++ b/src/dev/peerat/parser/java/value/InstanceValue.java @@ -1,84 +1,95 @@ package dev.peerat.parser.java.value; import java.util.ArrayList; +import java.util.Collection; import java.util.List; -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.Annotation.AnnotableBuffer; import dev.peerat.parser.java.Function.FunctionContainer; -import dev.peerat.parser.java.Annotation; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Variable; import dev.peerat.parser.java.Variable.VariableContainer; import dev.peerat.parser.visitor.Visitor; import dev.peerat.parser.visitor.VisitorBag; -public class InstanceValue extends Value implements VariableContainer, FunctionContainer, AnnotableBuffer{ //TODO LIKE A CLASS, CAN CONTAINS CLASS - +public class InstanceValue extends Value implements VariableContainer, FunctionContainer, AnnotableBuffer { // TODO LIKE + // A CLASS, + // CAN + // CONTAINS + // CLASS + private Token token; private List parameters; - + private List elements; private List annotationBuffer; - - public InstanceValue(Token token, List parameters){ + + public InstanceValue(Token token, List parameters) { this.token = token; this.parameters = parameters; this.elements = new ArrayList<>(); } - - public Token getToken(){ + + public Token getToken() { return token; } - - public List getParameters(){ + + public List getParameters() { return this.parameters; } - - public List getElements(){ + + public List getElements() { return this.elements; } - + @Override - public void addFunction(dev.peerat.parser.java.Function function){ + public void addFunction(dev.peerat.parser.java.Function function) { this.elements.add(function); } @Override - public void addVariable(Variable variable){ + public void addVariable(Variable variable) { this.elements.add(variable); } - + @Override - public void addAnnotationBuffer(Annotation annotation){ - if(annotationBuffer == null) annotationBuffer = new ArrayList<>(); + public void addAnnotationBuffer(Annotation annotation) { + if (annotationBuffer == null) + annotationBuffer = new ArrayList<>(); annotationBuffer.add(annotation); } - - public List getAnnotationBuffer(){ + + public List getAnnotationBuffer() { List list = this.annotationBuffer; this.annotationBuffer = null; return list; } @Override - public E find(Function finder) { + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } @Override - public void findAll(Function finder, List list) { - + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub + } @Override public VisitorBag visit(Visitor visitor) { - if(visitor.canVisit(getClass())) return visitor.visit(this); + if (visitor.canVisit(getClass())) + return visitor.visit(this); VisitorBag bag = new VisitorBag(); - - for(Value value : parameters) bag.merge(value.visit(visitor)); - for(JavaElement content : elements) bag.merge(content.visit(visitor)); + + for (Value value : parameters) + bag.merge(value.visit(visitor)); + for (JavaElement content : elements) + bag.merge(content.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 7baf0d3..7b58768 100644 --- a/src/dev/peerat/parser/java/value/LambdaValue.java +++ b/src/dev/peerat/parser/java/value/LambdaValue.java @@ -1,8 +1,10 @@ package dev.peerat.parser.java.value; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.JavaElement; @@ -53,12 +55,14 @@ public class LambdaValue extends Value implements OperationContainer, VariableCo } @Override - public E find(Function finder) { + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } - + @Override - public void findAll(Function finder, List list) { + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub } diff --git a/src/dev/peerat/parser/java/value/MethodCallValue.java b/src/dev/peerat/parser/java/value/MethodCallValue.java index 4645fb5..d42353f 100644 --- a/src/dev/peerat/parser/java/value/MethodCallValue.java +++ b/src/dev/peerat/parser/java/value/MethodCallValue.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.value; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.JavaElement; @@ -39,12 +41,14 @@ public class MethodCallValue extends Value{ } @Override - public E find(Function finder) { + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } - + @Override - public void findAll(Function finder, List list) { + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub } diff --git a/src/dev/peerat/parser/java/value/ModifierValue.java b/src/dev/peerat/parser/java/value/ModifierValue.java index 340f4c5..3677d80 100644 --- a/src/dev/peerat/parser/java/value/ModifierValue.java +++ b/src/dev/peerat/parser/java/value/ModifierValue.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.value; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.JavaElement; @@ -27,12 +29,14 @@ public class ModifierValue extends Value{ } @Override - public E find(Function finder) { + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } @Override - public void findAll(Function finder, List list) { + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub } diff --git a/src/dev/peerat/parser/java/value/StaticValue.java b/src/dev/peerat/parser/java/value/StaticValue.java index a0cff85..750fb08 100644 --- a/src/dev/peerat/parser/java/value/StaticValue.java +++ b/src/dev/peerat/parser/java/value/StaticValue.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.value; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.JavaElement; @@ -21,15 +23,16 @@ public class StaticValue extends Value{ } @Override - public E find(Function finder) { + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } - + @Override - public void findAll(Function finder, List list) { + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub } - @Override public String toString(){ diff --git a/src/dev/peerat/parser/java/value/TriValue.java b/src/dev/peerat/parser/java/value/TriValue.java index c84b6bd..a70e2d1 100644 --- a/src/dev/peerat/parser/java/value/TriValue.java +++ b/src/dev/peerat/parser/java/value/TriValue.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.value; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.visitor.Visitor; @@ -32,12 +34,14 @@ public class TriValue extends Value{ } @Override - public E find(Function finder) { + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } - + @Override - public void findAll(Function finder, List list) { + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub } diff --git a/src/dev/peerat/parser/java/value/Value.java b/src/dev/peerat/parser/java/value/Value.java index db9e097..83f318a 100644 --- a/src/dev/peerat/parser/java/value/Value.java +++ b/src/dev/peerat/parser/java/value/Value.java @@ -2,7 +2,7 @@ package dev.peerat.parser.java.value; import dev.peerat.parser.java.JavaElement; -public abstract class Value extends JavaElement{ +public abstract class Value implements JavaElement{ //Only for TESTS purpose! public static interface ValueContainer{ diff --git a/src/dev/peerat/parser/java/value/VariableAccessValue.java b/src/dev/peerat/parser/java/value/VariableAccessValue.java index 1d1aa53..3aef464 100644 --- a/src/dev/peerat/parser/java/value/VariableAccessValue.java +++ b/src/dev/peerat/parser/java/value/VariableAccessValue.java @@ -1,7 +1,9 @@ package dev.peerat.parser.java.value; +import java.util.Collection; import java.util.List; import java.util.function.Function; +import java.util.function.Predicate; import dev.peerat.parser.Token; import dev.peerat.parser.java.JavaElement; @@ -27,15 +29,17 @@ public class VariableAccessValue extends Value{ } @Override - public E find(Function finder) { + public E find(Predicate finder) { + // TODO Auto-generated method stub return null; } - + @Override - public void findAll(Function finder, List list) { + public void findAll(Predicate finder, Collection collector) { + // TODO Auto-generated method stub } - + @Override public VisitorBag visit(Visitor visitor) { if(visitor.canVisit(getClass())) return visitor.visit(this); diff --git a/src/dev/peerat/parser/java/visitor/JavaFileVisitor.java b/src/dev/peerat/parser/java/visitor/JavaFileVisitor.java new file mode 100644 index 0000000..7af2551 --- /dev/null +++ b/src/dev/peerat/parser/java/visitor/JavaFileVisitor.java @@ -0,0 +1,71 @@ +package dev.peerat.parser.java.visitor; + +import java.util.function.Predicate; + +import dev.peerat.parser.java.JavaElement; +import dev.peerat.parser.java.JavaFile; +import dev.peerat.parser.visitor.Visitor; +import dev.peerat.parser.visitor.VisitorBag; + +public class JavaFileVisitor extends JavaVisitor{ + + private boolean checkPackage; + private boolean checkNoPackage; + private Predicate pack; + private Visitor imports; + private Visitor classes; + + public JavaFileVisitor(boolean propagate){ + super(JavaFile.class, propagate); + } + + public JavaFileVisitor hasPackage(){ + this.checkPackage = true; + this.checkNoPackage = false; + return this; + } + + public JavaFileVisitor hasNoPackage(){ + this.checkPackage = false; + this.checkNoPackage = true; + return this; + } + + public JavaFileVisitor packaged(Predicate predicate){ + this.pack = predicate; + return this; + } + + public JavaFileVisitor imp(Visitor visitor){ + this.imports = visitor; + return this; + } + + public JavaFileVisitor clazz(Visitor visitor){ + this.classes = visitor; + return this; + } + + @Override + public VisitorBag visitElement(JavaFile element){ + VisitorBag bag = new VisitorBag(); + + if(this.checkPackage && element.getPackage() == null) return bag; + else if(this.checkNoPackage && element.getPackage() != null) return bag; + + if(this.pack != null && element.getPackage() != null && !this.pack.test(element.getPackage().getValue())) return bag; + + if(this.imports != null && validates(bag, element.getImports(), this.imports)) return bag; + if(this.classes != null){ + VisitorBag resultMain = this.classes.visit(element.getMainClass()); + if(resultMain.isValidated()) bag.merge(resultMain); + if(!(validates(bag, element.getSubClasses(), this.classes) || resultMain.isValidated())) return bag; + } + + 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 index ba0b916..f13d9e7 100644 --- a/src/dev/peerat/parser/java/visitor/JavaVariableVisitor.java +++ b/src/dev/peerat/parser/java/visitor/JavaVariableVisitor.java @@ -5,11 +5,10 @@ import java.util.function.Predicate; import dev.peerat.parser.java.Variable; import dev.peerat.parser.visitor.VisitorBag; -public class JavaVariableVisitor extends JavaVisitor{ +public class JavaVariableVisitor extends JavaModifiableVisitor{ private Predicate typeFilter; private Predicate nameFilter; - private Predicate modifierFilter; public JavaVariableVisitor(boolean propagate){ super(Variable.class, propagate); @@ -25,54 +24,6 @@ public class JavaVariableVisitor extends JavaVisitor{ 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(); diff --git a/src/dev/peerat/parser/java/visitor/JavaVisitor.java b/src/dev/peerat/parser/java/visitor/JavaVisitor.java index 46e56a5..0f50ee6 100644 --- a/src/dev/peerat/parser/java/visitor/JavaVisitor.java +++ b/src/dev/peerat/parser/java/visitor/JavaVisitor.java @@ -54,6 +54,10 @@ public abstract class JavaVisitor extends Visitor extends Visitor{ } public JavaArrayAccessValueVisitor checkBase(Visitor visitor){ - this.basePredicate = visitor; + this.basePredicate = this.basePredicate == null ? visitor : Operator.and(this.basePredicate, visitor); return this; } public JavaArrayAccessValueVisitor accessor(Visitor visitor){ - this.accessPredicate = visitor; + this.accessPredicate = this.accessPredicate == null ? visitor : Operator.and(this.accessPredicate, visitor); return this; } diff --git a/src/dev/peerat/parser/state/StateTree.java b/src/dev/peerat/parser/state/StateTree.java index 72482b3..de16196 100644 --- a/src/dev/peerat/parser/state/StateTree.java +++ b/src/dev/peerat/parser/state/StateTree.java @@ -24,10 +24,14 @@ public class StateTree{ } public void seed(TokenValidator validator, E container) throws SyntaxMissMatchException{ - BuilderStateTree build = internalSeed(validator, container); - if(build == null) throw new SyntaxMissMatchException(validator); - build.build(validator, container); - if(validator.hasNext()) throw new SyntaxMissMatchException(validator); + int parsed = 0; + while(validator.hasNext()){ + BuilderStateTree build = internalSeed(validator, container); + if(build != null) build.build(validator, container); + int current = validator.getValidatedTokenCount(); + if(parsed == current) throw new SyntaxMissMatchException(validator); + parsed = current; + } } BuilderStateTree internalSeed(TokenValidator validator, E element){ diff --git a/src/dev/peerat/parser/visitor/Example.java b/src/dev/peerat/parser/visitor/Example.java index 24562df..e1d955d 100644 --- a/src/dev/peerat/parser/visitor/Example.java +++ b/src/dev/peerat/parser/visitor/Example.java @@ -3,8 +3,14 @@ package dev.peerat.parser.visitor; import static dev.peerat.parser.java.visitor.JavaVisitor.*; import static dev.peerat.parser.visitor.Operator.*; +import java.util.List; +import java.util.Map; + +import dev.peerat.parser.java.Import; import dev.peerat.parser.java.JavaFile; import dev.peerat.parser.java.JavaParser; +import dev.peerat.parser.java.JavaProject; +import dev.peerat.parser.java.Class; public class Example { @@ -12,18 +18,23 @@ public class Example { JavaParser parser = new JavaParser(); JavaFile container = new JavaFile(); - parser.parse("package dev.peerat.test; public class Example{ private int i = j, j; public void helloTest(){ System.out.println(\"hello\"); } }", container); + parser.parse("package dev.peerat.test; import a; import b; public class C{} public class D{}", + container); - VisitorBag result = container.visit( - key(allClass() - .isPublic() - .elements( - value(allVariable() - ) - ) - )); + JavaProject project = new JavaProject(); + project.addFile(container); - System.out.println("allJavaElement in class : "+result.toList()); + System.out.println(project.visit( + allFile().clazz(key(allClass())).imp(value(allImport())) + ).toList()); + +// Map> map = project.visit( +// and( +// allFile().imp(value(allImport())) +// , +// allFile().clazz(key(allClass())) +// )).toMapValues(); +// System.out.println(map); } } diff --git a/src/dev/peerat/parser/visitor/Operator.java b/src/dev/peerat/parser/visitor/Operator.java index 0ad1ee1..c29c53c 100644 --- a/src/dev/peerat/parser/visitor/Operator.java +++ b/src/dev/peerat/parser/visitor/Operator.java @@ -1,5 +1,6 @@ package dev.peerat.parser.visitor; +import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.function.Predicate; @@ -12,9 +13,11 @@ public class Operator{ return new Visitor(){ @Override public VisitorBag visit(E element){ + System.out.println("and "+Arrays.toString(visitors)+" -> "+element); VisitorBag bag = new VisitorBag(); Set set = new HashSet<>(); for(Visitor visitor : visitors){ + if(!visitor.canVisit(element.getClass())) continue; VisitorBag vbag = visitor.visit(element); if(!vbag.isValidated()) return new VisitorBag(); bag.merge(vbag); @@ -138,24 +141,24 @@ public class Operator{ }; } - public static > T count(T visitor, Predicate validator){ - return (T) new Visitor(){ + public static Visitor count(Visitor visitor, Predicate validator){ + return new Visitor(){ @Override public VisitorBag visit(E element){ VisitorBag visited = visitor.visit(element); - return validator.test(visited.toList().size()) ? visited : new VisitorBag(); + return visited.isValidated() && validator.test(visited.toList().size()) ? visited : new VisitorBag(); } @Override - public boolean canVisit(Class type) { - return true; + public boolean canVisit(Class type){ + return visitor.canVisit(type); } @Override public boolean canPropagate(){ - return true; + return visitor.canPropagate(); } }; } - + } diff --git a/src/dev/peerat/parser/visitor/Visitor.java b/src/dev/peerat/parser/visitor/Visitor.java index d517c6a..6d1524a 100644 --- a/src/dev/peerat/parser/visitor/Visitor.java +++ b/src/dev/peerat/parser/visitor/Visitor.java @@ -1,5 +1,7 @@ package dev.peerat.parser.visitor; +import java.util.Collection; + import dev.peerat.parser.Token; public abstract class Visitor{ @@ -18,4 +20,15 @@ public abstract class Visitor{ public abstract VisitorBag visit(T element); + protected boolean validates(VisitorBag bag, Collection list, Visitor visitor){ + boolean validateOne = false; + for(E element : list){ + VisitorBag result = visitor.visit(element); + if(result.isValidated()){ + validateOne = true; + bag.merge(result); + } + } + return validateOne; + } } diff --git a/src/dev/peerat/parser/visitor/VisitorBag.java b/src/dev/peerat/parser/visitor/VisitorBag.java index f4ca385..6239749 100644 --- a/src/dev/peerat/parser/visitor/VisitorBag.java +++ b/src/dev/peerat/parser/visitor/VisitorBag.java @@ -96,5 +96,10 @@ public class VisitorBag{ public List getValues(){ return (List) this.values; } + + @Override + public String toString(){ + return "[key="+key+", values="+values+"]"; + } } } \ No newline at end of file