From: Jeremy Philippe Date: Sat, 21 Dec 2019 10:54:30 +0000 (+0100) Subject: vala: Allow to override base interface properties explicitly X-Git-Tag: 0.47.2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b977da4f72503c9688725a492515c8443b2d83ae;p=thirdparty%2Fvala.git vala: Allow to override base interface properties explicitly --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 21bfb431e..8be08ce07 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -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 index 000000000..e9d9b0cda --- /dev/null +++ b/tests/objects/interface-property-override.vala @@ -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); + } +} diff --git a/vala/valaproperty.vala b/vala/valaproperty.vala index 759735715..04f3d4958 100644 --- a/vala/valaproperty.vala +++ b/vala/valaproperty.vala @@ -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 ())); }