src/serialization: detect serialize from class, module and attributes
authorAlexis Laferrière <alexis.laf@xymus.net>
Fri, 29 May 2015 00:47:05 +0000 (20:47 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Fri, 29 May 2015 20:46:03 +0000 (16:46 -0400)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

src/frontend/serialization_phase.nit

index ac128c6..7b3e8b8 100644 (file)
@@ -116,10 +116,34 @@ private class SerializationPhasePreModel
                generate_deserialization_init(nclassdef)
        redef fun process_nclassdef(nclassdef)
        do
+               if not nclassdef isa AStdClassdef then return
+
+               # Is there a declaration on the classdef or the module?
+               var serialize = nclassdef.is_serialize
+
+               if not serialize and not nclassdef.is_noserialize then
+                       # Is the module marked serialize?
+                       serialize = nclassdef.parent.as(AModule).is_serialize
+               end
+
+               var per_attribute = false
+               if not serialize then
+                       # Is there an attribute marked serialize?
+                       for npropdef in nclassdef.n_propdefs do
+                               if npropdef.is_serialize then
+                                       serialize = true
+                                       per_attribute = true
+                                       break
+                               end
+                       end
+               end
+
+               if serialize then
                        # Add `super Serializable`
                        var sc = toolcontext.parse_superclass("Serializable")
                        sc.location = nclassdef.location
                        nclassdef.n_propdefs.add sc
+               end
        end
 
        redef fun process_nmodule(nmodule)