diff --git a/src/dev/peerat/parser/java/JavaParser.java b/src/dev/peerat/parser/java/JavaParser.java index c1ff511..b946ce1 100644 --- a/src/dev/peerat/parser/java/JavaParser.java +++ b/src/dev/peerat/parser/java/JavaParser.java @@ -307,7 +307,23 @@ public class JavaParser extends Parser { StateTree value_call = value_name.then((validator) -> validator.validate( (token) -> token.getValue().equals("."), - (bag, token) -> bag.set(bag.get().concat(token)))); + (bag, token) -> { + Value prev = bag.get("prev"); + if(prev == null){ + bag.set("prev", new Value(bag.get())); + }else{ + Integer paramters = bag.get("args"); + List list = null; + if(paramters != null){ + list = new ArrayList<>(); + for(int i = 0; i < paramters; i++) list.add(bag.get("arg"+i).get()); + bag.remove("args"); + } + MethodCallValue methodCall = new MethodCallValue(prev, bag.get(), list); + bag.set("prev", methodCall); + } + bag.set(token); + })); value_call.end((a,b) -> a); value_call.then(new RedirectStateTree<>(gen, (global, local) -> global.set(global.get().concat(local.get())))).then(value_name); value_call.then(value_name); @@ -337,9 +353,7 @@ public class JavaParser extends Parser { for(int i = 0; i < paramters; i++) list.add(bag.get("arg"+i).get()); } - MethodCallValue methodCall = new MethodCallValue(bag.get(), list); - //take arguments from bag - System.out.println("MethodCall "+bag); + MethodCallValue methodCall = new MethodCallValue(bag.get("prev"), bag.get(), list); bag.set(methodCall); return null; }); @@ -1167,7 +1181,7 @@ public class JavaParser extends Parser { } public static void main(String[] args) throws Exception{ - File file = new File("C:\\Users\\jeffc\\eclipse-workspace\\"); + File file = new File("C:\\Users\\jeffc\\eclipse-workspace\\peer-at-code-backend\\src\\dev\\peerat\\backend\\routes\\users\\ChangePassword.java"); BufferedReader reader = new BufferedReader(new FileReader(file)); @@ -1180,7 +1194,7 @@ public class JavaParser extends Parser { List values = new ArrayList<>(); jFile.findAll((e) -> e instanceof Value, values); System.out.println("Find "+values.size()+" values"); - for(Value v : values) System.out.println(v); + for(Value v : values) System.out.println(v.getClass().getSimpleName()+" ->"+v); System.out.println((System.currentTimeMillis()-time)+"ms"); diff --git a/src/dev/peerat/parser/java/Value.java b/src/dev/peerat/parser/java/Value.java index 9fb9f7c..c92c20b 100644 --- a/src/dev/peerat/parser/java/Value.java +++ b/src/dev/peerat/parser/java/Value.java @@ -152,14 +152,20 @@ public class Value extends JavaElement{ public static class MethodCallValue extends Value{ + private Value base; private Token token; private List parameters; - public MethodCallValue(Token token, List parameters){ + public MethodCallValue(Value base, Token token, List parameters){ + this.base = base; this.token = token; this.parameters = parameters; } + private Value base(){ + return this.base; + } + public Token getToken(){ return token; } @@ -170,7 +176,7 @@ public class Value extends JavaElement{ @Override public String toString(){ - return token.getValue()+((parameters == null ? "":parameters)); + return base+token.getValue()+((parameters == null ? "":parameters)); } @Override @@ -180,6 +186,7 @@ public class Value extends JavaElement{ @Override public E find(Function finder){ + if(finder.apply(base)) return (E) base; if(parameters != null){ for(Value value : parameters){ if(finder.apply(value)) return (E) value; @@ -190,6 +197,8 @@ public class Value extends JavaElement{ @Override public void findAll(Function finder, List list){ + if(finder.apply(base)) list.add((E) base); + base.findAll(finder, list); if(parameters != null){ for(Value value : parameters){ if(finder.apply(value)) list.add((E) value);