]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Explicit "new" method may be incompatible with a posssible base method
authorRico Tzschichholz <ricotz@ubuntu.com>
Mon, 18 May 2020 10:26:14 +0000 (12:26 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Tue, 19 May 2020 14:54:17 +0000 (16:54 +0200)
tests/Makefile.am
tests/objects/class-new-no-override.vala [new file with mode: 0644]
vala/valamethod.vala

index 8fe220f6988bdc4e03ecfe633f3dbec558a9387e..3e63794f76b7d62b50dc7feff8a9f46a795ef7f9 100644 (file)
@@ -339,6 +339,7 @@ TESTS = \
        objects/chainup.vala \
        objects/class_only.vala \
        objects/class-destroysinstance.vala \
+       objects/class-new-no-override.vala \
        objects/classes.vala \
        objects/classes-interfaces.vala \
        objects/classes-interfaces-virtuals.vala \
diff --git a/tests/objects/class-new-no-override.vala b/tests/objects/class-new-no-override.vala
new file mode 100644 (file)
index 0000000..2ab2114
--- /dev/null
@@ -0,0 +1,17 @@
+interface IFoo : Object {
+       public virtual void foo (int i) {
+               assert (i == 42);
+       }
+}
+
+class Bar : Object, IFoo {
+       public new string foo () {
+               return "bar";
+       }
+}
+
+void main () {
+       var bar = new Bar ();
+       assert (bar.foo () == "bar");
+       ((IFoo) bar).foo (42);
+}
index 40bb578a6416de5ba40b4cf1de5345d887af2970..1084746cb254f73d1603a3c2e26df276ea0c237a 100644 (file)
@@ -685,7 +685,7 @@ public class Vala.Method : Subroutine, Callable {
                        _base_interface_method = base_match;
                        copy_attribute_double (base_match, "CCode", "instance_pos");
                        return;
-               } else if (invalid_base_match != null) {
+               } else if (!hides && invalid_base_match != null) {
                        error = true;
                        var base_method_type = new MethodType (invalid_base_match);
                        Report.error (source_reference, "overriding method `%s' is incompatible with base method `%s': %s.".printf (get_full_name (), base_method_type.to_prototype_string (), invalid_error));