summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2013-01-24 21:16:42 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2013-01-24 21:16:42 +0100
commitac82ebd7518aab2ac905f5e1a2bedb9a43b830f6 (patch)
tree2d92f2ce21856a934924d637343b98f3a972d97b /tools
parentce033c5a8d520423f70140f0253b16bbf26bb827 (diff)
downloadmsitools-ac82ebd7518aab2ac905f5e1a2bedb9a43b830f6.tar.gz
msitools-ac82ebd7518aab2ac905f5e1a2bedb9a43b830f6.tar.xz
msitools-ac82ebd7518aab2ac905f5e1a2bedb9a43b830f6.zip
wixl: introduce WixResolver
Diffstat (limited to 'tools')
-rw-r--r--tools/wixl/builder.vala22
-rw-r--r--tools/wixl/wix.vala24
2 files changed, 25 insertions, 21 deletions
diff --git a/tools/wixl/builder.vala b/tools/wixl/builder.vala
index 55f16f6..bb5510b 100644
--- a/tools/wixl/builder.vala
+++ b/tools/wixl/builder.vala
@@ -1,6 +1,6 @@
namespace Wixl {
- class WixBuilder: WixNodeVisitor {
+ class WixBuilder: WixNodeVisitor, WixResolver {
public WixBuilder (string[] includedirs) {
add_path (".");
@@ -324,26 +324,6 @@ namespace Wixl {
SHARED,
}
- G? resolve<G> (WixElement element) throws GLib.Error {
- G? resolved = null;
-
- if (element.get_type () == typeof (G))
- resolved = element;
- else if (element is WixElementRef) {
- var ref = element as WixElementRef<G>;
- if (ref.ref_type != typeof (G))
- resolved = null;
- else if (ref.resolved == null)
- ref.resolved = find_element<G> (element.Id);
- resolved = ref.resolved;
- }
-
- if (resolved == null)
- throw new Wixl.Error.FAILED ("couldn't resolve %s", element.Id);
-
- return resolved;
- }
-
public override void visit_component (WixComponent comp) throws GLib.Error {
var attr = 0;
diff --git a/tools/wixl/wix.vala b/tools/wixl/wix.vala
index beacd2f..205721b 100644
--- a/tools/wixl/wix.vala
+++ b/tools/wixl/wix.vala
@@ -1,5 +1,29 @@
namespace Wixl {
+ public interface WixResolver {
+ public abstract G? find_element<G> (string Id);
+
+ public G? resolve<G> (WixElement element) throws GLib.Error {
+ G? resolved = null;
+
+ if (element.get_type ().is_a (typeof (G)))
+ resolved = element;
+ else if (element is WixElementRef) {
+ var ref = element as WixElementRef<G>;
+ if (!ref.ref_type.is_a (typeof (G)))
+ resolved = null;
+ else if (ref.resolved == null)
+ ref.resolved = find_element<G> (element.Id);
+ resolved = ref.resolved;
+ }
+
+ if (resolved == null)
+ throw new Wixl.Error.FAILED ("couldn't resolve %s", element.Id);
+
+ return resolved;
+ }
+ }
+
public enum VisitState {
ENTER,
INFIX,