X-Git-Url: http://nitlanguage.org diff --git a/src/uml/uml_class.nit b/src/uml/uml_class.nit index 7581f2a..92317a4 100644 --- a/src/uml/uml_class.nit +++ b/src/uml/uml_class.nit @@ -16,10 +16,11 @@ 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" @@ -43,7 +44,7 @@ end 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 @@ -56,13 +57,13 @@ redef class Model 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 @@ -74,20 +75,19 @@ redef class MClass end if arity > 0 then t.add "[" - var formal = intro.parameter_names - t.add formal.first - for i in [1 .. formal.length[ do + t.add mparameters.first.name + for i in [1 .. mparameters.length[ do t.add ", " - t.add formal[i] + t.add mparameters[i].name end t.add "]" end 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 @@ -96,8 +96,13 @@ redef class MClass 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 @@ -175,7 +180,7 @@ redef class MVisibility # # 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 @@ -211,8 +216,7 @@ end redef class MParameterType redef fun tpl_class(c, m) do - var n = mclass.intro.parameter_names - return n[rank] + return name end end