clojure.inspector/inspect-tree doesn't work on sets --patch in the description by Jason Wolfe

Description

As reported by Jason Wolfe on March 19, 2009 in the clojure group:

clojure.inspector/inspect-tree doesn't work on sets; patch attached
http://groups.google.com/group/clojure/browse_thread/thread/97bcad115fcfaf5a/95e61c423c61cfa8?lnk=gst&q=inspector+set#95e61c423c61cfa8

I was debugging with inspect-tree and noticed that it errors when it
encounters a set (it thinks it's not atomic, but then nth produces an
UnsupportedOperationException).

I made a small patch (below) that makes inspect-tree work on
java.util.Sets, and also anything else that implements
clojure.lang.Seqable. If this is of interest, please let me know and
I can create an issue.

Cheers,
Jason

Index: src/clj/clojure/inspector.clj
===================================================================
— src/clj/clojure/inspector.clj (revision 1335)
+++ src/clj/clojure/inspector.clj (working copy)
@@ -20,8 +20,10 @@
(defn collection-tag [x]
(cond
(instance? java.util.Map$Entry x) :entry

  • (instance? java.util.Map x) :map
    + (instance? java.util.Map x) :seqable
    + (instance? java.util.Set x) :seqable
    (sequential? x) :seq
    + (instance? clojure.lang.Seqable x) :seqable
    :else :atom))

(defmulti is-leaf collection-tag)
@@ -42,11 +44,15 @@
(defmethod get-child-count :entry [e]
(count (val e)))

-(defmethod is-leaf :map [m]
+(defmethod is-leaf :seqable [parent]
false)
-(defmethod get-child :map [m index]

  • (nth (seq m) index))
    +(defmethod get-child :seqable [parent index]
    + (nth (seq parent) index))
    +(defmethod get-child-count :seqable [parent]
    + (count (seq parent)))

(defn tree-model [data]
(proxy [TreeModel] []
(getRoot [] data)

Environment

Any

Activity

Show:
Stuart Sierra
November 9, 2012, 10:12 PM

Screened.

Andy Fingerhut
February 24, 2012, 5:58 AM

Jason Wolfe has signed a CA. Patch applies cleanly with latest master as of Feb 14, 2012. No errors, warnings, or test failures with the patch applied. No doc strings need updating.

Andy Fingerhut
February 14, 2012, 6:54 PM

Created a properly formatted patch, attached, for Jason's enhancement. I tested it with

(inspect-tree (:members (clojure.reflect/reflect java.lang.Math)))

and it worked, whereas it had many errors without Jason's changes.

Completed

Assignee

Unassigned

Reporter

import

Labels

None

Approval

Ok

Patch

Code

Fix versions

Priority

Minor