From 92279289d2ba94ba6e8c8aafa3005b669fa59c4b Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrg=20Billeter?= Date: Wed, 9 May 2007 12:15:30 +0000 Subject: [PATCH] generate get_property and set_property methods only when necessary, fixes MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2007-05-09 Jürg Billeter * gobject/valacodegeneratorclass.vala: generate get_property and set_property methods only when necessary, fixes bug 435848 svn path=/trunk/; revision=313 --- ChangeLog | 5 +++++ gobject/valacodegeneratorclass.vala | 36 +++++++++++++++++++++++++++++++----- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index ce71d3c..76eb140 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2007-05-09 Jürg Billeter + * gobject/valacodegeneratorclass.vala: generate get_property and + set_property methods only when necessary, fixes bug 435848 + +2007-05-09 Jürg Billeter + * vala/parser.y: add basic checks for method modifiers, fixes bug 435853 * vala/vala.h: include valaflagsvalue.h diff --git a/gobject/valacodegeneratorclass.vala b/gobject/valacodegeneratorclass.vala index 983d6a8..ac24723 100644 --- a/gobject/valacodegeneratorclass.vala +++ b/gobject/valacodegeneratorclass.vala @@ -89,8 +89,12 @@ public class Vala.CodeGenerator { public override void visit_end_class (Class! cl) { if (!cl.is_static) { - add_get_property_function (cl); - add_set_property_function (cl); + if (class_has_readable_properties (cl)) { + add_get_property_function (cl); + } + if (class_has_writable_properties (cl)) { + add_set_property_function (cl); + } add_class_init_function (cl); foreach (TypeReference base_type in cl.get_base_types ()) { @@ -155,8 +159,12 @@ public class Vala.CodeGenerator { /* set property handlers */ ccall = new CCodeFunctionCall (new CCodeIdentifier ("G_OBJECT_CLASS")); ccall.add_argument (new CCodeIdentifier ("klass")); - init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ccall, "get_property"), new CCodeIdentifier ("%s_get_property".printf (cl.get_lower_case_cname (null)))))); - init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ccall, "set_property"), new CCodeIdentifier ("%s_set_property".printf (cl.get_lower_case_cname (null)))))); + if (class_has_readable_properties (cl)) { + init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ccall, "get_property"), new CCodeIdentifier ("%s_get_property".printf (cl.get_lower_case_cname (null)))))); + } + if (class_has_writable_properties (cl)) { + init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ccall, "set_property"), new CCodeIdentifier ("%s_set_property".printf (cl.get_lower_case_cname (null)))))); + } /* set constructor */ if (cl.constructor != null) { @@ -376,7 +384,25 @@ public class Vala.CodeGenerator { return new CCodeIdentifier ("g_value_set_pointer"); } } - + + private bool class_has_readable_properties (Class! cl) { + foreach (Property prop in cl.get_properties ()) { + if (prop.get_accessor != null && !prop.is_abstract) { + return true; + } + } + return false; + } + + private bool class_has_writable_properties (Class! cl) { + foreach (Property prop in cl.get_properties ()) { + if (prop.set_accessor != null && !prop.is_abstract) { + return true; + } + } + return false; + } + private void add_get_property_function (Class! cl) { var get_prop = new CCodeFunction ("%s_get_property".printf (cl.get_lower_case_cname (null)), "void"); get_prop.modifiers = CCodeModifiers.STATIC; -- 2.7.4