src/serialization: detect incoherence in nested serialize annotations
authorAlexis Laferrière <alexis.laf@xymus.net>
Fri, 29 May 2015 01:11:36 +0000 (21:11 -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 99f0389..ac128c6 100644 (file)
@@ -85,8 +85,32 @@ private class SerializationPhasePreModel
                                "Warning: duplicated annotation `{text}`.")
                end
 
+               # Check the `serialize` state of the parent
+               if not node isa AModuledecl then
+                       var up_serialize = false
+                       var up: nullable ANode = node
+                       loop
+                               up = up.parent
+                               if up == null then
+                                       break
+                               else if up.is_serialize then
+                                       up_serialize = true
+                                       break
+                               else if up.is_noserialize then
+                                       break
+                               end
+                       end
 
                generate_serialization_method(nclassdef)
+                       # Check for useless double declarations
+                       if serialize and up_serialize then
+                               toolcontext.warning(node.location, "useless-serialize",
+                                       "Warning: superfluous use of `{text}`.")
+                       else if noserialize and not up_serialize then
+                               toolcontext.warning(node.location, "useless-noserialize",
+                                       "Warning: superfluous use of `{text}`.")
+                       end
+               end
        end
 
                generate_deserialization_init(nclassdef)