diff --git a/clang/include/clang/ExtractAPI/API.h b/clang/include/clang/ExtractAPI/API.h --- a/clang/include/clang/ExtractAPI/API.h +++ b/clang/include/clang/ExtractAPI/API.h @@ -36,7 +36,57 @@ namespace clang { namespace extractapi { -/// DocComment is a vector of RawComment::CommentLine. +/// Represents location of an APIRecord in source +/// +/// Slightly cut down version of PresumedLoc to suit the needs of +/// ExtractAPI. +class RecordLocation { + const char *Filename = nullptr; + unsigned Line, Col; + +public: + RecordLocation(const char *Filename, const unsigned Line, const unsigned Col) + : Filename(Filename), Line(Line), Col(Col) {} + RecordLocation(const PresumedLoc &Location) + : Filename(Location.getFilename()), Line(Location.getLine()), + Col(Location.getColumn()) {} + + bool isValid() const { return Filename != nullptr; } + bool isInvalid() const { return !isValid(); } + + const char *getFilename() const { + assert(isValid()); + return Filename; + } + + unsigned getLine() const { + assert(isValid()); + return Line; + } + + unsigned getColumn() const { + assert(isValid()); + return Col; + } +}; + +/// Store a documentation comment line of an APIRecord +/// +/// Similar to RawComment::CommentLine but use RecordLocation instead +/// of PresumedLoc. +struct CommentLine { + + std::string Text; + RecordLocation Begin; + RecordLocation End; + + CommentLine(llvm::StringRef Text, RecordLocation Begin, RecordLocation End) + : Text(Text), Begin(Begin), End(End) {} + CommentLine(const RawComment::CommentLine RComment) + : Text(RComment.Text), Begin(RComment.Begin), End(RComment.End) {} +}; + +/// DocComment is a vector of extractapi::CommentLine. /// /// Each line represents one line of striped documentation comment, /// with source range information. This simplifies calculating the source @@ -49,7 +99,7 @@ /// /// with multiple lines. /// ^~~~~~~~~~~~~~~~~~~~~~~' Second line. /// \endcode -using DocComment = std::vector; +using DocComment = std::vector; // Classes deriving from APIRecord need to have USR be the first constructor // argument. This is so that they are compatible with `addTopLevelRecord` @@ -111,7 +161,7 @@ StringRef USR; StringRef Name; - PresumedLoc Location; + RecordLocation Location; AvailabilitySet Availabilities; LinkageInfo Linkage; @@ -144,7 +194,7 @@ APIRecord() = delete; APIRecord(RecordKind Kind, StringRef USR, StringRef Name, - PresumedLoc Location, AvailabilitySet Availabilities, + RecordLocation Location, AvailabilitySet Availabilities, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader) @@ -161,15 +211,16 @@ struct GlobalFunctionRecord : APIRecord { FunctionSignature Signature; - GlobalFunctionRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + GlobalFunctionRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, bool IsFromSystemHeader) - : APIRecord(RK_GlobalFunction, USR, Name, Loc, std::move(Availabilities), - Linkage, Comment, Declaration, SubHeading, - IsFromSystemHeader), + : APIRecord(RK_GlobalFunction, USR, Name, RecordLocation, + std::move(Availabilities), Linkage, Comment, Declaration, + SubHeading, IsFromSystemHeader), Signature(Signature) {} static bool classof(const APIRecord *Record) { @@ -182,14 +233,15 @@ /// This holds information associated with global functions. struct GlobalVariableRecord : APIRecord { - GlobalVariableRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + GlobalVariableRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader) - : APIRecord(RK_GlobalVariable, USR, Name, Loc, std::move(Availabilities), - Linkage, Comment, Declaration, SubHeading, - IsFromSystemHeader) {} + : APIRecord(RK_GlobalVariable, USR, Name, RecordLocation, + std::move(Availabilities), Linkage, Comment, Declaration, + SubHeading, IsFromSystemHeader) {} static bool classof(const APIRecord *Record) { return Record->getKind() == RK_GlobalVariable; @@ -201,13 +253,14 @@ /// This holds information associated with enum constants. struct EnumConstantRecord : APIRecord { - EnumConstantRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + EnumConstantRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader) - : APIRecord(RK_EnumConstant, USR, Name, Loc, std::move(Availabilities), - LinkageInfo::none(), Comment, Declaration, SubHeading, - IsFromSystemHeader) {} + : APIRecord(RK_EnumConstant, USR, Name, RecordLocation, + std::move(Availabilities), LinkageInfo::none(), Comment, + Declaration, SubHeading, IsFromSystemHeader) {} static bool classof(const APIRecord *Record) { return Record->getKind() == RK_EnumConstant; @@ -221,11 +274,11 @@ struct EnumRecord : APIRecord { SmallVector> Constants; - EnumRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + EnumRecord(StringRef USR, StringRef Name, RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader) - : APIRecord(RK_Enum, USR, Name, Loc, std::move(Availabilities), + : APIRecord(RK_Enum, USR, Name, RecordLocation, std::move(Availabilities), LinkageInfo::none(), Comment, Declaration, SubHeading, IsFromSystemHeader) {} @@ -239,13 +292,14 @@ /// This holds information associated with struct fields. struct StructFieldRecord : APIRecord { - StructFieldRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + StructFieldRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader) - : APIRecord(RK_StructField, USR, Name, Loc, std::move(Availabilities), - LinkageInfo::none(), Comment, Declaration, SubHeading, - IsFromSystemHeader) {} + : APIRecord(RK_StructField, USR, Name, RecordLocation, + std::move(Availabilities), LinkageInfo::none(), Comment, + Declaration, SubHeading, IsFromSystemHeader) {} static bool classof(const APIRecord *Record) { return Record->getKind() == RK_StructField; @@ -259,13 +313,13 @@ struct StructRecord : APIRecord { SmallVector> Fields; - StructRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + StructRecord(StringRef USR, StringRef Name, RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader) - : APIRecord(RK_Struct, USR, Name, Loc, std::move(Availabilities), - LinkageInfo::none(), Comment, Declaration, SubHeading, - IsFromSystemHeader) {} + : APIRecord(RK_Struct, USR, Name, RecordLocation, + std::move(Availabilities), LinkageInfo::none(), Comment, + Declaration, SubHeading, IsFromSystemHeader) {} static bool classof(const APIRecord *Record) { return Record->getKind() == RK_Struct; @@ -278,22 +332,22 @@ struct CXXFieldRecord : APIRecord { AccessControl Access; - CXXFieldRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + CXXFieldRecord(StringRef USR, StringRef Name, RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, AccessControl Access, bool IsFromSystemHeader) - : APIRecord(RK_CXXField, USR, Name, Loc, std::move(Availabilities), - LinkageInfo::none(), Comment, Declaration, SubHeading, - IsFromSystemHeader), + : APIRecord(RK_CXXField, USR, Name, RecordLocation, + std::move(Availabilities), LinkageInfo::none(), Comment, + Declaration, SubHeading, IsFromSystemHeader), Access(Access) {} CXXFieldRecord(RecordKind Kind, StringRef USR, StringRef Name, - PresumedLoc Loc, AvailabilitySet Availabilities, + RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, AccessControl Access, bool IsFromSystemHeader) - : APIRecord(Kind, USR, Name, Loc, std::move(Availabilities), + : APIRecord(Kind, USR, Name, RecordLocation, std::move(Availabilities), LinkageInfo::none(), Comment, Declaration, SubHeading, IsFromSystemHeader), Access(Access) {} @@ -313,11 +367,11 @@ CXXMethodRecord() = delete; CXXMethodRecord(RecordKind Kind, StringRef USR, StringRef Name, - PresumedLoc Loc, AvailabilitySet Availabilities, + RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, AccessControl Access, bool IsFromSystemHeader) - : APIRecord(Kind, USR, Name, Loc, std::move(Availabilities), + : APIRecord(Kind, USR, Name, RecordLocation, std::move(Availabilities), LinkageInfo::none(), Comment, Declaration, SubHeading, IsFromSystemHeader), Signature(Signature), Access(Access) {} @@ -326,14 +380,15 @@ }; struct CXXConstructorRecord : CXXMethodRecord { - CXXConstructorRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + CXXConstructorRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, AccessControl Access, bool IsFromSystemHeader) - : CXXMethodRecord(RK_CXXConstructorMethod, USR, Name, Loc, + : CXXMethodRecord(RK_CXXConstructorMethod, USR, Name, RecordLocation, std::move(Availabilities), Comment, Declaration, SubHeading, Signature, Access, IsFromSystemHeader) {} static bool classof(const APIRecord *Record) { @@ -345,13 +400,14 @@ }; struct CXXDestructorRecord : CXXMethodRecord { - CXXDestructorRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + CXXDestructorRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, AccessControl Access, bool IsFromSystemHeader) - : CXXMethodRecord(RK_CXXDestructorMethod, USR, Name, Loc, + : CXXMethodRecord(RK_CXXDestructorMethod, USR, Name, RecordLocation, std::move(Availabilities), Comment, Declaration, SubHeading, Signature, Access, IsFromSystemHeader) {} static bool classof(const APIRecord *Record) { @@ -363,14 +419,15 @@ }; struct CXXStaticMethodRecord : CXXMethodRecord { - CXXStaticMethodRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + CXXStaticMethodRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, AccessControl Access, bool IsFromSystemHeader) - : CXXMethodRecord(RK_CXXStaticMethod, USR, Name, Loc, + : CXXMethodRecord(RK_CXXStaticMethod, USR, Name, RecordLocation, std::move(Availabilities), Comment, Declaration, SubHeading, Signature, Access, IsFromSystemHeader) {} static bool classof(const APIRecord *Record) { @@ -382,14 +439,15 @@ }; struct CXXInstanceMethodRecord : CXXMethodRecord { - CXXInstanceMethodRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + CXXInstanceMethodRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, AccessControl Access, bool IsFromSystemHeader) - : CXXMethodRecord(RK_CXXInstanceMethod, USR, Name, Loc, + : CXXMethodRecord(RK_CXXInstanceMethod, USR, Name, RecordLocation, std::move(Availabilities), Comment, Declaration, SubHeading, Signature, Access, IsFromSystemHeader) {} @@ -416,13 +474,13 @@ bool IsOptional; ObjCPropertyRecord(RecordKind Kind, StringRef USR, StringRef Name, - PresumedLoc Loc, AvailabilitySet Availabilities, - const DocComment &Comment, + RecordLocation RecordLocation, + AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, AttributeKind Attributes, StringRef GetterName, StringRef SetterName, bool IsOptional, bool IsFromSystemHeader) - : APIRecord(Kind, USR, Name, Loc, std::move(Availabilities), + : APIRecord(Kind, USR, Name, RecordLocation, std::move(Availabilities), LinkageInfo::none(), Comment, Declaration, SubHeading, IsFromSystemHeader), Attributes(Attributes), GetterName(GetterName), SetterName(SetterName), @@ -435,15 +493,13 @@ }; struct ObjCInstancePropertyRecord : ObjCPropertyRecord { - ObjCInstancePropertyRecord(StringRef USR, StringRef Name, PresumedLoc Loc, - AvailabilitySet Availabilities, - const DocComment &Comment, - DeclarationFragments Declaration, - DeclarationFragments SubHeading, - AttributeKind Attributes, StringRef GetterName, - StringRef SetterName, bool IsOptional, - bool IsFromSystemHeader) - : ObjCPropertyRecord(RK_ObjCInstanceProperty, USR, Name, Loc, + ObjCInstancePropertyRecord( + StringRef USR, StringRef Name, RecordLocation RecordLocation, + AvailabilitySet Availabilities, const DocComment &Comment, + DeclarationFragments Declaration, DeclarationFragments SubHeading, + AttributeKind Attributes, StringRef GetterName, StringRef SetterName, + bool IsOptional, bool IsFromSystemHeader) + : ObjCPropertyRecord(RK_ObjCInstanceProperty, USR, Name, RecordLocation, std::move(Availabilities), Comment, Declaration, SubHeading, Attributes, GetterName, SetterName, IsOptional, IsFromSystemHeader) {} @@ -457,15 +513,13 @@ }; struct ObjCClassPropertyRecord : ObjCPropertyRecord { - ObjCClassPropertyRecord(StringRef USR, StringRef Name, PresumedLoc Loc, - AvailabilitySet Availabilities, - const DocComment &Comment, - DeclarationFragments Declaration, - DeclarationFragments SubHeading, - AttributeKind Attributes, StringRef GetterName, - StringRef SetterName, bool IsOptional, - bool IsFromSystemHeader) - : ObjCPropertyRecord(RK_ObjCClassProperty, USR, Name, Loc, + ObjCClassPropertyRecord( + StringRef USR, StringRef Name, RecordLocation RecordLocation, + AvailabilitySet Availabilities, const DocComment &Comment, + DeclarationFragments Declaration, DeclarationFragments SubHeading, + AttributeKind Attributes, StringRef GetterName, StringRef SetterName, + bool IsOptional, bool IsFromSystemHeader) + : ObjCPropertyRecord(RK_ObjCClassProperty, USR, Name, RecordLocation, std::move(Availabilities), Comment, Declaration, SubHeading, Attributes, GetterName, SetterName, IsOptional, IsFromSystemHeader) {} @@ -483,15 +537,16 @@ using AccessControl = ObjCIvarDecl::AccessControl; AccessControl Access; - ObjCInstanceVariableRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + ObjCInstanceVariableRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, AccessControl Access, bool IsFromSystemHeader) - : APIRecord(RK_ObjCIvar, USR, Name, Loc, std::move(Availabilities), - LinkageInfo::none(), Comment, Declaration, SubHeading, - IsFromSystemHeader), + : APIRecord(RK_ObjCIvar, USR, Name, RecordLocation, + std::move(Availabilities), LinkageInfo::none(), Comment, + Declaration, SubHeading, IsFromSystemHeader), Access(Access) {} static bool classof(const APIRecord *Record) { @@ -509,11 +564,12 @@ ObjCMethodRecord() = delete; ObjCMethodRecord(RecordKind Kind, StringRef USR, StringRef Name, - PresumedLoc Loc, AvailabilitySet Availabilities, - const DocComment &Comment, DeclarationFragments Declaration, + RecordLocation RecordLocation, + AvailabilitySet Availabilities, const DocComment &Comment, + DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, bool IsFromSystemHeader) - : APIRecord(Kind, USR, Name, Loc, std::move(Availabilities), + : APIRecord(Kind, USR, Name, RecordLocation, std::move(Availabilities), LinkageInfo::none(), Comment, Declaration, SubHeading, IsFromSystemHeader), Signature(Signature) {} @@ -522,13 +578,14 @@ }; struct ObjCInstanceMethodRecord : ObjCMethodRecord { - ObjCInstanceMethodRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + ObjCInstanceMethodRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, bool IsFromSystemHeader) - : ObjCMethodRecord(RK_ObjCInstanceMethod, USR, Name, Loc, + : ObjCMethodRecord(RK_ObjCInstanceMethod, USR, Name, RecordLocation, std::move(Availabilities), Comment, Declaration, SubHeading, Signature, IsFromSystemHeader) {} static bool classof(const APIRecord *Record) { @@ -540,13 +597,14 @@ }; struct ObjCClassMethodRecord : ObjCMethodRecord { - ObjCClassMethodRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + ObjCClassMethodRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, bool IsFromSystemHeader) - : ObjCMethodRecord(RK_ObjCClassMethod, USR, Name, Loc, + : ObjCMethodRecord(RK_ObjCClassMethod, USR, Name, RecordLocation, std::move(Availabilities), Comment, Declaration, SubHeading, Signature, IsFromSystemHeader) {} @@ -582,12 +640,13 @@ struct StaticFieldRecord : CXXFieldRecord { SymbolReference Context; - StaticFieldRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + StaticFieldRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, SymbolReference Context, AccessControl Access, bool IsFromSystemHeader) - : CXXFieldRecord(RK_StaticField, USR, Name, Loc, + : CXXFieldRecord(RK_StaticField, USR, Name, RecordLocation, std::move(Availabilities), Comment, Declaration, SubHeading, Access, IsFromSystemHeader), Context(Context) {} @@ -608,12 +667,14 @@ ObjCContainerRecord() = delete; ObjCContainerRecord(RecordKind Kind, StringRef USR, StringRef Name, - PresumedLoc Loc, AvailabilitySet Availabilities, - LinkageInfo Linkage, const DocComment &Comment, + RecordLocation RecordLocation, + AvailabilitySet Availabilities, LinkageInfo Linkage, + const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader) - : APIRecord(Kind, USR, Name, Loc, std::move(Availabilities), Linkage, - Comment, Declaration, SubHeading, IsFromSystemHeader) {} + : APIRecord(Kind, USR, Name, RecordLocation, std::move(Availabilities), + Linkage, Comment, Declaration, SubHeading, + IsFromSystemHeader) {} virtual ~ObjCContainerRecord() = 0; }; @@ -623,12 +684,12 @@ SmallVector> Methods; SmallVector Bases; - CXXClassRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + CXXClassRecord(StringRef USR, StringRef Name, RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, RecordKind Kind, bool IsFromSystemHeader) - : APIRecord(Kind, USR, Name, Loc, std::move(Availabilities), + : APIRecord(Kind, USR, Name, RecordLocation, std::move(Availabilities), LinkageInfo::none(), Comment, Declaration, SubHeading, IsFromSystemHeader) {} @@ -644,12 +705,13 @@ struct ObjCCategoryRecord : ObjCContainerRecord { SymbolReference Interface; - ObjCCategoryRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + ObjCCategoryRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, SymbolReference Interface, bool IsFromSystemHeader) - : ObjCContainerRecord(RK_ObjCCategory, USR, Name, Loc, + : ObjCContainerRecord(RK_ObjCCategory, USR, Name, RecordLocation, std::move(Availabilities), LinkageInfo::none(), Comment, Declaration, SubHeading, IsFromSystemHeader), @@ -669,13 +731,14 @@ // ObjCCategoryRecord%s are stored in and owned by APISet. SmallVector Categories; - ObjCInterfaceRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + ObjCInterfaceRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, SymbolReference SuperClass, bool IsFromSystemHeader) - : ObjCContainerRecord(RK_ObjCInterface, USR, Name, Loc, + : ObjCContainerRecord(RK_ObjCInterface, USR, Name, RecordLocation, std::move(Availabilities), Linkage, Comment, Declaration, SubHeading, IsFromSystemHeader), SuperClass(SuperClass) {} @@ -690,11 +753,12 @@ /// This holds information associated with Objective-C protocols. struct ObjCProtocolRecord : ObjCContainerRecord { - ObjCProtocolRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + ObjCProtocolRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader) - : ObjCContainerRecord(RK_ObjCProtocol, USR, Name, Loc, + : ObjCContainerRecord(RK_ObjCProtocol, USR, Name, RecordLocation, std::move(Availabilities), LinkageInfo::none(), Comment, Declaration, SubHeading, IsFromSystemHeader) {} @@ -709,12 +773,13 @@ /// This holds information associated with macro definitions. struct MacroDefinitionRecord : APIRecord { - MacroDefinitionRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + MacroDefinitionRecord(StringRef USR, StringRef Name, + RecordLocation RecordLocation, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader) - : APIRecord(RK_MacroDefinition, USR, Name, Loc, AvailabilitySet(), - LinkageInfo(), {}, Declaration, SubHeading, + : APIRecord(RK_MacroDefinition, USR, Name, RecordLocation, + AvailabilitySet(), LinkageInfo(), {}, Declaration, SubHeading, IsFromSystemHeader) {} static bool classof(const APIRecord *Record) { @@ -733,14 +798,14 @@ struct TypedefRecord : APIRecord { SymbolReference UnderlyingType; - TypedefRecord(StringRef USR, StringRef Name, PresumedLoc Loc, + TypedefRecord(StringRef USR, StringRef Name, RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, SymbolReference UnderlyingType, bool IsFromSystemHeader) - : APIRecord(RK_Typedef, USR, Name, Loc, std::move(Availabilities), - LinkageInfo(), Comment, Declaration, SubHeading, - IsFromSystemHeader), + : APIRecord(RK_Typedef, USR, Name, RecordLocation, + std::move(Availabilities), LinkageInfo(), Comment, + Declaration, SubHeading, IsFromSystemHeader), UnderlyingType(UnderlyingType) {} static bool classof(const APIRecord *Record) { @@ -783,7 +848,7 @@ /// APISet itself, and APISet::recordUSR(const Decl *D) is a helper method /// to generate the USR for \c D and keep it alive in APISet. GlobalVariableRecord * - addGlobalVar(StringRef Name, StringRef USR, PresumedLoc Loc, + addGlobalVar(StringRef Name, StringRef USR, RecordLocation RecordLocation, AvailabilitySet Availability, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeadin, bool IsFromSystemHeaderg); @@ -795,9 +860,10 @@ /// APISet itself, and APISet::recordUSR(const Decl *D) is a helper method /// to generate the USR for \c D and keep it alive in APISet. GlobalFunctionRecord * - addGlobalFunction(StringRef Name, StringRef USR, PresumedLoc Loc, - AvailabilitySet Availability, LinkageInfo Linkage, - const DocComment &Comment, DeclarationFragments Declaration, + addGlobalFunction(StringRef Name, StringRef USR, + RecordLocation RecordLocation, AvailabilitySet Availability, + LinkageInfo Linkage, const DocComment &Comment, + DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, bool IsFromSystemHeader); @@ -809,7 +875,7 @@ /// to generate the USR for \c D and keep it alive in APISet. EnumConstantRecord * addEnumConstant(EnumRecord *Enum, StringRef Name, StringRef USR, - PresumedLoc Loc, AvailabilitySet Availability, + RecordLocation RecordLocation, AvailabilitySet Availability, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader); @@ -819,7 +885,8 @@ /// \p USR alive. APISet::copyString provides a way to copy strings into /// APISet itself, and APISet::recordUSR(const Decl *D) is a helper method /// to generate the USR for \c D and keep it alive in APISet. - EnumRecord *addEnum(StringRef Name, StringRef USR, PresumedLoc Loc, + EnumRecord *addEnum(StringRef Name, StringRef USR, + RecordLocation RecordLocation, AvailabilitySet Availability, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader); @@ -832,7 +899,7 @@ /// to generate the USR for \c D and keep it alive in APISet. StructFieldRecord * addStructField(StructRecord *Struct, StringRef Name, StringRef USR, - PresumedLoc Loc, AvailabilitySet Availability, + RecordLocation RecordLocation, AvailabilitySet Availability, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader); @@ -842,22 +909,21 @@ /// \p USR alive. APISet::copyString provides a way to copy strings into /// APISet itself, and APISet::recordUSR(const Decl *D) is a helper method /// to generate the USR for \c D and keep it alive in APISet. - StructRecord *addStruct(StringRef Name, StringRef USR, PresumedLoc Loc, - AvailabilitySet Availability, - const DocComment &Comment, - DeclarationFragments Declaration, - DeclarationFragments SubHeading, - bool IsFromSystemHeader); + StructRecord * + addStruct(StringRef Name, StringRef USR, RecordLocation RecordLocation, + AvailabilitySet Availability, const DocComment &Comment, + DeclarationFragments Declaration, DeclarationFragments SubHeading, + bool IsFromSystemHeader); StaticFieldRecord * - addStaticField(StringRef Name, StringRef USR, PresumedLoc Loc, + addStaticField(StringRef Name, StringRef USR, RecordLocation RecordLocation, AvailabilitySet Availabilities, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, SymbolReference Context, AccessControl Access, bool IsFromSystemHeaderg); CXXFieldRecord *addCXXField(CXXClassRecord *CXXClass, StringRef Name, - StringRef USR, PresumedLoc Loc, + StringRef USR, RecordLocation RecordLocation, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, @@ -865,24 +931,24 @@ AccessControl Access, bool IsFromSystemHeader); CXXClassRecord * - addCXXClass(StringRef Name, StringRef USR, PresumedLoc Loc, + addCXXClass(StringRef Name, StringRef USR, RecordLocation RecordLocation, AvailabilitySet Availability, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, APIRecord::RecordKind Kind, bool IsFromSystemHeader); CXXMethodRecord * addCXXMethod(CXXClassRecord *CXXClassRecord, StringRef Name, StringRef USR, - PresumedLoc Loc, AvailabilitySet Availability, + RecordLocation RecordLocation, AvailabilitySet Availability, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, bool IsStatic, AccessControl Access, bool IsFromSystemHeader); CXXMethodRecord *addCXXSpecialMethod( CXXClassRecord *CXXClassRecord, StringRef Name, StringRef USR, - PresumedLoc Loc, AvailabilitySet Availability, const DocComment &Comment, - DeclarationFragments Declaration, DeclarationFragments SubHeading, - FunctionSignature Signature, bool IsConstructor, AccessControl Access, - bool IsFromSystemHeader); + RecordLocation RecordLocation, AvailabilitySet Availability, + const DocComment &Comment, DeclarationFragments Declaration, + DeclarationFragments SubHeading, FunctionSignature Signature, + bool IsConstructor, AccessControl Access, bool IsFromSystemHeader); /// Create and add an Objective-C category record into the API set. /// @@ -891,7 +957,7 @@ /// APISet itself, and APISet::recordUSR(const Decl *D) is a helper method /// to generate the USR for \c D and keep it alive in APISet. ObjCCategoryRecord * - addObjCCategory(StringRef Name, StringRef USR, PresumedLoc Loc, + addObjCCategory(StringRef Name, StringRef USR, RecordLocation RecordLocation, AvailabilitySet Availability, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, SymbolReference Interface, @@ -904,7 +970,7 @@ /// APISet itself, and APISet::recordUSR(const Decl *D) is a helper method /// to generate the USR for \c D and keep it alive in APISet. ObjCInterfaceRecord * - addObjCInterface(StringRef Name, StringRef USR, PresumedLoc Loc, + addObjCInterface(StringRef Name, StringRef USR, RecordLocation RecordLocation, AvailabilitySet Availability, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, SymbolReference SuperClass, @@ -918,7 +984,7 @@ /// to generate the USR for \c D and keep it alive in APISet. ObjCMethodRecord * addObjCMethod(ObjCContainerRecord *Container, StringRef Name, StringRef USR, - PresumedLoc Loc, AvailabilitySet Availability, + RecordLocation RecordLocation, AvailabilitySet Availability, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, bool IsInstanceMethod, bool IsFromSystemHeader); @@ -931,7 +997,7 @@ /// to generate the USR for \c D and keep it alive in APISet. ObjCPropertyRecord * addObjCProperty(ObjCContainerRecord *Container, StringRef Name, StringRef USR, - PresumedLoc Loc, AvailabilitySet Availability, + RecordLocation RecordLocation, AvailabilitySet Availability, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, ObjCPropertyRecord::AttributeKind Attributes, @@ -946,8 +1012,9 @@ /// to generate the USR for \c D and keep it alive in APISet. ObjCInstanceVariableRecord *addObjCInstanceVariable( ObjCContainerRecord *Container, StringRef Name, StringRef USR, - PresumedLoc Loc, AvailabilitySet Availability, const DocComment &Comment, - DeclarationFragments Declaration, DeclarationFragments SubHeading, + RecordLocation RecordLocation, AvailabilitySet Availability, + const DocComment &Comment, DeclarationFragments Declaration, + DeclarationFragments SubHeading, ObjCInstanceVariableRecord::AccessControl Access, bool IsFromSystemHeader); @@ -958,7 +1025,7 @@ /// APISet itself, and APISet::recordUSR(const Decl *D) is a helper method /// to generate the USR for \c D and keep it alive in APISet. ObjCProtocolRecord * - addObjCProtocol(StringRef Name, StringRef USR, PresumedLoc Loc, + addObjCProtocol(StringRef Name, StringRef USR, RecordLocation RecordLocation, AvailabilitySet Availability, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader); @@ -971,7 +1038,7 @@ /// SourceLocation SL, const SourceManager &SM) is a helper method to generate /// the USR for the macro and keep it alive in APISet. MacroDefinitionRecord *addMacroDefinition(StringRef Name, StringRef USR, - PresumedLoc Loc, + RecordLocation RecordLocation, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader); @@ -983,7 +1050,7 @@ /// APISet itself, and APISet::recordUSR(const Decl *D) is a helper method /// to generate the USR for \c D and keep it alive in APISet. TypedefRecord * - addTypedef(StringRef Name, StringRef USR, PresumedLoc Loc, + addTypedef(StringRef Name, StringRef USR, RecordLocation RecordLocation, AvailabilitySet Availability, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, SymbolReference UnderlyingType, bool IsFromSystemHeader); diff --git a/clang/include/clang/ExtractAPI/ExtractAPIVisitor.h b/clang/include/clang/ExtractAPI/ExtractAPIVisitor.h --- a/clang/include/clang/ExtractAPI/ExtractAPIVisitor.h +++ b/clang/include/clang/ExtractAPI/ExtractAPIVisitor.h @@ -27,6 +27,7 @@ #include "clang/ExtractAPI/API.h" #include "clang/ExtractAPI/TypedefUnderlyingTypeResolver.h" #include "llvm/ADT/StringRef.h" +#include #include namespace clang { @@ -180,9 +181,12 @@ LinkageInfo Linkage = Decl->getLinkageAndVisibility(); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments and sub-heading for the variable. DeclarationFragments Declaration = @@ -253,9 +257,12 @@ LinkageInfo Linkage = Decl->getLinkageAndVisibility(); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments, sub-heading, and signature of the function. DeclarationFragments Declaration = @@ -293,9 +300,12 @@ Context.getSourceManager().getPresumedLoc(Decl->getLocation()); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments and sub-heading for the enum. DeclarationFragments Declaration = @@ -344,9 +354,12 @@ Context.getSourceManager().getPresumedLoc(Decl->getLocation()); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments and sub-heading for the struct. DeclarationFragments Declaration = @@ -377,9 +390,12 @@ Context.getSourceManager().getPresumedLoc(Decl->getLocation()); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } DeclarationFragments Declaration = DeclarationFragmentsBuilder::getFragmentsForCXXClass(Decl); DeclarationFragments SubHeading = @@ -430,9 +446,12 @@ LinkageInfo Linkage = Decl->getLinkageAndVisibility(); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments and sub-heading for the interface. DeclarationFragments Declaration = @@ -478,9 +497,12 @@ Context.getSourceManager().getPresumedLoc(Decl->getLocation()); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments and sub-heading for the protocol. DeclarationFragments Declaration = @@ -536,9 +558,12 @@ StringRef USR = API.recordUSR(Decl); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } QualType Type = Decl->getUnderlyingType(); SymbolReference SymRef = @@ -565,9 +590,12 @@ Context.getSourceManager().getPresumedLoc(Decl->getLocation()); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Decl)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments and sub-heading for the category. DeclarationFragments Declaration = DeclarationFragmentsBuilder::getFragmentsForObjCCategory(Decl); @@ -607,9 +635,12 @@ Context.getSourceManager().getPresumedLoc(Constant->getLocation()); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Constant)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Constant)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments and sub-heading for the enum constant. DeclarationFragments Declaration = @@ -636,9 +667,12 @@ Context.getSourceManager().getPresumedLoc(Field->getLocation()); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Field)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Field)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments and sub-heading for the struct field. DeclarationFragments Declaration = @@ -664,9 +698,12 @@ Context.getSourceManager().getPresumedLoc(Field->getLocation()); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Field)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Field)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments and sub-heading for the struct field. DeclarationFragments Declaration = @@ -701,9 +738,12 @@ CXXSpecialMethod->getLocation()); DocComment Comment; if (auto *RawComment = getDerivedExtractAPIVisitor().fetchRawCommentForDecl( - CXXSpecialMethod)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + CXXSpecialMethod)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments, sub-heading, and signature for the method. DeclarationFragments Declaration = @@ -731,9 +771,12 @@ SpecialCXXMethod->getLocation()); DocComment Comment; if (auto *RawComment = getDerivedExtractAPIVisitor().fetchRawCommentForDecl( - SpecialCXXMethod)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + SpecialCXXMethod)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments, sub-heading, and signature for the method. DeclarationFragments Declaration = @@ -783,9 +826,12 @@ Context.getSourceManager().getPresumedLoc(Method->getLocation()); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Method)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Method)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments, sub-heading, and signature for the method. DeclarationFragments SubHeading = @@ -818,9 +864,12 @@ Context.getSourceManager().getPresumedLoc(Method->getLocation()); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Method)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Method)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments, sub-heading, and signature for the method. DeclarationFragments Declaration = @@ -847,9 +896,12 @@ Context.getSourceManager().getPresumedLoc(Property->getLocation()); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Property)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Property)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments and sub-heading for the property. DeclarationFragments Declaration = @@ -892,9 +944,12 @@ Context.getSourceManager().getPresumedLoc(Ivar->getLocation()); DocComment Comment; if (auto *RawComment = - getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Ivar)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + getDerivedExtractAPIVisitor().fetchRawCommentForDecl(Ivar)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments and sub-heading for the instance variable. DeclarationFragments Declaration = diff --git a/clang/lib/ExtractAPI/API.cpp b/clang/lib/ExtractAPI/API.cpp --- a/clang/lib/ExtractAPI/API.cpp +++ b/clang/lib/ExtractAPI/API.cpp @@ -45,7 +45,7 @@ } // namespace GlobalVariableRecord * -APISet::addGlobalVar(StringRef Name, StringRef USR, PresumedLoc Loc, +APISet::addGlobalVar(StringRef Name, StringRef USR, RecordLocation Loc, AvailabilitySet Availabilities, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Fragments, DeclarationFragments SubHeading, bool IsFromSystemHeader) { @@ -55,7 +55,7 @@ } GlobalFunctionRecord *APISet::addGlobalFunction( - StringRef Name, StringRef USR, PresumedLoc Loc, + StringRef Name, StringRef USR, RecordLocation Loc, AvailabilitySet Availabilities, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Fragments, DeclarationFragments SubHeading, FunctionSignature Signature, @@ -67,7 +67,7 @@ } EnumConstantRecord *APISet::addEnumConstant(EnumRecord *Enum, StringRef Name, - StringRef USR, PresumedLoc Loc, + StringRef USR, RecordLocation Loc, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, @@ -82,7 +82,7 @@ return Enum->Constants.emplace_back(std::move(Record)).get(); } -EnumRecord *APISet::addEnum(StringRef Name, StringRef USR, PresumedLoc Loc, +EnumRecord *APISet::addEnum(StringRef Name, StringRef USR, RecordLocation Loc, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, @@ -94,7 +94,7 @@ } StructFieldRecord *APISet::addStructField(StructRecord *Struct, StringRef Name, - StringRef USR, PresumedLoc Loc, + StringRef USR, RecordLocation Loc, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, @@ -109,19 +109,18 @@ return Struct->Fields.emplace_back(std::move(Record)).get(); } -StructRecord *APISet::addStruct(StringRef Name, StringRef USR, PresumedLoc Loc, - AvailabilitySet Availabilities, - const DocComment &Comment, - DeclarationFragments Declaration, - DeclarationFragments SubHeading, - bool IsFromSystemHeader) { +StructRecord * +APISet::addStruct(StringRef Name, StringRef USR, RecordLocation Loc, + AvailabilitySet Availabilities, const DocComment &Comment, + DeclarationFragments Declaration, + DeclarationFragments SubHeading, bool IsFromSystemHeader) { return addTopLevelRecord(USRBasedLookupTable, Structs, USR, Name, Loc, std::move(Availabilities), Comment, Declaration, SubHeading, IsFromSystemHeader); } StaticFieldRecord * -APISet::addStaticField(StringRef Name, StringRef USR, PresumedLoc Loc, +APISet::addStaticField(StringRef Name, StringRef USR, RecordLocation Loc, AvailabilitySet Availabilities, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Declaration, @@ -135,7 +134,7 @@ CXXFieldRecord * APISet::addCXXField(CXXClassRecord *CXXClass, StringRef Name, StringRef USR, - PresumedLoc Loc, AvailabilitySet Availabilities, + RecordLocation Loc, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, AccessControl Access, bool IsFromSystemHeader) { @@ -149,7 +148,7 @@ } CXXClassRecord * -APISet::addCXXClass(StringRef Name, StringRef USR, PresumedLoc Loc, +APISet::addCXXClass(StringRef Name, StringRef USR, RecordLocation Loc, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, APIRecord::RecordKind Kind, @@ -161,7 +160,7 @@ CXXMethodRecord *APISet::addCXXMethod( CXXClassRecord *CXXClassRecord, StringRef Name, StringRef USR, - PresumedLoc Loc, AvailabilitySet Availability, const DocComment &Comment, + RecordLocation Loc, AvailabilitySet Availability, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, bool IsStatic, AccessControl Access, bool IsFromSystemHeader) { @@ -184,7 +183,7 @@ CXXMethodRecord *APISet::addCXXSpecialMethod( CXXClassRecord *CXXClassRecord, StringRef Name, StringRef USR, - PresumedLoc Loc, AvailabilitySet Availability, const DocComment &Comment, + RecordLocation Loc, AvailabilitySet Availability, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, FunctionSignature Signature, bool IsConstructor, AccessControl Access, bool IsFromSystemHeader) { @@ -206,7 +205,7 @@ } ObjCCategoryRecord *APISet::addObjCCategory( - StringRef Name, StringRef USR, PresumedLoc Loc, + StringRef Name, StringRef USR, RecordLocation Loc, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, SymbolReference Interface, bool IsFromSystemHeader) { @@ -226,7 +225,7 @@ } ObjCInterfaceRecord * -APISet::addObjCInterface(StringRef Name, StringRef USR, PresumedLoc Loc, +APISet::addObjCInterface(StringRef Name, StringRef USR, RecordLocation Loc, AvailabilitySet Availabilities, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Declaration, @@ -240,10 +239,10 @@ ObjCMethodRecord *APISet::addObjCMethod( ObjCContainerRecord *Container, StringRef Name, StringRef USR, - PresumedLoc Loc, AvailabilitySet Availabilities, const DocComment &Comment, - DeclarationFragments Declaration, DeclarationFragments SubHeading, - FunctionSignature Signature, bool IsInstanceMethod, - bool IsFromSystemHeader) { + RecordLocation Loc, AvailabilitySet Availabilities, + const DocComment &Comment, DeclarationFragments Declaration, + DeclarationFragments SubHeading, FunctionSignature Signature, + bool IsInstanceMethod, bool IsFromSystemHeader) { std::unique_ptr Record; if (IsInstanceMethod) Record = std::make_unique( @@ -262,8 +261,9 @@ ObjCPropertyRecord *APISet::addObjCProperty( ObjCContainerRecord *Container, StringRef Name, StringRef USR, - PresumedLoc Loc, AvailabilitySet Availabilities, const DocComment &Comment, - DeclarationFragments Declaration, DeclarationFragments SubHeading, + RecordLocation Loc, AvailabilitySet Availabilities, + const DocComment &Comment, DeclarationFragments Declaration, + DeclarationFragments SubHeading, ObjCPropertyRecord::AttributeKind Attributes, StringRef GetterName, StringRef SetterName, bool IsOptional, bool IsInstanceProperty, bool IsFromSystemHeader) { @@ -286,8 +286,9 @@ ObjCInstanceVariableRecord *APISet::addObjCInstanceVariable( ObjCContainerRecord *Container, StringRef Name, StringRef USR, - PresumedLoc Loc, AvailabilitySet Availabilities, const DocComment &Comment, - DeclarationFragments Declaration, DeclarationFragments SubHeading, + RecordLocation Loc, AvailabilitySet Availabilities, + const DocComment &Comment, DeclarationFragments Declaration, + DeclarationFragments SubHeading, ObjCInstanceVariableRecord::AccessControl Access, bool IsFromSystemHeader) { auto Record = std::make_unique( USR, Name, Loc, std::move(Availabilities), Comment, Declaration, @@ -299,7 +300,7 @@ } ObjCProtocolRecord *APISet::addObjCProtocol(StringRef Name, StringRef USR, - PresumedLoc Loc, + RecordLocation Loc, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, @@ -311,7 +312,7 @@ } MacroDefinitionRecord * -APISet::addMacroDefinition(StringRef Name, StringRef USR, PresumedLoc Loc, +APISet::addMacroDefinition(StringRef Name, StringRef USR, RecordLocation Loc, DeclarationFragments Declaration, DeclarationFragments SubHeading, bool IsFromSystemHeader) { @@ -320,7 +321,7 @@ } TypedefRecord * -APISet::addTypedef(StringRef Name, StringRef USR, PresumedLoc Loc, +APISet::addTypedef(StringRef Name, StringRef USR, RecordLocation Loc, AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, diff --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp --- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp +++ b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp @@ -14,6 +14,7 @@ #include "clang/ExtractAPI/Serialization/SymbolGraphSerializer.h" #include "clang/Basic/SourceLocation.h" #include "clang/Basic/Version.h" +#include "clang/ExtractAPI/API.h" #include "clang/ExtractAPI/DeclarationFragments.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/STLFunctionalExtras.h" @@ -105,7 +106,7 @@ } /// Serialize a source position. -Object serializeSourcePosition(const PresumedLoc &Loc) { +Object serializeSourcePosition(const RecordLocation &Loc) { assert(Loc.isValid() && "invalid source position"); Object SourcePosition; @@ -120,7 +121,7 @@ /// \param Loc The presumed location to serialize. /// \param IncludeFileURI If true, include the file path of \p Loc as a URI. /// Defaults to false. -Object serializeSourceLocation(const PresumedLoc &Loc, +Object serializeSourceLocation(const RecordLocation &Loc, bool IncludeFileURI = false) { Object SourceLocation; serializeObject(SourceLocation, "position", serializeSourcePosition(Loc)); @@ -136,8 +137,8 @@ } /// Serialize a source range with begin and end locations. -Object serializeSourceRange(const PresumedLoc &BeginLoc, - const PresumedLoc &EndLoc) { +Object serializeSourceRange(const RecordLocation &BeginLoc, + const RecordLocation &EndLoc) { Object SourceRange; serializeObject(SourceRange, "start", serializeSourcePosition(BeginLoc)); serializeObject(SourceRange, "end", serializeSourcePosition(EndLoc)); diff --git a/clang/tools/libclang/CXExtractAPI.cpp b/clang/tools/libclang/CXExtractAPI.cpp --- a/clang/tools/libclang/CXExtractAPI.cpp +++ b/clang/tools/libclang/CXExtractAPI.cpp @@ -61,9 +61,12 @@ Context.getSourceManager().getPresumedLoc(Decl->getLocation()); LinkageInfo Linkage = Decl->getLinkageAndVisibility(); DocComment Comment; - if (auto *RawComment = fetchRawCommentForDecl(Interface)) - Comment = RawComment->getFormattedLines(Context.getSourceManager(), - Context.getDiagnostics()); + if (auto *RawComment = fetchRawCommentForDecl(Interface)) { + auto RawCommentVec = RawComment->getFormattedLines( + Context.getSourceManager(), Context.getDiagnostics()); + std::copy(RawCommentVec.begin(), RawCommentVec.end(), + std::back_inserter(Comment)); + } // Build declaration fragments and sub-heading by generating them for the // interface.