check_annotation: warn if a module declares again annotation
authorJean Privat <jean@pryen.org>
Thu, 31 Jul 2014 13:01:28 +0000 (09:01 -0400)
committerJean Privat <jean@pryen.org>
Mon, 4 Aug 2014 16:20:10 +0000 (12:20 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

src/check_annotation.nit

index 38b179f..8641e27 100644 (file)
@@ -51,14 +51,23 @@ private class CheckAnnotationPhase
                # Get all the new annotations
                var annots = nmoduledecl.get_annotations("new_annotation")
 
+               var super_mmodules = declared_annotations.lookup_all_modules(mmodule, private_visibility)
+
                # Add each new annotations in the map
                for annot in annots do
                        var name = annot.arg_as_id(modelbuilder)
                        if name == null then continue
 
+                       for m in super_mmodules do
+                               if declared_annotations[m].has(name) then
+                                       modelbuilder.warning(annot, "Warning: an annotation `{name}` is already declared in module `{m}`")
+                                       break label
+                               end
+                       end
+
                        declared_annotations[mmodule].add(name)
                        #annot.debug "add {mmodule}: {name}"
-               end
+               end label
        end
 
        # Raw new-line separated list of primitive annotation