3 // valac VapiParser.vala --pkg libvala-0.24 --pkg posix -o /tmp/treebuilder
7 private class PackageMetaData {
8 public Package package;
9 public Gee.HashMap<Vala.Namespace, Valadoc.api.Namespace> namespaces = new HashMap<Vala.Namespace, Namespace> ();
10 public ArrayList<Vala.SourceFile> files = new ArrayList<Vala.SourceFile> ();
12 public PackageMetaData (Package package) {
13 this.package = package;
16 public Namespace get_namespace (Vala.Namespace vns, SourceFile file) {
17 Namespace? ns = namespaces.get (vns);
22 // find documentation comment if existing:
24 SourceComment? comment = null;
25 if (vns.source_reference != null) {
26 foreach (Vala.Comment c in vns.get_comments()) {
27 if (c.source_reference.file == file.data ||
28 (c.source_reference.file.file_type == Vala.SourceFileType.SOURCE
29 && ((Vala.SourceFile) file.data).file_type == Vala.SourceFileType.SOURCE)
31 Vala.SourceReference pos = c.source_reference;
32 if (c is Vala.GirComment) {
33 comment = new GirSourceComment (c.content,
40 comment = new SourceComment (c.content,
53 // find parent if existing
54 var parent_vns = vns.parent_symbol;
56 if (parent_vns == null) {
57 ns = new Namespace (package, file, vns.name, comment, vns);
58 package.add_child (ns);
60 Namespace parent_ns = get_namespace ((Vala.Namespace) parent_vns, file);
61 ns = new Namespace (parent_ns, file, vns.name, comment, vns);
62 parent_ns.add_child (ns);
65 namespaces.set (vns, ns);
69 public void register_source_file (Vala.SourceFile file) {
73 public bool is_package_for_file (Vala.SourceFile source_file) {
74 if (source_file.file_type == Vala.SourceFileType.SOURCE && !package.is_package) {
78 return files.contains (source_file);
84 public class VapiParser : Vala.CodeVisitor {
85 private ArrayList<PackageMetaData> packages = new ArrayList<PackageMetaData> ();
86 Vala.CodeContext context;
91 private PackageMetaData register_package (Package package) {
92 PackageMetaData meta_data = new PackageMetaData (package);
93 tree.add_package (package);
94 packages.add (meta_data);
99 public void checkPackage(string name)
102 context = new Vala.CodeContext ();
103 Vala.CodeContext.push (context);
105 context.experimental = false;
106 context.experimental_non_null = false;
118 for (int i = 2; i <= ver; i += 2) {
119 context.add_define ("VALA_0_%d".printf (i));
123 //var vapidirs = ((Project.Gtk)this.file.project).vapidirs();
124 // what's the current version of vala???
127 //vapidirs += Path.get_dirname (context.get_vapi_path("glib-2.0")) ;
129 //for(var i =0 ; i < vapidirs.length; i++) {
130 // valac += " --vapidir=" + vapidirs[i];
134 // or context.get_vapi_path("glib-2.0"); // should return path..
135 //context.vapi_directories = vapidirs;
136 context.report.enable_warnings = true;
137 context.metadata_directories = { };
138 context.gir_directories = {};
139 context.thread = true;
142 //this.report = new ValaSourceReport(this.file);
143 //context.report = this.report;
146 context.basedir = "/tmp"; //Posix.realpath (".");
148 context.directory = context.basedir;
151 // add default packages:
152 //if (settings.profile == "gobject-2.0" || settings.profile == "gobject" || settings.profile == null) {
153 context.profile = Vala.Profile.GOBJECT;
155 var ns_ref = new Vala.UsingDirective (new Vala.UnresolvedSymbol (null, "GLib", null));
156 context.root.add_using_directive (ns_ref);
158 // default.. packages..
159 context.add_external_package ("glib-2.0");
160 context.add_external_package ("gobject-2.0");
161 // user defined ones..
162 context.add_package ("Gtk");
164 var vfile = new Vala.SourceFile (context, Vala.SourceFileType.PACKAGE, "/usr/share/vala-0.26/vapi/gtk+-3.0.vapi");
165 context.add_source_file (vfile);
166 Package vdpkg = new Package (pkg, true, null);
167 register_source_file (register_package (vdpkg), vfile);
169 //context.add_external_package ("libvala-0.24");
173 //add_documented_files (context, settings.source_files);
175 Vala.Parser parser = new Vala.Parser ();
176 parser.parse (context);
177 //gir_parser.parse (context);
178 if (context.report.get_errors () > 0) {
179 print("parse got errors");
182 Vala.CodeContext.pop ();
190 if (context.report.get_errors () > 0) {
191 print("check got errors");
193 Vala.CodeContext.pop ();
199 Vala.CodeContext.pop ();
201 print("%s\n", valac);
212 int main (string[] args) {
214 var a = new VapiParser(file);
215 a.create_valac_tree();