[vala] Do not allow abstract properties in non-abstract classes
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] Do not allow abstract properties in non-abstract classes
- Date: Wed, 16 Jun 2010 19:43:28 +0000 (UTC)
commit 0f168bc5102e8b46fcce174fd594be5a76c1a309
Author: Luca Bruno <lethalman88 gmail com>
Date: Sat Jun 12 10:34:55 2010 +0200
Do not allow abstract properties in non-abstract classes
Fixes bug 621184.
vala/valaproperty.vala | 42 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 42 insertions(+), 0 deletions(-)
---
diff --git a/vala/valaproperty.vala b/vala/valaproperty.vala
index ea9d2e1..d55b687 100644
--- a/vala/valaproperty.vala
+++ b/vala/valaproperty.vala
@@ -430,6 +430,48 @@ public class Vala.Property : Member, Lockable {
process_attributes ();
+ if (is_abstract) {
+ if (parent_symbol is Class) {
+ var cl = (Class) parent_symbol;
+ if (!cl.is_abstract) {
+ error = true;
+ Report.error (source_reference, "Abstract properties may not be declared in non-abstract classes");
+ return false;
+ }
+ } else if (!(parent_symbol is Interface)) {
+ error = true;
+ Report.error (source_reference, "Abstract properties may not be declared outside of classes and interfaces");
+ return false;
+ }
+ } else if (is_virtual) {
+ if (!(parent_symbol is Class) && !(parent_symbol is Interface)) {
+ error = true;
+ Report.error (source_reference, "Virtual properties may not be declared outside of classes and interfaces");
+ return false;
+ }
+
+ if (parent_symbol is Class) {
+ var cl = (Class) parent_symbol;
+ if (cl.is_compact) {
+ error = true;
+ Report.error (source_reference, "Virtual properties may not be declared in compact classes");
+ return false;
+ }
+ }
+ } else if (overrides) {
+ if (!(parent_symbol is Class)) {
+ error = true;
+ Report.error (source_reference, "Properties may not be overridden outside of classes");
+ return false;
+ }
+ } else if (access == SymbolAccessibility.PROTECTED) {
+ if (!(parent_symbol is Class) && !(parent_symbol is Interface)) {
+ error = true;
+ Report.error (source_reference, "Protected properties may not be declared outside of classes and interfaces");
+ return false;
+ }
+ }
+
var old_source_file = analyzer.current_source_file;
var old_symbol = analyzer.current_symbol;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]