1 #include "generate_java.h"
2 #include "Type.h"
3 #include <string.h>
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <string.h>
7
8 // =================================================
VariableFactory(const string & base)9 VariableFactory::VariableFactory(const string& base)
10 :m_base(base),
11 m_index(0)
12 {
13 }
14
15 Variable*
Get(Type * type)16 VariableFactory::Get(Type* type)
17 {
18 char name[100];
19 sprintf(name, "%s%d", m_base.c_str(), m_index);
20 m_index++;
21 Variable* v = new Variable(type, name);
22 m_vars.push_back(v);
23 return v;
24 }
25
26 Variable*
Get(int index)27 VariableFactory::Get(int index)
28 {
29 return m_vars[index];
30 }
31
32 // =================================================
33 string
gather_comments(extra_text_type * extra)34 gather_comments(extra_text_type* extra)
35 {
36 string s;
37 while (extra) {
38 if (extra->which == SHORT_COMMENT) {
39 s += extra->data;
40 }
41 else if (extra->which == LONG_COMMENT) {
42 s += "/*";
43 s += extra->data;
44 s += "*/";
45 }
46 extra = extra->next;
47 }
48 return s;
49 }
50
51 string
append(const char * a,const char * b)52 append(const char* a, const char* b)
53 {
54 string s = a;
55 s += b;
56 return s;
57 }
58
59 // =================================================
60 int
generate_java(const string & filename,const string & originalSrc,interface_type * iface)61 generate_java(const string& filename, const string& originalSrc,
62 interface_type* iface)
63 {
64 Class* cl;
65
66 if (iface->document_item.item_type == INTERFACE_TYPE_BINDER) {
67 cl = generate_binder_interface_class(iface);
68 }
69 else if (iface->document_item.item_type == INTERFACE_TYPE_RPC) {
70 cl = generate_rpc_interface_class(iface);
71 }
72
73 Document* document = new Document;
74 document->comment = "";
75 if (iface->package) document->package = iface->package;
76 document->originalSrc = originalSrc;
77 document->classes.push_back(cl);
78
79 // printf("outputting... filename=%s\n", filename.c_str());
80 FILE* to;
81 if (filename == "-") {
82 to = stdout;
83 } else {
84 /* open file in binary mode to ensure that the tool produces the
85 * same output on all platforms !!
86 */
87 to = fopen(filename.c_str(), "wb");
88 if (to == NULL) {
89 fprintf(stderr, "unable to open %s for write\n", filename.c_str());
90 return 1;
91 }
92 }
93
94 document->Write(to);
95
96 fclose(to);
97 return 0;
98 }
99
100