org.codehaus.groovy.runtime.metaclass
Class MetaClassRegistryImpl

java.lang.Object
  extended by 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 & reflection information and allows methods to be dynamically added to existing classes at runtime

Version:
$Revision: 19560 $
Author:
James Strachan, John Wilson, Jochen Theodorou, Graeme Rocher, Alex Tkachman

Nested Class Summary
 
Nested classes/interfaces inherited from interface groovy.lang.MetaClassRegistry
MetaClassRegistry.MetaClassCreationHandle
 
Field Summary
static int DONT_LOAD_DEFAULT
           
static int LOAD_DEFAULT
           
 
Constructor Summary
MetaClassRegistryImpl()
           
MetaClassRegistryImpl(boolean useAccessible)
           
MetaClassRegistryImpl(int loadDefault)
           
MetaClassRegistryImpl(int loadDefault, boolean useAccessible)
           
 
Method Summary
 void addMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)
          Adds a listener for constant meta classes.
protected  void fireConstantMetaClassUpdate(Class c, MetaClass newMc)
          Causes the execution of all registered listeners.
static MetaClassRegistry getInstance(int includeExtension)
          Singleton of MetaClassRegistry.
 FastArray getInstanceMethods()
           
 MetaClass getMetaClass(Class theClass)
           
 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 of all registered ConstantMetaClassListener instances.
 FastArray getStaticMethods()
           
 Iterator iterator()
          Returns an iterator to iterate over all constant meta classes.
 void removeMetaClass(Class theClass)
          Removes a cached MetaClass from the registry
 void 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 type
 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 Detail

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 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 Detail

getMetaClass

public final MetaClass getMetaClass(Class theClass)
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

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(Class c,
                                           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:
c - the class
newMc - the new MetaClass

getMetaClassRegistryChangeEventListeners

public MetaClassRegistryChangeEventListener[] getMetaClassRegistryChangeEventListeners()
Gets an array of 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 -

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.

Copyright © 2003-2010 The Codehaus. All rights reserved.