Generates a dot-compatible Writable UML Class diagram from self

Property definitions

nitc :: uml_class $ MEntity :: tpl_class
	# Generates a dot-compatible `Writable` UML Class diagram from `self`
	fun tpl_class(model: UMLModel): Writable is abstract
src/uml/uml_class.nit:48,2--49,53

nitc :: uml_class $ MClass :: tpl_class
	redef fun tpl_class(model) do
		var name = name.escape_to_dot
		var t = new Template
		t.add "{name} [\n label = \"\{"
		if kind == abstract_kind then
			t.add "abstract\\n{name}"
		else if kind == interface_kind then
			t.add "interface\\n{name}"
		else
			t.add "{name}"
		end
		if arity > 0 then
			t.add "["
			t.add mparameters.first.name
			for i in [1 .. mparameters.length[ do
				t.add ", "
				t.add mparameters[i].name
			end
			t.add "]"
		end
		t.add "|"
		var props = collect_intro_mproperties(model.filter)
		for i in props do
			if not i isa MAttribute then continue
			t.add i.tpl_class(model)
			t.add "\\l"
		end
		t.add "|"
		for i in props do
			if not i isa MMethod then continue
			t.add i.tpl_class(model)
			t.add "\\l"
		end
		t.add "\}\"\n]\n"
		var g = in_hierarchy(model.mainmodule).direct_greaters
		for i in g do
			if not model.filter.accept_mentity(i) then continue
			t.add "{i.name} -> {name} [dir=back"
			if i.kind == interface_kind then
				t.add " arrowtail=open style=dashed"
			else
				t.add " arrowtail=empty"
			end
			t.add "];\n"
		end
		return t
	end
src/uml/uml_class.nit:54,2--100,4

nitc :: uml_class $ MClassType :: tpl_class
	redef fun tpl_class(model) do
		return name
	end
src/uml/uml_class.nit:175,2--177,4

nitc :: uml_class $ MSignature :: tpl_class
	redef fun tpl_class(model) do
		var t = new Template
		t.add "("
		var params = new Array[MParameter]
		for i in mparameters do
			params.add i
		end
		if params.length > 0 then
			t.add params.first.name.escape_to_dot
			t.add ": "
			t.add params.first.mtype.tpl_class(model)
			for i in [1 .. params.length [ do
				t.add ", "
				t.add params[i].name.escape_to_dot
				t.add ": "
				t.add params[i].mtype.tpl_class(model)
			end
		end
		t.add ")"
		if return_mtype != null then
			t.add ": "
			t.add return_mtype.tpl_class(model)
		end
		return t
	end
src/uml/uml_class.nit:117,2--141,4

nitc :: uml_class $ MAttribute :: tpl_class
	redef fun tpl_class(model) do
		var tpl = new Template
		tpl.add visibility.tpl_class
		tpl.add " "
		tpl.add name.escape_to_dot
		tpl.add ": "
		tpl.add intro.static_mtype.tpl_class(model)
		return tpl
	end
src/uml/uml_class.nit:145,2--153,4

nitc :: uml_class $ MGenericType :: tpl_class
	redef fun tpl_class(model) do
		var t = new Template
		t.add name.substring(0, name.index_of('['))
		t.add "["
		t.add arguments.first.tpl_class(model)
		for i in [1 .. arguments.length[ do
			t.add ", "
			t.add arguments[i].tpl_class(model)
		end
		t.add "]"
		return t
	end
src/uml/uml_class.nit:181,2--192,4

nitc :: uml_class $ MVirtualType :: tpl_class
	redef fun tpl_class(model) do
		return name
	end
src/uml/uml_class.nit:202,2--204,4

nitc :: uml_class $ MParameterType :: tpl_class
	redef fun tpl_class(model) do
		return name
	end
src/uml/uml_class.nit:196,2--198,4

nitc :: uml_class $ MNullableType :: tpl_class
	redef fun tpl_class(model) do
		var t = new Template
		t.add "nullable "
		t.add mtype.tpl_class(model)
		return t
	end
src/uml/uml_class.nit:208,2--213,4

nitc :: uml_class $ MMethod :: tpl_class
	redef fun tpl_class(model) do
		var tpl = new Template
		tpl.add visibility.tpl_class
		tpl.add " "
		tpl.add name.escape_to_dot
		tpl.add intro.msignature.tpl_class(model)
		return tpl
	end
src/uml/uml_class.nit:105,2--112,4