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 Details

    • 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, String delegationImplName, JavaType javaReturnType, List<JavaType> javaArgumentTypes, JavaType containingType, Type containingCType)
      Constructor for calling a C function or a function pointer contained in a struct.

      In case of the latter, a struct function pointer, the arguments containingType and containingCType must not be null!

  • Method Details

    • 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()
      Returns the FunctionSymbol.
    • 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.
    • getName

      public String getName()
      Returns the FunctionSymbol's current aliased API name.
    • getDelegationImplName

      public String getDelegationImplName()
      The implementation delegation name, or null for no delegation.
      See Also:
    • getInterfaceName

      public String getInterfaceName()
      Returns the FunctionSymbol's current aliased API name for the interface.
    • getImplName

      public String getImplName()
      Returns the FunctionSymbol's name for the implementation, which is the current aliased API name per default, or the delegation name.
      See Also:
    • getNativeName

      public String getNativeName()
      Returns the FunctionSymbol's name for the native function which is the original C API name per default, but may be overridden via setNativeName(String).
    • setNativeName

      public void setNativeName(String s)
    • 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)