Array of strings is introspected as a string
I have the following code generated by gdbus-codegen:
/**
* mpris_media_player2_set_supported_mime_types: (skip)
* @object: A #MprisMediaPlayer2.
* @value: The value to set.
*
* Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2.SupportedMimeTypes">"SupportedMimeTypes"</link> D-Bus property to @value.
*
* Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
*/
void
mpris_media_player2_set_supported_mime_types (MprisMediaPlayer2 *object, const gchar *const *value)
/**
* mpris_media_player2_get_supported_mime_types: (skip)
* @object: A #MprisMediaPlayer2.
*
* Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2.SupportedMimeTypes">"SupportedMimeTypes"</link> D-Bus property.
*
* Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
*
* The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where @object was constructed. Use mpris_media_player2_dup_supported_mime_types() if on another thread.
*
* Returns: (transfer none) (nullable): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object.
*/
const gchar *const *
mpris_media_player2_get_supported_mime_types (MprisMediaPlayer2 *object)
As you can see, there's a getter and a setter using the same type and having almost the same annotation. But the type is marked as an array of strings only in the getter, but not in the setter:
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve">The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object.</doc>
<array c:type="const gchar* const*">
<type name="utf8"/>
</array>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
<doc xml:space="preserve">A #MprisMediaPlayer2.</doc>
<type name="MediaPlayer2" c:type="MprisMediaPlayer2*"/>
</instance-parameter>
<parameter name="value" transfer-ownership="none">
<doc xml:space="preserve">The value to set.</doc>
<type name="utf8" c:type="const gchar* const*"/>
</parameter>
</parameters>
This in turn make cppgir fail on the setter
// void mpris_media_player2_set_supported_mime_types (MprisMediaPlayer2* object, const gchar* const* value);
// void mpris_media_player2_set_supported_mime_types (::MprisMediaPlayer2* object, const char* value);
// IGNORE; not introspectable, inconsistent in value pointer depth (2 vs 1)