Hi Gary,
  thank you. It worked now after adding a call to resolve

(defn all-fields-are-of-primitive-type? [fields-list]
     (every? #(primitive-types  (resolve %) ) fields-list)
  )     




On Monday, June 26, 2017 at 6:50:01 PM UTC+1, Gary Trakhman wrote:
>
> Is this what you're looking for?
>
>
> user=> (resolve 'java.lang.String)
> java.lang.String
>
> user=> (type (resolve 'java.lang.String))
> java.lang.Class
>
>
> On Mon, Jun 26, 2017 at 1:34 PM Manas Marthi <[email protected] 
> <javascript:>> wrote:
>
>> Hi,
>>  I have  a jar files with more than 200 DTO classes. Some have only 
>> primitive data type values and some have other beans from the same jar.
>>  I am trying to traverse through a class hierarchy to find the field 
>> count. If a class has a mix of some primitive types and other java classes, 
>> then the total field count is to be computed by looking up the field count 
>> from those fields.
>>
>>   I am having a map of  lists. I believe some kind of flat map operation 
>> should be useful here. But I see a need for recursive travel through 
>> hierarchy. So not sure how to proceed.
>>   So I am first trying to solve it imperatively.
>>   However, reflect/reflect does not return Class objects, It is returning 
>> Symbols. So my below filter function is failing.
>>   Pls can you help how to covert symbols into Class objects
>>
>>
>>  
>> (def  primitive-types #{
>>                         java.lang.Boolean
>>                         java.lang.Character
>>                         java.lang.Byte
>>                         java.lang.Short
>>                         java.lang.Integer
>>                         java.lang.Long
>>                         java.lang.Float
>>                         java.lang.Double
>>                         java.lang.String
>>                      })
>>
>> ; using hash-maps as I yet don't know how to mutate maps in clojure 
>> (def refcounts-map (java.util.HashMap.))
>> (def final-ref-counts-map (java.util.HashMap.))
>>
>>
>> (defn all-fields-are-of-primitive-type? [fields-list]
>>      (every? #(primitive-types  %) fields-list)
>>   )     
>>
>>
>> (defn init-ref-counts-from-class-hierarchy
>>    [types-list] ; A list of class objects
>>    (when-not (empty? types-list)
>>      (let [cur-type (first types-list) 
>>             cur-type-data-fields (->>
>>                                   cur-type
>>                                   (reflect/reflect )
>>                                   (:members)
>>                                   (filter #(instance? 
>>  clojure.reflect.Field %))
>>                                   (map #(:type %)) 
>>  ;<----------------This is not a sequence of Class objects. It is giving 
>> Symbols!      
>>                                   )
>>              ]
>>           (if (all-fields-are-of-primitive-type? cur-type-data-fields) 
>> ;<------- This is always failing!!
>>                  (.put final-ref-counts-map cur-type (count 
>> cur-type-data-fields))
>>                  (.put refcounts-map cur-type [cur-type-data-fields 0])
>>              )
>>           (recur (rest types-list))
>>       )
>>     )
>>    )
>>         
>> (defn get-reference-counts
>>   [types-list]
>>   (do
>>     (init-ref-counts-from-class-hierarchy types-list)
>>     ;TODO: initiate recursive travel through 
>>    ))
>>
>> (get-reference-counts (take 2 (vals dto-class-objects)))
>> (pp/pprint  refcounts-map)
>> (pp/pprint  final-ref-counts-map)
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to [email protected] 
>> <javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> [email protected] <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to