Skip to content

Commit

Permalink
Merge pull request #2003 from matozoid/issue_1997_more_lambda_expr_co…
Browse files Browse the repository at this point in the history
…nstructors

Give LambdaExpr some useful constructors.
  • Loading branch information
matozoid committed Jan 4, 2019
2 parents 147bb9c + 5d3b665 commit d0e1b63
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,24 @@

import com.github.javaparser.TokenRange;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.type.UnknownType;
import org.junit.jupiter.api.Test;

import static com.github.javaparser.JavaParser.parseExpression;
import static org.junit.jupiter.api.Assertions.*;
import static com.github.javaparser.JavaParser.*;
import static com.github.javaparser.utils.TestUtils.assertEqualsNoEol;
import static org.junit.jupiter.api.Assertions.assertEquals;

class LambdaExprTest {
@Test
void lambdaRange1(){
void lambdaRange1() {
Expression expression = parseExpression("x -> y");
assertRange("x", "y", expression);
}

@Test
void lambdaRange2(){
void lambdaRange2() {
Expression expression = parseExpression("(x) -> y");
assertRange("(", "y", expression);
}
Expand All @@ -27,15 +31,45 @@ private void assertRange(String startToken, String endToken, Node node) {
}

@Test
void getExpressionBody(){
void getExpressionBody() {
LambdaExpr lambdaExpr = parseExpression("x -> y").asLambdaExpr();
assertEquals("Optional[y]", lambdaExpr.getExpressionBody().toString());
}

@Test
void getNoExpressionBody(){
void getNoExpressionBody() {
LambdaExpr lambdaExpr = parseExpression("x -> {y;}").asLambdaExpr();
assertEquals("Optional.empty", lambdaExpr.getExpressionBody().toString());
}

@Test
void oneParameterAndExpressionUtilityConstructor() {
LambdaExpr expr = new LambdaExpr(new Parameter(new UnknownType(), "a"), parseExpression("5"));
assertEquals("a -> 5", expr.toString());
}

@Test
void oneParameterAndStatementUtilityConstructor() {
LambdaExpr expr = new LambdaExpr(new Parameter(new UnknownType(), "a"), parseBlock("{return 5;}"));
assertEqualsNoEol("a -> {\n return 5;\n}", expr.toString());
}

@Test
void multipleParametersAndExpressionUtilityConstructor() {
LambdaExpr expr = new LambdaExpr(new NodeList<>(new Parameter(new UnknownType(), "a"), new Parameter(new UnknownType(), "b")), parseExpression("5"));
assertEquals("(a, b) -> 5", expr.toString());
}

@Test
void multipleParametersAndStatementUtilityConstructor() {
LambdaExpr expr = new LambdaExpr(new NodeList<>(new Parameter(new UnknownType(), "a"), new Parameter(new UnknownType(), "b")), parseBlock("{return 5;}"));
assertEqualsNoEol("(a, b) -> {\n return 5;\n}", expr.toString());
}

@Test
void zeroParametersAndStatementUtilityConstructor() {
LambdaExpr expr = new LambdaExpr(new NodeList<>(), parseBlock("{return 5;}"));
assertEqualsNoEol("() -> {\n return 5;\n}", expr.toString());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,25 +20,29 @@
*/
package com.github.javaparser.ast.expr;

import com.github.javaparser.TokenRange;
import com.github.javaparser.ast.AllFieldsConstructor;
import com.github.javaparser.ast.Generated;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.nodeTypes.NodeWithParameters;
import com.github.javaparser.ast.observer.ObservableProperty;
import com.github.javaparser.ast.stmt.BlockStmt;
import com.github.javaparser.ast.stmt.ExpressionStmt;
import com.github.javaparser.ast.stmt.ReturnStmt;
import com.github.javaparser.ast.stmt.Statement;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.ast.visitor.GenericVisitor;
import com.github.javaparser.ast.visitor.VoidVisitor;
import java.util.Optional;
import static com.github.javaparser.utils.Utils.assertNotNull;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.metamodel.DerivedProperty;
import com.github.javaparser.metamodel.LambdaExprMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.TokenRange;
import com.github.javaparser.metamodel.LambdaExprMetaModel;

import java.util.Optional;
import java.util.function.Consumer;
import com.github.javaparser.ast.Generated;

import static com.github.javaparser.utils.Utils.assertNotNull;

/**
* <h1>A lambda expression</h1>
Expand All @@ -52,7 +56,7 @@
* If a parameter uses type inference (it has no type specified) then its type is set to <code>UnknownType</code>.
* If they are in ( ), "isEnclosingParameters" is true.
* <br/>The body is to the right of the ->.
* The body is either a BlockStatement when it is in { } braces, or an ExpressionStatement when it is not in braces.
* The body is either a BlockStmt when it is in { } braces, or an ExpressionStmt when it is not in braces.
*
* @author Raquel Pau
*/
Expand All @@ -68,6 +72,35 @@ public LambdaExpr() {
this(null, new NodeList<>(), new ReturnStmt(), false);
}

/**
* Creates a single parameter lambda expression.
*/
public LambdaExpr(Parameter parameter, BlockStmt body) {
this(null, new NodeList<>(parameter), body, false);
}

/**
* Creates a zero or multi-parameter lambda expression with its parameters wrapped in ( ).
*/
public LambdaExpr(NodeList<Parameter> parameters, BlockStmt body) {
this(null, parameters, body, true);
}


/**
* Creates a single parameter lambda expression.
*/
public LambdaExpr(Parameter parameter, Expression body) {
this(null, new NodeList<>(parameter), new ExpressionStmt(body), false);
}

/**
* Creates a zero or multi-parameter lambda expression with its parameters wrapped in ( ).
*/
public LambdaExpr(NodeList<Parameter> parameters, Expression body) {
this(null, parameters, new ExpressionStmt(body), true);
}

@AllFieldsConstructor
public LambdaExpr(NodeList<Parameter> parameters, Statement body, boolean isEnclosingParameters) {
this(null, parameters, body, isEnclosingParameters);
Expand Down

0 comments on commit d0e1b63

Please sign in to comment.