Class MetaClassRegistryImpl
- java.lang.Object
-
- org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl
-
- All Implemented Interfaces:
MetaClassRegistry
public class MetaClassRegistryImpl extends Object implements MetaClassRegistry
A registry of MetaClass instances which caches introspection and reflection information and allows methods to be dynamically added to existing classes at runtime
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface groovy.lang.MetaClassRegistry
MetaClassRegistry.MetaClassCreationHandle
-
-
Field Summary
Fields Modifier and Type Field Description static int
DONT_LOAD_DEFAULT
static int
LOAD_DEFAULT
static String
MODULE_META_INF_FILE
Deprecated.Useinstead
-
Constructor Summary
Constructors Constructor Description MetaClassRegistryImpl()
MetaClassRegistryImpl(boolean useAccessible)
MetaClassRegistryImpl(int loadDefault)
MetaClassRegistryImpl(int loadDefault, boolean useAccessible)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)
Adds a listener for constant meta classes.void
addNonRemovableMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)
Adds a listener for constant meta classes.protected void
fireConstantMetaClassUpdate(Object obj, Class c, MetaClass oldMC, MetaClass newMc)
Causes the execution of all registered listeners.static MetaClassRegistry
getInstance(int includeExtension)
Singleton of MetaClassRegistry.FastArray
getInstanceMethods()
MetaClass
getMetaClass(Class theClass)
The main function of the registry If a meta class exists then return it otherwise create one, put it in the registry and return itMetaClass
getMetaClass(Object obj)
MetaClassRegistry.MetaClassCreationHandle
getMetaClassCreationHandler()
Gets a handle internally used to create MetaClass implementations WARNING: experimental code, likely to change soonMetaClassRegistryChangeEventListener[]
getMetaClassRegistryChangeEventListeners()
Gets an array of all registered ConstantMetaClassListener instances.ExtensionModuleRegistry
getModuleRegistry()
FastArray
getStaticMethods()
Iterator
iterator()
Returns an iterator to iterate over all constant meta classes.void
registerExtensionModuleFromProperties(Properties properties, ClassLoader classLoader, Map<CachedClass,List<MetaMethod>> map)
void
removeMetaClass(Class theClass)
Removes a cached MetaClass from the registryvoid
removeMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)
Removes a constant meta class listener.void
setMetaClass(Class theClass, MetaClass theMetaClass)
Registers a new MetaClass in the registry to customize the typevoid
setMetaClass(Object obj, MetaClass theMetaClass)
void
setMetaClassCreationHandle(MetaClassRegistry.MetaClassCreationHandle handle)
Sets a handle internally used to create MetaClass implementations.boolean
useAccessible()
-
-
-
Field Detail
-
MODULE_META_INF_FILE
@Deprecated public static final String MODULE_META_INF_FILE
Deprecated.Useinstead
- See Also:
- Constant Field Values
-
LOAD_DEFAULT
public static final int LOAD_DEFAULT
- See Also:
- Constant Field Values
-
DONT_LOAD_DEFAULT
public static final int DONT_LOAD_DEFAULT
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
MetaClassRegistryImpl
public MetaClassRegistryImpl()
-
MetaClassRegistryImpl
public MetaClassRegistryImpl(int loadDefault)
-
MetaClassRegistryImpl
public MetaClassRegistryImpl(boolean useAccessible)
- Parameters:
useAccessible
- defines whether or not theAccessibleObject.setAccessible(boolean)
method will be called to enable access to all methods when using reflection
-
MetaClassRegistryImpl
public MetaClassRegistryImpl(int loadDefault, boolean useAccessible)
-
-
Method Detail
-
registerExtensionModuleFromProperties
public void registerExtensionModuleFromProperties(Properties properties, ClassLoader classLoader, Map<CachedClass,List<MetaMethod>> map)
-
getModuleRegistry
public ExtensionModuleRegistry getModuleRegistry()
-
getMetaClass
public final MetaClass getMetaClass(Class theClass)
Description copied from interface:MetaClassRegistry
The main function of the registry If a meta class exists then return it otherwise create one, put it in the registry and return it- Specified by:
getMetaClass
in interfaceMetaClassRegistry
-
removeMetaClass
public void removeMetaClass(Class theClass)
Description copied from interface:MetaClassRegistry
Removes a cached MetaClass from the registry- Specified by:
removeMetaClass
in interfaceMetaClassRegistry
- Parameters:
theClass
- The Java class of the MetaClass to remove
-
setMetaClass
public void setMetaClass(Class theClass, MetaClass theMetaClass)
Registers a new MetaClass in the registry to customize the type- Specified by:
setMetaClass
in interfaceMetaClassRegistry
- Parameters:
theClass
-theMetaClass
-
-
useAccessible
public boolean useAccessible()
-
getMetaClassCreationHandler
public MetaClassRegistry.MetaClassCreationHandle getMetaClassCreationHandler()
Gets a handle internally used to create MetaClass implementations WARNING: experimental code, likely to change soon- Specified by:
getMetaClassCreationHandler
in interfaceMetaClassRegistry
- Returns:
- the handle
-
setMetaClassCreationHandle
public void setMetaClassCreationHandle(MetaClassRegistry.MetaClassCreationHandle handle)
Sets a handle internally used to create MetaClass implementations. When replacing the handle with a custom version, you should reuse the old handle to keep custom logic and to use the default logic as fall back. WARNING: experimental code, likely to change soon- Specified by:
setMetaClassCreationHandle
in interfaceMetaClassRegistry
- Parameters:
handle
- the handle
-
addMetaClassRegistryChangeEventListener
public void addMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)
Adds a listener for constant meta classes.- Specified by:
addMetaClassRegistryChangeEventListener
in interfaceMetaClassRegistry
- Parameters:
listener
- the listener
-
addNonRemovableMetaClassRegistryChangeEventListener
public void addNonRemovableMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)
Adds a listener for constant meta classes. This listener cannot be removed!- Specified by:
addNonRemovableMetaClassRegistryChangeEventListener
in interfaceMetaClassRegistry
- Parameters:
listener
- the listener
-
removeMetaClassRegistryChangeEventListener
public void removeMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)
Removes a constant meta class listener.- Specified by:
removeMetaClassRegistryChangeEventListener
in interfaceMetaClassRegistry
- Parameters:
listener
- the listener
-
fireConstantMetaClassUpdate
protected void fireConstantMetaClassUpdate(Object obj, Class c, MetaClass oldMC, MetaClass newMc)
Causes the execution of all registered listeners. This method is used mostly internal to kick of the listener notification. It can also be used by subclasses to achieve the same.- Parameters:
obj
- object instance if the MetaClass change is on a per-instance metaclass (or null if global)c
- the classoldMC
- the old MetaClassnewMc
- the new MetaClass
-
getMetaClassRegistryChangeEventListeners
public MetaClassRegistryChangeEventListener[] getMetaClassRegistryChangeEventListeners()
Gets an array of all registered ConstantMetaClassListener instances.- Specified by:
getMetaClassRegistryChangeEventListeners
in interfaceMetaClassRegistry
- Returns:
- an array containing all change listener
-
getInstance
public static MetaClassRegistry getInstance(int includeExtension)
Singleton of MetaClassRegistry.- Parameters:
includeExtension
-- Returns:
- the registry
-
getInstanceMethods
public FastArray getInstanceMethods()
-
getStaticMethods
public FastArray getStaticMethods()
-
iterator
public Iterator iterator()
Returns an iterator to iterate over all constant meta classes. This iterator can be seen as making a snapshot of the current state of the registry. The snapshot will include all meta classes that has been used unless they are already collected. Collected meta classes will be skipped automatically, so you can expect that each element of the iteration is not null. Calling this method is thread safe, the usage of the iterator is not.- Specified by:
iterator
in interfaceMetaClassRegistry
- Returns:
- the iterator.
-
-