Program: 29821
Project: 29821
Buggy source:
/** 
 * Has to be called when the scenario is finished in order to execute after methods
 */
public void finished() throws Throwable {
  if (state == FINISHED)   return;
  if (state != STARTED)   throw new IllegalStateException("String_Node_Str" + state);
  state=FINISHED;
  methodInterceptor.enableMethodHandling(false);
  Throwable firstThrownException=failedException;
  if (beforeStepsWereExecuted) {
    if (currentStage != null) {
      try {
        executeAfterStageMethods(currentStage);
      }
 catch (      AssertionError e) {
        firstThrownException=logAndGetFirstException(firstThrownException,e);
      }
catch (      Exception e) {
        firstThrownException=logAndGetFirstException(firstThrownException,e);
      }
    }
    for (    StageState stage : reverse(newArrayList(stages.values()))) {
      try {
        executeAnnotatedMethods(stage.instance,AfterScenario.class);
      }
 catch (      AssertionError e) {
        firstThrownException=logAndGetFirstException(firstThrownException,e);
      }
catch (      Exception e) {
        firstThrownException=logAndGetFirstException(firstThrownException,e);
      }
    }
  }
  for (  Object rule : Lists.reverse(scenarioRules)) {
    try {
      invokeRuleMethod(rule,"String_Node_Str");
    }
 catch (    AssertionError e) {
      firstThrownException=logAndGetFirstException(firstThrownException,e);
    }
catch (    Exception e) {
      firstThrownException=logAndGetFirstException(firstThrownException,e);
    }
  }
  failedException=firstThrownException;
  if (!suppressExceptions && failedException != null) {
    throw failedException;
  }
  if (failIfPass && failedException == null) {
    throw new FailIfPassedException();
  }
}

Fixed version (ground truth):
/** 
 * Has to be called when the scenario is finished in order to execute after methods
 */
public void finished() throws Throwable {
  if (state == FINISHED) {
    return;
  }
  if (state != STARTED) {
    throw new IllegalStateException("String_Node_Str" + state);
  }
  state=FINISHED;
  methodInterceptor.enableMethodHandling(false);
  Throwable firstThrownException=failedException;
  if (beforeStepsWereExecuted) {
    if (currentStage != null) {
      try {
        executeAfterStageMethods(currentStage);
      }
 catch (      AssertionError e) {
        firstThrownException=logAndGetFirstException(firstThrownException,e);
      }
catch (      Exception e) {
        firstThrownException=logAndGetFirstException(firstThrownException,e);
      }
    }
    for (    StageState stage : reverse(newArrayList(stages.values()))) {
      try {
        executeAnnotatedMethods(stage.instance,AfterScenario.class);
      }
 catch (      AssertionError e) {
        firstThrownException=logAndGetFirstException(firstThrownException,e);
      }
catch (      Exception e) {
        firstThrownException=logAndGetFirstException(firstThrownException,e);
      }
    }
  }
  for (  Object rule : Lists.reverse(scenarioRules)) {
    try {
      invokeRuleMethod(rule,"String_Node_Str");
    }
 catch (    AssertionError e) {
      firstThrownException=logAndGetFirstException(firstThrownException,e);
    }
catch (    Exception e) {
      firstThrownException=logAndGetFirstException(firstThrownException,e);
    }
  }
  failedException=firstThrownException;
  if (!suppressExceptions && failedException != null) {
    throw failedException;
  }
  if (failIfPass && failedException == null) {
    throw new FailIfPassedException();
  }
}