Package io.github.classgraph
Class ScanResult
java.lang.Object
io.github.classgraph.ScanResult
- All Implemented Interfaces:
Closeable
,AutoCloseable
public final class ScanResult extends Object implements Closeable, AutoCloseable
The result of a scan. You should assign a ScanResult in a try-with-resources block, or manually close it when you
have finished with the result of a scan.
-
Method Summary
Modifier and Type Method Description long
classpathContentsLastModifiedTime()
Find the maximum last-modified timestamp of any whitelisted file/directory/jarfile encountered during the scan.boolean
classpathContentsModifiedSinceScan()
Determine whether the classpath contents have been modified since the last scan.void
close()
Free any temporary files created by extracting jars or files from within jars.static void
closeAll()
Close allScanResult
instances that have not yet been closed.static ScanResult
fromJSON(String json)
Deserialize a ScanResult from previously-serialized JSON.ClassInfoList
getAllAnnotations()
Get all annotation classes found during the scan.ClassInfoList
getAllClasses()
Get all classes, interfaces and annotations found during the scan.Map<String,ClassInfo>
getAllClassesAsMap()
Get a map from class name toClassInfo
object for all classes, interfaces and annotations found during the scan.ClassInfoList
getAllInterfaces()
Get all interface classes found during the scan (not including annotations, which are also technically interfaces).ClassInfoList
getAllInterfacesAndAnnotations()
Get all interface or annotation classes found during the scan.ResourceList
getAllResources()
Get the list of all resources.Map<String,ResourceList>
getAllResourcesAsMap()
Get a map from resource path toResource
for all resources (including classfiles and non-classfiles) found in whitelisted packages.ClassInfoList
getAllStandardClasses()
Get all standard (non-interface/non-annotation) classes found during the scan.ClassInfoList
getAnnotationsOnClass(String className)
Get annotations on the named class.Map<ClassInfo,ClassInfoList>
getClassDependencyMap()
Get a map from theClassInfo
object for each whitelisted class to a list of the classes referenced by that class (i.e.ClassInfoList
getClassesImplementing(String interfaceName)
Get all classes that implement (or have superclasses that implement) the named interface (or one of its subinterfaces).ClassInfoList
getClassesWithAnnotation(String annotationName)
Get classes with the named class annotation or meta-annotation.ClassInfoList
getClassesWithFieldAnnotation(String fieldAnnotationName)
Get classes that have a field with an annotation of the named type.ClassInfoList
getClassesWithMethodAnnotation(String methodAnnotationName)
Get classes that have a method with an annotation of the named type.ClassInfoList
getClassesWithMethodParameterAnnotation(String methodParameterAnnotationName)
Get classes that have a method with a parameter that is annotated with an annotation of the named type.ClassInfo
getClassInfo(String className)
Get theClassInfo
object for the named class, or null if no class of the requested name was found in a whitelisted/non-blacklisted package during the scan.String
getClasspath()
Returns all unique directories or zip/jarfiles on the classpath, in classloader resolution order, as a classpath string, delineated with the standard path separator character.List<File>
getClasspathFiles()
Returns the list of File objects for unique classpath elements (directories or jarfiles), in classloader resolution order.List<URI>
getClasspathURIs()
Returns an ordered list of unique classpath element and module URIs.List<URL>
getClasspathURLs()
Returns an ordered list of unique classpath element and module URLs.ClassInfoList
getInterfaces(String className)
Get all interfaces implemented by the named class or by one of its superclasses, if this is a standard class, or the superinterfaces extended by this interface, if this is an interface.ModuleInfoList
getModuleInfo()
Get all modules found during the scan.ModuleInfo
getModuleInfo(String moduleName)
Get theModuleInfo
object for the named module, or null if no module of the requested name was found during the scan.ModulePathInfo
getModulePathInfo()
Get the module path info provided on the commandline with--module-path
,--add-modules
,--patch-module
,--add-exports
,--add-opens
, and--add-reads
, and also theAdd-Exports
andAdd-Opens
entries from jarfile manifest files encountered during scanning.List<ModuleRef>
getModules()
GetModuleRef
references for all visible modules.PackageInfoList
getPackageInfo()
Get all packages found during the scan.PackageInfo
getPackageInfo(String packageName)
Get thePackageInfo
object for the named package, or null if no package of the requested name was found during the scan.ResourceList
getResourcesMatchingPattern(Pattern pattern)
Get the list of all resources found in whitelisted packages that have a path matching the requested pattern.ResourceList
getResourcesWithExtension(String extension)
Get the list of all resources found in whitelisted packages that have the requested filename extension.ResourceList
getResourcesWithLeafName(String leafName)
Get the list of all resources found in whitelisted packages that have the requested leafname.ResourceList
getResourcesWithPath(String resourcePath)
Get the list of all resources found in whitelisted packages that have the given path, relative to the package root of the classpath element.ResourceList
getResourcesWithPathIgnoringWhitelist(String resourcePath)
Get the list of all resources found in any classpath element, whether in whitelisted packages or not (as long as the resource is not blacklisted), that have the given path, relative to the package root of the classpath element.Map<ClassInfo,ClassInfoList>
getReverseClassDependencyMap()
Get the reverse class dependency map, i.e.ClassInfoList
getSubclasses(String superclassName)
Get all subclasses of the named superclass.ClassInfoList
getSuperclasses(String subclassName)
Get superclasses of the named subclass.boolean
isObtainedFromDeserialization()
Checks if thisScanResult
was obtained from JSON by deserialization, by callingfromJSON(String)
.Class<?>
loadClass(String className, boolean returnNullIfClassNotFound)
Load a class given a class name.<T> Class<T>
loadClass(String className, Class<T> superclassOrInterfaceType, boolean returnNullIfClassNotFound)
Load a class given a class name.String
toJSON()
Serialize a ScanResult to minified (un-indented) JSON.String
toJSON(int indentWidth)
Serialize a ScanResult to JSON.
-
Method Details
-
getClasspathFiles
Returns the list of File objects for unique classpath elements (directories or jarfiles), in classloader resolution order.- Returns:
- The unique classpath elements.
-
getClasspath
Returns all unique directories or zip/jarfiles on the classpath, in classloader resolution order, as a classpath string, delineated with the standard path separator character.- Returns:
- a the unique directories and jarfiles on the classpath, in classpath resolution order, as a path string.
-
getClasspathURIs
Returns an ordered list of unique classpath element and module URIs.- Returns:
- The unique classpath element and module URIs.
-
getClasspathURLs
Returns an ordered list of unique classpath element and module URLs. Will skip any system modules or modules that are part of a jlink'd runtime image, sinceURL
does not support thejrt:
URI
scheme.- Returns:
- The unique classpath element and module URLs.
-
getModules
GetModuleRef
references for all visible modules.- Returns:
ModuleRef
references for all visible modules.
-
getModulePathInfo
Get the module path info provided on the commandline with--module-path
,--add-modules
,--patch-module
,--add-exports
,--add-opens
, and--add-reads
, and also theAdd-Exports
andAdd-Opens
entries from jarfile manifest files encountered during scanning.Note that the returned
ModulePathInfo
object does not include classpath entries from the traditional classpath or system modules. UsegetModules()
to get all visible modules, including anonymous, automatic and system modules.- Returns:
- The
ModulePathInfo
.
-
getAllResources
Get the list of all resources.- Returns:
- A list of all resources (including classfiles and non-classfiles) found in whitelisted packages.
-
getAllResourcesAsMap
Get a map from resource path toResource
for all resources (including classfiles and non-classfiles) found in whitelisted packages.- Returns:
- The map from resource path to
Resource
for all resources (including classfiles and non-classfiles) found in whitelisted packages.
-
getResourcesWithPath
Get the list of all resources found in whitelisted packages that have the given path, relative to the package root of the classpath element. May match several resources, up to one per classpath element.- Parameters:
resourcePath
- A complete resource path, relative to the classpath entry package root.- Returns:
- A list of all resources found in whitelisted packages that have the given path, relative to the package root of the classpath element. May match several resources, up to one per classpath element.
-
getResourcesWithPathIgnoringWhitelist
Get the list of all resources found in any classpath element, whether in whitelisted packages or not (as long as the resource is not blacklisted), that have the given path, relative to the package root of the classpath element. May match several resources, up to one per classpath element.- Parameters:
resourcePath
- A complete resource path, relative to the classpath entry package root.- Returns:
- A list of all resources found in any classpath element, whether in whitelisted packages or not (as long as the resource is not blacklisted), that have the given path, relative to the package root of the classpath element. May match several resources, up to one per classpath element.
-
getResourcesWithLeafName
Get the list of all resources found in whitelisted packages that have the requested leafname.- Parameters:
leafName
- A resource leaf filename.- Returns:
- A list of all resources found in whitelisted packages that have the requested leafname.
-
getResourcesWithExtension
Get the list of all resources found in whitelisted packages that have the requested filename extension.- Parameters:
extension
- A filename extension, e.g. "xml" to match all resources ending in ".xml".- Returns:
- A list of all resources found in whitelisted packages that have the requested filename extension.
-
getResourcesMatchingPattern
Get the list of all resources found in whitelisted packages that have a path matching the requested pattern.- Parameters:
pattern
- A pattern to matchResource
paths with.- Returns:
- A list of all resources found in whitelisted packages that have a path matching the requested pattern.
-
getModuleInfo
Get theModuleInfo
object for the named module, or null if no module of the requested name was found during the scan.- Parameters:
moduleName
- The module name.- Returns:
- The
ModuleInfo
object for the named module, or null if the module was not found.
-
getModuleInfo
Get all modules found during the scan.- Returns:
- A list of all modules found during the scan, or the empty list if none.
-
getPackageInfo
Get thePackageInfo
object for the named package, or null if no package of the requested name was found during the scan.- Parameters:
packageName
- The package name.- Returns:
- The
PackageInfo
object for the named package, or null if the package was not found.
-
getPackageInfo
Get all packages found during the scan.- Returns:
- A list of all packages found during the scan, or the empty list if none.
-
getClassDependencyMap
Get a map from theClassInfo
object for each whitelisted class to a list of the classes referenced by that class (i.e. returns a map from dependents to dependencies). Note that you need to callClassGraph.enableInterClassDependencies()
beforeClassGraph.scan()
for this method to work. You should also callClassGraph.enableExternalClasses()
beforeClassGraph.scan()
if you want non-whitelisted classes to appear in the result. See alsogetReverseClassDependencyMap()
, which inverts the map.- Returns:
- A map from a
ClassInfo
object for each whitelisted class to a list of the classes referenced by that class (i.e. returns a map from dependents to dependencies). Each map value is the result of callingClassInfo.getClassDependencies()
on the corresponding key.
-
getReverseClassDependencyMap
Get the reverse class dependency map, i.e. a map from theClassInfo
object for each dependency class (whitelisted or not) to a list of the whitelisted classes that referenced that class as a dependency (i.e. returns a map from dependencies to dependents). Note that you need to callClassGraph.enableInterClassDependencies()
beforeClassGraph.scan()
for this method to work. You should also callClassGraph.enableExternalClasses()
beforeClassGraph.scan()
if you want non-whitelisted classes to appear in the result. See alsogetClassDependencyMap()
.- Returns:
- A map from a
ClassInfo
object for each dependency class (whitelisted or not) to a list of the whitelisted classes that referenced that class as a dependency (i.e. returns a map from dependencies to dependents).
-
getClassInfo
Get theClassInfo
object for the named class, or null if no class of the requested name was found in a whitelisted/non-blacklisted package during the scan.- Parameters:
className
- The class name.- Returns:
- The
ClassInfo
object for the named class, or null if the class was not found.
-
getAllClasses
Get all classes, interfaces and annotations found during the scan.- Returns:
- A list of all whitelisted classes found during the scan, or the empty list if none.
-
getAllClassesAsMap
Get a map from class name toClassInfo
object for all classes, interfaces and annotations found during the scan.- Returns:
- The map from class name to
ClassInfo
object for all classes, interfaces and annotations found during the scan.
-
getAllStandardClasses
Get all standard (non-interface/non-annotation) classes found during the scan.- Returns:
- A list of all whitelisted standard classes found during the scan, or the empty list if none.
-
getSubclasses
Get all subclasses of the named superclass.- Parameters:
superclassName
- The name of the superclass.- Returns:
- A list of subclasses of the named superclass, or the empty list if none.
-
getSuperclasses
Get superclasses of the named subclass.- Parameters:
subclassName
- The name of the subclass.- Returns:
- A list of superclasses of the named subclass, or the empty list if none.
-
getClassesWithMethodAnnotation
Get classes that have a method with an annotation of the named type.- Parameters:
methodAnnotationName
- the name of the method annotation.- Returns:
- A list of classes with a method that has an annotation of the named type, or the empty list if none.
-
getClassesWithMethodParameterAnnotation
Get classes that have a method with a parameter that is annotated with an annotation of the named type.- Parameters:
methodParameterAnnotationName
- the name of the method parameter annotation.- Returns:
- A list of classes that have a method with a parameter annotated with the named annotation type, or the empty list if none.
-
getClassesWithFieldAnnotation
Get classes that have a field with an annotation of the named type.- Parameters:
fieldAnnotationName
- the name of the field annotation.- Returns:
- A list of classes that have a field with an annotation of the named type, or the empty list if none.
-
getAllInterfaces
Get all interface classes found during the scan (not including annotations, which are also technically interfaces). See alsogetAllInterfacesAndAnnotations()
.- Returns:
- A list of all whitelisted interfaces found during the scan, or the empty list if none.
-
getInterfaces
Get all interfaces implemented by the named class or by one of its superclasses, if this is a standard class, or the superinterfaces extended by this interface, if this is an interface.- Parameters:
className
- The class name.- Returns:
- A list of interfaces implemented by the named class (or superinterfaces extended by the named interface), or the empty list if none.
-
getClassesImplementing
Get all classes that implement (or have superclasses that implement) the named interface (or one of its subinterfaces).- Parameters:
interfaceName
- The interface name.- Returns:
- A list of all classes that implement the named interface, or the empty list if none.
-
getAllAnnotations
Get all annotation classes found during the scan. See alsogetAllInterfacesAndAnnotations()
.- Returns:
- A list of all annotation classes found during the scan, or the empty list if none.
-
getAllInterfacesAndAnnotations
Get all interface or annotation classes found during the scan. (Annotations are technically interfaces, and they can be implemented.)- Returns:
- A list of all whitelisted interfaces found during the scan, or the empty list if none.
-
getClassesWithAnnotation
Get classes with the named class annotation or meta-annotation.- Parameters:
annotationName
- The name of the class annotation or meta-annotation.- Returns:
- A list of all non-annotation classes that were found with the named class annotation during the scan, or the empty list if none.
-
getAnnotationsOnClass
Get annotations on the named class. This only returns the annotating classes; to read annotation parameters, callgetClassInfo(String)
to get theClassInfo
object for the named class, then if theClassInfo
object is non-null, callClassInfo.getAnnotationInfo()
to get detailed annotation info.- Parameters:
className
- The name of the class.- Returns:
- A list of all annotation classes that were found with the named class annotation during the scan, or the empty list if none.
-
classpathContentsModifiedSinceScan
public boolean classpathContentsModifiedSinceScan()Determine whether the classpath contents have been modified since the last scan. Checks the timestamps of files and jarfiles encountered during the previous scan to see if they have changed. Does not perform a full scan, so cannot detect the addition of directories that newly match whitelist criteria -- you need to perform a full scan to detect those changes.- Returns:
- true if the classpath contents have been modified since the last scan.
-
classpathContentsLastModifiedTime
public long classpathContentsLastModifiedTime()Find the maximum last-modified timestamp of any whitelisted file/directory/jarfile encountered during the scan. Checks the current timestamps, so this should increase between calls if something changes in whitelisted paths. Assumes both file and system timestamps were generated from clocks whose time was accurate. Ignores timestamps greater than the system time.This method cannot in general tell if classpath has changed (or modules have been added or removed) if it is run twice during the same runtime session.
- Returns:
- the maximum last-modified time for whitelisted files/directories/jars encountered during the scan.
-
loadClass
public Class<?> loadClass(String className, boolean returnNullIfClassNotFound) throws IllegalArgumentExceptionLoad a class given a class name. If ignoreExceptions is false, and the class cannot be loaded (due to classloading error, or due to an exception being thrown in the class initialization block), an IllegalArgumentException is thrown; otherwise, the class will simply be skipped if an exception is thrown.Enable verbose scanning to see details of any exceptions thrown during classloading, even if ignoreExceptions is false.
- Parameters:
className
- the class to load.returnNullIfClassNotFound
- If true, null is returned if there was an exception during classloading, otherwise IllegalArgumentException is thrown if a class could not be loaded.- Returns:
- a reference to the loaded class, or null if the class could not be loaded and ignoreExceptions is true.
- Throws:
IllegalArgumentException
- if ignoreExceptions is false, IllegalArgumentException is thrown if there were problems loading or initializing the class. (Note that class initialization on load is disabled by default, you can enable it withClassGraph#initializeLoadedClasses(true)
.) Otherwise exceptions are suppressed, and null is returned if any of these problems occurs.
-
loadClass
public <T> Class<T> loadClass(String className, Class<T> superclassOrInterfaceType, boolean returnNullIfClassNotFound) throws IllegalArgumentExceptionLoad a class given a class name. If ignoreExceptions is false, and the class cannot be loaded (due to classloading error, or due to an exception being thrown in the class initialization block), an IllegalArgumentException is thrown; otherwise, the class will simply be skipped if an exception is thrown.Enable verbose scanning to see details of any exceptions thrown during classloading, even if ignoreExceptions is false.
- Type Parameters:
T
- the superclass or interface type.- Parameters:
className
- the class to load.superclassOrInterfaceType
- The class type to cast the result to.returnNullIfClassNotFound
- If true, null is returned if there was an exception during classloading, otherwise IllegalArgumentException is thrown if a class could not be loaded.- Returns:
- a reference to the loaded class, or null if the class could not be loaded and ignoreExceptions is true.
- Throws:
IllegalArgumentException
- if ignoreExceptions is false, IllegalArgumentException is thrown if there were problems loading the class, initializing the class, or casting it to the requested type. (Note that class initialization on load is disabled by default, you can enable it withClassGraph#initializeLoadedClasses(true)
.) Otherwise exceptions are suppressed, and null is returned if any of these problems occurs.
-
fromJSON
Deserialize a ScanResult from previously-serialized JSON.- Parameters:
json
- The JSON string for the serializedScanResult
.- Returns:
- The deserialized
ScanResult
.
-
toJSON
Serialize a ScanResult to JSON.- Parameters:
indentWidth
- If greater than 0, JSON will be formatted (indented), otherwise it will be minified (un-indented).- Returns:
- This
ScanResult
, serialized as a JSON string.
-
toJSON
Serialize a ScanResult to minified (un-indented) JSON.- Returns:
- This
ScanResult
, serialized as a JSON string.
-
isObtainedFromDeserialization
public boolean isObtainedFromDeserialization()Checks if thisScanResult
was obtained from JSON by deserialization, by callingfromJSON(String)
.- Returns:
- True if this
ScanResult
was obtained from JSON by deserialization.
-
close
public void close()Free any temporary files created by extracting jars or files from within jars. Without calling this method, the temporary files created by extracting the inner jars will be removed in a finalizer, called by the garbage collector (or at JVM shutdown). If you don't want to experience long GC pauses, make sure you call this close method when you have finished with theScanResult
.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
-
closeAll
public static void closeAll()Close allScanResult
instances that have not yet been closed. Note that this will close all openScanResult
instances for any class that uses the classloader that theScanResult
class is cached in -- so if you call this method, you need to ensure that the lifecycle of the classloader matches the lifecycle of your application, or that two concurrent applications don't share the same classloader, otherwise one application might close another application'sScanResult
instances while they are still in use.
-