Package: org.codehaus.groovy.classgen.asm.indy

## [Java] Class IndyCallSiteWriter

- org.codehaus.groovy.classgen.asm.indy.IndyCallSiteWriter

-     public class IndyCallSiteWriter
      extends CallSiteWriter

  Dummy class used by the indy implementation. This class mostly contains empty stubs for calls to the call site writer, since this class is normally used to prepare call site caching and in indy call site caching is done by the jvm.

- - Inherited fields
    Fields inherited from class | Fields
    --- | ---
    `class CallSiteWriter` | `CONSTRUCTOR`

  - ### Constructor Summary

    Constructors
    Constructor and description
    `IndyCallSiteWriter(WriterController controller)` Creates a call-site writer that delegates property access to indy bytecode.

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public void` | `generateCallSiteArray()` * Generates the call site array field and accessor methods.
    `` | `public void` | `makeCallSite(Expression receiver, String message, Expression arguments, boolean safe, boolean implicitThis, boolean callCurrent, boolean callStatic)` * Generates a general method call through the call site infrastructure. * * Parameters: `receiver` - the receiver expression * `message` - the method name * `arguments` - the arguments expression * `safe` - whether to use safe navigation * `implicitThis` - whether the receiver is implicit 'this' * `callCurrent` - whether to call on the current object * `callStatic` - whether this is a static method call
    `` | `public void` | `makeCallSiteArrayInitializer()` * Generates bytecode to initialize the call site array field to null.
    `` | `public void` | `makeGetPropertySite(Expression receiver, String name, boolean safe, boolean implicitThis)` * Generates a general getProperty call. * * Parameters: `receiver` - the receiver expression * `methodName` - the property name * `safe` - whether to use safe navigation * `implicitThis` - whether the receiver is implicit 'this'
    `` | `public void` | `makeGroovyObjectGetPropertySite(Expression receiver, String name, boolean safe, boolean implicitThis)` * Generates a GroovyObject getProperty call. * * Parameters: `receiver` - the receiver expression * `methodName` - the property name * `safe` - whether to use safe navigation * `implicitThis` - whether the receiver is implicit 'this'
    `` | `public void` | `makeSetPropertySite(PropertyExpression expression, Expression objectExpression, String name, MethodCallerMultiAdapter adapter, boolean groovyObject)` * Emits a property-write site (GROOVY-12138). The assigned value is * already on the operand stack. The default implementation is the classic * `ScriptBytecodeAdapter` adapter call; the indy writer may override * this to emit an `invokedynamic` `setProperty` call site. * * Parameters: `expression` - the property expression being assigned * `objectExpression` - the receiver expression * `name` - the property name * `adapter` - the classic set adapter used for the default path * `groovyObject` - whether the receiver is statically known to be a `GroovyObject`
    `` | `public void` | `makeSingleArgumentCall(Expression receiver, String message, Expression arguments, boolean safe)` * Generates a single-argument method call with optional safe navigation. * * Parameters: `receiver` - the receiver expression * `message` - the method name * `arguments` - the argument expression * `safe` - whether to use safe navigation
    `` | `public void` | `makeSiteEntry()` * Generates bytecode to load the call site array into a local variable.
    `` | `public void` | `prepareCallSite(String message)` * Prepares a call-site entry for the named method on the bytecode operand stack, * loading the call-site array and selecting the slot for `message`. * * Parameters: `message` - the method name for which to prepare the call site

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class CallSiteWriter` | `fallbackAttributeOrPropertySite, generateCallSiteArray, getCallSites, hasCallSiteUse, isPrologueEmitted, makeCallSite, makeCallSiteArrayInitializer, makeGetPropertySite, makeGroovyObjectGetPropertySite, makeSetPropertySite, makeSingleArgumentCall, makeSingleArgumentCall, makeSiteEntry, prepareCallSite, prepareSiteAndReceiver, visitBoxedArgument`

- - ### Constructor Detail

    - #### public IndyCallSiteWriter(WriterController controller)

      Creates a call-site writer that delegates property access to indy bytecode.

  - ### Method Detail

    - #### public void generateCallSiteArray()

      * Generates the call site array field and accessor methods.

    - #### public void makeCallSite(Expression receiver, String message, Expression arguments, boolean safe, boolean implicitThis, boolean callCurrent, boolean callStatic)

      * Generates a general method call through the call site infrastructure. * *

      Parameters:
        `receiver` - the receiver expression *
        `message` - the method name *
        `arguments` - the arguments expression *
        `safe` - whether to use safe navigation *
        `implicitThis` - whether the receiver is implicit 'this' *
        `callCurrent` - whether to call on the current object *
        `callStatic` - whether this is a static method call

    - #### public void makeCallSiteArrayInitializer()

      * Generates bytecode to initialize the call site array field to null.

    - #### public void makeGetPropertySite(Expression receiver, String name, boolean safe, boolean implicitThis)

      * Generates a general getProperty call. * *

      Parameters:
        `receiver` - the receiver expression *
        `methodName` - the property name *
        `safe` - whether to use safe navigation *
        `implicitThis` - whether the receiver is implicit 'this'

    - #### public void makeGroovyObjectGetPropertySite(Expression receiver, String name, boolean safe, boolean implicitThis)

      * Generates a GroovyObject getProperty call. * *

      Parameters:
        `receiver` - the receiver expression *
        `methodName` - the property name *
        `safe` - whether to use safe navigation *
        `implicitThis` - whether the receiver is implicit 'this'

    - #### public void makeSetPropertySite(PropertyExpression expression, Expression objectExpression, String name, MethodCallerMultiAdapter adapter, boolean groovyObject)

      * Emits a property-write site (GROOVY-12138). The assigned value is * already on the operand stack. The default implementation is the classic * `ScriptBytecodeAdapter` adapter call; the indy writer may override * this to emit an `invokedynamic` `setProperty` call site. * *

      Parameters:
        `expression` - the property expression being assigned *
        `objectExpression` - the receiver expression *
        `name` - the property name *
        `adapter` - the classic set adapter used for the default path *
        `groovyObject` - whether the receiver is statically known to be a `GroovyObject`

    - #### public void makeSingleArgumentCall(Expression receiver, String message, Expression arguments, boolean safe)

      * Generates a single-argument method call with optional safe navigation. * *

      Parameters:
        `receiver` - the receiver expression *
        `message` - the method name *
        `arguments` - the argument expression *
        `safe` - whether to use safe navigation

    - #### public void makeSiteEntry()

      * Generates bytecode to load the call site array into a local variable.

    - #### public void prepareCallSite(String message)

      * Prepares a call-site entry for the named method on the bytecode operand stack, * loading the call-site array and selecting the slot for `message`. * *

      Parameters:
        `message` - the method name for which to prepare the call site