Details
-
Type:
Enhancement
-
Status:
Open
-
Priority:
Minor
-
Resolution: Unresolved
-
Affects Version/s: None
-
Fix Version/s: Release 1.6
-
Component/s: None
-
Labels:None
-
Environment:Any
-
Patch:Code
-
Approval:Ok
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)