Merge: Generalized class members
[nit.git] / src / modelize / modelize_property.nit
index 83acc62..a643192 100644 (file)
@@ -224,11 +224,20 @@ redef class ModelBuilder
 
                # Look at the autoinit class-annotation
                var autoinit = nclassdef.get_single_annotation("autoinit", self)
+               var noautoinit = nclassdef.get_single_annotation("noautoinit", self)
                if autoinit != null then
                        # Just throws the collected initializers
                        mparameters.clear
                        initializers.clear
 
+                       if noautoinit != null then
+                               error(autoinit, "Error: `autoinit` and `noautoinit` are incompatible.")
+                       end
+
+                       if autoinit.n_args.is_empty then
+                               error(autoinit, "Syntax error: `autoinit` expects method identifiers, use `noautoinit` to clear all autoinits.")
+                       end
+
                        # Get and check each argument
                        for narg in autoinit.n_args do
                                var id = narg.as_id
@@ -264,6 +273,13 @@ redef class ModelBuilder
                                        abort
                                end
                        end
+               else if noautoinit != null then
+                       if initializers.is_empty then
+                               warning(noautoinit, "useless-noautoinit", "Warning: the list of autoinit is already empty.")
+                       end
+                       # Just clear initializers
+                       mparameters.clear
+                       initializers.clear
                else
                        # Search the longest-one and checks for conflict
                        var longest = spropdefs.first
@@ -453,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