Skip to content

Conversation

@JDevlieghere
Copy link
Member

Make the registration of request handlers a private implementation detail of the DAP class.

Make the registration of request handlers a private implementation
detail of the DAP class.
@llvmbot
Copy link
Member

llvmbot commented May 10, 2025

@llvm/pr-subscribers-lldb

Author: Jonas Devlieghere (JDevlieghere)

Changes

Make the registration of request handlers a private implementation detail of the DAP class.


Full diff: https://github.com/llvm/llvm-project/pull/139397.diff

3 Files Affected:

  • (modified) lldb/tools/lldb-dap/DAP.cpp (+43)
  • (modified) lldb/tools/lldb-dap/DAP.h (+9-6)
  • (modified) lldb/tools/lldb-dap/lldb-dap.cpp (-46)
diff --git a/lldb/tools/lldb-dap/DAP.cpp b/lldb/tools/lldb-dap/DAP.cpp
index 9a3cc32d8c324..4feca1253be20 100644
--- a/lldb/tools/lldb-dap/DAP.cpp
+++ b/lldb/tools/lldb-dap/DAP.cpp
@@ -126,6 +126,7 @@ DAP::DAP(Log *log, const ReplMode default_repl_mode,
           [&](const ProgressEvent &event) { SendJSON(event.ToJSON()); }),
       reverse_request_seq(0), repl_mode(default_repl_mode) {
   configuration.preInitCommands = std::move(pre_init_commands);
+  RegisterRequests();
 }
 
 DAP::~DAP() = default;
@@ -1652,4 +1653,46 @@ void DAP::EventThread() {
   }
 }
 
+void DAP::RegisterRequests() {
+  RegisterRequest<AttachRequestHandler>();
+  RegisterRequest<BreakpointLocationsRequestHandler>();
+  RegisterRequest<CancelRequestHandler>();
+  RegisterRequest<CompletionsRequestHandler>();
+  RegisterRequest<ConfigurationDoneRequestHandler>();
+  RegisterRequest<ContinueRequestHandler>();
+  RegisterRequest<DataBreakpointInfoRequestHandler>();
+  RegisterRequest<DisassembleRequestHandler>();
+  RegisterRequest<DisconnectRequestHandler>();
+  RegisterRequest<EvaluateRequestHandler>();
+  RegisterRequest<ExceptionInfoRequestHandler>();
+  RegisterRequest<InitializeRequestHandler>();
+  RegisterRequest<LaunchRequestHandler>();
+  RegisterRequest<LocationsRequestHandler>();
+  RegisterRequest<NextRequestHandler>();
+  RegisterRequest<PauseRequestHandler>();
+  RegisterRequest<ReadMemoryRequestHandler>();
+  RegisterRequest<RestartRequestHandler>();
+  RegisterRequest<ScopesRequestHandler>();
+  RegisterRequest<SetBreakpointsRequestHandler>();
+  RegisterRequest<SetDataBreakpointsRequestHandler>();
+  RegisterRequest<SetExceptionBreakpointsRequestHandler>();
+  RegisterRequest<SetFunctionBreakpointsRequestHandler>();
+  RegisterRequest<SetInstructionBreakpointsRequestHandler>();
+  RegisterRequest<SetVariableRequestHandler>();
+  RegisterRequest<SourceRequestHandler>();
+  RegisterRequest<StackTraceRequestHandler>();
+  RegisterRequest<StepInRequestHandler>();
+  RegisterRequest<StepInTargetsRequestHandler>();
+  RegisterRequest<StepOutRequestHandler>();
+  RegisterRequest<ThreadsRequestHandler>();
+  RegisterRequest<VariablesRequestHandler>();
+
+  // Custom requests
+  RegisterRequest<CompileUnitsRequestHandler>();
+  RegisterRequest<ModulesRequestHandler>();
+
+  // Testing requests
+  RegisterRequest<TestGetTargetBreakpointsRequestHandler>();
+}
+
 } // namespace lldb_dap
diff --git a/lldb/tools/lldb-dap/DAP.h b/lldb/tools/lldb-dap/DAP.h
index cbda57d27e8d9..c2e4c2dea582e 100644
--- a/lldb/tools/lldb-dap/DAP.h
+++ b/lldb/tools/lldb-dap/DAP.h
@@ -188,7 +188,6 @@ struct DAP {
   // the old process here so we can detect this case and keep running.
   lldb::pid_t restarting_process_id;
   bool configuration_done;
-  llvm::StringMap<std::unique_ptr<BaseRequestHandler>> request_handlers;
   bool waiting_for_run_in_terminal;
   ProgressEventReporter progress_event_reporter;
   // Keep track of the last stop thread index IDs as threads won't go away
@@ -377,11 +376,6 @@ struct DAP {
     });
   }
 
-  /// Registers a request handler.
-  template <typename Handler> void RegisterRequest() {
-    request_handlers[Handler::GetCommand()] = std::make_unique<Handler>(*this);
-  }
-
   /// The set of capablities supported by this adapter.
   protocol::Capabilities GetCapabilities();
 
@@ -429,6 +423,15 @@ struct DAP {
   void StartProgressEventThread();
 
 private:
+  /// Registration of request handler.
+  /// @{
+  void RegisterRequests();
+  template <typename Handler> void RegisterRequest() {
+    request_handlers[Handler::GetCommand()] = std::make_unique<Handler>(*this);
+  }
+  llvm::StringMap<std::unique_ptr<BaseRequestHandler>> request_handlers;
+  /// @}
+
   /// Event threads.
   /// @{
   void EventThread();
diff --git a/lldb/tools/lldb-dap/lldb-dap.cpp b/lldb/tools/lldb-dap/lldb-dap.cpp
index 6e17b13cc9e33..7a4cc70902a56 100644
--- a/lldb/tools/lldb-dap/lldb-dap.cpp
+++ b/lldb/tools/lldb-dap/lldb-dap.cpp
@@ -115,48 +115,6 @@ class LLDBDAPOptTable : public llvm::opt::GenericOptTable {
 };
 } // anonymous namespace
 
-static void RegisterRequestCallbacks(DAP &dap) {
-  dap.RegisterRequest<AttachRequestHandler>();
-  dap.RegisterRequest<BreakpointLocationsRequestHandler>();
-  dap.RegisterRequest<CancelRequestHandler>();
-  dap.RegisterRequest<CompletionsRequestHandler>();
-  dap.RegisterRequest<ConfigurationDoneRequestHandler>();
-  dap.RegisterRequest<ContinueRequestHandler>();
-  dap.RegisterRequest<DataBreakpointInfoRequestHandler>();
-  dap.RegisterRequest<DisassembleRequestHandler>();
-  dap.RegisterRequest<DisconnectRequestHandler>();
-  dap.RegisterRequest<EvaluateRequestHandler>();
-  dap.RegisterRequest<ExceptionInfoRequestHandler>();
-  dap.RegisterRequest<InitializeRequestHandler>();
-  dap.RegisterRequest<LaunchRequestHandler>();
-  dap.RegisterRequest<LocationsRequestHandler>();
-  dap.RegisterRequest<NextRequestHandler>();
-  dap.RegisterRequest<PauseRequestHandler>();
-  dap.RegisterRequest<ReadMemoryRequestHandler>();
-  dap.RegisterRequest<RestartRequestHandler>();
-  dap.RegisterRequest<ScopesRequestHandler>();
-  dap.RegisterRequest<SetBreakpointsRequestHandler>();
-  dap.RegisterRequest<SetDataBreakpointsRequestHandler>();
-  dap.RegisterRequest<SetExceptionBreakpointsRequestHandler>();
-  dap.RegisterRequest<SetFunctionBreakpointsRequestHandler>();
-  dap.RegisterRequest<SetInstructionBreakpointsRequestHandler>();
-  dap.RegisterRequest<SetVariableRequestHandler>();
-  dap.RegisterRequest<SourceRequestHandler>();
-  dap.RegisterRequest<StackTraceRequestHandler>();
-  dap.RegisterRequest<StepInRequestHandler>();
-  dap.RegisterRequest<StepInTargetsRequestHandler>();
-  dap.RegisterRequest<StepOutRequestHandler>();
-  dap.RegisterRequest<ThreadsRequestHandler>();
-  dap.RegisterRequest<VariablesRequestHandler>();
-
-  // Custom requests
-  dap.RegisterRequest<CompileUnitsRequestHandler>();
-  dap.RegisterRequest<ModulesRequestHandler>();
-
-  // Testing requests
-  dap.RegisterRequest<TestGetTargetBreakpointsRequestHandler>();
-}
-
 static void PrintHelp(LLDBDAPOptTable &table, llvm::StringRef tool_name) {
   std::string usage_str = tool_name.str() + " options";
   table.printHelp(llvm::outs(), usage_str.c_str(), "LLDB DAP", false);
@@ -342,8 +300,6 @@ serveConnection(const Socket::SocketProtocol &protocol, const std::string &name,
         return;
       }
 
-      RegisterRequestCallbacks(dap);
-
       {
         std::scoped_lock<std::mutex> lock(dap_sessions_mutex);
         dap_sessions[io.get()] = &dap;
@@ -597,8 +553,6 @@ int main(int argc, char *argv[]) {
     return EXIT_FAILURE;
   }
 
-  RegisterRequestCallbacks(dap);
-
   // used only by TestVSCode_redirection_to_console.py
   if (getenv("LLDB_DAP_TEST_STDOUT_STDERR_REDIRECTION") != nullptr)
     redirection_test();

@JDevlieghere JDevlieghere merged commit a92de02 into llvm:main May 10, 2025
13 checks passed
@JDevlieghere JDevlieghere deleted the lldb-dap-request-registration branch May 10, 2025 18:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants