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
  • Field Details

  • Constructor Details

    • MetaClassRegistryImpl

      public MetaClassRegistryImpl()
    • MetaClassRegistryImpl

      public MetaClassRegistryImpl​(int loadDefault)
    • MetaClassRegistryImpl

      public MetaClassRegistryImpl​(boolean useAccessible)
      Parameters:
      useAccessible - defines whether or not 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 meta class 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)
      Registers a new MetaClass in the registry to customize the type
      Specified by:
      setMetaClass in interface MetaClassRegistry
      Parameters:
      theClass -
      theMetaClass -
    • 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 meta classes.
      Specified by:
      addMetaClassRegistryChangeEventListener in interface MetaClassRegistry
      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 interface MetaClassRegistry
      Parameters:
      listener - the listener
    • removeMetaClassRegistryChangeEventListener

      public void removeMetaClassRegistryChangeEventListener​(MetaClassRegistryChangeEventListener listener)
      Removes a constant meta class 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 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 interface MetaClassRegistry
      Returns:
      the iterator.