Class FqcnResolver

  • All Implemented Interfaces:
    JexlContext.ClassNameResolver

    final class FqcnResolver
    extends java.lang.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 Summary

      Fields 
      Modifier and Type Field Description
      private java.util.Map<java.lang.String,​java.lang.String> fqcns
      The map of solved fqcns based on imports keyed on (simple) name, valued as fully-qualified class name.
      private java.util.Set<java.lang.String> imports
      The set of packages to be used as import roots.
      private java.util.concurrent.locks.ReadWriteLock lock
      A lock for RW concurrent ops.
      private FqcnResolver parent
      Optional parent solver.
      private JexlUberspect uberspect
      The class loader.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      (package private) java.lang.String getQualifiedName​(java.lang.String name)
      Gets a fully qualified class name from a simple class name and imports.
      private void importCheck​(java.lang.Iterable<java.lang.String> names)
      Adds a collection of packages as import root, checks the names are one of a package.
      private void importCheck​(java.lang.String name)
      Adds a package as import root, checks the name if one of a package.
      (package private) FqcnResolver importPackages​(java.lang.Iterable<java.lang.String> packages)
      Imports a list of packages as solving roots.
      (package private) boolean isImporting​(java.lang.String pkg)
      Checks is a package is imported by this solver of one of its ascendants.
      java.lang.String resolveClassName​(java.lang.String name)
      Resolves a class name.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • uberspect

        private final JexlUberspect uberspect
        The class loader.
      • lock

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

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

        private final java.util.Map<java.lang.String,​java.lang.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 Detail

      • FqcnResolver

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

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

      • getQualifiedName

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

        private void importCheck​(java.lang.Iterable<java.lang.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​(java.lang.String name)
        Adds a package as import root, checks the name if one of a package.
        Parameters:
        name - the package name
      • importPackages

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

        boolean isImporting​(java.lang.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