[gnome-builder/wip/extensions] clang: extract clang into a plugin
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/extensions] clang: extract clang into a plugin
- Date: Sun, 28 Jun 2015 07:43:31 +0000 (UTC)
commit 18cec0c317e0d514b9e14c77d1dd2a8f803e6d02
Author: Christian Hergert <christian hergert me>
Date: Sun Jun 28 00:42:51 2015 -0700
clang: extract clang into a plugin
This required some interface changes as well, which was not easy to do
as it's own commit. So this feels a bit like an amalgamation, but not
much of a cleaner way to do it.
I notice that the clang highlighter is not highlighting immediately, but
it does seem to be working (Control+L forces re-highlight) which renders
properly.
configure.ac | 5 +
libide/Makefile.am | 23 ----
libide/c/ide-c-language.c | 17 +---
libide/ctags/ide-ctags-service.c | 18 ++-
libide/ctags/ide-ctags-service.h | 2 +-
libide/gca/ide-gca-diagnostic-provider.c | 23 +++--
libide/gca/ide-gca-diagnostic-provider.h | 3 +-
libide/gca/ide-gca-service.c | 5 +-
libide/gca/ide-gca-service.h | 2 +-
libide/ide-buffer.c | 14 +--
libide/ide-context.c | 10 +-
libide/ide-diagnostic-provider.c | 19 +---
libide/ide-diagnostic-provider.h | 10 +-
libide/ide-highlighter.c | 8 ++
libide/ide-internal.h | 2 -
libide/ide-service.c | 117 +-------------------
libide/ide-service.h | 6 +-
libide/ide-symbol-resolver.c | 7 +
libide/ide.c | 56 ++-------
plugins/Makefile.am | 5 +
plugins/clang-completion/Makefile.am | 31 +++++
plugins/clang-completion/clang-completion.plugin | 11 ++
.../ide-clang-completion-provider.c | 28 ++++-
.../ide-clang-completion-provider.h | 0
plugins/clang-diagnostics/Makefile.am | 31 +++++
plugins/clang-diagnostics/clang-diagnostics.plugin | 11 ++
.../ide-clang-diagnostic-provider.c | 41 ++++++-
.../ide-clang-diagnostic-provider.h | 7 +-
plugins/clang-highlighter/Makefile.am | 32 ++++++
plugins/clang-highlighter/clang-highlighter.plugin | 11 ++
.../clang-highlighter}/ide-clang-highlighter.c | 23 ++++-
.../clang-highlighter}/ide-clang-highlighter.h | 5 -
plugins/clang-symbol-resolver/Makefile.am | 31 +++++
.../clang-symbol-resolver.plugin | 11 ++
.../ide-clang-symbol-resolver.c | 28 ++++-
.../ide-clang-symbol-resolver.h | 0
plugins/clang/Makefile.am | 42 +++++++
plugins/clang/clang.plugin | 8 ++
.../clang/gb-clang-plugin.c | 29 +++---
.../clang/ide-clang-completion-item.c | 0
.../clang/ide-clang-completion-item.h | 0
{libide => plugins}/clang/ide-clang-private.h | 0
{libide => plugins}/clang/ide-clang-service.c | 28 +++--
{libide => plugins}/clang/ide-clang-service.h | 5 +-
{libide => plugins}/clang/ide-clang-symbol-node.c | 0
{libide => plugins}/clang/ide-clang-symbol-node.h | 0
{libide => plugins}/clang/ide-clang-symbol-tree.c | 0
{libide => plugins}/clang/ide-clang-symbol-tree.h | 0
.../clang/ide-clang-translation-unit.c | 0
.../clang/ide-clang-translation-unit.h | 0
plugins/symbol-tree/symbol-tree.c | 5 +-
51 files changed, 453 insertions(+), 317 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 7687c3e..9ceed59 100644
--- a/configure.ac
+++ b/configure.ac
@@ -383,6 +383,11 @@ AC_CONFIG_FILES([
libide/Makefile
plugins/Makefile
+ plugins/clang/Makefile
+ plugins/clang-completion/Makefile
+ plugins/clang-highlighter/Makefile
+ plugins/clang-diagnostics/Makefile
+ plugins/clang-symbol-resolver/Makefile
plugins/command-bar/Makefile
plugins/devhelp/Makefile
plugins/device-manager/Makefile
diff --git a/libide/Makefile.am b/libide/Makefile.am
index 2db2790..ec2668c 100644
--- a/libide/Makefile.am
+++ b/libide/Makefile.am
@@ -210,25 +210,6 @@ libide_1_0_la_SOURCES = \
c/ide-c-format-provider.h \
c/ide-c-indenter.c \
c/ide-c-indenter.h \
- clang/ide-clang-completion-item.c \
- clang/ide-clang-completion-item.h \
- clang/ide-clang-completion-provider.c \
- clang/ide-clang-completion-provider.h \
- clang/ide-clang-diagnostic-provider.c \
- clang/ide-clang-diagnostic-provider.h \
- clang/ide-clang-highlighter.c \
- clang/ide-clang-highlighter.h \
- clang/ide-clang-private.h \
- clang/ide-clang-service.c \
- clang/ide-clang-service.h \
- clang/ide-clang-symbol-resolver.c \
- clang/ide-clang-symbol-resolver.h \
- clang/ide-clang-symbol-node.c \
- clang/ide-clang-symbol-node.h \
- clang/ide-clang-symbol-tree.c \
- clang/ide-clang-symbol-tree.h \
- clang/ide-clang-translation-unit.c \
- clang/ide-clang-translation-unit.h \
ctags/ide-ctags-builder.c \
ctags/ide-ctags-builder.h \
ctags/ide-ctags-completion-item.c \
@@ -334,7 +315,6 @@ libide_1_0_la_SOURCES = \
libide_1_0_la_includes = \
$(DEBUG_CFLAGS) \
- $(CLANG_CFLAGS) \
-DLIBDIR="\"$(libdir)\"" \
-I$(top_builddir)/libide \
-I$(top_srcdir)/contrib/egg \
@@ -344,7 +324,6 @@ libide_1_0_la_includes = \
-I$(srcdir) \
-I$(srcdir)/autotools \
-I$(srcdir)/c \
- -I$(srcdir)/clang \
-I$(srcdir)/ctags \
-I$(srcdir)/directory \
-I$(srcdir)/doap \
@@ -395,10 +374,8 @@ libide_1_0_la_LDFLAGS = \
$(NULL)
libide_1_0_la_LIBADD = \
- $(CLANG_LDFLAGS) \
$(LIBIDE_LIBS) \
$(SHM_LIB) \
- -lclang \
-lm \
$(top_builddir)/contrib/egg/libegg.la \
$(top_builddir)/contrib/libeditorconfig/libeditorconfig.la \
diff --git a/libide/c/ide-c-language.c b/libide/c/ide-c-language.c
index d63a6a2..90a5274 100644
--- a/libide/c/ide-c-language.c
+++ b/libide/c/ide-c-language.c
@@ -23,8 +23,6 @@
#include "ide-c-format-provider.h"
#include "ide-c-indenter.h"
#include "ide-c-language.h"
-#include "ide-clang-completion-provider.h"
-#include "ide-clang-diagnostic-provider.h"
#include "ide-diagnostician.h"
#include "ide-extension-point.h"
#include "ide-internal.h"
@@ -51,8 +49,10 @@ ide_c_language_get_completion_providers (IdeLanguage *language)
g_return_val_if_fail (IDE_IS_C_LANGUAGE (language), NULL);
providers = IDE_LANGUAGE_CLASS (ide_c_language_parent_class)->get_completion_providers (language);
+#if 0
providers = g_list_append (providers, g_object_new (IDE_TYPE_C_FORMAT_PROVIDER, NULL));
providers = g_list_append (providers, g_object_new (IDE_TYPE_CLANG_COMPLETION_PROVIDER, NULL));
+#endif
return providers;
}
@@ -148,24 +148,11 @@ ide_c_language_initiable_init (GInitable *initable,
(g_strcmp0 (id, "cpp") == 0))
{
IdeContext *context;
- IdeDiagnosticProvider *provider;
g_autofree gchar *path = NULL;
context = ide_object_get_context (IDE_OBJECT (initable));
/*
- * Create our diagnostician using clang as a backend.
- */
- priv->diagnostician = g_object_new (IDE_TYPE_DIAGNOSTICIAN,
- "context", context,
- NULL);
- provider = g_object_new (IDE_TYPE_CLANG_DIAGNOSTIC_PROVIDER,
- "context", context,
- NULL);
- _ide_diagnostician_add_provider (priv->diagnostician, provider);
- g_clear_object (&provider);
-
- /*
* Create our indenter to provide as-you-type indentation.
*
* TODO: How can we disambiguate c/c++/obj-c headers?
diff --git a/libide/ctags/ide-ctags-service.c b/libide/ctags/ide-ctags-service.c
index 988e0cf..ad2b76d 100644
--- a/libide/ctags/ide-ctags-service.c
+++ b/libide/ctags/ide-ctags-service.c
@@ -36,7 +36,7 @@
struct _IdeCtagsService
{
- IdeService parent_instance;
+ IdeObject parent_instance;
GtkSourceCompletionProvider *provider;
IdeHighlighter *highlighter;
@@ -47,7 +47,10 @@ struct _IdeCtagsService
guint miner_ran : 1;
};
-G_DEFINE_TYPE (IdeCtagsService, ide_ctags_service, IDE_TYPE_SERVICE)
+static void service_iface_init (IdeServiceInterface *iface);
+
+G_DEFINE_TYPE_EXTENDED (IdeCtagsService, ide_ctags_service, IDE_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (IDE_TYPE_SERVICE, service_iface_init))
static void
ide_ctags_service_build_index_init_cb (GObject *object,
@@ -404,16 +407,19 @@ ide_ctags_service_finalize (GObject *object)
}
static void
+service_iface_init (IdeServiceInterface *iface)
+{
+ iface->start = ide_ctags_service_start;
+ iface->stop = ide_ctags_service_stop;
+}
+
+static void
ide_ctags_service_class_init (IdeCtagsServiceClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- IdeServiceClass *service_class = IDE_SERVICE_CLASS (klass);
object_class->constructed = ide_ctags_service_constructed;
object_class->finalize = ide_ctags_service_finalize;
-
- service_class->start = ide_ctags_service_start;
- service_class->stop = ide_ctags_service_stop;
}
static void
diff --git a/libide/ctags/ide-ctags-service.h b/libide/ctags/ide-ctags-service.h
index e6bfcd0..5a13d30 100644
--- a/libide/ctags/ide-ctags-service.h
+++ b/libide/ctags/ide-ctags-service.h
@@ -28,7 +28,7 @@ G_BEGIN_DECLS
#define IDE_TYPE_CTAGS_SERVICE (ide_ctags_service_get_type())
-G_DECLARE_FINAL_TYPE (IdeCtagsService, ide_ctags_service, IDE, CTAGS_SERVICE, IdeService)
+G_DECLARE_FINAL_TYPE (IdeCtagsService, ide_ctags_service, IDE, CTAGS_SERVICE, IdeObject)
GtkSourceCompletionProvider *ide_ctags_service_get_provider (IdeCtagsService *self);
IdeHighlighter *ide_ctags_service_get_highlighter (IdeCtagsService *self);
diff --git a/libide/gca/ide-gca-diagnostic-provider.c b/libide/gca/ide-gca-diagnostic-provider.c
index e7154d1..0e86938 100644
--- a/libide/gca/ide-gca-diagnostic-provider.c
+++ b/libide/gca/ide-gca-diagnostic-provider.c
@@ -37,7 +37,7 @@
struct _IdeGcaDiagnosticProvider
{
- IdeDiagnosticProvider parent_instance;
+ IdeObject parent_instance;
GHashTable *document_cache;
};
@@ -50,8 +50,11 @@ typedef struct
gchar *language_id;
} DiagnoseState;
-G_DEFINE_TYPE (IdeGcaDiagnosticProvider, ide_gca_diagnostic_provider,
- IDE_TYPE_DIAGNOSTIC_PROVIDER)
+static void diagnostic_provider_init (IdeDiagnosticProviderInterface *iface);
+
+G_DEFINE_TYPE_EXTENDED (IdeGcaDiagnosticProvider, ide_gca_diagnostic_provider, IDE_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (IDE_TYPE_DIAGNOSTIC_PROVIDER,
+ diagnostic_provider_init))
static void
diagnose_state_free (gpointer data)
@@ -440,20 +443,22 @@ ide_gca_diagnostic_provider_finalize (GObject *object)
}
static void
+diagnostic_provider_init (IdeDiagnosticProviderInterface *iface)
+{
+ iface->diagnose_async = ide_gca_diagnostic_provider_diagnose_async;
+ iface->diagnose_finish = ide_gca_diagnostic_provider_diagnose_finish;
+}
+
+static void
ide_gca_diagnostic_provider_class_init (IdeGcaDiagnosticProviderClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- IdeDiagnosticProviderClass *provider_class = IDE_DIAGNOSTIC_PROVIDER_CLASS (klass);
object_class->finalize = ide_gca_diagnostic_provider_finalize;
-
- provider_class->diagnose_async = ide_gca_diagnostic_provider_diagnose_async;
- provider_class->diagnose_finish = ide_gca_diagnostic_provider_diagnose_finish;
}
static void
ide_gca_diagnostic_provider_init (IdeGcaDiagnosticProvider *self)
{
- self->document_cache = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, g_object_unref);
+ self->document_cache = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
}
diff --git a/libide/gca/ide-gca-diagnostic-provider.h b/libide/gca/ide-gca-diagnostic-provider.h
index 2bf61f5..169d8fd 100644
--- a/libide/gca/ide-gca-diagnostic-provider.h
+++ b/libide/gca/ide-gca-diagnostic-provider.h
@@ -26,7 +26,8 @@ G_BEGIN_DECLS
#define IDE_TYPE_GCA_DIAGNOSTIC_PROVIDER (ide_gca_diagnostic_provider_get_type())
G_DECLARE_FINAL_TYPE (IdeGcaDiagnosticProvider, ide_gca_diagnostic_provider,
- IDE, GCA_DIAGNOSTIC_PROVIDER, IdeDiagnosticProvider)
+ IDE, GCA_DIAGNOSTIC_PROVIDER,
+ IdeObject)
G_END_DECLS
diff --git a/libide/gca/ide-gca-service.c b/libide/gca/ide-gca-service.c
index 10b7b3a..dba2588 100644
--- a/libide/gca/ide-gca-service.c
+++ b/libide/gca/ide-gca-service.c
@@ -26,7 +26,7 @@
struct _IdeGcaService
{
- IdeService parent_instance;
+ IdeObject parent_instance;
gulong bus_closed_handler;
@@ -34,7 +34,8 @@ struct _IdeGcaService
GHashTable *proxy_cache;
};
-G_DEFINE_TYPE (IdeGcaService, ide_gca_service, IDE_TYPE_SERVICE)
+G_DEFINE_TYPE_EXTENDED (IdeGcaService, ide_gca_service, IDE_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (IDE_TYPE_SERVICE, NULL))
static void
on_bus_closed (GDBusConnection *bus,
diff --git a/libide/gca/ide-gca-service.h b/libide/gca/ide-gca-service.h
index 6c18601..d35a383 100644
--- a/libide/gca/ide-gca-service.h
+++ b/libide/gca/ide-gca-service.h
@@ -27,7 +27,7 @@ G_BEGIN_DECLS
#define IDE_TYPE_GCA_SERVICE (ide_gca_service_get_type())
-G_DECLARE_FINAL_TYPE (IdeGcaService, ide_gca_service, IDE, GCA_SERVICE, IdeService)
+G_DECLARE_FINAL_TYPE (IdeGcaService, ide_gca_service, IDE, GCA_SERVICE, IdeObject)
void ide_gca_service_get_proxy_async (IdeGcaService *self,
const gchar *language_id,
diff --git a/libide/ide-buffer.c b/libide/ide-buffer.c
index 0f3559b..61fe8f1 100644
--- a/libide/ide-buffer.c
+++ b/libide/ide-buffer.c
@@ -581,15 +581,12 @@ ide_buffer_reload_highlighter (IdeBuffer *self)
if (language != NULL)
{
const gchar *lang_id;
- gchar *name;
lang_id = ide_language_get_id (language);
- name = g_strdup_printf ("org.gnome.builder.highlighter.%s", lang_id);
- point = ide_extension_point_lookup (name);
- highlighter = ide_extension_point_create (name,
+ point = ide_extension_point_lookup (IDE_TYPE_HIGHLIGHTER);
+ highlighter = ide_extension_point_create (IDE_TYPE_HIGHLIGHTER, lang_id,
"context", priv->context,
NULL);
- g_free (name);
}
if (priv->highlight_engine != NULL)
@@ -618,15 +615,12 @@ ide_buffer_reload_symbol_resolver (IdeBuffer *self)
if (language != NULL)
{
const gchar *lang_id;
- gchar *name;
lang_id = ide_language_get_id (language);
- name = g_strdup_printf ("org.gnome.builder.symbol-resolver.%s", lang_id);
- point = ide_extension_point_lookup (name);
- symbol_resolver = ide_extension_point_create (name,
+ point = ide_extension_point_lookup (IDE_TYPE_SYMBOL_RESOLVER);
+ symbol_resolver = ide_extension_point_create (IDE_TYPE_SYMBOL_RESOLVER, lang_id,
"context", priv->context,
NULL);
- g_free (name);
}
g_set_object (&priv->symbol_resolver, symbol_resolver);
diff --git a/libide/ide-context.c b/libide/ide-context.c
index 2bc233b..8066f44 100644
--- a/libide/ide-context.c
+++ b/libide/ide-context.c
@@ -521,11 +521,8 @@ ide_context_dispose (GObject *object)
while (g_hash_table_iter_next (&iter, &key, &value))
{
IdeService *service = value;
-
g_assert (IDE_IS_SERVICE (service));
-
- if (ide_service_get_running (service))
- ide_service_stop (service);
+ ide_service_stop (service);
}
G_OBJECT_CLASS (ide_context_parent_class)->dispose (object);
@@ -1212,9 +1209,8 @@ ide_context_init_services (gpointer source_object,
while (g_hash_table_iter_next (&hiter, NULL, &v))
{
IdeService *service = v;
-
- if (!ide_service_get_running (service))
- ide_service_start (service);
+ g_assert (IDE_IS_SERVICE (service));
+ ide_service_start (service);
}
g_task_return_boolean (task, TRUE);
diff --git a/libide/ide-diagnostic-provider.c b/libide/ide-diagnostic-provider.c
index 0ca0b69..9b0f9a4 100644
--- a/libide/ide-diagnostic-provider.c
+++ b/libide/ide-diagnostic-provider.c
@@ -19,17 +19,10 @@
#include "ide-diagnostic-provider.h"
#include "ide-file.h"
-G_DEFINE_ABSTRACT_TYPE (IdeDiagnosticProvider,
- ide_diagnostic_provider,
- IDE_TYPE_OBJECT)
+G_DEFINE_INTERFACE (IdeDiagnosticProvider, ide_diagnostic_provider, IDE_TYPE_OBJECT)
static void
-ide_diagnostic_provider_class_init (IdeDiagnosticProviderClass *klass)
-{
-}
-
-static void
-ide_diagnostic_provider_init (IdeDiagnosticProvider *self)
+ide_diagnostic_provider_default_init (IdeDiagnosticProviderInterface *iface)
{
}
@@ -44,8 +37,7 @@ ide_diagnostic_provider_diagnose_async (IdeDiagnosticProvider *self,
g_return_if_fail (IDE_IS_FILE (file));
g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
- if (IDE_DIAGNOSTIC_PROVIDER_GET_CLASS (self)->diagnose_async)
- IDE_DIAGNOSTIC_PROVIDER_GET_CLASS (self)->diagnose_async (self, file, cancellable, callback, user_data);
+ IDE_DIAGNOSTIC_PROVIDER_GET_IFACE (self)->diagnose_async (self, file, cancellable, callback, user_data);
}
IdeDiagnostics *
@@ -56,8 +48,5 @@ ide_diagnostic_provider_diagnose_finish (IdeDiagnosticProvider *self,
g_return_val_if_fail (IDE_IS_DIAGNOSTIC_PROVIDER (self), NULL);
g_return_val_if_fail (G_IS_ASYNC_RESULT (result), NULL);
- if (IDE_DIAGNOSTIC_PROVIDER_GET_CLASS (self)->diagnose_finish)
- return IDE_DIAGNOSTIC_PROVIDER_GET_CLASS (self)->diagnose_finish (self, result, error);
-
- return NULL;
+ return IDE_DIAGNOSTIC_PROVIDER_GET_IFACE (self)->diagnose_finish (self, result, error);
}
diff --git a/libide/ide-diagnostic-provider.h b/libide/ide-diagnostic-provider.h
index ada5ecc..a18ce60 100644
--- a/libide/ide-diagnostic-provider.h
+++ b/libide/ide-diagnostic-provider.h
@@ -25,13 +25,13 @@ G_BEGIN_DECLS
#define IDE_TYPE_DIAGNOSTIC_PROVIDER (ide_diagnostic_provider_get_type())
-G_DECLARE_DERIVABLE_TYPE (IdeDiagnosticProvider, ide_diagnostic_provider,
- IDE, DIAGNOSTIC_PROVIDER,
- IdeObject)
+G_DECLARE_INTERFACE (IdeDiagnosticProvider, ide_diagnostic_provider,
+ IDE, DIAGNOSTIC_PROVIDER,
+ IdeObject)
-struct _IdeDiagnosticProviderClass
+struct _IdeDiagnosticProviderInterface
{
- IdeObjectClass parent;
+ GTypeInterface parent_interface;
void (*diagnose_async) (IdeDiagnosticProvider *self,
IdeFile *file,
diff --git a/libide/ide-highlighter.c b/libide/ide-highlighter.c
index 9bdbfe1..38ac501 100644
--- a/libide/ide-highlighter.c
+++ b/libide/ide-highlighter.c
@@ -17,6 +17,7 @@
*/
#include <glib/gi18n.h>
+#include "ide-context.h"
#include "ide-highlighter.h"
G_DEFINE_INTERFACE (IdeHighlighter, ide_highlighter, IDE_TYPE_OBJECT)
@@ -41,6 +42,13 @@ ide_highlighter_default_init (IdeHighlighterInterface *iface)
{
iface->set_engine = dummy_set_engine;
iface->update = dummy_update;
+
+ g_object_interface_install_property (iface,
+ g_param_spec_object ("context",
+ "Context",
+ "Context",
+ IDE_TYPE_CONTEXT,
+ (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS)));
}
/**
diff --git a/libide/ide-internal.h b/libide/ide-internal.h
index abaf42a..a6a2a6a 100644
--- a/libide/ide-internal.h
+++ b/libide/ide-internal.h
@@ -19,12 +19,10 @@
#ifndef IDE_PRIVATE_H
#define IDE_PRIVATE_H
-#include <clang-c/Index.h>
#include <gtksourceview/gtksource.h>
#include "ide-back-forward-item.h"
#include "ide-back-forward-list.h"
-#include "ide-clang-translation-unit.h"
#include "ide-diagnostic.h"
#include "ide-types.h"
#include "ide-settings.h"
diff --git a/libide/ide-service.c b/libide/ide-service.c
index 2559d9f..c4b2bec 100644
--- a/libide/ide-service.c
+++ b/libide/ide-service.c
@@ -20,19 +20,7 @@
#include "ide-service.h"
-typedef struct
-{
- guint running : 1;
-} IdeServicePrivate;
-
-G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (IdeService, ide_service, IDE_TYPE_OBJECT)
-
-enum {
- PROP_0,
- PROP_NAME,
- PROP_RUNNING,
- LAST_PROP
-};
+G_DEFINE_INTERFACE (IdeService, ide_service, IDE_TYPE_OBJECT)
enum {
START,
@@ -40,30 +28,8 @@ enum {
LAST_SIGNAL
};
-static GParamSpec *gParamSpecs [LAST_PROP];
static guint gSignals [LAST_SIGNAL];
-gboolean
-ide_service_get_running (IdeService *service)
-{
- IdeServicePrivate *priv = ide_service_get_instance_private (service);
-
- g_return_val_if_fail (IDE_IS_SERVICE (service), FALSE);
-
- return priv->running;
-}
-
-const gchar *
-ide_service_get_name (IdeService *service)
-{
- g_return_val_if_fail (IDE_IS_SERVICE (service), NULL);
-
- if (IDE_SERVICE_GET_CLASS (service)->get_name)
- return IDE_SERVICE_GET_CLASS (service)->get_name (service);
-
- return NULL;
-}
-
void
ide_service_start (IdeService *service)
{
@@ -81,94 +47,23 @@ ide_service_stop (IdeService *service)
}
static void
-ide_service_real_start (IdeService *service)
-{
- IdeServicePrivate *priv = ide_service_get_instance_private (service);
-
- g_return_if_fail (IDE_IS_SERVICE (service));
-
- priv->running = TRUE;
-}
-
-static void
-ide_service_real_stop (IdeService *service)
-{
- IdeServicePrivate *priv = ide_service_get_instance_private (service);
-
- g_return_if_fail (IDE_IS_SERVICE (service));
-
- priv->running = FALSE;
-}
-
-static void
-ide_service_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
+ide_service_default_init (IdeServiceInterface *iface)
{
- IdeService *self = IDE_SERVICE (object);
-
- switch (prop_id)
- {
- case PROP_NAME:
- g_value_set_string (value, ide_service_get_name (self));
- break;
-
- case PROP_RUNNING:
- g_value_set_boolean (value, ide_service_get_running (self));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- }
-}
-
-static void
-ide_service_class_init (IdeServiceClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->get_property = ide_service_get_property;
-
- klass->start = ide_service_real_start;
- klass->start = ide_service_real_stop;
-
- gParamSpecs [PROP_NAME] =
- g_param_spec_string ("name",
- _("Name"),
- _("The name of the service."),
- NULL,
- (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- gParamSpecs [PROP_RUNNING] =
- g_param_spec_boolean ("running",
- _("Running"),
- _("If the service is running."),
- FALSE,
- (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
-
gSignals [START] =
g_signal_new ("start",
- G_TYPE_FROM_CLASS (klass),
+ G_TYPE_FROM_INTERFACE (iface),
G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (IdeServiceClass, start),
+ G_STRUCT_OFFSET (IdeServiceInterface, start),
NULL, NULL, NULL,
G_TYPE_NONE,
0);
gSignals [STOP] =
g_signal_new ("stop",
- G_TYPE_FROM_CLASS (klass),
+ G_TYPE_FROM_INTERFACE (iface),
G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (IdeServiceClass, stop),
+ G_STRUCT_OFFSET (IdeServiceInterface, stop),
NULL, NULL, NULL,
G_TYPE_NONE,
0);
}
-
-static void
-ide_service_init (IdeService *self)
-{
-}
diff --git a/libide/ide-service.h b/libide/ide-service.h
index 7f28287..fcf5659 100644
--- a/libide/ide-service.h
+++ b/libide/ide-service.h
@@ -26,11 +26,11 @@ G_BEGIN_DECLS
#define IDE_TYPE_SERVICE (ide_service_get_type())
#define IDE_SERVICE_EXTENSION_POINT "org.gnome.libide.extensions.service"
-G_DECLARE_DERIVABLE_TYPE (IdeService, ide_service, IDE, SERVICE, IdeObject)
+G_DECLARE_INTERFACE (IdeService, ide_service, IDE, SERVICE, IdeObject)
-struct _IdeServiceClass
+struct _IdeServiceInterface
{
- IdeObjectClass parent;
+ GTypeInterface parent_interface;
const gchar *(*get_name) (IdeService *service);
void (*start) (IdeService *service);
diff --git a/libide/ide-symbol-resolver.c b/libide/ide-symbol-resolver.c
index 3bab6ad..f8c9cef 100644
--- a/libide/ide-symbol-resolver.c
+++ b/libide/ide-symbol-resolver.c
@@ -16,6 +16,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "ide-context.h"
#include "ide-file.h"
#include "ide-symbol-resolver.h"
@@ -24,6 +25,12 @@ G_DEFINE_INTERFACE (IdeSymbolResolver, ide_symbol_resolver, IDE_TYPE_OBJECT)
static void
ide_symbol_resolver_default_init (IdeSymbolResolverInterface *iface)
{
+ g_object_interface_install_property (iface,
+ g_param_spec_object ("context",
+ "Context",
+ "Context",
+ IDE_TYPE_CONTEXT,
+ (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS)));
}
/**
diff --git a/libide/ide.c b/libide/ide.c
index 98b8bea..bfa1ed0 100644
--- a/libide/ide.c
+++ b/libide/ide.c
@@ -27,9 +27,6 @@
#include "ide-autotools-build-system.h"
#include "ide-autotools-project-miner.h"
#include "ide-c-language.h"
-#include "ide-clang-highlighter.h"
-#include "ide-clang-service.h"
-#include "ide-clang-symbol-resolver.h"
#include "ide-ctags-highlighter.h"
#include "ide-ctags-service.h"
#include "ide-device-provider.h"
@@ -91,8 +88,6 @@ static void
ide_init_ctor (void)
{
GgitFeatureFlags ggit_flags;
- const gchar *ctags_types[] = { "c", "cpp", "chdr", "python", "js", "css", "html", NULL };
- gint i;
g_irepository_prepend_search_path (LIBDIR"/gnome-builder/girepository-1.0");
@@ -109,42 +104,21 @@ ide_init_ctor (void)
g_io_extension_point_register (IDE_SERVICE_EXTENSION_POINT);
g_io_extension_point_register (IDE_VCS_EXTENSION_POINT);
- /*
- * TODO: These should be moved to plugins.
- */
-
- ide_extension_point_implement ("org.gnome.builder.highlighter.xml",
- IDE_TYPE_XML_HIGHLIGHTER,
- 0);
-
- ide_extension_point_implement ("org.gnome.builder.highlighter.c",
- IDE_TYPE_CLANG_HIGHLIGHTER,
- 0);
- ide_extension_point_implement ("org.gnome.builder.highlighter.cpp",
- IDE_TYPE_CLANG_HIGHLIGHTER,
- 0);
- ide_extension_point_implement ("org.gnome.builder.highlighter.chdr",
- IDE_TYPE_CLANG_HIGHLIGHTER,
- 0);
-
- for (i = 0; ctags_types [i]; i++)
- {
- gchar *name;
+ ide_extension_point_register (IDE_TYPE_HIGHLIGHTER,
+ "Highlighter-Languages",
+ "Highlighter-Priority");
- name = g_strdup_printf ("org.gnome.builder.highlighter.%s", ctags_types [i]);
- ide_extension_point_implement (name, IDE_TYPE_CTAGS_HIGHLIGHTER, 100);
- g_free (name);
- }
+ ide_extension_point_register (GTK_SOURCE_TYPE_COMPLETION_PROVIDER,
+ "Completion-Languages",
+ "Completion-Priority");
+
+ ide_extension_point_register (IDE_TYPE_DIAGNOSTIC_PROVIDER,
+ "Diagnostic-Languages",
+ "Diagnostic-Priority");
- ide_extension_point_implement ("org.gnome.builder.symbol-resolver.c",
- IDE_TYPE_CLANG_SYMBOL_RESOLVER,
- 0);
- ide_extension_point_implement ("org.gnome.builder.symbol-resolver.cpp",
- IDE_TYPE_CLANG_SYMBOL_RESOLVER,
- 0);
- ide_extension_point_implement ("org.gnome.builder.symbol-resolver.chdr",
- IDE_TYPE_CLANG_SYMBOL_RESOLVER,
- 0);
+ ide_extension_point_register (IDE_TYPE_SYMBOL_RESOLVER,
+ "Symbol-Resolver-Languages",
+ "Symbol-Resolver-Priority");
g_io_extension_point_implement (IDE_BUILD_SYSTEM_EXTENSION_POINT,
IDE_TYPE_AUTOTOOLS_BUILD_SYSTEM,
@@ -210,10 +184,6 @@ ide_init_ctor (void)
-100);
g_io_extension_point_implement (IDE_SERVICE_EXTENSION_POINT,
- IDE_TYPE_CLANG_SERVICE,
- IDE_SERVICE_EXTENSION_POINT".clang",
- -100);
- g_io_extension_point_implement (IDE_SERVICE_EXTENSION_POINT,
IDE_TYPE_CTAGS_SERVICE,
IDE_SERVICE_EXTENSION_POINT".ctags",
-100);
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 370d79d..c8440a3 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -1,4 +1,9 @@
SUBDIRS = \
+ clang \
+ clang-completion \
+ clang-diagnostics \
+ clang-highlighter \
+ clang-symbol-resolver \
command-bar \
devhelp \
device-manager \
diff --git a/plugins/clang-completion/Makefile.am b/plugins/clang-completion/Makefile.am
new file mode 100644
index 0000000..c62204b
--- /dev/null
+++ b/plugins/clang-completion/Makefile.am
@@ -0,0 +1,31 @@
+plugindir = $(libdir)/gnome-builder/plugins
+plugin_LTLIBRARIES = libgnome-builder-plugin-clang-completion.la
+plugin_DATA = clang-completion.plugin
+
+libgnome_builder_plugin_clang_completion_la_SOURCES = \
+ ide-clang-completion-provider.c \
+ ide-clang-completion-provider.h \
+ $(NULL)
+
+libgnome_builder_plugin_clang_completion_la_CFLAGS = \
+ -I$(top_srcdir)/libide \
+ -I$(top_srcdir)/plugins/clang \
+ $(BUILDER_CFLAGS) \
+ $(DEBUG_CFLAGS) \
+ $(OPTIMIZE_CFLAGS) \
+ $(NULL)
+
+libgnome_builder_plugin_clang_completion_la_LIBADD = \
+ $(BUILDER_LIBS) \
+ $(top_builddir)/plugins/clang/libgnome-builder-plugin-clang.la \
+ $(NULL)
+
+libgnome_builder_plugin_clang_completion_la_LDFLAGS = \
+ $(OPTIMIZE_LDFLAGS) \
+ -avoid-version \
+ -module \
+ $(NULL)
+
+EXTRA_DIST = $(plugin_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/plugins/clang-completion/clang-completion.plugin
b/plugins/clang-completion/clang-completion.plugin
new file mode 100644
index 0000000..835e559
--- /dev/null
+++ b/plugins/clang-completion/clang-completion.plugin
@@ -0,0 +1,11 @@
+[Plugin]
+Module=gnome-builder-plugin-clang-completion
+Name=Clang Completion
+Description=Provides auto-completion for C and C++ using Clang.
+Authors=Christian Hergert <christian hergert me>
+Copyright=Copyright © 2015 Christian Hergert
+Builtin=true
+Hidden=true
+Depends=gnome-builder-plugin-clang
+X-Completion-Languages=c,chdr,cpp
+X-Completion-Priority=100
diff --git a/libide/clang/ide-clang-completion-provider.c
b/plugins/clang-completion/ide-clang-completion-provider.c
similarity index 94%
rename from libide/clang/ide-clang-completion-provider.c
rename to plugins/clang-completion/ide-clang-completion-provider.c
index 3fe99bb..ae36b68 100644
--- a/libide/clang/ide-clang-completion-provider.c
+++ b/plugins/clang-completion/ide-clang-completion-provider.c
@@ -21,6 +21,7 @@
#include <devhelp/dh-assistant-view.h>
#include <devhelp/dh-book-manager.h>
#include <glib/gi18n.h>
+#include <libpeas/peas.h>
#include "ide-buffer.h"
#include "ide-clang-completion-item.h"
@@ -56,12 +57,12 @@ typedef struct
static void completion_provider_iface_init (GtkSourceCompletionProviderIface *);
-G_DEFINE_TYPE_EXTENDED (IdeClangCompletionProvider,
- ide_clang_completion_provider,
- G_TYPE_OBJECT,
- 0,
- G_IMPLEMENT_INTERFACE (GTK_SOURCE_TYPE_COMPLETION_PROVIDER,
- completion_provider_iface_init))
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (IdeClangCompletionProvider,
+ ide_clang_completion_provider,
+ G_TYPE_OBJECT,
+ 0,
+ G_IMPLEMENT_INTERFACE (GTK_SOURCE_TYPE_COMPLETION_PROVIDER,
+ completion_provider_iface_init))
static DhBookManager *
get_book_manager (void)
@@ -204,6 +205,11 @@ ide_clang_completion_provider_class_init (IdeClangCompletionProviderClass *klass
}
static void
+ide_clang_completion_provider_class_finalize (IdeClangCompletionProviderClass *klass)
+{
+}
+
+static void
ide_clang_completion_provider_init (IdeClangCompletionProvider *self)
{
self->settings = g_settings_new ("org.gnome.builder.code-insight");
@@ -537,3 +543,13 @@ completion_provider_iface_init (GtkSourceCompletionProviderIface *iface)
iface->update_info = ide_clang_completion_provider_update_info;
iface->get_priority = ide_clang_completion_provider_get_priority;
}
+
+void
+peas_register_types (PeasObjectModule *module)
+{
+ ide_clang_completion_provider_register_type (G_TYPE_MODULE (module));
+
+ peas_object_module_register_extension_type (module,
+ GTK_SOURCE_TYPE_COMPLETION_PROVIDER,
+ IDE_TYPE_CLANG_COMPLETION_PROVIDER);
+}
diff --git a/libide/clang/ide-clang-completion-provider.h
b/plugins/clang-completion/ide-clang-completion-provider.h
similarity index 100%
rename from libide/clang/ide-clang-completion-provider.h
rename to plugins/clang-completion/ide-clang-completion-provider.h
diff --git a/plugins/clang-diagnostics/Makefile.am b/plugins/clang-diagnostics/Makefile.am
new file mode 100644
index 0000000..33aba23
--- /dev/null
+++ b/plugins/clang-diagnostics/Makefile.am
@@ -0,0 +1,31 @@
+plugindir = $(libdir)/gnome-builder/plugins
+plugin_LTLIBRARIES = libgnome-builder-plugin-clang-diagnostics.la
+plugin_DATA = clang-diagnostics.plugin
+
+libgnome_builder_plugin_clang_diagnostics_la_SOURCES = \
+ ide-clang-diagnostic-provider.c \
+ ide-clang-diagnostic-provider.h \
+ $(NULL)
+
+libgnome_builder_plugin_clang_diagnostics_la_CFLAGS = \
+ -I$(top_srcdir)/libide \
+ -I$(top_srcdir)/plugins/clang \
+ $(BUILDER_CFLAGS) \
+ $(DEBUG_CFLAGS) \
+ $(OPTIMIZE_CFLAGS) \
+ $(NULL)
+
+libgnome_builder_plugin_clang_diagnostics_la_LIBADD = \
+ $(BUILDER_LIBS) \
+ $(top_builddir)/plugins/clang/libgnome-builder-plugin-clang.la \
+ $(NULL)
+
+libgnome_builder_plugin_clang_diagnostics_la_LDFLAGS = \
+ $(OPTIMIZE_LDFLAGS) \
+ -avoid-version \
+ -module \
+ $(NULL)
+
+EXTRA_DIST = $(plugin_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/plugins/clang-diagnostics/clang-diagnostics.plugin
b/plugins/clang-diagnostics/clang-diagnostics.plugin
new file mode 100644
index 0000000..0638cfd
--- /dev/null
+++ b/plugins/clang-diagnostics/clang-diagnostics.plugin
@@ -0,0 +1,11 @@
+[Plugin]
+Module=gnome-builder-plugin-clang-diagnostics
+Name=Clang Diagnostics
+Description=Uses clang to provide diagnostics as you type, such as errors and warnings.
+Authors=Christian Hergert <christian hergert me>
+Copyright=Copyright © 2015 Christian Hergert
+Builtin=true
+Hidden=true
+Depends=gnome-builder-plugin-clang
+X-Diagnostic-Languages=c,chdr,cpp
+X-Diagnostic-Priority=100
diff --git a/libide/clang/ide-clang-diagnostic-provider.c
b/plugins/clang-diagnostics/ide-clang-diagnostic-provider.c
similarity index 81%
rename from libide/clang/ide-clang-diagnostic-provider.c
rename to plugins/clang-diagnostics/ide-clang-diagnostic-provider.c
index f1121e1..d5ec129 100644
--- a/libide/clang/ide-clang-diagnostic-provider.c
+++ b/plugins/clang-diagnostics/ide-clang-diagnostic-provider.c
@@ -17,6 +17,7 @@
*/
#include <glib/gi18n.h>
+#include <libpeas/peas.h>
#include "ide-clang-diagnostic-provider.h"
#include "ide-clang-service.h"
@@ -25,8 +26,19 @@
#include "ide-diagnostics.h"
#include "ide-file.h"
-G_DEFINE_TYPE (IdeClangDiagnosticProvider, ide_clang_diagnostic_provider,
- IDE_TYPE_DIAGNOSTIC_PROVIDER)
+static void diagnostic_provider_init (IdeDiagnosticProviderInterface *iface);
+
+struct _IdeClangDiagnosticProvider
+{
+ IdeObject parent_instance;
+};
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (IdeClangDiagnosticProvider,
+ ide_clang_diagnostic_provider,
+ IDE_TYPE_OBJECT,
+ 0,
+ G_IMPLEMENT_INTERFACE (IDE_TYPE_DIAGNOSTIC_PROVIDER,
+ diagnostic_provider_init))
static void
get_translation_unit_cb (GObject *object,
@@ -159,16 +171,33 @@ ide_clang_diagnostic_provider_diagnose_finish (IdeDiagnosticProvider *provider,
}
static void
+diagnostic_provider_init (IdeDiagnosticProviderInterface *iface)
+{
+ iface->diagnose_async = ide_clang_diagnostic_provider_diagnose_async;
+ iface->diagnose_finish = ide_clang_diagnostic_provider_diagnose_finish;
+}
+
+static void
ide_clang_diagnostic_provider_class_init (IdeClangDiagnosticProviderClass *klass)
{
- IdeDiagnosticProviderClass *provider_class;
+}
- provider_class = IDE_DIAGNOSTIC_PROVIDER_CLASS (klass);
- provider_class->diagnose_async = ide_clang_diagnostic_provider_diagnose_async;
- provider_class->diagnose_finish = ide_clang_diagnostic_provider_diagnose_finish;
+static void
+ide_clang_diagnostic_provider_class_finalize (IdeClangDiagnosticProviderClass *klass)
+{
}
static void
ide_clang_diagnostic_provider_init (IdeClangDiagnosticProvider *self)
{
}
+
+void
+peas_register_types (PeasObjectModule *module)
+{
+ ide_clang_diagnostic_provider_register_type (G_TYPE_MODULE (module));
+
+ peas_object_module_register_extension_type (module,
+ IDE_TYPE_DIAGNOSTIC_PROVIDER,
+ IDE_TYPE_CLANG_DIAGNOSTIC_PROVIDER);
+}
diff --git a/libide/clang/ide-clang-diagnostic-provider.h
b/plugins/clang-diagnostics/ide-clang-diagnostic-provider.h
similarity index 90%
rename from libide/clang/ide-clang-diagnostic-provider.h
rename to plugins/clang-diagnostics/ide-clang-diagnostic-provider.h
index bdb60df..38ee9e3 100644
--- a/libide/clang/ide-clang-diagnostic-provider.h
+++ b/plugins/clang-diagnostics/ide-clang-diagnostic-provider.h
@@ -28,12 +28,7 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (IdeClangDiagnosticProvider,
ide_clang_diagnostic_provider,
IDE, CLANG_DIAGNOSTIC_PROVIDER,
- IdeDiagnosticProvider)
-
-struct _IdeClangDiagnosticProvider
-{
- IdeDiagnosticProvider parent_instance;
-};
+ IdeObject)
G_END_DECLS
diff --git a/plugins/clang-highlighter/Makefile.am b/plugins/clang-highlighter/Makefile.am
new file mode 100644
index 0000000..51494e7
--- /dev/null
+++ b/plugins/clang-highlighter/Makefile.am
@@ -0,0 +1,32 @@
+plugindir = $(libdir)/gnome-builder/plugins
+plugin_LTLIBRARIES = libgnome-builder-plugin-clang-highlighter.la
+plugin_DATA = clang-highlighter.plugin
+
+libgnome_builder_plugin_clang_highlighter_la_SOURCES = \
+ ide-clang-highlighter.c \
+ ide-clang-highlighter.h \
+ $(NULL)
+
+libgnome_builder_plugin_clang_highlighter_la_CFLAGS = \
+ -I$(top_srcdir)/libide \
+ -I$(top_srcdir)/contrib/egg \
+ -I$(top_srcdir)/plugins/clang \
+ $(BUILDER_CFLAGS) \
+ $(DEBUG_CFLAGS) \
+ $(OPTIMIZE_CFLAGS) \
+ $(NULL)
+
+libgnome_builder_plugin_clang_highlighter_la_LIBADD = \
+ $(BUILDER_LIBS) \
+ $(top_builddir)/plugins/clang/libgnome-builder-plugin-clang.la \
+ $(NULL)
+
+libgnome_builder_plugin_clang_highlighter_la_LDFLAGS = \
+ $(OPTIMIZE_LDFLAGS) \
+ -avoid-version \
+ -module \
+ $(NULL)
+
+EXTRA_DIST = $(plugin_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/plugins/clang-highlighter/clang-highlighter.plugin
b/plugins/clang-highlighter/clang-highlighter.plugin
new file mode 100644
index 0000000..847c41a
--- /dev/null
+++ b/plugins/clang-highlighter/clang-highlighter.plugin
@@ -0,0 +1,11 @@
+[Plugin]
+Module=gnome-builder-plugin-clang-highlighter
+Name=Clang Highlighter
+Description=Provides semantic highlighting for C and C++ using Clang.
+Authors=Christian Hergert <christian hergert me>
+Copyright=Copyright © 2015 Christian Hergert
+Builtin=true
+Hidden=true
+Depends=gnome-builder-plugin-clang
+X-Highlighter-Languages=c,cpp,chdr
+X-Highlighter-Priority=100
diff --git a/libide/clang/ide-clang-highlighter.c b/plugins/clang-highlighter/ide-clang-highlighter.c
similarity index 85%
rename from libide/clang/ide-clang-highlighter.c
rename to plugins/clang-highlighter/ide-clang-highlighter.c
index a311da5..d8c35f1 100644
--- a/libide/clang/ide-clang-highlighter.c
+++ b/plugins/clang-highlighter/ide-clang-highlighter.c
@@ -17,6 +17,8 @@
*/
#include <glib/gi18n.h>
+#include <libpeas/peas.h>
+#include <ide.h>
#include "ide-buffer.h"
#include "ide-clang-highlighter.h"
@@ -31,9 +33,9 @@ struct _IdeClangHighlighter
static void ide_clang_highlighter_iface_init (IdeHighlighterInterface *iface);
-G_DEFINE_TYPE_WITH_CODE (IdeClangHighlighter, ide_clang_highlighter, IDE_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (IDE_TYPE_HIGHLIGHTER,
- ide_clang_highlighter_iface_init))
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (IdeClangHighlighter, ide_clang_highlighter, IDE_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (IDE_TYPE_HIGHLIGHTER,
+ ide_clang_highlighter_iface_init))
static inline gboolean
accepts_char (gunichar ch)
@@ -145,6 +147,11 @@ ide_clang_highlighter_iface_init (IdeHighlighterInterface *iface)
}
static void
+ide_clang_highlighter_class_finalize (IdeClangHighlighterClass *klass)
+{
+}
+
+static void
ide_clang_highlighter_class_init (IdeClangHighlighterClass *klass)
{
}
@@ -153,3 +160,13 @@ static void
ide_clang_highlighter_init (IdeClangHighlighter *self)
{
}
+
+void
+peas_register_types (PeasObjectModule *module)
+{
+ ide_clang_highlighter_register_type (G_TYPE_MODULE (module));
+
+ peas_object_module_register_extension_type (module,
+ IDE_TYPE_HIGHLIGHTER,
+ IDE_TYPE_CLANG_HIGHLIGHTER);
+}
diff --git a/libide/clang/ide-clang-highlighter.h b/plugins/clang-highlighter/ide-clang-highlighter.h
similarity index 82%
rename from libide/clang/ide-clang-highlighter.h
rename to plugins/clang-highlighter/ide-clang-highlighter.h
index a58cbf5..40d5e3f 100644
--- a/libide/clang/ide-clang-highlighter.h
+++ b/plugins/clang-highlighter/ide-clang-highlighter.h
@@ -25,11 +25,6 @@ G_BEGIN_DECLS
#define IDE_TYPE_CLANG_HIGHLIGHTER (ide_clang_highlighter_get_type())
-#define IDE_CLANG_HIGHLIGHTER_TYPE "c:type"
-#define IDE_CLANG_HIGHLIGHTER_FUNCTION_NAME "def:function"
-#define IDE_CLANG_HIGHLIGHTER_ENUM_NAME "def:constant"
-#define IDE_CLANG_HIGHLIGHTER_MACRO_NAME "c:macro-name"
-
G_DECLARE_FINAL_TYPE (IdeClangHighlighter, ide_clang_highlighter, IDE, CLANG_HIGHLIGHTER, IdeObject)
G_END_DECLS
diff --git a/plugins/clang-symbol-resolver/Makefile.am b/plugins/clang-symbol-resolver/Makefile.am
new file mode 100644
index 0000000..95ab06b
--- /dev/null
+++ b/plugins/clang-symbol-resolver/Makefile.am
@@ -0,0 +1,31 @@
+plugindir = $(libdir)/gnome-builder/plugins
+plugin_LTLIBRARIES = libgnome-builder-plugin-clang-symbol-resolver.la
+plugin_DATA = clang-symbol-resolver.plugin
+
+libgnome_builder_plugin_clang_symbol_resolver_la_SOURCES = \
+ ide-clang-symbol-resolver.c \
+ ide-clang-symbol-resolver.h \
+ $(NULL)
+
+libgnome_builder_plugin_clang_symbol_resolver_la_CFLAGS = \
+ -I$(top_srcdir)/libide \
+ -I$(top_srcdir)/plugins/clang \
+ $(BUILDER_CFLAGS) \
+ $(DEBUG_CFLAGS) \
+ $(OPTIMIZE_CFLAGS) \
+ $(NULL)
+
+libgnome_builder_plugin_clang_symbol_resolver_la_LIBADD = \
+ $(BUILDER_LIBS) \
+ $(top_builddir)/plugins/clang/libgnome-builder-plugin-clang.la \
+ $(NULL)
+
+libgnome_builder_plugin_clang_symbol_resolver_la_LDFLAGS = \
+ $(OPTIMIZE_LDFLAGS) \
+ -avoid-version \
+ -module \
+ $(NULL)
+
+EXTRA_DIST = $(plugin_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/plugins/clang-symbol-resolver/clang-symbol-resolver.plugin
b/plugins/clang-symbol-resolver/clang-symbol-resolver.plugin
new file mode 100644
index 0000000..8695222
--- /dev/null
+++ b/plugins/clang-symbol-resolver/clang-symbol-resolver.plugin
@@ -0,0 +1,11 @@
+[Plugin]
+Module=gnome-builder-plugin-clang-symbol-resolver
+Name=Clang Symbol Resolver
+Description=Provides symbol resolving using clang.
+Authors=Christian Hergert <christian hergert me>
+Copyright=Copyright © 2015 Christian Hergert
+Builtin=true
+Hidden=true
+Depends=gnome-builder-plugin-clang
+X-Symbol-Resolver-Languages=c,cpp,chdr
+X-Symbol-Resolver-Priority=100
diff --git a/libide/clang/ide-clang-symbol-resolver.c
b/plugins/clang-symbol-resolver/ide-clang-symbol-resolver.c
similarity index 93%
rename from libide/clang/ide-clang-symbol-resolver.c
rename to plugins/clang-symbol-resolver/ide-clang-symbol-resolver.c
index 6244904..bcf9621 100644
--- a/libide/clang/ide-clang-symbol-resolver.c
+++ b/plugins/clang-symbol-resolver/ide-clang-symbol-resolver.c
@@ -18,6 +18,8 @@
#define G_LOG_DOMAIN "clang-symbol-resolver"
+#include <libpeas/peas.h>
+
#include "ide-context.h"
#include "ide-clang-service.h"
#include "ide-clang-symbol-resolver.h"
@@ -33,11 +35,12 @@ struct _IdeClangSymbolResolver
static void symbol_resolver_init (IdeSymbolResolverInterface *iface);
-G_DEFINE_TYPE_WITH_CODE (IdeClangSymbolResolver,
- ide_clang_symbol_resolver,
- IDE_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (IDE_TYPE_SYMBOL_RESOLVER,
- symbol_resolver_init))
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (IdeClangSymbolResolver,
+ ide_clang_symbol_resolver,
+ IDE_TYPE_OBJECT,
+ 0,
+ G_IMPLEMENT_INTERFACE (IDE_TYPE_SYMBOL_RESOLVER,
+ symbol_resolver_init))
static void
ide_clang_symbol_resolver_lookup_symbol_cb (GObject *object,
@@ -343,6 +346,21 @@ ide_clang_symbol_resolver_class_init (IdeClangSymbolResolverClass *klass)
}
static void
+ide_clang_symbol_resolver_class_finalize (IdeClangSymbolResolverClass *klass)
+{
+}
+
+static void
ide_clang_symbol_resolver_init (IdeClangSymbolResolver *self)
{
}
+
+void
+peas_register_types (PeasObjectModule *module)
+{
+ ide_clang_symbol_resolver_register_type (G_TYPE_MODULE (module));
+
+ peas_object_module_register_extension_type (module,
+ IDE_TYPE_SYMBOL_RESOLVER,
+ IDE_TYPE_CLANG_SYMBOL_RESOLVER);
+}
diff --git a/libide/clang/ide-clang-symbol-resolver.h
b/plugins/clang-symbol-resolver/ide-clang-symbol-resolver.h
similarity index 100%
copy from libide/clang/ide-clang-symbol-resolver.h
copy to plugins/clang-symbol-resolver/ide-clang-symbol-resolver.h
diff --git a/plugins/clang/Makefile.am b/plugins/clang/Makefile.am
new file mode 100644
index 0000000..8793995
--- /dev/null
+++ b/plugins/clang/Makefile.am
@@ -0,0 +1,42 @@
+plugindir = $(libdir)/gnome-builder/plugins
+plugin_LTLIBRARIES = libgnome-builder-plugin-clang.la
+plugin_DATA = clang.plugin
+
+libgnome_builder_plugin_clang_la_SOURCES = \
+ gb-clang-plugin.c \
+ ide-clang-completion-item.c \
+ ide-clang-completion-item.h \
+ ide-clang-private.h \
+ ide-clang-service.c \
+ ide-clang-service.h \
+ ide-clang-symbol-node.c \
+ ide-clang-symbol-node.h \
+ ide-clang-symbol-tree.c \
+ ide-clang-symbol-tree.h \
+ ide-clang-translation-unit.c \
+ ide-clang-translation-unit.h \
+ $(NULL)
+
+libgnome_builder_plugin_clang_la_CFLAGS = \
+ -I$(top_srcdir)/libide \
+ -I$(top_srcdir)/contrib/egg \
+ $(BUILDER_CFLAGS) \
+ $(DEBUG_CFLAGS) \
+ $(OPTIMIZE_CFLAGS) \
+ $(NULL)
+
+libgnome_builder_plugin_clang_la_LIBADD = \
+ $(BUILDER_LIBS) \
+ -lclang \
+ $(NULL)
+
+libgnome_builder_plugin_clang_la_LDFLAGS = \
+ $(CLANG_LDFLAGS) \
+ $(OPTIMIZE_LDFLAGS) \
+ -avoid-version \
+ -module \
+ $(NULL)
+
+EXTRA_DIST = $(plugin_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/plugins/clang/clang.plugin b/plugins/clang/clang.plugin
new file mode 100644
index 0000000..11afcd7
--- /dev/null
+++ b/plugins/clang/clang.plugin
@@ -0,0 +1,8 @@
+[Plugin]
+Module=gnome-builder-plugin-clang
+Name=Clang
+Description=Provides plumbing for clang integration.
+Authors=Christian Hergert <christian hergert me>
+Copyright=Copyright © 2015 Christian Hergert
+Builtin=true
+Hidden=true
diff --git a/libide/clang/ide-clang-symbol-resolver.h b/plugins/clang/gb-clang-plugin.c
similarity index 58%
rename from libide/clang/ide-clang-symbol-resolver.h
rename to plugins/clang/gb-clang-plugin.c
index 8fef4c5..c1d1716 100644
--- a/libide/clang/ide-clang-symbol-resolver.h
+++ b/plugins/clang/gb-clang-plugin.c
@@ -1,4 +1,4 @@
-/* ide-clang-symbol-resolver.h
+/* gb-clang-plugin.c
*
* Copyright (C) 2015 Christian Hergert <christian hergert me>
*
@@ -16,19 +16,20 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef IDE_CLANG_SYMBOL_RESOLVER_H
-#define IDE_CLANG_SYMBOL_RESOLVER_H
+#include <libpeas/peas.h>
+#include <ide.h>
-#include "ide-symbol-resolver.h"
+#include "ide-clang-completion-item.h"
+#include "ide-clang-service.h"
-G_BEGIN_DECLS
+void
+peas_register_types (PeasObjectModule *module)
+{
+ peas_object_module_register_extension_type (module,
+ IDE_TYPE_SERVICE,
+ IDE_TYPE_CLANG_SERVICE);
-#define IDE_TYPE_CLANG_SYMBOL_RESOLVER (ide_clang_symbol_resolver_get_type())
-
-G_DECLARE_FINAL_TYPE (IdeClangSymbolResolver, ide_clang_symbol_resolver,
- IDE, CLANG_SYMBOL_RESOLVER,
- IdeObject)
-
-G_END_DECLS
-
-#endif /* IDE_CLANG_SYMBOL_RESOLVER_H */
+ g_type_ensure (IDE_TYPE_SERVICE);
+ g_type_ensure (IDE_TYPE_CLANG_TRANSLATION_UNIT);
+ g_type_ensure (IDE_TYPE_CLANG_COMPLETION_ITEM);
+}
diff --git a/libide/clang/ide-clang-completion-item.c b/plugins/clang/ide-clang-completion-item.c
similarity index 100%
rename from libide/clang/ide-clang-completion-item.c
rename to plugins/clang/ide-clang-completion-item.c
diff --git a/libide/clang/ide-clang-completion-item.h b/plugins/clang/ide-clang-completion-item.h
similarity index 100%
rename from libide/clang/ide-clang-completion-item.h
rename to plugins/clang/ide-clang-completion-item.h
diff --git a/libide/clang/ide-clang-private.h b/plugins/clang/ide-clang-private.h
similarity index 100%
rename from libide/clang/ide-clang-private.h
rename to plugins/clang/ide-clang-private.h
diff --git a/libide/clang/ide-clang-service.c b/plugins/clang/ide-clang-service.c
similarity index 96%
rename from libide/clang/ide-clang-service.c
rename to plugins/clang/ide-clang-service.c
index b6c035e..0e9c25d 100644
--- a/libide/clang/ide-clang-service.c
+++ b/plugins/clang/ide-clang-service.c
@@ -24,7 +24,6 @@
#include "egg-counter.h"
#include "egg-task-cache.h"
-#include "ide-clang-highlighter.h"
#include "ide-build-system.h"
#include "ide-clang-private.h"
#include "ide-clang-service.h"
@@ -36,11 +35,16 @@
#include "ide-unsaved-file.h"
#include "ide-unsaved-files.h"
+#define IDE_CLANG_HIGHLIGHTER_TYPE "c:type"
+#define IDE_CLANG_HIGHLIGHTER_FUNCTION_NAME "def:function"
+#define IDE_CLANG_HIGHLIGHTER_ENUM_NAME "def:constant"
+#define IDE_CLANG_HIGHLIGHTER_MACRO_NAME "c:macro-name"
+
#define DEFAULT_EVICTION_MSEC (60 * 1000)
struct _IdeClangService
{
- IdeService parent_instance;
+ IdeObject parent_instance;
CXIndex index;
GCancellable *cancellable;
@@ -65,7 +69,10 @@ typedef struct
const gchar *filename;
} IndexRequest;
-G_DEFINE_TYPE (IdeClangService, ide_clang_service, IDE_TYPE_SERVICE)
+static void service_iface_init (IdeServiceInterface *iface);
+
+G_DEFINE_TYPE_EXTENDED (IdeClangService, ide_clang_service, IDE_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (IDE_TYPE_SERVICE, service_iface_init))
EGG_DEFINE_COUNTER (ParseAttempts,
"Clang",
@@ -551,8 +558,6 @@ ide_clang_service_start (IdeService *service)
self->index = clang_createIndex (0, 0);
clang_CXIndex_setGlobalOptions (self->index,
CXGlobalOpt_ThreadBackgroundPriorityForAll);
-
- IDE_SERVICE_CLASS (ide_clang_service_parent_class)->start (service);
}
static void
@@ -565,8 +570,6 @@ ide_clang_service_stop (IdeService *service)
g_cancellable_cancel (self->cancellable);
g_clear_object (&self->units_cache);
-
- IDE_SERVICE_CLASS (ide_clang_service_parent_class)->start (service);
}
static void
@@ -596,16 +599,19 @@ ide_clang_service_finalize (GObject *object)
}
static void
+service_iface_init (IdeServiceInterface *iface)
+{
+ iface->start = ide_clang_service_start;
+ iface->stop = ide_clang_service_stop;
+}
+
+static void
ide_clang_service_class_init (IdeClangServiceClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- IdeServiceClass *service_class = IDE_SERVICE_CLASS (klass);
object_class->dispose = ide_clang_service_dispose;
object_class->finalize = ide_clang_service_finalize;
-
- service_class->start = ide_clang_service_start;
- service_class->stop = ide_clang_service_stop;
}
static void
diff --git a/libide/clang/ide-clang-service.h b/plugins/clang/ide-clang-service.h
similarity index 98%
rename from libide/clang/ide-clang-service.h
rename to plugins/clang/ide-clang-service.h
index d9a36b8..ac781fd 100644
--- a/libide/clang/ide-clang-service.h
+++ b/plugins/clang/ide-clang-service.h
@@ -19,15 +19,14 @@
#ifndef IDE_CLANG_SERVICE_H
#define IDE_CLANG_SERVICE_H
-#include "ide-service.h"
-
#include "ide-clang-translation-unit.h"
+#include "ide-service.h"
G_BEGIN_DECLS
#define IDE_TYPE_CLANG_SERVICE (ide_clang_service_get_type())
-G_DECLARE_FINAL_TYPE (IdeClangService, ide_clang_service, IDE, CLANG_SERVICE, IdeService)
+G_DECLARE_FINAL_TYPE (IdeClangService, ide_clang_service, IDE, CLANG_SERVICE, IdeObject)
void ide_clang_service_get_translation_unit_async (IdeClangService *self,
IdeFile *file,
diff --git a/libide/clang/ide-clang-symbol-node.c b/plugins/clang/ide-clang-symbol-node.c
similarity index 100%
rename from libide/clang/ide-clang-symbol-node.c
rename to plugins/clang/ide-clang-symbol-node.c
diff --git a/libide/clang/ide-clang-symbol-node.h b/plugins/clang/ide-clang-symbol-node.h
similarity index 100%
rename from libide/clang/ide-clang-symbol-node.h
rename to plugins/clang/ide-clang-symbol-node.h
diff --git a/libide/clang/ide-clang-symbol-tree.c b/plugins/clang/ide-clang-symbol-tree.c
similarity index 100%
rename from libide/clang/ide-clang-symbol-tree.c
rename to plugins/clang/ide-clang-symbol-tree.c
diff --git a/libide/clang/ide-clang-symbol-tree.h b/plugins/clang/ide-clang-symbol-tree.h
similarity index 100%
rename from libide/clang/ide-clang-symbol-tree.h
rename to plugins/clang/ide-clang-symbol-tree.h
diff --git a/libide/clang/ide-clang-translation-unit.c b/plugins/clang/ide-clang-translation-unit.c
similarity index 100%
rename from libide/clang/ide-clang-translation-unit.c
rename to plugins/clang/ide-clang-translation-unit.c
diff --git a/libide/clang/ide-clang-translation-unit.h b/plugins/clang/ide-clang-translation-unit.h
similarity index 100%
rename from libide/clang/ide-clang-translation-unit.h
rename to plugins/clang/ide-clang-translation-unit.h
diff --git a/plugins/symbol-tree/symbol-tree.c b/plugins/symbol-tree/symbol-tree.c
index 54d3c8d..9a4fc5f 100644
--- a/plugins/symbol-tree/symbol-tree.c
+++ b/plugins/symbol-tree/symbol-tree.c
@@ -162,18 +162,15 @@ get_symbol_resolver (IdeLanguage *language)
IdeSymbolResolver *ret;
IdeContext *context;
const gchar *lang_id;
- gchar *name;
g_assert (IDE_IS_LANGUAGE (language));
context = ide_object_get_context (IDE_OBJECT (language));
lang_id = ide_language_get_id (language);
- name = g_strdup_printf ("org.gnome.builder.symbol-resolver.%s", lang_id);
- ret = ide_extension_point_create (name,
+ ret = ide_extension_point_create (IDE_TYPE_SYMBOL_RESOLVER, lang_id,
"context", context,
NULL);
- g_free (name);
return ret;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]