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) |
MetaClassImpl
(Class theClass) |
MetaClassImpl
(MetaClassRegistry registry, Class theClass, MetaMethod[] add) |
MetaClassImpl
(MetaClassRegistry registry, Class theClass) |
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) |
void |
addNewStaticMethod(Method method) |
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) |
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) |
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) |
ClassInfo |
getClassInfo() |
ClassNode |
getClassNode() |
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() |
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() |
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() |
MetaMethod |
getStaticMetaMethod(String name, Object[] argTypes) @see MetaObjectProtocol#getStaticMetaMethod(String, Object[]) |
protected Object |
getSubclassMetaMethods(String methodName) |
protected LinkedList<CachedClass> |
getSuperClasses() |
CachedClass |
getTheCachedClass() |
Class |
getTheClass() |
int |
getVersion() |
MetaProperty |
hasProperty(Object obj, String name) @see MetaObjectProtocol#hasProperty(Object,String) |
void |
incVersion() |
void |
initialize() |
Object |
invokeConstructor(Object[] arguments) |
Object |
invokeMethod(Object object, String methodName, Object arguments) |
Object |
invokeMethod(Object object, String methodName, Object[] originalArguments) Invokes the given method on the object. |
Object |
invokeMethod(Class sender, Object object, String methodName, Object[] originalArguments, boolean isCallToSuper, boolean fromInsideClass) Invokes the given method on the object. |
Object |
invokeMissingMethod(Object instance, String methodName, Object[] arguments) |
Object |
invokeMissingProperty(Object instance, String propertyName, Object optionalValue, boolean isGetter) |
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() |
protected boolean |
isInitialized() |
boolean |
isModified() |
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) |
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) Sets the given attribute (field) on the given object |
void |
setAttribute(Object object, String attribute, Object newValue) |
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) |
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 |
Adds 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 MetaMethodChecks 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.
Looks up the given attribute (field) on the given object
todo these special cases should be special MetaClasses maybe
Get all the properties defined for this type
Invokes the given method on the object.
Invokes the given method on the object.
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
instance
- The instancepropertyName
- The name of the propertyoptionalValue
- The value in the case of a setterisGetter
- True if its a getter
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 the given attribute (field) on the given object
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
Sets the property value on an object
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
Copyright © 2003-2014 The Codehaus. All rights reserved.