Class RExecutable<T extends Executable,​V extends RExecutable>

  • Type Parameters:
    T - the Executable type parameter
    V - this type parameter
    All Implemented Interfaces:
    Serializable
    Direct Known Subclasses:
    RConstructor, RMethod

    public abstract class RExecutable<T extends Executable,​V extends RExecutable>
    extends Object
    Base class for Executable objects (Methods and Constructors)
    Author:
    David B. Bracewell
    See Also:
    Serialized Form
    • Constructor Detail

      • RExecutable

        protected RExecutable​(Reflect owner)
        Instantiates a new R executable.
        Parameters:
        owner - the owning Reflect
    • Method Detail

      • convertParameters

        protected final Object[] convertParameters​(Object... args)
                                            throws TypeConversionException
        Converts the given set of arguments to values acceptable by this executable
        Parameters:
        args - the arguments to convert
        Returns:
        the converted arguments
        Throws:
        TypeConversionException - Something went wrong converting the arguments.
      • getDeclaringClass

        public Reflect getDeclaringClass()
        Gets the class that declares this executable as a Reflect object
        Returns:
        the declaring class as a Reflect object
      • getModifiers

        public int getModifiers()
        Gets the modifiers on this field.
        Returns:
        the modifiers
      • getName

        public final String getName()
        Gets the name of the element
        Returns:
        the name of the element
      • getParameter

        public RParameter getParameter​(int i)
        Gets the ith parameter of the executable
        Parameters:
        i - the index of the parameter in the executable's parameter list
        Returns:
        the parameter
      • getParameters

        public List<RParameter> getParameters()
        Gets all parameters of this executable.
        Returns:
        the parameters
      • isVarArgs

        public boolean isVarArgs()
        Checks if this executable has a varargs parameter
        Returns:
        True if the executable takes a vararg parameter, False othrwise
      • getParameterCount

        public int getParameterCount()
        Gets the number of parameters on the executable
        Returns:
        the number of parameters on the executable
      • parameterTypesCompatible

        public boolean parameterTypesCompatible​(@NonNull
                                                @NonNull Type... types)
        Determines if the given types are compatible with the this executable's parameters
        Parameters:
        types - the types to check
        Returns:
        True if the given types are compatible
      • allowPrivilegedAccess

        public final V allowPrivilegedAccess()
        Allow privileged access to the object
        Returns:
        this Object
      • getOwner

        public final Reflect getOwner()
        Gets the Reflect object from which this executable was created.
        Returns:
        the Reflect object from which this executable was created.
      • isPrivileged

        public final boolean isPrivileged()
        is privileged access allowed on this object?
        Returns:
        True - privileged access is allowed, False - no privileged access is allowed
      • process

        public final <O> O process​(@NonNull
                                   @NonNull CheckedFunction<T,​O> function)
                            throws ReflectionException
        Applies the given CheckedFunction to the object. This method takes care of accessibility concerns.
        Type Parameters:
        O - the return type parameter
        Parameters:
        function - the function to apply
        Returns:
        the return value of the function
        Throws:
        ReflectionException - Something went wrong during reflection
      • setIsPrivileged

        public final V setIsPrivileged​(boolean allowPrivilegedAccess)
        Sets whether or not privileged access is allowed on this object
        Parameters:
        allowPrivilegedAccess - True - privileged access is allowed, False - no privileged access is allowed
        Returns:
        this object
      • getAnnotation

        public final <A extends Annotation> A getAnnotation​(Class<A> annotationClass)
        Gets the annotation of the given class present on this object.
        Type Parameters:
        A - the annotation type parameter
        Parameters:
        annotationClass - the annotation class
        Returns:
        the annotation (null if does not exist)
      • getAnnotation

        public final <A extends Annotation> A getAnnotation​(@NonNull
                                                            @NonNull Class<A> annotationClass,
                                                            boolean onlyDirect)
        Gets the annotation of the given class on this object. When onlyDirect is true it will only return annotations directly present via getDeclaredAnnotation otherwise will return any instance present via getAnnotation.
        Type Parameters:
        A - the annotation type parameter
        Parameters:
        annotationClass - the annotation class
        onlyDirect - True - only declared annotations, False present annotations
        Returns:
        the annotation (null if does not exist)
      • getAnnotations

        public final Annotation[] getAnnotations​(boolean onlyDirect)
        Gets all annotations on this object. When onlyDirect is true it will only return annotations directly present via getDeclaredAnnotations otherwise will return any instance present via getAnnotations.
        Parameters:
        onlyDirect - True - only declared annotations, False present annotations
        Returns:
        the array of Annotation
      • getAnnotations

        public final Annotation[] getAnnotations()
        Gets all annotations present on this object.
        Returns:
        the array of Annotation
      • getAnnotations

        public final <A extends Annotation> A[] getAnnotations​(@NonNull
                                                               @NonNull Class<A> annotationClass,
                                                               boolean onlyDirect)
        Gets all annotations on this object. When onlyDirect is true it will only return annotations directly present via getDeclaredAnnotationsByType otherwise will return any instance present via getAnnotationsByType.
        Type Parameters:
        A - the annotation type parameter
        Parameters:
        annotationClass - the annotation class
        onlyDirect - True - only declared annotations, False present annotations
        Returns:
        the array of Annotation
      • getAnnotations

        public final <A extends Annotation> A[] getAnnotations​(@NonNull
                                                               @NonNull Class<A> annotationClass)
        Gets all associated annotations of given type on this object.
        Type Parameters:
        A - the annotation type parameter
        Parameters:
        annotationClass - the annotation class
        Returns:
        the array of Annotation
      • getElement

        public abstract T getElement()
        Gets the AnnotatedElement
        Returns:
        the AnnotatedElement object
      • getType

        public abstract Type getType()
        Gets the type of the element
        Returns:
        the type of the element
      • isAnnotationDeclared

        @SafeVarargs
        public final boolean isAnnotationDeclared​(@NonNull
                                                  @NonNull Class<? extends Annotation>... annotationClasses)
        Determines if any of the given annotations are declared on this object
        Parameters:
        annotationClasses - the annotation classes
        Returns:
        True - if any of the given annotations are declared on this object
      • isAnnotationPresent

        @SafeVarargs
        public final boolean isAnnotationPresent​(@NonNull
                                                 @NonNull Class<? extends Annotation>... annotationClasses)
        Determines if any of the given annotations are present on this object
        Parameters:
        annotationClasses - the annotation classes
        Returns:
        True - if any of the given annotations are present on this object
      • processAnnotation

        public final <A extends Annotation,​O> O processAnnotation​(@NonNull
                                                                        @NonNull Class<A> annotationClass,
                                                                        @NonNull
                                                                        @NonNull CheckedFunction<? super A,​? extends O> function)
                                                                 throws ReflectionException
        Applies the given CheckedBiFunction to this object with the given annotation if it is present on the object.
        Type Parameters:
        A - the annotation type parameter
        O - the return type parameter
        Parameters:
        annotationClass - the annotation class
        function - the function to apply
        Returns:
        the return value of the function or null if no annotation was present
        Throws:
        ReflectionException - Something went wrong during reflection
      • processAnnotations

        public final <A extends Annotation,​O> List<O> processAnnotations​(@NonNull
                                                                               @NonNull Class<A> annotationClass,
                                                                               @NonNull
                                                                               @NonNull CheckedFunction<? super A,​? extends O> function)
                                                                        throws ReflectionException
        Applies the given CheckedBiFunction to this object and all instances of the given annotation present on the object.
        Type Parameters:
        A - the annotation type parameter
        O - the return type parameter
        Parameters:
        annotationClass - the annotation class
        function - the function to apply
        Returns:
        A list of the return values of the function or null if no annotation was present
        Throws:
        ReflectionException - Something went wrong during reflection
      • withAnnotation

        public final <A extends Annotation> V withAnnotation​(@NonNull
                                                             @NonNull Class<A> annotationClass,
                                                             @NonNull
                                                             @NonNull CheckedConsumer<? super A> consumer)
                                                      throws ReflectionException
        Applies the given CheckedBiConsumer to this object with the given annotation if it is present on the object.
        Type Parameters:
        A - the annotation type parameter
        Parameters:
        annotationClass - the annotation class
        consumer - the consumer to apply
        Returns:
        This object
        Throws:
        ReflectionException - Something went wrong during reflection
      • withAnnotations

        public final <A extends Annotation> V withAnnotations​(@NonNull
                                                              @NonNull Class<A> annotationClass,
                                                              @NonNull
                                                              @NonNull CheckedConsumer<? super A> consumer)
                                                       throws ReflectionException
        Applies the given CheckedBiConsumer to this object and all instances of the given annotation present on this object.
        Type Parameters:
        A - the annotation type parameter
        Parameters:
        annotationClass - the annotation class
        consumer - the consumer to apply
        Returns:
        This object
        Throws:
        ReflectionException - Something went wrong during reflection