From: Rico Tzschichholz Date: Tue, 12 Mar 2019 09:29:46 +0000 (+0100) Subject: vala: Report error for public creation methods of abstract classes X-Git-Tag: 0.45.1~106 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2caef4facc1da5c390b94fa11ae52f51d6fc8d6d;p=thirdparty%2Fvala.git vala: Report error for public creation methods of abstract classes Only report a warning for external creation methods to reduce the initial fallout. Fixes https://gitlab.gnome.org/GNOME/vala/issues/766 --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 6c1653bda..41481e7e8 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -279,6 +279,7 @@ TESTS = \ objects/classes-implicit-implementation.vala \ objects/compact-class.vala \ objects/compact-class-destructor.vala \ + objects/constructor-abstract-public.test \ objects/constructor-variadic.test \ objects/constructors.vala \ objects/destructors.vala \ diff --git a/tests/objects/constructor-abstract-public.test b/tests/objects/constructor-abstract-public.test new file mode 100644 index 000000000..4058ccf9c --- /dev/null +++ b/tests/objects/constructor-abstract-public.test @@ -0,0 +1,9 @@ +Invalid Code + +abstract class Foo { + public Foo () { + } +} + +void main () { +} diff --git a/vala/valaclass.vala b/vala/valaclass.vala index 51e8fbade..933a67c26 100644 --- a/vala/valaclass.vala +++ b/vala/valaclass.vala @@ -296,6 +296,16 @@ public class Vala.Class : ObjectTypeSymbol { m.error = true; return; } + if (is_abstract && cm.access == SymbolAccessibility.PUBLIC) { + //TODO Report an error for external constructors too + if (external_package) { + Report.warning (m.source_reference, "Creation method of abstract class cannot be public."); + } else { + Report.error (m.source_reference, "Creation method of abstract class cannot be public."); + error = true; + return; + } + } } base.add_method (m);