Program: 121764
Project: 121764
Buggy source:
/** 
 * Only works for any check in the schema actually, and only for DB_TYPE. Syntax should be like: SCHEMA.DB_TYPE IN ['BLOB','CLOB']
 * @param simpleExpression
 * @return
 */
private static boolean evaluateInExpression(String simpleExpression,List<? extends IElementParameter> listParam){
  String[] strings=null;
  if (simpleExpression.contains("String_Node_Str")) {
    strings=simpleExpression.split("String_Node_Str");
  }
 else {
    strings=simpleExpression.split("String_Node_Str");
  }
  String[] splittedString=strings[0].split("String_Node_Str");
  String parameterName=splittedString[0];
  String variableToTest=splittedString[1];
  IElementParameter currentParam=null;
  for (  IElementParameter param : listParam) {
    if (param.getName().equals(parameterName)) {
      currentParam=param;
      break;
    }
  }
  if (currentParam == null) {
    currentParam=listParam.get(0);
  }
  String valuesToTest=strings[1].substring(0,strings[1].length() - 1);
  String[] values=valuesToTest.split("String_Node_Str");
  if (values.length > 1) {
    if ("String_Node_Str".equals(parameterName) && variableToTest.contains("String_Node_Str")) {
      IElement element=currentParam.getElement();
      if (element == null || (!(element instanceof INode))) {
        throwUnsupportedExpression(simpleExpression,currentParam);
        return false;
      }
      INode node=(INode)element;
      for (      String value : values) {
        if (value.isEmpty() || value.trim().equals("String_Node_Str")) {
          continue;
        }
        for (        IMetadataTable table : node.getMetadataList()) {
          for (          IMetadataColumn column : table.getListColumns()) {
            if (column.getType().equals(value)) {
              return true;
            }
          }
        }
      }
    }
 else     if (currentParam.getFieldType() == EParameterFieldType.TABLE) {
      if (ArrayUtils.contains(currentParam.getListItemsDisplayCodeName(),variableToTest)) {
        List<Map<String,Object>> allLines=(List<Map<String,Object>>)currentParam.getValue();
        for (        Map<String,Object> line : allLines) {
          Object o=line.get(variableToTest);
          if (o != null && (o instanceof String)) {
            String currentValue=(String)o;
            for (            String value : values) {
              if (value.isEmpty() || value.trim().equals("String_Node_Str")) {
                continue;
              }
              if (currentValue.equals(value)) {
                return true;
              }
            }
          }
        }
      }
    }
 else {
      throwUnsupportedExpression(simpleExpression,currentParam);
    }
  }
  return false;
}

Fixed version (ground truth):
/** 
 * Only works for any check in the schema actually, and only for DB_TYPE. Syntax should be like: SCHEMA.DB_TYPE IN ['BLOB','CLOB']
 * @param simpleExpression
 * @return
 */
private static boolean evaluateInExpression(String simpleExpression,List<? extends IElementParameter> listParam){
  String[] strings=null;
  if (simpleExpression.contains("String_Node_Str")) {
    strings=simpleExpression.split("String_Node_Str");
  }
 else {
    strings=simpleExpression.split("String_Node_Str");
  }
  String[] splittedString=strings[0].split("String_Node_Str");
  String parameterName=splittedString[0];
  String variableToTest=splittedString[1];
  IElementParameter currentParam=null;
  for (  IElementParameter param : listParam) {
    if (param.getName().equals(parameterName)) {
      currentParam=param;
      break;
    }
  }
  if (currentParam == null) {
    currentParam=listParam.get(0);
  }
  String valuesToTest=strings[1].substring(0,strings[1].length() - 1);
  String[] values=valuesToTest.split("String_Node_Str");
  if (values.length > 1) {
    if ("String_Node_Str".equals(parameterName) && variableToTest.contains("String_Node_Str")) {
      IElement element=currentParam.getElement();
      if (element == null || (!(element instanceof INode))) {
        throwUnsupportedExpression(simpleExpression,currentParam);
        return false;
      }
      INode node=(INode)element;
      for (      String value : values) {
        if (value.isEmpty() || value.trim().equals("String_Node_Str")) {
          continue;
        }
        for (        IMetadataTable table : node.getMetadataList()) {
          for (          IMetadataColumn column : table.getListColumns()) {
            if (column.getType() != null && column.getType().equals(value)) {
              return true;
            }
          }
        }
      }
    }
 else     if (currentParam.getFieldType() == EParameterFieldType.TABLE) {
      if (ArrayUtils.contains(currentParam.getListItemsDisplayCodeName(),variableToTest)) {
        List<Map<String,Object>> allLines=(List<Map<String,Object>>)currentParam.getValue();
        for (        Map<String,Object> line : allLines) {
          Object o=line.get(variableToTest);
          if (o != null && (o instanceof String)) {
            String currentValue=(String)o;
            for (            String value : values) {
              if (value.isEmpty() || value.trim().equals("String_Node_Str")) {
                continue;
              }
              if (currentValue.equals(value)) {
                return true;
              }
            }
          }
        }
      }
    }
 else {
      throwUnsupportedExpression(simpleExpression,currentParam);
    }
  }
  return false;
}