Skip to content

Commit 25a1583

Browse files
Fix regression handling one level deep nested inner classes.
1 parent e0fde50 commit 25a1583

File tree

5 files changed

+25
-3
lines changed

5 files changed

+25
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
* [#160](https://github.com/clojure-emacs/refactor-nrepl/issues/160) Make `resolve-missing` find newly defined vars and types (clj). Because of a stale cache, newly added vars or types would not be found. This fix takes into account vars/types added by eval-ing code (rescan affected namespace), and by hotloading dependencies (reset the cache).
1414
* [clojure-emacs/clj-refactor.el#362](https://github.com/clojure-emacs/clj-refactor.el/issues/362) Preserve all shorthand style metadata when `clean-ns` is used.
1515
* [#192](https://github.com/clojure-emacs/refactor-nrepl/issues/192) Clean ns understands `$` as a symbol. Specially this enables clean ns to work with incanter that does have function named `$`.
16+
* [clojure-emacs/clj-refactor.el#332](https://github.com/clojure-emacs/clj-refactor.el/issues/332) Fix regression when inner class needs to be imported, strangely implementation of multiple levels of nested inner classes broke the simpler case.
1617

1718
### Changes
1819

src/refactor_nrepl/core.clj

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,8 @@
227227
(defn suffix
228228
"java.util.Date -> Date
229229
java.text.Normalizer$Form/NFD => Normalizer
230-
SomeClass$InnerClass$InnerInnerClass => SomeClass$InnerClass
230+
SomeClass$InnerClass$InnerInnerClass => SomeClass$InnerClass$InnerInnerClass
231+
SomeClass$InnerClass => SomeClass$InnerClass
231232
232233
clojure.core/str -> str"
233234
[fully-qualified-name]
@@ -239,8 +240,9 @@
239240
(re-find #"\w\$\w" fully-qualified-name)
240241
(let [[outer & classes] (-> fully-qualified-name (.split "\\$"))
241242
outer (suffix outer)]
242-
(if (> (count classes) 1)
243-
(str/join "$" (apply vector outer classes ))
243+
(if (or (> (count classes) 1)
244+
(->> classes first (re-find #"/") not))
245+
(str/join "$" (apply vector outer classes))
244246
outer))
245247

246248
(re-find #"/" (str fully-qualified-name))

test/refactor_nrepl/ns/clean_ns_test.clj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141

4242
(def ns-with-multiple-shorthand-meta (clean-msg "test/resources/ns_with_multiple_shorthand_meta.clj"))
4343

44+
(def ns-with-inner-classes (clean-msg "test/resources/ns_with_inner_classes.clj"))
45+
4446
(def ns-with-incanter (clean-msg "test/resources/ns_with_incanter.clj"))
4547

4648
(deftest combines-requires
@@ -205,3 +207,7 @@
205207
(deftest does-not-remove-dollar-sign-if-valid-symbol
206208
(let [cleaned (pprint-ns (clean-ns ns-with-incanter))]
207209
(is (re-find #"\[\$\]" cleaned))))
210+
211+
(deftest does-not-break-import-for-inner-class
212+
(let [cleaned (pprint-ns (clean-ns ns-with-inner-classes))]
213+
(is (re-find #":import.*Line2D\$Double" cleaned))))

test/resources/ns_with_incanter.clj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
(ns resources.ns-with-incanter
2+
(:require [clojure.string :as string]
3+
[clojure.set :as set]
4+
[incanter.core :refer [$]]))
5+
6+
$
7+
8+
(string/replace "foobar" "ob" "AZ")
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
(ns ns-with-inner-classes
2+
(:import [java.awt.geom Line2D$Double]))
3+
4+
(defn foo []
5+
(Line2D$Double. 0 0 5 5))

0 commit comments

Comments
 (0)