Program: 12080
Project: 12080
Buggy source:
private List<CFGNode> process(List<CFGNode> previousNodes,CompositeStatementObject composite){
  if (composite instanceof TryStatementObject) {
    CFGTryNode tryNode=new CFGTryNode(composite);
    directlyNestedNodeInTryBlock(tryNode);
    findTryNodeControlParent(tryNode);
    directlyNestedNodesInTryBlocks.put(tryNode,new ArrayList<CFGNode>());
    AbstractStatement firstStatement=composite.getStatements().get(0);
    composite=(CompositeStatementObject)firstStatement;
  }
  int i=0;
  for (  AbstractStatement abstractStatement : composite.getStatements()) {
    if (abstractStatement instanceof StatementObject) {
      StatementObject statement=(StatementObject)abstractStatement;
      previousNodes=processNonCompositeStatement(previousNodes,statement,composite);
    }
 else     if (abstractStatement instanceof CompositeStatementObject) {
      CompositeStatementObject compositeStatement=(CompositeStatementObject)abstractStatement;
      if (compositeStatement.getStatement() instanceof Block) {
        previousNodes=process(previousNodes,compositeStatement);
      }
 else       if (compositeStatement.getStatement() instanceof LabeledStatement || compositeStatement.getStatement() instanceof SynchronizedStatement) {
        List<AbstractStatement> nestedStatements=compositeStatement.getStatements();
        if (!nestedStatements.isEmpty()) {
          AbstractStatement firstStatement=nestedStatements.get(0);
          if (firstStatement instanceof CompositeStatementObject)           previousNodes=process(previousNodes,(CompositeStatementObject)firstStatement);
        }
      }
 else       if (compositeStatement instanceof TryStatementObject) {
        TryStatementObject tryStatement=(TryStatementObject)compositeStatement;
        if (!tryStatement.hasResources()) {
          CFGTryNode tryNode=new CFGTryNode(compositeStatement);
          directlyNestedNodeInTryBlock(tryNode);
          findTryNodeControlParent(tryNode);
          directlyNestedNodesInTryBlocks.put(tryNode,new ArrayList<CFGNode>());
          AbstractStatement firstStatement=compositeStatement.getStatements().get(0);
          previousNodes=process(previousNodes,(CompositeStatementObject)firstStatement);
        }
 else {
          CFGTryNode tryNode=new CFGTryNode(compositeStatement);
          directlyNestedNodeInTryBlock(tryNode);
          findTryNodeControlParent(tryNode);
          nodes.add(tryNode);
          directlyNestedNodesInTryBlocks.put(tryNode,new ArrayList<CFGNode>());
          createTopDownFlow(previousNodes,tryNode);
          ArrayList<CFGNode> currentNodes=new ArrayList<CFGNode>();
          currentNodes.add(tryNode);
          previousNodes=currentNodes;
          AbstractStatement firstStatement=compositeStatement.getStatements().get(0);
          previousNodes=process(previousNodes,(CompositeStatementObject)firstStatement);
        }
      }
 else       if (isLoop(compositeStatement)) {
        previousNodes=processLoopStatement(previousNodes,compositeStatement);
      }
 else       if (compositeStatement.getStatement() instanceof DoStatement) {
        previousNodes=processDoStatement(previousNodes,compositeStatement);
      }
 else       if (compositeStatement.getStatement() instanceof SwitchStatement) {
        int action=getAction(composite,i,compositeStatement);
        previousNodes=processSwitchStatement(previousNodes,compositeStatement,action);
      }
 else       if (compositeStatement.getStatement() instanceof IfStatement) {
        int action=getAction(composite,i,compositeStatement);
        previousNodes=processIfStatement(previousNodes,compositeStatement,action);
      }
    }
    i++;
  }
  return previousNodes;
}

Fixed version (ground truth):
private List<CFGNode> process(List<CFGNode> previousNodes,CompositeStatementObject composite){
  if (composite instanceof TryStatementObject) {
    CFGTryNode tryNode=new CFGTryNode(composite);
    directlyNestedNodeInTryBlock(tryNode);
    findTryNodeControlParent(tryNode);
    directlyNestedNodesInTryBlocks.put(tryNode,new ArrayList<CFGNode>());
    AbstractStatement firstStatement=composite.getStatements().get(0);
    composite=(CompositeStatementObject)firstStatement;
  }
  int i=0;
  for (  AbstractStatement abstractStatement : composite.getStatements()) {
    if (abstractStatement instanceof StatementObject) {
      StatementObject statement=(StatementObject)abstractStatement;
      previousNodes=processNonCompositeStatement(previousNodes,statement,composite);
    }
 else     if (abstractStatement instanceof CompositeStatementObject) {
      CompositeStatementObject compositeStatement=(CompositeStatementObject)abstractStatement;
      if (compositeStatement.getStatement() instanceof Block) {
        previousNodes=process(previousNodes,compositeStatement);
      }
 else       if (compositeStatement.getStatement() instanceof LabeledStatement || compositeStatement.getStatement() instanceof SynchronizedStatement) {
        List<AbstractStatement> nestedStatements=compositeStatement.getStatements();
        if (!nestedStatements.isEmpty()) {
          AbstractStatement firstStatement=nestedStatements.get(0);
          if (firstStatement instanceof CompositeStatementObject) {
            CompositeStatementObject compositeStatement2=(CompositeStatementObject)firstStatement;
            if (compositeStatement2.getStatement() instanceof Block) {
              previousNodes=process(previousNodes,compositeStatement2);
            }
 else             if (compositeStatement2 instanceof TryStatementObject) {
              previousNodes=processTryStatement(previousNodes,compositeStatement2);
            }
 else             if (isLoop(compositeStatement2)) {
              previousNodes=processLoopStatement(previousNodes,compositeStatement2);
            }
 else             if (compositeStatement2.getStatement() instanceof DoStatement) {
              previousNodes=processDoStatement(previousNodes,compositeStatement2);
            }
 else             if (compositeStatement2.getStatement() instanceof SwitchStatement) {
              int action=getAction(composite,i,compositeStatement2);
              previousNodes=processSwitchStatement(previousNodes,compositeStatement2,action);
            }
 else             if (compositeStatement2.getStatement() instanceof IfStatement) {
              int action=getAction(composite,i,compositeStatement2);
              previousNodes=processIfStatement(previousNodes,compositeStatement2,action);
            }
          }
 else           if (firstStatement instanceof StatementObject) {
            previousNodes=processNonCompositeStatement(previousNodes,(StatementObject)firstStatement,composite);
          }
        }
      }
 else       if (compositeStatement instanceof TryStatementObject) {
        previousNodes=processTryStatement(previousNodes,compositeStatement);
      }
 else       if (isLoop(compositeStatement)) {
        previousNodes=processLoopStatement(previousNodes,compositeStatement);
      }
 else       if (compositeStatement.getStatement() instanceof DoStatement) {
        previousNodes=processDoStatement(previousNodes,compositeStatement);
      }
 else       if (compositeStatement.getStatement() instanceof SwitchStatement) {
        int action=getAction(composite,i,compositeStatement);
        previousNodes=processSwitchStatement(previousNodes,compositeStatement,action);
      }
 else       if (compositeStatement.getStatement() instanceof IfStatement) {
        int action=getAction(composite,i,compositeStatement);
        previousNodes=processIfStatement(previousNodes,compositeStatement,action);
      }
    }
    i++;
  }
  return previousNodes;
}