+
+ fun generate_derive_to_map_method(nclassdef: AClassdef, nat: AAnnotation)
+ do
+ var npropdefs = nclassdef.n_propdefs
+
+ var sc = toolcontext.parse_superclass("Derivable")
+ sc.location = nat.location
+ nclassdef.n_propdefs.add sc
+
+ var code = new Array[String]
+ code.add "redef fun derive_to_map"
+ code.add "do"
+ code.add " var res = super"
+
+ for attribute in npropdefs do if attribute isa AAttrPropdef then
+ var name = attribute.n_id2.text
+ code.add """ res["{{{name}}}"] = self.{{{name}}}"""
+ end
+
+ code.add " return res"
+ code.add "end"
+
+ # Create method Node and add it to the AST
+ npropdefs.push(toolcontext.parse_propdef(code.join("\n")))
+ end