]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Recursively check for Version.deprecated attribute from bottom to top
authorRico Tzschichholz <ricotz@ubuntu.com>
Mon, 24 Apr 2023 08:00:44 +0000 (10:00 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 27 May 2026 09:03:18 +0000 (11:03 +0200)
tests/annotations/deprecated-struct-minimal.c-expected
tests/annotations/deprecated.c-expected
tests/girwriter/GirTest-1.0.gir-expected
tests/girwriter/girtest.vapigen-expected
vala/valaversionattribute.vala

index 3d4d43d767475dd1be0e16d2cb625b7087892b3d..efadce8338752c3b000c4f948101b5865643e89d 100644 (file)
@@ -15,7 +15,7 @@
 typedef struct _Foo Foo;
 
 struct _Foo {
-       void* bar;
+       void* bar G_GNUC_DEPRECATED ;
 } G_GNUC_DEPRECATED ;
 
 static void _vala_main (void);
index f2eb831a6db93b35d2a3ad43015f788f572f7ab4..1528525f3d297b4e9086d3a296f32328256d45c2 100644 (file)
@@ -97,7 +97,7 @@ struct _FooClassClass {
 };
 
 struct _FooClassPrivate {
-       gint _bar;
+       gint _bar G_GNUC_DEPRECATED ;
 };
 
 struct _AFoo {
@@ -133,8 +133,8 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (FooClass, g_object_unref)
 VALA_EXTERN gint fooclass_foov (FooClass* self) G_GNUC_DEPRECATED ;
 VALA_EXTERN gint fooclass_foo (FooClass* self) G_GNUC_DEPRECATED ;
 static gint fooclass_real_foov (FooClass* self) G_GNUC_DEPRECATED ;
-VALA_EXTERN FooClass* fooclass_new (void);
-VALA_EXTERN FooClass* fooclass_construct (GType object_type);
+VALA_EXTERN FooClass* fooclass_new (void) G_GNUC_DEPRECATED ;
+VALA_EXTERN FooClass* fooclass_construct (GType object_type) G_GNUC_DEPRECATED ;
 VALA_EXTERN gint fooclass_get_bar (FooClass* self) G_GNUC_DEPRECATED ;
 VALA_EXTERN void fooclass_set_bar (FooClass* self,
                        gint value) G_GNUC_DEPRECATED ;
@@ -153,7 +153,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (AFoo, g_object_unref)
 VALA_EXTERN gint afoo_fooa (AFoo* self) G_GNUC_DEPRECATED ;
 VALA_EXTERN gint afoo_foo (AFoo* self) G_GNUC_DEPRECATED ;
 static gint afoo_real_fooa (AFoo* self) G_GNUC_DEPRECATED ;
-VALA_EXTERN AFoo* afoo_construct (GType object_type);
+VALA_EXTERN AFoo* afoo_construct (GType object_type) G_GNUC_DEPRECATED ;
 static GType afoo_get_type_once (void);
 VALA_EXTERN GType ifoo_get_type (void) G_GNUC_CONST ;
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (IFoo, g_object_unref)
index 14f6a8b8680c19c27246bfbed12b3bb396ba43e4..515756b93e72c032debca042493085b610d699e3 100644 (file)
                <field name="priv" readable="0" private="1">
                        <type name="DeprecatedClassTestPrivate" c:type="GirTestDeprecatedClassTestPrivate*"/>
                </field>
-               <constructor name="new" c:identifier="gir_test_deprecated_class_test_new">
+               <constructor name="new" c:identifier="gir_test_deprecated_class_test_new" deprecated="1">
                        <return-value transfer-ownership="full">
                                <type name="GirTest.DeprecatedClassTest" c:type="GirTestDeprecatedClassTest*"/>
                        </return-value>
index 202d5e0db63e82de056ebad64177b6f84956fafa..8eff9c933f5864d9d905194e1021e882f6e95c7e 100644 (file)
@@ -33,6 +33,7 @@ namespace GirTest {
        public class DeprecatedClassTest {
                public int ref_count;
                [CCode (has_construct_function = false)]
+               [Version (deprecated = true)]
                public DeprecatedClassTest ();
        }
        [CCode (cheader_filename = "girtest.h", type_id = "gir_test_generics_object_test_get_type ()")]
index aca09768e3ba4066eff20ac438273a906950e2c9..30b6a6d5a5ee579c63c9b8a876c4402459b4246b 100644 (file)
@@ -50,12 +50,21 @@ public class Vala.VersionAttribute {
         */
        public bool deprecated {
                get {
-                       if (_deprecated == null) {
+                       if (_deprecated != null) {
+                               return _deprecated;
+                       }
+                       if (symbol.has_attribute ("Version")
+                           // [Deprecated] is deprecated
+                           || symbol.has_attribute ("Deprecated")) {
                                _deprecated = symbol.get_attribute_bool ("Version", "deprecated", false)
                                        || symbol.has_attribute_argument ("Version", "deprecated_since")
                                        || symbol.has_attribute_argument ("Version", "replacement")
                                        // [Deprecated] is deprecated
                                        || symbol.has_attribute ("Deprecated");
+                       } else if (symbol.parent_symbol is TypeSymbol) {
+                               _deprecated = symbol.parent_symbol.version.deprecated;
+                       } else {
+                               _deprecated = false;
                        }
                        return _deprecated;
                }