1b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Protocol Buffers - Google's data interchange format
2b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Copyright 2008 Google Inc.  All rights reserved.
3b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// https://developers.google.com/protocol-buffers/
4b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//
5b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Redistribution and use in source and binary forms, with or without
6b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// modification, are permitted provided that the following conditions are
7b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// met:
8b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//
9b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//     * Redistributions of source code must retain the above copyright
10b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// notice, this list of conditions and the following disclaimer.
11b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//     * Redistributions in binary form must reproduce the above
12b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// copyright notice, this list of conditions and the following disclaimer
13b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// in the documentation and/or other materials provided with the
14b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// distribution.
15b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//     * Neither the name of Google Inc. nor the names of its
16b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// contributors may be used to endorse or promote products derived from
17b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// this software without specific prior written permission.
18b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//
19b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
31b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Author: dweis@google.com (Daniel Weis)
32b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//  Based on original Protocol Buffers design by
33b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//  Sanjay Ghemawat, Jeff Dean, and others.
34b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
35b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_MESSAGE_LITE_H__
36b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#define GOOGLE_PROTOBUF_COMPILER_JAVA_MESSAGE_LITE_H__
37b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
38b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <string>
39b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <map>
40b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/compiler/java/java_field.h>
41b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/compiler/java/java_message.h>
42b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
43b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace google {
44b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace protobuf {
45b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace compiler {
46b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace java {
47b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
48b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerclass ImmutableMessageLiteGenerator : public MessageGenerator {
49b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer public:
50b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  explicit ImmutableMessageLiteGenerator(const Descriptor* descriptor,
51b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer                                     Context* context);
52b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  virtual ~ImmutableMessageLiteGenerator();
53b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
54b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  virtual void Generate(io::Printer* printer);
55b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  virtual void GenerateInterface(io::Printer* printer);
56b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  virtual void GenerateExtensionRegistrationCode(io::Printer* printer);
57b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  virtual void GenerateStaticVariables(
58b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      io::Printer* printer, int* bytecode_estimate);
59b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  virtual int GenerateStaticVariableInitializers(io::Printer* printer);
60b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
61b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer private:
62b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
63b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateMessageSerializationMethods(io::Printer* printer);
64b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateParseFromMethods(io::Printer* printer);
65b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateSerializeOneField(io::Printer* printer,
66b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer                                 const FieldDescriptor* field);
67b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateSerializeOneExtensionRange(
68b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      io::Printer* printer, const Descriptor::ExtensionRange* range);
69b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
70b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateBuilder(io::Printer* printer);
71b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateDynamicMethodIsInitialized(io::Printer* printer);
72b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateDynamicMethodMakeImmutable(io::Printer* printer);
73b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateDynamicMethodVisit(io::Printer* printer);
74b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateDynamicMethodMergeFromStream(io::Printer* printer);
75b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateDynamicMethodNewBuilder(io::Printer* printer);
76b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateInitializers(io::Printer* printer);
77b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateEqualsAndHashCode(io::Printer* printer);
78b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateParser(io::Printer* printer);
79b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  void GenerateConstructor(io::Printer* printer);
80b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
81b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  Context* context_;
82b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  ClassNameResolver* name_resolver_;
83b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  FieldGeneratorMap<ImmutableFieldLiteGenerator> field_generators_;
84b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
85b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableMessageLiteGenerator);
86b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer};
87b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
88b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}  // namespace java
89b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}  // namespace compiler
90b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}  // namespace protobuf
91b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
92b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}  // namespace google
93b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#endif  // GOOGLE_PROTOBUF_COMPILER_JAVA_MESSAGE_LITE_H__
94