API for clojure.reflect
  -  
  
by Stuart Halloway
Full namespace name: 
clojure.reflect
Overview
Reflection on Host Types
Alpha - subject to change.
Two main entry points: 
* type-reflect reflects on something that implements TypeReference.
* reflect (for REPL use) reflects on the class of an instance, or
  on a class if passed a class
Key features:
* Exposes the read side of reflection as pure data. Reflecting
  on a type returns a map with keys :bases, :flags, and :members.
* Canonicalizes class names as Clojure symbols. Types can extend
  to the TypeReference protocol to indicate that they can be
  unambiguously resolved as a type name. The canonical format
  requires one non-Java-ish convention: array brackets are <>
  instead of [] so they can be part of a Clojure symbol.
* Pluggable Reflectors for different implementations. The default
  JavaReflector is good when you have a class in hand, or use
  the AsmReflector for "hands off" reflection without forcing
  classes to load.
Platform implementers must:
* Create an implementation of Reflector.
* Create one or more implementations of TypeReference.
* def default-reflector to be an instance that satisfies Reflector.
Added in Clojure version 1.3
  
  Protocols
  
    
    
    ClassResolver
    Protocol
    
    Known implementations: 
clojure.lang.Fn, java.lang.ClassLoader
    
      
      resolve-class
      function
      Usage: (resolve-class this name)
      Given a class name, return that typeref's class bytes as an InputStream.
      
      
      
      
     
    
    
    Source
   
    
    
    Reflector
    Protocol
    Protocol for reflection implementers.
    Known implementations: 
AsmReflector, JavaReflector
    
      
      do-reflect
      function
      Usage: (do-reflect reflector typeref)
      
      
      
      
      
     
    
    
    Source
   
    
    
    TypeReference
    Protocol
    A TypeReference can be unambiguously converted to a type name on
the host platform.
All typerefs are normalized into symbols. If you need to
normalize a typeref yourself, call typesym.
    Known implementations: 
clojure.asm.Type, clojure.lang.Symbol, java.lang.Class
    
      
      typename
      function
      Usage: (typename o)
      Returns Java name as returned by ASM getClassName, e.g. byte[], java.lang.String[]
      
      
      
      
     
    
    
    Source
   
 
  
  Types
  
    
    
    AsmReflector
    type
    
    Fields: 
[class-resolver]
    Protocols: 
Reflector
    Interfaces: 
   
    
    
    Constructor
    record
    
    Fields: 
[name declaring-class parameter-types exception-types flags]
    Protocols: 
    Interfaces: 
clojure.lang.IHashEq, clojure.lang.IKeywordLookup, clojure.lang.ILookup, clojure.lang.IObj, clojure.lang.IPersistentMap, java.io.Serializable, java.util.Map
   
    
    
    Field
    record
    
    Fields: 
[name type declaring-class flags]
    Protocols: 
    Interfaces: 
clojure.lang.IHashEq, clojure.lang.IKeywordLookup, clojure.lang.ILookup, clojure.lang.IObj, clojure.lang.IPersistentMap, java.io.Serializable, java.util.Map
   
    
    
    JavaReflector
    type
    
    Fields: 
[classloader]
    Protocols: 
Reflector
    Interfaces: 
   
    
    
    Method
    record
    
    Fields: 
[name return-type declaring-class parameter-types exception-types flags]
    Protocols: 
    Interfaces: 
clojure.lang.IHashEq, clojure.lang.IKeywordLookup, clojure.lang.ILookup, clojure.lang.IObj, clojure.lang.IPersistentMap, java.io.Serializable, java.util.Map
   
 
  
  Public Variables and Functions
  
    
    
    ->AsmReflector
    function
    Usage: (->AsmReflector class-resolver)
    Positional factory function for class clojure.reflect.AsmReflector.
    
    
    
    Source
   
    
    
    ->Constructor
    function
    Usage: (->Constructor name declaring-class parameter-types exception-types flags)
    Positional factory function for class clojure.reflect.Constructor.
    
    
    
    Source
   
    
    
    ->Field
    function
    Usage: (->Field name type declaring-class flags)
    Positional factory function for class clojure.reflect.Field.
    
    
    
    Source
   
    
    
    ->JavaReflector
    function
    Usage: (->JavaReflector classloader)
    Positional factory function for class clojure.reflect.JavaReflector.
    
    
    
    Source
   
    
    
    ->Method
    function
    Usage: (->Method name return-type declaring-class parameter-types exception-types flags)
    Positional factory function for class clojure.reflect.Method.
    
    
    
    Source
   
    
    
    flag-descriptors
    var
    
    The Java access bitflags, along with their friendly names and
the kinds of objects to which they can apply.
    
    
    
    Source
   
    
    
    map->Constructor
    function
    Usage: (map->Constructor m#)
    Factory function for class clojure.reflect.Constructor, taking a map of keywords to field values.
    
    
    
    Source
   
    
    
    map->Field
    function
    Usage: (map->Field m#)
    Factory function for class clojure.reflect.Field, taking a map of keywords to field values.
    
    
    
    Source
   
    
    
    map->Method
    function
    Usage: (map->Method m#)
    Factory function for class clojure.reflect.Method, taking a map of keywords to field values.
    
    
    
    Source
   
    
    
    reflect
    function
    Usage: (reflect obj & options)
    Alpha - subject to change.
Reflect on the type of obj (or obj itself if obj is a class).
Return value and options are the same as for type-reflect. 
    
    Added in Clojure version 1.3
    
    Source
   
    
    
    type-reflect
    function
    Usage: (type-reflect typeref & options)
    Alpha - subject to change.
 Reflect on a typeref, returning a map with :bases, :flags, and
:members. In the discussion below, names are always Clojure symbols.
 :bases            a set of names of the type's bases
 :flags            a set of keywords naming the boolean attributes
                   of the type.
 :members          a set of the type's members. Each member is a map
                   and can be a constructor, method, or field.
 Keys common to all members:
 :name             name of the type 
 :declaring-class  name of the declarer
 :flags            keyword naming boolean attributes of the member
 Keys specific to constructors:
 :parameter-types  vector of parameter type names
 :exception-types  vector of exception type names
 Key specific to methods:
 :parameter-types  vector of parameter type names
 :exception-types  vector of exception type names
 :return-type      return type name
 Keys specific to fields:
 :type             type name
 Options:
   :ancestors     in addition to the keys described above, also
                  include an :ancestors key with the entire set of
                  ancestors, and add all ancestor members to
                  :members.
   :reflector     implementation to use. Defaults to JavaReflector,
                  AsmReflector is also an option.
    
    Added in Clojure version 1.3
    
    Source