Reflection on Host Types Alpha - subject to change.
Two main entry points:
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:
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.
(resolve-class this name)
Given a class name, return that typeref's class bytes as an InputStream.
Given a class name, return that typeref's class bytes as an InputStream.
The Java access bitflags, along with their friendly names and the kinds of objects to which they can apply.
The Java access bitflags, along with their friendly names and the kinds of objects to which they can apply.
(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.
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.
Protocol for reflection implementers.
Protocol for reflection implementers.
(do-reflect reflector typeref)
(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.
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.
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.
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.
(typename o)
Returns Java name as returned by ASM getClassName, e.g. byte[], java.lang.String[]
Returns Java name as returned by ASM getClassName, e.g. byte[], java.lang.String[]
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close