1//===-- CompileUnitsRequestHandler.cpp ------------------------------------===//
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#include "DAP.h"
10#include "EventHelper.h"
11#include "JSONUtils.h"
12#include "RequestHandler.h"
13
14namespace lldb_dap {
15
16// "compileUnitsRequest": {
17// "allOf": [ { "$ref": "#/definitions/Request" }, {
18// "type": "object",
19// "description": "Compile Unit request; value of command field is
20// 'compileUnits'.",
21// "properties": {
22// "command": {
23// "type": "string",
24// "enum": [ "compileUnits" ]
25// },
26// "arguments": {
27// "$ref": "#/definitions/compileUnitRequestArguments"
28// }
29// },
30// "required": [ "command", "arguments" ]
31// }]
32// },
33// "compileUnitsRequestArguments": {
34// "type": "object",
35// "description": "Arguments for 'compileUnits' request.",
36// "properties": {
37// "moduleId": {
38// "type": "string",
39// "description": "The ID of the module."
40// }
41// },
42// "required": [ "moduleId" ]
43// },
44// "compileUnitsResponse": {
45// "allOf": [ { "$ref": "#/definitions/Response" }, {
46// "type": "object",
47// "description": "Response to 'compileUnits' request.",
48// "properties": {
49// "body": {
50// "description": "Response to 'compileUnits' request. Array of
51// paths of compile units."
52// }
53// }
54// }]
55// }
56void CompileUnitsRequestHandler::operator()(
57 const llvm::json::Object &request) const {
58 llvm::json::Object response;
59 FillResponse(request, response);
60 llvm::json::Object body;
61 llvm::json::Array units;
62 const auto *arguments = request.getObject(K: "arguments");
63 const std::string module_id =
64 GetString(obj: arguments, key: "moduleId").value_or(u: "").str();
65 int num_modules = dap.target.GetNumModules();
66 for (int i = 0; i < num_modules; i++) {
67 auto curr_module = dap.target.GetModuleAtIndex(idx: i);
68 if (module_id == curr_module.GetUUIDString()) {
69 int num_units = curr_module.GetNumCompileUnits();
70 for (int j = 0; j < num_units; j++) {
71 auto curr_unit = curr_module.GetCompileUnitAtIndex(j);
72 units.emplace_back(A: CreateCompileUnit(unit&: curr_unit));
73 }
74 body.try_emplace(K: "compileUnits", Args: std::move(units));
75 break;
76 }
77 }
78 response.try_emplace(K: "body", Args: std::move(body));
79 dap.SendJSON(json: llvm::json::Value(std::move(response)));
80}
81
82} // namespace lldb_dap
83

source code of lldb/tools/lldb-dap/Handler/CompileUnitsRequestHandler.cpp