src/Palete/VapiParser.vala
[app.Builder.js] / src / Palete / VapiParser.vala
1
2
3 // valac VapiParser.vala --pkg libvala-0.24 --pkg posix -o /tmp/treebuilder
4
5 namespace Palete {
6          
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> ();
11
12                 public PackageMetaData (Package package) {
13                         this.package = package;
14                 }
15
16                 public Namespace get_namespace (Vala.Namespace vns, SourceFile file) {
17                         Namespace? ns = namespaces.get (vns);
18                         if (ns != null) {
19                                 return ns;
20                         }
21
22                         // find documentation comment if existing:
23                         /*
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)
30                                         ) {
31                                                 Vala.SourceReference pos = c.source_reference;
32                                                 if (c is Vala.GirComment) {
33                                                         comment = new GirSourceComment (c.content,
34                                                                                                                         file,
35                                                                                                                         pos.begin.line,
36                                                                                                                         pos.begin.column,
37                                                                                                                         pos.end.line,
38                                                                                                                         pos.end.column);
39                                                 } else {
40                                                         comment = new SourceComment (c.content,
41                                                                                                                  file,
42                                                                                                                  pos.begin.line,
43                                                                                                                  pos.begin.column,
44                                                                                                                  pos.end.line,
45                                                                                                                  pos.end.column);
46                                                 }
47                                                 break;
48                                         }
49                                 }
50                         }
51                         * */
52
53                         // find parent if existing
54                         var parent_vns = vns.parent_symbol;
55
56                         if (parent_vns == null) {
57                                 ns = new Namespace (package, file, vns.name, comment, vns);
58                                 package.add_child (ns);
59                         } else {
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);
63                         }
64
65                         namespaces.set (vns, ns);
66                         return ns;
67                 }
68
69                 public void register_source_file (Vala.SourceFile file) {
70                         files.add (file);
71                 }
72
73                 public bool is_package_for_file (Vala.SourceFile source_file) {
74                         if (source_file.file_type == Vala.SourceFileType.SOURCE && !package.is_package) {
75                                 return true;
76                         }
77
78                         return files.contains (source_file);
79                 }
80         }
81
82          
83
84         public class VapiParser : Vala.CodeVisitor {
85                 private ArrayList<PackageMetaData> packages = new ArrayList<PackageMetaData> ();
86                 Vala.CodeContext context;
87                 public VapiParser() {
88                         base();
89                         
90                 }
91                 private PackageMetaData register_package (Package package) {
92                         PackageMetaData meta_data = new PackageMetaData (package);
93                         tree.add_package (package);
94                         packages.add (meta_data);
95                         return meta_data;
96                 }
97
98                 
99                 public void checkPackage(string name)
100                 {
101                         // init context:
102                         context = new Vala.CodeContext ();
103                         Vala.CodeContext.push (context);
104                 
105                         context.experimental = false;
106                         context.experimental_non_null = false;
107                         
108 #if VALA_0_28
109                         var ver=28;
110 #elif VALA_0_26 
111                         var ver=26;
112 #elif VALA_0_24
113                         var ver=24;
114 #elif VALA_0_22 
115                         var ver=22;
116 #endif
117                         
118                         for (int i = 2; i <= ver; i += 2) {
119                                 context.add_define ("VALA_0_%d".printf (i));
120                         }
121                         
122                          
123                         //var vapidirs = ((Project.Gtk)this.file.project).vapidirs();
124                         // what's the current version of vala???
125                         
126                         
127                         //vapidirs +=  Path.get_dirname (context.get_vapi_path("glib-2.0")) ;
128                         
129                         //for(var i =0 ; i < vapidirs.length; i++) {
130                         //      valac += " --vapidir=" + vapidirs[i];
131                         //}
132                                 
133                         
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;
140                         
141                         
142                         //this.report = new ValaSourceReport(this.file);
143                         //context.report = this.report;
144                         
145                         
146                         context.basedir = "/tmp"; //Posix.realpath (".");
147                 
148                         context.directory = context.basedir;
149                 
150
151                         // add default packages:
152                         //if (settings.profile == "gobject-2.0" || settings.profile == "gobject" || settings.profile == null) {
153                         context.profile = Vala.Profile.GOBJECT;
154                          
155                         var ns_ref = new Vala.UsingDirective (new Vala.UnresolvedSymbol (null, "GLib", null));
156                         context.root.add_using_directive (ns_ref);
157  
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");
163                   
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);
168                         
169                         //context.add_external_package ("libvala-0.24");
170                         
171                          
172                 
173                         //add_documented_files (context, settings.source_files);
174                 
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");
180                                  
181                                 
182                                 Vala.CodeContext.pop ();
183                                 return ;
184                         }
185
186
187                         
188                         // check context:
189                         context.check ();
190                         if (context.report.get_errors () > 0) {
191                                 print("check got errors");
192                                  
193                                 Vala.CodeContext.pop ();
194                                  
195                                 return;
196                                 
197                         }
198                          
199                         Vala.CodeContext.pop ();
200                          
201                         print("%s\n", valac);
202                         print("ALL OK?\n");
203                  
204                 }
205         //
206                 // startpoint:
207                 //
208          
209         }
210 }
211  
212 int main (string[] args) {
213
214         var a = new VapiParser(file);
215         a.create_valac_tree();
216         return 0;
217 }
218 */
219
220