[gnome-builder] code-index: require new get_file helper for entries



commit d7cf84666c56aefd611e002683ee23fcddab9f63
Author: Christian Hergert <chergert redhat com>
Date:   Thu Jan 18 06:33:47 2018 -0800

    code-index: require new get_file helper for entries
    
    This is convenient for the code indexer, so lets require it of
    the code entries to save us some pain.

 src/libide/symbols/ide-code-index-entries.c      | 24 +++++++++++++++++-------
 src/libide/symbols/ide-code-index-entries.h      |  2 ++
 src/plugins/clang/ide-clang-code-index-entries.c | 11 +++++++++++
 src/plugins/gjs-symbols/gjs_symbols.py           | 11 ++++++++---
 src/plugins/vala-pack/ide-vala-code-indexer.vala | 11 +++++++++--
 5 files changed, 47 insertions(+), 12 deletions(-)
---
diff --git a/src/libide/symbols/ide-code-index-entries.c b/src/libide/symbols/ide-code-index-entries.c
index b98cc8b6a..b75b04492 100644
--- a/src/libide/symbols/ide-code-index-entries.c
+++ b/src/libide/symbols/ide-code-index-entries.c
@@ -23,16 +23,9 @@
 
 G_DEFINE_INTERFACE (IdeCodeIndexEntries, ide_code_index_entries, G_TYPE_OBJECT)
 
-IdeCodeIndexEntry *
-ide_code_index_entries_real_get_next_entry (IdeCodeIndexEntries *self)
-{
-  return NULL;
-}
-
 static void
 ide_code_index_entries_default_init (IdeCodeIndexEntriesInterface *iface)
 {
-  iface->get_next_entry = ide_code_index_entries_real_get_next_entry;
 }
 
 /**
@@ -55,3 +48,20 @@ ide_code_index_entries_get_next_entry (IdeCodeIndexEntries *self)
 
   return IDE_CODE_INDEX_ENTRIES_GET_IFACE (self)->get_next_entry (self);
 }
+
+/**
+ * ide_code_index_entries_get_file:
+ * @self: a #IdeCodeIndexEntries
+ *
+ * The file that was indexed.
+ *
+ * Returns: (transfer full): a #GFile
+ */
+GFile *
+ide_code_index_entries_get_file (IdeCodeIndexEntries *self)
+{
+  g_return_val_if_fail (IDE_IS_MAIN_THREAD (), NULL);
+  g_return_val_if_fail (IDE_IS_CODE_INDEX_ENTRIES (self), NULL);
+
+  return IDE_CODE_INDEX_ENTRIES_GET_IFACE (self)->get_file (self);
+}
diff --git a/src/libide/symbols/ide-code-index-entries.h b/src/libide/symbols/ide-code-index-entries.h
index 3cc19efdc..01237fbd0 100644
--- a/src/libide/symbols/ide-code-index-entries.h
+++ b/src/libide/symbols/ide-code-index-entries.h
@@ -33,9 +33,11 @@ struct _IdeCodeIndexEntriesInterface
 {
   GTypeInterface       parent_iface;
 
+  GFile             *(*get_file)       (IdeCodeIndexEntries *self);
   IdeCodeIndexEntry *(*get_next_entry) (IdeCodeIndexEntries *self);
 };
 
 IdeCodeIndexEntry *ide_code_index_entries_get_next_entry (IdeCodeIndexEntries *self);
+GFile             *ide_code_index_entries_get_file       (IdeCodeIndexEntries *self);
 
 G_END_DECLS
diff --git a/src/plugins/clang/ide-clang-code-index-entries.c 
b/src/plugins/clang/ide-clang-code-index-entries.c
index 6043c84b5..3bc0e94eb 100644
--- a/src/plugins/clang/ide-clang-code-index-entries.c
+++ b/src/plugins/clang/ide-clang-code-index-entries.c
@@ -328,10 +328,21 @@ ide_clang_code_index_entries_get_next_entry (IdeCodeIndexEntries *entries)
   return g_steal_pointer (&entry);
 }
 
+static GFile *
+ide_clang_code_index_entries_get_file (IdeCodeIndexEntries *entries)
+{
+  IdeClangCodeIndexEntries *self = (IdeClangCodeIndexEntries *)entries;
+
+  g_return_val_if_fail (IDE_IS_CLANG_CODE_INDEX_ENTRIES (self), NULL);
+
+  return g_file_new_for_path (self->path);
+}
+
 static void
 index_entries_iface_init (IdeCodeIndexEntriesInterface *iface)
 {
   iface->get_next_entry = ide_clang_code_index_entries_get_next_entry;
+  iface->get_file = ide_clang_code_index_entries_get_file;
 }
 
 G_DEFINE_TYPE_WITH_CODE (IdeClangCodeIndexEntries, ide_clang_code_index_entries, G_TYPE_OBJECT,
diff --git a/src/plugins/gjs-symbols/gjs_symbols.py b/src/plugins/gjs-symbols/gjs_symbols.py
index 81546cef7..85fc7232d 100644
--- a/src/plugins/gjs-symbols/gjs_symbols.py
+++ b/src/plugins/gjs-symbols/gjs_symbols.py
@@ -337,10 +337,11 @@ class GjsSymbolProvider(Ide.Object, Ide.SymbolResolver):
 
 
 class JsCodeIndexEntries(GObject.Object, Ide.CodeIndexEntries):
-    def __init__(self, entries):
+    def __init__(self, file, entries):
         super().__init__()
         self.entries = entries
         self.entry_iter = None
+        self.file = file
 
     def do_get_next_entry(self):
         if self.entry_iter is None:
@@ -351,6 +352,9 @@ class JsCodeIndexEntries(GObject.Object, Ide.CodeIndexEntries):
             self.entry_iter = None
             return None
 
+    def do_get_file(self):
+        return self.file
+
 
 class GjsCodeIndexer(Ide.Object, Ide.CodeIndexer):
     def __init__(self):
@@ -378,7 +382,7 @@ class GjsCodeIndexer(Ide.Object, Ide.CodeIndexer):
         try:
             _, stdout, stderr = subprocess.communicate_utf8_finish(result)
 
-            ide_file = Ide.File(file=file_, context=self.get_context())
+            ide_file = Ide.File(file=task.file_, context=self.get_context())
             try:
                 root_node = JsSymbolTree._node_from_dict(json.loads(stdout), ide_file)
             except (json.JSONDecodeError, UnicodeDecodeError) as e:
@@ -399,7 +403,7 @@ class GjsCodeIndexer(Ide.Object, Ide.CodeIndexer):
                 )
                 entries.append(entry)
 
-            task.entries = JsCodeIndexEntries(entries)
+            task.entries = JsCodeIndexEntries(task.file_, entries)
             task.return_boolean(True)
 
         except Exception as ex:
@@ -409,6 +413,7 @@ class GjsCodeIndexer(Ide.Object, Ide.CodeIndexer):
     def do_index_file_async(self, file_, build_flags, cancellable, callback, data):
         task = Gio.Task.new(self, cancellable, callback)
         task.entries = None
+        task.file = file_
 
         launcher = GjsSymbolProvider._get_launcher(self.get_context(), file_)
         proc = launcher.spawn()
diff --git a/src/plugins/vala-pack/ide-vala-code-indexer.vala 
b/src/plugins/vala-pack/ide-vala-code-indexer.vala
index ccea51742..bbb863cb3 100644
--- a/src/plugins/vala-pack/ide-vala-code-indexer.vala
+++ b/src/plugins/vala-pack/ide-vala-code-indexer.vala
@@ -38,7 +38,7 @@ namespace Ide
                        var index = service.index;
                        var tree = index.get_symbol_tree_sync (file, cancellable);
 
-                       var ret = new Ide.ValaCodeIndexEntries (tree as Ide.ValaSymbolTree);
+                       var ret = new Ide.ValaCodeIndexEntries (file, tree as Ide.ValaSymbolTree);
                        if (ret == null)
                                throw new GLib.IOError.FAILED ("failed to build entries");
 
@@ -67,11 +67,18 @@ namespace Ide
        public class ValaCodeIndexEntries : GLib.Object, Ide.CodeIndexEntries
        {
                GLib.GenericArray<Ide.CodeIndexEntry> entries;
+               GLib.File file;
                uint pos;
 
-               public ValaCodeIndexEntries (Ide.ValaSymbolTree tree)
+               public GLib.File get_file ()
+               {
+                       return this.file;
+               }
+
+               public ValaCodeIndexEntries (GLib.File file, Ide.ValaSymbolTree tree)
                {
                        this.entries = new GLib.GenericArray<Ide.CodeIndexEntry> ();
+                       this.file = file;
                        this.add_children (tree, null, "");
                }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]