100 lines
2.2 KiB
C++
100 lines
2.2 KiB
C++
#include "generate_java.h"
|
|
#include "Type.h"
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
// =================================================
|
|
VariableFactory::VariableFactory(const string& base)
|
|
:m_base(base),
|
|
m_index(0)
|
|
{
|
|
}
|
|
|
|
Variable*
|
|
VariableFactory::Get(Type* type)
|
|
{
|
|
char name[100];
|
|
sprintf(name, "%s%d", m_base.c_str(), m_index);
|
|
m_index++;
|
|
Variable* v = new Variable(type, name);
|
|
m_vars.push_back(v);
|
|
return v;
|
|
}
|
|
|
|
Variable*
|
|
VariableFactory::Get(int index)
|
|
{
|
|
return m_vars[index];
|
|
}
|
|
|
|
// =================================================
|
|
string
|
|
gather_comments(extra_text_type* extra)
|
|
{
|
|
string s;
|
|
while (extra) {
|
|
if (extra->which == SHORT_COMMENT) {
|
|
s += extra->data;
|
|
}
|
|
else if (extra->which == LONG_COMMENT) {
|
|
s += "/*";
|
|
s += extra->data;
|
|
s += "*/";
|
|
}
|
|
extra = extra->next;
|
|
}
|
|
return s;
|
|
}
|
|
|
|
string
|
|
append(const char* a, const char* b)
|
|
{
|
|
string s = a;
|
|
s += b;
|
|
return s;
|
|
}
|
|
|
|
// =================================================
|
|
int
|
|
generate_java(const string& filename, const string& originalSrc,
|
|
interface_type* iface)
|
|
{
|
|
Class* cl;
|
|
|
|
if (iface->document_item.item_type == INTERFACE_TYPE_BINDER) {
|
|
cl = generate_binder_interface_class(iface);
|
|
}
|
|
else if (iface->document_item.item_type == INTERFACE_TYPE_RPC) {
|
|
cl = generate_rpc_interface_class(iface);
|
|
}
|
|
|
|
Document* document = new Document;
|
|
document->comment = "";
|
|
if (iface->package) document->package = iface->package;
|
|
document->originalSrc = originalSrc;
|
|
document->classes.push_back(cl);
|
|
|
|
// printf("outputting... filename=%s\n", filename.c_str());
|
|
FILE* to;
|
|
if (filename == "-") {
|
|
to = stdout;
|
|
} else {
|
|
/* open file in binary mode to ensure that the tool produces the
|
|
* same output on all platforms !!
|
|
*/
|
|
to = fopen(filename.c_str(), "wb");
|
|
if (to == NULL) {
|
|
fprintf(stderr, "unable to open %s for write\n", filename.c_str());
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
document->Write(to);
|
|
|
|
fclose(to);
|
|
return 0;
|
|
}
|
|
|