void inclusion_expander::expand(const annotations::type_repository& atrp, const formatters::repository& frp, const locator& l, model& fm) const { const auto tg(make_type_group(atrp, frp)); const auto idc(compute_inclusion_directives(tg, frp, l, fm.formattables())); populate_inclusion_dependencies(frp, idc, fm.formattables()); }
void helper_expander::expand( const variability::meta_model::feature_model& feature_model, const formatters::repository& frp, model& fm) const { const auto fg(make_feature_group(feature_model)); const auto cfg(make_configuration(fg, fm)); populate_helper_properties(cfg, frp, fm.formattables()); }
void reducer::reduce(model& fm) const { BOOST_LOG_SEV(lg, debug) << "Starting reduction."; BOOST_LOG_SEV(lg, debug) << "Original size: " << fm.formattables().size(); std::unordered_map<std::string, formattable> reduced; for (const auto& pair : fm.formattables()) { const auto& formattable(pair.second); const auto& e(*formattable.element()); if (e.origin_type() != yarn::origin_types::target) continue; reduced.insert(pair); } fm.formattables().swap(reduced); BOOST_LOG_SEV(lg, debug) << "Reduced size: " << fm.formattables().size(); }
void decoration_expander:: expand(const dogen::formatters::decoration_properties_factory& dpf, model& fm) const { const auto dc(dpf.make(cs_modeline_name)); for (auto& pair : fm.formattables()) { const auto id(pair.first); auto& formattable(pair.second); auto& eprops(formattable.element_properties()); eprops.decoration_properties(dc); } }
void file_path_and_guard_expander:: expand(const formatters::repository& frp, const locator& l, model& fm) const { const auto safba(frp.stock_artefact_formatters_by_archetype()); for (auto& pair : fm.formattables()) { const auto id(pair.first); auto& formattable(pair.second); /* * It doesn't really matter which segment we choose here since * they are both mapped to the same name. */ const auto& e(*formattable.master_segment()); const auto n(e.name()); auto& eprops(formattable.element_properties()); /* * Go thorough all the artefact properties and, for each, find * the associated formatter. */ for (auto& pair : eprops.artefact_properties()) { const auto arch(pair.first); auto& art_props(pair.second); const auto i(safba.find(arch)); if (i == safba.end()) { BOOST_LOG_SEV(lg, error) << missing_archetype << arch; BOOST_THROW_EXCEPTION( expansion_error(missing_archetype + arch)); } /* * Ask the formatter to generate the full path for the * artefact. */ const auto& fmt(i->second); art_props.file_path(fmt->full_path(l, n)); /* * If the formatter supports inclusion, we need to compute * the header guard as well. */ const auto ns(formatters::inclusion_support_types::not_supported); if (fmt->inclusion_support_type() != ns) { const auto ip(fmt->inclusion_path(l, n)); art_props.header_guard(to_header_guard(ip)); } } } }
helper_configuration helper_expander:: make_configuration(const feature_group& fg, const model& fm) const { BOOST_LOG_SEV(lg, debug) << "Started making the configuration."; helper_configuration r; r.streaming_properties(fm.streaming_properties()); for (auto& pair : fm.formattables()) { const auto id(pair.first); BOOST_LOG_SEV(lg, debug) << "Procesing element: " << id; auto& formattable(pair.second); auto& segment(*formattable.master_segment()); const auto& cfg(*segment.configuration()); const variability::helpers::configuration_selector s(cfg); const auto fam(s.get_text_content_or_default(fg.family)); r.helper_families()[id] = fam; } BOOST_LOG_SEV(lg, debug) << "Finished making the configuration. Result:" << r; return r; }