summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2021-01-14 21:17:56 (GMT)
committerBrad King <brad.king@kitware.com>2021-03-16 20:47:55 (GMT)
commiteae2256a529250e4fda639a79a9edddef6604f12 (patch)
tree9f3dd3c486b0291c9e7e121196b3fb27b63bf5c5
parenta12d7f70b1b97f74293d9861a1827c88ef46ec39 (diff)
downloadCMake-eae2256a529250e4fda639a79a9edddef6604f12.zip
CMake-eae2256a529250e4fda639a79a9edddef6604f12.tar.gz
CMake-eae2256a529250e4fda639a79a9edddef6604f12.tar.bz2
fileapi: Add backtraceGraph to codemodel-v2 "directory" object
Co-Authored-by: Kyle Edwards <kyle.edwards@kitware.com>
-rw-r--r--Help/manual/cmake-file-api.7.rst12
-rw-r--r--Source/cmFileAPICodemodel.cxx13
-rw-r--r--Tests/RunCMake/FileAPI/codemodel-v2-check.py4
3 files changed, 24 insertions, 5 deletions
diff --git a/Help/manual/cmake-file-api.7.rst b/Help/manual/cmake-file-api.7.rst
index 7c34d51..088ec2e 100644
--- a/Help/manual/cmake-file-api.7.rst
+++ b/Help/manual/cmake-file-api.7.rst
@@ -666,6 +666,10 @@ with members:
directory (with ``.`` for the top-level build directory itself).
Otherwise the path is absolute.
+``backtraceGraph``
+ A `"codemodel" version 2 "backtrace graph"`_ whose nodes are referenced
+ from ``backtrace`` members elsewhere in this "directory" object.
+
"codemodel" version 2 "target" object
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -1003,10 +1007,10 @@ with members:
"codemodel" version 2 "backtrace graph"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-The ``backtraceGraph`` member of a `"codemodel" version 2 "target" object`_
-is a JSON object describing a graph of backtraces. Its nodes are referenced
-from ``backtrace`` members elsewhere in the containing object.
-The backtrace graph object members are:
+The ``backtraceGraph`` member of a `"codemodel" version 2 "directory" object`_,
+or `"codemodel" version 2 "target" object`_ is a JSON object describing a
+graph of backtraces. Its nodes are referenced from ``backtrace`` members
+elsewhere in the containing object. The backtrace graph object members are:
``nodes``
A JSON array listing nodes in the backtrace graph. Each entry
diff --git a/Source/cmFileAPICodemodel.cxx b/Source/cmFileAPICodemodel.cxx
index 2f36db2..e7bfc61 100644
--- a/Source/cmFileAPICodemodel.cxx
+++ b/Source/cmFileAPICodemodel.cxx
@@ -379,6 +379,9 @@ class DirectoryObject
std::string const& Config;
std::string TopSource;
std::string TopBuild;
+ BacktraceData Backtraces;
+
+ void AddBacktrace(Json::Value& object, cmListFileBacktrace const& bt);
Json::Value DumpPaths();
@@ -814,6 +817,7 @@ DirectoryObject::DirectoryObject(cmLocalGenerator const* lg,
, TopSource(lg->GetGlobalGenerator()->GetCMakeInstance()->GetHomeDirectory())
, TopBuild(
lg->GetGlobalGenerator()->GetCMakeInstance()->GetHomeOutputDirectory())
+ , Backtraces(this->TopSource)
{
}
@@ -821,9 +825,18 @@ Json::Value DirectoryObject::Dump()
{
Json::Value directoryObject = Json::objectValue;
directoryObject["paths"] = this->DumpPaths();
+ directoryObject["backtraceGraph"] = this->Backtraces.Dump();
return directoryObject;
}
+void DirectoryObject::AddBacktrace(Json::Value& object,
+ cmListFileBacktrace const& bt)
+{
+ if (JBTIndex backtrace = this->Backtraces.Add(bt)) {
+ object["backtrace"] = backtrace.Index;
+ }
+}
+
Json::Value DirectoryObject::DumpPaths()
{
Json::Value paths = Json::objectValue;
diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-check.py b/Tests/RunCMake/FileAPI/codemodel-v2-check.py
index 0e5b3b9..900faf9 100644
--- a/Tests/RunCMake/FileAPI/codemodel-v2-check.py
+++ b/Tests/RunCMake/FileAPI/codemodel-v2-check.py
@@ -98,11 +98,13 @@ def check_directory(c):
d = json.load(f)
assert is_dict(d)
- assert sorted(d.keys()) == ["paths"]
+ assert sorted(d.keys()) == ["backtraceGraph", "paths"]
assert is_string(d["paths"]["source"], actual["source"])
assert is_string(d["paths"]["build"], actual["build"])
+ check_backtrace_graph(d["backtraceGraph"])
+
return _check
def check_backtrace_graph(btg):