[valadoc] libvaladoc: ModuleLoader cleanups
- From: Florian Brosch <flobrosch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [valadoc] libvaladoc: ModuleLoader cleanups
- Date: Fri, 27 Jan 2012 16:45:57 +0000 (UTC)
commit ff94c631c9826c114928c8549186d9747b0b6079
Author: Florian Brosch <flo brosch gmail com>
Date: Sat Jan 14 23:49:16 2012 +0100
libvaladoc: ModuleLoader cleanups
src/libvaladoc/moduleloader.vala | 92 ++++++++++++++++++-------------
src/libvaladoc/taglets/tagletinit.vala | 16 +++---
src/valadoc/valadoc.vala | 25 +++++----
3 files changed, 76 insertions(+), 57 deletions(-)
---
diff --git a/src/libvaladoc/moduleloader.vala b/src/libvaladoc/moduleloader.vala
index bee1114..123d0e4 100755
--- a/src/libvaladoc/moduleloader.vala
+++ b/src/libvaladoc/moduleloader.vala
@@ -31,63 +31,77 @@ public delegate void Valadoc.TagletRegisterFunction (ModuleLoader loader);
public class Valadoc.ModuleLoader : Object {
- public HashMap<string, GLib.Type> taglets = new HashMap<string, GLib.Type> (GLib.str_hash, GLib.str_equal);
+ private HashMap<string, ModuleData> doclets = new HashMap<string, ModuleData> ();
+ private HashMap<string, ModuleData> drivers = new HashMap<string, ModuleData> ();
+ private HashMap<string, GLib.Type> taglets = new HashMap<string, GLib.Type> ();
- private Module drivermodule;
- private Type drivertype;
- public Driver driver;
-
- private Module docletmodule;
- private Type doclettype;
- public Doclet doclet;
-
- ~ModuleLoader () {
- // TODO: Why Do I have to do this?
- driver = null;
- doclet = null;
+ private class ModuleData : Object {
+ public Module module;
+ public Type type;
}
public Content.Taglet? create_taglet (string keyword) {
return (taglets.has_key (keyword))? (Content.Taglet) GLib.Object.new (taglets.get (keyword)) : null;
}
- public bool load_doclet (string path) {
- void* function;
+ public void register_taglet (string keyword, Type type) {
+ taglets.set (keyword, type);
+ }
+
+ public Doclet? create_doclet (string _path) {
+ string path = realpath (_path);
- docletmodule = Module.open (Module.build_path (path, "libdoclet"), ModuleFlags.BIND_LAZY | ModuleFlags.BIND_LOCAL);
- if (docletmodule == null) {
- return false;
- }
+ ModuleData? data = doclets.get (path);
+ if (data == null) {
+ void* function;
+
+ Module? module = Module.open (Module.build_path (path, "libdoclet"), ModuleFlags.BIND_LAZY | ModuleFlags.BIND_LOCAL);
+ if (module == null) {
+ return null;
+ }
- docletmodule.symbol("register_plugin", out function);
- if (function == null) {
- return false;
+ module.symbol("register_plugin", out function);
+ if (function == null) {
+ return null;
+ }
+
+ Valadoc.DocletRegisterFunction register_func = (Valadoc.DocletRegisterFunction) function;
+ data = new ModuleData ();
+ doclets.set (path, data);
+
+ data.type = register_func (this);
+ data.module = (owned) module;
}
- Valadoc.DocletRegisterFunction doclet_register_function = (Valadoc.DocletRegisterFunction) function;
- doclettype = doclet_register_function (this);
- this.doclet = (Doclet) GLib.Object.new (doclettype);
- return true;
+ return (Doclet) GLib.Object.new (data.type);
}
+ public Driver? create_driver (string _path) {
+ string path = realpath (_path);
- public bool load_driver (string path) {
- void* function;
+ ModuleData? data = drivers.get (path);
+ if (data == null) {
+ void* function;
- drivermodule = Module.open (Module.build_path (path, "libdriver"), ModuleFlags.BIND_LAZY | ModuleFlags.BIND_LOCAL);
- if (drivermodule == null) {
- return false;
- }
+ Module? module = Module.open (Module.build_path (path, "libdriver"), ModuleFlags.BIND_LAZY | ModuleFlags.BIND_LOCAL);
+ if (module == null) {
+ return null;
+ }
+
+ module.symbol("register_plugin", out function);
+ if (function == null) {
+ return null;
+ }
+
+ Valadoc.DriverRegisterFunction register_func = (Valadoc.DriverRegisterFunction) function;
+ data = new ModuleData ();
+ drivers.set (path, data);
- drivermodule.symbol("register_plugin", out function);
- if (function == null) {
- return false;
+ data.type = register_func (this);
+ data.module = (owned) module;
}
- Valadoc.DriverRegisterFunction driver_register_function = (Valadoc.DriverRegisterFunction) function;
- drivertype = driver_register_function (this);
- this.driver = (Driver) GLib.Object.new (drivertype);
- return true;
+ return (Driver) GLib.Object.new (data.type);
}
}
diff --git a/src/libvaladoc/taglets/tagletinit.vala b/src/libvaladoc/taglets/tagletinit.vala
index 17a5121..7e88126 100755
--- a/src/libvaladoc/taglets/tagletinit.vala
+++ b/src/libvaladoc/taglets/tagletinit.vala
@@ -23,13 +23,13 @@
namespace Valadoc.Taglets {
public void init (ModuleLoader loader) {
- loader.taglets.set ("see", typeof (Valadoc.Taglets.See));
- loader.taglets.set ("since", typeof (Valadoc.Taglets.Since));
- loader.taglets.set ("link", typeof (Valadoc.Taglets.Link));
- loader.taglets.set ("throws", typeof (Valadoc.Taglets.Throws));
- loader.taglets.set ("return", typeof (Valadoc.Taglets.Return));
- loader.taglets.set ("param", typeof (Valadoc.Taglets.Param));
- loader.taglets.set ("deprecated", typeof (Valadoc.Taglets.Deprecated));
- loader.taglets.set ("inheritDoc", typeof (Valadoc.Taglets.InheritDoc));
+ loader.register_taglet ("see", typeof (Valadoc.Taglets.See));
+ loader.register_taglet ("since", typeof (Valadoc.Taglets.Since));
+ loader.register_taglet ("link", typeof (Valadoc.Taglets.Link));
+ loader.register_taglet ("throws", typeof (Valadoc.Taglets.Throws));
+ loader.register_taglet ("return", typeof (Valadoc.Taglets.Return));
+ loader.register_taglet ("param", typeof (Valadoc.Taglets.Param));
+ loader.register_taglet ("deprecated", typeof (Valadoc.Taglets.Deprecated));
+ loader.register_taglet ("inheritDoc", typeof (Valadoc.Taglets.InheritDoc));
}
}
diff --git a/src/valadoc/valadoc.vala b/src/valadoc/valadoc.vala
index e284e44..380da9e 100755
--- a/src/valadoc/valadoc.vala
+++ b/src/valadoc/valadoc.vala
@@ -268,10 +268,12 @@ public class ValaDoc : Object {
return null;
}
- private ModuleLoader? create_module_loader (ErrorReporter reporter) {
+ private ModuleLoader? create_module_loader (ErrorReporter reporter, out Doclet? doclet, out Driver? driver) {
ModuleLoader modules = new ModuleLoader ();
Taglets.init (modules);
+ doclet = null;
+ driver = null;
// doclet:
string? pluginpath = get_doclet_path (reporter);
@@ -279,8 +281,8 @@ public class ValaDoc : Object {
return null;
}
- bool tmp = modules.load_doclet (pluginpath);
- if (tmp == false) {
+ doclet = modules.create_doclet (pluginpath);
+ if (doclet == null) {
reporter.simple_error ("failed to load doclet");
return null;
}
@@ -292,13 +294,13 @@ public class ValaDoc : Object {
return null;
}
- tmp = modules.load_driver (pluginpath);
- if (tmp == false) {
+ driver = modules.create_driver (pluginpath);
+ if (driver == null) {
reporter.simple_error ("failed to load driver");
return null;
}
- assert (modules.driver != null && modules.doclet != null);
+ assert (driver != null && doclet != null);
return modules;
}
@@ -343,17 +345,20 @@ public class ValaDoc : Object {
// load plugins:
- ModuleLoader? modules = create_module_loader (reporter);
+ Doclet? doclet = null;
+ Driver? driver = null;
+
+ ModuleLoader? modules = create_module_loader (reporter, out doclet, out driver);
if (reporter.errors > 0 || modules == null) {
return quit (reporter);
}
// Create tree:
- Valadoc.Driver driver = modules.driver;
Valadoc.Api.Tree doctree = driver.build (settings, reporter);
-
if (reporter.errors > 0) {
+ driver = null;
+ doclet = null;
return quit (reporter);
}
@@ -389,7 +394,7 @@ public class ValaDoc : Object {
}
}
- modules.doclet.process (settings, doctree, reporter);
+ doclet.process (settings, doctree, reporter);
return quit (reporter);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]