source/Options.h (107 lines of code) (raw):

/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #pragma once #include <optional> #include <string> #include <vector> #include <boost/filesystem.hpp> #include <boost/program_options.hpp> #include <json/json.h> #include <mariana-trench/model-generator/ModelGeneratorConfiguration.h> namespace marianatrench { class Options final { public: explicit Options( const std::vector<std::string>& models_paths, const std::vector<std::string>& field_models_paths, const std::vector<std::string>& rules_paths, const std::vector<std::string>& lifecycles_paths, const std::vector<std::string>& proguard_configuration_paths, bool sequential, bool skip_source_indexing, bool skip_model_generation, const std::vector<ModelGeneratorConfiguration>& model_generators_configuration, const std::vector<std::string>& model_generator_search_paths, bool remove_unreachable_code, const std::string& source_root_directory = "."); explicit Options(const boost::program_options::variables_map& variables); Options(const Options&) = delete; Options(Options&&) = delete; Options& operator=(const Options& other) = delete; Options& operator=(Options&& other) = delete; ~Options() = default; static void add_options(boost::program_options::options_description& options); const std::vector<std::string>& models_paths() const; const std::vector<std::string>& field_models_paths() const; const std::vector<ModelGeneratorConfiguration>& model_generators_configuration() const; const std::vector<std::string>& rules_paths() const; const std::vector<std::string>& lifecycles_paths() const; const std::vector<std::string>& proguard_configuration_paths() const; const std::optional<std::string>& generated_models_directory() const; const std::vector<std::string>& generator_configuration_paths() const; const std::vector<std::string>& model_generator_search_paths() const; const std::string& repository_root_directory() const; const std::string& source_root_directory() const; const std::vector<std::string>& source_exclude_directories() const; const std::vector<std::string>& system_jar_paths() const; const std::string& apk_directory() const; const std::string& dex_directory() const; const std::string& apk_path() const; const boost::filesystem::path metadata_output_path() const; const boost::filesystem::path removed_symbols_output_path() const; const boost::filesystem::path models_output_path() const; const boost::filesystem::path methods_output_path() const; const boost::filesystem::path call_graph_output_path() const; const boost::filesystem::path class_hierarchies_output_path() const; const boost::filesystem::path overrides_output_path() const; const boost::filesystem::path dependencies_output_path() const; bool sequential() const; bool skip_source_indexing() const; bool skip_model_generation() const; bool disable_parameter_type_overrides() const; bool remove_unreachable_code() const; std::optional<int> maximum_method_analysis_time() const; int maximum_source_sink_distance() const; const std::vector<std::string>& log_methods() const; bool dump_class_hierarchies() const; bool dump_overrides() const; bool dump_call_graph() const; bool dump_dependencies() const; bool dump_methods() const; const std::optional<std::string>& job_id() const; const std::optional<std::string>& metarun_id() const; private: std::vector<std::string> models_paths_; std::vector<std::string> field_models_paths_; std::vector<std::string> rules_paths_; std::vector<std::string> lifecycles_paths_; std::vector<std::string> proguard_configuration_paths_; std::vector<std::string> generator_configuration_paths_; std::vector<ModelGeneratorConfiguration> model_generators_configuration_; std::vector<std::string> model_generator_search_paths_; std::optional<std::string> generated_models_directory_; std::string repository_root_directory_; std::string source_root_directory_; std::vector<std::string> source_exclude_directories_; std::vector<std::string> system_jar_paths_; std::string apk_directory_; std::string dex_directory_; std::string apk_path_; boost::filesystem::path output_directory_; bool sequential_; bool skip_source_indexing_; bool skip_model_generation_; bool remove_unreachable_code_; bool disable_parameter_type_overrides_; std::optional<int> maximum_method_analysis_time_; int maximum_source_sink_distance_; std::vector<std::string> log_methods_; bool dump_class_hierarchies_; bool dump_overrides_; bool dump_call_graph_; bool dump_dependencies_; bool dump_methods_; std::optional<std::string> job_id_; std::optional<std::string> metarun_id_; }; } // namespace marianatrench