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