groovy.lang
Class MetaClassRegistry

java.lang.Object
  extended bygroovy.lang.MetaClassRegistry

public class MetaClassRegistry
extends java.lang.Object

A registery of MetaClass instances which caches introspection & reflection information and allows methods to be dynamically added to existing classes at runtime

Version:
$Revision: 1.19 $
Author:
James Strachan

Field Summary
static int DONT_LOAD_DEFAULT
           
private static MetaClassRegistry instanceExclude
           
private static MetaClassRegistry instanceInclude
           
static int LOAD_DEFAULT
           
private  GroovyClassLoader loader
           
private  java.util.Map loaderMap
           
private  java.util.Map metaClasses
           
private  boolean useAccessible
           
 
Constructor Summary
MetaClassRegistry()
           
MetaClassRegistry(boolean useAccessible)
           
MetaClassRegistry(int loadDefault)
           
 
Method Summary
(package private)  void checkInitialised()
          Ensures that all the registered MetaClass instances are initalized
 java.lang.reflect.Constructor getDefinedConstructor(java.lang.Class theClass, java.lang.Class[] args)
           
 MetaMethod getDefinedMethod(java.lang.Class theClass, java.lang.String methodName, java.lang.Class[] args, boolean isStatic)
           
private  GroovyClassLoader getGroovyLoader(java.lang.ClassLoader loader)
           
static MetaClassRegistry getIntance(int includeExtension)
          Singleton of MetaClassRegistry.
 MetaClass getMetaClass(java.lang.Class theClass)
           
 java.lang.Class loadClass(java.lang.ClassLoader loader, java.lang.String name)
           
 java.lang.Class loadClass(java.lang.ClassLoader loader, java.lang.String name, byte[] bytecode)
           
 java.lang.Class loadClass(java.lang.String name)
           
 java.lang.Class loadClass(java.lang.String name, byte[] bytecode)
          A helper class to load meta class bytecode into the class loader
(package private)  MetaClass lookup(java.lang.Class theClass)
          Used by MetaClass when registering new methods which avoids initializing the MetaClass instances on lookup
 void removeMetaClass(java.lang.Class theClass)
           
 void setMetaClass(java.lang.Class theClass, MetaClass theMetaClass)
          Registers a new MetaClass in the registry to customize the type
 boolean useAccessible()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

metaClasses

private java.util.Map metaClasses

useAccessible

private boolean useAccessible

loaderMap

private java.util.Map loaderMap

loader

private GroovyClassLoader loader

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

instanceInclude

private static MetaClassRegistry instanceInclude

instanceExclude

private static MetaClassRegistry instanceExclude
Constructor Detail

MetaClassRegistry

public MetaClassRegistry()

MetaClassRegistry

public MetaClassRegistry(int loadDefault)

MetaClassRegistry

public MetaClassRegistry(boolean useAccessible)
Parameters:
useAccessible - defines whether or not the java.lang.reflect.AccessibleObject.setAccessible(); method will be called to enable access to all methods when using reflection
Method Detail

getMetaClass

public MetaClass getMetaClass(java.lang.Class theClass)

removeMetaClass

public void removeMetaClass(java.lang.Class theClass)

setMetaClass

public void setMetaClass(java.lang.Class theClass,
                         MetaClass theMetaClass)
Registers a new MetaClass in the registry to customize the type

Parameters:
theClass -
theMetaClass -

useAccessible

public boolean useAccessible()

loadClass

public java.lang.Class loadClass(java.lang.String name,
                                 byte[] bytecode)
                          throws java.lang.ClassNotFoundException
A helper class to load meta class bytecode into the class loader

Throws:
java.lang.ClassNotFoundException

loadClass

public java.lang.Class loadClass(java.lang.ClassLoader loader,
                                 java.lang.String name,
                                 byte[] bytecode)
                          throws java.lang.ClassNotFoundException
Throws:
java.lang.ClassNotFoundException

loadClass

public java.lang.Class loadClass(java.lang.ClassLoader loader,
                                 java.lang.String name)
                          throws java.lang.ClassNotFoundException
Throws:
java.lang.ClassNotFoundException

loadClass

public java.lang.Class loadClass(java.lang.String name)
                          throws java.lang.ClassNotFoundException
Throws:
java.lang.ClassNotFoundException

getGroovyLoader

private GroovyClassLoader getGroovyLoader(java.lang.ClassLoader loader)

checkInitialised

void checkInitialised()
Ensures that all the registered MetaClass instances are initalized


lookup

MetaClass lookup(java.lang.Class theClass)
Used by MetaClass when registering new methods which avoids initializing the MetaClass instances on lookup


getDefinedMethod

public MetaMethod getDefinedMethod(java.lang.Class theClass,
                                   java.lang.String methodName,
                                   java.lang.Class[] args,
                                   boolean isStatic)

getDefinedConstructor

public java.lang.reflect.Constructor getDefinedConstructor(java.lang.Class theClass,
                                                           java.lang.Class[] args)

getIntance

public static MetaClassRegistry getIntance(int includeExtension)
Singleton of MetaClassRegistry. Shall we use threadlocal to store the instance?

Parameters:
includeExtension -
Returns:


Copyright © 2003-2005 The Codehaus. All Rights Reserved.