public DavaFlowSet processAbruptStatements(Stmt s,DavaFlowSet input){
  if (s instanceof ReturnStmt || s instanceof RetStmt || s instanceof ReturnVoidStmt) {
    return NOPATH;
  }
 else   if (s instanceof DAbruptStmt) {
    DAbruptStmt abStmt=(DAbruptStmt)s;
    if (!(abStmt.is_Continue() || abStmt.is_Break())) {
      throw new RuntimeException("Found a DAbruptStmt which is neither break nor continue!!");
    }
    DavaFlowSet temp=NOPATH;
    SETNodeLabel nodeLabel=abStmt.getLabel();
    if (nodeLabel != null && nodeLabel.toString() != null) {
      if (abStmt.is_Continue())       temp.addToContinueList(nodeLabel.toString(),input);
 else       if (abStmt.is_Break())       temp.addToBreakList(nodeLabel.toString(),input);
 else       throw new RuntimeException("Found abruptstmt which is neither break nor continue");
    }
 else {
      if (abStmt.is_Continue())       temp.addToImplicitContinues(abStmt,input);
 else       if (abStmt.is_Break())       temp.addToImplicitBreaks(abStmt,input);
 else       throw new RuntimeException("Found abruptstmt which is neither break nor continue");
    }
    return temp;
  }
 else {
    return processStatement(s,input);
  }
}

public DavaFlowSet processAbruptStatements ( Stmt s , DavaFlowSet input ) { if ( s instanceof ReturnStmt || s instanceof RetStmt || s instanceof ReturnVoidStmt ) { return NOPATH ; } else if ( s instanceof DAbruptStmt ) { DAbruptStmt abStmt = ( DAbruptStmt ) s ; if ( ! ( abStmt . is_Continue ( ) || abStmt . is_Break ( ) ) ) { throw new RuntimeException ( "Found a DAbruptStmt which is neither break nor continue!!" ) ; } DavaFlowSet temp = NOPATH ; SETNodeLabel nodeLabel = abStmt . getLabel ( ) ; if ( nodeLabel != null && nodeLabel . toString ( ) != null ) { if ( abStmt . is_Continue ( ) ) temp . addToContinueList ( nodeLabel . toString ( ) , input ) ; else if ( abStmt . is_Break ( ) ) temp . addToBreakList ( nodeLabel . toString ( ) , input ) ; else throw new RuntimeException ( "Found abruptstmt which is neither break nor continue" ) ; } else { if ( abStmt . is_Continue ( ) ) temp . addToImplicitContinues ( abStmt , input ) ; else if ( abStmt . is_Break ( ) ) temp . addToImplicitBreaks ( abStmt , input ) ; else throw new RuntimeException ( "Found abruptstmt which is neither break nor continue" ) ; } return temp ; } else { return processStatement ( s , input ) ; } }
whenever a statement has to be processed the first step is to invoke this method . this is to remove the tedious work of adding code to deal with abrupt control flow from the programmer of the analysis . the method invokes the processstatement method for all other statements a programmer can decide to override this method if they want to do something specific
