Github user sandeepdeshmukh commented on a diff in the pull request:

    
https://github.com/apache/incubator-apex-malhar/pull/209#discussion_r56650223
  
    --- Diff: library/src/main/java/com/datatorrent/lib/util/PojoUtils.java ---
    @@ -696,11 +662,97 @@ private static Object createSetter(Class<?> 
pojoClass, String setterExpr, String
           code = getSingleFieldSetterExpression(pojoClass, setterExpr, 
exprClass);
         }
     
    +    return compileExpression(code, setterClass, new String[] 
{PojoUtils.OBJECT, PojoUtils.VAL});
    +  }
    +
    +  /**
    +   * This method takes in expression, compiles the expression to provide a 
executable form of expression.
    +   * This method uses {@link 
com.datatorrent.lib.expression.JavaExpressionParser} as expression parser.
    +   *
    +   * @param inputType  Type of input object
    +   * @param expr       expression to be compiled.
    +   * @param returnType Return type of the expression.
    +   * @return Object of type {@link Expression} which can be directly 
executed.
    +   */
    +  public static Expression createExpression(Class<?> inputType, String 
expr, Class<?> returnType)
    +  {
    +    return createExpression(inputType, expr, returnType, null);
    +  }
    +
    +  /**
    +   * This method takes in expression, compiles the expression to provide a 
executable form of expression.
    +   * This methods also takes in list of classes and method which can be 
imported statically in expression.
    +   * <p/>
    +   * This method uses {@link JavaExpressionParser} as expression parser.
    +   *
    +   * @param inputType      Type of input object
    +   * @param expr           expression to be compiled.
    +   * @param returnType     Return type of the expression.
    +   * @param defaultImports List of classes/method which will be statically 
imported to expression compilation.
    +   * @return Object of type {@link Expression} which can be directly 
executed.
    +   */
    +  public static Expression createExpression(Class<?> inputType, String 
expr, Class<?> returnType,
    +      String[] defaultImports)
    +  {
    +    JavaExpressionParser javaExpressionParser = new JavaExpressionParser();
    +    javaExpressionParser.setInputObjectPlaceholder("$", PojoUtils.OBJECT);
    +
    +    return createExpression(inputType, expr, returnType, defaultImports, 
javaExpressionParser);
    +  }
    +
    +  /**
    +   * This method takes in expression, compiles the expression to provide a 
executable form of expression.
    +   * This methods also takes in list of classes and method which can be 
imported statically in expression.
    +   * <p/>
    +   * Using this method one can override expression parser implementation.
    +   *
    +   * @param inputType      Type of input object
    +   * @param expr           expression to be compiled.
    +   * @param returnType     Return type of the expression.
    +   * @param defaultImports List of classes/method which will be statically 
imported to expression compilation.
    +   * @param parser         Expression parser that should be used to parse 
expression.
    +   * @return Object of type {@link Expression} which can be directly 
executed.
    +   * @see {@link JavaExpressionParser} as a example.
    +   */
    +  public static Expression createExpression(Class<?> inputType, String 
expr, Class<?> returnType,
    +      String[] defaultImports, Expression.ExpressionParser parser)
    +  {
    +    String code = parser.convertToCompilableExpression(expr, inputType, 
returnType);
    +
    +    return (Expression)compileExpression(code, Expression.class, new 
String[] {PojoUtils.OBJECT}, defaultImports);
    +  }
    +
    +  private static Object compileExpression(String code, Class<?> implClass, 
String[] params)
    +  {
    +    return compileExpression(code, implClass, params, null);
    +  }
    +
    +  private static Object compileExpression(String code, Class<?> implClass, 
String[] params, String[] defaultImports)
    +  {
    +    List<String> imports = new LinkedList<>();
    +    if (defaultImports != null && defaultImports.length != 0) {
    +      for (String defaultImport : defaultImports) {
    +        if (!defaultImport.startsWith("static")) {
    --- End diff --
    
    What is the intention behind making imports static here?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to