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: bduff@google.com (Brian Duff) 32 33#include <google/protobuf/compiler/javanano/javanano_extension.h> 34#include <google/protobuf/compiler/javanano/javanano_helpers.h> 35#include <google/protobuf/io/printer.h> 36#include <google/protobuf/stubs/strutil.h> 37#include <google/protobuf/wire_format.h> 38 39namespace google { 40namespace protobuf { 41namespace compiler { 42namespace javanano { 43 44using internal::WireFormat; 45 46void SetVariables(const FieldDescriptor* descriptor, const Params params, 47 map<string, string>* variables) { 48 (*variables)["name"] = 49 RenameJavaKeywords(UnderscoresToCamelCase(descriptor)); 50 (*variables)["number"] = SimpleItoa(descriptor->number()); 51 (*variables)["extends"] = ClassName(params, descriptor->containing_type()); 52 53 string type; 54 JavaType java_type = GetJavaType(descriptor->type()); 55 switch (java_type) { 56 case JAVATYPE_ENUM: 57 type = "java.lang.Integer"; 58 break; 59 case JAVATYPE_MESSAGE: 60 type = ClassName(params, descriptor->message_type()); 61 break; 62 default: 63 type = BoxedPrimitiveTypeName(java_type); 64 break; 65 } 66 (*variables)["type"] = type; 67} 68 69ExtensionGenerator:: 70ExtensionGenerator(const FieldDescriptor* descriptor, const Params& params) 71 : params_(params), descriptor_(descriptor) { 72 SetVariables(descriptor, params, &variables_); 73} 74 75ExtensionGenerator::~ExtensionGenerator() {} 76 77void ExtensionGenerator::Generate(io::Printer* printer) const { 78 if (descriptor_->is_repeated()) { 79 printer->Print(variables_, 80 "// Extends $extends$\n" 81 "public static final com.google.protobuf.nano.Extension<java.util.List<$type$>> $name$ = \n" 82 " com.google.protobuf.nano.Extension.createRepeated($number$,\n" 83 " new com.google.protobuf.nano.Extension.TypeLiteral<java.util.List<$type$>>(){});\n"); 84 } else { 85 printer->Print(variables_, 86 "// Extends $extends$\n" 87 "public static final com.google.protobuf.nano.Extension<$type$> $name$ =\n" 88 " com.google.protobuf.nano.Extension.create($number$,\n" 89 " new com.google.protobuf.nano.Extension.TypeLiteral<$type$>(){});\n"); 90 } 91} 92 93} // namespace javanano 94} // namespace compiler 95} // namespace protobuf 96} // namespace google 97 98