From 65d454625d286a5664a104390411bb5331ce66e1 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Thu, 21 Mar 2024 11:20:06 +0100 Subject: [PATCH] Fix bag + Refractor Values --- src/dev/peerat/parser/Bag.java | 6 + src/dev/peerat/parser/Token.java | 4 + src/dev/peerat/parser/TokenValidator.java | 2 +- src/dev/peerat/parser/java/Annotation.java | 1 + src/dev/peerat/parser/java/JavaParser.java | 315 ++++++++++++++++- src/dev/peerat/parser/java/Value.java | 331 ------------------ src/dev/peerat/parser/java/Variable.java | 2 +- .../java/operation/AssignOperation.java | 2 +- .../parser/java/operation/ForOperation.java | 2 +- .../java/operation/ForeachOperation.java | 2 +- .../parser/java/operation/IfOperation.java | 2 +- .../java/operation/MethodCallOperation.java | 2 +- .../java/operation/ReturnOperation.java | 2 +- .../java/operation/SynchronizedOperation.java | 2 +- .../parser/java/operation/ThrowOperation.java | 2 +- .../parser/java/operation/WhileOperation.java | 2 +- .../peerat/parser/java/value/ArrayValue.java | 37 ++ src/dev/peerat/parser/java/value/BiValue.java | 47 +++ .../parser/java/value/InnerElementValue.java | 37 ++ .../parser/java/value/InstanceValue.java | 48 +++ .../peerat/parser/java/value/LambdaValue.java | 64 ++++ .../parser/java/value/MethodCallValue.java | 54 +++ .../parser/java/value/ModifierValue.java | 41 +++ .../peerat/parser/java/value/StaticValue.java | 38 ++ .../peerat/parser/java/value/TriValue.java | 47 +++ src/dev/peerat/parser/java/value/Value.java | 5 + .../peerat/parser/java/AnnotationTests.java | 4 +- .../peerat/parser/java/OperationTests.java | 5 +- test/dev/peerat/parser/java/ValueTests.java | 12 +- .../dev/peerat/parser/java/VariableTests.java | 5 +- .../element/annotation/ClazzAnnotation.java | 7 +- .../operation/AssignOperationTest.java | 9 +- .../java/element/value/ValueInCondition.java | 154 ++++++++ .../element/variable/VariableInClass.java | 13 +- .../element/variable/VariableInMethod.java | 13 +- 35 files changed, 926 insertions(+), 393 deletions(-) delete mode 100644 src/dev/peerat/parser/java/Value.java create mode 100644 src/dev/peerat/parser/java/value/ArrayValue.java create mode 100644 src/dev/peerat/parser/java/value/BiValue.java create mode 100644 src/dev/peerat/parser/java/value/InnerElementValue.java create mode 100644 src/dev/peerat/parser/java/value/InstanceValue.java create mode 100644 src/dev/peerat/parser/java/value/LambdaValue.java create mode 100644 src/dev/peerat/parser/java/value/MethodCallValue.java create mode 100644 src/dev/peerat/parser/java/value/ModifierValue.java create mode 100644 src/dev/peerat/parser/java/value/StaticValue.java create mode 100644 src/dev/peerat/parser/java/value/TriValue.java create mode 100644 src/dev/peerat/parser/java/value/Value.java create mode 100644 test/dev/peerat/parser/java/element/value/ValueInCondition.java diff --git a/src/dev/peerat/parser/Bag.java b/src/dev/peerat/parser/Bag.java index 055705a..31d08c3 100644 --- a/src/dev/peerat/parser/Bag.java +++ b/src/dev/peerat/parser/Bag.java @@ -18,6 +18,12 @@ public class Bag{ path = Thread.currentThread().getStackTrace()[2].toString(); } + public Bag(Bag bag){ + this.map = new HashMap<>(bag.map); + this.value = bag.value; + this.path = bag.path; + } + public E get(){ return (E) this.value; } diff --git a/src/dev/peerat/parser/Token.java b/src/dev/peerat/parser/Token.java index 0b8a260..2f13da5 100644 --- a/src/dev/peerat/parser/Token.java +++ b/src/dev/peerat/parser/Token.java @@ -33,6 +33,10 @@ public class Token{ //line & character start & end ? public Token concat(Token token){ + StackTraceElement[] stack = Thread.currentThread().getStackTrace(); + System.out.println(token.getValue()+":"); + for(int i = 1; i < stack.length; i++) System.out.println(stack[i]); + System.out.println(); return new Token(line, character, value+token.getValue(), TokenType.GROUP); } diff --git a/src/dev/peerat/parser/TokenValidator.java b/src/dev/peerat/parser/TokenValidator.java index f85f7be..5ee09dc 100644 --- a/src/dev/peerat/parser/TokenValidator.java +++ b/src/dev/peerat/parser/TokenValidator.java @@ -49,7 +49,7 @@ public class TokenValidator{ } public TokenValidator branch(){ - TokenValidator branch = new TokenValidator(bag); + TokenValidator branch = new TokenValidator(new Bag(bag)); branch.elements = this.elements; branch.index = Math.max(0, this.validated-1); branch.validated = this.validated; diff --git a/src/dev/peerat/parser/java/Annotation.java b/src/dev/peerat/parser/java/Annotation.java index e69c428..bda3571 100644 --- a/src/dev/peerat/parser/java/Annotation.java +++ b/src/dev/peerat/parser/java/Annotation.java @@ -6,6 +6,7 @@ import java.util.Map.Entry; import java.util.function.Function; import dev.peerat.parser.Token; +import dev.peerat.parser.java.value.Value; public class Annotation extends JavaElement{ diff --git a/src/dev/peerat/parser/java/JavaParser.java b/src/dev/peerat/parser/java/JavaParser.java index 678a41b..3f00278 100644 --- a/src/dev/peerat/parser/java/JavaParser.java +++ b/src/dev/peerat/parser/java/JavaParser.java @@ -18,10 +18,6 @@ import dev.peerat.parser.Tokenizer; import dev.peerat.parser.java.Annotation.AnnotableBuffer; import dev.peerat.parser.java.Function.FunctionContainer; import dev.peerat.parser.java.Operation.OperationContainer; -import dev.peerat.parser.java.Value.BiValue; -import dev.peerat.parser.java.Value.InstanceValue; -import dev.peerat.parser.java.Value.LambdaValue; -import dev.peerat.parser.java.Value.MethodCallValue; import dev.peerat.parser.java.Variable.VariableContainer; import dev.peerat.parser.java.operation.AssignOperation; import dev.peerat.parser.java.operation.BreakOperation; @@ -33,6 +29,12 @@ import dev.peerat.parser.java.operation.ReturnOperation; import dev.peerat.parser.java.operation.SynchronizedOperation; import dev.peerat.parser.java.operation.ThrowOperation; import dev.peerat.parser.java.operation.WhileOperation; +import dev.peerat.parser.java.value.BiValue; +import dev.peerat.parser.java.value.InstanceValue; +import dev.peerat.parser.java.value.LambdaValue; +import dev.peerat.parser.java.value.MethodCallValue; +import dev.peerat.parser.java.value.StaticValue; +import dev.peerat.parser.java.value.Value; import dev.peerat.parser.state.BuilderStateTree; import dev.peerat.parser.state.InitialStateTree; import dev.peerat.parser.state.RedirectStateTree; @@ -302,12 +304,13 @@ public class JavaParser extends Parser { StateTree function_container = new StateTree<>(); function_container.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end((a,b) -> a); + //VALUE BiFunction value_builder = (parent, bag) -> { if(bag.has("right")){ - if(!(bag.get("left") instanceof Value)) bag.set("left", new Value(bag.get("left"))); - if(!(bag.get("right") instanceof Value)) bag.set("right", new Value(bag.get("right"))); + if(!(bag.get("left") instanceof Value)) bag.set("left", new StaticValue(bag.get("left"))); + if(!(bag.get("right") instanceof Value)) bag.set("right", new StaticValue(bag.get("right"))); BiValue result = new BiValue( @@ -326,7 +329,7 @@ public class JavaParser extends Parser { }; //STRING CONCAT - StateTree value = new StateTree<>(); + StateTree value = new StateTree<>(); StateTree value_container = new StateTree<>(); @@ -347,7 +350,7 @@ public class JavaParser extends Parser { (token) -> token.getType().equals(TokenType.STRING) || token.getType().equals(TokenType.CHAR), (bag, token) -> bag.set(token))) .end((parent,bag) -> { - bag.set(new Value(bag.get())); + bag.set(new StaticValue(bag.get())); return null; }); @@ -371,7 +374,7 @@ public class JavaParser extends Parser { else global.set(global.get().concat(local.get())); })); value_name.end((parent,bag) -> { - Value result = new Value(bag.get()); + Value result = new StaticValue(bag.get()); bag.set(result); return null; }); @@ -385,7 +388,7 @@ public class JavaParser extends Parser { (bag, token) -> { Value prev = bag.get("prev"); if(prev == null){ - bag.set("prev", new Value(bag.get())); + bag.set("prev", new StaticValue(bag.get())); }else{ Integer paramters = bag.get("args"); List list = null; @@ -504,18 +507,18 @@ public class JavaParser extends Parser { value_inside.then(value_left); value_left.end((parent, bag) -> { if(bag.get("left") instanceof Value) bag.set(bag.get("left")); - else bag.set(new Value(bag.get("left"))); + else bag.set(new StaticValue(bag.get("left"))); return null; }); StateTree value_equals = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "="))); value_equals.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); value_equals.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "=="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); - StateTree value_minus = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("<"), (bag, token) -> bag.set("action", " value_minus = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("<"), (bag, token) -> bag.set("action", "<"))).loop(); value_minus.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); - value_minus.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "(value_container, value_right)).end(value_builder); - StateTree value_max = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals(">"), (bag, token) -> bag.set("action", ">?"))).loop(); + value_minus.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "<="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + StateTree value_max = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals(">"), (bag, token) -> bag.set("action", ">"))).loop(); value_max.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); - value_max.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", ">?="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_max.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", ">="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("!")) && validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "!="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); StateTree value_or = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("|"), (bag, token) -> bag.set("action", "|"))); value_or.then((validator) -> validator.validate((token) -> token.getValue().equals("|"), (bag, token) -> bag.set("action", "||"))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); @@ -560,6 +563,8 @@ public class JavaParser extends Parser { braces_array.then((validator) -> validator.validate((token) -> token.getValue().equals(","))) .then(braces_array); braces_array.end((a,b) -> a); + + //ENUM VALUE StateTree enum_value = new StateTree<>(); @@ -1302,4 +1307,284 @@ public class JavaParser extends Parser { // jFile.build(builder); // builder.build(new BufferedWriter(new FileWriter(new File("/home/ParserV2.txt")))); // } + + + + + + + /* + * + * VALUES + * + + + + //VALUE + BiFunction value_builder = (parent, bag) -> { + if(bag.has("right")){ + + if(!(bag.get("left") instanceof Value)) bag.set("left", new Value(bag.get("left"))); + if(!(bag.get("right") instanceof Value)) bag.set("right", new Value(bag.get("right"))); + + BiValue result = new BiValue( + + bag.get("left"), + + bag.get("action"), + + bag.get("right")); + bag.set(result); + } + return null; + }; + + BiConsumer value_right = (global, local) -> { + global.set("right", local.get("left")); + }; + + //STRING CONCAT + StateTree value = new StateTree<>(); + + StateTree value_container = new StateTree<>(); + + StateTree value_list = new StateTree<>(); + StateTree value_list_element = value_list.then(new RedirectStateTree<>(value_container, (global, local) -> { + List list = global.get(); + if(list == null){ + list = new ArrayList<>(); + global.set(list); + } + list.add(local.get()); + })); + value_list_element.end(); + value_list_element.then((validator) -> validator.validate((token) -> token.getValue().equals(","))) + .then(value_list_element); + + value.then((validator) -> validator.validate( + (token) -> token.getType().equals(TokenType.STRING) || token.getType().equals(TokenType.CHAR), + (bag, token) -> bag.set(token))) + .end((parent,bag) -> { + bag.set(new Value(bag.get())); + return null; + }); + + StateTree value_instance = value.then((validator) -> validator.validate( + (token) -> token.getValue().equals("new"), + (bag, token) -> bag.set("newit", token))); + StateTree value_name = new StateTree(); + value.then(value_name); + value_instance.then(new RedirectStateTree<>(value_name, (global, local) -> { + System.out.println(local.get()+""); + if(global.has("newit")) global.set(new InstanceValue(global.get("newit"), local.get().getToken(), local.get().getParameters())); + else global.set(local.get()); + })) + .end((a,b) -> a) + .then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) + .end((a,b) -> a) + .multiple(braces_container) + .unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a); + value_name = value_name.then(new RedirectStateTree<>(type, (global, local) -> { + if(global.get() == null) global.set(local.get()); + else global.set(global.get().concat(local.get())); + })); + value_name.end((parent,bag) -> { + Value result = new Value(bag.get()); + bag.set(result); + return null; + }); + + value_name.then((validator) -> validator.validate((token) -> token.getValue().equals(":")) && validator.validate((token) -> token.getValue().equals(":"))) + .then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME))) + .end((a,b) -> a); + + StateTree value_call = value_name.then((validator) -> validator.validate( + (token) -> token.getValue().equals("."), + (bag, token) -> { + Value prev = bag.get("prev"); + if(prev == null){ + bag.set("prev", new Value(bag.get())); + }else{ + Integer paramters = bag.get("args"); + List list = null; + if(paramters != null){ + list = new ArrayList<>(); + for(int i = 0; i < paramters; i++) list.add(bag.get("arg"+i).get()); + bag.remove("args"); + } + MethodCallValue methodCall = new MethodCallValue(prev, bag.get("gen"), bag.get(), list); + bag.set("prev", methodCall); + bag.remove("gen"); + } + bag.set(new Token(token.getLineNumber(), token.getCharacterNumber(), "", TokenType.GROUP)); + })); + value_call.end((a,b) -> a); + value_call.then(new RedirectStateTree<>(gen, (global, local) -> global.set("gen", global.get().concat(local.get())))).then(value_name); + value_call.then(value_name); + StateTree value_array_begin = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("["))); + StateTree value_array_end = value_array_begin.then((validator) -> validator.validate((token) -> token.getValue().equals("]"))); + value_array_begin.then(new RedirectStateTree<>(value_container, (global, local) -> global.set("inside", local))) + .then(value_array_end); + value_array_end.end((parent,bag) -> { + //to change + bag.set(new MethodCallValue(null, null, bag.get(), null)); + return parent; + }) + .then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) + .end((a,b) -> a) + .multiple(value_list) + .unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a); + value_array_end.then(value_call); + value_array_end.then(value_array_begin); + + StateTree value_arg_begin = value_name.then((validator) -> validator.validate( + (token) -> token.getValue().equals("("), + (bag, token) -> bag.set(bag.get().concat(token)))); + StateTree value_arg_end = value_arg_begin.then((validator) -> validator.validate( + (token) -> token.getValue().equals(")"), + (bag, token) -> bag.set(bag.get().concat(token)))); + value_arg_end.end((parent,bag) -> { + Integer paramters = bag.get("args"); + List list = null; + if(paramters != null){ + list = new ArrayList<>(); + for(int i = 0; i < paramters; i++) list.add(bag.get("arg"+i).get()); + } + + MethodCallValue methodCall = new MethodCallValue(bag.get("prev"), bag.get("gen"), bag.get(), list); + bag.set(methodCall); + return null; + }); + value_arg_end.then(value_call); + value_arg_end.then(value_array_begin); + StateTree value_generic_begin = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("<"))); + StateTree value_generic_name = value_generic_begin.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME))); + StateTree value_generic_split = value_generic_name.then((validator) -> validator.validate((token) -> token.getValue().equals(","))); + StateTree value_generic_end = value_generic_begin.then((validator) -> validator.validate((token) -> token.getValue().equals(">"))); + value_generic_end.then(value_arg_begin); + value_generic_end.then(value_generic_name); + value_generic_end.then(value_generic_split); + value_generic_name.then(value_generic_begin); + value_generic_name.then(value_generic_end); + value_generic_split.then(value_generic_name); + StateTree value_arg = value_arg_begin.then(new RedirectStateTree<>(value_container, (global, local) -> { + Integer count = global.get("args"); + if(count == null) count = 0; + global.set("arg"+count, local); + global.set("args", (count+1)); + })); + value_arg.then((validator) -> validator.validate((token) -> token.getValue().equals(","))) + .then(value_arg); + value_arg.then(value_arg_end); + + StateTree value_left = new StateTree<>(); + + StateTree value_parenthesis = value_container.then((validator) -> validator.validate((token) -> token.getValue().equals("("))); + StateTree value_cast = value_parenthesis.then(new RedirectStateTree<>(type, (global, local) -> global.set(null))) + .then((validator) -> validator.validate((token) -> token.getValue().equals(")"))) + .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))); + value_cast.then(value_left); + StateTree value_lambda_arg = value_parenthesis.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME))); + value_lambda_arg.then((validator) -> validator.validate((token) -> token.getValue().equals(","))) + .then(value_lambda_arg); + StateTree value_lambda = value_parenthesis.then((validator) -> + validator.validate((token) -> token.getValue().equals(")")) && + validator.validate((token) -> token.getValue().equals("-")) && + validator.validate((token) -> token.getValue().equals(">"))); + value_lambda.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) + .end((a,bag) -> { + bag.set(new LambdaValue(null, new ArrayList<>())); + return a; + }) + .multiple(function_container) + .unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a); + value_lambda.then(new RedirectStateTree<>(value_container, (global, local) -> global.set("in", local.get()))).end((a,bag) ->{ + bag.set(new LambdaValue(null, bag.get("in"))); + return a; + }); + value_lambda_arg.then(value_lambda); + StateTree value_parenthesis_end = value_parenthesis.then(new RedirectStateTree<>(value_container, (global, local) -> global.set("left", local.get()))) + .then((validator) -> validator.validate((token) -> token.getValue().equals(")"))); + value_parenthesis_end.end(); + value_parenthesis_end.then(value_call); + value_parenthesis_end.then(value_left); + value_container.then((validator) -> validator.validate((token) -> token.getValue().equals("!"))).then(value_container); + value_container.then((validator) -> validator.validate((token) -> token.getValue().equals("-"))).then(value_container); + value_container.then((validator) -> validator.validate((token) -> token.getValue().equals("+"))).then(value_container); + value_container.then((validator) -> validator.validate((token) -> token.getValue().equals("~"))).then(value_container); + StateTree value_inside = value_container.then(new RedirectStateTree<>(value, (global, local) -> { + global.set("left", local.get()); + })); + value_inside.then((validator) -> validator.validate((token) -> token.getValue().equals("["))) + .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) + .then((validator) -> validator.validate((token) -> token.getValue().equals("]"))) + .then(value_left); + value_inside.then(value_left); + value_left.end((parent, bag) -> { + if(bag.get("left") instanceof Value) bag.set(bag.get("left")); + else bag.set(new Value(bag.get("left"))); + return null; + }); + StateTree value_equals = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "="))); + value_equals.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_equals.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "=="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + StateTree value_minus = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("<"), (bag, token) -> bag.set("action", "<"))).loop(); + value_minus.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_minus.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "<="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + StateTree value_max = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals(">"), (bag, token) -> bag.set("action", ">"))).loop(); + value_max.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_max.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", ">="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("!")) && validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "!="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + StateTree value_or = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("|"), (bag, token) -> bag.set("action", "|"))); + value_or.then((validator) -> validator.validate((token) -> token.getValue().equals("|"), (bag, token) -> bag.set("action", "||"))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_or.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "|="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_or.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + StateTree value_and = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("&"), (bag, token) -> bag.set("action", "&"))); + value_and.then((validator) -> validator.validate((token) -> token.getValue().equals("&"), (bag, token) -> bag.set("action", "&&"))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_and.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "&="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_and.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + StateTree value_plus = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("+"), (bag, token) -> bag.set("action", "+"))); + value_plus.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_plus.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "+="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_plus.then((validator) -> validator.validate((token) -> token.getValue().equals("+"), (bag, token) -> bag.set("action", "++"))).end(value_builder); + StateTree value_min = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("-"), (bag, token) -> bag.set("action", "-"))); + value_min.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_min.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "-="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_min.then((validator) -> validator.validate((token) -> token.getValue().equals("-"), (bag, token) -> bag.set("action", "--"))).end(value_builder); + StateTree value_div = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("/"), (bag, token) -> bag.set("action", "/"))); + value_div.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_div.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "/="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + StateTree value_mod = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("%"), (bag, token) -> bag.set("action", "%"))); + value_mod.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_mod.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "%="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + StateTree value_xor = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("^"), (bag, token) -> bag.set("action", "^"))); + value_xor.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_xor.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "^="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + StateTree value_mult = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("*"), (bag, token) -> bag.set("action", "*"))); + value_mult.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_mult.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "*="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder); + value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("?"))) + .then(new RedirectStateTree<>(value_container, value_right)) + .then((validator) -> validator.validate((token) -> token.getValue().equals(":"), (bag, token) -> bag.set("action", "?:"))) + .then(new RedirectStateTree<>(value_container, value_right)) + .end(value_builder); + StateTree value_instanceof = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("instanceof"), (bag, token) -> bag.set("action", "instanceof"))) + .then(new RedirectStateTree<>(type, value_right)); + value_instanceof.end(value_builder); + value_instanceof.then(value_left); + + braces_container.then(clazz_container); + StateTree braces_array = braces_container.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))); + braces_array.then((validator) -> validator.validate((token) -> token.getValue().equals(","))) + .then(braces_array); + braces_array.end((a,b) -> a); + + + + + + * + * + * + */ } diff --git a/src/dev/peerat/parser/java/Value.java b/src/dev/peerat/parser/java/Value.java deleted file mode 100644 index 23866e5..0000000 --- a/src/dev/peerat/parser/java/Value.java +++ /dev/null @@ -1,331 +0,0 @@ -package dev.peerat.parser.java; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Function; - -import dev.peerat.parser.Token; -import dev.peerat.parser.java.Operation.OperationContainer; -import dev.peerat.parser.java.Variable.VariableContainer; - -public class Value extends JavaElement{ - - private Token token; - private JavaElement content; - - Value(){} - - public Value(Token token){ - this.token = token; - } - - public Value(JavaElement content){ - this.content = content; - } - - public Token getToken(){ - return this.token; - } - - public JavaElement getContent(){ - return this.content; - } - - @Override - public String toString(){ - return "Value[token="+token+", content="+content+"]"; - } - - @Override - public void build(Builder builder) throws Exception{ - if(token != null){ - builder.append(token); - }else{ - content.build(builder); - } - } - - @Override - public E find(Function finder){ - return content != null ? finder.apply(content) ? (E) content : null : null; - } - - @Override - public void findAll(Function finder, List list) { - if(content != null){ - if(finder.apply(content)) list.add((E) content); - content.findAll(finder, list); - } - } - - public static class BiValue extends Value{ - - private Value left; - private String action; - private Value right; - - public BiValue(Value left, String action, Value right){ - this.left = left; - this.action = action; - this.right = right; - } - - public Value left(){ - return left; - } - - public String getAction(){ - return this.action; - } - - public Value right(){ - return right; - } - - @Override - public String toString(){ - return left+" "+action+" "+right; - } - - @Override - public void build(Builder builder) throws Exception{ - left.build(builder); - builder.append(action); - right.build(builder); - } - - @Override - public E find(Function finder){ - return finder.apply(left) ? (E) left : finder.apply(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 static class TriValue extends Value{ - - private Value check; - private Value success; - private Value fail; - - public TriValue(){} - - public Value getChecker(){ - return check; - } - - public Value success(){ - return success; - } - - public Value fail(){ - return fail; - } - - @Override - public void build(Builder builder) throws Exception { - check.build(builder); - builder.append("?"); - success.build(builder); - builder.append(":"); - fail.build(builder); - } - - @Override - public E find(Function finder){ - return finder.apply(check) ? (E) check : finder.apply(success) ? (E) success : finder.apply(fail) ? (E) fail : null; - } - - @Override - public void findAll(Function finder, List list){ - if(finder.apply(check)) list.add((E)check); - check.findAll(finder, list); - if(finder.apply(success)) list.add((E)success); - success.findAll(finder, list); - if(finder.apply(fail)) list.add((E)fail); - fail.findAll(finder, list); - } - } - - public static class MethodCallValue extends Value{ - - private Value base; - private Token generic; - private Token token; - private List parameters; - - public MethodCallValue(Value base, Token generic, Token token, List parameters){ - this.base = base; - this.generic = generic; - this.token = token; - this.parameters = parameters; - } - - public Value base(){ - return this.base; - } - - public Token getGeneric(){ - return this.generic; - } - - public Token getToken(){ - return token; - } - - public List getParameters(){ - return this.parameters; - } - - @Override - public String toString(){ - return base+"."+((generic == null ? "":generic.getValue()))+token.getValue()+((parameters == null ? "":parameters)); - } - - @Override - public void build(Builder builder) throws Exception{ - builder.append(token); - } - - @Override - public E find(Function finder){ - if(finder.apply(base)) return (E) base; - if(parameters != null){ - for(Value value : parameters){ - if(finder.apply(value)) return (E) value; - } - } - return null; - } - - @Override - public void findAll(Function finder, List list){ - if(finder.apply(base)) list.add((E) base); - base.findAll(finder, list); - if(parameters != null){ - for(Value value : parameters){ - if(finder.apply(value)) list.add((E) value); - value.findAll(finder, list); - } - } - } - } - - public static class InstanceValue extends Value{ - - private Token newer; - private Token token; - private List parameters; - - public InstanceValue(Token newer, Token token, List parameters){ - this.newer = newer; - this.token = token; - this.parameters = parameters; - } - - public Token getNewer(){ - return this.newer; - } - - public Token getToken(){ - return token; - } - - public List getParameters(){ - return this.parameters; - } - - @Override - public String toString(){ - return newer.getValue()+" "+token.getValue()+((parameters == null ? "":parameters)); - } - - @Override - public void build(Builder builder) throws Exception{ - builder.append(newer); - builder.append(token); - } - - @Override - public E find(Function finder){ - if(parameters != null){ - for(Value value : parameters){ - if(finder.apply(value)) return (E) value; - } - } - return null; - } - - @Override - public void findAll(Function finder, List list){ - if(parameters != null){ - for(Value value : parameters){ - if(finder.apply(value)) list.add((E) value); - value.findAll(finder, list); - } - } - } - } - - //TO FILL - public static class LambdaValue extends Value implements OperationContainer, VariableContainer{ - - private List parameters; - private List operations; - - public LambdaValue(List parameters, List operations){ - this.parameters = parameters; - this.operations = operations; - } - - public LambdaValue(List parameters, Value value){ - this.parameters = parameters; - this.operations = new ArrayList<>(); - this.operations.add(value); - } - - public List getParameters(){ - return this.parameters; - } - - public List getOperations(){ - return this.operations; - } - - @Override - public void addVariable(Variable variable){ - this.operations.add(variable); - } - - @Override - public void addOperation(Operation operation) { - this.operations.add(operation); - } - - - @Override - public String toString(){ - return "("+parameters+") -> {"+operations+"}"; - } - - @Override - public void build(Builder builder) throws Exception{ - } - - @Override - public E find(Function finder){ - return null; - } - - @Override - public void findAll(Function finder, List list){ - } - - } -} diff --git a/src/dev/peerat/parser/java/Variable.java b/src/dev/peerat/parser/java/Variable.java index 7b51f32..c64b9b2 100644 --- a/src/dev/peerat/parser/java/Variable.java +++ b/src/dev/peerat/parser/java/Variable.java @@ -1,13 +1,13 @@ package dev.peerat.parser.java; import java.lang.reflect.Modifier; -import java.util.ArrayList; import java.util.List; import java.util.function.Function; import dev.peerat.parser.Token; import dev.peerat.parser.TokenType; import dev.peerat.parser.java.Annotation.Annotable; +import dev.peerat.parser.java.value.Value; public class Variable extends Annotable{ diff --git a/src/dev/peerat/parser/java/operation/AssignOperation.java b/src/dev/peerat/parser/java/operation/AssignOperation.java index eb8814d..e874f8c 100644 --- a/src/dev/peerat/parser/java/operation/AssignOperation.java +++ b/src/dev/peerat/parser/java/operation/AssignOperation.java @@ -5,7 +5,7 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Operation; -import dev.peerat.parser.java.Value; +import dev.peerat.parser.java.value.Value; public class AssignOperation extends Operation{ diff --git a/src/dev/peerat/parser/java/operation/ForOperation.java b/src/dev/peerat/parser/java/operation/ForOperation.java index 0f99e7f..86ce14b 100644 --- a/src/dev/peerat/parser/java/operation/ForOperation.java +++ b/src/dev/peerat/parser/java/operation/ForOperation.java @@ -4,8 +4,8 @@ import java.util.List; import java.util.function.Function; import dev.peerat.parser.java.JavaElement; -import dev.peerat.parser.java.Value; import dev.peerat.parser.java.Variable; +import dev.peerat.parser.java.value.Value; public class ForOperation extends OperationBag{ diff --git a/src/dev/peerat/parser/java/operation/ForeachOperation.java b/src/dev/peerat/parser/java/operation/ForeachOperation.java index d86fd22..f999465 100644 --- a/src/dev/peerat/parser/java/operation/ForeachOperation.java +++ b/src/dev/peerat/parser/java/operation/ForeachOperation.java @@ -5,7 +5,7 @@ import java.util.function.Function; import dev.peerat.parser.Token; import dev.peerat.parser.java.JavaElement; -import dev.peerat.parser.java.Value; +import dev.peerat.parser.java.value.Value; public class ForeachOperation extends OperationBag{ diff --git a/src/dev/peerat/parser/java/operation/IfOperation.java b/src/dev/peerat/parser/java/operation/IfOperation.java index defa34c..f110651 100644 --- a/src/dev/peerat/parser/java/operation/IfOperation.java +++ b/src/dev/peerat/parser/java/operation/IfOperation.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.function.Function; import dev.peerat.parser.java.JavaElement; -import dev.peerat.parser.java.Value; +import dev.peerat.parser.java.value.Value; public class IfOperation extends OperationBag{ diff --git a/src/dev/peerat/parser/java/operation/MethodCallOperation.java b/src/dev/peerat/parser/java/operation/MethodCallOperation.java index 0049d4f..d10b1b2 100644 --- a/src/dev/peerat/parser/java/operation/MethodCallOperation.java +++ b/src/dev/peerat/parser/java/operation/MethodCallOperation.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.Operation; -import dev.peerat.parser.java.Value; +import dev.peerat.parser.java.value.Value; public class MethodCallOperation extends Operation{ diff --git a/src/dev/peerat/parser/java/operation/ReturnOperation.java b/src/dev/peerat/parser/java/operation/ReturnOperation.java index 3fff15a..ebe8aac 100644 --- a/src/dev/peerat/parser/java/operation/ReturnOperation.java +++ b/src/dev/peerat/parser/java/operation/ReturnOperation.java @@ -5,7 +5,7 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Operation; -import dev.peerat.parser.java.Value; +import dev.peerat.parser.java.value.Value; public class ReturnOperation extends Operation{ diff --git a/src/dev/peerat/parser/java/operation/SynchronizedOperation.java b/src/dev/peerat/parser/java/operation/SynchronizedOperation.java index 952b29d..a61a852 100644 --- a/src/dev/peerat/parser/java/operation/SynchronizedOperation.java +++ b/src/dev/peerat/parser/java/operation/SynchronizedOperation.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.function.Function; import dev.peerat.parser.java.JavaElement; -import dev.peerat.parser.java.Value; +import dev.peerat.parser.java.value.Value; public class SynchronizedOperation extends OperationBag{ diff --git a/src/dev/peerat/parser/java/operation/ThrowOperation.java b/src/dev/peerat/parser/java/operation/ThrowOperation.java index 910749e..bd44227 100644 --- a/src/dev/peerat/parser/java/operation/ThrowOperation.java +++ b/src/dev/peerat/parser/java/operation/ThrowOperation.java @@ -5,7 +5,7 @@ import java.util.function.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Operation; -import dev.peerat.parser.java.Value; +import dev.peerat.parser.java.value.Value; public class ThrowOperation extends Operation{ diff --git a/src/dev/peerat/parser/java/operation/WhileOperation.java b/src/dev/peerat/parser/java/operation/WhileOperation.java index 205ca19..98272b6 100644 --- a/src/dev/peerat/parser/java/operation/WhileOperation.java +++ b/src/dev/peerat/parser/java/operation/WhileOperation.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.function.Function; import dev.peerat.parser.java.JavaElement; -import dev.peerat.parser.java.Value; +import dev.peerat.parser.java.value.Value; public class WhileOperation extends OperationBag{ diff --git a/src/dev/peerat/parser/java/value/ArrayValue.java b/src/dev/peerat/parser/java/value/ArrayValue.java new file mode 100644 index 0000000..d92c178 --- /dev/null +++ b/src/dev/peerat/parser/java/value/ArrayValue.java @@ -0,0 +1,37 @@ +package dev.peerat.parser.java.value; + +import java.util.List; +import java.util.function.Function; + +import dev.peerat.parser.java.JavaElement; + +public class ArrayValue extends Value{ + + private Value[] values; + + public ArrayValue(Value[] values){ + this.values = values; + } + + public Value[] getValues(){ + return this.values; + } + + @Override + public void build(Builder builder) throws Exception { + + } + + @Override + public E find(Function finder) { + return null; + } + + @Override + public void findAll(Function finder, List list) { + + } + + + +} diff --git a/src/dev/peerat/parser/java/value/BiValue.java b/src/dev/peerat/parser/java/value/BiValue.java new file mode 100644 index 0000000..6ff7a8a --- /dev/null +++ b/src/dev/peerat/parser/java/value/BiValue.java @@ -0,0 +1,47 @@ +package dev.peerat.parser.java.value; + +import java.util.List; +import java.util.function.Function; + +import dev.peerat.parser.java.JavaElement; + +public class BiValue extends Value{ + + private Value left; + private String action; + private Value right; + + public BiValue(Value left, String action, Value right){ + this.left = left; + this.action = action; + this.right = right; + } + + public Value left(){ + return left; + } + + public String getAction(){ + return this.action; + } + + public Value right(){ + return right; + } + + @Override + public void build(Builder builder) throws Exception { + + } + + @Override + public E find(Function finder) { + return null; + } + + @Override + public void findAll(Function finder, List list) { + + } + +} diff --git a/src/dev/peerat/parser/java/value/InnerElementValue.java b/src/dev/peerat/parser/java/value/InnerElementValue.java new file mode 100644 index 0000000..898548a --- /dev/null +++ b/src/dev/peerat/parser/java/value/InnerElementValue.java @@ -0,0 +1,37 @@ +package dev.peerat.parser.java.value; + +import java.util.List; +import java.util.function.Function; + +import dev.peerat.parser.java.JavaElement; + +public class InnerElementValue extends Value{ + + private JavaElement element; + + public InnerElementValue(JavaElement element){ + this.element = element; + } + + public JavaElement getElement(){ + return this.element; + } + + @Override + public void build(Builder builder) throws Exception { + + } + + @Override + public E find(Function finder) { + return null; + } + + @Override + public void findAll(Function finder, List list) { + + } + + + +} diff --git a/src/dev/peerat/parser/java/value/InstanceValue.java b/src/dev/peerat/parser/java/value/InstanceValue.java new file mode 100644 index 0000000..13912ea --- /dev/null +++ b/src/dev/peerat/parser/java/value/InstanceValue.java @@ -0,0 +1,48 @@ +package dev.peerat.parser.java.value; + +import java.util.List; +import java.util.function.Function; + +import dev.peerat.parser.Token; +import dev.peerat.parser.java.JavaElement; + +public class InstanceValue extends Value{ + + private Token newer; + private Token token; + private List parameters; + + public InstanceValue(Token newer, Token token, List parameters){ + this.newer = newer; + this.token = token; + this.parameters = parameters; + } + + public Token getNewer(){ + return this.newer; + } + + public Token getToken(){ + return token; + } + + public List getParameters(){ + return this.parameters; + } + + @Override + public void build(Builder builder) throws Exception { + + } + + @Override + public E find(Function finder) { + return null; + } + + @Override + public void findAll(Function finder, List list) { + + } + +} diff --git a/src/dev/peerat/parser/java/value/LambdaValue.java b/src/dev/peerat/parser/java/value/LambdaValue.java new file mode 100644 index 0000000..58ba07d --- /dev/null +++ b/src/dev/peerat/parser/java/value/LambdaValue.java @@ -0,0 +1,64 @@ +package dev.peerat.parser.java.value; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import dev.peerat.parser.Token; +import dev.peerat.parser.java.JavaElement; +import dev.peerat.parser.java.Operation; +import dev.peerat.parser.java.Variable; +import dev.peerat.parser.java.Operation.OperationContainer; +import dev.peerat.parser.java.Variable.VariableContainer; + +public class LambdaValue extends Value implements OperationContainer, VariableContainer{ + + private List parameters; + private List operations; + + public LambdaValue(List parameters, List operations){ + this.parameters = parameters; + this.operations = operations; + } + + public LambdaValue(List parameters, Value value){ + this.parameters = parameters; + this.operations = new ArrayList<>(); + this.operations.add(value); + } + + public List getParameters(){ + return this.parameters; + } + + public List getOperations(){ + return this.operations; + } + + @Override + public void addVariable(Variable variable){ + this.operations.add(variable); + } + + @Override + public void addOperation(Operation operation) { + this.operations.add(operation); + } + + @Override + public void build(Builder builder) throws Exception { + + } + + @Override + public E find(Function finder) { + return null; + } + + @Override + public void findAll(Function finder, List list) { + + } + + +} diff --git a/src/dev/peerat/parser/java/value/MethodCallValue.java b/src/dev/peerat/parser/java/value/MethodCallValue.java new file mode 100644 index 0000000..75670a5 --- /dev/null +++ b/src/dev/peerat/parser/java/value/MethodCallValue.java @@ -0,0 +1,54 @@ +package dev.peerat.parser.java.value; + +import java.util.List; +import java.util.function.Function; + +import dev.peerat.parser.Token; +import dev.peerat.parser.java.JavaElement; + +public class MethodCallValue extends Value{ + + private Value base; + private Token generic; + private Token token; + private List parameters; + + public MethodCallValue(Value base, Token generic, Token token, List parameters){ + this.base = base; + this.generic = generic; + this.token = token; + this.parameters = parameters; + } + + public Value base(){ + return this.base; + } + + public Token getGeneric(){ + return this.generic; + } + + public Token getToken(){ + return token; + } + + public List getParameters(){ + return this.parameters; + } + + @Override + public void build(Builder builder) throws Exception { + + } + + @Override + public E find(Function finder) { + return null; + } + + @Override + public void findAll(Function finder, List list) { + + } + +} diff --git a/src/dev/peerat/parser/java/value/ModifierValue.java b/src/dev/peerat/parser/java/value/ModifierValue.java new file mode 100644 index 0000000..ff4f3f7 --- /dev/null +++ b/src/dev/peerat/parser/java/value/ModifierValue.java @@ -0,0 +1,41 @@ +package dev.peerat.parser.java.value; + +import java.util.List; +import java.util.function.Function; + +import dev.peerat.parser.Token; +import dev.peerat.parser.java.JavaElement; + +public class ModifierValue extends Value{ + + private Token modifier; + private Value value; + + public ModifierValue(Token modifier, Value value){ + this.modifier = modifier; + this.value = value; + } + + public Token getModifier(){ + return this.modifier; + } + + public Value getValue(){ + return this.value; + } + + @Override + public void build(Builder builder) throws Exception { + + } + + @Override + public E find(Function finder) { + return null; + } + + @Override + public void findAll(Function finder, List list) { + + } +} diff --git a/src/dev/peerat/parser/java/value/StaticValue.java b/src/dev/peerat/parser/java/value/StaticValue.java new file mode 100644 index 0000000..8fc414b --- /dev/null +++ b/src/dev/peerat/parser/java/value/StaticValue.java @@ -0,0 +1,38 @@ +package dev.peerat.parser.java.value; + +import java.util.List; +import java.util.function.Function; + +import dev.peerat.parser.Token; +import dev.peerat.parser.java.JavaElement; + +public class StaticValue extends Value{ + + private Token token; + + public StaticValue(Token token){ + this.token = token; + } + + public Token getToken(){ + return this.token; + } + + @Override + public void build(Builder builder) throws Exception { + + } + + @Override + public E find(Function finder) { + return null; + } + + @Override + public void findAll(Function finder, List list) { + + } + + + +} diff --git a/src/dev/peerat/parser/java/value/TriValue.java b/src/dev/peerat/parser/java/value/TriValue.java new file mode 100644 index 0000000..40c8744 --- /dev/null +++ b/src/dev/peerat/parser/java/value/TriValue.java @@ -0,0 +1,47 @@ +package dev.peerat.parser.java.value; + +import java.util.List; +import java.util.function.Function; + +import dev.peerat.parser.java.JavaElement; + +public class TriValue extends Value{ + + private Value check; + private Value success; + private Value fail; + + public TriValue(Value check, Value success, Value fail){ + this.check = check; + this.success = success; + this.fail = fail; + } + + public Value getChecker(){ + return check; + } + + public Value success(){ + return success; + } + + public Value fail(){ + return fail; + } + + @Override + public void build(Builder builder) throws Exception { + + } + + @Override + public E find(Function finder) { + return null; + } + + @Override + public void findAll(Function finder, List list) { + + } + +} diff --git a/src/dev/peerat/parser/java/value/Value.java b/src/dev/peerat/parser/java/value/Value.java new file mode 100644 index 0000000..b834b75 --- /dev/null +++ b/src/dev/peerat/parser/java/value/Value.java @@ -0,0 +1,5 @@ +package dev.peerat.parser.java.value; + +import dev.peerat.parser.java.JavaElement; + +public abstract class Value extends JavaElement{} diff --git a/test/dev/peerat/parser/java/AnnotationTests.java b/test/dev/peerat/parser/java/AnnotationTests.java index 74dd4cf..e37bb57 100644 --- a/test/dev/peerat/parser/java/AnnotationTests.java +++ b/test/dev/peerat/parser/java/AnnotationTests.java @@ -11,10 +11,8 @@ import dev.peerat.parser.Parser; import dev.peerat.parser.Token; import dev.peerat.parser.TokenType; import dev.peerat.parser.TokenValidator; -import dev.peerat.parser.java.Annotation; -import dev.peerat.parser.java.JavaElement; -import dev.peerat.parser.java.Value; import dev.peerat.parser.java.Annotation.AnnotableBuffer; +import dev.peerat.parser.java.value.Value; import dev.peerat.parser.state.RedirectStateTree; import dev.peerat.parser.state.StateTree; diff --git a/test/dev/peerat/parser/java/OperationTests.java b/test/dev/peerat/parser/java/OperationTests.java index f7fdf32..c5fb78c 100644 --- a/test/dev/peerat/parser/java/OperationTests.java +++ b/test/dev/peerat/parser/java/OperationTests.java @@ -6,7 +6,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.function.BiConsumer; import java.util.function.BiFunction; import org.junit.jupiter.api.Test; @@ -16,9 +15,6 @@ import dev.peerat.parser.Parser; import dev.peerat.parser.Token; import dev.peerat.parser.TokenType; import dev.peerat.parser.TokenValidator; -import dev.peerat.parser.java.JavaElement; -import dev.peerat.parser.java.Value; -import dev.peerat.parser.java.Variable; import dev.peerat.parser.java.Operation.OperationContainer; import dev.peerat.parser.java.operation.AssignOperation; import dev.peerat.parser.java.operation.BreakOperation; @@ -34,6 +30,7 @@ import dev.peerat.parser.java.operation.SynchronizedOperation; import dev.peerat.parser.java.operation.ThrowOperation; import dev.peerat.parser.java.operation.TryOperation; import dev.peerat.parser.java.operation.WhileOperation; +import dev.peerat.parser.java.value.Value; import dev.peerat.parser.state.RedirectStateTree; import dev.peerat.parser.state.StateTree; diff --git a/test/dev/peerat/parser/java/ValueTests.java b/test/dev/peerat/parser/java/ValueTests.java index 9c699aa..76da61b 100644 --- a/test/dev/peerat/parser/java/ValueTests.java +++ b/test/dev/peerat/parser/java/ValueTests.java @@ -14,9 +14,9 @@ import dev.peerat.parser.Parser; import dev.peerat.parser.Token; import dev.peerat.parser.TokenType; import dev.peerat.parser.TokenValidator; -import dev.peerat.parser.java.JavaElement; -import dev.peerat.parser.java.Value; -import dev.peerat.parser.java.Value.BiValue; +import dev.peerat.parser.java.value.BiValue; +import dev.peerat.parser.java.value.StaticValue; +import dev.peerat.parser.java.value.Value; import dev.peerat.parser.state.RedirectStateTree; import dev.peerat.parser.state.StateTree; @@ -58,7 +58,7 @@ public class ValueTests { value.then(value_name); value_instance.then(new RedirectStateTree<>(value_name, (global, local) -> global.set(local.get()))) .end((parent, bag) -> { - Value result = new Value(bag.get()); + Value result = new StaticValue(bag.get()); bag.set(result); return result; }) @@ -70,7 +70,7 @@ public class ValueTests { global.set(local.get()); })); value_name.end((parent,bag) -> { - Value result = new Value(bag.get()); + Value result = new StaticValue(bag.get()); bag.set(result); return null; }); @@ -237,7 +237,7 @@ public class ValueTests { } return false; }).end((parent,bag) -> { - bag.set(new Value(bag.get())); + bag.set(new StaticValue(bag.get())); return null; }); diff --git a/test/dev/peerat/parser/java/VariableTests.java b/test/dev/peerat/parser/java/VariableTests.java index 4e43500..8f8388a 100644 --- a/test/dev/peerat/parser/java/VariableTests.java +++ b/test/dev/peerat/parser/java/VariableTests.java @@ -14,12 +14,9 @@ import dev.peerat.parser.Parser; import dev.peerat.parser.Token; import dev.peerat.parser.TokenType; import dev.peerat.parser.TokenValidator; -import dev.peerat.parser.java.Class; -import dev.peerat.parser.java.JavaElement; -import dev.peerat.parser.java.Value; -import dev.peerat.parser.java.Variable; import dev.peerat.parser.java.Annotation.AnnotableBuffer; import dev.peerat.parser.java.Variable.VariableContainer; +import dev.peerat.parser.java.value.Value; import dev.peerat.parser.state.InitialStateTree; import dev.peerat.parser.state.RedirectStateTree; import dev.peerat.parser.state.StateTree; diff --git a/test/dev/peerat/parser/java/element/annotation/ClazzAnnotation.java b/test/dev/peerat/parser/java/element/annotation/ClazzAnnotation.java index cf358c4..54069e5 100644 --- a/test/dev/peerat/parser/java/element/annotation/ClazzAnnotation.java +++ b/test/dev/peerat/parser/java/element/annotation/ClazzAnnotation.java @@ -15,8 +15,9 @@ import dev.peerat.parser.java.Class; import dev.peerat.parser.java.ClassBase; import dev.peerat.parser.java.Enumeration; import dev.peerat.parser.java.Interface; -import dev.peerat.parser.java.Value; import dev.peerat.parser.java.element.BaseElementTests; +import dev.peerat.parser.java.value.StaticValue; +import dev.peerat.parser.java.value.Value; public class ClazzAnnotation extends BaseElementTests{ @@ -79,7 +80,7 @@ public class ClazzAnnotation extends BaseElementTests{ Annotation annotation = annotations.get(0); assertEquals("Test", annotation.getName().getValue()); assertNotNull(annotation.getParameters()); - Value value = annotation.getParameters().get(null); + StaticValue value = (StaticValue) annotation.getParameters().get(null); assertNotNull(value); Token token = value.getToken(); assertNotNull(token); @@ -103,7 +104,7 @@ public class ClazzAnnotation extends BaseElementTests{ assertEquals(1, annotation.getParameters().size()); Entry entry = annotation.getParameters().entrySet().iterator().next(); assertEquals("offset", entry.getKey().getValue()); - assertEquals("8", entry.getValue().getToken().getValue()); + assertEquals("8", ((StaticValue)entry.getValue()).getToken().getValue()); }); register( diff --git a/test/dev/peerat/parser/java/element/operation/AssignOperationTest.java b/test/dev/peerat/parser/java/element/operation/AssignOperationTest.java index de8be7f..0a66459 100644 --- a/test/dev/peerat/parser/java/element/operation/AssignOperationTest.java +++ b/test/dev/peerat/parser/java/element/operation/AssignOperationTest.java @@ -7,6 +7,7 @@ import dev.peerat.parser.java.Function; import dev.peerat.parser.java.Operation; import dev.peerat.parser.java.element.BaseElementTests; import dev.peerat.parser.java.operation.AssignOperation; +import dev.peerat.parser.java.value.StaticValue; public class AssignOperationTest extends BaseElementTests{ @@ -27,8 +28,8 @@ public class AssignOperationTest extends BaseElementTests{ Operation op = checkOperation(function.getElements().get(1)); assertTrue(op instanceof AssignOperation); AssignOperation assign = (AssignOperation)op; - assertEquals("i", assign.left().getToken().getValue()); - assertEquals("4", assign.right().getToken().getValue()); + assertEquals("i", ((StaticValue)assign.left()).getToken().getValue()); + assertEquals("4", ((StaticValue)assign.right()).getToken().getValue()); }); register( @@ -48,8 +49,8 @@ public class AssignOperationTest extends BaseElementTests{ Operation op = checkOperation(function.getElements().get(2)); assertTrue(op instanceof AssignOperation); AssignOperation assign = (AssignOperation)op; - assertEquals("i", assign.left().getToken().getValue()); - assertEquals("j", assign.right().getToken().getValue()); + assertEquals("i", ((StaticValue)assign.left()).getToken().getValue()); + assertEquals("j", ((StaticValue)assign.right()).getToken().getValue()); }); } } \ No newline at end of file diff --git a/test/dev/peerat/parser/java/element/value/ValueInCondition.java b/test/dev/peerat/parser/java/element/value/ValueInCondition.java new file mode 100644 index 0000000..b4d6934 --- /dev/null +++ b/test/dev/peerat/parser/java/element/value/ValueInCondition.java @@ -0,0 +1,154 @@ +package dev.peerat.parser.java.element.value; + +import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import dev.peerat.parser.java.Function; +import dev.peerat.parser.java.Operation; +import dev.peerat.parser.java.element.BaseElementTests; +import dev.peerat.parser.java.operation.IfOperation; +import dev.peerat.parser.java.value.BiValue; +import dev.peerat.parser.java.value.StaticValue; + +public class ValueInCondition extends BaseElementTests{ + + { + register( + "package be.jeffcheasey88;" + + "" + + "public static class Test{ " + + " void test(){ " + + " if(a){}" + + "}" + + "}", + (javafile) -> { + Function function = checkFunction(checkClass(javafile).getElements().get(0)); + assertEquals(1, function.getElements().size()); + Operation op = checkOperation(function.getElements().get(0)); + assertTrue(op instanceof IfOperation); + IfOperation condition = (IfOperation)op; + System.out.println(condition.getCondition()); + assertEquals("a", ((StaticValue)condition.getCondition()).getToken().getValue()); + }); + + register( + "package be.jeffcheasey88;" + + "" + + "public static class Test{ " + + " void test(){ " + + " if(a && b){}" + + "}" + + "}", + (javafile) -> { + Function function = checkFunction(checkClass(javafile).getElements().get(0)); + assertEquals(1, function.getElements().size()); + Operation op = checkOperation(function.getElements().get(0)); + assertTrue(op instanceof IfOperation); + IfOperation condition = (IfOperation)op; + BiValue value = (BiValue)condition.getCondition(); + assertEquals("a", ((StaticValue)value.left()).getToken().getValue()); + assertEquals("b", ((StaticValue)value.right()).getToken().getValue()); + assertEquals("&&", value.getAction()); + }); + + register( + "package be.jeffcheasey88;" + + "" + + "public static class Test{ " + + " void test(){ " + + " if(a || b){}" + + "}" + + "}", + (javafile) -> { + Function function = checkFunction(checkClass(javafile).getElements().get(0)); + assertEquals(1, function.getElements().size()); + Operation op = checkOperation(function.getElements().get(0)); + assertTrue(op instanceof IfOperation); + IfOperation condition = (IfOperation)op; + BiValue value = (BiValue)condition.getCondition(); + assertEquals("a", ((StaticValue)value.left()).getToken().getValue()); + assertEquals("b", ((StaticValue)value.right()).getToken().getValue()); + assertEquals("||", value.getAction()); + }); + + register( + "package be.jeffcheasey88;" + + "" + + "public static class Test{ " + + " void test(){ " + + " if(a || (b)){}" + + "}" + + "}", + (javafile) -> { + Function function = checkFunction(checkClass(javafile).getElements().get(0)); + assertEquals(1, function.getElements().size()); + Operation op = checkOperation(function.getElements().get(0)); + assertTrue(op instanceof IfOperation); + IfOperation condition = (IfOperation)op; + BiValue value = (BiValue)condition.getCondition(); + assertEquals("a", ((StaticValue)value.left()).getToken().getValue()); + assertEquals("b", ((StaticValue)value.right()).getToken().getValue()); + assertEquals("||", value.getAction()); + }); + + register( + "package be.jeffcheasey88;" + + "" + + "public static class Test{ " + + " void test(){ " + + " if(((a || ((b))))){}" + + "}" + + "}", + (javafile) -> { + Function function = checkFunction(checkClass(javafile).getElements().get(0)); + assertEquals(1, function.getElements().size()); + Operation op = checkOperation(function.getElements().get(0)); + assertTrue(op instanceof IfOperation); + IfOperation condition = (IfOperation)op; + BiValue value = (BiValue)condition.getCondition(); + assertEquals("a", ((StaticValue)value.left()).getToken().getValue()); + assertEquals("b", ((StaticValue)value.right()).getToken().getValue()); + assertEquals("||", value.getAction()); + }); + + register( + "package be.jeffcheasey88;" + + "" + + "public static class Test{ " + + " void test(){ " + + " if(a > 2){}" + + "}" + + "}", + (javafile) -> { + Function function = checkFunction(checkClass(javafile).getElements().get(0)); + assertEquals(1, function.getElements().size()); + Operation op = checkOperation(function.getElements().get(0)); + assertTrue(op instanceof IfOperation); + IfOperation condition = (IfOperation)op; + BiValue value = (BiValue)condition.getCondition(); + assertEquals("a", ((StaticValue)value.left()).getToken().getValue()); + assertEquals("2", ((StaticValue)value.right()).getToken().getValue()); + assertEquals(">", value.getAction()); + }); + + register( + "package be.jeffcheasey88;" + + "" + + "public static class Test{ " + + " void test(){ " + + " if(a <= 2){}" + + "}" + + "}", + (javafile) -> { + Function function = checkFunction(checkClass(javafile).getElements().get(0)); + assertEquals(1, function.getElements().size()); + Operation op = checkOperation(function.getElements().get(0)); + assertTrue(op instanceof IfOperation); + IfOperation condition = (IfOperation)op; + BiValue value = (BiValue)condition.getCondition(); + assertEquals("a", ((StaticValue)value.left()).getToken().getValue()); + assertEquals("2", ((StaticValue)value.right()).getToken().getValue()); + assertEquals(">", value.getAction()); + }); + } +} \ No newline at end of file diff --git a/test/dev/peerat/parser/java/element/variable/VariableInClass.java b/test/dev/peerat/parser/java/element/variable/VariableInClass.java index 63a4d5c..3450bfc 100644 --- a/test/dev/peerat/parser/java/element/variable/VariableInClass.java +++ b/test/dev/peerat/parser/java/element/variable/VariableInClass.java @@ -12,6 +12,7 @@ import dev.peerat.parser.java.Class; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Variable; import dev.peerat.parser.java.element.BaseElementTests; +import dev.peerat.parser.java.value.StaticValue; public class VariableInClass extends BaseElementTests{ @@ -97,7 +98,7 @@ public class VariableInClass extends BaseElementTests{ assertEquals(Modifier.PRIVATE+Modifier.FINAL, variable.getModifier()); assertEquals("int", variable.getType().getValue()); assertEquals("i", variable.getName().getValue()); - assertEquals("4", variable.getValue().getToken().getValue()); + assertEquals("4", ((StaticValue)variable.getValue()).getToken().getValue()); }); register( @@ -118,7 +119,7 @@ public class VariableInClass extends BaseElementTests{ assertEquals(Modifier.PRIVATE+Modifier.FINAL, variable.getModifier()); assertEquals("int", variable.getType().getValue()); assertEquals("i", variable.getName().getValue()); - assertEquals("4", variable.getValue().getToken().getValue()); + assertEquals("4", ((StaticValue)variable.getValue()).getToken().getValue()); element = elements.get(1); assertNotNull(element); @@ -148,7 +149,7 @@ public class VariableInClass extends BaseElementTests{ assertEquals(Modifier.PRIVATE+Modifier.FINAL, variable.getModifier()); assertEquals("int", variable.getType().getValue()); assertEquals("i", variable.getName().getValue()); - assertEquals("4", variable.getValue().getToken().getValue()); + assertEquals("4", ((StaticValue)variable.getValue()).getToken().getValue()); element = elements.get(1); assertNotNull(element); @@ -157,7 +158,7 @@ public class VariableInClass extends BaseElementTests{ assertEquals(Modifier.PRIVATE+Modifier.FINAL, variable.getModifier()); assertEquals("int", variable.getType().getValue()); assertEquals("j", variable.getName().getValue()); - assertEquals("6", variable.getValue().getToken().getValue()); + assertEquals("6", ((StaticValue)variable.getValue()).getToken().getValue()); }); register( @@ -179,7 +180,7 @@ public class VariableInClass extends BaseElementTests{ assertEquals(Modifier.PRIVATE+Modifier.FINAL, variable.getModifier()); assertEquals("int", variable.getType().getValue()); assertEquals("i", variable.getName().getValue()); - assertEquals("4", variable.getValue().getToken().getValue()); + assertEquals("4", ((StaticValue)variable.getValue()).getToken().getValue()); element = elements.get(1); assertNotNull(element); @@ -188,7 +189,7 @@ public class VariableInClass extends BaseElementTests{ assertEquals(Modifier.PRIVATE+Modifier.FINAL, variable.getModifier()); assertEquals("int", variable.getType().getValue()); assertEquals("j", variable.getName().getValue()); - assertEquals("6", variable.getValue().getToken().getValue()); + assertEquals("6", ((StaticValue)variable.getValue()).getToken().getValue()); element = elements.get(2); assertNotNull(element); diff --git a/test/dev/peerat/parser/java/element/variable/VariableInMethod.java b/test/dev/peerat/parser/java/element/variable/VariableInMethod.java index d03fe5f..4597a91 100644 --- a/test/dev/peerat/parser/java/element/variable/VariableInMethod.java +++ b/test/dev/peerat/parser/java/element/variable/VariableInMethod.java @@ -11,6 +11,7 @@ import dev.peerat.parser.java.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Variable; import dev.peerat.parser.java.element.BaseElementTests; +import dev.peerat.parser.java.value.StaticValue; public class VariableInMethod extends BaseElementTests{ @@ -60,7 +61,7 @@ public class VariableInMethod extends BaseElementTests{ assertEquals(0, variable.getModifier()); assertEquals("int", variable.getType().getValue()); assertEquals("i", variable.getName().getValue()); - assertEquals("4", variable.getValue().getToken().getValue()); + assertEquals("4", ((StaticValue)variable.getValue()).getToken().getValue()); }); register( @@ -84,7 +85,7 @@ public class VariableInMethod extends BaseElementTests{ assertEquals(0, variable.getModifier()); assertEquals("int", variable.getType().getValue()); assertEquals("i", variable.getName().getValue()); - assertEquals("4", variable.getValue().getToken().getValue()); + assertEquals("4", ((StaticValue)variable.getValue()).getToken().getValue()); variable = checkVariable(elements.get(1)); assertEquals(0, variable.getModifier()); @@ -114,13 +115,13 @@ public class VariableInMethod extends BaseElementTests{ assertEquals(0, variable.getModifier()); assertEquals("int", variable.getType().getValue()); assertEquals("i", variable.getName().getValue()); - assertEquals("4", variable.getValue().getToken().getValue()); + assertEquals("4", ((StaticValue)variable.getValue()).getToken().getValue()); variable = checkVariable(elements.get(1)); assertEquals(0, variable.getModifier()); assertEquals("int", variable.getType().getValue()); assertEquals("j", variable.getName().getValue()); - assertEquals("6", variable.getValue().getToken().getValue()); + assertEquals("6", ((StaticValue)variable.getValue()).getToken().getValue()); }); register( @@ -145,13 +146,13 @@ public class VariableInMethod extends BaseElementTests{ assertEquals(0, variable.getModifier()); assertEquals("int", variable.getType().getValue()); assertEquals("i", variable.getName().getValue()); - assertEquals("4", variable.getValue().getToken().getValue()); + assertEquals("4", ((StaticValue)variable.getValue()).getToken().getValue()); variable = checkVariable(elements.get(1)); assertEquals(0, variable.getModifier()); assertEquals("int", variable.getType().getValue()); assertEquals("j", variable.getName().getValue()); - assertEquals("6", variable.getValue().getToken().getValue()); + assertEquals("6", ((StaticValue)variable.getValue()).getToken().getValue()); variable = checkVariable(elements.get(2)); assertEquals(0, variable.getModifier());