]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
generate get_property and set_property methods only when necessary, fixes
authorJürg Billeter <j@bitron.ch>
Wed, 9 May 2007 12:15:30 +0000 (12:15 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Wed, 9 May 2007 12:15:30 +0000 (12:15 +0000)
2007-05-09  Jürg Billeter  <j@bitron.ch>

* gobject/valacodegeneratorclass.vala: generate get_property and
  set_property methods only when necessary, fixes bug 435848

svn path=/trunk/; revision=313

ChangeLog
gobject/valacodegeneratorclass.vala

index ce71d3cc9521253b41b27a63f42ac7a77e21877e..76eb140c641c580fbd05c938147b34c9e01d8c60 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-05-09  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valacodegeneratorclass.vala: generate get_property and
+         set_property methods only when necessary, fixes bug 435848
+
 2007-05-09  Jürg Billeter  <j@bitron.ch>
 
        * vala/parser.y: add basic checks for method modifiers, fixes bug 435853
index 983d6a85d6500d7e8df51943af351e506f37452d..ac24723c5cb392235679711a6eeae5aab489fea0 100644 (file)
@@ -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;