module uml_class
import uml_base
+import model::model_collect
redef class UMLModel
# Generates a UML class diagram from a `Model`
- fun generate_class_uml: Streamable do
+ fun generate_class_uml: Writable do
var tpl = new Template
tpl.add "digraph G \{\n"
tpl.add """ fontname = "Bitstream Vera Sans"
redef class Model
# Generates a UML Class diagram from the entities of a `Model`
- fun tpl_class(ctx: ToolContext, main: MModule): Streamable do
+ fun tpl_class(ctx: ToolContext, main: MModule): Writable do
var t = new Template
for i in mclasses do
if not ctx.private_gen and i.visibility != public_visibility then continue
end
redef class MEntity
- # Generates a dot-compatible `Streamable` UML Class diagram from `self`
- fun tpl_class(ctx: ToolContext, main: MModule): Streamable is abstract
+ # Generates a dot-compatible `Writable` UML Class diagram from `self`
+ fun tpl_class(ctx: ToolContext, main: MModule): Writable is abstract
end
redef class MClass
- redef fun tpl_class(ctx, main): Streamable do
+ redef fun tpl_class(ctx, main) do
var t = new Template
t.add "{name} [\n label = \"\{"
if kind == abstract_kind then
t.add "|"
var props: Collection[MProperty]
if ctx.private_gen then
- props = intro_mproperties(none_visibility)
+ props = collect_intro_mproperties(none_visibility)
else
- props = intro_mproperties(public_visibility)
+ props = collect_intro_mproperties(public_visibility)
end
for i in props do
if i isa MAttribute then
end
end
t.add "|"
- for i in intro_methods do
- if not ctx.private_gen and i.visibility != public_visibility then continue
+ var meths
+ if ctx.private_gen then
+ meths = collect_intro_mmethods(none_visibility)
+ else
+ meths = collect_intro_mmethods(public_visibility)
+ end
+ for i in meths do
t.add i.tpl_class(ctx, main)
t.add "\\l"
end
#
# assert public_visibility.tpl_class == "+"
# assert private_visibility.tpl_class == "-"
- fun tpl_class: Streamable do
+ fun tpl_class: Writable do
if self == private_visibility then
return "-"
else if self == protected_visibility then