From 79c5cceecf918569fcf20027169c46bcc5eb372e Mon Sep 17 00:00:00 2001 From: Jules Villard Date: Tue, 14 Apr 2020 06:47:50 -0700 Subject: [PATCH] [java] kill ZipLib (aka specs-in-a-jar) Summary: Simplifies the models story. The model jar is still needed to look up fields in modelled classes (we save the .class of each model!). This is sad as we should be able to get these from the models' tenv, which should be more compact, but that's a bigger change. Reviewed By: skcho Differential Revision: D20891117 fbshipit-source-id: fcb5104ae --- infer/src/backend/Summary.ml | 5 ---- infer/src/base/Config.ml | 2 -- infer/src/base/Config.mli | 2 -- infer/src/base/Serialization.ml | 13 ++------- infer/src/base/Serialization.mli | 5 +--- infer/src/base/ZipLib.ml | 48 -------------------------------- infer/src/base/ZipLib.mli | 13 --------- 7 files changed, 4 insertions(+), 84 deletions(-) delete mode 100644 infer/src/base/ZipLib.ml delete mode 100644 infer/src/base/ZipLib.mli diff --git a/infer/src/backend/Summary.ml b/infer/src/backend/Summary.ml index fe0cdd335..a9f7e23d5 100644 --- a/infer/src/backend/Summary.ml +++ b/infer/src/backend/Summary.ml @@ -165,10 +165,6 @@ module OnDisk = struct (** Load procedure summary for the given procedure name and update spec table *) let load_summary_to_spec_table = - let load_summary_ziplibs zip_specs_filename = - let zip_specs_path = Filename.concat Config.specs_dir_name zip_specs_filename in - ZipLib.load summary_serializer zip_specs_path - in let or_from f_load f_filenames proc_name summ_opt = match summ_opt with Some _ -> summ_opt | None -> f_load (f_filenames proc_name) in @@ -176,7 +172,6 @@ module OnDisk = struct let summ_opt = load_from_file (specs_filename_of_procname proc_name) |> or_from load_biabduction_model Fn.id proc_name - |> or_from load_summary_ziplibs specs_filename proc_name in Option.iter ~f:(add proc_name) summ_opt ; summ_opt diff --git a/infer/src/base/Config.ml b/infer/src/base/Config.ml index 909f24b64..d8f6933ad 100644 --- a/infer/src/base/Config.ml +++ b/infer/src/base/Config.ml @@ -124,8 +124,6 @@ let costs_report_json = "costs-report.json" let default_failure_name = "ASSERTION_FAILURE" -let default_in_zip_results_dir = "infer" - (** Dotty output filename **) let dotty_frontend_output = "proc_cfgs_frontend.dot" diff --git a/infer/src/base/Config.mli b/infer/src/base/Config.mli index 58c72cb3f..ccad9c33c 100644 --- a/infer/src/base/Config.mli +++ b/infer/src/base/Config.mli @@ -73,8 +73,6 @@ val costs_report_json : string val default_failure_name : string -val default_in_zip_results_dir : string - val dotty_frontend_output : string val duplicates_filename : string diff --git a/infer/src/base/Serialization.ml b/infer/src/base/Serialization.ml index 451de9537..3b797ed20 100644 --- a/infer/src/base/Serialization.ml +++ b/infer/src/base/Serialization.ml @@ -11,9 +11,7 @@ module L = Logging (** Generic serializer *) type 'a serializer = - { read_from_string: string -> 'a option - ; read_from_file: DB.filename -> 'a option - ; write_to_file: data:'a -> DB.filename -> unit } + {read_from_file: DB.filename -> 'a option; write_to_file: data:'a -> DB.filename -> unit} module Key = struct type t = @@ -49,9 +47,6 @@ let create_serializer (key : Key.t) : 'a serializer = None ) else Some value in - let read_from_string (str : string) : 'a option = - read_data (Marshal.from_string str 0) "string" - in let read_from_file (fname : DB.filename) : 'a option = (* The serialization is based on atomic file renames, so the deserialization cannot read a file while it is being written. *) @@ -73,10 +68,8 @@ let create_serializer (key : Key.t) : 'a serializer = Marshal.to_channel outc (key.key, version, data) [] ) ; PerfEvent.(log (fun logger -> log_end_event logger ())) in - {read_from_string; read_from_file; write_to_file} - + {read_from_file; write_to_file} -let read_from_string s = s.read_from_string let read_from_file s = s.read_from_file @@ -88,4 +81,4 @@ let generate_keys () = Random.self_init () ; let max_rand_int = 0x3FFFFFFF (* determined by Rand library *) in let gen () = Random.int max_rand_int in - (gen (), gen (), gen (), gen (), gen ()) + (gen (), gen (), gen ()) diff --git a/infer/src/base/Serialization.mli b/infer/src/base/Serialization.mli index f30379cf5..b97376398 100644 --- a/infer/src/base/Serialization.mli +++ b/infer/src/base/Serialization.mli @@ -33,12 +33,9 @@ val create_serializer : Key.t -> 'a serializer val read_from_file : 'a serializer -> DB.filename -> 'a option (** Deserialize a file and check the keys *) -val read_from_string : 'a serializer -> string -> 'a option -(** Deserialize a string and check the keys *) - val write_to_file : 'a serializer -> data:'a -> DB.filename -> unit (** Serialize into a file writing value *) -val generate_keys : unit -> int * int * int * int * int +val generate_keys : unit -> int * int * int [@@warning "-32"] (** Generate new (random) serialization keys, to be used in an ocaml toplevel *) diff --git a/infer/src/base/ZipLib.ml b/infer/src/base/ZipLib.ml deleted file mode 100644 index fbf9ba52d..000000000 --- a/infer/src/base/ZipLib.ml +++ /dev/null @@ -1,48 +0,0 @@ -(* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *) - -open! IStd -open PolyVariantEqual - -type zip_library = {zip_filename: string; zip_channel: Zip.in_file Lazy.t} - -let load_from_zip serializer zip_path zip_library = - let (lazy zip_channel) = zip_library.zip_channel in - let deserialize = Serialization.read_from_string serializer in - match deserialize (Zip.read_entry zip_channel (Zip.find_entry zip_channel zip_path)) with - | Some data -> - Some data - | None -> - None - | exception Caml.Not_found -> - None - - -let load_data serializer path zip_library = - let zip_path = Filename.concat Config.default_in_zip_results_dir path in - load_from_zip serializer zip_path zip_library - - -(** list of the zip files to search for specs files *) -let zip_libraries = - (* delay until load is called, to avoid stating/opening files at init time *) - lazy - (let mk_zip_lib zip_filename = {zip_filename; zip_channel= lazy (Zip.open_in zip_filename)} in - if - Config.is_checker_enabled Biabduction - && (not Config.biabduction_models_mode) - && Sys.file_exists Config.biabduction_models_jar = `Yes - then Some (mk_zip_lib Config.biabduction_models_jar) - else None ) - - -let load serializer path = - (* NOTE: This and [zib_libraries] used to also work with a list of where to find "zip libraries" - but now this only handles at most one such library: the biabduction models. There's a chance - that this code looks weirder than it should as a result. *) - Option.bind (Lazy.force zip_libraries) ~f:(fun zip_library -> - load_data serializer path zip_library ) diff --git a/infer/src/base/ZipLib.mli b/infer/src/base/ZipLib.mli deleted file mode 100644 index 10fc420e5..000000000 --- a/infer/src/base/ZipLib.mli +++ /dev/null @@ -1,13 +0,0 @@ -(* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *) - -open! IStd - -val load : 'a Serialization.serializer -> string -> 'a option -(** [load serializer path] searches for the file at the given path in the zip libraries. If - Config.infer_cache is set, already deserialized data will be saved there and [path] will be - searched from the cache first. *)