From 28dd9cd7b1fd6c36d164cf4f2401a89d707f077a Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Wed, 26 Jul 2023 10:42:55 +0200 Subject: [PATCH] AutoTest -> 19.669% --- .../peeratcode/parser/java/JavaParser.java | 79 +++++++++++++------ test/GlobalCover.java | 22 ++++-- 2 files changed, 70 insertions(+), 31 deletions(-) diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java index 3d584b3..e7e2356 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java @@ -20,7 +20,7 @@ import be.jeffcheasey88.peeratcode.parser.state.InitialStateTree; import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree; import be.jeffcheasey88.peeratcode.parser.state.StateTree; -public class JavaParser extends Parser { +public class JavaParser extends Parser { public static long time; @@ -119,7 +119,6 @@ public class JavaParser extends Parser { type_.end((a,b) -> a); type_generic_name.then(type_array_begin); - type_generic_begin.then(type_generic_name); type_generic_split.then(type_generic_name); type_generic_end.end((a,b) -> a); type_generic_end.then(type_generic_name); @@ -135,12 +134,28 @@ public class JavaParser extends Parser { //VALUE StateTree value = new StateTree<>(); + + StateTree value_container = new StateTree<>(); + value_container.then((validator) -> validator.validate((token) -> token.getValue().equals("!"))).then(value_container); + StateTree value_left = value_container.then(new RedirectStateTree<>(value, (global, local) -> global.set(null))); + value_left.end((a,b) -> a); + StateTree value_equals = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("="))); + value_equals.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))).end((a,b) -> a); + value_equals.then((validator) -> validator.validate((token) -> token.getValue().equals("="))).then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))).end((a,b) -> a); + StateTree value_minus = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("<"))).loop(); + value_minus.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))).end((a,b) -> a); + value_minus.then((validator) -> validator.validate((token) -> token.getValue().equals("="))).then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))).end((a,b) -> a); + StateTree value_max = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals(">"))).loop(); + value_max.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))).end((a,b) -> a); + value_max.then((validator) -> validator.validate((token) -> token.getValue().equals("="))).then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))).end((a,b) -> a); + value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("!")) && validator.validate((token) -> token.getValue().equals("="))).then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))).end((a,b) -> a); + value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("|")) && validator.validate((token) -> token.getValue().equals("|"))).then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))).end((a,b) -> a); + StateTree value_instance = value.then((validator) -> validator.validate((token) -> token.getValue().equals("new"))); StateTree value_name = new StateTree(); value.then(value_name); value_instance = value_instance - .then(new RedirectStateTree<>(value_name, (global, local) -> { - })); + .then(new RedirectStateTree<>(value_name, (global, local) -> global.set(null))); value_name = value_name.then((validator) -> validator.validate( (token) -> token.getType().equals(TokenType.NAME), (bag, token) -> { @@ -150,23 +165,33 @@ public class JavaParser extends Parser { bag.set(current); })); value_name.end((a,b) -> a); - value_instance.end((a,b) -> a); - value_instance.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) + StateTree instance = value_instance.end((a,b) -> a); + instance.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) .end((a,b) -> a) .multiple(clazz_container); - StateTree value_call = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("."))); value_call.then(value_name); + StateTree value_array = value_name.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("]"))); + value_array.end((a,b) -> a); + value_array.then(value_call); + StateTree value_arg_begin = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("("))); StateTree value_arg_end = value_arg_begin.then((validator) -> validator.validate((token) -> token.getValue().equals(")"))); value_arg_end.end((a,b) -> a); value_arg_end.then(value_call); 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); - StateTree value_arg = value_arg_begin.then(new RedirectStateTree<>(value, (global, local) -> { + value_generic_end.then(value_generic_name); + value_generic_end.then(value_generic_split); + value_generic_name.then(value_generic_begin); + 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); @@ -174,6 +199,7 @@ public class JavaParser extends Parser { })); value_arg.then((validator) -> validator.validate((token) -> token.getValue().equals(","))) .then(value_arg); + value_arg.then(value_arg_end); value.then((validator) -> { if(validator.validate((token) -> token.getValue().equals("'"))){ validator.validate((token) -> token.getValue().equals("\\")); @@ -206,9 +232,10 @@ public class JavaParser extends Parser { //OPERATION StateTree operation = new StateTree<>(); - StateTree operation_name = operation.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME))); + StateTree operation_name = operation.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))); + operation_name.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end((a,b) -> a); operation_name.then((validator) -> validator.validate((token) -> token.getValue().equals("="))) - .then(new RedirectStateTree<>(value, (global, local) -> global.set(null))) + .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) .then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) .end((a,b) -> a); StateTree operation_call = operation_name.then((validator) -> validator.validate((token) -> token.getValue().equals("."))); @@ -218,20 +245,22 @@ public class JavaParser extends Parser { operation_end.then(operation_call); operation_end.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) .end((a,b) -> a); - StateTree operation_value = operation_begin.then(new RedirectStateTree<>(value, (global, local) -> global.set(null))); + StateTree operation_value = operation_begin.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))); operation_value.then(operation_end); - operation_value.then((validator) -> validator.validate((token) -> token.getValue().equals("."))).then(operation_value); + operation_value.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(operation_value); - operation.then((validator) -> validator.validate((token) -> token.getValue().equals("return"))) - .then(new RedirectStateTree<>(value, (global, local) -> global.set(null))) + StateTree operation_return = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("return"))); + operation_return.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) .then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) .end((a,b) -> a); + operation_return.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) + .end((a,b) -> a); operation.then((validator) -> validator.validate((token) -> token.getValue().equals("throw"))) - .then(new RedirectStateTree<>(value, (global, local) -> global.set(null))) + .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) .then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) .end((a,b) -> a); operation.then((validator) -> validator.validate((token) -> token.getValue().equals("do"))) - .then(new RedirectStateTree<>(value, (global, local) -> global.set(null))) + .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) .then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) .end((a,b) -> a); operation.then((validator) -> validator.validate((token) -> token.getValue().equals("else"))) @@ -246,28 +275,29 @@ public class JavaParser extends Parser { .end((a,b) -> a); StateTree operation_if = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("if"))) .then((validator) -> validator.validate((token) -> token.getValue().equals("("))) - .then(new RedirectStateTree<>(value, (global, local) -> global.set(null))) + .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) .then((validator) -> validator.validate((token) -> token.getValue().equals(")"))) .end((a,b) -> a); operation_if.then(operation); operation_if.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) - .then(new RedirectStateTree<>(function_container, (global, local) -> global.set(null))) + .end((a,b) -> a) + .multiple(function_container) .then((validator) -> validator.validate((token) -> token.getValue().equals("}"))) .end((a,b) -> a); operation.then((validator) -> validator.validate((token) -> token.getValue().equals("for"))) .then((validator) -> validator.validate((token) -> token.getValue().equals("("))) - .then(new RedirectStateTree<>(value, (global, local) -> global.set(null))) + .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) .then((validator) -> validator.validate((token) -> token.getValue().equals(")"))) .end((a,b) -> a); operation.then((validator) -> validator.validate((token) -> token.getValue().equals("while"))) .then((validator) -> validator.validate((token) -> token.getValue().equals("("))) - .then(new RedirectStateTree<>(value, (global, local) -> global.set(null))) + .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) .then((validator) -> validator.validate((token) -> token.getValue().equals(")"))) .end((a,b) -> a); operation.then((validator) -> validator.validate((token) -> token.getValue().equals("synchronized"))) .then((validator) -> validator.validate((token) -> token.getValue().equals("("))) - .then(new RedirectStateTree<>(value, (global, local) -> global.set(null))) + .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) .then((validator) -> validator.validate((token) -> token.getValue().equals(")"))) .end((a,b) -> a); @@ -284,7 +314,7 @@ public class JavaParser extends Parser { StateTree variable_split = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals(","))); variable_split.then(variable_name); StateTree variable_value = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals("="))) - .then(new RedirectStateTree<>(value, (global, local) -> global.set("value", local))); + .then(new RedirectStateTree<>(value_container, (global, local) -> global.set("value", local))); variable_value.then(variable_split); variable_value.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) .end((a,b) -> a); @@ -423,7 +453,8 @@ public class JavaParser extends Parser { } public static void main(String[] args) throws Exception{ - File file = new File("C:\\Users\\jeffc\\eclipse-workspace\\peer-at-code-parseur\\src\\be\\jeffcheasey88\\peeratcode\\parser\\java\\JavaParser.java"); + File file = new File("C:\\Users\\jeffc\\eclipse-workspace\\AdminSys\\src\\be\\lhoistxavier\\Main.java"); + BufferedReader reader = new BufferedReader(new FileReader(file)); time = System.currentTimeMillis(); diff --git a/test/GlobalCover.java b/test/GlobalCover.java index 2e03eb8..fb48cc8 100644 --- a/test/GlobalCover.java +++ b/test/GlobalCover.java @@ -3,34 +3,42 @@ import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; -import java.io.OutputStreamWriter; -import java.net.ServerSocket; -import java.net.Socket; import java.util.ArrayList; import java.util.List; -import org.junit.jupiter.api.Test; - +import be.jeffcheasey88.peeratcode.parser.Parser; import be.jeffcheasey88.peeratcode.parser.TokenValidator; +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.JavaFile; import be.jeffcheasey88.peeratcode.parser.java.JavaParser; class GlobalCover { + + public static void main(String[] args) throws Exception { + new GlobalCover().workspace(); + } - @Test void workspace() throws Exception{ List files = files(new File("C:\\Users\\jeffc\\eclipse-workspace")); long validated = 0; long tokens = 0; int count = 0; + boolean hasWriten = false; + long time = System.currentTimeMillis(); for(File file : files){ if(file.getName().endsWith(".java")){ BufferedReader reader = new BufferedReader(new FileReader(file)); - new JavaParser().parse(reader, new JavaFile()); + Parser parser = new JavaParser(); + parser.parse(reader, new JavaFile()); reader.close(); + if((!hasWriten) && TokenValidator.MAX_VALIDATE < TokenValidator.TOKENS){ + parser.build(new BufferedWriter(new FileWriter(new File("/home/ParserV2.txt")))); + hasWriten = true; + } + validated += TokenValidator.MAX_VALIDATE; tokens += TokenValidator.TOKENS; System.out.println(file+" "+validated+" / "+tokens);