[gtk/builder-tool-scope: 5/7] buildertool: Improve validate implementation
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/builder-tool-scope: 5/7] buildertool: Improve validate implementation
- Date: Wed, 19 Oct 2022 17:45:32 +0000 (UTC)
commit 50835ffbf6092d0d8ff47ad204e1e91ad0dab925
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Oct 19 11:41:35 2022 -0400
buildertool: Improve validate implementation
Reimplement deprecation checking via a scope.
This lets us ignore missing callbacks, and helps
for validating templates.
tools/gtk-builder-tool-validate.c | 61 +++++++++++++++++++--------------------
1 file changed, 29 insertions(+), 32 deletions(-)
---
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 <gtk/gtk.h>
#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: */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]