Package: org.codehaus.groovy.runtime.metaclass

## [Java] Class ClosureMetaClass

- org.codehaus.groovy.runtime.metaclass.ClosureMetaClass

-     public final class ClosureMetaClass
      extends MetaClassImpl

  A metaclass for closures generated by the Groovy compiler. These classes have special characteristics this MetaClass uses. One of these is that a generated Closure has only additional doCall methods, all other methods are in the Closure class as well. To use this fact this MetaClass uses a MetaClass for Closure as static field And delegates calls to this MetaClass if needed. This allows a lean implementation for this MetaClass. Multiple generated closures will then use the same MetaClass for Closure. For static dispatching this class uses the MetaClass of Class, again all instances of this class will share that MetaClass. The Class MetaClass is initialized lazy, because most operations do not need this MetaClass.

  The Closure and Class MetaClasses are not replaceable.

  This MetaClass is for internal usage only!

  Since:
    1.5

- - Inherited fields
    Fields inherited from class | Fields
    --- | ---
    `class MetaClassImpl` | `EMPTY_ARGUMENTS, INVOKE_METHOD_METHOD, METHOD_MISSING, PROPERTY_MISSING, STATIC_METHOD_MISSING, STATIC_PROPERTY_MISSING, getPropertyMethod, invokeMethodMethod, isGroovyObject, isMap, metaMethodIndex, registry, setPropertyMethod, theCachedClass, theClass`

  - ### Constructor Summary

    Constructors
    Constructor and description
    `ClosureMetaClass(MetaClassRegistry registry, Class theClass)`

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public void` | `addMetaBeanProperty(MetaBeanProperty mp)`
    `` | `public void` | `addMetaMethod(MetaMethod method)`
    `` | `public void` | `addNewInstanceMethod(Method method)`
    `` | `public void` | `addNewStaticMethod(Method method)`
    `` | `protected void` | `applyPropertyDescriptors(PropertyDescriptor[] propertyDescriptors)`
    `` | `public CallSite` | `createPogoCallCurrentSite(CallSite site, Class sender, Object[] args)`
    `` | `public CallSite` | `createPogoCallSite(CallSite site, Object[] args)`
    `` | `public CallSite` | `createPojoCallSite(CallSite site, Object receiver, Object[] args)`
    `` | `public Object` | `getAttribute(Class sender, Object object, String attribute, boolean useSuper, boolean fromInsideClass)`
    `` | `public List<MetaMethod>` | `getMetaMethods()`
    `` | `public MetaProperty` | `getMetaProperty(String name)`
    `` | `public MetaMethod` | `getMethodWithoutCaching(int index, Class sender, String methodName, Class[] arguments, boolean isCallToSuper)`
    `` | `public List<MetaMethod>` | `getMethods()`
    `` | `public List<MetaProperty>` | `getProperties()`
    `` | `public Object` | `getProperty(Class sender, Object object, String name, boolean useSuper, boolean fromInsideClass)`
    `` | `public MetaMethod` | `getStaticMetaMethod(String name, Object[] args)`
    `` | `public MetaMethod` | `getStaticMetaMethod(String name, Class[] argTypes)`
    `` | `public void` | `initialize()`
    `` | `public Object` | `invoke(Object object, Object[] arguments)`
    `` | `public Object` | `invokeMethod(Class sender, Object object, String methodName, Object[] originalArguments, boolean isCallToSuper, boolean fromInsideClass)`
    `` | `public Object` | `invokeStaticMethod(Object object, String methodName, Object[] arguments)`
    `` | `protected boolean` | `isInitialized()`
    `` | `public MetaMethod` | `pickMethod(String methodName, Class[] argumentTypes)`
    `` | `public static void` | `resetCachedMetaClasses()`
    `` | `public List` | `respondsTo(Object obj, String name, Object[] argTypes)`
    `` | `public List` | `respondsTo(Object obj, String name)`
    `` | `public Constructor` | `retrieveConstructor(Class[] arguments)`
    `` | `public MetaMethod` | `retrieveStaticMethod(String methodName, Class[] arguments)`
    `` | `public void` | `setAttribute(Class sender, Object object, String attribute, Object newValue, boolean useSuper, boolean fromInsideClass)`
    `` | `protected void` | `setInitialized(boolean initialized)`
    `` | `public void` | `setProperties(Object bean, Map map)`
    `` | `public void` | `setProperty(Class sender, Object object, String name, Object newValue, boolean useSuper, boolean fromInsideClass)`

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class MetaClassImpl` | `getMetaMethod, getMetaProperty, getRegistry, getStaticMetaMethod, getSuperClasses, getTheCachedClass, getTheClass, hasProperty, isGroovyObject, methodNameAction, respondsTo, respondsTo, skipClass`

- - ### Constructor Detail

    - #### public ClosureMetaClass(MetaClassRegistry registry, Class theClass)

  - ### Method Detail

    - #### @Override
      public void addMetaBeanProperty(MetaBeanProperty mp)

    - #### @Override
      public void addMetaMethod(MetaMethod method)

    - #### @Override
      public void addNewInstanceMethod(Method method)

    - #### @Override
      public void addNewStaticMethod(Method method)

    - #### @Override
      protected void applyPropertyDescriptors(PropertyDescriptor[] propertyDescriptors)

    - #### @Override
      public CallSite createPogoCallCurrentSite(CallSite site, Class sender, Object[] args)

    - #### @Override
      public CallSite createPogoCallSite(CallSite site, Object[] args)

    - #### @Override
      public CallSite createPojoCallSite(CallSite site, Object receiver, Object[] args)

    - #### @Override
      public Object getAttribute(Class sender, Object object, String attribute, boolean useSuper, boolean fromInsideClass)

    - #### @Override
      public List<MetaMethod> getMetaMethods()

    - #### @Override
      public MetaProperty getMetaProperty(String name)

    - #### public MetaMethod getMethodWithoutCaching(int index, Class sender, String methodName, Class[] arguments, boolean isCallToSuper)

    - #### @Override
      public List<MetaMethod> getMethods()

    - #### @Override
      public List<MetaProperty> getProperties()

    - #### @Override
      public Object getProperty(Class sender, Object object, String name, boolean useSuper, boolean fromInsideClass)

    - #### @Override
      public MetaMethod getStaticMetaMethod(String name, Object[] args)

    - #### public MetaMethod getStaticMetaMethod(String name, Class[] argTypes)

    - #### @Override
      public void initialize()

    - #### @Override
      public Object invoke(Object object, Object[] arguments)

    - #### @Override
      public Object invokeMethod(Class sender, Object object, String methodName, Object[] originalArguments, boolean isCallToSuper, boolean fromInsideClass)

    - #### @Override
      public Object invokeStaticMethod(Object object, String methodName, Object[] arguments)

    - #### @Override
      protected boolean isInitialized()

    - #### @Override
      public MetaMethod pickMethod(String methodName, Class[] argumentTypes)

    - #### public static void resetCachedMetaClasses()

    - #### @Override
      public List respondsTo(Object obj, String name, Object[] argTypes)

    - #### @Override
      public List respondsTo(Object obj, String name)

    - #### @Override
      public Constructor retrieveConstructor(Class[] arguments)

    - #### public MetaMethod retrieveStaticMethod(String methodName, Class[] arguments)

    - #### @Override
      public void setAttribute(Class sender, Object object, String attribute, Object newValue, boolean useSuper, boolean fromInsideClass)

    - #### @Override
      protected void setInitialized(boolean initialized)

    - #### @Override
      public void setProperties(Object bean, Map map)

    - #### @Override
      public void setProperty(Class sender, Object object, String name, Object newValue, boolean useSuper, boolean fromInsideClass)