sort_with(alpha_comparator)
end
- # Sort modules and groups with a loosly adaptation of the linerarisation of modules
+ # Sort modules and groups with a loosely adaptation of the linearization of modules
fun sort_with_linex
do
var c = linex_comparator
# Compare modules and groups using the
# FIXME do not use Object, but a better common interface of MModule and MGroup
private class LinexComparator
- super Comparator[Object]
+ super Comparator
+
+ redef type COMPARED: Object
+
var mins = new HashMap [MGroup, nullable MModule]
var maxs = new HashMap [MGroup, nullable MModule]
- fun min(o: Object): nullable MModule do
+ fun mini(o: Object): nullable MModule do
if o isa MModule then return o
assert o isa MGroup
if not mins.has_key(o) then computeminmax(o)
return mins[o]
end
- fun max(o: Object): nullable MModule do
+ fun maxi(o: Object): nullable MModule do
if o isa MModule then return o
assert o isa MGroup
if not maxs.has_key(o) then computeminmax(o)
return
end
var subs = tree.sub[o]
- var minres = min(subs.first)
- var maxres = max(subs.first)
+ var minres = mini(subs.first)
+ var maxres = maxi(subs.first)
var order = minres.model.mmodule_importation_hierarchy
for o2 in subs do
- var c = min(o2)
+ var c = mini(o2)
if c == null then continue
if minres == null or order.compare(minres, c) > 0 then minres = c
- c = max(o2)
+ c = maxi(o2)
if c == null then continue
if maxres == null or order.compare(maxres, c) < 0 then maxres = c
end
#if minres != maxres then print "* {o} {minres}..{maxres}"
end
redef fun compare(a,b) do
- var ma = min(a)
- var mb = min(b)
+ var ma = mini(a)
+ var mb = mini(b)
if ma == null then
if mb == null then return 0 else return -1
else if mb == null then
# Generate graphiz files based on projects, groups and modules
#
-# Interessing elements must be selected. See `mmodules`, ``
+# Interesting elements must be selected. See `mmodules`, ``
# Display configuration can be set. See `cluster_group`, `project_group`
class MProjectDot
super Streamable
end
# Should groups be shown as clusters?
- var cluster_group writable = true
+ var cluster_group = true is writable
# Should projects be shown as clusters?
- var project_group writable = true
+ var project_group = true is writable
- # Recursively generate noed ans clusters for a mroup
+ # Recursively generate node and clusters for a mgroup
private fun dot_cluster(o: OStream, mgroup: MGroup)
do
# Open the cluster, if required
o.write("\t{node_for(mmodule)} [label=\"{mmodule.name}\",color=green]\n")
end
- # recusively progress on sub-clusters
+ # recursively progress on sub-clusters
for d in mgroup.in_nesting.direct_smallers do
dot_cluster(o, d)
end
end
end
- # Extends the set of `mmodules` by recurdively adding the most specific imported modules of foreign projects
+ # Extends the set of `mmodules` by recursively adding the most specific imported modules of foreign projects
fun collect_important_importation
do
var todo = new List[MModule]
# Generate the dot content with the current configuration
redef fun write_to(stream)
do
- # Collect interessing nodes
+ # Collect interesting nodes
for m in model.mmodules do
# filter out modules outside wanted projects
if m.mgroup == null then continue
collect_important_importation
- # Collect interessing edges
+ # Collect interesting edges
var sub_hierarchy = new POSet[MModule]
for m in mmodules do
sub_hierarchy.add_node(m)