[gtk/builder-tool-scope: 4/6] buildertool: Improve validate implementation




commit e1822f874be3cb09c69a4c6fc26cc8f72ce8d8df
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]