source/model-generator/JsonModelGenerator.h (58 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 <mariana-trench/Context.h> #include <mariana-trench/Model.h> #include <mariana-trench/model-generator/FieldConstraints.h> #include <mariana-trench/model-generator/FieldModelTemplate.h> #include <mariana-trench/model-generator/MethodConstraints.h> #include <mariana-trench/model-generator/ModelGenerator.h> #include <mariana-trench/model-generator/ModelTemplates.h> namespace marianatrench { /* This class parses a json format model generator and stores its information */ class JsonModelGeneratorItem final : public MethodVisitorModelGenerator { public: JsonModelGeneratorItem( const std::string& name, Context& context, std::unique_ptr<AllOfMethodConstraint> constraint, ModelTemplate model_template, int verbosity); std::vector<Model> emit_method_models_filtered( const MethodHashedSet& methods); std::unordered_set<const MethodConstraint*> constraint_leaves() const; /* Returns filtered method set to run full satisfy checks on. Returns Top if * filtered set cannot be determined. */ MethodHashedSet may_satisfy(const MethodMappings& method_mappings) const; std::vector<Model> visit_method(const Method* method) const override; private: std::unique_ptr<AllOfMethodConstraint> constraint_; ModelTemplate model_template_; int verbosity_; }; class JsonFieldModelGeneratorItem final : public FieldVisitorModelGenerator { public: explicit JsonFieldModelGeneratorItem( const std::string& name, Context& context, std::unique_ptr<AllOfFieldConstraint> constraint, FieldModelTemplate field_model_template, int verbosity); std::vector<FieldModel> visit_field(const Field* field) const override; private: std::unique_ptr<AllOfFieldConstraint> constraint_; FieldModelTemplate field_model_template_; int verbosity_; }; class JsonModelGenerator final : public ModelGenerator { public: explicit JsonModelGenerator( const std::string& name, Context& context, const boost::filesystem::path& json_configuration_file); std::vector<Model> emit_method_models(const Methods&) override; std::vector<Model> emit_method_models_optimized( const Methods&, const MethodMappings& method_mappings) override; std::vector<FieldModel> emit_field_models(const Fields&) override; private: boost::filesystem::path json_configuration_file_; std::vector<JsonModelGeneratorItem> items_; std::vector<JsonFieldModelGeneratorItem> field_items_; }; } // namespace marianatrench