Skip to content

Commit cc89c0f

Browse files
committed
Use session classloader when loading deferred middleware
When loading CIDER middleware via the sideloader we need to make sure that extra namespaces that are loaded later are also requested via the sideloader. The original sideloader already provided a macro for this (with-session-classloader), we just need to use it. This does mean that now all our middlewares need to depend on the session middleware.
1 parent 1e88bcb commit cc89c0f

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
### Changes
1515

1616
* Parallelize `cider.nrepl.middleware.stacktrace/analyze-stacktrace`.
17+
* [#705](https://github.com/clojure-emacs/cider-nrepl/pull/705): Use the session classloader when loading deferred middleware
1718

1819
## 0.26.0 (2021-04-22)
1920

src/cider/nrepl.clj

+6-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
[nrepl.middleware.caught :refer [wrap-caught]]
1616
[nrepl.middleware.print :refer [wrap-print wrap-print-optional-arguments]]
1717
[nrepl.middleware.session :refer [session]]
18+
[nrepl.misc :as misc :refer [with-session-classloader]]
1819
[nrepl.server :as nrepl-server]))
1920

2021
;;; Functionality for deferred middleware loading
@@ -43,12 +44,13 @@
4344
(defn- handler-future
4445
"Check whether a delay exists in the `delayed-handlers`. Otherwise make a delay
4546
out of `fn-name` and place it in the atom. "
46-
[sym ns fn-name]
47+
[sym ns fn-name session]
4748
(or (get @delayed-handlers sym)
4849
(get (swap! delayed-handlers assoc sym
4950
(delay
5051
(locking require-lock
51-
(require ns)
52+
(with-session-classloader session
53+
(require ns))
5254
(resolve-or-fail fn-name))))
5355
sym)))
5456

@@ -58,7 +60,7 @@
5860
[fn-name handler msg]
5961
(let [ns (symbol (namespace `~fn-name))
6062
sym (symbol (name `~fn-name))]
61-
`(@(handler-future '~sym '~ns '~fn-name)
63+
`(@(handler-future '~sym '~ns '~fn-name (:session ~msg))
6264
~handler ~msg)))
6365

6466
(defmacro ^{:arglists '([name handler-fn descriptor]
@@ -79,7 +81,7 @@
7981
[descriptor trigger-it]
8082
[trigger-it descriptor])
8183
trigger-it (eval trigger-it)
82-
descriptor (eval descriptor)
84+
descriptor (update (eval descriptor) :requires (fnil conj #{}) #'nrepl.middleware.session/session)
8385
cond (if (or (nil? trigger-it) (set? trigger-it))
8486
(let [ops-set (into (-> descriptor :handles keys set) trigger-it)]
8587
`(~ops-set (:op ~'msg)))

0 commit comments

Comments
 (0)