Program: 21097
Project: 21097
Buggy source:
/** 
 * <p> Parse a Bigtable GC-Expression that is in line with  {@link #buildGarbageCollectionExpression(HColumnDescriptor)} into a the provided{@link HColumnDescriptor}. </p> <p> This method will likely throw IllegalStateException if the GC Expression isn't similar to buildGarbageCollectionExpression's expression. Requires the input to be empty/null or "[(age > \d+ [&& version() > \d+]) ||] version() > \d" as generated by  {@link #buildGarbageCollectionExpression(HColumnDescriptor)}</p>
 */
private static void convertGarbageCollectionExpression(String gcExpression,HColumnDescriptor columnDescriptor){
  if (Strings.isNullOrEmpty(gcExpression)) {
    columnDescriptor.setMaxVersions(0);
    return;
  }
  String maxVersionExpression=null;
  String minVersionExpression=null;
  String ttlExpression=null;
  if (gcExpression.contains("String_Node_Str")) {
    for (    String expression : gcExpressionOrSplitter.split(gcExpression)) {
      if (expression.contains("String_Node_Str")) {
        for (        String expressionComponent : gcExpressionAndSplitter.split(expression)) {
          if (expressionComponent.contains("String_Node_Str") && expressionComponent.contains("String_Node_Str")) {
            ttlExpression=expressionComponent.replaceAll("String_Node_Str","String_Node_Str");
          }
 else           if (expressionComponent.contains("String_Node_Str") && expressionComponent.contains("String_Node_Str")) {
            minVersionExpression=expressionComponent.replaceAll("String_Node_Str","String_Node_Str");
          }
 else {
            throw new IllegalStateException(String.format("String_Node_Str",expression));
          }
        }
      }
 else       if (expression.contains("String_Node_Str") && expression.contains("String_Node_Str")) {
        maxVersionExpression=expression.replaceAll("String_Node_Str","String_Node_Str");
      }
 else {
        throw new IllegalStateException(String.format("String_Node_Str",expression));
      }
    }
  }
 else   if (gcExpression.contains("String_Node_Str") && gcExpression.contains("String_Node_Str")) {
    maxVersionExpression=gcExpression.replaceAll("String_Node_Str","String_Node_Str");
  }
 else {
    throw new IllegalStateException(String.format("String_Node_Str",maxVersionExpression));
  }
  int maxVersions=getInteger(maxVersionExpression);
  columnDescriptor.setMaxVersions(maxVersions);
  if (minVersionExpression != null) {
    int minVersions=getInteger(minVersionExpression);
    Preconditions.checkState(minVersions < maxVersions,"String_Node_Str");
    columnDescriptor.setMinVersions(minVersions);
  }
  if (ttlExpression != null) {
    long bigtableTtl=getLong(ttlExpression);
    int ttlSeconds=(int)TimeUnit.SECONDS.convert(bigtableTtl,BigtableConstants.BIGTABLE_TIMEUNIT);
    if (ttlSeconds != HColumnDescriptor.DEFAULT_TTL) {
      columnDescriptor.setTimeToLive(ttlSeconds);
    }
  }
}

Fixed version (ground truth):
/** 
 * <p> Parse a Bigtable GC-Expression that is in line with  {@link #buildGarbageCollectionExpression(HColumnDescriptor)} into a the provided{@link HColumnDescriptor}. </p> <p> This method will likely throw IllegalStateException if the GC Expression isn't similar to buildGarbageCollectionExpression's expression. Requires the input to be empty/null or "[(age > \d+ [&& version() > \d+]) ||] version() > \d" as generated by  {@link #buildGarbageCollectionExpression(HColumnDescriptor)}</p>
 */
private static void convertGarbageCollectionExpression(String gcExpression,HColumnDescriptor columnDescriptor){
  if (Strings.isNullOrEmpty(gcExpression)) {
    columnDescriptor.setMaxVersions(Integer.MAX_VALUE);
    return;
  }
  String maxVersionExpression=null;
  String minVersionExpression=null;
  String ttlExpression=null;
  if (gcExpression.contains("String_Node_Str")) {
    for (    String expression : gcExpressionOrSplitter.split(gcExpression)) {
      if (expression.contains("String_Node_Str")) {
        for (        String expressionComponent : gcExpressionAndSplitter.split(expression)) {
          if (expressionComponent.contains("String_Node_Str") && expressionComponent.contains("String_Node_Str")) {
            ttlExpression=expressionComponent.replaceAll("String_Node_Str","String_Node_Str");
          }
 else           if (expressionComponent.contains("String_Node_Str") && expressionComponent.contains("String_Node_Str")) {
            minVersionExpression=expressionComponent.replaceAll("String_Node_Str","String_Node_Str");
          }
 else {
            throw new IllegalStateException(String.format("String_Node_Str",expression));
          }
        }
      }
 else       if (expression.contains("String_Node_Str") && expression.contains("String_Node_Str")) {
        maxVersionExpression=expression.replaceAll("String_Node_Str","String_Node_Str");
      }
 else {
        throw new IllegalStateException(String.format("String_Node_Str",expression));
      }
    }
  }
 else   if (gcExpression.contains("String_Node_Str") && gcExpression.contains("String_Node_Str")) {
    maxVersionExpression=gcExpression.replaceAll("String_Node_Str","String_Node_Str");
  }
 else {
    throw new IllegalStateException(String.format("String_Node_Str",maxVersionExpression));
  }
  int maxVersions=getInteger(maxVersionExpression);
  columnDescriptor.setMaxVersions(maxVersions);
  if (minVersionExpression != null) {
    int minVersions=getInteger(minVersionExpression);
    Preconditions.checkState(minVersions < maxVersions,"String_Node_Str");
    columnDescriptor.setMinVersions(minVersions);
  }
  if (ttlExpression != null) {
    long bigtableTtl=getLong(ttlExpression);
    int ttlSeconds=(int)TimeUnit.SECONDS.convert(bigtableTtl,BigtableConstants.BIGTABLE_TIMEUNIT);
    if (ttlSeconds != HColumnDescriptor.DEFAULT_TTL) {
      columnDescriptor.setTimeToLive(ttlSeconds);
    }
  }
}