com.jogamp.gluegen

## Class MethodBinding

- java.lang.Object
- - com.jogamp.gluegen.MethodBinding

-     public class MethodBinding
      extends Object

  Represents the binding of a C function to a Java method. Also used to represent calls through function pointers contained in structs.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `MethodBinding(FunctionSymbol sym)` Constructor for calling a C function.
    `MethodBinding(FunctionSymbol sym, JavaType containingType, Type containingCType)` Constructor for calling a function pointer contained in a struct.
    `MethodBinding(MethodBinding bindingToCopy)` Constructs a new MethodBinding that is an exact clone of the argument, including the java return type and java argument types.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addAliasedName(String name)`
    `void` | `addJavaArgumentType(JavaType type)`
    `boolean` | `argumentsUseNIO()` Returns true if any of the outgoing arguments in the method's signature require conversion or checking due to the use of New I/O.
    `void` | `clearThisPointer()` Clears any record of a this pointer for this MethodBinding.
    `protected void` | `computeSignatureProperties()` Computes summary information about the method's C and Java signatures.
    `boolean` | `equals(Object obj)`
    `protected String` | `erasedTypeDescriptor(JavaType type, boolean eraseBufferAndArrayTypes, boolean skipBuffers)`
    `void` | `findThisPointer()` Find the leftmost argument matching the type of the containing type (for function pointer MethodBindings) and record that as a "this" pointer, meaning that it does not need to be explicitly passed at the Java level.
    `Collection<String>` | `getAliasedNames()`
    `String` | `getArgumentName(int i)` Returns either the argument name specified by the underlying FunctionSymbol or a fabricated argument name based on the position.
    `Type` | `getCArgumentType(int i)`
    `Type` | `getContainingCType()` Retrieves the containing C type of this MethodBinding if it is for a function pointer contained in a struct.
    `JavaType` | `getContainingType()` Retrieves the containing type of this MethodBinding if it is for a function pointer contained in a struct.
    `Type` | `getCReturnType()`
    `FunctionSymbol` | `getCSymbol()`
    `String` | `getDescriptor(boolean forImplementingMethodCall, boolean eraseBufferAndArrayTypes)` Returns a String containing the descriptor (signature in internal format) of this MethodBinding as it will be emitted.
    `JavaType` | `getJavaArgumentType(int i)`
    `JavaType` | `getJavaReturnType()`
    `String` | `getName()`
    `int` | `getNumArguments()`
    `String` | `getOrigName()`
    `boolean` | `hasContainingType()` Indicates whether this MethodBinding is for a function pointer contained in a struct, or to access array- or pointer-data from a struct.
    `int` | `hashCode()`
    `boolean` | `isArgumentThisPointer(int i)` Indicates whether the ith argument to this MethodBinding is actually a "this" pointer.
    `boolean` | `needsNIOWrappingOrUnwrapping()` Returns true if the function needs NIO-related wrapping/unwrapping or conversion of various arguments.
    `void` | `renameMethodName(String name)` Supports renaming C function in Java binding.
    `MethodBinding` | `replaceJavaArgumentType(int argumentNumber, JavaType newArgType)` Creates a new MethodBinding replacing the specified Java argument type with a new argument type.
    `void` | `setJavaReturnType(JavaType type)`
    `boolean` | `signatureCanUseIndirectNIO()` Returns true if it is possible for any of the outgoing arguments to be indirect NIO buffers.
    `boolean` | `signatureRequiresStaticInitialization()` Returns true if the wrapper implementation requires static native code to be initialized, see `JavaConfiguration.forceStaticInitCode(String)`.
    `boolean` | `signatureUsesArraysOfCompoundTypeWrappers()` Returns true if the return type or any of the outgoing arguments in the method's signature use arrays of "compound type wrappers", or NIO-based wrappers for C data structures.
    `boolean` | `signatureUsesCArrays()` Returns true if the return type or any of the outgoing arguments in the method's signature represent C arrays.
    `boolean` | `signatureUsesCompoundTypeWrappers()` Returns true if the return type or any of the outgoing arguments in the method's signature use "compound type wrappers", or NIO-based wrappers for C data structures.
    `boolean` | `signatureUsesCPrimitivePointers()` Returns true if the return type or any of the outgoing arguments in the method's signature represent C primitive pointers.
    `boolean` | `signatureUsesCVoidPointers()` Returns true if the return type or any of the outgoing arguments in the method's signature represent C void* pointers.
    `boolean` | `signatureUsesJavaPrimitiveArrays()` Returns true if the return type or any of the outgoing arguments in the method's signature represent Java primitive arrays.
    `boolean` | `signatureUsesNIO()` Returns true if the return type or any of the outgoing arguments in the method's signature require conversion or checking due to the use of New I/O.
    `String` | `toString()` Returns the signature of this binding.

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### MethodBinding

          public MethodBinding(MethodBinding bindingToCopy)

      Constructs a new MethodBinding that is an exact clone of the argument, including the java return type and java argument types. It's safe to modify this binding after construction.

    - #### MethodBinding

          public MethodBinding(FunctionSymbol sym)

      Constructor for calling a C function.

    - #### MethodBinding

          public MethodBinding(FunctionSymbol sym,
                       JavaType containingType,
                       Type containingCType)

      Constructor for calling a function pointer contained in a struct.

  - ### Method Detail

    - #### setJavaReturnType

          public void setJavaReturnType(JavaType type)

    - #### addJavaArgumentType

          public void addJavaArgumentType(JavaType type)

    - #### getJavaReturnType

          public JavaType getJavaReturnType()

    - #### getNumArguments

          public int getNumArguments()

    - #### getJavaArgumentType

          public JavaType getJavaArgumentType(int i)

    - #### getCReturnType

          public Type getCReturnType()

    - #### getCArgumentType

          public Type getCArgumentType(int i)

    - #### getCSymbol

          public FunctionSymbol getCSymbol()

    - #### getArgumentName

          public String getArgumentName(int i)

      Returns either the argument name specified by the underlying FunctionSymbol or a fabricated argument name based on the position. Note that it is currently not guaranteed that there are no namespace clashes with these fabricated argument names.

    - #### getOrigName

          public String getOrigName()

    - #### getName

          public String getName()

    - #### renameMethodName

          public void renameMethodName(String name)

      Supports renaming C function in Java binding.

    - #### addAliasedName

          public void addAliasedName(String name)

    - #### getAliasedNames

          public Collection<String> getAliasedNames()

    - #### replaceJavaArgumentType

          public MethodBinding replaceJavaArgumentType(int argumentNumber,
                                              JavaType newArgType)

      Creates a new MethodBinding replacing the specified Java argument type with a new argument type. If argumentNumber is less than 0 then replaces the return type.

    - #### argumentsUseNIO

          public boolean argumentsUseNIO()

      Returns true if any of the outgoing arguments in the method's signature require conversion or checking due to the use of New I/O.

    - #### signatureUsesNIO

          public boolean signatureUsesNIO()

      Returns true if the return type or any of the outgoing arguments in the method's signature require conversion or checking due to the use of New I/O.

    - #### signatureCanUseIndirectNIO

          public boolean signatureCanUseIndirectNIO()

      Returns true if it is possible for any of the outgoing arguments to be indirect NIO buffers.

    - #### signatureUsesCompoundTypeWrappers

          public boolean signatureUsesCompoundTypeWrappers()

      Returns true if the return type or any of the outgoing arguments in the method's signature use "compound type wrappers", or NIO-based wrappers for C data structures.

    - #### signatureRequiresStaticInitialization

          public boolean signatureRequiresStaticInitialization()

      Returns true if the wrapper implementation requires static native code to be initialized, see `JavaConfiguration.forceStaticInitCode(String)`.

      Currently triggered by:

      - Return type is a "compound type" and not a pointer

    - #### signatureUsesArraysOfCompoundTypeWrappers

          public boolean signatureUsesArraysOfCompoundTypeWrappers()

      Returns true if the return type or any of the outgoing arguments in the method's signature use arrays of "compound type wrappers", or NIO-based wrappers for C data structures.

    - #### needsNIOWrappingOrUnwrapping

          public boolean needsNIOWrappingOrUnwrapping()

      Returns true if the function needs NIO-related wrapping/unwrapping or conversion of various arguments. Currently this returns the logical OR of signatureUsesNIO(), signatureUsesCompoundTypeWrappers() and signatureUsesArraysOfCompoundTypeWrappers().

    - #### signatureUsesCVoidPointers

          public boolean signatureUsesCVoidPointers()

      Returns true if the return type or any of the outgoing arguments in the method's signature represent C void* pointers.

    - #### signatureUsesCPrimitivePointers

          public boolean signatureUsesCPrimitivePointers()

      Returns true if the return type or any of the outgoing arguments in the method's signature represent C primitive pointers.

    - #### signatureUsesCArrays

          public boolean signatureUsesCArrays()

      Returns true if the return type or any of the outgoing arguments in the method's signature represent C arrays.

    - #### signatureUsesJavaPrimitiveArrays

          public boolean signatureUsesJavaPrimitiveArrays()

      Returns true if the return type or any of the outgoing arguments in the method's signature represent Java primitive arrays.

    - #### computeSignatureProperties

          protected void computeSignatureProperties()

      Computes summary information about the method's C and Java signatures.

    - #### hasContainingType

          public boolean hasContainingType()

      Indicates whether this MethodBinding is for a function pointer contained in a struct, or to access array- or pointer-data from a struct.

      The native calling convention, i.e. via a 'this' function pointer or by a static native function must be decided in the `JavaEmitter` handling structs and passed to the `CMethodBindingEmitter.setIsCStructFunctionPointer(boolean)`.

    - #### getContainingType

          public JavaType getContainingType()

      Retrieves the containing type of this MethodBinding if it is for a function pointer contained in a struct.

    - #### getContainingCType

          public Type getContainingCType()

      Retrieves the containing C type of this MethodBinding if it is for a function pointer contained in a struct.

    - #### findThisPointer

          public void findThisPointer()

      Find the leftmost argument matching the type of the containing type (for function pointer MethodBindings) and record that as a "this" pointer, meaning that it does not need to be explicitly passed at the Java level.

    - #### clearThisPointer

          public void clearThisPointer()

      Clears any record of a this pointer for this MethodBinding.

    - #### isArgumentThisPointer

          public boolean isArgumentThisPointer(int i)

      Indicates whether the ith argument to this MethodBinding is actually a "this" pointer.

    - #### equals

          public boolean equals(Object obj)

      Overrides:
        `equals` in class `Object`

    - #### hashCode

          public int hashCode()

      Overrides:
        `hashCode` in class `Object`

    - #### toString

          public String toString()

      Returns the signature of this binding.
      Overrides:
        `toString` in class `Object`

    - #### getDescriptor

          public String getDescriptor(boolean forImplementingMethodCall,
                             boolean eraseBufferAndArrayTypes)

      Returns a String containing the descriptor (signature in internal format) of this MethodBinding as it will be emitted. This is used to disambiguate between overloadings when manually specifying prologue and epilogue code, for example.

    - #### erasedTypeDescriptor

          protected String erasedTypeDescriptor(JavaType type,
                                    boolean eraseBufferAndArrayTypes,
                                    boolean skipBuffers)