diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-04-24 10:00:44 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-04-24 10:00:44 +0200 |
commit | 94025dee675e6f5ca064fee37e93867778d38f4e (patch) | |
tree | f132e21e86d21cc571d1c44e09df665fa7a07c52 | |
parent | 070465d4f28458ba9f0ad73ab35985c04ef5b63a (diff) | |
download | vala-94025dee675e6f5ca064fee37e93867778d38f4e.tar.gz |
vala: Recursively check for Version.deprecated attribute from bottom to top
-rw-r--r-- | vala/valamemberaccess.vala | 4 | ||||
-rw-r--r-- | vala/valaversionattribute.vala | 11 |
2 files changed, 13 insertions, 2 deletions
diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala index 23078f25b..cdfd95eec 100644 --- a/vala/valamemberaccess.vala +++ b/vala/valamemberaccess.vala @@ -918,7 +918,9 @@ public class Vala.MemberAccess : Expression { if (parent != member) { member.used = true; } - member.version.check (context, source_reference); + if (!(parent_node is MemberAccess)) { + member.version.check (context, source_reference); + } // FIXME Code duplication with MemberInitializer.check() if (access == SymbolAccessibility.PROTECTED && member.parent_symbol is TypeSymbol) { diff --git a/vala/valaversionattribute.vala b/vala/valaversionattribute.vala index 9ef5e0e91..3e6f1d0d7 100644 --- a/vala/valaversionattribute.vala +++ b/vala/valaversionattribute.vala @@ -50,12 +50,21 @@ public class Vala.VersionAttribute { */ public bool deprecated { get { - if (_deprecated == null) { + if (_deprecated != null) { + return _deprecated; + } + if (symbol.get_attribute ("Version") != null + // [Deprecated] is deprecated + || symbol.get_attribute ("Deprecated") != null) { _deprecated = symbol.get_attribute_bool ("Version", "deprecated", false) || symbol.get_attribute_string ("Version", "deprecated_since") != null || symbol.get_attribute_string ("Version", "replacement") != null // [Deprecated] is deprecated || symbol.get_attribute ("Deprecated") != null; + } else if (symbol.parent_symbol != null) { + _deprecated = symbol.parent_symbol.version.deprecated; + } else { + _deprecated = false; } return _deprecated; } |