aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/import_static.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/clojure/contrib/import_static.clj')
-rw-r--r--src/clojure/contrib/import_static.clj63
1 files changed, 0 insertions, 63 deletions
diff --git a/src/clojure/contrib/import_static.clj b/src/clojure/contrib/import_static.clj
deleted file mode 100644
index 94d827a5..00000000
--- a/src/clojure/contrib/import_static.clj
+++ /dev/null
@@ -1,63 +0,0 @@
-;;; import_static.clj -- import static Java methods/fields into Clojure
-
-;; by Stuart Sierra, http://stuartsierra.com/
-;; June 1, 2008
-
-;; Copyright (c) Stuart Sierra, 2008. All rights reserved. The use
-;; and distribution terms for this software are covered by the Eclipse
-;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
-;; which can be found in the file epl-v10.html at the root of this
-;; distribution. By using this software in any fashion, you are
-;; agreeing to be bound by the terms of this license. You must not
-;; remove this notice, or any other, from this software.
-
-
-
-(ns
- #^{:author "Stuart Sierra",
- :doc "Import static Java methods/fields into Clojure"}
- clojure.contrib.import-static
- (:use clojure.set))
-
-(defmacro import-static
- "Imports the named static fields and/or static methods of the class
- as (private) symbols in the current namespace.
-
- Example:
- user=> (import-static java.lang.Math PI sqrt)
- nil
- user=> PI
- 3.141592653589793
- user=> (sqrt 16)
- 4.0
-
- Note: The class name must be fully qualified, even if it has already
- been imported. Static methods are defined as MACROS, not
- first-class fns."
- [class & fields-and-methods]
- (let [only (set (map str fields-and-methods))
- the-class (. Class forName (str class))
- static? (fn [x]
- (. java.lang.reflect.Modifier
- (isStatic (. x (getModifiers)))))
- statics (fn [array]
- (set (map (memfn getName)
- (filter static? array))))
- all-fields (statics (. the-class (getFields)))
- all-methods (statics (. the-class (getMethods)))
- fields-to-do (intersection all-fields only)
- methods-to-do (intersection all-methods only)
- make-sym (fn [string]
- (with-meta (symbol string) {:private true}))
- import-field (fn [name]
- (list 'def (make-sym name)
- (list '. class (symbol name))))
- import-method (fn [name]
- (list 'defmacro (make-sym name)
- '[& args]
- (list 'list ''. (list 'quote class)
- (list 'apply 'list
- (list 'quote (symbol name))
- 'args))))]
- `(do ~@(map import-field fields-to-do)
- ~@(map import-method methods-to-do))))