[gnome-builder] diagnostics: fix some incorrect assumptions in manager
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] diagnostics: fix some incorrect assumptions in manager
- Date: Mon, 24 Jul 2017 22:01:48 +0000 (UTC)
commit 7d694aeadcc9c78b6fa4da0cd382bfe641675399
Author: Christian Hergert <chergert redhat com>
Date: Mon Jul 24 15:01:22 2017 -0700
diagnostics: fix some incorrect assumptions in manager
This avoids recreating some objects in the group after they've been set
as well as stomping over a previously initialized weak ref.
libide/diagnostics/ide-diagnostics-manager.c | 77 +++++++++++++++-----------
1 files changed, 44 insertions(+), 33 deletions(-)
---
diff --git a/libide/diagnostics/ide-diagnostics-manager.c b/libide/diagnostics/ide-diagnostics-manager.c
index 5ae10d5..338d2e2 100644
--- a/libide/diagnostics/ide-diagnostics-manager.c
+++ b/libide/diagnostics/ide-diagnostics-manager.c
@@ -950,8 +950,6 @@ ide_diagnostics_manager_buffer_loaded (IdeDiagnosticsManager *self,
IdeBufferManager *buffer_manager)
{
IdeDiagnosticsGroup *group;
- GtkSourceLanguage *language;
- const gchar *language_id = NULL;
IdeContext *context;
IdeFile *ifile;
GFile *gfile;
@@ -1001,39 +999,47 @@ ide_diagnostics_manager_buffer_loaded (IdeDiagnosticsManager *self,
g_hash_table_insert (self->groups_by_file, group->file, group);
}
- g_weak_ref_init (&group->buffer_wr, buffer);
-
- language = gtk_source_buffer_get_language (GTK_SOURCE_BUFFER (buffer));
-
- if (language != NULL)
- language_id = gtk_source_language_get_id (language);
-
- group->diagnostics_by_provider = g_hash_table_new_full (NULL,
- NULL,
- NULL,
- free_diagnostics);
+ g_weak_ref_set (&group->buffer_wr, buffer);
- group->adapter = ide_extension_set_adapter_new (context,
- peas_engine_get_default (),
- IDE_TYPE_DIAGNOSTIC_PROVIDER,
- "Diagnostic-Provider-Languages",
- language_id);
-
- g_signal_connect_object (group->adapter,
- "extension-added",
- G_CALLBACK (ide_diagnostics_manager_extension_added),
- self,
- 0);
+ if (group->diagnostics_by_provider == NULL)
+ {
+ group->diagnostics_by_provider =
+ g_hash_table_new_full (NULL, NULL, NULL, free_diagnostics);
+ }
- g_signal_connect_object (group->adapter,
- "extension-removed",
- G_CALLBACK (ide_diagnostics_manager_extension_removed),
- self,
- 0);
+ if (group->adapter == NULL)
+ {
+ GtkSourceLanguage *language;
+ const gchar *language_id = NULL;
+
+ language = gtk_source_buffer_get_language (GTK_SOURCE_BUFFER (buffer));
+ if (language != NULL)
+ language_id = gtk_source_language_get_id (language);
+
+ group->adapter = ide_extension_set_adapter_new (context,
+ peas_engine_get_default (),
+ IDE_TYPE_DIAGNOSTIC_PROVIDER,
+ "Diagnostic-Provider-Languages",
+ language_id);
+
+ g_signal_connect_object (group->adapter,
+ "extension-added",
+ G_CALLBACK (ide_diagnostics_manager_extension_added),
+ self,
+ 0);
+
+ g_signal_connect_object (group->adapter,
+ "extension-removed",
+ G_CALLBACK (ide_diagnostics_manager_extension_removed),
+ self,
+ 0);
+
+ ide_extension_set_adapter_foreach (group->adapter,
+ ide_diagnostics_manager_extension_added,
+ self);
+ }
- ide_extension_set_adapter_foreach (group->adapter,
- ide_diagnostics_manager_extension_added,
- self);
+ g_assert (g_hash_table_lookup (self->groups_by_file, gfile) == group);
ide_diagnostics_group_queue_diagnose (group, self);
@@ -1125,11 +1131,16 @@ ide_diagnostics_manager_initable_init (GInitable *initable,
context = ide_object_get_context (IDE_OBJECT (self));
buffer_manager = ide_context_get_buffer_manager (context);
+ /* We can start processing things when the buffer is loaded,
+ * but we do so after buffer-loaded because we don't really
+ * care to be before other subscribers. Our plugins might be
+ * dependent on other things that are buffer specific.
+ */
g_signal_connect_object (buffer_manager,
"buffer-loaded",
G_CALLBACK (ide_diagnostics_manager_buffer_loaded),
self,
- G_CONNECT_SWAPPED);
+ G_CONNECT_SWAPPED | G_CONNECT_AFTER);
g_signal_connect_object (buffer_manager,
"buffer-unloaded",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]