143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// Protocol Buffers - Google's data interchange format 243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// Copyright 2008 Google Inc. All rights reserved. 343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// http://code.google.com/p/protobuf/ 443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// 543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// Redistribution and use in source and binary forms, with or without 643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// modification, are permitted provided that the following conditions are 743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// met: 843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// 943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// * Redistributions of source code must retain the above copyright 1043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// notice, this list of conditions and the following disclaimer. 1143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// * Redistributions in binary form must reproduce the above 1243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// copyright notice, this list of conditions and the following disclaimer 1343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// in the documentation and/or other materials provided with the 1443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// distribution. 1543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// * Neither the name of Google Inc. nor the names of its 1643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// contributors may be used to endorse or promote products derived from 1743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// this software without specific prior written permission. 1843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// 1943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 3143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// Author: kenton@google.com (Kenton Varda) 3243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// Based on original Protocol Buffers design by 3343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// Sanjay Ghemawat, Jeff Dean, and others. 3443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 3543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci#ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_MESSAGE_H__ 3643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci#define GOOGLE_PROTOBUF_COMPILER_JAVA_MESSAGE_H__ 3743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 3843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci#include <string> 3943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci#include <google/protobuf/stubs/common.h> 4043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci#include <google/protobuf/compiler/javanano/javanano_params.h> 4143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci#include <google/protobuf/compiler/javanano/javanano_field.h> 4243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 4343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazcinamespace google { 4443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazcinamespace protobuf { 4543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci namespace io { 4643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci class Printer; // printer.h 4743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci } 4843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci} 4943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 5043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazcinamespace protobuf { 5143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazcinamespace compiler { 5243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazcinamespace javanano { 5343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 5443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazciclass MessageGenerator { 5543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci public: 5643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci explicit MessageGenerator(const Descriptor* descriptor, const Params& params); 5743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci ~MessageGenerator(); 5843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 5943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci // All static variables have to be declared at the top-level of the file 6043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci // so that we can control initialization order, which is important for 6143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci // DescriptorProto bootstrapping to work. 6243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci void GenerateStaticVariables(io::Printer* printer); 6343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 6443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci // Output code which initializes the static variables generated by 6543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci // GenerateStaticVariables(). 6643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci void GenerateStaticVariableInitializers(io::Printer* printer); 6743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 6843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci // Generate the class itself. 6943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci void Generate(io::Printer* printer); 7043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 7143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci private: 7243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci void GenerateMessageSerializationMethods(io::Printer* printer); 7343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci void GenerateMergeFromMethods(io::Printer* printer); 7443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci void GenerateParseFromMethods(io::Printer* printer); 7543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci void GenerateSerializeOneField(io::Printer* printer, 7643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci const FieldDescriptor* field); 7743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 7843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci void GenerateClear(io::Printer* printer); 7943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 8043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci const Params& params_; 8143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci const Descriptor* descriptor_; 8243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci FieldGeneratorMap field_generators_; 8343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 8443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageGenerator); 8543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci}; 8643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 8743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci} // namespace javanano 8843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci} // namespace compiler 8943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci} // namespace protobuf 9043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci 9143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci} // namespace google 9243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci#endif // GOOGLE_PROTOBUF_COMPILER_JAVA_MESSAGE_H__ 93