fork download
  1. (ns util.core
  2. (:use clojure.pprint)
  3. (:import (java.lang.reflect Modifier)))
  4.  
  5. (defmacro export-static-final-fields
  6. "Exports all static final fields of class"
  7. [class]
  8. (letfn
  9. [(field-basename [field-name]
  10. (re-find #"[^\.]+$" field-name))
  11. (field-fullname [field-name]
  12. (str ((re-find #" ([^ ]+)\.[^ ]+$" field-name) 1) "/" (field-basename field-name)))
  13. (static-final? [field]
  14. (and (Modifier/isFinal field) (Modifier/isStatic field)))
  15. (get-static-final-fields [class]
  16. (for [field (.getFields class) :when (static-final? (.getModifiers field))] (str field)))]
  17. `(do ~@(for [field (get-static-final-fields (resolve class))]
  18. `(def ~(symbol (field-basename field)) ~(symbol (field-fullname field)))))))
  19.  
  20. (pprint (macroexpand-1 '(export-static-final-fields Integer)))
Success #stdin #stdout 1.52s 220288KB
stdin
Standard input is empty
stdout
(do
 (def MIN_VALUE java.lang.Integer/MIN_VALUE)
 (def MAX_VALUE java.lang.Integer/MAX_VALUE)
 (def TYPE java.lang.Integer/TYPE)
 (def SIZE java.lang.Integer/SIZE))