groovy.lang
Class DelegatingMetaClass

java.lang.Object
  extended by groovy.lang.DelegatingMetaClass
All Implemented Interfaces:
GroovyObject, MetaClass, MetaObjectProtocol, MutableMetaClass
Direct Known Subclasses:
HandleMetaClass, OwnedMetaClass

public class DelegatingMetaClass
extends Object
implements MetaClass, MutableMetaClass, GroovyObject

Author:
John Wilson

Field Summary
protected  MetaClass delegate
           
 
Constructor Summary
DelegatingMetaClass(Class theClass)
           
DelegatingMetaClass(MetaClass delegate)
           
 
Method Summary
 void addMetaBeanProperty(MetaBeanProperty metaBeanProperty)
          Adds a new MetaBeanProperty to the MetaClass
 void addMetaMethod(MetaMethod metaMethod)
          Adds a new MetaMethod to the MetaClass
 void addNewInstanceMethod(Method method)
          adds a new instance method to this MetaClass.
 void addNewStaticMethod(Method method)
          adds a new static method to this MetaClass.
 boolean equals(Object obj)
           
 MetaClass getAdaptee()
           
 Object getAttribute(Class sender, Object receiver, String messageName, boolean useSuper)
          Retrieves the value of an attribute (field).
 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
 MetaClass getMetaClass()
          Returns the metaclass for a given class.
 MetaMethod getMetaMethod(String name, Class[] argTypes)
           
 MetaMethod getMetaMethod(String name, Object[] args)
          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
 List getProperties()
          Retrives a list of MetaProperty instances that the MetaClass has
 Object getProperty(Class sender, Object receiver, String messageName, 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.
 Object getProperty(String property)
          Retrieves a property value.
 MetaMethod getStaticMetaMethod(String name, Class[] argTypes)
           
 MetaMethod getStaticMetaMethod(String name, Object[] args)
          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
 int hashCode()
           
 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 initialize()
          complete the initlialisation process.
 Object invokeConstructor(Object[] arguments)
          Invokes a constructor for the given arguments.
 Object invokeMethod(Class sender, Object receiver, String methodName, Object[] arguments, boolean isCallToSuper, boolean fromInsideClass)
          Invokes a method on the given receiver for the specified arguments.
 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[] arguments)
          Invokes a method on the given Object with the given name and arguments.
 Object invokeMethod(String name, Object args)
          Invokes the given method.
 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.
 boolean isGroovyObject()
           
 boolean isModified()
          Return whether the MetaClass has been modified or not
 MetaMethod pickMethod(String methodName, Class[] arguments)
          Deprecated.  
 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.
 int selectConstructorAndTransformArguments(int numberOfConstructors, Object[] arguments)
          Internal method to support Groovy runtime.
 void setAdaptee(MetaClass adaptee)
           
 void setAttribute(Class sender, Object receiver, String messageName, Object messageValue, boolean useSuper, boolean fromInsideClass)
          Sets the value of an attribute (field).
 void setAttribute(Object object, String attribute, Object newValue)
          Sets an attribute of an instance of the class returned by the getTheClass() method.
 void setMetaClass(MetaClass metaClass)
          Allows the MetaClass to be replaced with a derived implementation.
 void setProperty(Class sender, Object receiver, String messageName, Object messageValue, boolean useSuper, boolean fromInsideClass)
          Retrieves a property on the given receiver for the specified arguments.
 void setProperty(Object object, String property, Object newValue)
          Sets a property of an instance of the class returned by the getTheClass() method.
 void setProperty(String property, Object newValue)
          Sets the given property to the new value.
 String toString()
           
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

delegate

protected MetaClass delegate
Constructor Detail

DelegatingMetaClass

public DelegatingMetaClass(MetaClass delegate)

DelegatingMetaClass

public DelegatingMetaClass(Class theClass)
Method Detail

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

addMetaMethod

public void addMetaMethod(MetaMethod metaMethod)
Description copied from interface: MutableMetaClass
Adds a new MetaMethod to the MetaClass

Specified by:
addMetaMethod in interface MutableMetaClass
Parameters:
metaMethod - The MetaMethod to add

addMetaBeanProperty

public void addMetaBeanProperty(MetaBeanProperty metaBeanProperty)
Description copied from interface: MutableMetaClass
Adds a new MetaBeanProperty to the MetaClass

Specified by:
addMetaBeanProperty in interface MutableMetaClass
Parameters:
metaBeanProperty - The MetaBeanProperty instance

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

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

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

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

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

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

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

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

getProperties

public List getProperties()
Description copied from interface: MetaClass
Retrives a list of MetaProperty instances that the MetaClass has

Specified by:
getProperties in interface MetaClass
Specified by:
getProperties in interface MetaObjectProtocol
Returns:
A list of MetaProperty instances
See Also:
MetaProperty

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

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

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[])

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 arguments. The MetaClass will attempt to pick the best method for the given name and arguments. If a method cannot be invoked a MissingMethodException will be thrown.

Specified by:
invokeMethod in interface MetaObjectProtocol
Parameters:
object - The instance which the method is invoked on
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

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

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

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

equals

public boolean equals(Object obj)
Overrides:
equals in class Object

hashCode

public int hashCode()
Overrides:
hashCode in class Object

toString

public String toString()
Overrides:
toString in class Object

pickMethod

public MetaMethod pickMethod(String methodName,
                             Class[] arguments)
Deprecated. 

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

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

getProperty

public Object getProperty(Class sender,
                          Object receiver,
                          String messageName,
                          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
receiver - The Object which the property is being retrieved from
messageName - The name of the property
useSuper - Whether the call is to a super class property
fromInsideClass - ??
Returns:
The properties value

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

getStaticMetaMethod

public MetaMethod getStaticMetaMethod(String name,
                                      Object[] args)
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
args - The argument types
Returns:
A MetaMethod or null if it doesn't exist

getStaticMetaMethod

public MetaMethod getStaticMetaMethod(String name,
                                      Class[] argTypes)

getMetaMethod

public MetaMethod getMetaMethod(String name,
                                Object[] args)
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
args - The argument types
Returns:
A MetaMethod or null if it doesn't exist

getMetaMethod

public MetaMethod getMetaMethod(String name,
                                Class[] argTypes)

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

invokeMethod

public Object invokeMethod(Class sender,
                           Object receiver,
                           String methodName,
                           Object[] arguments,
                           boolean isCallToSuper,
                           boolean fromInsideClass)
Description copied from interface: MetaClass

Invokes a method on the given receiver for the specified arguments. The sender is the class that invoked the method on 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:
invokeMethod in interface MetaClass
Parameters:
sender - The java.lang.Class instance that invoked the method
receiver - The object which the method was invoked on
methodName - The name of the method
arguments - 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

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

isGroovyObject

public boolean isGroovyObject()

setAttribute

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

Specified by:
setAttribute in interface MetaClass
Parameters:
sender - The class of the object that requested the attribute
receiver - The instance
messageName - The name of the attribute
messageValue - 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

setProperty

public void setProperty(Class sender,
                        Object receiver,
                        String messageName,
                        Object messageValue,
                        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:
setProperty in interface MetaClass
Parameters:
sender - The java.lang.Class instance that is mutating the property
receiver - The Object which the property is being set on
messageName - The name of the property
messageValue - The new value of the property to set
useSuper - Whether the call is to a super class property
fromInsideClass - ??

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

setAdaptee

public void setAdaptee(MetaClass adaptee)

getAdaptee

public MetaClass getAdaptee()

invokeMethod

public Object invokeMethod(String name,
                           Object args)
Description copied from interface: GroovyObject
Invokes the given method.

Specified by:
invokeMethod in interface GroovyObject
Parameters:
name - the name of the method to call
args - the arguments to use for the method call
Returns:
the result of invoking the method

getProperty

public Object getProperty(String property)
Description copied from interface: GroovyObject
Retrieves a property value.

Specified by:
getProperty in interface GroovyObject
Parameters:
property - the name of the property of interest
Returns:
the given property

setProperty

public void setProperty(String property,
                        Object newValue)
Description copied from interface: GroovyObject
Sets the given property to the new value.

Specified by:
setProperty in interface GroovyObject
Parameters:
property - the name of the property of interest
newValue - the new value for the property

getMetaClass

public MetaClass getMetaClass()
Description copied from interface: GroovyObject
Returns the metaclass for a given class.

Specified by:
getMetaClass in interface GroovyObject
Returns:
the metaClass of this instance

setMetaClass

public void setMetaClass(MetaClass metaClass)
Description copied from interface: GroovyObject
Allows the MetaClass to be replaced with a derived implementation.

Specified by:
setMetaClass in interface GroovyObject
Parameters:
metaClass - the new metaclass

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