/** Compiles ParameterExpressions */ @Override public void visit(ParameterExpression param) { if (param == null) { throw new ArgumentException(PARAMETER + E_IS_NULL); } if (parameters.containsKey(param.getName())) { /** If the parameter itself is and expression */ if (parameters.get(param.getName()) instanceof ExpressionCompiler) { // The parameter is itself another Expression ExpressionCompiler expr = (ExpressionCompiler) parameters.get(param.getName()); expr.setParameters(parameters); expr.setMethodResolver(getMethodResolver()); expr.setParameterizedResolver(getParameterizedResolver()); // TODO: Need a way to pass in the compile type here, maybe from // global scope of API call for compile... result.setResult( (LogicalExpression) ((ExpressionCompiler) parameters.get(param.getName())).compile()); } else { result.setResult((LogicalExpression) parameters.get(param.getName())); } } else { ParameterizedArgs args = new ParameterizedArgs(result, param.getName()); resolveParameterizedReference(args); if (args.getResult() == null) throw new CompilationException( String.format(E_PARAMETER_S_WAS_NOT_DEFINED, param.getName())); result.setResult((LogicalExpression) args.getResult()); } }