Coverage Report

Created: 2023-09-30 09:22

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/lib/ExtractAPI/API.cpp
Line
Count
Source (jump to first uncovered line)
1
//===- ExtractAPI/API.cpp ---------------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
///
9
/// \file
10
/// This file implements the APIRecord and derived record structs,
11
/// and the APISet class.
12
///
13
//===----------------------------------------------------------------------===//
14
15
#include "clang/ExtractAPI/API.h"
16
#include "clang/AST/CommentCommandTraits.h"
17
#include "clang/AST/CommentLexer.h"
18
#include "clang/AST/RawCommentList.h"
19
#include "clang/Index/USRGeneration.h"
20
#include "llvm/ADT/STLFunctionalExtras.h"
21
#include "llvm/ADT/StringRef.h"
22
#include <memory>
23
24
using namespace clang::extractapi;
25
using namespace llvm;
26
27
namespace {
28
29
template <typename RecordTy, typename... CtorArgsTy>
30
RecordTy *addTopLevelRecord(DenseMap<StringRef, APIRecord *> &USRLookupTable,
31
                            APISet::RecordMap<RecordTy> &RecordMap,
32
217
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
217
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
217
  if (Result.second)
37
213
    Result.first->second =
38
213
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
217
  auto *Record = Result.first->second.get();
41
217
  USRLookupTable.insert({USR, Record});
42
217
  return Record;
43
217
}
API.cpp:clang::extractapi::NamespaceRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::NamespaceRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::NamespaceRecord, std::__1::default_delete<clang::extractapi::NamespaceRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::NamespaceRecord, std::__1::default_delete<clang::extractapi::NamespaceRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&)
Line
Count
Source
32
3
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
3
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
3
  if (Result.second)
37
3
    Result.first->second =
38
3
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
3
  auto *Record = Result.first->second.get();
41
3
  USRLookupTable.insert({USR, Record});
42
3
  return Record;
43
3
}
API.cpp:clang::extractapi::GlobalVariableRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::GlobalVariableRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalVariableRecord, std::__1::default_delete<clang::extractapi::GlobalVariableRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalVariableRecord, std::__1::default_delete<clang::extractapi::GlobalVariableRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&)
Line
Count
Source
32
13
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
13
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
13
  if (Result.second)
37
13
    Result.first->second =
38
13
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
13
  auto *Record = Result.first->second.get();
41
13
  USRLookupTable.insert({USR, Record});
42
13
  return Record;
43
13
}
API.cpp:clang::extractapi::GlobalVariableTemplateRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::GlobalVariableTemplateRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::Template&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalVariableTemplateRecord, std::__1::default_delete<clang::extractapi::GlobalVariableTemplateRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalVariableTemplateRecord, std::__1::default_delete<clang::extractapi::GlobalVariableTemplateRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::Template&, bool&)
Line
Count
Source
32
3
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
3
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
3
  if (Result.second)
37
3
    Result.first->second =
38
3
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
3
  auto *Record = Result.first->second.get();
41
3
  USRLookupTable.insert({USR, Record});
42
3
  return Record;
43
3
}
API.cpp:clang::extractapi::GlobalFunctionRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::GlobalFunctionRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalFunctionRecord, std::__1::default_delete<clang::extractapi::GlobalFunctionRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalFunctionRecord, std::__1::default_delete<clang::extractapi::GlobalFunctionRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, bool&)
Line
Count
Source
32
26
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
26
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
26
  if (Result.second)
37
22
    Result.first->second =
38
22
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
26
  auto *Record = Result.first->second.get();
41
26
  USRLookupTable.insert({USR, Record});
42
26
  return Record;
43
26
}
API.cpp:clang::extractapi::GlobalFunctionTemplateRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::GlobalFunctionTemplateRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, clang::extractapi::Template&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalFunctionTemplateRecord, std::__1::default_delete<clang::extractapi::GlobalFunctionTemplateRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalFunctionTemplateRecord, std::__1::default_delete<clang::extractapi::GlobalFunctionTemplateRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, clang::extractapi::Template&, bool&)
Line
Count
Source
32
3
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
3
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
3
  if (Result.second)
37
3
    Result.first->second =
38
3
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
3
  auto *Record = Result.first->second.get();
41
3
  USRLookupTable.insert({USR, Record});
42
3
  return Record;
43
3
}
API.cpp:clang::extractapi::GlobalFunctionTemplateSpecializationRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::GlobalFunctionTemplateSpecializationRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalFunctionTemplateSpecializationRecord, std::__1::default_delete<clang::extractapi::GlobalFunctionTemplateSpecializationRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalFunctionTemplateSpecializationRecord, std::__1::default_delete<clang::extractapi::GlobalFunctionTemplateSpecializationRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, bool&)
Line
Count
Source
32
1
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
1
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
1
  if (Result.second)
37
1
    Result.first->second =
38
1
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
1
  auto *Record = Result.first->second.get();
41
1
  USRLookupTable.insert({USR, Record});
42
1
  return Record;
43
1
}
API.cpp:clang::extractapi::EnumRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::EnumRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::EnumRecord, std::__1::default_delete<clang::extractapi::EnumRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::EnumRecord, std::__1::default_delete<clang::extractapi::EnumRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&)
Line
Count
Source
32
7
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
7
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
7
  if (Result.second)
37
7
    Result.first->second =
38
7
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
7
  auto *Record = Result.first->second.get();
41
7
  USRLookupTable.insert({USR, Record});
42
7
  return Record;
43
7
}
API.cpp:clang::extractapi::StructRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::StructRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::StructRecord, std::__1::default_delete<clang::extractapi::StructRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::StructRecord, std::__1::default_delete<clang::extractapi::StructRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&)
Line
Count
Source
32
21
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
21
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
21
  if (Result.second)
37
21
    Result.first->second =
38
21
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
21
  auto *Record = Result.first->second.get();
41
21
  USRLookupTable.insert({USR, Record});
42
21
  return Record;
43
21
}
Unexecuted instantiation: API.cpp:clang::extractapi::StaticFieldRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::StaticFieldRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::SymbolReference&, clang::extractapi::AccessControl&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::StaticFieldRecord, std::__1::default_delete<clang::extractapi::StaticFieldRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::StaticFieldRecord, std::__1::default_delete<clang::extractapi::StaticFieldRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::SymbolReference&, clang::extractapi::AccessControl&, bool&)
API.cpp:clang::extractapi::CXXFieldRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::CXXFieldRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::AccessControl&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXFieldRecord, std::__1::default_delete<clang::extractapi::CXXFieldRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXFieldRecord, std::__1::default_delete<clang::extractapi::CXXFieldRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::AccessControl&, bool&)
Line
Count
Source
32
4
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
4
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
4
  if (Result.second)
37
4
    Result.first->second =
38
4
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
4
  auto *Record = Result.first->second.get();
41
4
  USRLookupTable.insert({USR, Record});
42
4
  return Record;
43
4
}
API.cpp:clang::extractapi::CXXFieldTemplateRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::CXXFieldTemplateRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::AccessControl&, clang::extractapi::Template&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXFieldTemplateRecord, std::__1::default_delete<clang::extractapi::CXXFieldTemplateRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXFieldTemplateRecord, std::__1::default_delete<clang::extractapi::CXXFieldTemplateRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::AccessControl&, clang::extractapi::Template&, bool&)
Line
Count
Source
32
1
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
1
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
1
  if (Result.second)
37
1
    Result.first->second =
38
1
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
1
  auto *Record = Result.first->second.get();
41
1
  USRLookupTable.insert({USR, Record});
42
1
  return Record;
43
1
}
API.cpp:clang::extractapi::CXXClassRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::CXXClassRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::APIRecord::RecordKind&, clang::extractapi::AccessControl&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXClassRecord, std::__1::default_delete<clang::extractapi::CXXClassRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXClassRecord, std::__1::default_delete<clang::extractapi::CXXClassRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::APIRecord::RecordKind&, clang::extractapi::AccessControl&, bool&)
Line
Count
Source
32
15
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
15
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
15
  if (Result.second)
37
15
    Result.first->second =
38
15
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
15
  auto *Record = Result.first->second.get();
41
15
  USRLookupTable.insert({USR, Record});
42
15
  return Record;
43
15
}
API.cpp:clang::extractapi::ClassTemplateRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::ClassTemplateRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::Template&, clang::extractapi::AccessControl&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ClassTemplateRecord, std::__1::default_delete<clang::extractapi::ClassTemplateRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ClassTemplateRecord, std::__1::default_delete<clang::extractapi::ClassTemplateRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::Template&, clang::extractapi::AccessControl&, bool&)
Line
Count
Source
32
4
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
4
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
4
  if (Result.second)
37
4
    Result.first->second =
38
4
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
4
  auto *Record = Result.first->second.get();
41
4
  USRLookupTable.insert({USR, Record});
42
4
  return Record;
43
4
}
API.cpp:clang::extractapi::ClassTemplateSpecializationRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::ClassTemplateSpecializationRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::AccessControl&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ClassTemplateSpecializationRecord, std::__1::default_delete<clang::extractapi::ClassTemplateSpecializationRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ClassTemplateSpecializationRecord, std::__1::default_delete<clang::extractapi::ClassTemplateSpecializationRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::AccessControl&, bool&)
Line
Count
Source
32
1
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
1
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
1
  if (Result.second)
37
1
    Result.first->second =
38
1
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
1
  auto *Record = Result.first->second.get();
41
1
  USRLookupTable.insert({USR, Record});
42
1
  return Record;
43
1
}
API.cpp:clang::extractapi::ClassTemplatePartialSpecializationRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::ClassTemplatePartialSpecializationRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::Template&, clang::extractapi::AccessControl&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ClassTemplatePartialSpecializationRecord, std::__1::default_delete<clang::extractapi::ClassTemplatePartialSpecializationRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ClassTemplatePartialSpecializationRecord, std::__1::default_delete<clang::extractapi::ClassTemplatePartialSpecializationRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::Template&, clang::extractapi::AccessControl&, bool&)
Line
Count
Source
32
1
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
1
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
1
  if (Result.second)
37
1
    Result.first->second =
38
1
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
1
  auto *Record = Result.first->second.get();
41
1
  USRLookupTable.insert({USR, Record});
42
1
  return Record;
43
1
}
API.cpp:clang::extractapi::GlobalVariableTemplateSpecializationRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::GlobalVariableTemplateSpecializationRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalVariableTemplateSpecializationRecord, std::__1::default_delete<clang::extractapi::GlobalVariableTemplateSpecializationRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalVariableTemplateSpecializationRecord, std::__1::default_delete<clang::extractapi::GlobalVariableTemplateSpecializationRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&)
Line
Count
Source
32
1
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
1
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
1
  if (Result.second)
37
1
    Result.first->second =
38
1
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
1
  auto *Record = Result.first->second.get();
41
1
  USRLookupTable.insert({USR, Record});
42
1
  return Record;
43
1
}
API.cpp:clang::extractapi::GlobalVariableTemplatePartialSpecializationRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::GlobalVariableTemplatePartialSpecializationRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::Template&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalVariableTemplatePartialSpecializationRecord, std::__1::default_delete<clang::extractapi::GlobalVariableTemplatePartialSpecializationRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::GlobalVariableTemplatePartialSpecializationRecord, std::__1::default_delete<clang::extractapi::GlobalVariableTemplatePartialSpecializationRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::Template&, bool&)
Line
Count
Source
32
1
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
1
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
1
  if (Result.second)
37
1
    Result.first->second =
38
1
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
1
  auto *Record = Result.first->second.get();
41
1
  USRLookupTable.insert({USR, Record});
42
1
  return Record;
43
1
}
API.cpp:clang::extractapi::ConceptRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::ConceptRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::Template&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ConceptRecord, std::__1::default_delete<clang::extractapi::ConceptRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ConceptRecord, std::__1::default_delete<clang::extractapi::ConceptRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::Template&, bool&)
Line
Count
Source
32
1
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
1
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
1
  if (Result.second)
37
1
    Result.first->second =
38
1
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
1
  auto *Record = Result.first->second.get();
41
1
  USRLookupTable.insert({USR, Record});
42
1
  return Record;
43
1
}
API.cpp:clang::extractapi::CXXInstanceMethodRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::CXXInstanceMethodRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, clang::extractapi::AccessControl&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXInstanceMethodRecord, std::__1::default_delete<clang::extractapi::CXXInstanceMethodRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXInstanceMethodRecord, std::__1::default_delete<clang::extractapi::CXXInstanceMethodRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, clang::extractapi::AccessControl&, bool&)
Line
Count
Source
32
8
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
8
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
8
  if (Result.second)
37
8
    Result.first->second =
38
8
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
8
  auto *Record = Result.first->second.get();
41
8
  USRLookupTable.insert({USR, Record});
42
8
  return Record;
43
8
}
API.cpp:clang::extractapi::CXXStaticMethodRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::CXXStaticMethodRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, clang::extractapi::AccessControl&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXStaticMethodRecord, std::__1::default_delete<clang::extractapi::CXXStaticMethodRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXStaticMethodRecord, std::__1::default_delete<clang::extractapi::CXXStaticMethodRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, clang::extractapi::AccessControl&, bool&)
Line
Count
Source
32
1
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
1
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
1
  if (Result.second)
37
1
    Result.first->second =
38
1
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
1
  auto *Record = Result.first->second.get();
41
1
  USRLookupTable.insert({USR, Record});
42
1
  return Record;
43
1
}
API.cpp:clang::extractapi::CXXMethodTemplateRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::CXXMethodTemplateRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, clang::extractapi::AccessControl&, clang::extractapi::Template&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXMethodTemplateRecord, std::__1::default_delete<clang::extractapi::CXXMethodTemplateRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXMethodTemplateRecord, std::__1::default_delete<clang::extractapi::CXXMethodTemplateRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, clang::extractapi::AccessControl&, clang::extractapi::Template&, bool&)
Line
Count
Source
32
2
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
2
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
2
  if (Result.second)
37
2
    Result.first->second =
38
2
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
2
  auto *Record = Result.first->second.get();
41
2
  USRLookupTable.insert({USR, Record});
42
2
  return Record;
43
2
}
API.cpp:clang::extractapi::CXXMethodTemplateSpecializationRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::CXXMethodTemplateSpecializationRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, clang::extractapi::AccessControl&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXMethodTemplateSpecializationRecord, std::__1::default_delete<clang::extractapi::CXXMethodTemplateSpecializationRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::CXXMethodTemplateSpecializationRecord, std::__1::default_delete<clang::extractapi::CXXMethodTemplateSpecializationRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::FunctionSignature&, clang::extractapi::AccessControl&, bool&)
Line
Count
Source
32
1
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
1
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
1
  if (Result.second)
37
1
    Result.first->second =
38
1
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
1
  auto *Record = Result.first->second.get();
41
1
  USRLookupTable.insert({USR, Record});
42
1
  return Record;
43
1
}
API.cpp:clang::extractapi::ObjCCategoryRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::ObjCCategoryRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::SymbolReference&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ObjCCategoryRecord, std::__1::default_delete<clang::extractapi::ObjCCategoryRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ObjCCategoryRecord, std::__1::default_delete<clang::extractapi::ObjCCategoryRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::SymbolReference&, bool&)
Line
Count
Source
32
7
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
7
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
7
  if (Result.second)
37
7
    Result.first->second =
38
7
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
7
  auto *Record = Result.first->second.get();
41
7
  USRLookupTable.insert({USR, Record});
42
7
  return Record;
43
7
}
API.cpp:clang::extractapi::ObjCInterfaceRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::ObjCInterfaceRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::SymbolReference&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ObjCInterfaceRecord, std::__1::default_delete<clang::extractapi::ObjCInterfaceRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ObjCInterfaceRecord, std::__1::default_delete<clang::extractapi::ObjCInterfaceRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, clang::LinkageInfo&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::SymbolReference&, bool&)
Line
Count
Source
32
32
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
32
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
32
  if (Result.second)
37
32
    Result.first->second =
38
32
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
32
  auto *Record = Result.first->second.get();
41
32
  USRLookupTable.insert({USR, Record});
42
32
  return Record;
43
32
}
API.cpp:clang::extractapi::ObjCProtocolRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::ObjCProtocolRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ObjCProtocolRecord, std::__1::default_delete<clang::extractapi::ObjCProtocolRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::ObjCProtocolRecord, std::__1::default_delete<clang::extractapi::ObjCProtocolRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&)
Line
Count
Source
32
15
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
15
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
15
  if (Result.second)
37
15
    Result.first->second =
38
15
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
15
  auto *Record = Result.first->second.get();
41
15
  USRLookupTable.insert({USR, Record});
42
15
  return Record;
43
15
}
API.cpp:clang::extractapi::MacroDefinitionRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::MacroDefinitionRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::MacroDefinitionRecord, std::__1::default_delete<clang::extractapi::MacroDefinitionRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::MacroDefinitionRecord, std::__1::default_delete<clang::extractapi::MacroDefinitionRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, bool&)
Line
Count
Source
32
24
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
24
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
24
  if (Result.second)
37
24
    Result.first->second =
38
24
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
24
  auto *Record = Result.first->second.get();
41
24
  USRLookupTable.insert({USR, Record});
42
24
  return Record;
43
24
}
API.cpp:clang::extractapi::TypedefRecord* (anonymous namespace)::addTopLevelRecord<clang::extractapi::TypedefRecord, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::SymbolReference&, bool&>(llvm::DenseMap<llvm::StringRef, clang::extractapi::APIRecord*, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, clang::extractapi::APIRecord*> >&, llvm::MapVector<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::TypedefRecord, std::__1::default_delete<clang::extractapi::TypedefRecord> >, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::__1::pair<llvm::StringRef, std::__1::unique_ptr<clang::extractapi::TypedefRecord, std::__1::default_delete<clang::extractapi::TypedefRecord> > >, 0u> >&, llvm::StringRef, llvm::StringRef&, clang::PresumedLoc&, clang::extractapi::AvailabilitySet&&, std::__1::vector<clang::RawComment::CommentLine, std::__1::allocator<clang::RawComment::CommentLine> > const&, clang::extractapi::DeclarationFragments&, clang::extractapi::DeclarationFragments&, clang::extractapi::SymbolReference&, bool&)
Line
Count
Source
32
21
                            StringRef USR, CtorArgsTy &&...CtorArgs) {
33
21
  auto Result = RecordMap.insert({USR, nullptr});
34
35
  // Create the record if it does not already exist
36
21
  if (Result.second)
37
21
    Result.first->second =
38
21
        std::make_unique<RecordTy>(USR, std::forward<CtorArgsTy>(CtorArgs)...);
39
40
21
  auto *Record = Result.first->second.get();
41
21
  USRLookupTable.insert({USR, Record});
42
21
  return Record;
43
21
}
44
45
} // namespace
46
47
NamespaceRecord *
48
APISet::addNamespace(APIRecord *Parent, StringRef Name, StringRef USR,
49
                     PresumedLoc Loc, AvailabilitySet Availability,
50
                     LinkageInfo Linkage, const DocComment &Comment,
51
                     DeclarationFragments Declaration,
52
3
                     DeclarationFragments SubHeading, bool IsFromSystemHeader) {
53
3
  auto *Record = addTopLevelRecord(
54
3
      USRBasedLookupTable, Namespaces, USR, Name, Loc, std::move(Availability),
55
3
      Linkage, Comment, Declaration, SubHeading, IsFromSystemHeader);
56
57
3
  if (Parent)
58
1
    Record->ParentInformation = APIRecord::HierarchyInformation(
59
1
        Parent->USR, Parent->Name, Parent->getKind(), Parent);
60
3
  return Record;
61
3
}
62
63
GlobalVariableRecord *
64
APISet::addGlobalVar(StringRef Name, StringRef USR, PresumedLoc Loc,
65
                     AvailabilitySet Availabilities, LinkageInfo Linkage,
66
                     const DocComment &Comment, DeclarationFragments Fragments,
67
13
                     DeclarationFragments SubHeading, bool IsFromSystemHeader) {
68
13
  return addTopLevelRecord(USRBasedLookupTable, GlobalVariables, USR, Name, Loc,
69
13
                           std::move(Availabilities), Linkage, Comment,
70
13
                           Fragments, SubHeading, IsFromSystemHeader);
71
13
}
72
73
GlobalVariableTemplateRecord *APISet::addGlobalVariableTemplate(
74
    StringRef Name, StringRef USR, PresumedLoc Loc,
75
    AvailabilitySet Availability, LinkageInfo Linkage,
76
    const DocComment &Comment, DeclarationFragments Declaration,
77
    DeclarationFragments SubHeading, Template Template,
78
3
    bool IsFromSystemHeader) {
79
3
  return addTopLevelRecord(USRBasedLookupTable, GlobalVariableTemplates, USR,
80
3
                           Name, Loc, std::move(Availability), Linkage, Comment,
81
3
                           Declaration, SubHeading, Template,
82
3
                           IsFromSystemHeader);
83
3
}
84
85
GlobalFunctionRecord *APISet::addGlobalFunction(
86
    StringRef Name, StringRef USR, PresumedLoc Loc,
87
    AvailabilitySet Availabilities, LinkageInfo Linkage,
88
    const DocComment &Comment, DeclarationFragments Fragments,
89
    DeclarationFragments SubHeading, FunctionSignature Signature,
90
26
    bool IsFromSystemHeader) {
91
26
  return addTopLevelRecord(USRBasedLookupTable, GlobalFunctions, USR, Name, Loc,
92
26
                           std::move(Availabilities), Linkage, Comment,
93
26
                           Fragments, SubHeading, Signature,
94
26
                           IsFromSystemHeader);
95
26
}
96
97
GlobalFunctionTemplateRecord *APISet::addGlobalFunctionTemplate(
98
    StringRef Name, StringRef USR, PresumedLoc Loc,
99
    AvailabilitySet Availability, LinkageInfo Linkage,
100
    const DocComment &Comment, DeclarationFragments Declaration,
101
    DeclarationFragments SubHeading, FunctionSignature Signature,
102
3
    Template Template, bool IsFromSystemHeader) {
103
3
  return addTopLevelRecord(USRBasedLookupTable, GlobalFunctionTemplates, USR,
104
3
                           Name, Loc, std::move(Availability), Linkage, Comment,
105
3
                           Declaration, SubHeading, Signature, Template,
106
3
                           IsFromSystemHeader);
107
3
}
108
109
GlobalFunctionTemplateSpecializationRecord *
110
APISet::addGlobalFunctionTemplateSpecialization(
111
    StringRef Name, StringRef USR, PresumedLoc Loc,
112
    AvailabilitySet Availability, LinkageInfo Linkage,
113
    const DocComment &Comment, DeclarationFragments Declaration,
114
    DeclarationFragments SubHeading, FunctionSignature Signature,
115
1
    bool IsFromSystemHeader) {
116
1
  return addTopLevelRecord(
117
1
      USRBasedLookupTable, GlobalFunctionTemplateSpecializations, USR, Name,
118
1
      Loc, std::move(Availability), Linkage, Comment, Declaration, SubHeading,
119
1
      Signature, IsFromSystemHeader);
120
1
}
121
122
EnumConstantRecord *APISet::addEnumConstant(EnumRecord *Enum, StringRef Name,
123
                                            StringRef USR, PresumedLoc Loc,
124
                                            AvailabilitySet Availabilities,
125
                                            const DocComment &Comment,
126
                                            DeclarationFragments Declaration,
127
                                            DeclarationFragments SubHeading,
128
15
                                            bool IsFromSystemHeader) {
129
15
  auto Record = std::make_unique<EnumConstantRecord>(
130
15
      USR, Name, Loc, std::move(Availabilities), Comment, Declaration,
131
15
      SubHeading, IsFromSystemHeader);
132
15
  Record->ParentInformation = APIRecord::HierarchyInformation(
133
15
      Enum->USR, Enum->Name, Enum->getKind(), Enum);
134
15
  USRBasedLookupTable.insert({USR, Record.get()});
135
15
  return Enum->Constants.emplace_back(std::move(Record)).get();
136
15
}
137
138
EnumRecord *APISet::addEnum(StringRef Name, StringRef USR, PresumedLoc Loc,
139
                            AvailabilitySet Availabilities,
140
                            const DocComment &Comment,
141
                            DeclarationFragments Declaration,
142
                            DeclarationFragments SubHeading,
143
7
                            bool IsFromSystemHeader) {
144
7
  return addTopLevelRecord(USRBasedLookupTable, Enums, USR, Name, Loc,
145
7
                           std::move(Availabilities), Comment, Declaration,
146
7
                           SubHeading, IsFromSystemHeader);
147
7
}
148
149
StructFieldRecord *APISet::addStructField(StructRecord *Struct, StringRef Name,
150
                                          StringRef USR, PresumedLoc Loc,
151
                                          AvailabilitySet Availabilities,
152
                                          const DocComment &Comment,
153
                                          DeclarationFragments Declaration,
154
                                          DeclarationFragments SubHeading,
155
22
                                          bool IsFromSystemHeader) {
156
22
  auto Record = std::make_unique<StructFieldRecord>(
157
22
      USR, Name, Loc, std::move(Availabilities), Comment, Declaration,
158
22
      SubHeading, IsFromSystemHeader);
159
22
  Record->ParentInformation = APIRecord::HierarchyInformation(
160
22
      Struct->USR, Struct->Name, Struct->getKind(), Struct);
161
22
  USRBasedLookupTable.insert({USR, Record.get()});
162
22
  return Struct->Fields.emplace_back(std::move(Record)).get();
163
22
}
164
165
StructRecord *APISet::addStruct(StringRef Name, StringRef USR, PresumedLoc Loc,
166
                                AvailabilitySet Availabilities,
167
                                const DocComment &Comment,
168
                                DeclarationFragments Declaration,
169
                                DeclarationFragments SubHeading,
170
21
                                bool IsFromSystemHeader) {
171
21
  return addTopLevelRecord(USRBasedLookupTable, Structs, USR, Name, Loc,
172
21
                           std::move(Availabilities), Comment, Declaration,
173
21
                           SubHeading, IsFromSystemHeader);
174
21
}
175
176
StaticFieldRecord *
177
APISet::addStaticField(StringRef Name, StringRef USR, PresumedLoc Loc,
178
                       AvailabilitySet Availabilities, LinkageInfo Linkage,
179
                       const DocComment &Comment,
180
                       DeclarationFragments Declaration,
181
                       DeclarationFragments SubHeading, SymbolReference Context,
182
0
                       AccessControl Access, bool IsFromSystemHeader) {
183
0
  return addTopLevelRecord(USRBasedLookupTable, StaticFields, USR, Name, Loc,
184
0
                           std::move(Availabilities), Linkage, Comment,
185
0
                           Declaration, SubHeading, Context, Access,
186
0
                           IsFromSystemHeader);
187
0
}
188
189
CXXFieldRecord *
190
APISet::addCXXField(APIRecord *CXXClass, StringRef Name, StringRef USR,
191
                    PresumedLoc Loc, AvailabilitySet Availabilities,
192
                    const DocComment &Comment, DeclarationFragments Declaration,
193
                    DeclarationFragments SubHeading, AccessControl Access,
194
4
                    bool IsFromSystemHeader) {
195
4
  auto *Record = addTopLevelRecord(
196
4
      USRBasedLookupTable, CXXFields, USR, Name, Loc, std::move(Availabilities),
197
4
      Comment, Declaration, SubHeading, Access, IsFromSystemHeader);
198
4
  Record->ParentInformation = APIRecord::HierarchyInformation(
199
4
      CXXClass->USR, CXXClass->Name, CXXClass->getKind(), CXXClass);
200
4
  return Record;
201
4
}
202
203
CXXFieldTemplateRecord *APISet::addCXXFieldTemplate(
204
    APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
205
    AvailabilitySet Availability, const DocComment &Comment,
206
    DeclarationFragments Declaration, DeclarationFragments SubHeading,
207
1
    AccessControl Access, Template Template, bool IsFromSystemHeader) {
208
1
  auto *Record =
209
1
      addTopLevelRecord(USRBasedLookupTable, CXXFieldTemplates, USR, Name, Loc,
210
1
                        std::move(Availability), Comment, Declaration,
211
1
                        SubHeading, Access, Template, IsFromSystemHeader);
212
1
  Record->ParentInformation = APIRecord::HierarchyInformation(
213
1
      Parent->USR, Parent->Name, Parent->getKind(), Parent);
214
215
1
  return Record;
216
1
}
217
218
CXXClassRecord *
219
APISet::addCXXClass(APIRecord *Parent, StringRef Name, StringRef USR,
220
                    PresumedLoc Loc, AvailabilitySet Availabilities,
221
                    const DocComment &Comment, DeclarationFragments Declaration,
222
                    DeclarationFragments SubHeading, APIRecord::RecordKind Kind,
223
15
                    AccessControl Access, bool IsFromSystemHeader) {
224
15
  auto *Record =
225
15
      addTopLevelRecord(USRBasedLookupTable, CXXClasses, USR, Name, Loc,
226
15
                        std::move(Availabilities), Comment, Declaration,
227
15
                        SubHeading, Kind, Access, IsFromSystemHeader);
228
15
  if (Parent)
229
1
    Record->ParentInformation = APIRecord::HierarchyInformation(
230
1
        Parent->USR, Parent->Name, Parent->getKind(), Parent);
231
15
  return Record;
232
15
}
233
234
ClassTemplateRecord *APISet::addClassTemplate(
235
    APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
236
    AvailabilitySet Availability, const DocComment &Comment,
237
    DeclarationFragments Declaration, DeclarationFragments SubHeading,
238
4
    Template Template, AccessControl Access, bool IsFromSystemHeader) {
239
4
  auto *Record =
240
4
      addTopLevelRecord(USRBasedLookupTable, ClassTemplates, USR, Name, Loc,
241
4
                        std::move(Availability), Comment, Declaration,
242
4
                        SubHeading, Template, Access, IsFromSystemHeader);
243
4
  if (Parent)
244
0
    Record->ParentInformation = APIRecord::HierarchyInformation(
245
0
        Parent->USR, Parent->Name, Parent->getKind(), Parent);
246
4
  return Record;
247
4
}
248
249
ClassTemplateSpecializationRecord *APISet::addClassTemplateSpecialization(
250
    APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
251
    AvailabilitySet Availability, const DocComment &Comment,
252
    DeclarationFragments Declaration, DeclarationFragments SubHeading,
253
1
    AccessControl Access, bool IsFromSystemHeader) {
254
1
  auto *Record =
255
1
      addTopLevelRecord(USRBasedLookupTable, ClassTemplateSpecializations, USR,
256
1
                        Name, Loc, std::move(Availability), Comment,
257
1
                        Declaration, SubHeading, Access, IsFromSystemHeader);
258
1
  if (Parent)
259
0
    Record->ParentInformation = APIRecord::HierarchyInformation(
260
0
        Parent->USR, Parent->Name, Parent->getKind(), Parent);
261
1
  return Record;
262
1
}
263
264
ClassTemplatePartialSpecializationRecord *
265
APISet::addClassTemplatePartialSpecialization(
266
    APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
267
    AvailabilitySet Availability, const DocComment &Comment,
268
    DeclarationFragments Declaration, DeclarationFragments SubHeading,
269
1
    Template Template, AccessControl Access, bool IsFromSystemHeader) {
270
1
  auto *Record = addTopLevelRecord(
271
1
      USRBasedLookupTable, ClassTemplatePartialSpecializations, USR, Name, Loc,
272
1
      std::move(Availability), Comment, Declaration, SubHeading, Template,
273
1
      Access, IsFromSystemHeader);
274
1
  if (Parent)
275
0
    Record->ParentInformation = APIRecord::HierarchyInformation(
276
0
        Parent->USR, Parent->Name, Parent->getKind(), Parent);
277
1
  return Record;
278
1
}
279
280
GlobalVariableTemplateSpecializationRecord *
281
APISet::addGlobalVariableTemplateSpecialization(
282
    StringRef Name, StringRef USR, PresumedLoc Loc,
283
    AvailabilitySet Availability, LinkageInfo Linkage,
284
    const DocComment &Comment, DeclarationFragments Declaration,
285
1
    DeclarationFragments SubHeading, bool IsFromSystemHeader) {
286
1
  return addTopLevelRecord(USRBasedLookupTable,
287
1
                           GlobalVariableTemplateSpecializations, USR, Name,
288
1
                           Loc, std::move(Availability), Linkage, Comment,
289
1
                           Declaration, SubHeading, IsFromSystemHeader);
290
1
}
291
292
GlobalVariableTemplatePartialSpecializationRecord *
293
APISet::addGlobalVariableTemplatePartialSpecialization(
294
    StringRef Name, StringRef USR, PresumedLoc Loc,
295
    AvailabilitySet Availability, LinkageInfo Linkage,
296
    const DocComment &Comment, DeclarationFragments Declaration,
297
    DeclarationFragments SubHeading, Template Template,
298
1
    bool IsFromSystemHeader) {
299
1
  return addTopLevelRecord(
300
1
      USRBasedLookupTable, GlobalVariableTemplatePartialSpecializations, USR,
301
1
      Name, Loc, std::move(Availability), Linkage, Comment, Declaration,
302
1
      SubHeading, Template, IsFromSystemHeader);
303
1
}
304
305
ConceptRecord *APISet::addConcept(StringRef Name, StringRef USR,
306
                                  PresumedLoc Loc, AvailabilitySet Availability,
307
                                  const DocComment &Comment,
308
                                  DeclarationFragments Declaration,
309
                                  DeclarationFragments SubHeading,
310
1
                                  Template Template, bool IsFromSystemHeader) {
311
1
  return addTopLevelRecord(USRBasedLookupTable, Concepts, USR, Name, Loc,
312
1
                           std::move(Availability), Comment, Declaration,
313
1
                           SubHeading, Template, IsFromSystemHeader);
314
1
}
315
316
CXXMethodRecord *APISet::addCXXInstanceMethod(
317
    APIRecord *CXXClassRecord, StringRef Name, StringRef USR, PresumedLoc Loc,
318
    AvailabilitySet Availability, const DocComment &Comment,
319
    DeclarationFragments Declaration, DeclarationFragments SubHeading,
320
    FunctionSignature Signature, AccessControl Access,
321
8
    bool IsFromSystemHeader) {
322
8
  CXXMethodRecord *Record =
323
8
      addTopLevelRecord(USRBasedLookupTable, CXXInstanceMethods, USR, Name, Loc,
324
8
                        std::move(Availability), Comment, Declaration,
325
8
                        SubHeading, Signature, Access, IsFromSystemHeader);
326
327
8
  Record->ParentInformation = APIRecord::HierarchyInformation(
328
8
      CXXClassRecord->USR, CXXClassRecord->Name, CXXClassRecord->getKind(),
329
8
      CXXClassRecord);
330
8
  return Record;
331
8
}
332
333
CXXMethodRecord *APISet::addCXXStaticMethod(
334
    APIRecord *CXXClassRecord, StringRef Name, StringRef USR, PresumedLoc Loc,
335
    AvailabilitySet Availability, const DocComment &Comment,
336
    DeclarationFragments Declaration, DeclarationFragments SubHeading,
337
    FunctionSignature Signature, AccessControl Access,
338
1
    bool IsFromSystemHeader) {
339
1
  CXXMethodRecord *Record =
340
1
      addTopLevelRecord(USRBasedLookupTable, CXXStaticMethods, USR, Name, Loc,
341
1
                        std::move(Availability), Comment, Declaration,
342
1
                        SubHeading, Signature, Access, IsFromSystemHeader);
343
344
1
  Record->ParentInformation = APIRecord::HierarchyInformation(
345
1
      CXXClassRecord->USR, CXXClassRecord->Name, CXXClassRecord->getKind(),
346
1
      CXXClassRecord);
347
1
  return Record;
348
1
}
349
350
CXXMethodTemplateRecord *APISet::addCXXMethodTemplate(
351
    APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
352
    AvailabilitySet Availability, const DocComment &Comment,
353
    DeclarationFragments Declaration, DeclarationFragments SubHeading,
354
    FunctionSignature Signature, AccessControl Access, Template Template,
355
2
    bool IsFromSystemHeader) {
356
2
  auto *Record = addTopLevelRecord(USRBasedLookupTable, CXXMethodTemplates, USR,
357
2
                                   Name, Loc, std::move(Availability), Comment,
358
2
                                   Declaration, SubHeading, Signature, Access,
359
2
                                   Template, IsFromSystemHeader);
360
2
  Record->ParentInformation = APIRecord::HierarchyInformation(
361
2
      Parent->USR, Parent->Name, Parent->getKind(), Parent);
362
363
2
  return Record;
364
2
}
365
366
CXXMethodTemplateSpecializationRecord *APISet::addCXXMethodTemplateSpec(
367
    APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
368
    AvailabilitySet Availability, const DocComment &Comment,
369
    DeclarationFragments Declaration, DeclarationFragments SubHeading,
370
    FunctionSignature Signature, AccessControl Access,
371
1
    bool IsFromSystemHeader) {
372
373
1
  auto *Record = addTopLevelRecord(
374
1
      USRBasedLookupTable, CXXMethodTemplateSpecializations, USR, Name, Loc,
375
1
      std::move(Availability), Comment, Declaration, SubHeading, Signature,
376
1
      Access, IsFromSystemHeader);
377
1
  Record->ParentInformation = APIRecord::HierarchyInformation(
378
1
      Parent->USR, Parent->Name, Parent->getKind(), Parent);
379
380
1
  return Record;
381
1
}
382
383
ObjCCategoryRecord *APISet::addObjCCategory(
384
    StringRef Name, StringRef USR, PresumedLoc Loc,
385
    AvailabilitySet Availabilities, const DocComment &Comment,
386
    DeclarationFragments Declaration, DeclarationFragments SubHeading,
387
    SymbolReference Interface, bool IsFromSystemHeader,
388
7
    bool IsFromExternalModule) {
389
  // Create the category record.
390
7
  auto *Record =
391
7
      addTopLevelRecord(USRBasedLookupTable, ObjCCategories, USR, Name, Loc,
392
7
                        std::move(Availabilities), Comment, Declaration,
393
7
                        SubHeading, Interface, IsFromSystemHeader);
394
395
7
  Record->IsFromExternalModule = IsFromExternalModule;
396
397
7
  auto It = ObjCInterfaces.find(Interface.USR);
398
7
  if (It != ObjCInterfaces.end())
399
3
    It->second->Categories.push_back(Record);
400
401
7
  return Record;
402
7
}
403
404
ObjCInterfaceRecord *
405
APISet::addObjCInterface(StringRef Name, StringRef USR, PresumedLoc Loc,
406
                         AvailabilitySet Availabilities, LinkageInfo Linkage,
407
                         const DocComment &Comment,
408
                         DeclarationFragments Declaration,
409
                         DeclarationFragments SubHeading,
410
32
                         SymbolReference SuperClass, bool IsFromSystemHeader) {
411
32
  return addTopLevelRecord(USRBasedLookupTable, ObjCInterfaces, USR, Name, Loc,
412
32
                           std::move(Availabilities), Linkage, Comment,
413
32
                           Declaration, SubHeading, SuperClass,
414
32
                           IsFromSystemHeader);
415
32
}
416
417
ObjCMethodRecord *APISet::addObjCMethod(
418
    ObjCContainerRecord *Container, StringRef Name, StringRef USR,
419
    PresumedLoc Loc, AvailabilitySet Availabilities, const DocComment &Comment,
420
    DeclarationFragments Declaration, DeclarationFragments SubHeading,
421
    FunctionSignature Signature, bool IsInstanceMethod,
422
37
    bool IsFromSystemHeader) {
423
37
  std::unique_ptr<ObjCMethodRecord> Record;
424
37
  if (IsInstanceMethod)
425
35
    Record = std::make_unique<ObjCInstanceMethodRecord>(
426
35
        USR, Name, Loc, std::move(Availabilities), Comment, Declaration,
427
35
        SubHeading, Signature, IsFromSystemHeader);
428
2
  else
429
2
    Record = std::make_unique<ObjCClassMethodRecord>(
430
2
        USR, Name, Loc, std::move(Availabilities), Comment, Declaration,
431
2
        SubHeading, Signature, IsFromSystemHeader);
432
433
37
  Record->ParentInformation = APIRecord::HierarchyInformation(
434
37
      Container->USR, Container->Name, Container->getKind(), Container);
435
37
  USRBasedLookupTable.insert({USR, Record.get()});
436
37
  return Container->Methods.emplace_back(std::move(Record)).get();
437
37
}
438
439
ObjCPropertyRecord *APISet::addObjCProperty(
440
    ObjCContainerRecord *Container, StringRef Name, StringRef USR,
441
    PresumedLoc Loc, AvailabilitySet Availabilities, const DocComment &Comment,
442
    DeclarationFragments Declaration, DeclarationFragments SubHeading,
443
    ObjCPropertyRecord::AttributeKind Attributes, StringRef GetterName,
444
    StringRef SetterName, bool IsOptional, bool IsInstanceProperty,
445
34
    bool IsFromSystemHeader) {
446
34
  std::unique_ptr<ObjCPropertyRecord> Record;
447
34
  if (IsInstanceProperty)
448
31
    Record = std::make_unique<ObjCInstancePropertyRecord>(
449
31
        USR, Name, Loc, std::move(Availabilities), Comment, Declaration,
450
31
        SubHeading, Attributes, GetterName, SetterName, IsOptional,
451
31
        IsFromSystemHeader);
452
3
  else
453
3
    Record = std::make_unique<ObjCClassPropertyRecord>(
454
3
        USR, Name, Loc, std::move(Availabilities), Comment, Declaration,
455
3
        SubHeading, Attributes, GetterName, SetterName, IsOptional,
456
3
        IsFromSystemHeader);
457
34
  Record->ParentInformation = APIRecord::HierarchyInformation(
458
34
      Container->USR, Container->Name, Container->getKind(), Container);
459
34
  USRBasedLookupTable.insert({USR, Record.get()});
460
34
  return Container->Properties.emplace_back(std::move(Record)).get();
461
34
}
462
463
ObjCInstanceVariableRecord *APISet::addObjCInstanceVariable(
464
    ObjCContainerRecord *Container, StringRef Name, StringRef USR,
465
    PresumedLoc Loc, AvailabilitySet Availabilities, const DocComment &Comment,
466
    DeclarationFragments Declaration, DeclarationFragments SubHeading,
467
1
    ObjCInstanceVariableRecord::AccessControl Access, bool IsFromSystemHeader) {
468
1
  auto Record = std::make_unique<ObjCInstanceVariableRecord>(
469
1
      USR, Name, Loc, std::move(Availabilities), Comment, Declaration,
470
1
      SubHeading, Access, IsFromSystemHeader);
471
1
  Record->ParentInformation = APIRecord::HierarchyInformation(
472
1
      Container->USR, Container->Name, Container->getKind(), Container);
473
1
  USRBasedLookupTable.insert({USR, Record.get()});
474
1
  return Container->Ivars.emplace_back(std::move(Record)).get();
475
1
}
476
477
ObjCProtocolRecord *APISet::addObjCProtocol(StringRef Name, StringRef USR,
478
                                            PresumedLoc Loc,
479
                                            AvailabilitySet Availabilities,
480
                                            const DocComment &Comment,
481
                                            DeclarationFragments Declaration,
482
                                            DeclarationFragments SubHeading,
483
15
                                            bool IsFromSystemHeader) {
484
15
  return addTopLevelRecord(USRBasedLookupTable, ObjCProtocols, USR, Name, Loc,
485
15
                           std::move(Availabilities), Comment, Declaration,
486
15
                           SubHeading, IsFromSystemHeader);
487
15
}
488
489
MacroDefinitionRecord *
490
APISet::addMacroDefinition(StringRef Name, StringRef USR, PresumedLoc Loc,
491
                           DeclarationFragments Declaration,
492
                           DeclarationFragments SubHeading,
493
24
                           bool IsFromSystemHeader) {
494
24
  return addTopLevelRecord(USRBasedLookupTable, Macros, USR, Name, Loc,
495
24
                           Declaration, SubHeading, IsFromSystemHeader);
496
24
}
497
498
TypedefRecord *
499
APISet::addTypedef(StringRef Name, StringRef USR, PresumedLoc Loc,
500
                   AvailabilitySet Availabilities, const DocComment &Comment,
501
                   DeclarationFragments Declaration,
502
                   DeclarationFragments SubHeading,
503
21
                   SymbolReference UnderlyingType, bool IsFromSystemHeader) {
504
21
  return addTopLevelRecord(USRBasedLookupTable, Typedefs, USR, Name, Loc,
505
21
                           std::move(Availabilities), Comment, Declaration,
506
21
                           SubHeading, UnderlyingType, IsFromSystemHeader);
507
21
}
508
509
74
APIRecord *APISet::findRecordForUSR(StringRef USR) const {
510
74
  if (USR.empty())
511
0
    return nullptr;
512
513
74
  return USRBasedLookupTable.lookup(USR);
514
74
}
515
516
332
StringRef APISet::recordUSR(const Decl *D) {
517
332
  SmallString<128> USR;
518
332
  index::generateUSRForDecl(D, USR);
519
332
  return copyString(USR);
520
332
}
521
522
StringRef APISet::recordUSRForMacro(StringRef Name, SourceLocation SL,
523
24
                                    const SourceManager &SM) {
524
24
  SmallString<128> USR;
525
24
  index::generateUSRForMacro(Name, SL, SM, USR);
526
24
  return copyString(USR);
527
24
}
528
529
516
StringRef APISet::copyString(StringRef String) {
530
516
  if (String.empty())
531
4
    return {};
532
533
  // No need to allocate memory and copy if the string has already been stored.
534
512
  if (StringAllocator.identifyObject(String.data()))
535
0
    return String;
536
537
512
  void *Ptr = StringAllocator.Allocate(String.size(), 1);
538
512
  memcpy(Ptr, String.data(), String.size());
539
512
  return StringRef(reinterpret_cast<const char *>(Ptr), String.size());
540
512
}
541
542
255
APIRecord::~APIRecord() {}
543
40
ObjCContainerRecord::~ObjCContainerRecord() {}
544
27
ObjCMethodRecord::~ObjCMethodRecord() {}
545
30
ObjCPropertyRecord::~ObjCPropertyRecord() {}
546
12
CXXMethodRecord::~CXXMethodRecord() {}
547
548
0
void GlobalFunctionRecord::anchor() {}
549
0
void GlobalVariableRecord::anchor() {}
550
0
void EnumConstantRecord::anchor() {}
551
0
void EnumRecord::anchor() {}
552
0
void StructFieldRecord::anchor() {}
553
0
void StructRecord::anchor() {}
554
0
void CXXFieldRecord::anchor() {}
555
0
void CXXClassRecord::anchor() {}
556
0
void CXXConstructorRecord::anchor() {}
557
0
void CXXDestructorRecord::anchor() {}
558
0
void CXXInstanceMethodRecord::anchor() {}
559
0
void CXXStaticMethodRecord::anchor() {}
560
0
void ObjCInstancePropertyRecord::anchor() {}
561
0
void ObjCClassPropertyRecord::anchor() {}
562
0
void ObjCInstanceVariableRecord::anchor() {}
563
0
void ObjCInstanceMethodRecord::anchor() {}
564
0
void ObjCClassMethodRecord::anchor() {}
565
0
void ObjCCategoryRecord::anchor() {}
566
0
void ObjCInterfaceRecord::anchor() {}
567
0
void ObjCProtocolRecord::anchor() {}
568
0
void MacroDefinitionRecord::anchor() {}
569
0
void TypedefRecord::anchor() {}