1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Protocol Buffers - Google's data interchange format 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Copyright 2008 Google Inc. All rights reserved. 3afb4b72037e3f13db208590fc782c4bc8e27f862Jeff Davidson// https://developers.google.com/protocol-buffers/ 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Redistribution and use in source and binary forms, with or without 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// modification, are permitted provided that the following conditions are 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// met: 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions of source code must retain the above copyright 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// notice, this list of conditions and the following disclaimer. 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions in binary form must reproduce the above 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// copyright notice, this list of conditions and the following disclaimer 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// in the documentation and/or other materials provided with the 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// distribution. 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Neither the name of Google Inc. nor the names of its 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// contributors may be used to endorse or promote products derived from 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// this software without specific prior written permission. 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Author: kenton@google.com (Kenton Varda) 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Based on original Protocol Buffers design by 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Sanjay Ghemawat, Jeff Dean, and others. 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_FILE_H__ 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#define GOOGLE_PROTOBUF_COMPILER_JAVA_FILE_H__ 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 38a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <memory> 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <string> 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <vector> 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/stubs/common.h> 42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace google { 44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace protobuf { 45a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson class FileDescriptor; // descriptor.h 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville namespace io { 47a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson class Printer; // printer.h 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville namespace compiler { 50a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson class GeneratorContext; // code_generator.h 51a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson namespace java { 52a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson class Context; // context.h 53a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson class MessageGenerator; // message.h 54a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson class GeneratorFactory; // generator_factory.h 55a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson class ExtensionGenerator; // extension.h 56a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson class ClassNameResolver; // name_resolver.h 57a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace protobuf { 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace compiler { 63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace java { 64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass FileGenerator { 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public: 67a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson FileGenerator(const FileDescriptor* file, bool immutable_api = true); 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ~FileGenerator(); 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Checks for problems that would otherwise lead to cryptic compile errors. 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Returns true if there are no problems, or writes an error description to 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // the given string and returns false otherwise. 73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville bool Validate(string* error); 74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void Generate(io::Printer* printer); 76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // If we aren't putting everything into one file, this will write all the 78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // files other than the outer file (i.e. one for each message, enum, and 79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // service type). 80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void GenerateSiblings(const string& package_dir, 81a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GeneratorContext* generator_context, 82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville vector<string>* file_list); 83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 84fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const string& java_package() { return java_package_; } 85fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const string& classname() { return classname_; } 86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 87a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville private: 89a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson void GenerateDescriptorInitializationCodeForImmutable(io::Printer* printer); 90a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson void GenerateDescriptorInitializationCodeForMutable(io::Printer* printer); 91a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 92a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson bool ShouldIncludeDependency(const FileDescriptor* descriptor, 93a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson bool immutable_api_); 94d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const FileDescriptor* file_; 96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville string java_package_; 97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville string classname_; 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 99a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson scoped_array<scoped_ptr<MessageGenerator> > message_generators_; 100a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson scoped_array<scoped_ptr<ExtensionGenerator> > extension_generators_; 101a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson scoped_ptr<GeneratorFactory> generator_factory_; 102a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson scoped_ptr<Context> context_; 103a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ClassNameResolver* name_resolver_; 104a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson bool immutable_api_; 105a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileGenerator); 108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}; 109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace java 111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace compiler 112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace protobuf 113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace google 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif // GOOGLE_PROTOBUF_COMPILER_JAVA_FILE_H__ 116