Package: org.codehaus.groovy.classgen.asm

## [Java] Class MopWriter

- org.codehaus.groovy.classgen.asm.MopWriter

-     public class MopWriter
      extends Object

  Generates bytecode for Meta Object Protocol (MOP) methods.

- - ### Nested Class Summary

    Nested classes
    Modifiers | Name | Description
    --- | --- | ---
    `interface` | `MopWriter.Factory` | Factory interface for creating MopWriter instances.

  - ### Field Summary

    Fields
    Modifiers | Name | Description
    --- | --- | ---
    `static Factory` | `FACTORY` | Default factory for MopWriter instances.
    `protected WriterController` | `controller` | The controller coordinating all bytecode writers for the current class.

  - ### Constructor Summary

    Constructors
    Constructor and description
    `MopWriter(WriterController controller)` Creates a MopWriter with the given controller.

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public void` | `createMopMethods()` Generates MOP methods for the current class.
    `` | `public static boolean` | `equalParameterTypes(Parameter[] p1, Parameter[] p2)` Checks if two parameter arrays are equal.
    `` | `protected void` | `generateMopCalls(LinkedList<MethodNode> methods, boolean useThis)` Generates a Meta Object Protocol method that is used to call a non-public method or to make a call to super.
    `` | `public static String` | `getMopMethodName(MethodNode method, boolean useThis)` Creates a MOP method name from a method.
    `` | `public static boolean` | `isMopMethod(String methodName)` Determines if a method is a MOP method.

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class Object` | `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### public static final Factory FACTORY

      Default factory for MopWriter instances.

    - #### protected final WriterController controller

      The controller coordinating all bytecode writers for the current class.

  - ### Constructor Detail

    - #### public MopWriter(WriterController controller)

      Creates a MopWriter with the given controller.

      Parameters:
        `controller` - the writer controller

  - ### Method Detail

    - #### public void createMopMethods()

      Generates MOP methods for the current class.

    - #### @Deprecated
      public static boolean equalParameterTypes(Parameter[] p1, Parameter[] p2)

      Checks if two parameter arrays are equal.

      deprecated:
        Use ParameterUtils.parametersEqual instead
      Parameters:
        `p1` - first parameter array
        `p2` - second parameter array
      Returns:
        true if parameters are equal

    - #### protected void generateMopCalls(LinkedList<MethodNode> methods, boolean useThis)

      Generates a Meta Object Protocol method that is used to call a non-public method or to make a call to super.

      Parameters:
        `methods` - list of methods a MOP call method should be generated for
        `useThis` - indicates if "this" should be used for the name and call

    - #### public static String getMopMethodName(MethodNode method, boolean useThis)

      Creates a MOP method name from a method.

      Parameters:
        `method` - the method to be called by the mop method
        `useThis` - if true, then it is a call on "this", "super" else
      Returns:
        the mop method name

    - #### public static boolean isMopMethod(String methodName)

      Determines if a method is a MOP method. This is done by the method name. If the name starts with "this$" or "super$" but does not contain "$dist$", then it is an MOP method.

      Parameters:
        `methodName` - name of the method to test
      Returns:
        true if the method is a MOP method