Class FqcnResolver
- java.lang.Object
-
- org.apache.commons.jexl3.internal.FqcnResolver
-
- All Implemented Interfaces:
JexlUberspect.ClassConstantResolver,JexlUberspect.ClassNameResolver
public class FqcnResolver extends java.lang.Object implements JexlUberspect.ClassConstantResolver
Helper resolving a simple class name into a Fully Qualified Class Name (hence FqcnResolver) using package names and classes as roots of import.This only keeps the names of the 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>fqcnsThe map of solved fqcns based on imports keyed on (simple) name, valued as fully qualified class name.private java.util.Set<java.lang.String>importsThe set of packages to be used as import roots.private FqcnResolverparentOptional parent solver.private JexlUberspectuberspectThe uberspect.
-
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 private java.lang.ObjectgetConstant(java.lang.String... ids)(package private) java.lang.StringgetQualifiedName(java.lang.String name)Gets a fully qualified class name from a simple class name and imports.private voidimportCheck(java.lang.Iterable<java.lang.String> names)Adds a collection of packages/classes as import root, check each name point to one or the other.private voidimportCheck(java.lang.String name)Adds a package as import root, checks the name points to a package or a class.(package private) FqcnResolverimportPackages(java.lang.Iterable<java.lang.String> packages)Imports a list of packages as solving roots.(package private) booleanisImporting(java.lang.String pkg)Checks is a package is imported by this solver of one of its ascendants.java.lang.StringresolveClassName(java.lang.String name)Resolves a class name.java.lang.ObjectresolveConstant(java.lang.String cname)Resolves a constant by its name.private java.lang.StringsolveClassName(java.lang.String name)Attempts to solve a fully qualified class name from a simple class name.
-
-
-
Field Detail
-
uberspect
private final JexlUberspect uberspect
The uberspect.
-
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
-
solveClassName
private java.lang.String solveClassName(java.lang.String name)
Attempts to solve a fully qualified class name from a simple class name.It tries to solve the class name as package.classname or package$classname (inner class).
- Parameters:
name- the simple class name- Returns:
- the fully qualified class name or null if not found
-
importCheck
private void importCheck(java.lang.Iterable<java.lang.String> names)
Adds a collection of packages/classes as import root, check each name point to one or the other.- Parameters:
names- the package names
-
importCheck
private void importCheck(java.lang.String name)
Adds a package as import root, checks the name points to a package or a class.- 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:JexlUberspect.ClassNameResolverResolves a class name.- Specified by:
resolveClassNamein interfaceJexlUberspect.ClassNameResolver- Parameters:
name- the simple class name- Returns:
- the fully qualified class name
-
resolveConstant
public java.lang.Object resolveConstant(java.lang.String cname)
Description copied from interface:JexlUberspect.ClassConstantResolverResolves a constant by its name.- Specified by:
resolveConstantin interfaceJexlUberspect.ClassConstantResolver- Parameters:
cname- the constant name, a qualified name- Returns:
- the constant value or TRY_FAILED if not found
-
getConstant
private java.lang.Object getConstant(java.lang.String... ids)
-
-