type LAYOUT: PropertyLayout[E]
- private var mmodule: MModule
- init(mmodule: MModule) do self.mmodule = mmodule
-
# Compute properties ids and position
fun build_layout(mclasses: Set[MClass]): LAYOUT is abstract
end
private var colorer: MPropertyColorer[E]
- init(mmodule: MModule) do
- super
- self.colorer = new MPropertyColorer[E](mmodule)
+ init(colorer: MPropertyColorer[E]) do
+ self.colorer = colorer
end
# Compute mclasses ids and position using BM
end
# MProperty coloring
-private class MPropertyColorer[E: MProperty]
+abstract class MPropertyColorer[E: MProperty]
private var mmodule: MModule
private var class_colorer: MClassColorer
end
# Filter properties
- private fun properties(mclass: MClass): Set[E] do
- var properties = new HashSet[E]
+ private fun properties(mclass: MClass): Set[E] is abstract
+end
+
+# Coloring for MMethods
+class MMethodColorer
+ super MPropertyColorer[MMethod]
+
+ init(mmodule: MModule) do super
+
+ redef fun properties(mclass) do
+ var properties = new HashSet[MMethod]
+ for mprop in self.mmodule.properties(mclass) do
+ if mprop isa MMethod then properties.add(mprop)
+ end
+ return properties
+ end
+end
+
+# Coloring for MMAttributes
+class MAttributeColorer
+ super MPropertyColorer[MAttribute]
+
+ init(mmodule: MModule) do super
+
+ redef fun properties(mclass) do
+ var properties = new HashSet[MAttribute]
+ for mprop in self.mmodule.properties(mclass) do
+ if mprop isa MAttribute then properties.add(mprop)
+ end
+ return properties
+ end
+end
+
+# Coloring for MVirtualTypeProps
+class MVirtualTypePropColorer
+ super MPropertyColorer[MVirtualTypeProp]
+
+ init(mmodule: MModule) do super
+
+ redef fun properties(mclass) do
+ var properties = new HashSet[MVirtualTypeProp]
for mprop in self.mmodule.properties(mclass) do
- if mprop isa E then properties.add(mprop)
+ if mprop isa MVirtualTypeProp then properties.add(mprop)
end
return properties
end
var mclasses = new HashSet[MClass].from(modelbuilder.model.mclasses)
# methods coloration
- var method_coloring = new CLPropertyLayoutBuilder[MMethod](mainmodule)
+ var method_coloring = new CLPropertyLayoutBuilder[MMethod](new MMethodColorer(mainmodule))
var method_layout = method_coloring.build_layout(mclasses)
self.method_tables = build_method_tables(mclasses, method_layout)
self.compile_color_consts(method_layout.pos)
self.method_layout = method_layout
# attributes coloration
- var attribute_coloring = new CLPropertyLayoutBuilder[MAttribute](mainmodule)
+ var attribute_coloring = new CLPropertyLayoutBuilder[MAttribute](new MAttributeColorer(mainmodule))
var attr_layout = attribute_coloring.build_layout(mclasses)
self.attr_tables = build_attr_tables(mclasses, attr_layout)
self.compile_color_consts(attr_layout.pos)