Class ClassResolver
- java.lang.Object
-
- com.puppycrawl.tools.checkstyle.checks.ClassResolver
-
public class ClassResolver extends java.lang.Object
Utility class to resolve a class name to an actual class. Note that loaded classes are not initialized.Limitations: this does not handle inner classes very well.
-
-
Field Summary
Fields Modifier and Type Field 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 Summary
Constructors Constructor Description ClassResolver(java.lang.ClassLoader loader, java.lang.String pkg, java.util.Set<java.lang.String> imports)
Creates a newClassResolver
instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method 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.
-
-
-
Field Detail
-
PERIOD
private static final java.lang.String PERIOD
Period literal.- See Also:
- Constant Field Values
-
DOLLAR_SIGN
private static final java.lang.String DOLLAR_SIGN
Dollar sign literal.- See Also:
- Constant Field Values
-
pkg
private final java.lang.String pkg
Name of the package to check if the class belongs to.
-
imports
private final java.util.Set<java.lang.String> imports
Set of imports to check against.
-
loader
private final java.lang.ClassLoader loader
Use to load classes.
-
-
Constructor Detail
-
ClassResolver
public ClassResolver(java.lang.ClassLoader loader, java.lang.String pkg, java.util.Set<java.lang.String> imports)
Creates a newClassResolver
instance.- Parameters:
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 to
-
-
Method Detail
-
resolve
public java.lang.Class<?> resolve(java.lang.String name, java.lang.String currentClass) throws java.lang.ClassNotFoundException
Attempts to resolve the Class for a specified name. The algorithm is to check: - fully qualified name - explicit imports - enclosing package - star imports- Parameters:
name
- name of the class to resolvecurrentClass
- name of current class (for inner classes).- Returns:
- the resolved class
- Throws:
java.lang.ClassNotFoundException
- if unable to resolve the class
-
resolveInPackage
private java.lang.Class<?> resolveInPackage(java.lang.String name)
Try to find class by search in package.- Parameters:
name
- class name- Returns:
- class object
-
resolveMatchingExplicitImport
private java.lang.Class<?> resolveMatchingExplicitImport(java.lang.String name)
Try to find class by matching explicit Import.- Parameters:
name
- class name- Returns:
- class object
-
resolveInnerClass
private java.lang.Class<?> resolveInnerClass(java.lang.String name, java.lang.String currentClass) throws java.lang.ClassNotFoundException
See if inner class of this class.- Parameters:
name
- name of the search Class to searchcurrentClass
- class where search in- Returns:
- class if found , or null if not resolved
- Throws:
java.lang.ClassNotFoundException
- if an error occurs
-
resolveByStarImports
private java.lang.Class<?> resolveByStarImports(java.lang.String name)
Try star imports.- Parameters:
name
- name of the Class to search- Returns:
- class if found , or null if not resolved
-
isLoadable
public boolean isLoadable(java.lang.String name)
Checks if the given class name can be loaded.- Parameters:
name
- name of the class to check- Returns:
- whether a specified class is loadable with safeLoad().
-
safeLoad
private java.lang.Class<?> safeLoad(java.lang.String name) throws java.lang.ClassNotFoundException, java.lang.NoClassDefFoundError
Will load a specified class is such a way that it will NOT be initialised.- Parameters:
name
- name of the class to load- Returns:
- the
Class
for the specified class - Throws:
java.lang.ClassNotFoundException
- if an error occursjava.lang.NoClassDefFoundError
- if an error occurs
-
resolveQualifiedName
private java.lang.Class<?> resolveQualifiedName(java.lang.String name)
Tries to resolve a class for fully-specified name.- Parameters:
name
- a given name of class.- Returns:
- Class object for the given name or null.
-
-