Home | History | Annotate | Download | only in javamicro
      1 // Protocol Buffers - Google's data interchange format
      2 // Copyright 2008 Google Inc.  All rights reserved.
      3 // http://code.google.com/p/protobuf/
      4 //
      5 // Redistribution and use in source and binary forms, with or without
      6 // modification, are permitted provided that the following conditions are
      7 // met:
      8 //
      9 //     * Redistributions of source code must retain the above copyright
     10 // notice, this list of conditions and the following disclaimer.
     11 //     * Redistributions in binary form must reproduce the above
     12 // copyright notice, this list of conditions and the following disclaimer
     13 // in the documentation and/or other materials provided with the
     14 // distribution.
     15 //     * Neither the name of Google Inc. nor the names of its
     16 // contributors may be used to endorse or promote products derived from
     17 // this software without specific prior written permission.
     18 //
     19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30 
     31 // Author: kenton (at) google.com (Kenton Varda)
     32 //  Based on original Protocol Buffers design by
     33 //  Sanjay Ghemawat, Jeff Dean, and others.
     34 
     35 #ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_HELPERS_H__
     36 #define GOOGLE_PROTOBUF_COMPILER_JAVA_HELPERS_H__
     37 
     38 #include <string>
     39 #include <google/protobuf/compiler/javamicro/javamicro_params.h>
     40 #include <google/protobuf/descriptor.pb.h>
     41 #include <google/protobuf/descriptor.h>
     42 
     43 namespace google {
     44 namespace protobuf {
     45 namespace compiler {
     46 namespace javamicro {
     47 
     48 // Commonly-used separator comments.  Thick is a line of '=', thin is a line
     49 // of '-'.
     50 extern const char kThickSeparator[];
     51 extern const char kThinSeparator[];
     52 
     53 // Converts the field's name to camel-case, e.g. "foo_bar_baz" becomes
     54 // "fooBarBaz" or "FooBarBaz", respectively.
     55 string UnderscoresToCamelCase(const FieldDescriptor* field);
     56 string UnderscoresToCapitalizedCamelCase(const FieldDescriptor* field);
     57 
     58 // Similar, but for method names.  (Typically, this merely has the effect
     59 // of lower-casing the first letter of the name.)
     60 string UnderscoresToCamelCase(const MethodDescriptor* method);
     61 
     62 // Strips ".proto" or ".protodevel" from the end of a filename.
     63 string StripProto(const string& filename);
     64 
     65 // Gets the unqualified class name for the file.  Each .proto file becomes a
     66 // single Java class, with all its contents nested in that class.
     67 string FileClassName(const Params& params, const FileDescriptor* file);
     68 
     69 // Returns the file's Java package name.
     70 string FileJavaPackage(const Params& params, const FileDescriptor* file);
     71 
     72 // Returns whether the Java outer class is needed, i.e. whether the option
     73 // java_multiple_files is false, or the proto file contains any file-scope
     74 // enums/extensions.
     75 bool IsOuterClassNeeded(const Params& params, const FileDescriptor* file);
     76 
     77 // Converts the given simple name of a proto entity to its fully-qualified name
     78 // in the Java namespace, given that it is in the given file enclosed in the
     79 // given parent message (or NULL for file-scope entities). Whether the file's
     80 // outer class name should be included in the return value depends on factors
     81 // inferrable from the given arguments, including is_class which indicates
     82 // whether the entity translates to a Java class.
     83 string ToJavaName(const Params& params, const string& name, bool is_class,
     84     const Descriptor* parent, const FileDescriptor* file);
     85 
     86 // These return the fully-qualified class name corresponding to the given
     87 // descriptor.
     88 inline string ClassName(const Params& params, const Descriptor* descriptor) {
     89   return ToJavaName(params, descriptor->name(), true,
     90                     descriptor->containing_type(), descriptor->file());
     91 }
     92 string ClassName(const Params& params, const EnumDescriptor* descriptor);
     93 inline string ClassName(const Params& params,
     94     const ServiceDescriptor* descriptor) {
     95   return ToJavaName(params, descriptor->name(), true, NULL, descriptor->file());
     96 }
     97 inline string ExtensionIdentifierName(const Params& params,
     98     const FieldDescriptor* descriptor) {
     99   return ToJavaName(params, descriptor->name(), false,
    100                     descriptor->extension_scope(), descriptor->file());
    101 }
    102 string ClassName(const Params& params, const FileDescriptor* descriptor);
    103 
    104 // Get the unqualified name that should be used for a field's field
    105 // number constant.
    106 string FieldConstantName(const FieldDescriptor *field);
    107 
    108 enum JavaType {
    109   JAVATYPE_INT,
    110   JAVATYPE_LONG,
    111   JAVATYPE_FLOAT,
    112   JAVATYPE_DOUBLE,
    113   JAVATYPE_BOOLEAN,
    114   JAVATYPE_STRING,
    115   JAVATYPE_BYTES,
    116   JAVATYPE_ENUM,
    117   JAVATYPE_MESSAGE
    118 };
    119 
    120 JavaType GetJavaType(FieldDescriptor::Type field_type);
    121 
    122 inline JavaType GetJavaType(const FieldDescriptor* field) {
    123   return GetJavaType(field->type());
    124 }
    125 
    126 // Get the fully-qualified class name for a boxed primitive type, e.g.
    127 // "java.lang.Integer" for JAVATYPE_INT.  Returns NULL for enum and message
    128 // types.
    129 const char* BoxedPrimitiveTypeName(JavaType type);
    130 
    131 string DefaultValue(const Params& params, const FieldDescriptor* field);
    132 
    133 }  // namespace javamicro
    134 }  // namespace compiler
    135 }  // namespace protobuf
    136 
    137 }  // namespace google
    138 #endif  // GOOGLE_PROTOBUF_COMPILER_JAVA_HELPERS_H__
    139