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