### Question:
ExpressionEvaluator implements ExpressionNodeVisitor<EvaluationResult, Void> { protected Constructor<?> findConstructor( ExpressionLocation location, Class<?> clazz, Class<?>... paramTypes) { outer: for (Constructor<?> constructor : clazz.getConstructors()) { Class<?>[] types = constructor.getParameterTypes(); if (types.length == paramTypes.length) { for (int i = 0; i < types.length; i++) { if (!types[i].isAssignableFrom(paramTypes[i])) { continue outer; } } return constructor; } } return null; } ExpressionEvaluator();  ExpressionEvaluator(ExpressionFunctions expressionFunctions, ClassHelper classHelper);  ExpressionEvaluator(
      Map<String, Value> variableValues,
      ExpressionFunctions expressionFunctions,
      ClassHelper classHelper); void putValue(String variableName, Value value); Value removeValue(String variableName); void add(String variableName, Value value); EvaluationResult evaluate(ExpressionNode node); @Override EvaluationResult visitEqOperatorNode(EqOperatorNode node, Void p); @Override EvaluationResult visitNeOperatorNode(NeOperatorNode node, Void p); @Override EvaluationResult visitGeOperatorNode(GeOperatorNode node, Void p); @Override EvaluationResult visitGtOperatorNode(GtOperatorNode node, Void p); @Override EvaluationResult visitLeOperatorNode(LeOperatorNode node, Void p); @Override EvaluationResult visitLtOperatorNode(LtOperatorNode node, Void p); @Override EvaluationResult visitAndOperatorNode(AndOperatorNode node, Void p); @Override EvaluationResult visitOrOperatorNode(OrOperatorNode node, Void p); @Override EvaluationResult visitNotOperatorNode(NotOperatorNode node, Void p); @Override EvaluationResult visitAddOperatorNode(AddOperatorNode node, Void p); @Override EvaluationResult visitSubtractOperatorNode(SubtractOperatorNode node, Void p); @Override EvaluationResult visitMultiplyOperatorNode(MultiplyOperatorNode node, Void p); @Override EvaluationResult visitDivideOperatorNode(DivideOperatorNode node, Void p); @Override EvaluationResult visitModOperatorNode(ModOperatorNode node, Void p); @Override EvaluationResult visitLiteralNode(LiteralNode node, Void p); @Override EvaluationResult visitParensNode(ParensNode node, Void p); @Override EvaluationResult visitNewOperatorNode(NewOperatorNode node, Void p); @Override EvaluationResult visitMethodOperatorNode(MethodOperatorNode node, Void p); @Override EvaluationResult visitStaticMethodOperatorNode(StaticMethodOperatorNode node, Void p); @Override EvaluationResult visitFunctionOperatorNode(FunctionOperatorNode node, Void p); @Override EvaluationResult visitFieldOperatorNode(FieldOperatorNode node, Void p); @Override EvaluationResult visitStaticFieldOperatorNode(StaticFieldOperatorNode node, Void p); @Override EvaluationResult visitVariableNode(VariableNode node, Void p); @Override EvaluationResult visitCommaOperatorNode(CommaOperatorNode node, Void p); @Override EvaluationResult visitEmptyNode(EmptyNode node, Void p);  }### Answer:
@Test public void testFindConstructor() { ExpressionEvaluator evaluator = new ExpressionEvaluator(); Constructor<?> constructor = evaluator.findConstructor(location, String.class, char[].class, int.class, int.class); assertNotNull(constructor); }
@Test public void testFindConstructor_notFound() { ExpressionEvaluator evaluator = new ExpressionEvaluator(); Constructor<?> constructor = evaluator.findConstructor(location, String.class, int.class, int.class); assertNull(constructor); }