1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "generate_java.h"
2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "Type.h"
3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <string.h>
4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <stdio.h>
5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <stdlib.h>
6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <string.h>
7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// =================================================
9282e181b58cf72b6ca770dc7ca5f91f135444502Adam LesinskiVariableFactory::VariableFactory(const string& base)
10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    :m_base(base),
11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     m_index(0)
12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{
13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
15282e181b58cf72b6ca770dc7ca5f91f135444502Adam LesinskiVariable*
16282e181b58cf72b6ca770dc7ca5f91f135444502Adam LesinskiVariableFactory::Get(Type* type)
17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{
18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    char name[100];
19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    sprintf(name, "%s%d", m_base.c_str(), m_index);
20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    m_index++;
21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    Variable* v = new Variable(type, name);
22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    m_vars.push_back(v);
23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    return v;
24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
26282e181b58cf72b6ca770dc7ca5f91f135444502Adam LesinskiVariable*
27282e181b58cf72b6ca770dc7ca5f91f135444502Adam LesinskiVariableFactory::Get(int index)
28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{
29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    return m_vars[index];
30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// =================================================
33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistring
34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskigather_comments(extra_text_type* extra)
35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{
36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    string s;
37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    while (extra) {
38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (extra->which == SHORT_COMMENT) {
39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            s += extra->data;
40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        else if (extra->which == LONG_COMMENT) {
42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            s += "/*";
43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            s += extra->data;
44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            s += "*/";
45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        extra = extra->next;
47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    return s;
49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistring
52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiappend(const char* a, const char* b)
53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{
54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    string s = a;
55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    s += b;
56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    return s;
57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// =================================================
60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiint
61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskigenerate_java(const string& filename, const string& originalSrc,
62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                interface_type* iface)
63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{
64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    Class* cl;
65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    if (iface->document_item.item_type == INTERFACE_TYPE_BINDER) {
67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cl = generate_binder_interface_class(iface);
68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    else if (iface->document_item.item_type == INTERFACE_TYPE_RPC) {
70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        cl = generate_rpc_interface_class(iface);
71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    Document* document = new Document;
74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        document->comment = "";
75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (iface->package) document->package = iface->package;
76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        document->originalSrc = originalSrc;
77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        document->classes.push_back(cl);
78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski//    printf("outputting... filename=%s\n", filename.c_str());
80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    FILE* to;
81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    if (filename == "-") {
82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        to = stdout;
83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    } else {
84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski       /* open file in binary mode to ensure that the tool produces the
85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        * same output on all platforms !!
86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        */
87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        to = fopen(filename.c_str(), "wb");
88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (to == NULL) {
89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            fprintf(stderr, "unable to open %s for write\n", filename.c_str());
90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return 1;
91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    document->Write(to);
95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    fclose(to);
97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    return 0;
98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
100