From 8d0e9f0ee75bc1dba4e2432c21e582cd906a38b3 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Wed, 19 Jul 2023 11:17:14 +0200 Subject: [PATCH] Redirect bag -> more custom & Class with name, extends, implements --- .../peeratcode/parser/java/Class.java | 16 +++----- .../peeratcode/parser/java/JavaParser.java | 33 +++++++++++---- .../parser/state/RedirectStateTree.java | 8 ++-- .../generator/ParserComposantGenerator.java | 40 +++++++++---------- test/GlobalCover.java | 2 +- 5 files changed, 56 insertions(+), 43 deletions(-) diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/Class.java b/src/be/jeffcheasey88/peeratcode/parser/java/Class.java index efbf95b..5c82a17 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/Class.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/Class.java @@ -10,21 +10,17 @@ public class Class extends JavaElement{ private List annotations; - private String name; - private String extend; - private String implement; + private Token name; + private Token extend; + private Token implement; private List elements; public Class(Bag bag){ - this.name = bag.get("name").get().getValue(); + this.name = bag.get("name"); + this.extend = bag.get("extend"); + this.implement = bag.get("implement"); - Bag extendBag = bag.get("extend"); - if(extendBag != null) this.extend = extendBag.get().getValue(); - - Bag implementBag = bag.get("implement"); - if(implementBag != null) this.implement = implementBag.get().getValue(); - this.annotations = new ArrayList<>(); this.elements = new ArrayList<>(); } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java index 72ad5c0..af9b70c 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java @@ -43,7 +43,8 @@ public class JavaParser extends Parser { public JavaParser(){ Tokenizer tokenizer = new Tokenizer(); - StateTree modifier = new StateTree().then((validator) -> { + StateTree modifier = new StateTree(); + modifier.then((validator) -> { boolean mod = false; while(validator.validate( (token) -> getModifier(token.getValue()) > 0, @@ -53,14 +54,14 @@ public class JavaParser extends Parser { bag.set(current == null ? m : current+m); })) mod = true; return mod; - }); - modifier.end((a,b) -> a); + }).end((a,b) -> a); - StateTree type = new StateTree().then((validator) -> + StateTree type = new StateTree(); + StateTree type_ = type.then((validator) -> validator.validate( (token) -> token.getType().equals(TokenType.NAME), (bag, token) -> bag.set(token))); - StateTree type_generic_begin = type.then((validator) -> validator.validate( + StateTree type_generic_begin = type_.then((validator) -> validator.validate( (token) -> token.getValue().equals("<"), (bag, token) -> bag.set(bag.get().concat(token)))); StateTree type_generic_name = type_generic_begin.then((validator) -> @@ -74,7 +75,7 @@ public class JavaParser extends Parser { (token) -> token.getValue().equals(">"), (bag, token) -> bag.set(bag.get().concat(token)))).loop(); - type.end((a,b) -> a); + type_.end((a,b) -> a); type_generic_begin.then(type_generic_name); type_generic_split.then(type_generic_name); type_generic_end.then(type_generic_name); @@ -85,11 +86,27 @@ public class JavaParser extends Parser { StateTree clazz = new StateTree<>(); StateTree clazz_base = clazz.then((validator) -> validator.validate((token) -> token.getValue().equals("class"))) - .then(new RedirectStateTree<>(type, (bag) -> "name")); + .then(new RedirectStateTree<>(type, (global, local) -> global.set("name", local.get()))); clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) .end((javafile, bag) -> new Class(bag)); + StateTree clazz_implement = clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("implements"))); + StateTree clazz_implement_name = clazz_implement.then(new RedirectStateTree<>(type, (global, local) -> { + Token token = global.get("implement"); + if(token == null) token = local.get(); + else token = token.concat(local.get()); + global.set("implement", token); + })); + clazz_implement_name.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(clazz_implement_name); + clazz_implement_name.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) + .end((javafile, bag) -> new Class(bag)); + StateTree clazz_extend = clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("extends"))) + .then(new RedirectStateTree<>(type, (global, local) -> global.set("extend", local))); + clazz_extend.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) + .end((javafile, bag) -> new Class(bag)); + clazz_extend.then(clazz_implement); - StateTree clazz_mod = clazz_.then(new RedirectStateTree<>(modifier, (bag) -> "modifier")); + + StateTree clazz_mod = clazz_.then(new RedirectStateTree<>(modifier, (global, local) -> global.set("modifier", local))); clazz_mod.then(clazz); StateTree importState = new StateTree<>(); diff --git a/src/be/jeffcheasey88/peeratcode/parser/state/RedirectStateTree.java b/src/be/jeffcheasey88/peeratcode/parser/state/RedirectStateTree.java index 40ab8c0..e9779c2 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/state/RedirectStateTree.java +++ b/src/be/jeffcheasey88/peeratcode/parser/state/RedirectStateTree.java @@ -1,6 +1,6 @@ package be.jeffcheasey88.peeratcode.parser.state; -import java.util.function.Function; +import java.util.function.BiConsumer; import be.jeffcheasey88.peeratcode.parser.Bag; import be.jeffcheasey88.peeratcode.parser.TokenValidator; @@ -8,9 +8,9 @@ import be.jeffcheasey88.peeratcode.parser.TokenValidator; public class RedirectStateTree extends StateTree{ private StateTree redirect; - private Function group; + private BiConsumer group; - public RedirectStateTree(StateTree redirect, Function group){ + public RedirectStateTree(StateTree redirect, BiConsumer group){ super(); this.redirect = redirect; this.group = group; @@ -26,7 +26,7 @@ public class RedirectStateTree extends StateTree{ Object builded = redirect.internalSeed(branch, (E) element); if(builded == null) return null; - currentBag.set(this.group.apply(currentBag), localBag); + this.group.accept(currentBag, localBag); branch.setBag(currentBag); validator.merge(branch); diff --git a/src/be/jeffcheasey88/peeratcode/parser/state/generator/ParserComposantGenerator.java b/src/be/jeffcheasey88/peeratcode/parser/state/generator/ParserComposantGenerator.java index 5a4a111..b49959c 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/state/generator/ParserComposantGenerator.java +++ b/src/be/jeffcheasey88/peeratcode/parser/state/generator/ParserComposantGenerator.java @@ -137,8 +137,8 @@ public class ParserComposantGenerator { parent.currentDeclared = comp; return parent; - }).then(new RedirectStateTree<>(sub_operations, (bag) -> { - return "operations"; + }).then(new RedirectStateTree<>(sub_operations, (global, local) -> { + global.set("operations", local); })) .end((composant, bag) -> { ((Composant)composant).currentDeclared = null; @@ -168,17 +168,17 @@ public class ParserComposantGenerator { StateTree op_childs = new StateTree<>(); op_childs.then((v) -> v.validate((t) -> t.getValue().equals("("))) - .then(new RedirectStateTree<>(operations, (bag) -> { - return "operations"; + .then(new RedirectStateTree<>(operations, (global, local) -> { + global.set("operations", local); })) .then((v) -> v.validate((t) -> t.getValue().equals(")"))) .end((composant, bag) -> { return composant; }); - operation.then(new RedirectStateTree<>(gotoValidator, (bag) -> "goto")).end((a,b) -> a); + operation.then(new RedirectStateTree<>(gotoValidator, (global, local) -> global.set("goto", local))).end((a,b) -> a); - StateTree op_validator = operation.then(new RedirectStateTree<>(validator, (bag) -> "validator")); + StateTree op_validator = operation.then(new RedirectStateTree<>(validator, (global, local) -> global.set("validator", local))); op_validator.end((composant, bag) -> { Validator result = bag.get("validator").get(); bag.set(result); @@ -186,14 +186,14 @@ public class ParserComposantGenerator { result.composant = comp; return comp; }).then(op_childs); - op_validator.then(new RedirectStateTree<>(namedValidator, (bag) -> "namedValidator")).end((composant, bag) -> { + op_validator.then(new RedirectStateTree<>(namedValidator, (global, local) -> global.set("namedValidator", local))).end((composant, bag) -> { NamedElement result = null; (result = bag.get("namedValidator").get()).child = bag.get("validator").get(); bag.set(result); return new Composant(); }).then(op_childs); - StateTree op_call = operation.then(new RedirectStateTree<>(methodCall, (bag) -> "methodCall")); + StateTree op_call = operation.then(new RedirectStateTree<>(methodCall, (global, local) -> global.set("methodCall", local))); op_call.end((composant, bag) -> { ComposantCall result = bag.get("methodCall").get(); bag.set(result); @@ -201,14 +201,14 @@ public class ParserComposantGenerator { result.composant = comp; return comp; }).then(op_childs); - op_call.then(new RedirectStateTree<>(namedValidator, (bag) -> "namedValidator")).end((composant, bag) -> { + op_call.then(new RedirectStateTree<>(namedValidator, (global, local) -> global.set("namedValidator", local))).end((composant, bag) -> { NamedElement result = null; (result = bag.get("namedValidator").get()).child = bag.get("methodCall").get(); bag.set(result); return new Composant(); }).then(op_childs); - StateTree op_redirect = operation.then(new RedirectStateTree<>(redirection, (bag) -> "redirection")); + StateTree op_redirect = operation.then(new RedirectStateTree<>(redirection, (global, local) -> global.set("redirection", local))); op_redirect.end((composant, bag) -> { Redirection result = bag.get("redirection").get(); bag.set(result); @@ -216,18 +216,18 @@ public class ParserComposantGenerator { result.composant = comp; return comp; }).then(op_childs); - op_redirect.then(new RedirectStateTree<>(namedValidator, (bag) -> "namedValidator")).end((composant, bag) -> { + op_redirect.then(new RedirectStateTree<>(namedValidator, (global, local) -> global.set("namedValidator", local))).end((composant, bag) -> { NamedElement result = null; (result = bag.get("namedValidator").get()).child = bag.get("redirection").get(); bag.set(result); return new Composant(); }).then(op_childs); - StateTree suit = operations.then(new RedirectStateTree<>(operation, (bag) -> { - Integer count = bag.get("count"); + StateTree suit = operations.then(new RedirectStateTree<>(operation, (global, local) -> { + Integer count = global.get("count"); if(count == null) count = 0; - bag.set("count", count+1); - return "operation"+count; + global.set("count", count+1); + global.set("operation"+count, local); })).loop(); suit.then((v) -> v.validate((t) -> t.getValue().equals(","))) .end((composant, bag) -> { @@ -280,11 +280,11 @@ public class ParserComposantGenerator { }); - StateTree sub_suit = sub_operations.then(new RedirectStateTree<>(operation, (bag) -> { - Integer count = bag.get("count"); + StateTree sub_suit = sub_operations.then(new RedirectStateTree<>(operation, (global, local) -> { + Integer count = global.get("count"); if(count == null) count = 0; - bag.set("count", count+1); - return "operation"+count; + global.set("count", count+1); + global.set("operation"+count, local); })).loop(); sub_suit.then((v) -> v.validate((t) -> t.getValue().equals(","))) .end((composant, bag) -> { @@ -353,7 +353,7 @@ public class ParserComposantGenerator { child.parent = base; base.register(child.title, child); return child; - }).then(new RedirectStateTree<>(op_childs, (bag) -> "content")) + }).then(new RedirectStateTree<>(op_childs, (global, local) -> global.set("content", local))) .then(composant); diff --git a/test/GlobalCover.java b/test/GlobalCover.java index f4e05df..2d3b135 100644 --- a/test/GlobalCover.java +++ b/test/GlobalCover.java @@ -33,7 +33,7 @@ class GlobalCover { } } System.out.println("Load time : "+((System.currentTimeMillis()-time)/1000.0)+"s"); - System.out.println(((validated/tokens)*100.0)+"% validated in "+count+" files !"); + System.out.printf("%.3f%% ("+validated+") validated in "+count+" files !\n", ((validated/tokens)*100.0)); } private List files(File dir){