we can use a global feature model to ensure that composing modules reflects the intended dependencies.
we can use a global feature model to ensure that composing modules reflects the intended dependencies. This way, we can detect that we do not accidentally restrict the product line more than intended by the domain expert who designed the global feature model. We simply compare the feature model of the linker result with a global model.
turns the interface into a conditional interface (to emulate conditional linking/composition of interfaces).
turns the interface into a conditional interface (to emulate conditional linking/composition of interfaces).
a.conditional(f) link b.conditional(g)
is conceptually equivalent to
if (f and g) a link b else if (f and not g) a else if (not f and g) b else empty
see text on conditional composition
links without proper checks and packing.
links without proper checks and packing. only for debugging purposes *
determines conflicts and returns corresponding name, feature expression and involved signatures
determines conflicts and returns corresponding name, feature expression and involved signatures
conflicts are: (a) both modules export the same name in the same configuration (b) both modules import the same name with different types in the same configuration (c) one module imports a name the other modules exports in the same configuration but with a different type
returns any conflict (does not call a sat solver), even if the conditions are mutually exclusive. the condition is true if there is NO conflict (it describes configurations without conflict)
public only for debugging purposes
linking two well-formed models always yields a wellformed module, but it makes only sense if the resulting feature model is not void.
linking two well-formed models always yields a wellformed module, but it makes only sense if the resulting feature model is not void. hence compatibility is checked by checking the resulting feature model
A variability-aware module is complete if it has no remaining imports with satisfiable conditions and if the feature model is satisfiable (i.
A variability-aware module is complete if it has no remaining imports with satisfiable conditions and if the feature model is satisfiable (i.e., it allows to derive at least one variant). A complete and fully-configured module is the desired end result when configuring a product line for a specific use case.
ensures a couple of invariants.
ensures a couple of invariants.
a module is illformed if (a) it exports the same signature twice in the same configuration (b) it imports the same signature twice in the same configuration (c) if it exports and imports a name in the same configuration
by construction, this should not occur in inferred and linked interfaces
removes duplicates by joining the corresponding conditions removes imports that are available as exports in the same file removes False imports
removes duplicates by joining the corresponding conditions removes imports that are available as exports in the same file removes False imports
how to determine whether two elements are duplicate depends on the strictness level (see above)
exports are not packed beyond removing False exports. duplicate exports are used for error detection
describes the linker interface for a file, i.e. all imported (and used) signatures and all exported signatures.