Skip to content

Commit 3ab19b0

Browse files
committed
Update to Java commit e05deed (2023.02.27): TNS-59: Adds a guard to the source file metadata creation for files that do not contain a ns decl or a ns name
1 parent 190c9fd commit 3ab19b0

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

src/main/clojure/clojure/tools/namespace/find.clj

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,11 @@
9696
([dir] (find-ns-decls-in-dir dir nil))
9797
([dir platform]
9898
(keep #(ignore-reader-exception
99-
(let [[_ nom & more] (file/read-file-ns-decl % (:read-opts platform))]
100-
(list* 'ns (with-meta nom
101-
{:dir (.Name ^System.IO.DirectoryInfo dir) :file (.Name ^System.IO.FileInfo %)}) ;; .getName ^java.io.File x 2
102-
more)))
99+
(let [[_ nom & more :as decl] (file/read-file-ns-decl % (:read-opts platform))]
100+
(when (and decl nom (symbol? nom))
101+
(list* 'ns (with-meta nom
102+
{:dir (.Name ^System.IO.DirectoryInfo dir) :file (.Name ^System.IO.FileInfo %)}) ;; .getName ^java.io.File x 2
103+
more))))
103104
(find-sources-in-dir dir platform))))
104105

105106
(defn find-namespaces-in-dir

src/test/clojure/clojure/tools/namespace/find_test.clj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@
3333
main-clj (help/create-source dir 'example.main :clj '[example.one])
3434
one-cljc (help/create-source dir 'example.one :cljc '[example.two])
3535
two-clj (help/create-source dir 'example.two :clj)
36-
two-cljs (help/create-source dir 'example.two :cljs)]
36+
two-cljs (help/create-source dir 'example.two :cljs)
37+
headless-clj (help/create-headless-source dir 'example.headless :clj)]
3738
(is (every? #{(.Name ^System.IO.DirectoryInfo dir)} ;; .getName ^java.io.File
3839
(map #(-> % second meta :dir)
3940
(find/find-ns-decls [dir]))))))

src/test/clojure/clojure/tools/namespace/test_helpers.clj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,22 @@
8787
(list 'ns sym))]
8888
(create-file full-path (into [ns-decl] contents)))))
8989

90+
(defn create-headless-source
91+
"Creates a file at the correct path under base-dir for a file that
92+
declares in-ns for namespace named sym, with file extension (keyword)
93+
and will also require the dependencies (symbols). Optional contents
94+
written after the ns declaration as by write-contents."
95+
([base-dir sym extension]
96+
(create-headless-source base-dir sym extension nil nil))
97+
([base-dir sym extension dependencies]
98+
(create-headless-source base-dir sym extension dependencies nil))
99+
([base-dir sym extension dependencies contents]
100+
(let [full-path (into [base-dir] (source-path sym extension))
101+
ins-decl (list 'in-ns (list 'quote sym))
102+
deps-decl (when (seq dependencies)
103+
(map #(list 'require `(quote ~%)) dependencies))]
104+
(create-file full-path (filter identity (concat [ins-decl] deps-decl contents))))))
105+
90106
(defn same-files?
91107
"True if files-a and files-b contain the same canonical File's,
92108
regardless of order."

0 commit comments

Comments
 (0)