public class MetaClassImpl extends Object
Allows methods to be dynamically added to existing classes at runtime
Modifiers | Name | Description |
---|---|---|
static class |
MetaClassImpl.Index |
|
static class |
MetaClassImpl.MetaConstructor |
This is a helper class introduced in Groovy 2.1.0, which is used only by indy. |
Modifiers | Name | Description |
---|---|---|
static Object[] |
EMPTY_ARGUMENTS |
|
protected static String |
INVOKE_METHOD_METHOD |
|
protected static String |
METHOD_MISSING |
|
protected static String |
PROPERTY_MISSING |
|
protected static String |
STATIC_METHOD_MISSING |
|
protected static String |
STATIC_PROPERTY_MISSING |
|
protected MetaMethod |
getPropertyMethod |
|
protected MetaMethod |
invokeMethodMethod |
|
protected boolean |
isGroovyObject |
|
protected boolean |
isMap |
|
protected MetaMethodIndex |
metaMethodIndex |
|
protected MetaClassRegistry |
registry |
|
protected MetaMethod |
setPropertyMethod |
|
protected CachedClass |
theCachedClass |
|
protected Class |
theClass |
Constructor and description |
---|
MetaClassImpl
(Class theClass, MetaMethod[] add) Constructor |
MetaClassImpl
(Class theClass) Constructor that sets the methods to null |
MetaClassImpl
(MetaClassRegistry registry, Class theClass, MetaMethod[] add) Constructor with registry |
MetaClassImpl
(MetaClassRegistry registry, Class theClass) Constructor with registry setting methods to null |
Type Params | Return Type | Name and description |
---|---|---|
|
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, Header header) |
|
void |
addNewInstanceMethod(Method method) Adds an instance method to this metaclass. |
|
void |
addNewStaticMethod(Method method) Adds a static method to this metaclass. |
|
protected void |
applyPropertyDescriptors(PropertyDescriptor[] propertyDescriptors) |
|
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) Create a CallSite |
|
protected static String |
createErrorMessageForAmbiguity(String theClassName, String name, Class[] arguments, LinkedList matches) |
|
CallSite |
createPogoCallCurrentSite(CallSite site, Class sender, Object[] args) Create a CallSite |
|
CallSite |
createPogoCallSite(CallSite site, Object[] args) Create a CallSite |
|
CallSite |
createPojoCallSite(CallSite site, Object receiver, Object[] args) Create a CallSite |
|
CallSite |
createStaticSite(CallSite site, Object[] args) Create a CallSite |
|
protected MetaMethod |
createTransformMetaMethod(MetaMethod method) |
|
protected static Object |
doChooseMostSpecificParams(String theClassName, String name, List matchingMethods, Class[] arguments, boolean checkParametersCompatible) |
|
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() Retrieves a list of additional MetaMethods held by this class |
|
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) Retrieves the value of an attribute (field). |
|
Object |
getAttribute(Object object, String attribute) Retrieves the value of an attribute (field). |
|
ClassInfo |
getClassInfo() Returns the ClassInfo for the contained Class |
|
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) todo these special cases should be special MetaClasses maybe |
|
MetaMethod |
getMetaMethod(String name, Object[] argTypes) @see MetaObjectProtocol#getMetaMethod(String, Object[]) |
|
List<MetaMethod> |
getMetaMethods() Retrieves the list of MetaMethods held by this class. |
|
MetaProperty |
getMetaProperty(String name) @see MetaObjectProtocol#getMetaProperty(String) |
|
MetaMethod |
getMethodWithCaching(Class sender, String methodName, Object[] arguments, boolean isCallToSuper) |
|
MetaMethod |
getMethodWithoutCaching(Class sender, String methodName, Class[] arguments, boolean isCallToSuper) |
|
List<MetaMethod> |
getMethods() Retrieves the list of MetaMethods held by the class. |
|
List<MetaProperty> |
getProperties() Get all the properties defined for this type |
|
Object |
getProperty(Class sender, Object object, String name, boolean useSuper, boolean fromInsideClass) @return the given property's value on the object |
|
Object |
getProperty(Object object, String property) |
|
MetaClassRegistry |
getRegistry() Returns the registry for this metaclass |
|
MetaMethod |
getStaticMetaMethod(String name, Object[] argTypes) @see MetaObjectProtocol#getStaticMetaMethod(String, Object[]) |
|
protected Object |
getSubclassMetaMethods(String methodName) |
|
protected LinkedList<CachedClass> |
getSuperClasses() |
|
CachedClass |
getTheCachedClass() Returns the cached class for this metaclass |
|
Class |
getTheClass() Returns the class this object this is the metaclass of. |
|
int |
getVersion() Returns version of the contained Class |
|
protected static long |
handleMatches(long matchesDistance, LinkedList matches, Object method, long dist) |
|
boolean |
hasCustomInvokeMethod() indicates is the meta class method invocation for non-static methods is done through a custom invoker object. |
|
boolean |
hasCustomStaticInvokeMethod() indicates is the meta class method invocation for static methods is done through a custom invoker object. |
|
MetaProperty |
hasProperty(Object obj, String name) @see MetaObjectProtocol#hasProperty(Object,String) |
|
void |
incVersion() Increments version of the contained Class |
|
void |
initialize() Complete the initialisation process. |
|
Object |
invokeConstructor(Object[] arguments) |
|
Object |
invokeMethod(Object object, String methodName, Object arguments) Invoke a method on the given object with the given arguments. |
|
Object |
invokeMethod(Object object, String methodName, Object[] originalArguments) Invokes a method on the given receiver for the specified arguments. |
|
Object |
invokeMethod(Class sender, Object object, String methodName, Object[] originalArguments, boolean isCallToSuper, boolean fromInsideClass) |
|
Object |
invokeMissingMethod(Object instance, String methodName, Object[] arguments) Invoke a missing method on the given object with the given arguments. |
|
Object |
invokeMissingProperty(Object instance, String propertyName, Object optionalValue, boolean isGetter) Invoke a missing property on the given object with the given arguments. |
|
Object |
invokeStaticMethod(Object object, String methodName, Object[] 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() Return wether the class represented by this metaclass instance is an instance of the GroovyObject class |
|
protected boolean |
isInitialized() |
|
boolean |
isModified() Returns whether this MetaClassImpl has been modified. |
|
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, Object[] argTypes) @see MetaObjectProtocol#respondsTo(Object, String, Object[]) |
|
List |
respondsTo(Object obj, String name) @see MetaObjectProtocol#respondsTo(Object, String) |
|
Constructor |
retrieveConstructor(Class[] arguments) |
|
MetaMethod |
retrieveConstructor(Object[] arguments) This is a helper method added in Groovy 2.1.0, which is used only by indy. |
|
MetaMethod |
retrieveStaticMethod(String methodName, Object[] arguments) |
|
int |
selectConstructorAndTransformArguments(int numberOfConstructors, Object[] arguments) |
|
void |
setAttribute(Class sender, Object object, String attribute, Object newValue, boolean useSuper, boolean fromInsideClass) |
|
void |
setAttribute(Object object, String attribute, Object newValue) Sets the value of an attribute (field). |
|
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) |
|
void |
setProperty(Object object, String property, Object newValue) |
|
String |
toString() todo there is no CompileUnit in scope so class name checking won't work but that mostly affects the bytecode generation rather than viewing the AST |
Constructor
theClass
- The class this is the metaclass doradd
- The methods for this classConstructor that sets the methods to null
theClass
- The class this is the metaclass dorConstructor with registry
registry
- The metaclass registry for this MetaClasstheClass
- The classadd
- The methodsConstructor with registry setting methods to null
registry
- The metaclass registry for this MetaClasstheClass
- The classAdds a new MetaBeanProperty to this MetaClass
mp
- The MetaBeanPropertyadds 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 initialize, which means if you need these steps, you have to add the method before running initialize the first time.
method
- the MetaMethodAdds an instance method to this metaclass.
method
- The method to be addedAdds a static method to this metaclass.
method
- The method to be addedChecks if the metaMethod is a method from the GroovyObject interface such as setProperty, getProperty and invokeMethod
metaMethod
- The metaMethod instancechecks 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.
Chooses the correct method to use from a list of methods which match by name.
methodOrList
- the possible methods to choose fromremove all method call cache entries. This should be done if a method is added during runtime, but not by using a category.
Create a CallSite
Retrieves a list of additional MetaMethods held by this class
Retrieves the value of an attribute (field). This method is to support the Groovy runtime and not for general client API usage.
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 notRetrieves the value of an attribute (field). This method is to support the Groovy runtime and not for general client API usage.
sender
- The class of the object that requested the attributeobject
- The instance the attribute is to be retrieved fromattribute
- The name of the attributeuseSuper
- Whether to look-up on the super class or notfromInsideClass
- Whether the call was invoked from the inside or the outside of the class.Retrieves the value of an attribute (field). This method is to support the Groovy runtime and not for general client API usage.
object
- The object to get the attribute fromattribute
- The name of the attributeReturns the ClassInfo for the contained Class
Obtains a reference to the original AST for the MetaClass if it is available at runtime
todo these special cases should be special MetaClasses maybe
Retrieves the list of MetaMethods held by this class. This list includes MetaMethods added by groovy.lang.ExpandoMetaClass.
Retrieves the list of MetaMethods held by the class. This list does not include MetaMethods added by groovy.lang.ExpandoMetaClass.
Get all the properties defined for this type
Retrieves a property on the given object for the specified arguments.
object
- The Object which the property is being retrieved fromproperty
- The name of the propertyReturns the registry for this metaclass
Returns the cached class for this metaclass
Returns the class this object this is the metaclass of.
Returns version of the contained Class
indicates is the meta class method invocation for non-static methods is done through a custom invoker object.
indicates is the meta class method invocation for static methods is done through a custom invoker object.
Increments version of the contained Class
Complete the initialisation process. After this method is called no methods should be added to the meta class. Invocation of methods or access to fields/properties 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.
Invoke a method on the given object with the given arguments.
object
- The object the method should be invoked on.methodName
- The name of the method to invoke.arguments
- The arguments to the invoked method as null, a Tuple, an array or a single argument of any type.Invokes a method on the given receiver for the specified arguments. The MetaClass will attempt to establish the method to invoke based on the name and arguments provided.
object
- The object which the method was invoked onmethodName
- The name of the methodoriginalArguments
- The arguments to the method
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
sender
- The java.lang.Class instance that invoked the methodobject
- The object which the method was invoked onmethodName
- The name of the methodoriginalArguments
- 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 classInvoke a missing method on the given object with the given arguments.
instance
- The object the method should be invoked on.methodName
- The name of the method to invoke.arguments
- The arguments to the invoked method.Invoke a missing property on the given object with the given arguments.
instance
- The object the method should be invoked on.propertyName
- The name of the property to invoke.optionalValue
- The (optional) new value for the propertyisGetter
- Wether the method is a getterHook 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
instance
- The instancepropertyName
- The name of the propertyoptionalValue
- The value in the case of a setterisGetter
- True if its a getterReturn wether the class represented by this metaclass instance is an instance of the GroovyObject class
Returns whether this MetaClassImpl has been modified. Since MetaClassImpl is not designed for modification this method always returns false
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.
methodName
- the name of the method to pickarguments
- the method arguments
This is a helper method added in Groovy 2.1.0, which is used only by indy. This method is for internal use only.
Sets an attribute on the given receiver for the specified arguments. The sender is the class that is setting the attribute 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
sender
- The java.lang.Class instance that is mutating the propertyobject
- The Object which the property is being set onattribute
- The name of the attribute,newValue
- The new value of the attribute to setuseSuper
- Whether the call is to a super class propertyfromInsideClass
- Whether the call was invoked from the inside or the outside of the classSets the value of an attribute (field). This method is to support the Groovy runtime and not for general client API usage.
object
- The object to get the attribute fromattribute
- The name of the attributenewValue
- The new value of the attributeSets 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
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 useSuper and fromInsideClass help the Groovy runtime perform optimisations on the call to go directly to the super class if necessary
sender
- The java.lang.Class instance that is mutating the propertyobject
- The Object which the property is being set onname
- The name of the propertynewValue
- 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.
Sets a property on the given object for the specified arguments.
object
- The Object which the property is being retrieved fromproperty
- The name of the propertynewValue
- The new valuetodo there is no CompileUnit in scope so class name checking won't work but that mostly affects the bytecode generation rather than viewing the AST
Copyright © 2003-2018 The Apache Software Foundation. All rights reserved.