in source/model-generator/ModelTemplates.cpp [453:545]
ForAllParameters ForAllParameters::from_json(
const Json::Value& value,
Context& context) {
JsonValidation::validate_object(value);
std::vector<std::unique_ptr<TypeConstraint>> constraints;
std::vector<SinkTemplate> sink_templates;
std::vector<ParameterSourceTemplate> parameter_source_templates;
std::vector<GenerationTemplate> generation_templates;
std::vector<SourceTemplate> source_templates;
std::vector<PropagationTemplate> propagation_templates;
std::vector<AttachToSourcesTemplate> attach_to_sources_templates;
std::vector<AttachToSinksTemplate> attach_to_sinks_templates;
std::vector<AttachToPropagationsTemplate> attach_to_propagations_templates;
std::vector<AddFeaturesToArgumentsTemplate>
add_features_to_arguments_templates;
std::string variable = JsonValidation::string(value, "variable");
for (auto constraint :
JsonValidation::null_or_array(value, /* field */ "where")) {
// We assume constraints on parameters are type constraints
constraints.push_back(TypeConstraint::from_json(constraint));
}
for (auto sink_value :
JsonValidation::null_or_array(value, /* field */ "sinks")) {
sink_templates.push_back(SinkTemplate::from_json(sink_value, context));
}
for (auto source_value :
JsonValidation::null_or_array(value, /* field */ "parameter_sources")) {
parameter_source_templates.push_back(
ParameterSourceTemplate::from_json(source_value, context));
}
for (auto source_value :
JsonValidation::null_or_array(value, /* field */ "generations")) {
generation_templates.push_back(
GenerationTemplate::from_json(source_value, context));
}
for (auto source_value :
JsonValidation::null_or_array(value, /* field */ "sources")) {
source_templates.push_back(
SourceTemplate::from_json(source_value, context));
}
for (auto propagation_value :
JsonValidation::null_or_array(value, /* field */ "propagation")) {
propagation_templates.push_back(
PropagationTemplate::from_json(propagation_value, context));
}
for (auto attach_to_sources_value :
JsonValidation::null_or_array(value, /* field */ "attach_to_sources")) {
attach_to_sources_templates.push_back(
AttachToSourcesTemplate::from_json(attach_to_sources_value, context));
}
for (auto attach_to_sinks_value :
JsonValidation::null_or_array(value, /* field */ "attach_to_sinks")) {
attach_to_sinks_templates.push_back(
AttachToSinksTemplate::from_json(attach_to_sinks_value, context));
}
for (auto attach_to_propagations_value : JsonValidation::null_or_array(
value, /* field */ "attach_to_propagations")) {
attach_to_propagations_templates.push_back(
AttachToPropagationsTemplate::from_json(
attach_to_propagations_value, context));
}
for (auto add_features_to_arguments_value : JsonValidation::null_or_array(
value, /* field */ "add_features_to_arguments")) {
add_features_to_arguments_templates.push_back(
AddFeaturesToArgumentsTemplate::from_json(
add_features_to_arguments_value, context));
}
return ForAllParameters(
std::make_unique<AllOfTypeConstraint>(std::move(constraints)),
variable,
sink_templates,
parameter_source_templates,
generation_templates,
source_templates,
propagation_templates,
attach_to_sources_templates,
attach_to_sinks_templates,
attach_to_propagations_templates,
add_features_to_arguments_templates);
}