[vala/staging] girwriter: Internal fields and function pointers are public



commit 873ec677d771aba401cfc3d6fe67dd4f213dd3a3
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Tue Nov 27 08:11:14 2018 +0100

    girwriter: Internal fields and function pointers are public
    
    Fixes https://gitlab.gnome.org/GNOME/vala/issues/513

 codegen/valagirwriter.vala               |  10 +++
 tests/girwriter/GirTest-1.0.gir-expected | 128 +++++++++++++++++++++++++++++++
 tests/girwriter/Makefile.am              |   1 +
 tests/girwriter/girtest.vala             |  15 ++++
 tests/girwriter/girtest.vapi-expected    |   2 +
 5 files changed, 156 insertions(+)
---
diff --git a/codegen/valagirwriter.vala b/codegen/valagirwriter.vala
index 3406f8ee6..0dfe8bf8c 100644
--- a/codegen/valagirwriter.vala
+++ b/codegen/valagirwriter.vala
@@ -1677,6 +1677,16 @@ public class Vala.GIRWriter : CodeVisitor {
                        return true;
                }
 
+               // internal fields and function pointers in classes/interfaces are public API
+               if (sym.access == SymbolAccessibility.INTERNAL) {
+                       unowned Symbol? parent = sym.parent_symbol;
+                       if (parent != null
+                           && (parent is Class || parent is Interface)
+                           && (sym is Field || (sym is Method && (((Method) sym).is_abstract || ((Method) 
sym).is_virtual)))) {
+                               return true;
+                       }
+               }
+
                return false;
        }
 
diff --git a/tests/girwriter/GirTest-1.0.gir-expected b/tests/girwriter/GirTest-1.0.gir-expected
index 034f48418..db37ff8e8 100644
--- a/tests/girwriter/GirTest-1.0.gir-expected
+++ b/tests/girwriter/GirTest-1.0.gir-expected
@@ -114,6 +114,9 @@
                <field name="field">
                        <type name="gint" c:type="gint"/>
                </field>
+               <field name="internal_field">
+                       <type name="gint" c:type="gint"/>
+               </field>
                <field name="fixed_array_field">
                        <array fixed-size="23" c:type="gint*">
                                <type name="gint" c:type="gint"/>
@@ -238,6 +241,26 @@
                                </parameter>
                        </parameters>
                </virtual-method>
+               <method name="internal_method_with_default_impl" 
c:identifier="gir_test_object_test_internal_method_with_default_impl">
+                       <return-value transfer-ownership="full">
+                               <type name="none"/>
+                       </return-value>
+                       <parameters>
+                               <parameter name="param" transfer-ownership="none">
+                                       <type name="gint8" c:type="gint8"/>
+                               </parameter>
+                       </parameters>
+               </method>
+               <virtual-method name="internal_method_with_default_impl" 
invoker="internal_method_with_default_impl">
+                       <return-value transfer-ownership="full">
+                               <type name="none"/>
+                       </return-value>
+                       <parameters>
+                               <parameter name="param" transfer-ownership="none">
+                                       <type name="gint8" c:type="gint8"/>
+                               </parameter>
+                       </parameters>
+               </virtual-method>
                <method name="int8_in" c:identifier="gir_test_object_test_int8_in">
                        <return-value transfer-ownership="full">
                                <type name="none"/>
@@ -707,6 +730,21 @@
                                </parameters>
                        </callback>
                </field>
+               <field name="internal_method_with_default_impl">
+                       <callback name="internal_method_with_default_impl" 
c:type="internal_method_with_default_impl">
+                               <return-value transfer-ownership="full">
+                                       <type name="none"/>
+                               </return-value>
+                               <parameters>
+                                       <parameter name="self" transfer-ownership="none">
+                                               <type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
+                                       </parameter>
+                                       <parameter name="param" transfer-ownership="none">
+                                               <type name="gint8" c:type="gint8"/>
+                                       </parameter>
+                               </parameters>
+                       </callback>
+               </field>
                <field name="coroutine_method_throw">
                        <callback name="coroutine_method_throw" c:type="coroutine_method_throw">
                                <return-value transfer-ownership="none">
@@ -849,6 +887,26 @@
                                <type name="none"/>
                        </return-value>
                </virtual-method>
+               <method name="internal_method" c:identifier="gir_test_abstract_object_test_internal_method">
+                       <return-value transfer-ownership="full">
+                               <type name="none"/>
+                       </return-value>
+                       <parameters>
+                               <parameter name="param" transfer-ownership="none">
+                                       <type name="gint8" c:type="gint8"/>
+                               </parameter>
+                       </parameters>
+               </method>
+               <virtual-method name="internal_method" invoker="internal_method">
+                       <return-value transfer-ownership="full">
+                               <type name="none"/>
+                       </return-value>
+                       <parameters>
+                               <parameter name="param" transfer-ownership="none">
+                                       <type name="gint8" c:type="gint8"/>
+                               </parameter>
+                       </parameters>
+               </virtual-method>
        </class>
        <record name="AbstractObjectTestClass" c:type="GirTestAbstractObjectTestClass" 
glib:is-gtype-struct-for="AbstractObjectTest">
                <field name="parent_class">
@@ -911,6 +969,21 @@
                                </parameters>
                        </callback>
                </field>
+               <field name="internal_method">
+                       <callback name="internal_method" c:type="internal_method">
+                               <return-value transfer-ownership="full">
+                                       <type name="none"/>
+                               </return-value>
+                               <parameters>
+                                       <parameter name="self" transfer-ownership="none">
+                                               <type name="GirTest.AbstractObjectTest" 
c:type="GirTestAbstractObjectTest*"/>
+                                       </parameter>
+                                       <parameter name="param" transfer-ownership="none">
+                                               <type name="gint8" c:type="gint8"/>
+                                       </parameter>
+                               </parameters>
+                       </callback>
+               </field>
        </record>
        <record name="AbstractObjectTestPrivate" c:type="GirTestAbstractObjectTestPrivate" disguised="1"/>
        <class name="ImplementionTest" c:type="GirTestImplementionTest" 
glib:type-name="GirTestImplementionTest" glib:get-type="gir_test_implemention_test_get_type" 
glib:type-struct="ImplementionTestClass" parent="GObject.Object">
@@ -1187,6 +1260,16 @@
                                </parameter>
                        </parameters>
                </virtual-method>
+               <method name="internal_method" c:identifier="gir_test_interface_test_internal_method">
+                       <return-value transfer-ownership="full">
+                               <type name="none"/>
+                       </return-value>
+               </method>
+               <virtual-method name="internal_method" invoker="internal_method">
+                       <return-value transfer-ownership="full">
+                               <type name="none"/>
+                       </return-value>
+               </virtual-method>
                <property name="property" writable="1" construct="1">
                        <type name="gint" c:type="gint"/>
                </property>
@@ -1273,6 +1356,18 @@
                                </parameters>
                        </callback>
                </field>
+               <field name="internal_method">
+                       <callback name="internal_method" c:type="internal_method">
+                               <return-value transfer-ownership="full">
+                                       <type name="none"/>
+                               </return-value>
+                               <parameters>
+                                       <parameter name="self" transfer-ownership="none">
+                                               <type name="GirTest.InterfaceTest" 
c:type="GirTestInterfaceTest*"/>
+                                       </parameter>
+                               </parameters>
+                       </callback>
+               </field>
                <field name="get_property">
                        <callback name="get_property" c:type="get_property">
                                <return-value transfer-ownership="none">
@@ -1300,6 +1395,33 @@
                                </parameters>
                        </callback>
                </field>
+               <field name="get_internal_property">
+                       <callback name="get_internal_property" c:type="get_internal_property">
+                               <return-value transfer-ownership="none">
+                                       <type name="utf8" c:type="const gchar*"/>
+                               </return-value>
+                               <parameters>
+                                       <parameter name="self" transfer-ownership="none">
+                                               <type name="GirTest.InterfaceTest" 
c:type="GirTestInterfaceTest*"/>
+                                       </parameter>
+                               </parameters>
+                       </callback>
+               </field>
+               <field name="set_internal_property">
+                       <callback name="set_internal_property" c:type="set_internal_property">
+                               <return-value transfer-ownership="none">
+                                       <type name="none"/>
+                               </return-value>
+                               <parameters>
+                                       <parameter name="self" transfer-ownership="none">
+                                               <type name="GirTest.InterfaceTest" 
c:type="GirTestInterfaceTest*"/>
+                                       </parameter>
+                                       <parameter name="value" transfer-ownership="none">
+                                               <type name="utf8" c:type="const gchar*"/>
+                                       </parameter>
+                               </parameters>
+                       </callback>
+               </field>
        </record>
        <interface name="SkippedInterface" c:type="GirTestSkippedInterface" 
glib:type-name="GirTestSkippedInterface" glib:get-type="gir_test_skipped_interface_get_type" 
glib:type-struct="SkippedInterfaceIface" introspectable="0">
        </interface>
@@ -1320,6 +1442,9 @@
                <field name="field_name">
                        <type name="gint" c:type="gint"/>
                </field>
+               <field name="internal_field_name">
+                       <type name="gint" c:type="gint"/>
+               </field>
                <function name="init" c:identifier="gir_test_boxed_struct_init">
                        <return-value transfer-ownership="none">
                                <type name="none"/>
@@ -1340,6 +1465,9 @@
                <field name="field_name">
                        <type name="gint" c:type="gint"/>
                </field>
+               <field name="internal_field_name">
+                       <type name="gint" c:type="gint"/>
+               </field>
                <function name="init" c:identifier="gir_test_struct_init">
                        <return-value transfer-ownership="none">
                                <type name="none"/>
diff --git a/tests/girwriter/Makefile.am b/tests/girwriter/Makefile.am
index f5770e9cd..44920b41d 100644
--- a/tests/girwriter/Makefile.am
+++ b/tests/girwriter/Makefile.am
@@ -8,6 +8,7 @@ check-girwriter: $(top_builddir)/compiler/valac
                --pkg gio-2.0 \
                --gir GirTest-1.0.gir \
                --library girtest \
+               --header girtest.h \
                --shared-library girtest \
                $(srcdir)/girtest.vala; \
        tail -n +3 girtest.vapi | diff -wu $(srcdir)/girtest.vapi-expected - || exit 1; \
diff --git a/tests/girwriter/girtest.vala b/tests/girwriter/girtest.vala
index 3ace08a5b..c4ea25bef 100644
--- a/tests/girwriter/girtest.vala
+++ b/tests/girwriter/girtest.vala
@@ -2,6 +2,7 @@
 namespace GirTest {
        public struct BoxedStruct {
                public int field_name;
+               internal int internal_field_name;
 
                public BoxedStruct () {
                }
@@ -13,6 +14,7 @@ namespace GirTest {
        [CCode (has_type_id = false)]
        public struct Struct {
                public int field_name;
+               internal int internal_field_name;
 
                public Struct () {
                }
@@ -67,10 +69,13 @@ namespace GirTest {
 
        public interface InterfaceTest : Object {
                public abstract int property { get; construct set; }
+               internal abstract string internal_property { get; set; }
                public virtual void int8_in (int8 param) {
                }
                public virtual async void coroutine_async () {
                }
+               internal virtual void internal_method () {
+               }
        }
 
        [GIR (visible = false)]
@@ -101,6 +106,8 @@ namespace GirTest {
 
                public int field = 42;
 
+               internal int internal_field = 23;
+
                public int fixed_array_field[23];
 
                public string? nullable_field;
@@ -111,6 +118,8 @@ namespace GirTest {
 
                public string construct_only_property { construct; }
 
+               internal string internal_property { get; set; }
+
                [GIR (visible = false)]
                public string skipped_property { get; construct set; }
 
@@ -152,6 +161,9 @@ namespace GirTest {
                public virtual void method_with_default_impl (int8 param) {
                }
 
+               internal virtual void internal_method_with_default_impl (int8 param) {
+               }
+
                public void int8_in (int8 param) {
                }
 
@@ -258,6 +270,8 @@ namespace GirTest {
                public abstract void method_int8_out (out int8 param);
 
                public abstract void method_throw () throws ErrorTest;
+
+               internal abstract void internal_method (int8 param);
        }
 
        public interface PrerequisiteTest : InterfaceTest {
@@ -265,6 +279,7 @@ namespace GirTest {
 
        public class ImplementionTest : Object, InterfaceTest {
                public int property { get; construct set; }
+               internal string internal_property { get; set; }
        }
 
        [GIR (visible = false)]
diff --git a/tests/girwriter/girtest.vapi-expected b/tests/girwriter/girtest.vapi-expected
index 52d23d16a..4eae4252b 100644
--- a/tests/girwriter/girtest.vapi-expected
+++ b/tests/girwriter/girtest.vapi-expected
@@ -112,6 +112,7 @@ namespace GirTest {
        [CCode (cheader_filename = "girtest.h")]
        public struct BoxedStruct {
                public int field_name;
+               public int internal_field_name;
                public BoxedStruct ();
                public void inv ();
        }
@@ -123,6 +124,7 @@ namespace GirTest {
        [CCode (cheader_filename = "girtest.h", has_type_id = false)]
        public struct Struct {
                public int field_name;
+               public int internal_field_name;
                public Struct ();
                public void inv ();
        }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]