Class OwnedMetaClass
- java.lang.Object
-
- groovy.lang.DelegatingMetaClass
-
- org.codehaus.groovy.runtime.metaclass.OwnedMetaClass
-
- All Implemented Interfaces:
GroovyObject
,MetaClass
,MetaObjectProtocol
,MutableMetaClass
- Direct Known Subclasses:
MixedInMetaClass
public abstract class OwnedMetaClass extends DelegatingMetaClass
-
-
Field Summary
-
Fields inherited from class groovy.lang.DelegatingMetaClass
delegate
-
-
Constructor Summary
Constructors Constructor Description OwnedMetaClass(MetaClass delegate)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description boolean
equals(Object obj)
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 runtimeMetaMethod
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 MetaMethodList<MetaMethod>
getMetaMethods()
Retrieves a list of MetaMethods held by this class.MetaProperty
getMetaProperty(String name)
Returns a MetaProperty for the given name or null if it doesn't existList<MetaMethod>
getMethods()
Retrieves a list of MetaMethods held by the class.protected abstract Object
getOwner()
protected abstract MetaClass
getOwnerMetaClass(Object owner)
List<MetaProperty>
getProperties()
Retrieves a list of MetaProperty instances that the MetaClass hasObject
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.MetaMethod
getStaticMetaMethod(String name, Class[] argTypes)
MetaMethod
getStaticMetaMethod(String name, Object[] args)
Retrieves a static MetaMethod for the given name and argument values, using the types of the arguments to establish the chosen MetaMethodClass
getTheClass()
Retrieves that Java Class that the attached Meta behaviours apply toint
hashCode()
MetaProperty
hasProperty(Object obj, String name)
Returns true of the implementing MetaClass has a property of the given nameObject
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
invokeMissingMethod(Object instance, String methodName, Object[] arguments)
Attempts to invoke the methodMissing method otherwise throws a MissingMethodExceptionObject
invokeMissingProperty(Object instance, String propertyName, Object optionalValue, boolean isGetter)
Invokes the propertyMissing method otherwise throws a MissingPropertyExceptionObject
invokeStaticMethod(Object object, String methodName, Object[] arguments)
Invokes a static method on the given Object with the given name and arguments.boolean
isGroovyObject()
List<MetaMethod>
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<MetaMethod>
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
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
setProperty(Class sender, Object receiver, String messageName, Object messageValue, boolean useSuper, boolean fromInsideClass)
Sets 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.String
toString()
-
Methods inherited from class groovy.lang.DelegatingMetaClass
addMetaBeanProperty, addMetaMethod, addNewInstanceMethod, addNewStaticMethod, getAdaptee, getMetaClass, getProperty, initialize, invokeMethod, isModified, pickMethod, setAdaptee, setMetaClass, setProperty
-
-
-
-
Constructor Detail
-
OwnedMetaClass
public OwnedMetaClass(MetaClass delegate)
-
-
Method Detail
-
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 interfaceMetaObjectProtocol
- Overrides:
getAttribute
in classDelegatingMetaClass
- Parameters:
object
- An instance of the class returned by the getTheClass() methodattribute
- The name of the attribute to retrieve the value for- Returns:
- The attribute value
- See Also:
MetaClassImpl
-
getOwner
protected abstract Object getOwner()
-
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 interfaceMetaClass
- Overrides:
getClassNode
in classDelegatingMetaClass
- Returns:
- The original AST or null if it cannot be returned
-
getMetaMethods
public List<MetaMethod> getMetaMethods()
Description copied from interface:MetaClass
Retrieves a list of MetaMethods held by this class. This list includes MetaMethods added by groovy.lang.ExpandoMetaClass.- Specified by:
getMetaMethods
in interfaceMetaClass
- Overrides:
getMetaMethods
in classDelegatingMetaClass
- Returns:
- A list of MetaMethods
-
getMethods
public List<MetaMethod> getMethods()
Description copied from interface:MetaClass
Retrieves a list of MetaMethods held by the class. This list does not include MetaMethods added by groovy.lang.ExpandoMetaClass.- Specified by:
getMethods
in interfaceMetaClass
- Specified by:
getMethods
in interfaceMetaObjectProtocol
- Overrides:
getMethods
in classDelegatingMetaClass
- Returns:
- A list of MetaMethods
- See Also:
MetaMethod
-
respondsTo
public List<MetaMethod> 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 interfaceMetaObjectProtocol
- Overrides:
respondsTo
in classDelegatingMetaClass
- Parameters:
obj
- The object to inspectname
- The name of the method of interestargTypes
- 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<MetaMethod> 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 interfaceMetaObjectProtocol
- Overrides:
respondsTo
in classDelegatingMetaClass
- Parameters:
obj
- The object to inspectname
- 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 interfaceMetaObjectProtocol
- Overrides:
hasProperty
in classDelegatingMetaClass
- Parameters:
obj
- The object to inspectname
- The name of the property- Returns:
- The MetaProperty or null if it doesn't exist
-
getProperties
public List<MetaProperty> getProperties()
Description copied from interface:MetaClass
Retrieves a list of MetaProperty instances that the MetaClass has- Specified by:
getProperties
in interfaceMetaClass
- Specified by:
getProperties
in interfaceMetaObjectProtocol
- Overrides:
getProperties
in classDelegatingMetaClass
- 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 interfaceMetaObjectProtocol
- Overrides:
getProperty
in classDelegatingMetaClass
- Parameters:
object
- An instance of the class returned by the getTheClass() methodproperty
- 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 interfaceMetaObjectProtocol
- Overrides:
invokeConstructor
in classDelegatingMetaClass
- 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 interfaceMetaObjectProtocol
- Overrides:
invokeMethod
in classDelegatingMetaClass
- Parameters:
object
- The Object to invoke the method onmethodName
- The name of the methodarguments
- 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 interfaceMetaObjectProtocol
- Overrides:
invokeMethod
in classDelegatingMetaClass
- Parameters:
object
- The instance which the method is invoked onmethodName
- The name of the methodarguments
- 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 interfaceMetaObjectProtocol
- Overrides:
invokeStaticMethod
in classDelegatingMetaClass
- Parameters:
object
- An instance of the class returned by the getTheClass() method or the class itselfmethodName
- The name of the methodarguments
- 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 interfaceMetaObjectProtocol
- Overrides:
setAttribute
in classDelegatingMetaClass
- Parameters:
object
- An instance of the class returned by the getTheClass() methodattribute
- The name of the attribute to setnewValue
- 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 interfaceMetaObjectProtocol
- Overrides:
setProperty
in classDelegatingMetaClass
- Parameters:
object
- An instance of the class returned by the getTheClass() methodproperty
- The name of the property to setnewValue
- The new value of the property- See Also:
MetaClassImpl
-
equals
public boolean equals(Object obj)
- Overrides:
equals
in classDelegatingMetaClass
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classDelegatingMetaClass
-
toString
public String toString()
- Overrides:
toString
in classDelegatingMetaClass
-
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 interfaceMetaClass
- Overrides:
getAttribute
in classDelegatingMetaClass
- Parameters:
sender
- The class of the object that requested the attributereceiver
- The instancemessageName
- The name of the attributeuseSuper
- 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 interfaceMetaClass
- Overrides:
getProperty
in classDelegatingMetaClass
- Parameters:
sender
- The java.lang.Class instance that requested the propertyreceiver
- The Object which the property is being retrieved frommessageName
- The name of the propertyuseSuper
- Whether the call is to a super class propertyfromInsideClass
- ??- 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 interfaceMetaObjectProtocol
- Overrides:
getMetaProperty
in classDelegatingMetaClass
- 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
Retrieves 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 interfaceMetaObjectProtocol
- Overrides:
getStaticMetaMethod
in classDelegatingMetaClass
- Parameters:
name
- The name of the MetaMethodargs
- The argument types- Returns:
- A MetaMethod or null if it doesn't exist
-
getStaticMetaMethod
public MetaMethod getStaticMetaMethod(String name, Class[] argTypes)
- Overrides:
getStaticMetaMethod
in classDelegatingMetaClass
-
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 interfaceMetaObjectProtocol
- Overrides:
getMetaMethod
in classDelegatingMetaClass
- Parameters:
name
- The name of the MetaMethodargs
- Array containing - 1) the argument values (using which their types are then inferred), or 2) the corresponding 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 interfaceMetaObjectProtocol
- Overrides:
getTheClass
in classDelegatingMetaClass
- 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 interfaceMetaClass
- Overrides:
invokeMethod
in classDelegatingMetaClass
- Parameters:
sender
- The java.lang.Class instance that invoked the methodreceiver
- The object which the method was invoked onmethodName
- The name of the methodarguments
- The arguments to the methodisCallToSuper
- Whether the method is a call to a super class methodfromInsideClass
- 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 interfaceMetaClass
- Overrides:
invokeMissingMethod
in classDelegatingMetaClass
- Parameters:
instance
- The instance to invoke methodMissing onmethodName
- The name of the methodarguments
- 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 interfaceMetaClass
- Overrides:
invokeMissingProperty
in classDelegatingMetaClass
- Parameters:
instance
- The instance of the classpropertyName
- The name of the propertyoptionalValue
- The value of the property which could be null in the case of a getterisGetter
- 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()
- Overrides:
isGroovyObject
in classDelegatingMetaClass
-
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 interfaceMetaClass
- Overrides:
setAttribute
in classDelegatingMetaClass
- Parameters:
sender
- The class of the object that requested the attributereceiver
- The instancemessageName
- The name of the attributemessageValue
- The value of the attributeuseSuper
- Whether to look-up on the super class or notfromInsideClass
- 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
Sets a property on the given receiver for the specified arguments. The sender is the class that is setting 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 interfaceMetaClass
- Overrides:
setProperty
in classDelegatingMetaClass
- Parameters:
sender
- The java.lang.Class instance that is mutating the propertyreceiver
- The Object which the property is being set onmessageName
- The name of the propertymessageValue
- The new value of the property to setuseSuper
- Whether the call is to a super class propertyfromInsideClass
- Whether the call was invoked from the inside or the outside of the class
-
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 interfaceMetaClass
- Overrides:
selectConstructorAndTransformArguments
in classDelegatingMetaClass
- Parameters:
numberOfConstructors
- The number of constructorsarguments
- The arguments- Returns:
- selected index
-
-