let apply_action proj filter =
  SlicingParameters.debug ~level:1 "[SlicingProject.apply_action] : %a" SlicingActions.print_crit filter;
  let new_filters = 
    try match filter with  
      | T.CrFct fct_crit -> 
          begin
            try (apply_fct_action proj fct_crit)
            with PdgTypes.Pdg.Bottom -> 
              SlicingParameters.debug ~level:1 "  -> action ABORTED (PDG is bottom)" ;
              []
          end
    | T.CrAppli appli_crit ->
          apply_appli_crit proj appli_crit
    with Not_found -> (* catch unprocessed Not_found here *) assert false
  in 
    SlicingParameters.debug ~level:1 "  -> %d generated filters : %a@." 
        (List.length new_filters)
        SlicingActions.print_list_crit new_filters;
    new_filters