neo_doxygen: Add missing documentation.
[nit.git] / contrib / neo_doxygen / src / model / class_compound.nit
index 7f2f0ab..dd73976 100644 (file)
@@ -16,6 +16,7 @@
 module model::class_compound
 
 import graph
+import member
 import type_entity
 
 # A class.
@@ -71,8 +72,17 @@ class ClassCompound
                class_def["mdoc"] = doc
        end
 
-       redef fun declare_super(id: String, name: String, prot: String, virt: String) do
-               class_def.declare_super(id, name, prot, virt)
+       redef fun declare_super(id: String, full_name: String, prot: String, virt: String) do
+               class_def.declare_super(id, full_name, prot, virt)
+       end
+
+       redef fun declare_member(member: Member) do
+               class_def.declare_member(member)
+       end
+
+       # Append the specified type parameter.
+       fun add_type_parameter(parameter: TypeParameter) do
+               class_type.arguments.add(parameter)
        end
 
        redef fun put_in_graph do
@@ -99,21 +109,64 @@ end
 class ClassDef
        super CodeBlock
 
+       # The defined class.
        var class_compound: ClassCompound
+
+       # The `model_id` of the base classes.
        var supers: SimpleCollection[String] = new Array[String]
 
+       # The set of the introduced/redefined members.
+       #
+       # To ensure that the `full_name` of each member is correctly set,
+       # `declare_member` should be used to add each member.
+       var members: SimpleCollection[Member] = new Array[Member]
+
        init do
                super
                self.labels.add("MClassDef")
+               self["is_intro"] = true
        end
 
-       fun declare_super(id: String, name: String, prot: String, virt: String) do
-               # TODO prot, virt, name
+       # Declare a base compound (usually, a base class).
+       #
+       # Parameters:
+       #
+       # * `id`: `model_id` of the base compound. May be empty.
+       # * `full_name`: qualified name of the base compound. May be empty.
+       # * `prot`: visibility (proctection) of the relationship.
+       # * `virt`: level of virtuality of the relationship.
+       fun declare_super(id: String, full_name: String, prot: String,
+                       virt: String) do
+               # TODO prot, virt, full_name
                if "" != id then
                        supers.add(id)
                end
        end
 
+       # Append the specified member.
+       fun declare_member(member: Member) do
+               var full_name = self["full_name"]
+
+               if full_name != null then
+                       member.parent_name = full_name.to_s
+               end
+               members.add(member)
+       end
+
+       redef fun full_name=(full_name: String) do
+               super
+               for m in members do
+                       m.parent_name = full_name
+               end
+       end
+
+       redef fun parent_name=(parent_name: String) do
+               super
+               for m in members do
+                       m.parent_name = full_name
+               end
+       end
+
        redef fun put_edges do
                super
                graph.add_edge(self, "BOUNDTYPE", class_compound.class_type)
@@ -121,6 +174,14 @@ class ClassDef
                for s in supers do
                        graph.add_edge(self, "INHERITS", graph.by_id[s].as(ClassCompound).class_type)
                end
+               for m in members do
+                       if m.is_intro then
+                               var intro = m.introducer.as(not null)
+                               graph.add_edge(self, "INTRODUCES", intro)
+                               graph.add_edge(intro, "INTRO_CLASSDEF", self)
+                       end
+                       graph.add_edge(self, "DECLARES", m)
+               end
        end
 end
 
@@ -138,6 +199,7 @@ class ClassType
        # You may use this attribute or `class_compound` to specify the class.
        var class_compound_id: String = "" is writable
 
+       # The type arguments or the type parameters.
        var arguments = new Array[TypeEntity]
 
        init do
@@ -146,8 +208,9 @@ class ClassType
        end
 
        # Return the number of arguments.
-       fun arity: Int do return 0 # TODO
+       fun arity: Int do return arguments.length
 
+       # Is the class generic?
        fun is_generic: Bool do return arity > 0
 
        redef fun put_in_graph do