let annotation_visible ff_opt stmt ~before annot =
    SlicingParameters.debug ~level:2 "[SlicingTransform.Visibility.annotation_visible] ?";
    match ff_opt with
    | Isrc -> true
    | Iproto -> false
    | Iff (ff,_) ->
        let kf = M.get_ff_kf ff  in
        let pdg = !Db.Pdg.get kf in
        try
        let ctrl_nodes, decl_nodes, data_info =
          !Db.Pdg.find_code_annot_nodes pdg before stmt annot 
        in
        let data_visible = data_nodes_visible ff (decl_nodes, data_info) in
        let visible = ((all_nodes_visible ff ctrl_nodes) && data_visible) in
          SlicingParameters.debug ~level:2 "[SlicingTransform.Visibility.annotation_visible] -> %s"
              (if visible then "yes" else "no");
          visible
        with Extlib.NotYetImplemented _ -> (* TODO remove this when ok *)
            (SlicingParameters.debug ~level:2 
              "[SlicingTransform.Visibility.annotation_visible] not implemented -> invisible";
            false)