From e405d8e380441e9807640f4cfd59b6e50c88985d Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Tue, 17 Oct 2023 04:01:53 +0200 Subject: [PATCH] [AST] operation search --- .../peeratcode/parser/java/Operation.java | 11 ++--------- .../parser/java/operation/AssignOperation.java | 8 ++++++++ .../parser/java/operation/BreakOperation.java | 8 ++++++++ .../parser/java/operation/ContinueOperation.java | 8 ++++++++ .../parser/java/operation/ForOperation.java | 16 ++++++++++++++++ .../parser/java/operation/ForeachOperation.java | 8 ++++++++ .../parser/java/operation/IfOperation.java | 8 ++++++++ .../java/operation/MethodCallOperation.java | 12 ++++++++++++ .../parser/java/operation/OperationBag.java | 9 +++++++++ .../parser/java/operation/ReturnOperation.java | 8 ++++++++ .../parser/java/operation/SwitchOperation.java | 8 ++++++++ .../java/operation/SynchronizedOperation.java | 8 ++++++++ .../parser/java/operation/ThrowOperation.java | 8 ++++++++ .../parser/java/operation/TryOperation.java | 10 +++++++++- .../parser/java/operation/WhileOperation.java | 8 ++++++++ 15 files changed, 128 insertions(+), 10 deletions(-) diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/Operation.java b/src/be/jeffcheasey88/peeratcode/parser/java/Operation.java index 6b41135..6a9ca53 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/Operation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/Operation.java @@ -1,10 +1,8 @@ package be.jeffcheasey88.peeratcode.parser.java; -import java.util.function.Function; - -public class Operation extends JavaElement{ +public abstract class Operation extends JavaElement{ -public static interface OperationContainer{ + public static interface OperationContainer{ void addOperation(Operation operation); @@ -12,9 +10,4 @@ public static interface OperationContainer{ public Operation(){} - @Override - public E find(Function finder) { - return null; - } - } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/AssignOperation.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/AssignOperation.java index aabc3fb..f1cba58 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/AssignOperation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/AssignOperation.java @@ -1,5 +1,8 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; +import java.util.function.Function; + +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Operation; import be.jeffcheasey88.peeratcode.parser.java.Value; @@ -21,4 +24,9 @@ public class AssignOperation extends Operation{ return right; } + @Override + public E find(Function finder){ + return finder.apply(left) ? (E)left : finder.apply(right) ? (E)right : null; + } + } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/BreakOperation.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/BreakOperation.java index 62d4005..925912b 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/BreakOperation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/BreakOperation.java @@ -1,9 +1,17 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; +import java.util.function.Function; + +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Operation; public class BreakOperation extends Operation{ public BreakOperation(){} + @Override + public E find(Function finder){ + return null; + } + } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/ContinueOperation.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/ContinueOperation.java index 8d6a89b..8768590 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/ContinueOperation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/ContinueOperation.java @@ -1,7 +1,15 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; +import java.util.function.Function; + +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Operation; public class ContinueOperation extends Operation{ + @Override + public E find(Function finder){ + return null; + } + } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/ForOperation.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/ForOperation.java index bc57d21..5b08172 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/ForOperation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/ForOperation.java @@ -1,7 +1,9 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; import java.util.List; +import java.util.function.Function; +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Value; import be.jeffcheasey88.peeratcode.parser.java.Variable; @@ -40,4 +42,18 @@ public class ForOperation extends OperationBag{ return this.updates; } + @Override + public E find(Function finder){ + for(Variable variable : this.init_vars){ + if(finder.apply(variable)) return (E)variable; + } + for(Value value : this.init_values){ + if(finder.apply(value)) return (E)value; + } + if(finder.apply(condition)) return (E)condition; + for(Value value : this.updates){ + if(finder.apply(value)) return (E)value; + } + return super.find(finder); + } } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/ForeachOperation.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/ForeachOperation.java index 26a42c9..cb6c353 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/ForeachOperation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/ForeachOperation.java @@ -1,6 +1,9 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; +import java.util.function.Function; + import be.jeffcheasey88.peeratcode.parser.Token; +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Value; public class ForeachOperation extends OperationBag{ @@ -29,4 +32,9 @@ public class ForeachOperation extends OperationBag{ return this.iterator; } + @Override + public E find(Function finder){ + if(finder.apply(iterator)) return (E)iterator; + return super.find(finder); + } } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/IfOperation.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/IfOperation.java index 7c0ffd1..feffa32 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/IfOperation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/IfOperation.java @@ -1,5 +1,8 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; +import java.util.function.Function; + +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Value; public class IfOperation extends OperationBag{ @@ -14,4 +17,9 @@ public class IfOperation extends OperationBag{ return this.condition; } + @Override + public E find(Function finder){ + if(finder.apply(condition)) return (E)condition; + return super.find(finder); + } } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/MethodCallOperation.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/MethodCallOperation.java index 126a2d2..158c98c 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/MethodCallOperation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/MethodCallOperation.java @@ -1,8 +1,10 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; import java.util.List; +import java.util.function.Function; import be.jeffcheasey88.peeratcode.parser.Token; +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Operation; import be.jeffcheasey88.peeratcode.parser.java.Value; @@ -36,4 +38,14 @@ public class MethodCallOperation extends Operation{ return this.parameters; } + @Override + public E find(Function finder) { + if(finder.apply(start)) return (E)start; + if(finder.apply(previous)) return (E) previous; + for(Value param : this.parameters){ + if(finder.apply(param)) return (E)param; + } + return null; + } + } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/OperationBag.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/OperationBag.java index b9e5c15..f6eb7a1 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/OperationBag.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/OperationBag.java @@ -2,6 +2,7 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; import java.util.ArrayList; import java.util.List; +import java.util.function.Function; import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Operation; @@ -27,4 +28,12 @@ public class OperationBag extends Operation implements VariableContainer, Operat this.elements.add(operation); } + @Override + public E find(Function finder){ + for(JavaElement element : this.elements){ + if(finder.apply(element)) return (E)element; + } + return null; + } + } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/ReturnOperation.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/ReturnOperation.java index be59091..76aac7f 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/ReturnOperation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/ReturnOperation.java @@ -1,5 +1,8 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; +import java.util.function.Function; + +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Operation; import be.jeffcheasey88.peeratcode.parser.java.Value; @@ -15,4 +18,9 @@ public class ReturnOperation extends Operation{ return this.value; } + @Override + public E find(Function finder) { + return finder.apply(value) ? (E)value : null; + } + } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/SwitchOperation.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/SwitchOperation.java index 54ae16a..7a7422e 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/SwitchOperation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/SwitchOperation.java @@ -1,7 +1,15 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; +import java.util.function.Function; + +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Operation; public class SwitchOperation extends Operation{ + @Override + public E find(Function finder) { + return null; + } + } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/SynchronizedOperation.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/SynchronizedOperation.java index 678790d..9bbb1ca 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/SynchronizedOperation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/SynchronizedOperation.java @@ -1,5 +1,8 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; +import java.util.function.Function; + +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Value; public class SynchronizedOperation extends OperationBag{ @@ -15,4 +18,9 @@ public class SynchronizedOperation extends OperationBag{ return this.value; } + @Override + public E find(Function finder){ + if(finder.apply(value)) return (E)value; + return super.find(finder); + } } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/ThrowOperation.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/ThrowOperation.java index 6c1479d..933ae1c 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/ThrowOperation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/ThrowOperation.java @@ -1,5 +1,8 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; +import java.util.function.Function; + +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Operation; import be.jeffcheasey88.peeratcode.parser.java.Value; @@ -15,4 +18,9 @@ public class ThrowOperation extends Operation{ return this.value; } + @Override + public E find(Function finder) { + return finder.apply(value) ? (E)value : null; + } + } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/TryOperation.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/TryOperation.java index fdc047e..6f37f0e 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/TryOperation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/TryOperation.java @@ -1,5 +1,8 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; +import java.util.function.Function; + +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Variable; public class TryOperation extends OperationBag{ @@ -18,5 +21,10 @@ public class TryOperation extends OperationBag{ public Variable getResource(){ return this.resource; } - + + @Override + public E find(Function finder){ + if(finder.apply(resource)) return (E)resource; + return super.find(finder); + } } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/operation/WhileOperation.java b/src/be/jeffcheasey88/peeratcode/parser/java/operation/WhileOperation.java index 876bffc..736b19a 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/operation/WhileOperation.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/operation/WhileOperation.java @@ -1,5 +1,8 @@ package be.jeffcheasey88.peeratcode.parser.java.operation; +import java.util.function.Function; + +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.Value; public class WhileOperation extends OperationBag{ @@ -14,4 +17,9 @@ public class WhileOperation extends OperationBag{ return this.condition; } + @Override + public E find(Function finder){ + if(finder.apply(condition)) return (E)condition; + return super.find(finder); + } }