modelize_property: use resolve_mtype_unchecked during build_signature
[nit.git] / src / frontend / serialization_phase.nit
index a035c8e..2b68eea 100644 (file)
@@ -24,7 +24,10 @@ import modelize
 private import annotation
 
 redef class ToolContext
+       # Generate serialization and deserialization methods on `auto_serializable` annotated classes.
        var serialization_phase_pre_model: Phase = new SerializationPhasePreModel(self, null)
+
+       # The second phase of the serialization
        var serialization_phase_post_model: Phase = new SerializationPhasePostModel(self,
                [modelize_class_phase, serialization_phase_pre_model])
 
@@ -47,7 +50,7 @@ private class SerializationPhasePreModel
                # Add `super Serializable`
                var sc = toolcontext.parse_superclass("Serializable")
                sc.location = nat.location
-               nclassdef.n_superclasses.add sc
+               nclassdef.n_propdefs.add sc
 
                generate_serialization_method(nclassdef)
 
@@ -94,8 +97,11 @@ private class SerializationPhasePreModel
        end
 
        # Add a constructor to the automated nclassdef
-       fun generate_deserialization_init(nclassdef: AClassdef)
+       fun generate_deserialization_init(nclassdef: AStdClassdef)
        do
+               # Do not generate constructors for abstract classes
+               if nclassdef.n_classkind isa AAbstractClasskind then return
+
                var npropdefs = nclassdef.n_propdefs
 
                var code = new Array[String]
@@ -153,7 +159,9 @@ private class SerializationPhasePreModel
 
                for nclassdef in nclassdefs do
                        var name = nclassdef.n_id.text
-                       if nclassdef.n_formaldefs.is_empty then
+                       if nclassdef.n_formaldefs.is_empty and
+                               not nclassdef.n_classkind isa AAbstractClasskind then
+
                                code.add "              if name == \"{name}\" then return new {name}.from_deserializer(self)"
                        end
                end