clang 23.0.0git
JSONFormatImpl.h
Go to the documentation of this file.
1//===- JSONFormatImpl.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// Internal implementation header shared by all translation units in the
10// JSONFormat subdirectory. Not part of the public API.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef CLANG_LIB_ANALYSIS_SCALABLE_SERIALIZATION_JSONFORMAT_JSONFORMATIMPL_H
15#define CLANG_LIB_ANALYSIS_SCALABLE_SERIALIZATION_JSONFORMAT_JSONFORMATIMPL_H
16
22#include "llvm/ADT/STLExtras.h"
23#include "llvm/ADT/StringExtras.h"
24#include "llvm/Support/ErrorHandling.h"
25#include "llvm/Support/FileSystem.h"
26#include "llvm/Support/FormatVariadic.h"
27#include "llvm/Support/JSON.h"
28#include "llvm/Support/MemoryBuffer.h"
29#include "llvm/Support/Path.h"
30#include "llvm/Support/Registry.h"
31
32namespace clang::ssaf {
33
34using Array = llvm::json::Array;
35using Object = llvm::json::Object;
36using Value = llvm::json::Value;
37
38//----------------------------------------------------------------------------
39// File Format Constant
40//----------------------------------------------------------------------------
41
42inline constexpr const char *JSONFormatFileExtension = ".json";
43
44//----------------------------------------------------------------------------
45// Error Message Constants
46//----------------------------------------------------------------------------
47
48namespace ErrorMessages {
49
50inline constexpr const char *FailedToReadFile =
51 "failed to read file '{0}': {1}";
52inline constexpr const char *FailedToWriteFile =
53 "failed to write file '{0}': {1}";
54inline constexpr const char *FileNotFound = "file does not exist";
55inline constexpr const char *FileIsDirectory =
56 "path is a directory, not a file";
57inline constexpr const char *FileIsNotJSON =
58 "file does not end with '{0}' extension";
59inline constexpr const char *FileExists = "file already exists";
60inline constexpr const char *ParentDirectoryNotFound =
61 "parent directory does not exist";
62
63inline constexpr const char *ReadingFromField = "reading {0} from field '{1}'";
64inline constexpr const char *WritingToField = "writing {0} to field '{1}'";
65inline constexpr const char *ReadingFromIndex = "reading {0} from index '{1}'";
66inline constexpr const char *WritingToIndex = "writing {0} to index '{1}'";
67inline constexpr const char *ReadingFromFile = "reading {0} from file '{1}'";
68inline constexpr const char *WritingToFile = "writing {0} to file '{1}'";
69
70inline constexpr const char *FailedInsertionOnDuplication =
71 "failed to insert {0} at index '{1}': encountered duplicate '{2}'";
72
73inline constexpr const char *FailedToReadObject =
74 "failed to read {0}: expected JSON {1}";
75inline constexpr const char *FailedToReadObjectAtField =
76 "failed to read {0} from field '{1}': expected JSON {2}";
77inline constexpr const char *FailedToReadObjectAtIndex =
78 "failed to read {0} from index '{1}': expected JSON {2}";
79
81 "failed to deserialize EntitySummary: no FormatInfo registered for '{0}'";
82inline constexpr const char *FailedToSerializeEntitySummaryNoFormatInfo =
83 "failed to serialize EntitySummary: no FormatInfo registered for '{0}'";
84
85inline constexpr const char *FailedToDeserializeEntitySummaryMissingData =
86 "failed to deserialize EntitySummary: null EntitySummary data for '{0}'";
87inline constexpr const char *FailedToSerializeEntitySummaryMissingData =
88 "JSONFormat - null EntitySummary data for '{0}'";
89
90inline constexpr const char
92 "failed to deserialize EntitySummary: EntitySummary data for '{0}' "
93 "reports mismatched '{1}'";
94inline constexpr const char
96 "JSONFormat - EntitySummary data for '{0}' reports mismatched '{1}'";
97
98inline constexpr const char *InvalidBuildNamespaceKind =
99 "invalid BuildNamespaceKind value '{0}' for field 'kind'";
100
101inline constexpr const char *InvalidEntityLinkageType =
102 "invalid EntityLinkageType value '{0}' for field 'type'";
103
104inline constexpr const char *FailedToDeserializeLinkageTableExtraId =
105 "failed to deserialize LinkageTable: extra '{0}' not present in IdTable";
106
107inline constexpr const char *FailedToDeserializeLinkageTableMissingId =
108 "failed to deserialize LinkageTable: missing '{0}' present in IdTable";
109
110} // namespace ErrorMessages
111
112//----------------------------------------------------------------------------
113// JSON Reader and Writer
114//----------------------------------------------------------------------------
115
116llvm::Expected<Value> readJSON(llvm::StringRef Path);
117llvm::Error writeJSON(Value &&V, llvm::StringRef Path);
118
119//----------------------------------------------------------------------------
120// SummaryName helpers (free functions, anonymous-namespace in .cpp)
121//----------------------------------------------------------------------------
122
123SummaryName summaryNameFromJSON(llvm::StringRef SummaryNameStr);
124llvm::StringRef summaryNameToJSON(const SummaryName &SN);
125
126//----------------------------------------------------------------------------
127// BuildNamespaceKind helpers
128//----------------------------------------------------------------------------
129
131buildNamespaceKindFromJSON(llvm::StringRef BuildNamespaceKindStr);
132
133// Provided for consistency with respect to rest of the codebase.
135
136//----------------------------------------------------------------------------
137// EntityLinkageType helpers
138//----------------------------------------------------------------------------
139
141entityLinkageTypeFromJSON(llvm::StringRef EntityLinkageTypeStr);
142
143// Provided for consistency with respect to rest of the codebase.
145
146} // namespace clang::ssaf
147
148#endif // CLANG_LIB_ANALYSIS_SCALABLE_SERIALIZATION_JSONFORMAT_JSONFORMATIMPL_H
#define V(N, I)
Uniquely identifies an analysis summary.
Definition SummaryName.h:22
constexpr const char * FailedToSerializeEntitySummaryMismatchedSummaryName
constexpr const char * InvalidBuildNamespaceKind
constexpr const char * ReadingFromFile
constexpr const char * ReadingFromField
constexpr const char * FailedToReadObjectAtIndex
constexpr const char * FailedToDeserializeEntitySummaryNoFormatInfo
constexpr const char * InvalidEntityLinkageType
constexpr const char * FileIsDirectory
constexpr const char * FailedToDeserializeEntitySummaryMismatchedSummaryName
constexpr const char * FileNotFound
constexpr const char * FailedToReadObjectAtField
constexpr const char * FileExists
constexpr const char * WritingToFile
constexpr const char * ReadingFromIndex
constexpr const char * WritingToField
constexpr const char * FailedInsertionOnDuplication
constexpr const char * FailedToDeserializeLinkageTableExtraId
constexpr const char * FailedToSerializeEntitySummaryMissingData
constexpr const char * FailedToDeserializeEntitySummaryMissingData
constexpr const char * FailedToWriteFile
constexpr const char * FailedToDeserializeLinkageTableMissingId
constexpr const char * FileIsNotJSON
constexpr const char * FailedToReadFile
constexpr const char * FailedToReadObject
constexpr const char * ParentDirectoryNotFound
constexpr const char * FailedToSerializeEntitySummaryNoFormatInfo
constexpr const char * WritingToIndex
SummaryName summaryNameFromJSON(llvm::StringRef SummaryNameStr)
llvm::StringRef summaryNameToJSON(const SummaryName &SN)
llvm::json::Array Array
llvm::Expected< EntityLinkageType > entityLinkageTypeFromJSON(llvm::StringRef EntityLinkageTypeStr)
llvm::Error writeJSON(Value &&Value, llvm::StringRef Path)
llvm::json::Value Value
llvm::Expected< BuildNamespaceKind > buildNamespaceKindFromJSON(llvm::StringRef BuildNamespaceKindStr)
llvm::json::Object Object
llvm::Expected< Value > readJSON(llvm::StringRef Path)
constexpr const char * JSONFormatFileExtension
llvm::StringRef buildNamespaceKindToJSON(BuildNamespaceKind BNK)
llvm::StringRef entityLinkageTypeToJSON(EntityLinkageType LT)