Class FqcnResolver
- java.lang.Object
-
- org.apache.commons.jexl3.internal.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.
-
Constructor Summary
Constructors Constructor Description FqcnResolver(FqcnResolver solver)
Creates a class name solver.FqcnResolver(JexlUberspect uber, java.lang.Iterable<java.lang.String> packages)
Creates a class name solver.
-
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.
-
-
-
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 loaderpackages
- 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
-
resolveClassName
public java.lang.String resolveClassName(java.lang.String name)
Description copied from interface:JexlContext.ClassNameResolver
Resolves a class name.- Specified by:
resolveClassName
in interfaceJexlContext.ClassNameResolver
- Parameters:
name
- the simple class name- Returns:
- the fully qualified class name
-
-