modelize: prevent the use of `lazy` on methods
[nit.git] / src / modelize / modelize_property.nit
index ba62b6e..35a50c3 100644 (file)
@@ -469,9 +469,9 @@ redef class APropdef
        # The associated propdef once build by a `ModelBuilder`
        var mpropdef: nullable MPROPDEF is writable
 
-       private fun build_property(modelbuilder: ModelBuilder, mclassdef: MClassDef) is abstract
-       private fun build_signature(modelbuilder: ModelBuilder) is abstract
-       private fun check_signature(modelbuilder: ModelBuilder) is abstract
+       private fun build_property(modelbuilder: ModelBuilder, mclassdef: MClassDef) do end
+       private fun build_signature(modelbuilder: ModelBuilder) do end
+       private fun check_signature(modelbuilder: ModelBuilder) do end
        private fun new_property_visibility(modelbuilder: ModelBuilder, mclassdef: MClassDef, nvisibility: nullable AVisibility): MVisibility
        do
                var mvisibility = public_visibility
@@ -863,6 +863,10 @@ redef class AMethPropdef
                mpropdef.is_abstract = self.get_single_annotation("abstract", modelbuilder) != null
                mpropdef.is_intern = self.get_single_annotation("intern", modelbuilder) != null
                mpropdef.is_extern = self.n_extern_code_block != null or self.get_single_annotation("extern", modelbuilder) != null
+
+               # Check annotations
+               var at = self.get_single_annotation("lazy", modelbuilder)
+               if at != null then modelbuilder.error(at, "Syntax error: `lazy` must be used on attributes.")
        end
 
        redef fun check_signature(modelbuilder)