groovy.lang
Interface MetaClass

All Superinterfaces:
MetaObjectProtocol
All Known Subinterfaces:
AdaptingMetaClass, MutableMetaClass
All Known Implementing Classes:
ClosureMetaClass, DelegatingMetaClass, ExpandoMetaClass, HandleMetaClass, MetaClassImpl, MixedInMetaClass, MockProxyMetaClass, OwnedMetaClass, ProxyMetaClass

public interface MetaClass
extends MetaObjectProtocol

A MetaClass within Groovy defines the behaviour of any given Groovy or Java class. The MetaClass interface defines two parts. The client API, which is defined via the extend MetaObjectProtocol interface and the contract with the Groovy runtime system. In general the compiler and Groovy runtime engine interact with methods on this class whilst MetaClass clients interact with the method defined by the MetaObjectProtocol interface

Author:
John Wilson, Graeme Rocher
See Also:
MetaClassImpl, MetaObjectProtocol

Method Summary
 Object getAttribute(Class sender, Object receiver, String messageName, boolean useSuper)
          Retrieves the value of an attribute (field).
 ClassNode getClassNode()
          Obtains a reference to the original AST for the MetaClass if it is available at runtime
 List<MetaMethod> getMetaMethods()
          Retrieves a list of MetaMethods held by this class
 List<MetaMethod> getMethods()
          Retrieves a list of MetaMethods held by the class
 List<MetaProperty> getProperties()
          Retrives a list of MetaProperty instances that the MetaClass has
 Object getProperty(Class sender, Object receiver, String property, boolean isCallToSuper, boolean fromInsideClass)
          Retrieves a property on the given receiver for the specified arguments.
 void initialize()
          complete the initlialisation process.
 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 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
 MetaMethod pickMethod(String methodName, Class[] arguments)
          Selects a method by name and argument classes.
 int selectConstructorAndTransformArguments(int numberOfConstructors, Object[] arguments)
          Internal method to support Groovy runtime.
 void setAttribute(Class sender, Object receiver, String messageName, Object messageValue, boolean useSuper, boolean fromInsideClass)
          Sets the value of an attribute (field).
 void setProperty(Class sender, Object receiver, String property, Object value, boolean isCallToSuper, boolean fromInsideClass)
          Retrieves a property on the given receiver for the specified arguments.
 
Methods inherited from interface groovy.lang.MetaObjectProtocol
getAttribute, getMetaMethod, getMetaProperty, getProperty, getStaticMetaMethod, getTheClass, hasProperty, invokeConstructor, invokeMethod, invokeMethod, invokeStaticMethod, respondsTo, respondsTo, setAttribute, setProperty
 

Method Detail

invokeMethod

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

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

getProperty

Object getProperty(Class sender,
                   Object receiver,
                   String property,
                   boolean isCallToSuper,
                   boolean fromInsideClass)

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

Parameters:
sender - The java.lang.Class instance that requested the property
receiver - The Object which the property is being retrieved from
property - The name of the property
isCallToSuper - Whether the call is to a super class property
fromInsideClass - ??
Returns:
The properties value

setProperty

void setProperty(Class sender,
                 Object receiver,
                 String property,
                 Object value,
                 boolean isCallToSuper,
                 boolean fromInsideClass)

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

Parameters:
sender - The java.lang.Class instance that is mutating the property
receiver - The Object which the property is being set on
property - The name of the property
value - The new value of the property to set
isCallToSuper - Whether the call is to a super class property
fromInsideClass - ??

invokeMissingMethod

Object invokeMissingMethod(Object instance,
                           String methodName,
                           Object[] arguments)

Attempts to invoke the methodMissing method otherwise throws a MissingMethodException

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

Object invokeMissingProperty(Object instance,
                             String propertyName,
                             Object optionalValue,
                             boolean isGetter)
Invokes the propertyMissing method otherwise throws a MissingPropertyException

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

getAttribute

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

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

setAttribute

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

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

initialize

void initialize()
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.


getProperties

List<MetaProperty> getProperties()
Retrives a list of MetaProperty instances that the MetaClass has

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

getMethods

List<MetaMethod> getMethods()
Retrieves a list of MetaMethods held by the class

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

getClassNode

ClassNode getClassNode()
Obtains a reference to the original AST for the MetaClass if it is available at runtime

Returns:
The original AST or null if it cannot be returned

getMetaMethods

List<MetaMethod> getMetaMethods()
Retrieves a list of MetaMethods held by this class

Returns:
A list of MetaMethods

selectConstructorAndTransformArguments

int selectConstructorAndTransformArguments(int numberOfConstructors,
                                           Object[] arguments)
Internal method to support Groovy runtime. Not for client usage.

Parameters:
numberOfConstructors - The number of constructors
arguments - The arguments
Returns:
selected index

pickMethod

MetaMethod pickMethod(String methodName,
                      Class[] arguments)
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.

Parameters:
methodName - the name of the method to pick
arguments - the method arguments
Returns:
a matching MetaMethod or null
Throws:
GroovyRuntimeException - if there is more than one matching method

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