StateTree -> reduce trace by recalling Builder on base call

This commit is contained in:
jeffcheasey88 2023-07-16 16:22:52 +02:00
parent 0327cd8a28
commit 255e78f034
4 changed files with 10 additions and 10 deletions

View file

@ -21,7 +21,6 @@ public class JavaFile extends JavaElement{
JavaFile setPackage(Bag bag){ JavaFile setPackage(Bag bag){
this.pack = bag.<List<Token>>get(); this.pack = bag.<List<Token>>get();
System.out.println("setPackage "+pack); System.out.println("setPackage "+pack);
System.out.println(Thread.currentThread().getStackTrace().length+" traces");
return this; return this;
} }

View file

@ -18,7 +18,7 @@ public class BinaryStateTree<E> extends StateTree<E>{
} }
@Override @Override
<B> B internalSeed(TokenValidator validator, E element){ BuilderStateTree<E, ?> internalSeed(TokenValidator validator, E element){
return ((this.condition.apply(validator)) ? success : fail).internalSeed(validator, element); return ((this.condition.apply(validator)) ? success : fail).internalSeed(validator, element);
} }

View file

@ -17,7 +17,7 @@ public class RedirectStateTree<E, T extends E> extends StateTree<T>{
} }
@Override @Override
<B> B internalSeed(TokenValidator validator, T element){ BuilderStateTree<T, ?> internalSeed(TokenValidator validator, T element){
Bag currentBag = validator.getBag(); Bag currentBag = validator.getBag();
Bag localBag = new Bag(); Bag localBag = new Bag();

View file

@ -25,32 +25,33 @@ public class StateTree<E>{
TokenValidator validator = new TokenValidator(tokenizer.getTokens().toArray(new Token[0])); TokenValidator validator = new TokenValidator(tokenizer.getTokens().toArray(new Token[0]));
while(validator.hasNext()) { while(validator.hasNext()) {
System.out.println("seed"); System.out.println("seed");
E build = internalSeed(validator, container); BuilderStateTree<E, ?> build = internalSeed(validator, container);
System.out.println("Validate "+validator.MAX_VALIDATE+"/"+tokenizer.getTokens().size()+" tokens !"); System.out.println("Validate "+validator.MAX_VALIDATE+"/"+tokenizer.getTokens().size()+" tokens !");
if(build == null) break; if(build == null) break;
build.build(validator, container);
} }
} }
<B> B internalSeed(TokenValidator validator, E element){ BuilderStateTree<E, ?> internalSeed(TokenValidator validator, E element){
for(StateTree<E> child : this.childs){ for(StateTree<E> child : this.childs){
TokenValidator branch = validator.branch(); TokenValidator branch = validator.branch();
if(child.checker == null){ if(child.checker == null){
E builded = child.internalSeed(branch, element); BuilderStateTree<E, ?> builded = child.internalSeed(branch, element);
if(builded != null){ if(builded != null){
validator.merge(branch); validator.merge(branch);
return (B) builded; return builded;
} }
continue; continue;
} }
if(child.checker.apply(branch)){ if(child.checker.apply(branch)){
E builded = child.internalSeed(branch, element); BuilderStateTree<E, ?> builded = child.internalSeed(branch, element);
if(builded != null){ if(builded != null){
validator.merge(branch); validator.merge(branch);
return (B) builded; return builded;
} }
} }
} }
if(this.builder != null) return (B) this.builder.build(validator, element); if(this.builder != null) return this.builder;
return null; return null;
} }