Skip to content

Commit

Permalink
fix ContextTest
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomassetti committed Aug 11, 2018
1 parent da20c58 commit 03bae3e
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 27 deletions.
Expand Up @@ -16,9 +16,14 @@


package com.github.javaparser.symbolsolver.javaparsermodel.contexts; package com.github.javaparser.symbolsolver.javaparsermodel.contexts;


import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.ConstructorDeclaration; import com.github.javaparser.ast.body.ConstructorDeclaration;
import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;


import java.util.Collections;
import java.util.List;

/** /**
* @author Federico Tomassetti * @author Federico Tomassetti
*/ */
Expand All @@ -32,4 +37,12 @@ public ConstructorContext(ConstructorDeclaration wrappedNode, TypeSolver typeSol
super(wrappedNode, typeSolver); super(wrappedNode, typeSolver);
} }


@Override
public List<Parameter> parametersExposedToChild(Node child) {
if (child == wrappedNode.getBody()) {
return wrappedNode.getParameters();
}
return Collections.emptyList();
}

} }
Expand Up @@ -16,6 +16,7 @@


package com.github.javaparser.symbolsolver.javaparsermodel.contexts; package com.github.javaparser.symbolsolver.javaparsermodel.contexts;


import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.Parameter; import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.body.VariableDeclarator; import com.github.javaparser.ast.body.VariableDeclarator;
import com.github.javaparser.ast.expr.Expression; import com.github.javaparser.ast.expr.Expression;
Expand Down Expand Up @@ -162,6 +163,14 @@ public SymbolReference<ResolvedMethodDeclaration> solveMethod(
return getParent().solveMethod(name, argumentsTypes, false, typeSolver); return getParent().solveMethod(name, argumentsTypes, false, typeSolver);
} }


@Override
public List<Parameter> parametersExposedToChild(Node child) {
if (child == wrappedNode.getBody()) {
return wrappedNode.getParameters();
}
return Collections.emptyList();
}

/// ///
/// Protected methods /// Protected methods
/// ///
Expand Down
Expand Up @@ -19,7 +19,6 @@
import com.github.javaparser.*; import com.github.javaparser.*;
import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.Node; import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.BodyDeclaration;
import com.github.javaparser.ast.body.ConstructorDeclaration; import com.github.javaparser.ast.body.ConstructorDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration; import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.body.Parameter; import com.github.javaparser.ast.body.Parameter;
Expand Down Expand Up @@ -511,24 +510,38 @@ public void localVariableDeclarationInScope() {
// entire body of the method, constructor, or lambda expression. // entire body of the method, constructor, or lambda expression.


private void assertNoParamsExposedToChildInContextNamed(Node parent, Node child, String paramName) { private void assertNoParamsExposedToChildInContextNamed(Node parent, Node child, String paramName) {
assertNumberOfParamsExposedToChildInContextNamed(parent, child, paramName, 0); assertNumberOfParamsExposedToChildInContextNamed(parent, child, paramName, 0, "the element is exposed and it should not");
} }


private void assertOneExposedToChildInContextNamed(Node parent, Node child, String paramName) { private void assertOneParamExposedToChildInContextNamed(Node parent, Node child, String paramName) {
assertNumberOfParamsExposedToChildInContextNamed(parent, child, paramName, 1); assertNumberOfParamsExposedToChildInContextNamed(parent, child, paramName, 1, "the element is not exposed as expected");
} }


private void assertNumberOfParamsExposedToChildInContextNamed(Node parent, Node child, String paramName, private void assertNumberOfParamsExposedToChildInContextNamed(Node parent, Node child, String paramName,
int expectedNumber) { int expectedNumber, String message) {
assertEquals(expectedNumber, JavaParserFactory.getContext(parent, typeSolver) assertEquals(message, expectedNumber, JavaParserFactory.getContext(parent, typeSolver)
.parametersExposedToChild(child).stream().filter(p -> p.getNameAsString().equals(paramName)).count()); .parametersExposedToChild(child).stream().filter(p -> p.getNameAsString().equals(paramName)).count());
} }


private void assertNoVarsExposedToChildInContextNamed(Node parent, Node child, String paramName) {
assertNumberOfVarsExposedToChildInContextNamed(parent, child, paramName, 0, "the element is exposed and it should not");
}

private void assertOneVarExposedToChildInContextNamed(Node parent, Node child, String paramName) {
assertNumberOfVarsExposedToChildInContextNamed(parent, child, paramName, 1, "the element is not exposed as expected");
}

private void assertNumberOfVarsExposedToChildInContextNamed(Node parent, Node child, String paramName,
int expectedNumber, String message) {
assertEquals(message, expectedNumber, JavaParserFactory.getContext(parent, typeSolver)
.localVariablesExposedToChild(child).stream().filter(p -> p.getNameAsString().equals(paramName)).count());
}

@Test @Test
public void parametersExposedToChildForMethod() { public void parametersExposedToChildForMethod() {
MethodDeclaration method = parse("void foo(int myParam) { aCall(); }", MethodDeclaration method = parse("void foo(int myParam) { aCall(); }",
ParseStart.CLASS_BODY).asMethodDeclaration(); ParseStart.CLASS_BODY).asMethodDeclaration();
assertOneExposedToChildInContextNamed(method, method.getBody().get(), "myParam"); assertOneParamExposedToChildInContextNamed(method, method.getBody().get(), "myParam");
assertNoParamsExposedToChildInContextNamed(method, method.getType(), "myParam"); assertNoParamsExposedToChildInContextNamed(method, method.getType(), "myParam");
assertNoParamsExposedToChildInContextNamed(method, method.getParameter(0), "myParam"); assertNoParamsExposedToChildInContextNamed(method, method.getParameter(0), "myParam");
} }
Expand All @@ -537,7 +550,7 @@ public void parametersExposedToChildForMethod() {
public void parametersExposedToChildForConstructor() { public void parametersExposedToChildForConstructor() {
ConstructorDeclaration constructor = parse("Foo(int myParam) { aCall(); }", ConstructorDeclaration constructor = parse("Foo(int myParam) { aCall(); }",
ParseStart.CLASS_BODY).asConstructorDeclaration(); ParseStart.CLASS_BODY).asConstructorDeclaration();
assertOneExposedToChildInContextNamed(constructor, constructor.getBody(), "myParam"); assertOneParamExposedToChildInContextNamed(constructor, constructor.getBody(), "myParam");
assertNoParamsExposedToChildInContextNamed(constructor, constructor.getParameter(0), "myParam"); assertNoParamsExposedToChildInContextNamed(constructor, constructor.getParameter(0), "myParam");
} }


Expand All @@ -546,7 +559,7 @@ public void parametersExposedToChildForLambda() {
LambdaExpr lambda = (LambdaExpr)parse("Object myLambda = (myParam) -> myParam * 2;", LambdaExpr lambda = (LambdaExpr)parse("Object myLambda = (myParam) -> myParam * 2;",
ParseStart.STATEMENT).asExpressionStmt().getExpression().asVariableDeclarationExpr() ParseStart.STATEMENT).asExpressionStmt().getExpression().asVariableDeclarationExpr()
.getVariables().get(0).getInitializer().get(); .getVariables().get(0).getInitializer().get();
assertOneExposedToChildInContextNamed(lambda, lambda.getBody(), "myParam"); assertOneParamExposedToChildInContextNamed(lambda, lambda.getBody(), "myParam");
assertNoParamsExposedToChildInContextNamed(lambda, lambda.getParameter(0), "myParam"); assertNoParamsExposedToChildInContextNamed(lambda, lambda.getParameter(0), "myParam");
} }


Expand All @@ -558,18 +571,18 @@ public void parametersExposedToChildForLambda() {
public void localVariablesExposedToChildWithinABlock() { public void localVariablesExposedToChildWithinABlock() {
BlockStmt blockStmt = parse("{ preStatement(); int a = 1, b = 2; otherStatement(); }", BlockStmt blockStmt = parse("{ preStatement(); int a = 1, b = 2; otherStatement(); }",
ParseStart.STATEMENT).asBlockStmt(); ParseStart.STATEMENT).asBlockStmt();
assertNoParamsExposedToChildInContextNamed(blockStmt, blockStmt.getStatement(0), "a"); assertNoVarsExposedToChildInContextNamed(blockStmt, blockStmt.getStatement(0), "a");
assertNoParamsExposedToChildInContextNamed(blockStmt, blockStmt.getStatement(0), "b"); assertNoVarsExposedToChildInContextNamed(blockStmt, blockStmt.getStatement(0), "b");
assertOneExposedToChildInContextNamed(blockStmt, blockStmt.getStatement(2), "a"); assertOneVarExposedToChildInContextNamed(blockStmt, blockStmt.getStatement(2), "a");
assertOneExposedToChildInContextNamed(blockStmt, blockStmt.getStatement(2), "b"); assertOneVarExposedToChildInContextNamed(blockStmt, blockStmt.getStatement(2), "b");


VariableDeclarationExpr varDecl = blockStmt.getStatement(1).asExpressionStmt().getExpression() VariableDeclarationExpr varDecl = blockStmt.getStatement(1).asExpressionStmt().getExpression()
.asVariableDeclarationExpr(); .asVariableDeclarationExpr();
assertOneExposedToChildInContextNamed(varDecl.getVariables().get(0), assertOneVarExposedToChildInContextNamed(varDecl.getVariables().get(0),
varDecl.getVariables().get(0).getInitializer().get(), "a"); varDecl.getVariables().get(0).getInitializer().get(), "a");
assertOneExposedToChildInContextNamed(varDecl, assertOneVarExposedToChildInContextNamed(varDecl,
varDecl.getVariables().get(1), "a"); varDecl.getVariables().get(1), "a");
assertNoParamsExposedToChildInContextNamed(varDecl, assertNoVarsExposedToChildInContextNamed(varDecl,
varDecl.getVariables().get(0), "b"); varDecl.getVariables().get(0), "b");
} }


Expand All @@ -583,19 +596,19 @@ public void localVariablesExposedToChildWithinABlock() {
public void localVariablesExposedToChildWithinForStmt() { public void localVariablesExposedToChildWithinForStmt() {
ForStmt forStmt = parse("for (int i=0, j=1;i<10;i++) { body(); }", ForStmt forStmt = parse("for (int i=0, j=1;i<10;i++) { body(); }",
ParseStart.STATEMENT).asForStmt(); ParseStart.STATEMENT).asForStmt();
assertOneExposedToChildInContextNamed(forStmt.getInitialization().get(0).asVariableDeclarationExpr(), assertOneVarExposedToChildInContextNamed(forStmt.getInitialization().get(0).asVariableDeclarationExpr(),
forStmt.getInitialization().get(1).asVariableDeclarationExpr().getVariable(0).getInitializer().get(), forStmt.getInitialization().get(1).asVariableDeclarationExpr().getVariable(0).getInitializer().get(),
"i"); "i");
assertOneExposedToChildInContextNamed(forStmt, assertOneVarExposedToChildInContextNamed(forStmt,
forStmt.getInitialization().get(1), forStmt.getInitialization().get(1),
"i"); "i");
assertOneExposedToChildInContextNamed(forStmt, assertOneVarExposedToChildInContextNamed(forStmt,
forStmt.getCompare().get(), forStmt.getCompare().get(),
"i"); "i");
assertOneExposedToChildInContextNamed(forStmt, assertOneVarExposedToChildInContextNamed(forStmt,
forStmt.getUpdate().get(0), forStmt.getUpdate().get(0),
"i"); "i");
assertOneExposedToChildInContextNamed(forStmt, assertOneVarExposedToChildInContextNamed(forStmt,
forStmt.getBody(), forStmt.getBody(),
"i"); "i");
} }
Expand All @@ -607,9 +620,9 @@ public void localVariablesExposedToChildWithinForStmt() {
public void localVariablesExposedToChildWithinEnhancedForeachStmt() { public void localVariablesExposedToChildWithinEnhancedForeachStmt() {
ForeachStmt foreachStmt = parse("for (int i: myList) { body(); }", ForeachStmt foreachStmt = parse("for (int i: myList) { body(); }",
ParseStart.STATEMENT).asForeachStmt(); ParseStart.STATEMENT).asForeachStmt();
assertOneExposedToChildInContextNamed(foreachStmt, foreachStmt.getBody(), "i"); assertOneVarExposedToChildInContextNamed(foreachStmt, foreachStmt.getBody(), "i");
assertNoParamsExposedToChildInContextNamed(foreachStmt, foreachStmt.getVariable(), "i"); assertNoVarsExposedToChildInContextNamed(foreachStmt, foreachStmt.getVariable(), "i");
assertNoParamsExposedToChildInContextNamed(foreachStmt, foreachStmt.getIterable(), "i"); assertNoVarsExposedToChildInContextNamed(foreachStmt, foreachStmt.getIterable(), "i");
} }


// The scope of a parameter of an exception handler that is declared in a catch clause of a try statement (§14.20) // The scope of a parameter of an exception handler that is declared in a catch clause of a try statement (§14.20)
Expand All @@ -619,7 +632,7 @@ public void localVariablesExposedToChildWithinEnhancedForeachStmt() {
public void parametersExposedToChildWithinTryStatement() { public void parametersExposedToChildWithinTryStatement() {
CatchClause catchClause = parse("try { } catch(Exception e) { body(); }", CatchClause catchClause = parse("try { } catch(Exception e) { body(); }",
ParseStart.STATEMENT).asTryStmt().getCatchClauses().get(0); ParseStart.STATEMENT).asTryStmt().getCatchClauses().get(0);
assertOneExposedToChildInContextNamed(catchClause, catchClause.getBody(), "e"); assertOneParamExposedToChildInContextNamed(catchClause, catchClause.getBody(), "e");
assertNoParamsExposedToChildInContextNamed(catchClause, catchClause.getParameter(), "e"); assertNoParamsExposedToChildInContextNamed(catchClause, catchClause.getParameter(), "e");
} }


Expand All @@ -631,9 +644,9 @@ public void parametersExposedToChildWithinTryStatement() {
public void parametersExposedToChildWithinTryWithResourcesStatement() { public void parametersExposedToChildWithinTryWithResourcesStatement() {
TryStmt stmt = parse("try (Object res1 = foo(); Object res2 = foo()) { body(); }", TryStmt stmt = parse("try (Object res1 = foo(); Object res2 = foo()) { body(); }",
ParseStart.STATEMENT).asTryStmt(); ParseStart.STATEMENT).asTryStmt();
assertOneExposedToChildInContextNamed(stmt, stmt.getResources().get(1), "res1"); assertOneParamExposedToChildInContextNamed(stmt, stmt.getResources().get(1), "res1");
assertNoParamsExposedToChildInContextNamed(stmt, stmt.getResources().get(0), "res1"); assertNoParamsExposedToChildInContextNamed(stmt, stmt.getResources().get(0), "res1");
assertOneExposedToChildInContextNamed(stmt, stmt.getTryBlock(), "res1"); assertOneParamExposedToChildInContextNamed(stmt, stmt.getTryBlock(), "res1");
} }


} }

0 comments on commit 03bae3e

Please sign in to comment.