error(nvisibility, "Error: refinement changed the visibility from a {mclass.visibility} to a {mvisibility}")
end
nclassdef.mclass = mclass
- nmodule.mclass2nclassdef[mclass] = nclassdef
+ if not nmodule.mclass2nclassdef.has_key(mclass) then
+ nmodule.mclass2nclassdef[mclass] = nclassdef
+ nclassdef.all_defs = [nclassdef]
+ else
+ nmodule.mclass2nclassdef[mclass].all_defs.add(nclassdef)
+ end
end
# Visit the AST and create the `MClassDef` objects
var objectclass = try_get_mclass_by_name(nmodule, mmodule, "Object")
var mclass = nclassdef.mclass
if mclass == null then return # Skip error
- #var mclassdef = nclassdef.mclassdef.as(not null)
+
+ # In case of non-standard AClassdef, try to attach to an already existing mclassdef
+ var other_nclassdef = nmodule.mclass2nclassdef[mclass]
+ if other_nclassdef != nclassdef then
+ assert not nclassdef isa AStdClassdef
+ nclassdef.mclassdef = other_nclassdef.mclassdef
+ return
+ end
var names = new Array[String]
var bounds = new Array[MType]
if nclassdef isa AStdClassdef then
var ndoc = nclassdef.n_doc
- if ndoc != null then mclassdef.mdoc = ndoc.to_mdoc
+ if ndoc != null then
+ var mdoc = ndoc.to_mdoc
+ mclassdef.mdoc = mdoc
+ mdoc.original_mentity = mclassdef
+ end
end
if mclassdef.is_intro then
var mmodule = nmodule.mmodule.as(not null)
for imp in mmodule.in_importation.direct_greaters do
+ if not mmodule2nmodule.has_key(imp) then continue
build_classes(mmodule2nmodule[imp])
end
if errcount != toolcontext.error_count then return
# Create the mclassdef hierarchy
- for nclassdef in nmodule.n_classdefs do
- var mclassdef = nclassdef.mclassdef.as(not null)
+ for mclassdef in mmodule.mclassdefs do
mclassdef.add_in_hierarchy
end
var mclass: nullable MClass
# The associated MClassDef once build by a `ModelBuilder`
var mclassdef: nullable MClassDef
+ # All (self and other) definitions for the same mclassdef
+ var all_defs: nullable Array[AClassdef]
end
redef class AClasskind