diff options
author | Corentin Noël <corentin@elementary.io> | 2021-11-11 17:01:37 +0100 |
---|---|---|
committer | Corentin Noël <corentin.noel@collabora.com> | 2021-11-16 12:56:19 +0100 |
commit | 24d8f9ec12c3a1163db877724e2d775233be82fa (patch) | |
tree | a4a23f933090f58c0e4303f3025ab575460727a7 | |
parent | 9a4bd88da048a7169d291f95d4cb02f7b1beef68 (diff) | |
download | libical-git-24d8f9ec12c3a1163db877724e2d775233be82fa.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.c | 33 |
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 ("); |