/*
  * @see com.ibm.wala.dataflow.IFDS.ISupergraph#isCall(java.lang.Object)
  */
 public boolean isCall(Statement n) {
   switch (n.getKind()) {
     case EXC_RET_CALLEE:
     case EXC_RET_CALLER:
     case HEAP_PARAM_CALLEE:
     case NORMAL_RET_CALLEE:
     case NORMAL_RET_CALLER:
     case PARAM_CALLEE:
     case PHI:
     case HEAP_RET_CALLEE:
     case HEAP_RET_CALLER:
     case METHOD_ENTRY:
     case METHOD_EXIT:
     case CATCH:
     case PI:
       return false;
     case HEAP_PARAM_CALLER:
     case PARAM_CALLER:
       return true;
     case NORMAL:
       if (sdg.getCOptions().equals(ControlDependenceOptions.NONE)) {
         return false;
       } else {
         NormalStatement s = (NormalStatement) n;
         return s.getInstruction() instanceof SSAAbstractInvokeInstruction;
       }
     default:
       Assertions.UNREACHABLE(n.getKind() + " " + n.toString());
       return false;
   }
 }
 /*
  * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getReturnSites(java.lang.Object)
  */
 public Iterator<? extends Statement> getReturnSites(Statement call, PDG callee) {
   switch (call.getKind()) {
     case PARAM_CALLER:
       {
         ParamCaller n = (ParamCaller) call;
         SSAAbstractInvokeInstruction st = n.getInstruction();
         PDG pdg = getProcOf(call);
         return pdg.getCallerReturnStatements(st).iterator();
       }
     case HEAP_PARAM_CALLER:
       {
         HeapStatement.HeapParamCaller n = (HeapStatement.HeapParamCaller) call;
         SSAAbstractInvokeInstruction st = n.getCall();
         PDG pdg = getProcOf(call);
         return pdg.getCallerReturnStatements(st).iterator();
       }
     case NORMAL:
       {
         NormalStatement n = (NormalStatement) call;
         SSAAbstractInvokeInstruction st = (SSAAbstractInvokeInstruction) n.getInstruction();
         PDG pdg = getProcOf(call);
         return pdg.getCallerReturnStatements(st).iterator();
       }
     default:
       Assertions.UNREACHABLE(call.getKind().toString());
       return null;
   }
 }