summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Werbeck <simon.werbeck@gmail.com>2014-08-14 21:47:44 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2017-03-09 20:31:05 +0100
commit616f94536eddb2735360f38ff29e40e3dc277fd1 (patch)
tree69d8b36630c687f5cf074ddd6ebaa52f77a56f8d
parentdc456fcb24ab5c8e588629c68a467d8a1ac97a6f (diff)
downloadvala-616f94536eddb2735360f38ff29e40e3dc277fd1.tar.gz
vala: Disallow private accessors in overridable properties
https://bugzilla.gnome.org/show_bug.cgi?id=603491
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/objects/bug603491.test12
-rw-r--r--vala/valapropertyaccessor.vala6
3 files changed, 19 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 359942df4..c8186a820 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -174,6 +174,7 @@ TESTS = \
objects/bug596621.vala \
objects/bug597155.vala \
objects/bug597161.vala \
+ objects/bug603491.test \
objects/bug613486.vala \
objects/bug613840.vala \
objects/bug620675.vala \
diff --git a/tests/objects/bug603491.test b/tests/objects/bug603491.test
new file mode 100644
index 000000000..ada89523f
--- /dev/null
+++ b/tests/objects/bug603491.test
@@ -0,0 +1,12 @@
+Invalid Code
+
+public abstract class Foo : Object {
+ public abstract string baz { get; private set; }
+}
+
+public class Bar : Foo {
+ public override string baz { get; private set; }
+}
+
+void main () {
+}
diff --git a/vala/valapropertyaccessor.vala b/vala/valapropertyaccessor.vala
index 90048486e..81981b84a 100644
--- a/vala/valapropertyaccessor.vala
+++ b/vala/valapropertyaccessor.vala
@@ -178,6 +178,12 @@ public class Vala.PropertyAccessor : Subroutine {
}
}
+ if ((prop.is_abstract || prop.is_virtual || prop.overrides) && access == SymbolAccessibility.PRIVATE) {
+ error = true;
+ Report.error (source_reference, "Property `%s' with private accessor cannot be marked as abstract, virtual or override".printf (prop.get_full_name ()));
+ return false;
+ }
+
if (body != null) {
if (writable || construction) {
body.scope.add (value_parameter.name, value_parameter);