Class ExpandoMetaClass
- All Implemented Interfaces:
- GroovyObject,- MetaClass,- MetaObjectProtocol,- MutableMetaClass
Some examples of usage:
 // defines or replaces instance method:
 metaClass.myMethod = { args -> }
 // defines a new instance method
 metaClass.myMethod << { args -> }
 // creates multiple overloaded methods of the same name
 metaClass.myMethod << { String s -> } << { Integer i -> }
 // defines or replaces a static method with the 'static' qualifier
 metaClass.'static'.myMethod = { args ->  }
 // defines a new static method with the 'static' qualifier
 metaClass.'static'.myMethod << { args ->  }
 // defines a new constructor
 metaClass.constructor << { String arg -> }
 // defines or replaces a constructor
 metaClass.constructor = { String arg -> }
 // defines a new property with an initial value of "blah"
 metaClass.myProperty = "blah"
 
 ExpandoMetaClass also supports a DSL/builder like notation to combine multiple definitions together. So instead of this:
 Number.metaClass.multiply = { Amount amount -> amount.times(delegate) }
 Number.metaClass.div =      { Amount amount -> amount.inverse().times(delegate) }
 
 You can also now do this:
 
 Number.metaClass {
     multiply { Amount amount -> amount.times(delegate) }
     div      { Amount amount -> amount.inverse().times(delegate) }
 }
 
 
 ExpandoMetaClass also supports runtime mixins. While @Mixin allows you to mix in new behavior
 to classes you own and are designing, you can not easily mixin anything to types you didn't own, e.g.
 from third party libraries or from JDK library classes.
 Runtime mixins let you add a mixin on any type at runtime.
 
 interface Vehicle {
     String getName()
 }
 // Category annotation style
 @Category(Vehicle) class FlyingAbility {
     def fly() { "I'm the ${name} and I fly!" }
 }
 // traditional category style
 class DivingAbility {
     static dive(Vehicle self) { "I'm the ${self.name} and I dive!" }
 }
 // provided by a third-party, so can't augment using Mixin annotation
 class JamesBondVehicle implements Vehicle {
     String getName() { "James Bond's vehicle" }
 }
 // Can be added via metaClass, e.g.:
 // JamesBondVehicle.metaClass.mixin DivingAbility, FlyingAbility
 // Or using shorthand through DGM method on Class
 JamesBondVehicle.mixin DivingAbility, FlyingAbility
 assert new JamesBondVehicle().fly() ==
        "I'm the James Bond's vehicle and I fly!"
 assert new JamesBondVehicle().dive() ==
        "I'm the James Bond's vehicle and I dive!"
 
 As another example, consider the following class definitions:
 
 class Student {
     List schedule = []
     def addLecture(String lecture) { schedule << lecture }
 }
 class Worker {
     List schedule = []
     def addMeeting(String meeting) { schedule << meeting }
 }
   
 We can mimic a form of multiple inheritance as follows:
 
 class CollegeStudent {
     static { mixin Student, Worker }
 }
 new CollegeStudent().with {
     addMeeting('Performance review with Boss')
     addLecture('Learn about Groovy Mixins')
     println schedule
     println mixedIn[Student].schedule
     println mixedIn[Worker].schedule
 }
 
 Which outputs these lines when run:
 [Performance review with Boss] [Learn about Groovy Mixins] [Performance review with Boss]Perhaps some explanation is required here. The methods and properties of Student and Worker are added to CollegeStudent. Worker is added last, so for overlapping methods, its methods will be used, e.g. when calling
schedule, it will be the schedule property (getSchedule method)
 from Worker that is used. The schedule property from Student will be shadowed but the mixedIn
 notation allows us to get to that too if we need as the last two lines show.
 We can also be a little more dynamic and not require the CollegeStudent class to be defined at all, e.g.:
 def cs = new Object()
 cs.metaClass {
     mixin Student, Worker
     getSchedule {
         mixedIn[Student].schedule + mixedIn[Worker].schedule
     }
 }
 cs.with {
     addMeeting('Performance review with Boss')
     addLecture('Learn about Groovy Mixins')
     println schedule
 }
 
 Which outputs this line when run:
 [Learn about Groovy Mixins, Performance review with Boss]As another example, we can also define a no dup queue by mixing in some Queue and Set functionality as follows:
 def ndq = new Object()
 ndq.metaClass {
     mixin ArrayDeque
     mixin HashSet
     leftShift = { Object o  ->
         if (!mixedIn[Set].contains(o)) {
             mixedIn[Queue].push(o)
             mixedIn[Set].add(o)
         }
     }
 }
 ndq << 1
 ndq << 2
 ndq << 1
 assert ndq.size() == 2
 
 As a final example, we sometimes need to pass such mixed in classes or objects
 into Java methods which require a given static type but the ExpandoMetaClass mixin approach uses a very dynamic
 approach based on duck typing rather than static interface definitions, so doesn't by default
 produce objects matching the required static type. Luckily, there is a mixins capability
 within ExpandoMetaClass which supports the use of Groovy's common 'as StaticType' notation to produce an object
 having the correct static type so that it can be passed to the Java method call in question.
 A slightly contrived example illustrating this feature:
 
 class CustomComparator implements Comparator {
     int compare(Object a, b) { return a.size() - b.size() }
 }
 class CustomCloseable implements Closeable {
     void close() { println 'Lights out - I am closing' }
 }
 import static mypackage.IOUtils.closeQuietly
 import static java.util.Collections.sort
 def o = new Object()
 o.metaClass.mixin CustomComparator, CustomCloseable
 def items = ['a', 'bbb', 'cc']
 sort(items, o as Comparator)
 println items                // => [a, cc, bbb]
 closeQuietly(o as Closeable) // => Lights out - I am closing
 
 Further details
When using the default implementations of MetaClass, methods are only allowed to be added before initialize() is called. In other words you create a new MetaClass, add some methods and then call initialize(). If you attempt to add new methods after initialize() has been called, an error will be thrown. This is to ensure that the MetaClass can operate appropriately in multithreaded environments as it forces you to do all method additions at the beginning, before using the MetaClass.
ExpandoMetaClass differs here from the default in that it allows you to add methods after initialize has been called. This is done by setting the initialize flag internally to false and then add the methods. Since this is not thread safe it has to be done in a synchronized block. The methods to check for modification and initialization are therefore synchronized as well. Any method call done through this metaclass will first check if the it is synchronized. Should this happen during a modification, then the method cannot be selected or called unless the modification is completed.
- Since:
- 1.5
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionprotected classHandles the ability to use the left shift operator to append new constructorsprotected classInstances of this class are returned when using the<<left shift operator.Nested classes/interfaces inherited from class groovy.lang.MetaClassImplMetaClassImpl.Index, MetaClassImpl.MetaConstructor
- 
Field SummaryFieldsFields inherited from class groovy.lang.MetaClassImplEMPTY_ARGUMENTS, getPropertyMethod, INVOKE_METHOD_METHOD, invokeMethodMethod, isGroovyObject, isMap, metaMethodIndex, METHOD_MISSING, PROPERTY_MISSING, registry, setPropertyMethod, STATIC_METHOD_MISSING, STATIC_PROPERTY_MISSING, theCachedClass, theClass
- 
Constructor SummaryConstructorsConstructorDescriptionExpandoMetaClass(MetaClassRegistry registry, Class theClass, boolean register, boolean allowChangesAfterInit, MetaMethod[] add) ExpandoMetaClass(Class theClass) Constructs a new ExpandoMetaClass instance for the given classExpandoMetaClass(Class theClass, boolean register) Constructs a new ExpandoMetaClass instance for the given class optionally placing the MetaClass in the MetaClassRegistry automaticallyExpandoMetaClass(Class theClass, boolean register, boolean allowChangesAfterInit) Constructs a new ExpandoMetaClass instance for the given class optionally placing the MetaClass in the MetaClassRegistry automaticallyExpandoMetaClass(Class theClass, boolean register, boolean allowChangesAfterInit, MetaMethod[] add) ExpandoMetaClass(Class theClass, boolean register, MetaMethod[] add) ExpandoMetaClass(Class theClass, MetaMethod[] add) 
- 
Method SummaryModifier and TypeMethodDescriptionvoidaddMixinClass(MixinInMetaClass mixin) castToMixedType(Object obj, Class type) protected voidchecks if the initialisation of the class id complete.createConstructorSite(CallSite site, Object[] args) Create a CallSitecreatePogoCallCurrentSite(CallSite site, Class sender, String name, Object[] args) createPogoCallSite(CallSite site, Object[] args) Create a CallSitecreatePojoCallSite(CallSite site, Object receiver, Object[] args) Create a CallSitecreateStaticSite(CallSite site, Object[] args) Create a CallSitestatic voidCall to disable the global use of ExpandoMetaClassstatic voidCall to enable global use of ExpandoMetaClass within the registry.findMixinMethod(String methodName, Class[] arguments) Returns a list of expando MetaMethod instances added to this ExpandoMetaClassReturns a list of MetaBeanProperty instances added to this ExpandoMetaClassReturns the metaclass for a given class.getMetaProperty(String name) Looks up an existing MetaProperty by nameOverrides the behavior of parent getMethods() method to make MetaClass aware of added Expando methodsGet all the properties defined for this typegetProperty(Class sender, Object object, String name, boolean useSuper, boolean fromInsideClass) Overrides default implementation just in case getProperty method has been overridden by ExpandoMetaClassgetProperty(Object object, String name) Overrides default implementation just in case getProperty method has been overridden by ExpandoMetaClassgetProperty(String property) Retrieves a property value.getPropertyForSetter(String setterName) Returns a property name equivalent for the given setter name or null if it is not a getterprotected ObjectgetSubclassMetaMethods(String methodName) booleanindicates is the metaclass method invocation for static methods is done through a custom invoker object.booleanhasMetaMethod(String name, Class[] args) Checks whether a MetaMethod for the given name and arguments existsbooleanhasMetaProperty(String name) Returns true if the MetaClass has the given propertyvoidComplete the initialisation process.invokeConstructor(Object[] arguments) Invokes a constructor for the given arguments.invokeMethod(Class sender, Object object, String methodName, Object[] originalArguments, boolean isCallToSuper, boolean fromInsideClass) Overrides default implementation just in case invokeMethod has been overridden by ExpandoMetaClassinvokeMethod(String name, Object args) Invokes the given method.invokeStaticMethod(Object object, String methodName, Object[] arguments) Overrides default implementation just in case a static invoke method has been set on ExpandoMetaClassprotected booleanChecks if the metaclass is initialized.booleanReturns whether this MetaClassImpl has been modified.booleanisSetter(String name, CachedClass[] args) static booleanisValidExpandoProperty(String property) protected voidprotected voidprotected voidprotected voidprotected voidprotected voidperformOperationOnMetaClass(groovy.lang.ExpandoMetaClass.Callable c) voidrefreshInheritedMethods(Set modifiedSuperExpandos) Called from ExpandoMetaClassCreationHandle in the registry if it exists to set up inheritance handlingvoidregisterBeanProperty(String property, Object newValue) Registers a new bean propertyvoidregisterInstanceMethod(MetaMethod metaMethod) Registers a new instance method for the given method name and closure on this MetaClassvoidregisterInstanceMethod(String name, Closure closure) protected voidregisterStaticMethod(String name, Closure callable) protected voidregisterStaticMethod(String name, Closure callable, Class[] paramTypes) Registers a new static method for the given method name and closure on this MetaClassvoidregisterSubclassInstanceMethod(MetaMethod metaMethod) voidregisterSubclassInstanceMethod(String name, Class klazz, Closure closure) retrieveConstructor(Object[] args) This is a helper method added in Groovy 2.1.0, which is used only by indy.protected voidsetInitialized(boolean b) voidsetMetaClass(MetaClass metaClass) Allows the MetaClass to be replaced with a derived implementation.voidsetProperty(Class sender, Object object, String name, Object newValue, boolean useSuper, boolean fromInsideClass) Overrides default implementation just in case setProperty method has been overridden by ExpandoMetaClassvoidsetProperty(String property, Object newValue) Sets the given property to the new value.Methods inherited from class groovy.lang.MetaClassImpladdMetaBeanProperty, addMetaMethod, addMetaMethodToIndex, addNewInstanceMethod, addNewStaticMethod, applyPropertyDescriptors, checkIfGroovyObjectMethod, chooseMethod, clearInvocationCaches, createErrorMessageForAmbiguity, createPogoCallCurrentSite, createTransformMetaMethod, doChooseMostSpecificParams, dropMethodCache, dropStaticMethodCache, findMethodInClassHierarchy, findOwnMethod, findPropertyInClassHierarchy, getAdditionalMetaMethods, getAttribute, getAttribute, getAttribute, getClassInfo, getClassNode, getEffectiveGetMetaProperty, getMetaMethod, getMetaMethods, getMethodWithCaching, getMethodWithoutCaching, getRegistry, getStaticMetaMethod, getSuperClasses, getTheCachedClass, getTheClass, getVersion, handleMatches, hasCustomInvokeMethod, hasProperty, incVersion, invokeMethod, invokeMethod, invokeMissingMethod, invokeMissingProperty, invokeStaticMissingProperty, isGroovyObject, isPermissivePropertyAccess, onMixinMethodFound, pickMethod, reinitialize, respondsTo, respondsTo, retrieveConstructor, retrieveStaticMethod, selectConstructorAndTransformArguments, setAttribute, setAttribute, setPermissivePropertyAccess, setProperties, setProperty, toString
- 
Field Details- 
STATIC_QUALIFIER- See Also:
 
- 
CONSTRUCTOR- See Also:
 
- 
inRegistrypublic boolean inRegistry
 
- 
- 
Constructor Details- 
ExpandoMetaClasspublic ExpandoMetaClass(Class theClass, boolean register, boolean allowChangesAfterInit, MetaMethod[] add) 
- 
ExpandoMetaClasspublic ExpandoMetaClass(MetaClassRegistry registry, Class theClass, boolean register, boolean allowChangesAfterInit, MetaMethod[] add) 
- 
ExpandoMetaClassConstructs a new ExpandoMetaClass instance for the given class- Parameters:
- theClass- The class that the MetaClass applies to
 
- 
ExpandoMetaClass
- 
ExpandoMetaClassConstructs a new ExpandoMetaClass instance for the given class optionally placing the MetaClass in the MetaClassRegistry automatically- Parameters:
- theClass- The class that the MetaClass applies to
- register- True if the MetaClass should be registered inside the MetaClassRegistry. This defaults to true and ExpandoMetaClass will affect all instances if changed
 
- 
ExpandoMetaClass
- 
ExpandoMetaClassConstructs a new ExpandoMetaClass instance for the given class optionally placing the MetaClass in the MetaClassRegistry automatically- Parameters:
- theClass- The class that the MetaClass applies to
- register- True if the MetaClass should be registered inside the MetaClassRegistry. This defaults to true and ExpandoMetaClass will affect all instances if changed
- allowChangesAfterInit- Should the metaclass be modifiable after initialization. Default is false.
 
 
- 
- 
Method Details- 
getExpandoSubclassMethods
- 
findMixinMethod- Overrides:
- findMixinMethodin class- MetaClassImpl
 
- 
onInvokeMethodFoundInHierarchy- Overrides:
- onInvokeMethodFoundInHierarchyin class- MetaClassImpl
 
- 
onSuperMethodFoundInHierarchy- Overrides:
- onSuperMethodFoundInHierarchyin class- MetaClassImpl
 
- 
onSuperPropertyFoundInHierarchy- Overrides:
- onSuperPropertyFoundInHierarchyin class- MetaClassImpl
 
- 
onSetPropertyFoundInHierarchy- Overrides:
- onSetPropertyFoundInHierarchyin class- MetaClassImpl
 
- 
onGetPropertyFoundInHierarchy- Overrides:
- onGetPropertyFoundInHierarchyin class- MetaClassImpl
 
- 
isModifiedpublic boolean isModified()Description copied from class:MetaClassImplReturns whether this MetaClassImpl has been modified. Since MetaClassImpl is not designed for modification this method always returns false- Specified by:
- isModifiedin interface- MutableMetaClass
- Overrides:
- isModifiedin class- MetaClassImpl
- Returns:
- false
 
- 
registerSubclassInstanceMethod
- 
registerSubclassInstanceMethod
- 
addMixinClass
- 
castToMixedType
- 
enableGloballypublic static void enableGlobally()Call to enable global use of ExpandoMetaClass within the registry. This has the advantage that inheritance will function correctly and metaclass modifications will also apply to existing objects, but has a higher memory usage on the JVM than normal Groovy
- 
disableGloballypublic static void disableGlobally()Call to disable the global use of ExpandoMetaClass
- 
initializepublic void initialize()Complete the initialisation process. After this method is called no methods should be added to the metaclass. 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.- Specified by:
- initializein interface- MetaClass
- Overrides:
- initializein class- MetaClassImpl
 
- 
isInitializedprotected boolean isInitialized()Checks if the metaclass is initialized.- Overrides:
- isInitializedin class- MetaClassImpl
- See Also:
 
- 
setInitializedprotected void setInitialized(boolean b) - Overrides:
- setInitializedin class- MetaClassImpl
 
- 
invokeConstructorDescription copied from interface:MetaObjectProtocolInvokes 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:
- invokeConstructorin interface- MetaObjectProtocol
- Overrides:
- invokeConstructorin class- MetaClassImpl
- Parameters:
- arguments- The arguments to the constructor
- Returns:
- An instance of the java.lang.Class that this MetaObjectProtocol object applies to
 
- 
getMetaClassDescription copied from interface:GroovyObjectReturns the metaclass for a given class.- Specified by:
- getMetaClassin interface- GroovyObject
- Returns:
- the metaClass of this instance
 
- 
getPropertyDescription copied from interface:GroovyObjectRetrieves a property value.- Specified by:
- getPropertyin interface- GroovyObject
- Parameters:
- property- the name of the property of interest
- Returns:
- the given property
 
- 
isValidExpandoProperty
- 
invokeMethodDescription copied from interface:GroovyObjectInvokes the given method.- Specified by:
- invokeMethodin 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
 
- 
setMetaClassDescription copied from interface:GroovyObjectAllows the MetaClass to be replaced with a derived implementation.- Specified by:
- setMetaClassin interface- GroovyObject
- Parameters:
- metaClass- the new metaclass
 
- 
setPropertyDescription copied from interface:GroovyObjectSets the given property to the new value.- Specified by:
- setPropertyin interface- GroovyObject
- Parameters:
- property- the name of the property of interest
- newValue- the new value for the property
 
- 
definepublic ExpandoMetaClass define(@DelegatesTo(value=groovy.lang.ExpandoMetaClass.DefiningClosure.class,strategy=3) Closure closure) 
- 
performOperationOnMetaClassprotected void performOperationOnMetaClass(groovy.lang.ExpandoMetaClass.Callable c) 
- 
checkInitalisedprotected void checkInitalised()Description copied from class:MetaClassImplchecks 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.- Overrides:
- checkInitalisedin class- MetaClassImpl
 
- 
registerBeanPropertyRegisters a new bean property- Parameters:
- property- The property name
- newValue- The properties initial value
 
- 
registerInstanceMethodRegisters a new instance method for the given method name and closure on this MetaClass- Parameters:
- metaMethod-
 
- 
registerInstanceMethod
- 
getMethodsOverrides the behavior of parent getMethods() method to make MetaClass aware of added Expando methods- Specified by:
- getMethodsin interface- MetaClass
- Specified by:
- getMethodsin interface- MetaObjectProtocol
- Overrides:
- getMethodsin class- MetaClassImpl
- Returns:
- A list of MetaMethods
- See Also:
 
- 
getPropertiesDescription copied from class:MetaClassImplGet all the properties defined for this type- Specified by:
- getPropertiesin interface- MetaClass
- Specified by:
- getPropertiesin interface- MetaObjectProtocol
- Overrides:
- getPropertiesin class- MetaClassImpl
- Returns:
- a list of MetaProperty objects
- See Also:
 
- 
registerStaticMethod
- 
registerStaticMethodRegisters a new static method for the given method name and closure on this MetaClass- Parameters:
- name- The method name
- callable- The callable Closure
 
- 
getSubclassMetaMethods- Overrides:
- getSubclassMetaMethodsin class- MetaClassImpl
 
- 
getJavaClass- Returns:
- The Java class enhanced by this MetaClass
 
- 
refreshInheritedMethodsCalled from ExpandoMetaClassCreationHandle in the registry if it exists to set up inheritance handling- Parameters:
- modifiedSuperExpandos- A list of modified super ExpandoMetaClass
 
- 
getExpandoMethodsReturns a list of expando MetaMethod instances added to this ExpandoMetaClass- Returns:
- the expandoMethods
 
- 
getExpandoPropertiesReturns a list of MetaBeanProperty instances added to this ExpandoMetaClass- Returns:
- the expandoProperties
 
- 
invokeMethodpublic Object invokeMethod(Class sender, Object object, String methodName, Object[] originalArguments, boolean isCallToSuper, boolean fromInsideClass) Overrides default implementation just in case invokeMethod has been overridden by ExpandoMetaClass- Specified by:
- invokeMethodin interface- MetaClass
- Overrides:
- invokeMethodin class- MetaClassImpl
- Parameters:
- sender- The java.lang.Class instance that invoked the method
- object- The object which the method was invoked on
- methodName- The name of the method
- originalArguments- 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
- See Also:
 
- 
invokeStaticMethodOverrides default implementation just in case a static invoke method has been set on ExpandoMetaClass- Specified by:
- invokeStaticMethodin interface- MetaObjectProtocol
- Overrides:
- invokeStaticMethodin class- MetaClassImpl
- 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:
 
- 
getPropertypublic Object getProperty(Class sender, Object object, String name, boolean useSuper, boolean fromInsideClass) Overrides default implementation just in case getProperty method has been overridden by ExpandoMetaClass- Specified by:
- getPropertyin interface- MetaClass
- Overrides:
- getPropertyin class- MetaClassImpl
- Parameters:
- sender- The java.lang.Class instance that requested the property
- object- The Object which the property is being retrieved from
- name- The name of the property
- useSuper- Whether the call is to a super class property
- fromInsideClass- ??
- Returns:
- the given property's value on the object
- See Also:
 
- 
getPropertyOverrides default implementation just in case getProperty method has been overridden by ExpandoMetaClass- Specified by:
- getPropertyin interface- MetaObjectProtocol
- Overrides:
- getPropertyin class- MetaClassImpl
- Parameters:
- object- The Object which the property is being retrieved from
- name- The name of the property
- Returns:
- The properties value
- See Also:
 
- 
setPropertypublic void setProperty(Class sender, Object object, String name, Object newValue, boolean useSuper, boolean fromInsideClass) Overrides default implementation just in case setProperty method has been overridden by ExpandoMetaClass- Specified by:
- setPropertyin interface- MetaClass
- Overrides:
- setPropertyin class- MetaClassImpl
- Parameters:
- sender- The java.lang.Class instance that is mutating the property
- object- The Object which the property is being set on
- name- The name of the property
- newValue- The new value of the property to set
- useSuper- Whether the call is to a super class property
- fromInsideClass- Whether the call was invoked from the inside or the outside of the class.
- See Also:
 
- 
getMetaPropertyLooks up an existing MetaProperty by name- Specified by:
- getMetaPropertyin interface- MetaObjectProtocol
- Overrides:
- getMetaPropertyin class- MetaClassImpl
- Parameters:
- name- The name of the MetaProperty
- Returns:
- The MetaProperty or null if it doesn't exist
- See Also:
 
- 
hasMetaPropertyReturns true if the MetaClass has the given property- Parameters:
- name- The name of the MetaProperty
- Returns:
- True it exists as a MetaProperty
 
- 
hasMetaMethodChecks whether a MetaMethod for the given name and arguments exists- Parameters:
- name- The name of the MetaMethod
- args- The arguments to the meta method
- Returns:
- True if the method exists otherwise null
 
- 
getPropertyForSetterReturns a property name equivalent for the given setter name or null if it is not a getter- Parameters:
- setterName- The setter name
- Returns:
- The property name equivalent
 
- 
isSetter
- 
createPojoCallSiteDescription copied from class:MetaClassImplCreate a CallSite- Overrides:
- createPojoCallSitein class- MetaClassImpl
 
- 
createStaticSiteDescription copied from class:MetaClassImplCreate a CallSite- Overrides:
- createStaticSitein class- MetaClassImpl
 
- 
hasCustomStaticInvokeMethodpublic boolean hasCustomStaticInvokeMethod()Description copied from class:MetaClassImplindicates is the metaclass method invocation for static methods is done through a custom invoker object.- Overrides:
- hasCustomStaticInvokeMethodin class- MetaClassImpl
- Returns:
- true - if the method invocation is not done by the metaclass itself
 
- 
createPogoCallSiteDescription copied from class:MetaClassImplCreate a CallSite- Overrides:
- createPogoCallSitein class- MetaClassImpl
 
- 
createPogoCallCurrentSite
- 
retrieveConstructorDescription copied from class:MetaClassImplThis is a helper method added in Groovy 2.1.0, which is used only by indy. This method is for internal use only.- Overrides:
- retrieveConstructorin class- MetaClassImpl
 
- 
createConstructorSiteDescription copied from class:MetaClassImplCreate a CallSite- Overrides:
- createConstructorSitein class- MetaClassImpl
 
 
-