#include "generate_java.h" #include "Type.h" #include #include #include #include // ================================================= 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, int flags) { Class* cl; if (iface->document_item.item_type == INTERFACE_TYPE_BINDER) { cl = generate_binder_interface_class(iface, flags); } 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; }