//===-- APINotesWriter.h - API Notes Writer ---------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_APINOTES_WRITER_H #define LLVM_CLANG_APINOTES_WRITER_H #include "clang/APINotes/Types.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/VersionTuple.h" #include "llvm/Support/raw_ostream.h" #include namespace clang { class FileEntry; namespace api_notes { class APINotesWriter { class Implementation; std::unique_ptr Implementation; public: APINotesWriter(llvm::StringRef ModuleName, const FileEntry *SF); ~APINotesWriter(); APINotesWriter(const APINotesWriter &) = delete; APINotesWriter &operator=(const APINotesWriter &) = delete; void writeToStream(llvm::raw_ostream &OS); /// Add information about a specific Objective-C class or protocol or a C++ /// namespace. /// /// \param Name The name of this class/protocol/namespace. /// \param Kind Whether this is a class, a protocol, or a namespace. /// \param Info Information about this class/protocol/namespace. /// /// \returns the ID of the class, protocol, or namespace, which can be used to /// add properties and methods to the class/protocol/namespace. ContextID addObjCContext(std::optional ParentCtxID, llvm::StringRef Name, ContextKind Kind, const ObjCContextInfo &Info, llvm::VersionTuple SwiftVersion); /// Add information about a specific Objective-C property. /// /// \param CtxID The context in which this property resides. /// \param Name The name of this property. /// \param Info Information about this property. void addObjCProperty(ContextID CtxID, llvm::StringRef Name, bool IsInstanceProperty, const ObjCPropertyInfo &Info, llvm::VersionTuple SwiftVersion); /// Add information about a specific Objective-C method. /// /// \param CtxID The context in which this method resides. /// \param Selector The selector that names this method. /// \param IsInstanceMethod Whether this method is an instance method /// (vs. a class method). /// \param Info Information about this method. void addObjCMethod(ContextID CtxID, ObjCSelectorRef Selector, bool IsInstanceMethod, const ObjCMethodInfo &Info, llvm::VersionTuple SwiftVersion); /// Add information about a global variable. /// /// \param Name The name of this global variable. /// \param Info Information about this global variable. void addGlobalVariable(std::optional Ctx, llvm::StringRef Name, const GlobalVariableInfo &Info, llvm::VersionTuple SwiftVersion); /// Add information about a global function. /// /// \param Name The name of this global function. /// \param Info Information about this global function. void addGlobalFunction(std::optional Ctx, llvm::StringRef Name, const GlobalFunctionInfo &Info, llvm::VersionTuple SwiftVersion); /// Add information about an enumerator. /// /// \param Name The name of this enumerator. /// \param Info Information about this enumerator. void addEnumConstant(llvm::StringRef Name, const EnumConstantInfo &Info, llvm::VersionTuple SwiftVersion); /// Add information about a tag (struct/union/enum/C++ class). /// /// \param Name The name of this tag. /// \param Info Information about this tag. void addTag(std::optional Ctx, llvm::StringRef Name, const TagInfo &Info, llvm::VersionTuple SwiftVersion); /// Add information about a typedef. /// /// \param Name The name of this typedef. /// \param Info Information about this typedef. void addTypedef(std::optional Ctx, llvm::StringRef Name, const TypedefInfo &Info, llvm::VersionTuple SwiftVersion); }; } // namespace api_notes } // namespace clang #endif // LLVM_CLANG_APINOTES_WRITER_H