groovy.lang
Class MetaClassImpl

java.lang.Object
  extended by groovy.lang.MetaClassImpl
All Implemented Interfaces:
MetaClass, MetaObjectProtocol, MutableMetaClass
Direct Known Subclasses:
ClosureMetaClass, ExpandoMetaClass, ProxyMetaClass

public class MetaClassImpl
extends Object
implements MetaClass, MutableMetaClass

Allows methods to be dynamically added to existing classes at runtime

Version:
$Revision: 9482 $
Author:
James Strachan, Guillaume Laforge, Jochen Theodorou, Graeme Rocher, Alex Tkachman
See Also:
MetaClass

Nested Class Summary
static class MetaClassImpl.Index
           
 
Field Summary
protected static Class[] EMPTY_CLASS_ARRAY
           
protected  boolean isGroovyObject
           
protected  boolean isMap
           
protected static Logger LOG
           
protected static String METHOD_MISSING
           
protected static String PROPERTY_MISSING
           
protected  MetaClassRegistry registry
           
protected static String STATIC_METHOD_MISSING
           
protected static String STATIC_PROPERTY_MISSING
           
protected  CachedClass theCachedClass
           
protected  Class theClass
           
 
Constructor Summary
MetaClassImpl(Class theClass)
           
MetaClassImpl(MetaClassRegistry registry, Class theClass)
           
 
Method Summary
 void addMetaBeanProperty(MetaBeanProperty mp)
          Adds a new MetaBeanProperty to this MetaClass
 void addMetaMethod(MetaMethod method)
          adds a MetaMethod to this class.
 void addNewInstanceMethod(Method method)
          adds a new instance method to this MetaClass.
 void addNewStaticMethod(Method method)
          adds a new static method to this MetaClass.
protected  void cacheInstanceMethod(MethodKey key, MetaMethod method)
           
protected  void cacheStaticMethod(MethodKey key, MetaMethod method)
           
protected  void checkInitalised()
          checks if the initialisation of the class id complete.
protected  void clearInvocationCaches()
          remove all method call cache entries.
protected  void dropMethodCache(String name)
           
protected  void dropStaticMethodCache(String name)
           
 Object getAttribute(Class sender, Object receiver, String messageName, boolean useSuper)
          Retrieves the value of an attribute (field).
 Object getAttribute(Class sender, Object object, String attribute, boolean useSuper, boolean fromInsideClass)
          Looks up the given attribute (field) on the given object
 Object getAttribute(Object object, String attribute)
          Retrieves an attribute of an instance of the class returned by the getTheClass() method.
 ClassNode getClassNode()
          Obtains a reference to the original AST for the MetaClass if it is available at runtime
 MetaMethod getMetaMethod(String name, Object[] argTypes)
          Retrieves an instance MetaMethod for the given name and argument values, using the types of the argument values to establish the chosen MetaMethod
 List getMetaMethods()
          Retrieves a list of MetaMethod instances held by this class
 MetaProperty getMetaProperty(String name)
          Returns a MetaProperty for the given name or null if it doesn't exist
 List getMethods()
          Retrieves a list of MetaMethods held by the class
 MetaMethod getMethodWithCaching(Class sender, String methodName, Class[] arguments, boolean isCallToSuper)
           
 MetaMethod getMethodWithoutCaching(Class sender, String methodName, Class[] arguments, boolean isCallToSuper)
           
 List getProperties()
          Get all the properties defined for this type
 Object getProperty(Class sender, Object object, String name, boolean useSuper, boolean fromInsideClass)
          Retrieves a property on the given receiver for the specified arguments.
 Object getProperty(Object object, String property)
          Retrieves a property of an instance of the class returned by the getTheClass() method.
 MetaMethod getStaticMetaMethod(String name, Object[] argTypes)
          Retreives a static MetaMethod for the given name and argument values, using the types of the arguments to establish the chosen MetaMethod
 Class getTheClass()
          Retrieves that Java Class that the attached Meta behaviours apply to
 MetaProperty hasProperty(Object obj, String name)
          Returns true of the implementing MetaClass has a property of the given name
 void initialize()
          complete the initlialisation process.
 Object invokeConstructor(Object[] arguments)
          Invokes a constructor for the given arguments.
 Object invokeConstructorAt(Class at, Object[] arguments)
          Deprecated. use invokeConstructor instead
 Object invokeMethod(Class sender, Object object, String methodName, Object[] originalArguments, boolean isCallToSuper, boolean fromInsideClass)
          Invokes the given method on the object.
 Object invokeMethod(Object object, String methodName, Object arguments)
          Invokes a method on the given object, with the given name and single argument.
 Object invokeMethod(Object object, String methodName, Object[] originalArguments)
          Invokes the given method on the object.
 Object invokeMissingMethod(Object instance, String methodName, Object[] arguments)
          Attempts to invoke the methodMissing method otherwise throws a MissingMethodException
 Object invokeMissingProperty(Object instance, String propertyName, Object optionalValue, boolean isGetter)
          Invokes the propertyMissing method otherwise throws a MissingPropertyException
 Object invokeStaticMethod(Object object, String methodName, Object[] arguments)
          Invokes a static method on the given Object with the given name and arguments.
protected  Object invokeStaticMissingProperty(Object instance, String propertyName, Object optionalValue, boolean isGetter)
          Hook to deal with the case of MissingProperty for static properties.
 boolean isGroovyObject()
           
protected  boolean isInitialized()
           
 boolean isModified()
          Return whether the MetaClass has been modified or not
 MetaMethod pickMethod(String methodName, Class[] arguments)
          Selects a method by name and argument classes.
 List respondsTo(Object obj, String name)
          Returns true if the implementing MetaClass responds a method with the given name regardless of arguments.
 List respondsTo(Object obj, String name, Object[] argTypes)
          Returns true if the implementing MetaClass responds a method with the given name and arguments types
 Constructor retrieveConstructor(Class[] arguments)
           
protected  MetaMethod retrieveMethod(String methodName, Class[] arguments)
          Deprecated. use pickMethod instead
 MetaMethod retrieveStaticMethod(String methodName, Class[] arguments)
           
 int selectConstructorAndTransformArguments(int numberOfCosntructors, Object[] arguments)
          Internal method to support Groovy runtime.
 void setAttribute(Class sender, Object object, String attribute, Object newValue, boolean useSuper, boolean fromInsideClass)
          Sets the given attribute (field) on the given object
 void setAttribute(Object object, String attribute, Object newValue)
          Sets an attribute of an instance of the class returned by the getTheClass() method.
 void setProperties(Object bean, Map map)
          Sets a number of bean properties from the given Map where the keys are the String names of properties and the values are the values of the properties to set
 void setProperty(Class sender, Object object, String name, Object newValue, boolean useSuper, boolean fromInsideClass)
          Sets the property value on an object
 void setProperty(Object object, String property, Object newValue)
          Sets a property of an instance of the class returned by the getTheClass() method.
 String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

STATIC_METHOD_MISSING

protected static final String STATIC_METHOD_MISSING
See Also:
Constant Field Values

STATIC_PROPERTY_MISSING

protected static final String STATIC_PROPERTY_MISSING
See Also:
Constant Field Values

METHOD_MISSING

protected static final String METHOD_MISSING
See Also:
Constant Field Values

PROPERTY_MISSING

protected static final String PROPERTY_MISSING
See Also:
Constant Field Values

LOG

protected static final Logger LOG

theClass

protected final Class theClass

theCachedClass

protected final CachedClass theCachedClass

registry

protected MetaClassRegistry registry

isGroovyObject

protected final boolean isGroovyObject

isMap

protected final boolean isMap

EMPTY_CLASS_ARRAY

protected static final Class[] EMPTY_CLASS_ARRAY
Constructor Detail

MetaClassImpl

public MetaClassImpl(Class theClass)

MetaClassImpl

public MetaClassImpl(MetaClassRegistry registry,
                     Class theClass)
Method Detail

respondsTo

public List respondsTo(Object obj,
                       String name,
                       Object[] argTypes)
Description copied from interface: MetaObjectProtocol

Returns true if the implementing MetaClass responds a method with the given name and arguments types

Note that this method will only return true for realised methods and does not take into account objects or classes that implement invokeMethod or methodMissing

This method is "safe" and will always return a boolean and never throw an exception

Specified by:
respondsTo in interface MetaObjectProtocol
Parameters:
obj - The object to inspect
name - The name of the method
argTypes - The argument types
Returns:
A List of MetaMethods which is empty if non exist
See Also:
MetaObjectProtocol.respondsTo(Object,String, Object[])

respondsTo

public List respondsTo(Object obj,
                       String name)
Description copied from interface: MetaObjectProtocol

Returns true if the implementing MetaClass responds a method with the given name regardless of arguments. In other words this method will return for foo() and foo(String)

Note that this method will only return true for realised methods and does not take into account objects or classes that implement invokeMethod or methodMissing

This method is "safe" and will always return a boolean and never throw an exception

Specified by:
respondsTo in interface MetaObjectProtocol
Parameters:
obj - The object to inspect
name - The name of the method
Returns:
A List of MetaMethods which is empty if non exist
See Also:
MetaObjectProtocol.respondsTo(Object,String, Object[])

hasProperty

public MetaProperty hasProperty(Object obj,
                                String name)
Description copied from interface: MetaObjectProtocol

Returns true of the implementing MetaClass has a property of the given name

Note that this method will only return true for realised properties and does not take into account implementation of getProperty or propertyMissing

Specified by:
hasProperty in interface MetaObjectProtocol
Parameters:
obj - The object to inspect
name - The name of the property
Returns:
The MetaProperty or null if it doesn't exist
See Also:
MetaObjectProtocol.hasProperty(Object,String)

getMetaProperty

public MetaProperty getMetaProperty(String name)
Description copied from interface: MetaObjectProtocol
Returns a MetaProperty for the given name or null if it doesn't exist

Specified by:
getMetaProperty in interface MetaObjectProtocol
Parameters:
name - The name of the MetaProperty
Returns:
A MetaProperty or null
See Also:
MetaObjectProtocol.getMetaProperty(String)

getStaticMetaMethod

public MetaMethod getStaticMetaMethod(String name,
                                      Object[] argTypes)
Description copied from interface: MetaObjectProtocol
Retreives a static MetaMethod for the given name and argument values, using the types of the arguments to establish the chosen MetaMethod

Specified by:
getStaticMetaMethod in interface MetaObjectProtocol
Parameters:
name - The name of the MetaMethod
argTypes - The argument types
Returns:
A MetaMethod or null if it doesn't exist
See Also:
MetaObjectProtocol.getStaticMetaMethod(String, Object[])

getMetaMethod

public MetaMethod getMetaMethod(String name,
                                Object[] argTypes)
Description copied from interface: MetaObjectProtocol
Retrieves an instance MetaMethod for the given name and argument values, using the types of the argument values to establish the chosen MetaMethod

Specified by:
getMetaMethod in interface MetaObjectProtocol
Parameters:
name - The name of the MetaMethod
argTypes - The argument types
Returns:
A MetaMethod or null if it doesn't exist
See Also:
MetaObjectProtocol.getMetaMethod(String, Object[])

getTheClass

public Class getTheClass()
Description copied from interface: MetaObjectProtocol
Retrieves that Java Class that the attached Meta behaviours apply to

Specified by:
getTheClass in interface MetaObjectProtocol
Returns:
The java.lang.Class instance

isGroovyObject

public boolean isGroovyObject()

isModified

public boolean isModified()
Description copied from interface: MutableMetaClass
Return whether the MetaClass has been modified or not

Specified by:
isModified in interface MutableMetaClass
Returns:
True if it has

addNewInstanceMethod

public void addNewInstanceMethod(Method method)
Description copied from interface: MutableMetaClass
adds a new instance method to this MetaClass. Instance methods are able to overwrite the original methods of the class. Calling this method should not be done after initlise was called.

Specified by:
addNewInstanceMethod in interface MutableMetaClass
Parameters:
method - the method to be added

addNewStaticMethod

public void addNewStaticMethod(Method method)
Description copied from interface: MutableMetaClass
adds a new static method to this MetaClass. This is only possible as long as initilise was not called.

Specified by:
addNewStaticMethod in interface MutableMetaClass
Parameters:
method - the method to be added

invokeMethod

public Object invokeMethod(Object object,
                           String methodName,
                           Object arguments)
Description copied from interface: MetaObjectProtocol

Invokes a method on the given object, with the given name and single argument.

Specified by:
invokeMethod in interface MetaObjectProtocol
Parameters:
object - The Object to invoke the method on
methodName - The name of the method
arguments - The argument to the method
Returns:
The return value of the method which is null if the return type is void
See Also:
MetaObjectProtocol.invokeMethod(Object, String, Object[])

invokeMissingMethod

public Object invokeMissingMethod(Object instance,
                                  String methodName,
                                  Object[] arguments)
Description copied from interface: MetaClass

Attempts to invoke the methodMissing method otherwise throws a MissingMethodException

Specified by:
invokeMissingMethod in interface MetaClass
Parameters:
instance - The instance to invoke methodMissing on
methodName - The name of the method
arguments - The arguments to the method
Returns:
The results of methodMissing or throws MissingMethodException
See Also:
MissingMethodException

invokeMissingProperty

public Object invokeMissingProperty(Object instance,
                                    String propertyName,
                                    Object optionalValue,
                                    boolean isGetter)
Description copied from interface: MetaClass
Invokes the propertyMissing method otherwise throws a MissingPropertyException

Specified by:
invokeMissingProperty in interface MetaClass
Parameters:
instance - The instance of the class
propertyName - The name of the property
optionalValue - The value of the property which could be null in the case of a getter
isGetter - Whether the missing property event was the result of a getter or a setter
Returns:
The result of the propertyMissing method or throws MissingPropertyException

invokeStaticMissingProperty

protected Object invokeStaticMissingProperty(Object instance,
                                             String propertyName,
                                             Object optionalValue,
                                             boolean isGetter)
Hook to deal with the case of MissingProperty for static properties. The method will look attempt to look up "propertyMissing" handlers and invoke them otherwise thrown a MissingPropertyException

Parameters:
instance - The instance
propertyName - The name of the property
optionalValue - The value in the case of a setter
isGetter - True if its a getter
Returns:
The value in the case of a getter or a MissingPropertyException

invokeMethod

public Object invokeMethod(Object object,
                           String methodName,
                           Object[] originalArguments)
Invokes the given method on the object. TODO: should this be deprecated? If so, we have to propogate to many places.

Specified by:
invokeMethod in interface MetaObjectProtocol
Parameters:
object - The instance which the method is invoked on
methodName - The name of the method
originalArguments - The arguments to the method
Returns:
The return value of the method which is null if the return type is void
See Also:
MissingMethodException

invokeMethod

public Object invokeMethod(Class sender,
                           Object object,
                           String methodName,
                           Object[] originalArguments,
                           boolean isCallToSuper,
                           boolean fromInsideClass)
Invokes the given method on the object.

Specified by:
invokeMethod in interface MetaClass
Parameters:
sender - The java.lang.Class instance that invoked the method
object - The object which the method was invoked on
methodName - The name of the method
originalArguments - The arguments to the method
isCallToSuper - Whether the method is a call to a super class method
fromInsideClass - Whether the call was invoked from the inside or the outside of the class
Returns:
The return value of the method

getMethodWithCaching

public MetaMethod getMethodWithCaching(Class sender,
                                       String methodName,
                                       Class[] arguments,
                                       boolean isCallToSuper)

cacheInstanceMethod

protected void cacheInstanceMethod(MethodKey key,
                                   MetaMethod method)

cacheStaticMethod

protected void cacheStaticMethod(MethodKey key,
                                 MetaMethod method)

retrieveConstructor

public Constructor retrieveConstructor(Class[] arguments)

retrieveStaticMethod

public MetaMethod retrieveStaticMethod(String methodName,
                                       Class[] arguments)

getMethodWithoutCaching

public MetaMethod getMethodWithoutCaching(Class sender,
                                          String methodName,
                                          Class[] arguments,
                                          boolean isCallToSuper)

invokeStaticMethod

public Object invokeStaticMethod(Object object,
                                 String methodName,
                                 Object[] arguments)
Description copied from interface: MetaObjectProtocol

Invokes a static method on the given Object with the given name and arguments.

The Object can either be an instance of the class that this MetaObjectProtocol instance applies to or the java.lang.Class instance itself. If a method cannot be invoked a MissingMethodException is will be thrown

Specified by:
invokeStaticMethod in interface MetaObjectProtocol
Parameters:
object - An instance of the class returned by the getTheClass() method or the class itself
methodName - The name of the method
arguments - The arguments to the method
Returns:
The return value of the method which is null if the return type is void
See Also:
MissingMethodException

invokeConstructorAt

public Object invokeConstructorAt(Class at,
                                  Object[] arguments)
Deprecated. use invokeConstructor instead

Warning, this method will be removed


invokeConstructor

public Object invokeConstructor(Object[] arguments)
Description copied from interface: MetaObjectProtocol
Invokes a constructor for the given arguments. The MetaClass will attempt to pick the best argument which matches the types of the objects passed within the arguments array

Specified by:
invokeConstructor in interface MetaObjectProtocol
Parameters:
arguments - The arguments to the constructor
Returns:
An instance of the java.lang.Class that this MetaObjectProtocol object applies to

selectConstructorAndTransformArguments

public int selectConstructorAndTransformArguments(int numberOfCosntructors,
                                                  Object[] arguments)
Description copied from interface: MetaClass
Internal method to support Groovy runtime. Not for client usage.

Specified by:
selectConstructorAndTransformArguments in interface MetaClass
Parameters:
numberOfCosntructors - The number of constructors
arguments - The arguments
Returns:
selected index

checkInitalised

protected void checkInitalised()
checks if the initialisation of the class id complete. This method should be called as a form of assert, it is no way to test if there is still initialisation work to be done. Such logic must be implemented in a different way.

Throws:
IllegalStateException - if the initialisation is incomplete yet

setProperties

public void setProperties(Object bean,
                          Map map)
Sets a number of bean properties from the given Map where the keys are the String names of properties and the values are the values of the properties to set


getProperty

public Object getProperty(Class sender,
                          Object object,
                          String name,
                          boolean useSuper,
                          boolean fromInsideClass)
Description copied from interface: MetaClass

Retrieves a property on the given receiver for the specified arguments. The sender is the class that is requesting the property from the object. The MetaClass will attempt to establish the method to invoke based on the name and arguments provided.

The isCallToSuper and fromInsideClass help the Groovy runtime perform optimisations on the call to go directly to the super class if necessary

Specified by:
getProperty in interface MetaClass
Parameters:
sender - The java.lang.Class instance that requested the property
object - The Object which the property is being retrieved from
name - The name of the property
useSuper - Whether the call is to a super class property
fromInsideClass - ??
Returns:
the given property's value on the object

getProperties

public List getProperties()
Get all the properties defined for this type

Specified by:
getProperties in interface MetaClass
Specified by:
getProperties in interface MetaObjectProtocol
Returns:
a list of MetaProperty objects
See Also:
MetaProperty

addMetaBeanProperty

public void addMetaBeanProperty(MetaBeanProperty mp)
Adds a new MetaBeanProperty to this MetaClass

Specified by:
addMetaBeanProperty in interface MutableMetaClass
Parameters:
mp - The MetaBeanProperty

setProperty

public void setProperty(Class sender,
                        Object object,
                        String name,
                        Object newValue,
                        boolean useSuper,
                        boolean fromInsideClass)
Sets the property value on an object

Specified by:
setProperty in interface MetaClass
Parameters:
sender - The java.lang.Class instance that is mutating the property
object - The Object which the property is being set on
name - The name of the property
newValue - The new value of the property to set
useSuper - Whether the call is to a super class property
fromInsideClass - ??

getAttribute

public Object getAttribute(Class sender,
                           Object receiver,
                           String messageName,
                           boolean useSuper)
Description copied from interface: MetaClass
Retrieves the value of an attribute (field). This method is to support the Groovy runtime and not for general client API usage.

Specified by:
getAttribute in interface MetaClass
Parameters:
sender - The class of the object that requested the attribute
receiver - The instance
messageName - The name of the attribute
useSuper - Whether to look-up on the super class or not
Returns:
The attribute value

getAttribute

public Object getAttribute(Class sender,
                           Object object,
                           String attribute,
                           boolean useSuper,
                           boolean fromInsideClass)
Looks up the given attribute (field) on the given object


setAttribute

public void setAttribute(Class sender,
                         Object object,
                         String attribute,
                         Object newValue,
                         boolean useSuper,
                         boolean fromInsideClass)
Sets the given attribute (field) on the given object

Specified by:
setAttribute in interface MetaClass
Parameters:
sender - The class of the object that requested the attribute
object - The instance
attribute - The name of the attribute
newValue - The value of the attribute
useSuper - Whether to look-up on the super class or not
fromInsideClass - Whether the call happened from the inside or the outside of a class

getClassNode

public ClassNode getClassNode()
Description copied from interface: MetaClass
Obtains a reference to the original AST for the MetaClass if it is available at runtime

Specified by:
getClassNode in interface MetaClass
Returns:
The original AST or null if it cannot be returned

toString

public String toString()
Overrides:
toString in class Object

addMetaMethod

public void addMetaMethod(MetaMethod method)
adds a MetaMethod to this class. WARNING: this method will not do the neccessary steps for multimethod logic and using this method doesn't mean, that a method added here is replacing another method from a parent class completely. These steps are usually done by initalize, which means if you need these steps, you have to add the method before running initialize the first time.

Specified by:
addMetaMethod in interface MutableMetaClass
Parameters:
method - the MetaMethod
See Also:
initialize()

isInitialized

protected boolean isInitialized()

initialize

public void initialize()
Description copied from interface: MetaClass
complete the initlialisation process. After this method is called no methods should be added to the meta class. Invocation of methods or access to fields/proeprties is forbidden unless this method is called. This method should contain any initialisation code, taking a longer time to complete. An example is the creation of the Reflector. It is suggested to synchronize this method.

Specified by:
initialize in interface MetaClass

getMethods

public List getMethods()
Description copied from interface: MetaClass
Retrieves a list of MetaMethods held by the class

Specified by:
getMethods in interface MetaClass
Specified by:
getMethods in interface MetaObjectProtocol
Returns:
A list of MetaMethods
See Also:
MetaMethod

getMetaMethods

public List getMetaMethods()
Description copied from interface: MetaClass
Retrieves a list of MetaMethod instances held by this class

Specified by:
getMetaMethods in interface MetaClass
Returns:
A list of MetaMethod instances

dropStaticMethodCache

protected void dropStaticMethodCache(String name)

dropMethodCache

protected void dropMethodCache(String name)

getProperty

public Object getProperty(Object object,
                          String property)
Description copied from interface: MetaObjectProtocol

Retrieves a property of an instance of the class returned by the getTheClass() method.

What this means is largely down to the MetaClass implementation, however the default case would result in an attempt to invoke a JavaBean getter, or if no such getter exists a public field of the instance.

Specified by:
getProperty in interface MetaObjectProtocol
Parameters:
object - An instance of the class returned by the getTheClass() method
property - The name of the property to retrieve the value for
Returns:
The properties value
See Also:
MetaClassImpl

setProperty

public void setProperty(Object object,
                        String property,
                        Object newValue)
Description copied from interface: MetaObjectProtocol

Sets a property of an instance of the class returned by the getTheClass() method.

What this means is largely down to the MetaClass implementation, however the default case would result in an attempt to invoke a JavaBean setter, or if no such setter exists to set a public field of the instance.

Specified by:
setProperty in interface MetaObjectProtocol
Parameters:
object - An instance of the class returned by the getTheClass() method
property - The name of the property to set
newValue - The new value of the property
See Also:
MetaClassImpl

getAttribute

public Object getAttribute(Object object,
                           String attribute)
Description copied from interface: MetaObjectProtocol

Retrieves an attribute of an instance of the class returned by the getTheClass() method.

What this means is largely down to the MetaClass implementation, however the default case would result in attempt to read a field of the instance.

Specified by:
getAttribute in interface MetaObjectProtocol
Parameters:
object - An instance of the class returned by the getTheClass() method
attribute - The name of the attribute to retrieve the value for
Returns:
The attribute value
See Also:
MetaClassImpl

setAttribute

public void setAttribute(Object object,
                         String attribute,
                         Object newValue)
Description copied from interface: MetaObjectProtocol

Sets an attribute of an instance of the class returned by the getTheClass() method.

What this means is largely down to the MetaClass implementation, however the default case would result in an attempt to set a field of the instance.

Specified by:
setAttribute in interface MetaObjectProtocol
Parameters:
object - An instance of the class returned by the getTheClass() method
attribute - The name of the attribute to set
newValue - The new value of the attribute
See Also:
MetaClassImpl

pickMethod

public MetaMethod pickMethod(String methodName,
                             Class[] arguments)
Description copied from interface: MetaClass
Selects a method by name and argument classes. This method does not search for an exact match, it searches for a compatible method. For this the method selection mechanism is used as provided bye the implementation of this MetaClass. pickMethod may or may not used during the method selection process when invoking a method thereis no warranty for that.

Specified by:
pickMethod in interface MetaClass
Parameters:
methodName - the name of the method to pick
arguments - the method arguments
Returns:
a matching MetaMethod or null

retrieveMethod

protected MetaMethod retrieveMethod(String methodName,
                                    Class[] arguments)
Deprecated. use pickMethod instead


clearInvocationCaches

protected void clearInvocationCaches()
remove all method call cache entries. This should be done if a method is added during runtime, but not by using a category.


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