154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project#include "generate_java.h" 254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project#include "Type.h" 30aa7fe6876d533610b4b993035030b946cc32e4cAlexey Zaytsev#include <string.h> 454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project#include <stdio.h> 5b798689749c64baba81f02e10cf2157c747d6b46The Android Open Source Project#include <stdlib.h> 6b798689749c64baba81f02e10cf2157c747d6b46The Android Open Source Project#include <string.h> 754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project// ================================================= 954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariableFactory::VariableFactory(const string& base) 1054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project :m_base(base), 1154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project m_index(0) 1254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{ 1354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project} 1454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 1554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariable* 1654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariableFactory::Get(Type* type) 1754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{ 1854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project char name[100]; 1954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project sprintf(name, "%s%d", m_base.c_str(), m_index); 2054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project m_index++; 2154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Variable* v = new Variable(type, name); 2254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project m_vars.push_back(v); 2354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project return v; 2454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project} 2554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 2654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariable* 2754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariableFactory::Get(int index) 2854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{ 2954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project return m_vars[index]; 3054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project} 3154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 3254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project// ================================================= 33fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratostring 3454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectgather_comments(extra_text_type* extra) 3554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{ 3654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project string s; 3754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project while (extra) { 3854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (extra->which == SHORT_COMMENT) { 3954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project s += extra->data; 4054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 4154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project else if (extra->which == LONG_COMMENT) { 4254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project s += "/*"; 4354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project s += extra->data; 4454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project s += "*/"; 4554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 4654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project extra = extra->next; 4754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 4854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project return s; 4954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project} 5054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 51fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratostring 5254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectappend(const char* a, const char* b) 5354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{ 5454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project string s = a; 5554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project s += b; 5654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project return s; 5754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project} 5854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 59fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato// ================================================= 60fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratoint 61fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratogenerate_java(const string& filename, const string& originalSrc, 62fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato interface_type* iface) 6354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{ 64fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato Class* cl; 6554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 66fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato if (iface->document_item.item_type == INTERFACE_TYPE_BINDER) { 67fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato cl = generate_binder_interface_class(iface); 6854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 69fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato else if (iface->document_item.item_type == INTERFACE_TYPE_RPC) { 70fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato cl = generate_rpc_interface_class(iface); 7154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 7254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 7354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Document* document = new Document; 7454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project document->comment = ""; 7554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (iface->package) document->package = iface->package; 7654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project document->originalSrc = originalSrc; 77fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato document->classes.push_back(cl); 7854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 7954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project// printf("outputting... filename=%s\n", filename.c_str()); 8054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project FILE* to; 8154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (filename == "-") { 8254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project to = stdout; 8354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } else { 8454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project /* open file in binary mode to ensure that the tool produces the 8554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * same output on all platforms !! 8654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */ 8754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project to = fopen(filename.c_str(), "wb"); 8854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (to == NULL) { 8954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project fprintf(stderr, "unable to open %s for write\n", filename.c_str()); 9054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project return 1; 9154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 9254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 9354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 9454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project document->Write(to); 9554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 9654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project fclose(to); 9754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project return 0; 9854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project} 9954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 100