ast_cpp.h revision f944e79bdaf92fffe9ea78314d3636e7e4de8c51
1f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley/* 2f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley * Copyright (C) 2015, The Android Open Source Project 3f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley * 4f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley * Licensed under the Apache License, Version 2.0 (the "License"); 5f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley * you may not use this file except in compliance with the License. 6f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley * You may obtain a copy of the License at 7f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley * 8f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley * http://www.apache.org/licenses/LICENSE-2.0 9f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley * 10f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley * Unless required by applicable law or agreed to in writing, software 11f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley * distributed under the License is distributed on an "AS IS" BASIS, 12f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley * See the License for the specific language governing permissions and 14f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley * limitations under the License. 15f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley */ 16f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley 17f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley#ifndef AIDL_AST_CPP_H_ 18f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley#define AIDL_AST_CPP_H_ 19f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley 2060a4916eea290a9a62e1f867d1bd9813df5f37fcCasey Dahlin#include <memory> 21f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley#include <string> 22f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley#include <vector> 23f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley 24f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley#include <base/macros.h> 25f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley 26f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wileynamespace android { 27f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wileynamespace aidl { 28f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wileyclass CodeWriter; 29f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley} // namespace aidl 30f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley} // namespace android 31f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley 32f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileynamespace android { 33f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileynamespace aidl { 34f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileynamespace cpp { 35f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley 36f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileyclass AstNode { 37f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley public: 38f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley AstNode() = default; 39f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley virtual ~AstNode() = default; 40b7d0f7f4bb08171e025659d17cd3bb57b35b739aCasey Dahlin 4134b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin virtual void Write(CodeWriter* to) const = 0; 42f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley 43f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley private: 44f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley DISALLOW_COPY_AND_ASSIGN(AstNode); 45f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley}; // class AstNode 46f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley 47f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileyclass Declaration : public AstNode { 4834b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin public: 49f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley Declaration() = default; 50f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley virtual ~Declaration() = default; 5134b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin 5234b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin private: 53f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley DISALLOW_COPY_AND_ASSIGN(Declaration); 54f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley}; // class Declaration 5534b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin 56f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileyclass ClassDecl : public Declaration { 5760a4916eea290a9a62e1f867d1bd9813df5f37fcCasey Dahlin public: 58f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley ClassDecl(const std::string& name, 59f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley const std::string& parent, 60f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley std::vector<std::unique_ptr<Declaration>> public_members, 61f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley std::vector<std::unique_ptr<Declaration>> private_members); 62f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley virtual ~ClassDecl() = default; 6360a4916eea290a9a62e1f867d1bd9813df5f37fcCasey Dahlin 6460a4916eea290a9a62e1f867d1bd9813df5f37fcCasey Dahlin void Write(CodeWriter* to) const override; 6560a4916eea290a9a62e1f867d1bd9813df5f37fcCasey Dahlin 6660a4916eea290a9a62e1f867d1bd9813df5f37fcCasey Dahlin private: 6760a4916eea290a9a62e1f867d1bd9813df5f37fcCasey Dahlin std::string name_; 6860a4916eea290a9a62e1f867d1bd9813df5f37fcCasey Dahlin std::string parent_; 69f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley std::vector<std::unique_ptr<Declaration>> public_members_; 70f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley std::vector<std::unique_ptr<Declaration>> private_members_; 7160a4916eea290a9a62e1f867d1bd9813df5f37fcCasey Dahlin 72f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley DISALLOW_COPY_AND_ASSIGN(ClassDecl); 73f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley}; // class ClassDecl 7460a4916eea290a9a62e1f867d1bd9813df5f37fcCasey Dahlin 75f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileyclass ConstructorDecl : public Declaration { 76a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin public: 77f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley ConstructorDecl(const std::string& name, 78f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley std::vector<std::string> arguments, 79f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley bool is_const = false, 80f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley bool is_virtual = false); 81a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 82f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley virtual ~ConstructorDecl() = default; 83a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 84a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin void Write(CodeWriter* to) const override; 85a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 86a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin private: 87a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin const std::string name_; 88a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin std::vector<std::string> arguments_; 89a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin bool is_const_; 90a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin bool is_virtual_; 91a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 92f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley DISALLOW_COPY_AND_ASSIGN(ConstructorDecl); 93a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}; 94a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 95f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileyclass MethodDecl : public Declaration { 9688924d60d8758c87ad48e6d227839eb354cf369eCasey Dahlin public: 97f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley MethodDecl(const std::string& return_type, 98f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley const std::string& name, 99f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley std::vector<std::string> arguments, 100f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley bool is_const = false, 101f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley bool is_virtual = false); 102f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley virtual ~MethodDecl() = default; 10388924d60d8758c87ad48e6d227839eb354cf369eCasey Dahlin 10488924d60d8758c87ad48e6d227839eb354cf369eCasey Dahlin void Write(CodeWriter* to) const override; 10588924d60d8758c87ad48e6d227839eb354cf369eCasey Dahlin 10688924d60d8758c87ad48e6d227839eb354cf369eCasey Dahlin private: 10788924d60d8758c87ad48e6d227839eb354cf369eCasey Dahlin const std::string return_type_; 10888924d60d8758c87ad48e6d227839eb354cf369eCasey Dahlin const std::string name_; 10988924d60d8758c87ad48e6d227839eb354cf369eCasey Dahlin std::vector<std::string> arguments_; 11088924d60d8758c87ad48e6d227839eb354cf369eCasey Dahlin bool is_const_; 11188924d60d8758c87ad48e6d227839eb354cf369eCasey Dahlin bool is_virtual_; 11288924d60d8758c87ad48e6d227839eb354cf369eCasey Dahlin 113f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley DISALLOW_COPY_AND_ASSIGN(MethodDecl); 11488924d60d8758c87ad48e6d227839eb354cf369eCasey Dahlin}; 11588924d60d8758c87ad48e6d227839eb354cf369eCasey Dahlin 116f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileyclass CppNamespace : public Declaration { 11734b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin public: 11834b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin CppNamespace(const std::string& name, 119f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley std::vector<std::unique_ptr<Declaration>> declarations); 120b7d0f7f4bb08171e025659d17cd3bb57b35b739aCasey Dahlin virtual ~CppNamespace() = default; 12134b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin 12234b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin void Write(CodeWriter* to) const override; 12334b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin 12434b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin private: 125f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley std::vector<std::unique_ptr<Declaration>> declarations_; 12634b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin std::string name_; 12734b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin 12834b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin DISALLOW_COPY_AND_ASSIGN(CppNamespace); 12934b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin}; // class CppNamespace 130f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley 131f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileyclass Document : public AstNode { 132f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley public: 133f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley Document(const std::vector<std::string>& include_list, 134f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley std::unique_ptr<CppNamespace> a_namespace); 13534b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin 13634b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin void Write(CodeWriter* to) const override; 137f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley 138f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley private: 139f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley std::vector<std::string> include_list_; 14034b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin std::unique_ptr<CppNamespace> namespace_; 141f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley 142f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley DISALLOW_COPY_AND_ASSIGN(Document); 143f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley}; // class Document 144f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley 145f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileyclass CppHeader final : public Document { 14634b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin public: 14734b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin CppHeader(const std::string& include_guard, 14834b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin const std::vector<std::string>& include_list, 149b7d0f7f4bb08171e025659d17cd3bb57b35b739aCasey Dahlin std::unique_ptr<CppNamespace> a_namespace); 15034b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin void Write(CodeWriter* to) const override; 15134b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin 15234b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin private: 15334b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin const std::string include_guard_; 15434b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin 15534b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin DISALLOW_COPY_AND_ASSIGN(CppHeader); 15634b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin}; // class CppHeader 15734b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin 158f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileyclass CppSource final : public Document { 15934b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin public: 16034b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin CppSource(const std::vector<std::string>& include_list, 161b7d0f7f4bb08171e025659d17cd3bb57b35b739aCasey Dahlin std::unique_ptr<CppNamespace> a_namespace); 16234b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin 16334b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin private: 16434b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin DISALLOW_COPY_AND_ASSIGN(CppSource); 16534b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin}; // class CppSource 16634b8610486ce41e1a611a2e1ff7f3aedcc49c5f5Casey Dahlin 167f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley} // namespace cpp 168f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley} // namespace aidl 169f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley} // namespace android 170f600a555ef6f86afea7d55fc735f0c7b5f7cf6a5Christopher Wiley 171f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley#endif // AIDL_AST_CPP_H_ 172