]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Allow to override base interface properties explicitly b977da4f72503c9688725a492515c8443b2d83ae
authorJeremy Philippe <jeremy.philippe@gmail.com>
Sat, 21 Dec 2019 10:54:30 +0000 (11:54 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sat, 21 Dec 2019 16:36:06 +0000 (17:36 +0100)
tests/Makefile.am
tests/objects/interface-property-override.vala [new file with mode: 0644]
vala/valaproperty.vala

index 21bfb431e673e3f983c414e62d3706a08e9412cf..8be08ce07589d885e36e57bc74b6dbdd4dcf4427 100644 (file)
@@ -344,6 +344,7 @@ TESTS = \
        objects/interface-generics.vala \
        objects/interface-property-base-access.vala \
        objects/interface-property-delegate.vala \
+       objects/interface-property-override.vala \
        objects/interface-virtual-override.vala \
        objects/methods.vala \
        objects/paramspec.vala \
diff --git a/tests/objects/interface-property-override.vala b/tests/objects/interface-property-override.vala
new file mode 100644 (file)
index 0000000..e9d9b0c
--- /dev/null
@@ -0,0 +1,54 @@
+interface IFoo {
+       public virtual int bar {
+               get {
+                       assert_not_reached ();
+               }
+               set {
+                       assert_not_reached ();
+               }
+       }
+}
+
+class Foo : IFoo {
+       public override int bar {
+               get {
+                       return 42;
+               }
+               set {
+               }
+       }
+}
+
+interface IBar : Object {
+       public virtual int foo {
+               get {
+                       assert_not_reached ();
+               }
+               set {
+                       assert_not_reached ();
+               }
+       }
+}
+
+class Bar : Object, IBar {
+       public override int foo {
+               get {
+                       return 23;
+               }
+               set {
+               }
+       }
+}
+
+void main () {
+       {
+               var foo = new Foo ();
+               foo.bar = 0;
+               assert (foo.bar == 42);
+       }
+       {
+               var bar = new Bar ();
+               bar.foo = 0;
+               assert (bar.foo == 23);
+       }
+}
index 75973571596da9343f6010746ada30383d0284bd..04f3d4958688db957bea98fc5cb3b4eae48de922 100644 (file)
@@ -500,7 +500,7 @@ public class Vala.Property : Symbol, Lockable {
                        Report.error (source_reference, "property type `%s' is less accessible than property `%s'".printf (property_type.to_string (), get_full_name ()));
                }
 
-               if (overrides && base_property == null) {
+               if (overrides && base_property == null && base_interface_property == null) {
                        Report.error (source_reference, "%s: no suitable property found to override".printf (get_full_name ()));
                }