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// =================================================
9VariableFactory::VariableFactory(const string& base)
10    :m_base(base),
11     m_index(0)
12{
13}
14
15Variable*
16VariableFactory::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
26Variable*
27VariableFactory::Get(int index)
28{
29    return m_vars[index];
30}
31
32// =================================================
33string
34gather_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
51string
52append(const char* a, const char* b)
53{
54    string s = a;
55    s += b;
56    return s;
57}
58
59// =================================================
60int
61generate_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