diff --git a/src/dev/peerat/parser/java/JavaParser.java b/src/dev/peerat/parser/java/JavaParser.java index b946ce1..4366714 100644 --- a/src/dev/peerat/parser/java/JavaParser.java +++ b/src/dev/peerat/parser/java/JavaParser.java @@ -319,13 +319,14 @@ public class JavaParser extends Parser { 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); + MethodCallValue methodCall = new MethodCallValue(prev, bag.get("gen"), bag.get(), list); bag.set("prev", methodCall); + bag.remove("gen"); } - bag.set(token); + bag.set(new Token(token.getLineNumber(), token.getCharacterNumber(), "", TokenType.GROUP)); })); 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(new RedirectStateTree<>(gen, (global, local) -> global.set("gen", global.get().concat(local.get())))).then(value_name); value_call.then(value_name); StateTree value_array_begin = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("["))); StateTree value_array_end = value_array_begin.then((validator) -> validator.validate((token) -> token.getValue().equals("]"))); @@ -353,7 +354,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("prev"), bag.get(), list); + MethodCallValue methodCall = new MethodCallValue(bag.get("prev"), bag.get("gen"), bag.get(), list); bag.set(methodCall); return null; }); @@ -395,13 +396,13 @@ public class JavaParser extends Parser { validator.validate((token) -> token.getValue().equals(">"))); value_lambda.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) .end((a,bag) -> { - bag.set(new LambdaValue(null, null)); + bag.set(new LambdaValue(null, new ArrayList<>())); return a; }) .multiple(function_container) .unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a); - value_lambda.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))).end((a,bag) ->{ - bag.set(new LambdaValue(null, null)); + value_lambda.then(new RedirectStateTree<>(value_container, (global, local) -> global.set("in", local.get()))).end((a,bag) ->{ + bag.set(new LambdaValue(null, bag.get("in"))); return a; }); value_lambda_arg.then(value_lambda); diff --git a/src/dev/peerat/parser/java/Value.java b/src/dev/peerat/parser/java/Value.java index c92c20b..23866e5 100644 --- a/src/dev/peerat/parser/java/Value.java +++ b/src/dev/peerat/parser/java/Value.java @@ -1,9 +1,12 @@ package dev.peerat.parser.java; +import java.util.ArrayList; import java.util.List; import java.util.function.Function; import dev.peerat.parser.Token; +import dev.peerat.parser.java.Operation.OperationContainer; +import dev.peerat.parser.java.Variable.VariableContainer; public class Value extends JavaElement{ @@ -153,19 +156,25 @@ public class Value extends JavaElement{ public static class MethodCallValue extends Value{ private Value base; + private Token generic; private Token token; private List parameters; - public MethodCallValue(Value base, Token token, List parameters){ + public MethodCallValue(Value base, Token generic, Token token, List parameters){ this.base = base; + this.generic = generic; this.token = token; this.parameters = parameters; } - private Value base(){ + public Value base(){ return this.base; } + public Token getGeneric(){ + return this.generic; + } + public Token getToken(){ return token; } @@ -176,7 +185,7 @@ public class Value extends JavaElement{ @Override public String toString(){ - return base+token.getValue()+((parameters == null ? "":parameters)); + return base+"."+((generic == null ? "":generic.getValue()))+token.getValue()+((parameters == null ? "":parameters)); } @Override @@ -265,7 +274,7 @@ public class Value extends JavaElement{ } //TO FILL - public static class LambdaValue extends Value{ + public static class LambdaValue extends Value implements OperationContainer, VariableContainer{ private List parameters; private List operations; @@ -275,6 +284,12 @@ public class Value extends JavaElement{ this.operations = operations; } + public LambdaValue(List parameters, Value value){ + this.parameters = parameters; + this.operations = new ArrayList<>(); + this.operations.add(value); + } + public List getParameters(){ return this.parameters; } @@ -283,9 +298,20 @@ public class Value extends JavaElement{ return this.operations; } + @Override + public void addVariable(Variable variable){ + this.operations.add(variable); + } + + @Override + public void addOperation(Operation operation) { + this.operations.add(operation); + } + + @Override public String toString(){ - return "() -> {}"; + return "("+parameters+") -> {"+operations+"}"; } @Override @@ -300,5 +326,6 @@ public class Value extends JavaElement{ @Override public void findAll(Function finder, List list){ } + } }