diff --git a/.classpath b/.classpath index 51a8bba..c7f1dff 100644 --- a/.classpath +++ b/.classpath @@ -2,5 +2,7 @@ + + diff --git a/src/be/jeffcheasey88/peeratcode/parser/TokenValidator.java b/src/be/jeffcheasey88/peeratcode/parser/TokenValidator.java index b7792f2..81d9b0d 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/TokenValidator.java +++ b/src/be/jeffcheasey88/peeratcode/parser/TokenValidator.java @@ -6,6 +6,7 @@ import java.util.function.Function; public class TokenValidator{ public static int MAX_VALIDATE = 0; + public static int TOKENS = 0; private Token[] elements; private int index; @@ -29,7 +30,10 @@ public class TokenValidator{ public boolean validate(Function action){ if(validated >= this.elements.length) return false; if(action.apply(this.elements[validated])){ - if(validated+1 > MAX_VALIDATE) MAX_VALIDATE = validated+1; + if(validated+1 > MAX_VALIDATE){ + MAX_VALIDATE = validated+1; + TOKENS = elements.length; + } this.validated++; return true; } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaFile.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaFile.java index 3721b07..3021007 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaFile.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaFile.java @@ -20,19 +20,19 @@ public class JavaFile extends JavaElement{ JavaFile setPackage(Bag bag){ this.pack = bag.>get(); - System.out.println("setPackage "+pack); +// System.out.println("setPackage "+pack); return this; } JavaFile addImport(Bag bag){ this.imports.add(bag.>get()); - System.out.println("addImport "+imports.get(imports.size()-1)); +// System.out.println("addImport "+imports.get(imports.size()-1)); return this; } Class setClass(Class clazz){ this.mainClazz = clazz; - System.out.println("setClass "+clazz); +// System.out.println("setClass "+clazz); return clazz; } } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java index e8e732a..72ad5c0 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java @@ -11,6 +11,7 @@ import java.util.List; import be.jeffcheasey88.peeratcode.parser.Parser; import be.jeffcheasey88.peeratcode.parser.Token; +import be.jeffcheasey88.peeratcode.parser.TokenType; import be.jeffcheasey88.peeratcode.parser.Tokenizer; import be.jeffcheasey88.peeratcode.parser.state.BuilderStateTree; import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree; @@ -20,6 +21,10 @@ public class JavaParser extends Parser { public static long time; + static { + time = System.currentTimeMillis(); + } + public static void main(String[] args) throws Exception{ File file = new File("C:\\Users\\jeffc\\eclipse-workspace\\peer-at-code-backend\\src\\be\\jeffcheasey88\\peeratcode\\routes\\Result.java"); BufferedReader reader = new BufferedReader(new FileReader(file)); @@ -49,12 +54,43 @@ public class JavaParser extends Parser { })) mod = true; return mod; }); + modifier.end((a,b) -> a); + + StateTree type = new StateTree().then((validator) -> + validator.validate( + (token) -> token.getType().equals(TokenType.NAME), + (bag, token) -> bag.set(token))); + 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) -> + validator.validate( + (token) -> token.getType().equals(TokenType.NAME), + (bag, token) -> bag.set(token))); + StateTree type_generic_split = type_generic_name.then((validator) -> validator.validate( + (token) -> token.getValue().equals(","), + (bag, token) -> bag.set(bag.get().concat(token)))); + StateTree type_generic_end = type_generic_name.then((validator) -> validator.validate( + (token) -> token.getValue().equals(">"), + (bag, token) -> bag.set(bag.get().concat(token)))).loop(); + + 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); + type_generic_end.then(type_generic_split); + type_generic_end.end((a,b) -> a); StateTree clazz_ = new StateTree<>(); StateTree clazz = new StateTree<>(); - clazz_.then(new RedirectStateTree<>(modifier, (bag) -> "modifier")); + StateTree clazz_base = clazz.then((validator) -> validator.validate((token) -> token.getValue().equals("class"))) + .then(new RedirectStateTree<>(type, (bag) -> "name")); + clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) + .end((javafile, bag) -> new Class(bag)); + StateTree clazz_mod = clazz_.then(new RedirectStateTree<>(modifier, (bag) -> "modifier")); + clazz_mod.then(clazz); StateTree importState = new StateTree<>(); importState.then((validator) -> { @@ -94,7 +130,7 @@ public class JavaParser extends Parser { return false; }).end((javafile, bag) -> javafile.setPackage(bag)); pack.multiple(importState); - pack.thenNoChild(clazz_); + pack.multiple(clazz_); System.out.println((System.currentTimeMillis()-time)+"ms"); diff --git a/src/be/jeffcheasey88/peeratcode/parser/state/StateTree.java b/src/be/jeffcheasey88/peeratcode/parser/state/StateTree.java index d9fb928..77fd960 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/state/StateTree.java +++ b/src/be/jeffcheasey88/peeratcode/parser/state/StateTree.java @@ -25,7 +25,6 @@ public class StateTree{ TokenValidator validator = new TokenValidator(tokenizer.getTokens().toArray(new Token[0])); while(validator.hasNext()){ BuilderStateTree build = internalSeed(validator, container); - System.out.println("Validate "+validator.MAX_VALIDATE+"/"+tokenizer.getTokens().size()+" tokens !"); if(build == null) break; build.build(validator, container); } diff --git a/test/GlobalCover.java b/test/GlobalCover.java new file mode 100644 index 0000000..f4e05df --- /dev/null +++ b/test/GlobalCover.java @@ -0,0 +1,47 @@ +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import be.jeffcheasey88.peeratcode.parser.TokenValidator; +import be.jeffcheasey88.peeratcode.parser.java.JavaFile; +import be.jeffcheasey88.peeratcode.parser.java.JavaParser; + +class GlobalCover { + + @Test + void workspace() throws Exception{ + JavaParser parser = new JavaParser(); + + List files = files(new File("C:\\Users\\jeffc\\eclipse-workspace")); + int validated = 0; + double tokens = 0; + int count = 0; + + long time = System.currentTimeMillis(); + for(File file : files){ + if(file.getName().endsWith(".java")){ + parser.parse(new BufferedReader(new FileReader(file)), new JavaFile()); + validated += TokenValidator.MAX_VALIDATE; + tokens += TokenValidator.TOKENS; + TokenValidator.MAX_VALIDATE = 0; + TokenValidator.TOKENS = 0; + count++; + } + } + System.out.println("Load time : "+((System.currentTimeMillis()-time)/1000.0)+"s"); + System.out.println(((validated/tokens)*100.0)+"% validated in "+count+" files !"); + } + + private List files(File dir){ + List result = new ArrayList<>(); + if(dir.isDirectory()){ + for(File file : dir.listFiles()) result.addAll(files(file)); + }else result.add(dir); + return result; + } + +}