clang 23.0.0git
JSONFormat.h
Go to the documentation of this file.
1//===- JSONFormat.h ---------------------------------------------*- 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// JSON serialization format implementation.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_SERIALIZATION_JSONFORMAT_H
14#define LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_SERIALIZATION_JSONFORMAT_H
15
19#include "llvm/ADT/STLFunctionalExtras.h"
20#include "llvm/Support/JSON.h"
21#include "llvm/Support/Registry.h"
22
23#include <set>
24
25namespace clang::ssaf {
26
27class EntityIdTable;
28class EntitySummary;
29class SummaryName;
30
31class JSONFormat final : public SerializationFormat {
32 using Array = llvm::json::Array;
33 using Object = llvm::json::Object;
34 using Value = llvm::json::Value;
35
37
38public:
39 llvm::Expected<TUSummary> readTUSummary(llvm::StringRef Path) override;
40
41 llvm::Error writeTUSummary(const TUSummary &Summary,
42 llvm::StringRef Path) override;
43
45 readTUSummaryEncoding(llvm::StringRef Path) override;
46
47 llvm::Error writeTUSummaryEncoding(const TUSummaryEncoding &SummaryEncoding,
48 llvm::StringRef Path) override;
49
50 llvm::Expected<LUSummary> readLUSummary(llvm::StringRef Path) override;
51
52 llvm::Error writeLUSummary(const LUSummary &Summary,
53 llvm::StringRef Path) override;
54
56 readLUSummaryEncoding(llvm::StringRef Path) override;
57
58 llvm::Error writeLUSummaryEncoding(const LUSummaryEncoding &SummaryEncoding,
59 llvm::StringRef Path) override;
60
62 llvm::function_ref<void(llvm::StringRef Name, llvm::StringRef Desc)>
63 Callback) const override;
64
65 using EntityIdToJSONFn = llvm::function_ref<Object(EntityId)>;
67 llvm::function_ref<llvm::Expected<EntityId>(const Object &)>;
68
70 llvm::function_ref<Object(const EntitySummary &, EntityIdToJSONFn)>;
72 llvm::function_ref<llvm::Expected<std::unique_ptr<EntitySummary>>(
73 const Object &, EntityIdTable &, EntityIdFromJSONFn)>;
74
76
77private:
78 static std::map<SummaryName, FormatInfo> initFormatInfos();
79 const std::map<SummaryName, FormatInfo> FormatInfos = initFormatInfos();
80
81 EntityId entityIdFromJSON(const uint64_t EntityIdIndex) const;
82 uint64_t entityIdToJSON(EntityId EI) const;
83
85 entityIdFromJSONObject(const Object &EntityIdObject);
86 static Object entityIdToJSONObject(EntityId EI);
87
89 buildNamespaceFromJSON(const Object &BuildNamespaceObject) const;
90 Object buildNamespaceToJSON(const BuildNamespace &BN) const;
91
93 nestedBuildNamespaceFromJSON(const Array &NestedBuildNamespaceArray) const;
94 Array nestedBuildNamespaceToJSON(const NestedBuildNamespace &NBN) const;
95
97 entityNameFromJSON(const Object &EntityNameObject) const;
98 Object entityNameToJSON(const EntityName &EN) const;
99
101 entityLinkageFromJSON(const Object &EntityLinkageObject) const;
102 Object entityLinkageToJSON(const EntityLinkage &EL) const;
103
105 entityIdTableEntryFromJSON(const Object &EntityIdTableEntryObject) const;
107 entityIdTableFromJSON(const Array &EntityIdTableArray) const;
108 Object entityIdTableEntryToJSON(const EntityName &EN, EntityId EI) const;
109 Array entityIdTableToJSON(const EntityIdTable &IdTable) const;
110
112 linkageTableEntryFromJSON(const Object &LinkageTableEntryObject) const;
113 Object linkageTableEntryToJSON(EntityId EI, const EntityLinkage &EL) const;
114
116 linkageTableFromJSON(const Array &LinkageTableArray,
117 std::set<EntityId> ExpectedIds) const;
118 Array linkageTableToJSON(
119 const std::map<EntityId, EntityLinkage> &LinkageTable) const;
120
122 entitySummaryFromJSON(const SummaryName &SN,
123 const Object &EntitySummaryObject,
124 EntityIdTable &IdTable) const;
125 llvm::Expected<Object> entitySummaryToJSON(const SummaryName &SN,
126 const EntitySummary &ES) const;
127
129 entityDataMapEntryFromJSON(const Object &EntityDataMapEntryObject,
130 const SummaryName &SN,
131 EntityIdTable &IdTable) const;
133 entityDataMapEntryToJSON(const EntityId EI,
134 const std::unique_ptr<EntitySummary> &EntitySummary,
135 const SummaryName &SN) const;
137 entityDataMapFromJSON(const SummaryName &SN, const Array &EntityDataArray,
138 EntityIdTable &IdTable) const;
140 entityDataMapToJSON(const SummaryName &SN,
141 const std::map<EntityId, std::unique_ptr<EntitySummary>>
142 &EntityDataMap) const;
143
144 llvm::Expected<std::pair<SummaryName,
145 std::map<EntityId, std::unique_ptr<EntitySummary>>>>
146 summaryDataMapEntryFromJSON(const Object &SummaryDataObject,
147 EntityIdTable &IdTable) const;
148 llvm::Expected<Object> summaryDataMapEntryToJSON(
149 const SummaryName &SN,
150 const std::map<EntityId, std::unique_ptr<EntitySummary>> &SD) const;
151
153 std::map<SummaryName, std::map<EntityId, std::unique_ptr<EntitySummary>>>>
154 summaryDataMapFromJSON(const Array &SummaryDataArray,
155 EntityIdTable &IdTable) const;
156 llvm::Expected<Array> summaryDataMapToJSON(
157 const std::map<SummaryName,
158 std::map<EntityId, std::unique_ptr<EntitySummary>>>
159 &SummaryDataMap) const;
160
162 encodingDataMapEntryFromJSON(const Object &EntityDataMapEntryObject) const;
163 Object encodingDataMapEntryToJSON(
164 EntityId EI,
165 const std::unique_ptr<EntitySummaryEncoding> &Encoding) const;
166
168 encodingDataMapFromJSON(const Array &EntityDataArray) const;
169 Array encodingDataMapToJSON(
170 const std::map<EntityId, std::unique_ptr<EntitySummaryEncoding>>
171 &EncodingDataMap) const;
172
173 llvm::Expected<std::pair<
174 SummaryName, std::map<EntityId, std::unique_ptr<EntitySummaryEncoding>>>>
175 encodingSummaryDataMapEntryFromJSON(
176 const Object &SummaryDataMapEntryObject) const;
177 Object encodingSummaryDataMapEntryToJSON(
178 const SummaryName &SN,
179 const std::map<EntityId, std::unique_ptr<EntitySummaryEncoding>>
180 &EncodingMap) const;
181
182 llvm::Expected<std::map<
183 SummaryName, std::map<EntityId, std::unique_ptr<EntitySummaryEncoding>>>>
184 encodingSummaryDataMapFromJSON(const Array &SummaryDataArray) const;
185 Array encodingSummaryDataMapToJSON(
186 const std::map<SummaryName,
187 std::map<EntityId, std::unique_ptr<EntitySummaryEncoding>>>
188 &EncodingSummaryDataMap) const;
189};
190
191} // namespace clang::ssaf
192
193namespace llvm {
194extern template class CLANG_TEMPLATE_ABI
195 Registry<clang::ssaf::JSONFormat::FormatInfo>;
196} // namespace llvm
197
198#endif // LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_SERIALIZATION_JSONFORMAT_H
Represents a single namespace in the build process.
Manages entity name interning and provides efficient EntityId handles.
Lightweight opaque handle representing an entity in an EntityIdTable.
Definition EntityId.h:31
Represents the linkage properties of an entity in the program model.
Uniquely identifies an entity in a program.
Definition EntityName.h:28
Base class for analysis-specific summary data.
llvm::Expected< TUSummary > readTUSummary(llvm::StringRef Path) override
Definition TUSummary.cpp:21
llvm::Error writeLUSummary(const LUSummary &Summary, llvm::StringRef Path) override
llvm::Expected< LUSummary > readLUSummary(llvm::StringRef Path) override
Definition LUSummary.cpp:21
llvm::function_ref< Object(const EntitySummary &, EntityIdToJSONFn)> SerializerFn
Definition JSONFormat.h:69
llvm::Expected< LUSummaryEncoding > readLUSummaryEncoding(llvm::StringRef Path) override
llvm::function_ref< llvm::Expected< std::unique_ptr< EntitySummary > >( const Object &, EntityIdTable &, EntityIdFromJSONFn)> DeserializerFn
Definition JSONFormat.h:71
llvm::function_ref< llvm::Expected< EntityId >(const Object &)> EntityIdFromJSONFn
Definition JSONFormat.h:66
FormatInfoEntry< SerializerFn, DeserializerFn > FormatInfo
Definition JSONFormat.h:75
friend class JSONEntitySummaryEncoding
Definition JSONFormat.h:36
llvm::Error writeTUSummary(const TUSummary &Summary, llvm::StringRef Path) override
llvm::function_ref< Object(EntityId)> EntityIdToJSONFn
Definition JSONFormat.h:65
llvm::Expected< TUSummaryEncoding > readTUSummaryEncoding(llvm::StringRef Path) override
llvm::Error writeLUSummaryEncoding(const LUSummaryEncoding &SummaryEncoding, llvm::StringRef Path) override
llvm::Error writeTUSummaryEncoding(const TUSummaryEncoding &SummaryEncoding, llvm::StringRef Path) override
void forEachRegisteredAnalysis(llvm::function_ref< void(llvm::StringRef Name, llvm::StringRef Desc)> Callback) const override
Invokes Callback once for each analysis that has registered serialization support for this format.
Represents a link unit summary in its serialized encoding.
Represents a link unit (LU) summary containing merged entity summaries.
Definition LUSummary.h:33
Represents a hierarchical sequence of build namespaces.
Abstract base class for serialization formats.
Uniquely identifies an analysis summary.
Definition SummaryName.h:22
Represents a translation unit summary in its serialized encoding.
Data extracted for a given translation unit and for a given set of analyses.
Definition TUSummary.h:24
llvm::json::Object Object
Diagnostic wrappers for TextAPI types for error reporting.
Definition Dominators.h:30