Class FqcnResolver

java.lang.Object
org.apache.commons.jexl3.internal.FqcnResolver
All Implemented Interfaces:
JexlContext.ClassNameResolver

class FqcnResolver extends Object implements JexlContext.ClassNameResolver
Helper resolving a simple class name into a fully-qualified class name (hence FqcnResolver) using package names as roots of import.

This only keeps names of classes to avoid any class loading/reloading/permissions issue.

  • Field Details

    • uberspect

      private final JexlUberspect uberspect
      The class loader.
    • lock

      private final ReadWriteLock lock
      A lock for RW concurrent ops.
    • imports

      private final Set<String> imports
      The set of packages to be used as import roots.
    • fqcns

      private final Map<String,String> fqcns
      The map of solved fqcns based on imports keyed on (simple) name, valued as fully-qualified class name.
    • parent

      private final FqcnResolver parent
      Optional parent solver.
  • Constructor Details

    • FqcnResolver

      FqcnResolver(JexlUberspect uber, Iterable<String> packages)
      Creates a class name solver.
      Parameters:
      uber - the optional class loader
      packages - the optional package names
    • FqcnResolver

      FqcnResolver(FqcnResolver solver)
      Creates a class name solver.
      Parameters:
      solver - the parent solver
      Throws:
      NullPointerException - if parent solver is null
  • Method Details

    • importCheck

      private void importCheck(Iterable<String> names)
      Adds a collection of packages as import root, checks the names are one of a package.
      Parameters:
      names - the package names
    • importCheck

      private void importCheck(String name)
      Adds a package as import root, checks the name if one of a package.
      Parameters:
      name - the package name
    • resolveClassName

      public String resolveClassName(String name)
      Description copied from interface: JexlContext.ClassNameResolver
      Resolves a class name.
      Specified by:
      resolveClassName in interface JexlContext.ClassNameResolver
      Parameters:
      name - the simple class name
      Returns:
      the fully qualified class name
    • isImporting

      boolean isImporting(String pkg)
      Checks is a package is imported by this solver of one of its ascendants.
      Parameters:
      pkg - the package name
      Returns:
      true if an import exists for this package, false otherwise
    • importPackages

      FqcnResolver importPackages(Iterable<String> packages)
      Imports a list of packages as solving roots.
      Parameters:
      packages - the packages
      Returns:
      this solver
    • getQualifiedName

      String getQualifiedName(String name)
      Gets a fully qualified class name from a simple class name and imports.
      Parameters:
      name - the simple name
      Returns:
      the fqcn