# Is empty for entities without an ID.
var model_id: String = "" is writable
+ # The full (qualified) name, as presented by the original model.
+ #
+ # Fully independant of `name`. By default, equals to `""` for the root
+ # namespace.
+ var full_name: nullable String = null is writable
+
# Associated documentation.
var doc = new JsonArray is writable
end
# The short (unqualified) name.
- #
- # May be also set by `full_name=`.
fun name=(name: String) do
self["name"] = name
end
end
# The namespace separator of Nit/C++.
- fun ns_separator: String do return "::"
-
- # The name separator used when calling `full_name=`.
- fun name_separator: String do return ns_separator
-
- # The full (qualified) name.
#
- # Also set `name` using `name_separator`.
- fun full_name=(full_name: String) do
- var m = full_name.search_last(name_separator)
-
- self["full_name"] = full_name
- if m == null then
- name = full_name
- else
- name = full_name.substring_from(m.after)
- end
- end
-
- # The full (qualified) name.
- fun full_name: String do
- var full_name = self["full_name"]
- assert full_name isa String
- return full_name
- end
-
- # Set the full name using the current name and the specified parent name.
- fun parent_name=(parent_name: String) do
- if parent_name.is_empty then
- self["full_name"] = name
- else
- self["full_name"] = parent_name + name_separator + name
- end
- end
+ # Used to join two or more names when we need to work around some
+ # limitations of the Nit model.
+ fun ns_separator: String do return "::"
# Set the location of the entity in the source code.
fun location=(location: nullable Location) do
inner_namespaces.add new NamespaceRef(id, full_name)
end
- redef fun declare_class(id: String, full_name: String, prot: String) do
+ redef fun declare_class(id, name, prot) do
+ assert not id.is_empty else
+ sys.stderr.write "Inner class declarations without ID are not yet supported.\n"
+ end
graph.class_to_ns[id] = self
end
redef fun put_in_graph do
super
- var full_name = self["full_name"]
+ var full_name = self.full_name
if full_name isa String then graph.namespaces[full_name] = self
end
init do
super
- self["full_name"] = ""
- self["name"] = graph.project_name
+ full_name = ""
+ name = graph.project_name
end
end