From: Matthias Clasen Date: Wed, 19 Oct 2022 15:41:35 +0000 (-0400) Subject: buildertool: Improve validate implementation X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~9^2~155^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=50835ffbf6092d0d8ff47ad204e1e91ad0dab925;p=gtk4.git buildertool: Improve validate implementation Reimplement deprecation checking via a scope. This lets us ignore missing callbacks, and helps for validating templates. --- diff --git a/tools/gtk-builder-tool-validate.c b/tools/gtk-builder-tool-validate.c index ad855ead89..244771f875 100644 --- a/tools/gtk-builder-tool-validate.c +++ b/tools/gtk-builder-tool-validate.c @@ -29,6 +29,8 @@ #include #include "gtkbuilderprivate.h" #include "gtk-builder-tool.h" +#include "fake-scope.h" + static GType make_fake_type (const char *type_name, @@ -54,8 +56,10 @@ make_fake_type (const char *type_name, 0); } +/* {{{ Deprecations */ + static gboolean -is_deprecated (GObject *object) +is_deprecated (const char *name) { const char *names[] = { "GtkAppChooser", @@ -95,52 +99,33 @@ is_deprecated (GObject *object) NULL }; - return g_strv_contains (names, G_OBJECT_TYPE_NAME (object)); -} - -static const char * -object_get_id (GObject *object) -{ - const char *name; - - if (GTK_IS_BUILDABLE (object)) - name = gtk_buildable_get_buildable_id (GTK_BUILDABLE (object)); - else - name = g_object_get_data (object, "gtk-builder-id"); - - if (g_str_has_prefix (name, "___")) - return NULL; - - return name; + return g_strv_contains (names, name); } static gboolean -check_deprecations (GtkBuilder *builder, - GError **error) +fake_scope_check_deprecations (FakeScope *self, + GError **error) { - GSList *objects; + GPtrArray *types; GString *s; + types = fake_scope_get_types (self); + s = g_string_new (""); - objects = gtk_builder_get_objects (builder); - for (GSList *l = objects; l; l = l->next) + for (int i = 0; i < types->len; i++) { - GObject *obj = l->data; + const char *name = g_ptr_array_index (types, i); - if (1 || is_deprecated (obj)) + if (is_deprecated (name)) { if (s->len == 0) g_string_append (s, "Deprecated types:\n"); - g_string_append_printf (s, "%s", G_OBJECT_TYPE_NAME (obj)); - if (object_get_id (obj)) - g_string_append_printf (s, " (named '%s')", object_get_id (obj)); + g_string_append_printf (s, "%s", name); g_string_append (s, "\n"); } } - g_slist_free (objects); - if (s->len > 0) g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, s->str); @@ -149,6 +134,8 @@ check_deprecations (GtkBuilder *builder, return *error == NULL; } +/* }}} */ + static gboolean validate_template (const char *filename, const char *type_name, @@ -157,6 +144,7 @@ validate_template (const char *filename, { GType template_type; GObject *object; + FakeScope *scope; GtkBuilder *builder; GError *error = NULL; gboolean ret; @@ -176,11 +164,14 @@ validate_template (const char *filename, } builder = gtk_builder_new (); + scope = fake_scope_new (); + gtk_builder_set_scope (builder, GTK_BUILDER_SCOPE (scope)); ret = gtk_builder_extend_with_template (builder, object, template_type, " ", 1, &error); if (ret) ret = gtk_builder_add_from_file (builder, filename, &error); if (ret && deprecations) - ret = check_deprecations (builder, &error); + ret = fake_scope_check_deprecations (scope, &error); + g_object_unref (scope); g_object_unref (builder); if (!ret) @@ -223,6 +214,7 @@ static gboolean validate_file (const char *filename, gboolean deprecations) { + FakeScope *scope; GtkBuilder *builder; GError *error = NULL; gboolean ret; @@ -230,9 +222,12 @@ validate_file (const char *filename, char *parent_name = NULL; builder = gtk_builder_new (); + scope = fake_scope_new (); + gtk_builder_set_scope (builder, GTK_BUILDER_SCOPE (scope)); ret = gtk_builder_add_from_file (builder, filename, &error); if (ret && deprecations) - ret = check_deprecations (builder, &error); + ret = fake_scope_check_deprecations (scope, &error); + g_object_unref (scope); g_object_unref (builder); if (!ret) @@ -290,3 +285,5 @@ do_validate (int *argc, const char ***argv) g_strfreev (filenames); } + +/* vim:set foldmethod=marker expandtab: */