name
visible by the module mmodule
.Visibility in modules is correctly handled.
If no such a class exists, then null is returned.
If more than one class exists, then an error on anode
is displayed and null is returned.
FIXME: add a way to handle class name conflict
# Return a class named `name` visible by the module `mmodule`.
# Visibility in modules is correctly handled.
# If no such a class exists, then null is returned.
# If more than one class exists, then an error on `anode` is displayed and null is returned.
# FIXME: add a way to handle class name conflict
fun try_get_mclass_by_name(anode: nullable ANode, mmodule: MModule, name: String): nullable MClass
do
var classes = model.get_mclasses_by_name(name)
if classes == null then
return null
end
var res: nullable MClass = null
for mclass in classes do
if not mmodule.in_importation <= mclass.intro_mmodule then continue
if not mmodule.is_visible(mclass.intro_mmodule, mclass.visibility) then continue
if res == null then
res = mclass
else
error(anode, "Error: ambiguous class name `{name}`; conflict between `{mclass.full_name}` and `{res.full_name}`.")
return null
end
end
return res
end
src/modelbuilder_base.nit:58,2--82,4