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