Esempio n. 1
0
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());
}
Esempio n. 3
0
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();
}
Esempio n. 4
0
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);
    }
}
Esempio n. 5
0
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;
}