diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2013-01-24 21:16:42 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2013-01-24 21:16:42 +0100 |
commit | ac82ebd7518aab2ac905f5e1a2bedb9a43b830f6 (patch) | |
tree | 2d92f2ce21856a934924d637343b98f3a972d97b /tools/wixl | |
parent | ce033c5a8d520423f70140f0253b16bbf26bb827 (diff) | |
download | msitools-ac82ebd7518aab2ac905f5e1a2bedb9a43b830f6.tar.gz msitools-ac82ebd7518aab2ac905f5e1a2bedb9a43b830f6.tar.xz msitools-ac82ebd7518aab2ac905f5e1a2bedb9a43b830f6.zip |
wixl: introduce WixResolver
Diffstat (limited to 'tools/wixl')
-rw-r--r-- | tools/wixl/builder.vala | 22 | ||||
-rw-r--r-- | tools/wixl/wix.vala | 24 |
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, |