modelize_property: add readonly annotation on attributes
authorJean Privat <jean@pryen.org>
Mon, 21 Jul 2014 18:55:55 +0000 (14:55 -0400)
committerJean Privat <jean@pryen.org>
Tue, 22 Jul 2014 00:30:30 +0000 (20:30 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

src/modelize_property.nit

index 938a3a0..898366b 100644 (file)
@@ -18,6 +18,7 @@
 module modelize_property
 
 import modelize_class
+import annotation
 
 redef class ToolContext
        var modelize_property_phase: Phase = new ModelizePropertyPhase(self, [modelize_class_phase])
@@ -705,6 +706,15 @@ redef class AAttrPropdef
                        modelbuilder.mpropdef2npropdef[mreadpropdef] = self
                        mreadpropdef.mdoc = mpropdef.mdoc
 
+                       var atreadonly = self.get_single_annotation("readonly", modelbuilder)
+                       if atreadonly != null then
+                               if n_expr == null then
+                                       modelbuilder.error(atreadonly, "Error: a readonly attribute needs a value")
+                               end
+                               # No setter, so just leave
+                               return
+                       end
+
                        var writename = name + "="
                        var nwritable = self.n_writable
                        var mwriteprop = modelbuilder.try_get_mproperty_by_name(nid2, mclassdef, writename).as(nullable MMethod)