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: 15108 $
Author:
James Strachan, Guillaume Laforge, Jochen Theodorou, Graeme Rocher, Alex Tkachman
See Also:
MetaClass

Nested Class Summary
static class MetaClassImpl.Index
           
 
Field Summary
protected  MetaMethod getPropertyMethod
           
protected static String INVOKE_METHOD_METHOD
           
protected  MetaMethod invokeMethodMethod
           
protected  boolean isGroovyObject
           
protected  boolean isMap
           
protected  MetaMethodIndex metaMethodIndex
           
protected static String METHOD_MISSING
           
protected static String PROPERTY_MISSING
           
protected  MetaClassRegistry registry
           
protected  MetaMethod setPropertyMethod
           
protected static String STATIC_METHOD_MISSING
           
protected static String STATIC_PROPERTY_MISSING
           
protected  CachedClass theCachedClass
           
protected  Class theClass
           
 
Constructor Summary
MetaClassImpl(Class theClass)
           
MetaClassImpl(Class theClass, MetaMethod[] add)
           
MetaClassImpl(MetaClassRegistry registry, Class theClass)
           
MetaClassImpl(MetaClassRegistry registry, Class theClass, MetaMethod[] add)
           
 
Method Summary
 void addMetaBeanProperty(MetaBeanProperty mp)
          Adds a new MetaBeanProperty to this MetaClass
 void addMetaMethod(MetaMethod method)
          adds a MetaMethod to this class.
protected  void addMetaMethodToIndex(MetaMethod method, MetaMethodIndex.Header header)
           
 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 checkIfGroovyObjectMethod(MetaMethod metaMethod)
          Checks if the metaMethod is a method from the GroovyObject interface such as setProperty, getProperty and invokeMethod
protected  void checkInitalised()
          checks if the initialisation of the class id complete.
protected  Object chooseMethod(String methodName, Object methodOrList, Class[] arguments)
          Chooses the correct method to use from a list of methods which match by name.
protected  void clearInvocationCaches()
          remove all method call cache entries.
 CallSite createConstructorSite(CallSite site, Object[] args)
           
 CallSite createPogoCallCurrentSite(CallSite site, Class sender, Object[] args)
           
 CallSite createPogoCallSite(CallSite site, Object[] args)
           
 CallSite createPojoCallSite(CallSite site, Object receiver, Object[] args)
           
 CallSite createStaticSite(CallSite site, Object[] args)
           
protected  void dropMethodCache(String name)
           
protected  void dropStaticMethodCache(String name)
           
protected static MetaMethod findMethodInClassHierarchy(Class instanceKlazz, String methodName, Class[] arguments, MetaClass metaClass)
           
protected  MetaMethod findMixinMethod(String methodName, Class[] arguments)
           
protected static MetaMethod findOwnMethod(Class instanceKlazz, String methodName, Class[] arguments, MetaClass metaClass, MetaMethod method)
           
protected  MetaBeanProperty findPropertyInClassHierarchy(String propertyName, CachedClass theClass)
           
 MetaMethod[] getAdditionalMetaMethods()
           
 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.
 ClassInfo getClassInfo()
           
 ClassNode getClassNode()
          Obtains a reference to the original AST for the MetaClass if it is available at runtime
 MetaProperty getEffectiveGetMetaProperty(Class sender, Object object, String name, boolean useSuper)
           
 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, Object[] 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
protected  Object getSubclassMetaMethods(String methodName)
           
protected  LinkedList<CachedClass> getSuperClasses()
           
 CachedClass getTheCachedClass()
           
 Class getTheClass()
          Retrieves that Java Class that the attached Meta behaviours apply to
 int getVersion()
           
 MetaProperty hasProperty(Object obj, String name)
          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
 void incVersion()
           
 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
protected  void onGetPropertyFoundInHierarchy(MetaMethod method)
           
protected  void onInvokeMethodFoundInHierarchy(MetaMethod method)
           
protected  void onMixinMethodFound(MetaMethod method)
           
protected  void onSetPropertyFoundInHierarchy(MetaMethod method)
           
protected  void onSuperMethodFoundInHierarchy(MetaMethod method)
           
protected  void onSuperPropertyFoundInHierarchy(MetaBeanProperty property)
           
 MetaMethod pickMethod(String methodName, Class[] arguments)
          Selects a method by name and argument classes.
 List respondsTo(Object obj, String name)
          Returns an object satisfying Groovy truth if the implementing MetaClass responds to a method with the given name regardless of arguments.
 List respondsTo(Object obj, String name, Object[] argTypes)
          Returns an object satisfying Groovy truth if the implementing MetaClass responds to 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, Object[] arguments)
           
 int selectConstructorAndTransformArguments(int numberOfConstructors, 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

INVOKE_METHOD_METHOD

protected static final String INVOKE_METHOD_METHOD
See Also:
Constant Field Values

theClass

protected final Class theClass

theCachedClass

protected final CachedClass theCachedClass

getPropertyMethod

protected MetaMethod getPropertyMethod

invokeMethodMethod

protected MetaMethod invokeMethodMethod

setPropertyMethod

protected MetaMethod setPropertyMethod

registry

protected MetaClassRegistry registry

isGroovyObject

protected final boolean isGroovyObject

isMap

protected final boolean isMap

metaMethodIndex

protected final MetaMethodIndex metaMethodIndex
Constructor Detail

MetaClassImpl

public MetaClassImpl(Class theClass,
                     MetaMethod[] add)

MetaClassImpl

public MetaClassImpl(Class theClass)

MetaClassImpl

public MetaClassImpl(MetaClassRegistry registry,
                     Class theClass,
                     MetaMethod[] add)

MetaClassImpl

public MetaClassImpl(MetaClassRegistry registry,
                     Class theClass)
Method Detail

getTheCachedClass

public final CachedClass getTheCachedClass()

respondsTo

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

Returns an object satisfying Groovy truth if the implementing MetaClass responds to a method with the given name and arguments types.

Note that this method's return value is based on realised methods and does not take into account objects or classes that implement invokeMethod or methodMissing

This method is "safe" in that it will always return a value and never throw an exception

Specified by:
respondsTo in interface MetaObjectProtocol
Parameters:
obj - The object to inspect
name - The name of the method of interest
argTypes - The argument types to match against
Returns:
A List of MetaMethods matching the argument types which will be empty if no matching methods exist
See Also:
MetaObjectProtocol.respondsTo(Object,String, Object[])

respondsTo

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

Returns an object satisfying Groovy truth if the implementing MetaClass responds to 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's return value is based on realised methods and does not take into account objects or classes that implement invokeMethod or methodMissing

This method is "safe" in that it will always return a value and never throw an exception

Specified by:
respondsTo in interface MetaObjectProtocol
Parameters:
obj - The object to inspect
name - The name of the method of interest
Returns:
A List of MetaMethods which will be empty if no methods with the given name 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()

getSuperClasses

protected LinkedList<CachedClass> getSuperClasses()

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

onSuperPropertyFoundInHierarchy

protected void onSuperPropertyFoundInHierarchy(MetaBeanProperty property)

onMixinMethodFound

protected void onMixinMethodFound(MetaMethod method)

onSuperMethodFoundInHierarchy

protected void onSuperMethodFoundInHierarchy(MetaMethod method)

onInvokeMethodFoundInHierarchy

protected void onInvokeMethodFoundInHierarchy(MetaMethod method)

onSetPropertyFoundInHierarchy

protected void onSetPropertyFoundInHierarchy(MetaMethod method)

onGetPropertyFoundInHierarchy

protected void onGetPropertyFoundInHierarchy(MetaMethod method)

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,
                                       Object[] arguments,
                                       boolean isCallToSuper)

retrieveConstructor

public Constructor retrieveConstructor(Class[] arguments)

retrieveStaticMethod

public MetaMethod retrieveStaticMethod(String methodName,
                                       Object[] 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 numberOfConstructors,
                                                  Object[] arguments)
Description copied from interface: MetaClass
Internal method to support Groovy runtime. Not for client usage.

Specified by:
selectConstructorAndTransformArguments in interface MetaClass
Parameters:
numberOfConstructors - 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

getEffectiveGetMetaProperty

public MetaProperty getEffectiveGetMetaProperty(Class sender,
                                                Object object,
                                                String name,
                                                boolean useSuper)

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()

addMetaMethodToIndex

protected void addMetaMethodToIndex(MetaMethod method,
                                    MetaMethodIndex.Header header)

checkIfGroovyObjectMethod

protected final void checkIfGroovyObjectMethod(MetaMethod metaMethod)
Checks if the metaMethod is a method from the GroovyObject interface such as setProperty, getProperty and invokeMethod

Parameters:
metaMethod - The metaMethod instance
See Also:
GroovyObject

isInitialized

protected boolean isInitialized()

chooseMethod

protected Object chooseMethod(String methodName,
                              Object methodOrList,
                              Class[] arguments)
Chooses the correct method to use from a list of methods which match by name.

Parameters:
methodOrList - the possible methods to choose from
arguments -

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)

createPojoCallSite

public CallSite createPojoCallSite(CallSite site,
                                   Object receiver,
                                   Object[] args)

createStaticSite

public CallSite createStaticSite(CallSite site,
                                 Object[] args)

createPogoCallSite

public CallSite createPogoCallSite(CallSite site,
                                   Object[] args)

createPogoCallCurrentSite

public CallSite createPogoCallCurrentSite(CallSite site,
                                          Class sender,
                                          Object[] args)

createConstructorSite

public CallSite createConstructorSite(CallSite site,
                                      Object[] args)

getClassInfo

public ClassInfo getClassInfo()

getVersion

public int getVersion()

incVersion

public void incVersion()

getAdditionalMetaMethods

public MetaMethod[] getAdditionalMetaMethods()

findPropertyInClassHierarchy

protected MetaBeanProperty findPropertyInClassHierarchy(String propertyName,
                                                        CachedClass theClass)

findMixinMethod

protected MetaMethod findMixinMethod(String methodName,
                                     Class[] arguments)

findMethodInClassHierarchy

protected static MetaMethod findMethodInClassHierarchy(Class instanceKlazz,
                                                       String methodName,
                                                       Class[] arguments,
                                                       MetaClass metaClass)

findOwnMethod

protected static MetaMethod findOwnMethod(Class instanceKlazz,
                                          String methodName,
                                          Class[] arguments,
                                          MetaClass metaClass,
                                          MetaMethod method)

getSubclassMetaMethods

protected Object getSubclassMetaMethods(String methodName)

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 by the implementation of this MetaClass. pickMethod may or may not be used during the method selection process when invoking a method. There is 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-2009 The Codehaus. All rights reserved.