summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2023-04-24 10:00:44 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2023-04-24 10:00:44 +0200
commit94025dee675e6f5ca064fee37e93867778d38f4e (patch)
treef132e21e86d21cc571d1c44e09df665fa7a07c52
parent070465d4f28458ba9f0ad73ab35985c04ef5b63a (diff)
downloadvala-94025dee675e6f5ca064fee37e93867778d38f4e.tar.gz
vala: Recursively check for Version.deprecated attribute from bottom to top
-rw-r--r--vala/valamemberaccess.vala4
-rw-r--r--vala/valaversionattribute.vala11
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;
}