[vala/staging: 4/7] vala: Report error for public creation methods of abstract classes
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/staging: 4/7] vala: Report error for public creation methods of abstract classes
- Date: Mon, 18 Mar 2019 09:36:00 +0000 (UTC)
commit 2caef4facc1da5c390b94fa11ae52f51d6fc8d6d
Author: Rico Tzschichholz <ricotz ubuntu com>
Date: Tue Mar 12 10:29:46 2019 +0100
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
tests/Makefile.am | 1 +
tests/objects/constructor-abstract-public.test | 9 +++++++++
vala/valaclass.vala | 10 ++++++++++
3 files changed, 20 insertions(+)
---
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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]