Class ClassResolver
- java.lang.Object
-
- com.puppycrawl.tools.checkstyle.checks.ClassResolver
-
public class ClassResolver extends java.lang.ObjectUtility 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.StringDOLLAR_SIGNDollar sign literal.private java.util.Set<java.lang.String>importsSet of imports to check against.private java.lang.ClassLoaderloaderUse to load classes.private static java.lang.StringPERIODPeriod literal.private java.lang.StringpkgName 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 newClassResolverinstance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanisLoadable(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 newClassResolverinstance.- 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.ClassNotFoundExceptionAttempts 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.ClassNotFoundExceptionSee 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.NoClassDefFoundErrorWill load a specified class is such a way that it will NOT be initialised.- Parameters:
name- name of the class to load- Returns:
- the
Classfor 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.
-
-