diff options
author | Brad King <brad.king@kitware.com> | 2021-01-14 21:17:56 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2021-03-16 20:47:55 (GMT) |
commit | eae2256a529250e4fda639a79a9edddef6604f12 (patch) | |
tree | 9f3dd3c486b0291c9e7e121196b3fb27b63bf5c5 | |
parent | a12d7f70b1b97f74293d9861a1827c88ef46ec39 (diff) | |
download | CMake-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.rst | 12 | ||||
-rw-r--r-- | Source/cmFileAPICodemodel.cxx | 13 | ||||
-rw-r--r-- | Tests/RunCMake/FileAPI/codemodel-v2-check.py | 4 |
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): |