Program: 121403
Project: 121403
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 variableToTest=strings[0].split("String_Node_Str")[1];
  ElementParameter currentParam=(ElementParameter)listParam.get(0);
  if (variableToTest.contains("String_Node_Str")) {
    IElement element=currentParam.getElement();
    if (element == null || (!(element instanceof INode))) {
      throwUnsupportedExpression(simpleExpression,currentParam);
      return false;
    }
    INode node=(INode)element;
    String valuesToTest=strings[1].substring(0,strings[1].length() - 1);
    String[] values=valuesToTest.split("String_Node_Str");
    if (values.length > 1) {
      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 {
      throwUnsupportedExpression(simpleExpression,currentParam);
    }
  }
 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 variableToTest=strings[0].split("String_Node_Str")[1];
  ElementParameter currentParam=(ElementParameter)listParam.get(0);
  if (variableToTest.contains("String_Node_Str")) {
    IElement element=currentParam.getElement();
    if (element == null || (!(element instanceof INode))) {
      throwUnsupportedExpression(simpleExpression,currentParam);
      return false;
    }
    INode node=(INode)element;
    String valuesToTest=strings[1].substring(0,strings[1].length() - 1);
    String[] values=valuesToTest.split("String_Node_Str");
    if (values.length > 1) {
      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 {
      throwUnsupportedExpression(simpleExpression,currentParam);
    }
  }
 else {
    throwUnsupportedExpression(simpleExpression,currentParam);
  }
  return false;
}