Class ReflectiveELMethodExecutor

java.lang.Object
io.micronaut.el.interpreter.reflection.ReflectiveELMethodExecutor
All Implemented Interfaces:
io.micronaut.core.order.Ordered, ELMethodExecutor

@Internal public final class ReflectiveELMethodExecutor extends Object implements ELMethodExecutor
Resolves interpreter methods through the public Java reflection API.

This executor is registered as a service and is intentionally kept in a separate artifact. Applications that need arbitrary Java method execution can add this module; applications that provide generated or otherwise direct executors can omit it.

Since:
1.1
Author:
Denis Stepanov
  • Field Summary

    Fields inherited from interface io.micronaut.core.order.Ordered

    HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    Returns the executor order.
    boolean
    Whether the executor reaches the methods it resolves reflectively, rather than through what was generated or registered while the application compiled.
    @Nullable ELMethod
    resolve(jakarta.el.ELContext context, @Nullable Object base, @Nullable Object method, io.micronaut.core.type.Argument<?> @Nullable [] argumentTypes, Object @Nullable [] arguments)
    Resolves an instance or static method, or a constructor represented by <init>.
    @Nullable ELMethod
    resolveFunction(jakarta.el.ELContext context, String prefix, String localName)
    Resolves a function bound by the expression context.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • ReflectiveELMethodExecutor

      public ReflectiveELMethodExecutor()
  • Method Details

    • getOrder

      public int getOrder()
      Description copied from interface: ELMethodExecutor
      Returns the executor order. Lower values run first, following the Micronaut Ordered contract, so direct/generated implementations can take precedence over a general fallback such as reflection.
      Specified by:
      getOrder in interface ELMethodExecutor
      Specified by:
      getOrder in interface io.micronaut.core.order.Ordered
      Returns:
      The order, zero by default
    • isReflective

      public boolean isReflective()
      Description copied from interface: ELMethodExecutor
      Whether the executor reaches the methods it resolves reflectively, rather than through what was generated or registered while the application compiled. The ELSandbox of an expression parsed at runtime is consulted for the methods such an executor resolves, and only for them.
      Specified by:
      isReflective in interface ELMethodExecutor
      Returns:
      Whether the executor reflects, false by default
    • resolve

      public @Nullable ELMethod resolve(jakarta.el.ELContext context, @Nullable Object base, @Nullable Object method, io.micronaut.core.type.Argument<?> @Nullable [] argumentTypes, Object @Nullable [] arguments)
      Description copied from interface: ELMethodExecutor
      Resolves an instance or static method, or a constructor represented by <init>.
      Specified by:
      resolve in interface ELMethodExecutor
      Parameters:
      context - The EL context
      base - The instance, or an ELClass for a static method or constructor
      method - The method name
      argumentTypes - The parameter types supplied when the method expression was created, or null
      arguments - The evaluated arguments, or null
      Returns:
      The resolved method, or null when this executor does not handle it
    • resolveFunction

      public @Nullable ELMethod resolveFunction(jakarta.el.ELContext context, String prefix, String localName)
      Description copied from interface: ELMethodExecutor
      Resolves a function bound by the expression context.

      The default implementation does not contribute functions. A reflection-backed implementation can use the Jakarta FunctionMapper here, while a generated implementation can provide functions without exposing reflective methods.

      Specified by:
      resolveFunction in interface ELMethodExecutor
      Parameters:
      context - The EL context
      prefix - The function prefix
      localName - The function name
      Returns:
      The resolved function, or null when this executor does not handle it