From: Jean Privat Date: Sat, 6 Sep 2014 13:39:31 +0000 (-0400) Subject: modelize: introduce annotation X-Git-Tag: v0.6.9~49^2~1 X-Git-Url: http://nitlanguage.org modelize: introduce annotation Signed-off-by: Jean Privat --- diff --git a/src/frontend/check_annotation.nit b/src/frontend/check_annotation.nit index 367ba4d..6249e91 100644 --- a/src/frontend/check_annotation.nit +++ b/src/frontend/check_annotation.nit @@ -75,6 +75,7 @@ private class CheckAnnotationPhase var primtives_annotations_list = """ new_annotation +deprecated fixed lazy noinit diff --git a/src/modelize/modelize_property.nit b/src/modelize/modelize_property.nit index 6b96137..4b1c129 100644 --- a/src/modelize/modelize_property.nit +++ b/src/modelize/modelize_property.nit @@ -420,6 +420,18 @@ redef class APropdef mpropdef.mdoc = mdoc mdoc.original_mentity = mpropdef end + + var at_deprecated = get_single_annotation("deprecated", modelbuilder) + if at_deprecated != null then + if not mpropdef.is_intro then + modelbuilder.error(self, "Error: method redefinition cannot be deprecated.") + else + var info = new MDeprecationInfo + ndoc = at_deprecated.n_doc + if ndoc != null then info.mdoc = ndoc.to_mdoc + mpropdef.mproperty.deprecation = info + end + end end private fun check_redef_property_visibility(modelbuilder: ModelBuilder, nvisibility: nullable AVisibility, mprop: MProperty) @@ -851,6 +863,7 @@ redef class AAttrPropdef var mvisibility = new_property_visibility(modelbuilder, mclassdef, self.n_visibility) mreadprop = new MMethod(mclassdef, readname, mvisibility) if not self.check_redef_keyword(modelbuilder, mclassdef, n_kwredef, false, mreadprop) then return + mreadprop.deprecation = mprop.deprecation else if not self.check_redef_keyword(modelbuilder, mclassdef, n_kwredef, true, mreadprop) then return check_redef_property_visibility(modelbuilder, self.n_visibility, mreadprop) @@ -905,6 +918,7 @@ redef class AAttrPropdef end mwriteprop = new MMethod(mclassdef, writename, mvisibility) if not self.check_redef_keyword(modelbuilder, mclassdef, nwkwredef, false, mwriteprop) then return + mwriteprop.deprecation = mprop.deprecation else if not self.check_redef_keyword(modelbuilder, mclassdef, nwkwredef or else n_kwredef, true, mwriteprop) then return if nwritable != null then diff --git a/src/semantize/typing.nit b/src/semantize/typing.nit index 462fe04..e5f131d 100644 --- a/src/semantize/typing.nit +++ b/src/semantize/typing.nit @@ -262,6 +262,16 @@ private class TypeVisitor return null end + var info = mproperty.deprecation + if info != null and self.mpropdef.mproperty.deprecation == null then + var mdoc = info.mdoc + if mdoc != null then + self.modelbuilder.warning(node, "Deprecation Warning: Method '{name}' is deprecated: {mdoc.content.first}") + else + self.modelbuilder.warning(node, "Deprecation Warning: Method '{name}' is deprecated.") + end + end + var propdefs = mproperty.lookup_definitions(self.mmodule, unsafe_type) var mpropdef if propdefs.length == 0 then