summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorentin Noël <corentin@elementary.io>2021-11-11 17:01:37 +0100
committerCorentin Noël <corentin.noel@collabora.com>2021-11-16 12:56:19 +0100
commit24d8f9ec12c3a1163db877724e2d775233be82fa (patch)
treea4a23f933090f58c0e4303f3025ab575460727a7
parent9a4bd88da048a7169d291f95d4cb02f7b1beef68 (diff)
downloadlibical-git-tintou/nullable-optional.tar.gz
generator.c - Handle the optional parametertintou/nullable-optional
Do not return if the value is null for optional parameters as it is explicitly allowed.
-rw-r--r--src/libical-glib/tools/generator.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/libical-glib/tools/generator.c b/src/libical-glib/tools/generator.c
index c3ef96b9..47814724 100644
--- a/src/libical-glib/tools/generator.c
+++ b/src/libical-glib/tools/generator.c
@@ -1575,6 +1575,20 @@ gchar *get_translator_for_return(Ret *ret)
return res;
}
+static gboolean parameter_is_out(Parameter *para)
+{
+ GList *link;
+ for (link = para->annotations; link; link = g_list_next(link)) {
+ if (g_strcmp0(link->data, "out") == 0 ||
+ g_strcmp0(link->data, "inout") == 0 ||
+ g_str_has_prefix(link->data, "out ")) {
+ break;
+ }
+ }
+
+ return link != NULL;
+}
+
static gboolean annotation_contains_nullable(GList *annotations) /* gchar * */
{
GList *link;
@@ -1588,6 +1602,19 @@ static gboolean annotation_contains_nullable(GList *annotations) /* gchar * */
return link != NULL;
}
+static gboolean annotation_contains_optional(GList *annotations) /* gchar * */
+{
+ GList *link;
+
+ for (link = annotations; link; link = g_list_next(link)) {
+ if (g_strcmp0(link->data, "optional") == 0) {
+ break;
+ }
+ }
+
+ return link != NULL;
+}
+
gchar *get_inline_parameter(Parameter *para)
{
gchar *buffer;
@@ -2032,6 +2059,7 @@ gchar *get_source_run_time_checkers(Method *method, const gchar *namespace)
gchar *defaultValue;
gchar *retTrueType;
guint namespace_len;
+ gboolean param_is_out;
g_return_val_if_fail(method != NULL, NULL);
g_return_val_if_fail(namespace != NULL && *namespace != '\0', NULL);
@@ -2094,7 +2122,10 @@ gchar *get_source_run_time_checkers(Method *method, const gchar *namespace)
(void)g_stpcpy(buffer + strlen(buffer), "\n");
}
- if (i != namespace_len && !annotation_contains_nullable(parameter->annotations)) {
+ param_is_out = parameter_is_out(parameter);
+ if (i != namespace_len && (
+ (!param_is_out && !annotation_contains_nullable(parameter->annotations)) ||
+ (param_is_out && !annotation_contains_optional(parameter->annotations)))) {
(void)g_stpcpy(buffer + strlen(buffer), "\t");
if (method->ret != NULL) {
(void)g_stpcpy(buffer + strlen(buffer), "g_return_val_if_fail (");