Package org.codehaus.groovy.runtime.metaclass

# 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 final int`
  `DONT_LOAD_DEFAULT`
  `static final String`
  `EXTENSION_DISABLE_PROPERTY`
  `static final int`
  `LOAD_DEFAULT`
  `static final String`
  `MODULE_META_INF_FILE`
  Deprecated.
  Use `ExtensionModuleScanner.MODULE_META_INF_FILE` instead

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `MetaClassRegistryImpl()`
  `MetaClassRegistryImpl(boolean useAccessible)`
  `MetaClassRegistryImpl(int loadDefault)`
  `MetaClassRegistryImpl(int loadDefault, boolean useAccessible)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)`
  Adds a listener for constant metaclasses.
  `void`
  `addNonRemovableMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)`
  Adds a listener for constant metaclasses.
  `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()`
  `final MetaClass`
  `getMetaClass(Class theClass)`
  The main function of the registry If a metaclass exists then return it otherwise create one, put it in the registry and return it
  `MetaClass`
  `getMetaClass(Object obj)`
  `MetaClassRegistry.MetaClassCreationHandle`
  `getMetaClassCreationHandler()`
  Gets a handle internally used to create MetaClass implementations WARNING: experimental code, likely to change soon
  `MetaClassRegistryChangeEventListener[]`
  `getMetaClassRegistryChangeEventListeners()`
  Gets an array of all registered ConstantMetaClassListener instances.
  `ExtensionModuleRegistry`
  `getModuleRegistry()`
  `FastArray`
  `getStaticMethods()`
  `Iterator`
  `iterator()`
  Returns an iterator to iterate over all constant metaclasses.
  `void`
  `registerExtensionModuleFromProperties(Properties properties, ClassLoader classLoader, Map<CachedClass,List<MetaMethod>> map)`
  `void`
  `removeMetaClass(Class theClass)`
  Removes a cached MetaClass from the registry
  `void`
  `removeMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)`
  Removes a constant metaclass listener.
  `void`
  `setMetaClass(Class theClass, MetaClass theMetaClass)`
  Adds a metaclass to the registry for the given class
  `void`
  `setMetaClass(Object obj, MetaClass theMetaClass)`
  `void`
  `setMetaClassCreationHandle(MetaClassRegistry.MetaClassCreationHandle handle)`
  Sets a handle internally used to create MetaClass implementations.
  `boolean`
  `useAccessible()`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### MODULE_META_INF_FILE

    @Deprecated public static final String MODULE_META_INF_FILE
    Deprecated.
    Use `ExtensionModuleScanner.MODULE_META_INF_FILE` instead
    See Also:
      - Constant Field Values

  - ### EXTENSION_DISABLE_PROPERTY

    public static final String EXTENSION_DISABLE_PROPERTY
    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 Details

  - ### MetaClassRegistryImpl

    public MetaClassRegistryImpl()

  - ### MetaClassRegistryImpl

    public MetaClassRegistryImpl(int loadDefault)

  - ### MetaClassRegistryImpl

    public MetaClassRegistryImpl(boolean useAccessible)
    Parameters:
      `useAccessible` - defines whether the `AccessibleObject.setAccessible(boolean)` method will be called to enable access to all methods when using reflection

  - ### MetaClassRegistryImpl

    public MetaClassRegistryImpl(int loadDefault, boolean useAccessible)

- ## Method Details

  - ### 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 metaclass exists then return it otherwise create one, put it in the registry and return it
    Specified by:
      `getMetaClass` in interface `MetaClassRegistry`

  - ### getMetaClass

    public MetaClass getMetaClass(Object obj)

  - ### removeMetaClass

    public void removeMetaClass(Class theClass)
    Description copied from interface: `MetaClassRegistry`
    Removes a cached MetaClass from the registry
    Specified by:
      `removeMetaClass` in interface `MetaClassRegistry`
    Parameters:
      `theClass` - The Java class of the MetaClass to remove

  - ### setMetaClass

    public void setMetaClass(Class theClass, MetaClass theMetaClass)
    Description copied from interface: `MetaClassRegistry`
    Adds a metaclass to the registry for the given class
    Specified by:
      `setMetaClass` in interface `MetaClassRegistry`
    Parameters:
      `theClass` - The class
      `theMetaClass` - The MetaClass for theClass

  - ### setMetaClass

    public void setMetaClass(Object obj, MetaClass 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 interface `MetaClassRegistry`
    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 interface `MetaClassRegistry`
    Parameters:
      `handle` - the handle

  - ### addMetaClassRegistryChangeEventListener

    public void addMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)
    Adds a listener for constant metaclasses.
    Specified by:
      `addMetaClassRegistryChangeEventListener` in interface `MetaClassRegistry`
    Parameters:
      `listener` - the listener

  - ### addNonRemovableMetaClassRegistryChangeEventListener

    public void addNonRemovableMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)
    Adds a listener for constant metaclasses. This listener cannot be removed!
    Specified by:
      `addNonRemovableMetaClassRegistryChangeEventListener` in interface `MetaClassRegistry`
    Parameters:
      `listener` - the listener

  - ### removeMetaClassRegistryChangeEventListener

    public void removeMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)
    Removes a constant metaclass listener.
    Specified by:
      `removeMetaClassRegistryChangeEventListener` in interface `MetaClassRegistry`
    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 class
      `oldMC` - the old MetaClass
      `newMc` - the new MetaClass

  - ### getMetaClassRegistryChangeEventListeners

    public MetaClassRegistryChangeEventListener[] getMetaClassRegistryChangeEventListeners()
    Gets an array of all registered ConstantMetaClassListener instances.
    Specified by:
      `getMetaClassRegistryChangeEventListeners` in interface `MetaClassRegistry`
    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 metaclasses. This iterator can be seen as making a snapshot of the current state of the registry. The snapshot will include all metaclasses that has been used unless they are already collected. Collected metaclasses 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 interface `MetaClassRegistry`
    Returns:
      the iterator.