diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java index 744aa27..c9327d6 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java @@ -12,6 +12,7 @@ import java.util.List; import be.jeffcheasey88.peeratcode.parser.Parser; import be.jeffcheasey88.peeratcode.parser.Token; import be.jeffcheasey88.peeratcode.parser.Tokenizer; +import be.jeffcheasey88.peeratcode.parser.state.BuilderStateTree; import be.jeffcheasey88.peeratcode.parser.state.StateTree; public class JavaParser extends Parser { @@ -36,6 +37,7 @@ public class JavaParser extends Parser { public JavaParser(){ Tokenizer tokenizer = new Tokenizer(); + StateTree clazz = new StateTree<>(); StateTree importState = new StateTree<>(); importState.then((validator) -> { @@ -60,7 +62,7 @@ public class JavaParser extends Parser { StateTree main = new StateTree<>(); - main.then((validator) -> { + BuilderStateTree pack = main.then((validator) -> { if(validator.validate( (token) -> token.getValue().equals("package"), (bag, token) -> bag.set(new LinkedList<>()))){ @@ -73,8 +75,9 @@ public class JavaParser extends Parser { return validator.validate((token) -> token.getValue().equals(";")); } return false; - }).end((javafile, bag) -> javafile.setPackage(bag)) - .multiple(importState); + }).end((javafile, bag) -> javafile.setPackage(bag)); + pack.multiple(importState); + pack.thenNoChild(clazz); System.out.println((System.currentTimeMillis()-time)+"ms"); diff --git a/src/be/jeffcheasey88/peeratcode/parser/state/BuilderStateTree.java b/src/be/jeffcheasey88/peeratcode/parser/state/BuilderStateTree.java index d33b9b8..1e82f7c 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/state/BuilderStateTree.java +++ b/src/be/jeffcheasey88/peeratcode/parser/state/BuilderStateTree.java @@ -35,6 +35,24 @@ public class BuilderStateTree extends StateTree{ } void internalSeedNoChilds(TokenValidator validator, E element){ + if(multiple != null){ + TokenValidator branch = validator.branch(); + if(multiple.checker == null){ + BuilderStateTree builded; + while((builded = multiple.internalSeed(branch, element)) != null){ + validator.merge(branch); + builded.build(validator, element); + } + }else{ + while(multiple.checker.apply(branch)){ + BuilderStateTree builded = multiple.internalSeed(branch, element); + if(builded != null){ + validator.merge(branch); + builded.build(validator, element); + } + } + } + } for(StateTree child : this.childs){ TokenValidator branch = validator.branch(); if(child.checker == null){ @@ -55,25 +73,6 @@ public class BuilderStateTree extends StateTree{ } } } - - if(multiple != null){ - TokenValidator branch = validator.branch(); - if(multiple.checker == null){ - BuilderStateTree builded; - while((builded = multiple.internalSeed(branch, element)) != null){ - validator.merge(branch); - builded.build(validator, element); - } - return; - } - while(multiple.checker.apply(branch)){ - BuilderStateTree builded = multiple.internalSeed(branch, element); - if(builded != null){ - validator.merge(branch); - builded.build(validator, element); - } - } - } } public > StateTree thenNoChild(StateTree child){