public class ClassResolver
extends java.lang.Object
Limitations: this does not handle inner classes very well.
Modifier and Type | Field and Description |
---|---|
private static java.lang.String |
DOLLAR_SIGN
Dollar sign literal.
|
private java.util.Set<java.lang.String> |
imports
Set of imports to check against.
|
private java.lang.ClassLoader |
loader
Use to load classes.
|
private static java.lang.String |
PERIOD
Period literal.
|
private java.lang.String |
pkg
Name of the package to check if the class belongs to.
|
Constructor and Description |
---|
ClassResolver(java.lang.ClassLoader loader,
java.lang.String pkg,
java.util.Set<java.lang.String> imports)
Creates a new
ClassResolver instance. |
Modifier and Type | Method and Description |
---|---|
boolean |
isLoadable(java.lang.String name)
Checks if the given class name can be loaded.
|
java.lang.Class<?> |
resolve(java.lang.String name,
java.lang.String currentClass)
Attempts to resolve the Class for a specified name.
|
private java.lang.Class<?> |
resolveByStarImports(java.lang.String name)
Try star imports.
|
private java.lang.Class<?> |
resolveInnerClass(java.lang.String name,
java.lang.String currentClass)
See if inner class of this class.
|
private java.lang.Class<?> |
resolveInPackage(java.lang.String name)
Try to find class by search in package.
|
private java.lang.Class<?> |
resolveMatchingExplicitImport(java.lang.String name)
Try to find class by matching explicit Import.
|
private java.lang.Class<?> |
resolveQualifiedName(java.lang.String name)
Tries to resolve a class for fully-specified name.
|
private java.lang.Class<?> |
safeLoad(java.lang.String name)
Will load a specified class is such a way that it will NOT be
initialised.
|
private static final java.lang.String PERIOD
private static final java.lang.String DOLLAR_SIGN
private final java.lang.String pkg
private final java.util.Set<java.lang.String> imports
private final java.lang.ClassLoader loader
public ClassResolver(java.lang.ClassLoader loader, java.lang.String pkg, java.util.Set<java.lang.String> imports)
ClassResolver
instance.loader
- the ClassLoader to load classes with.pkg
- the name of the package the class may belong toimports
- set of imports to check if the class belongs topublic java.lang.Class<?> resolve(java.lang.String name, java.lang.String currentClass) throws java.lang.ClassNotFoundException
name
- name of the class to resolvecurrentClass
- name of current class (for inner classes).java.lang.ClassNotFoundException
- if unable to resolve the classprivate java.lang.Class<?> resolveInPackage(java.lang.String name)
name
- class nameprivate java.lang.Class<?> resolveMatchingExplicitImport(java.lang.String name)
name
- class nameprivate java.lang.Class<?> resolveInnerClass(java.lang.String name, java.lang.String currentClass) throws java.lang.ClassNotFoundException
name
- name of the search Class to searchcurrentClass
- class where search injava.lang.ClassNotFoundException
- if an error occursprivate java.lang.Class<?> resolveByStarImports(java.lang.String name)
name
- name of the Class to searchpublic boolean isLoadable(java.lang.String name)
name
- name of the class to checkprivate java.lang.Class<?> safeLoad(java.lang.String name) throws java.lang.ClassNotFoundException, java.lang.NoClassDefFoundError
name
- name of the class to loadClass
for the specified classjava.lang.ClassNotFoundException
- if an error occursjava.lang.NoClassDefFoundError
- if an error occursprivate java.lang.Class<?> resolveQualifiedName(java.lang.String name)
name
- a given name of class.