Class ClassInfoList
- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractList<E>
-
- java.util.ArrayList<T>
-
- io.github.classgraph.ClassInfoList
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Cloneable
,java.lang.Iterable<ClassInfo>
,java.util.Collection<ClassInfo>
,java.util.List<ClassInfo>
,java.util.RandomAccess
public class ClassInfoList extends java.util.ArrayList<T>
A list ofClassInfo
objects, which stores both reachable classes (obtained through a given class relationship, either by direct relationship or through an indirect path), and directly related classes (classes reachable through a direct relationship only).By default, this list returns reachable classes. By calling
directOnly()
, you can get the directly related classes.- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
ClassInfoList.ClassInfoFilter
Filter aClassInfoList
using a predicate mapping aClassInfo
object to a boolean, producing anotherClassInfoList
for all items in the list for which the predicate is true.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.util.Map<java.lang.String,T>
asMap()
boolean
containsName(java.lang.String name)
ClassInfoList
directOnly()
Get the list of classes that were directly related, as opposed to reachable through multiple steps.ClassInfoList
exclude(ClassInfoList other)
Find the set difference between thisClassInfoList
and anotherClassInfoList
, i.e.ClassInfoList
filter(ClassInfoList.ClassInfoFilter filter)
Find the subset of thisClassInfoList
for which the given filter predicate is true.java.lang.String
generateGraphVizDotFile()
Generate a .dot file which can be fed into GraphViz for layout and visualization of the class graph.java.lang.String
generateGraphVizDotFile(float sizeX, float sizeY)
Generate a .dot file which can be fed into GraphViz for layout and visualization of the class graph.java.lang.String
generateGraphVizDotFile(float sizeX, float sizeY, boolean showFields, boolean showFieldTypeDependencyEdges, boolean showMethods, boolean showMethodTypeDependencyEdges, boolean showAnnotations)
Generate a .dot file which can be fed into GraphViz for layout and visualization of the class graph.void
generateGraphVizDotFile(java.io.File file)
Generate a and save a .dot file, which can be fed into GraphViz for layout and visualization of the class graph.java.lang.String
generateGraphVizDotFileFromClassDependencies()
Generate a .dot file which can be fed into GraphViz for layout and visualization of the class graph.java.lang.String
generateGraphVizDotFileFromInterClassDependencies(float sizeX, float sizeY, boolean includeExternalClasses)
Generate a .dot file which can be fed into GraphViz for layout and visualization of the class graph.T
get(java.lang.String name)
ClassInfoList
getAnnotations()
Filter thisClassInfoList
to include only annotations.ClassInfoList
getAssignableTo(ClassInfo assignableToClass)
Filter thisClassInfoList
to include only classes that are assignable to the requested class, assignableToClass (i.e.java.util.List<java.lang.String>
getAsStrings()
ClassInfoList
getEnums()
Filter thisClassInfoList
to include onlyEnum
classes.ClassInfoList
getImplementedInterfaces()
Filter thisClassInfoList
to include only implemented interfaces, i.e.ClassInfoList
getInterfaces()
Filter thisClassInfoList
to include only interfaces that are not annotations.ClassInfoList
getInterfacesAndAnnotations()
Filter thisClassInfoList
to include only interfaces and annotations (annotations are interfaces, and can be implemented).java.util.List<java.lang.String>
getNames()
ClassInfoList
getStandardClasses()
Filter thisClassInfoList
to include only standard classes (classes that are not interfaces or annotations).ClassInfoList
intersect(ClassInfoList... others)
Find the intersection of thisClassInfoList
with one or more others.java.util.List<java.lang.Class<?>>
loadClasses()
Convert this list ofClassInfo
objects to a list ofClass<?>
objects.java.util.List<java.lang.Class<?>>
loadClasses(boolean ignoreExceptions)
Convert this list ofClassInfo
objects to a list ofClass<?>
objects.<T> java.util.List<java.lang.Class<T>>
loadClasses(java.lang.Class<T> superclassOrInterfaceType)
Convert this list ofClassInfo
objects to a list ofClass<?>
objects, casting each item in the list to the requested superclass or interface type.<T> java.util.List<java.lang.Class<T>>
loadClasses(java.lang.Class<T> superclassOrInterfaceType, boolean ignoreExceptions)
Convert this list ofClassInfo
objects to a list ofClass<?>
objects, casting each item in the list to the requested superclass or interface type.java.lang.String
toString()
ClassInfoList
union(ClassInfoList... others)
Find the union of thisClassInfoList
with one or more others.-
Methods inherited from class java.util.ArrayList
add, add, addAll, addAll, clear, clone, contains, ensureCapacity, equals, forEach, get, hashCode, indexOf, isEmpty, iterator, lastIndexOf, listIterator, listIterator, remove, remove, removeAll, removeIf, removeRange, replaceAll, retainAll, set, size, sort, spliterator, subList, toArray, toArray, trimToSize
-
-
-
-
Method Detail
-
loadClasses
public <T> java.util.List<java.lang.Class<T>> loadClasses(java.lang.Class<T> superclassOrInterfaceType, boolean ignoreExceptions)
Convert this list ofClassInfo
objects to a list ofClass<?>
objects, casting each item in the list to the requested superclass or interface type. Causes the classloader to load the class named by eachClassInfo
object, if it is not already loaded.Important note: since
superclassOrInterfaceType
is a class reference for an already-loaded class, it is critical thatsuperclassOrInterfaceType
is loaded by the same classloader as the class referred to by thisClassInfo
object, otherwise the class cast will fail.- Type Parameters:
T
- The superclass or interface.- Parameters:
superclassOrInterfaceType
- The superclass or interface class reference to cast each loaded class to.ignoreExceptions
- If true, ignore any exceptions or errors thrown during classloading, or when attempting to cast the resultingClass<?>
reference to the requested type -- instead, skip the element (i.e. the returned list may contain fewer items than this input list). If false,IllegalArgumentException
is thrown if the class could not be loaded or could not be cast to the requested type.- Returns:
- The loaded
Class<?>
objects corresponding to eachClassInfo
object in this list. - Throws:
java.lang.IllegalArgumentException
- if ignoreExceptions is false and an exception or error was thrown while trying to load or cast any of the classes.
-
loadClasses
public <T> java.util.List<java.lang.Class<T>> loadClasses(java.lang.Class<T> superclassOrInterfaceType)
Convert this list ofClassInfo
objects to a list ofClass<?>
objects, casting each item in the list to the requested superclass or interface type. Causes the classloader to load the class named by eachClassInfo
object, if it is not already loaded.Important note: since
superclassOrInterfaceType
is a class reference for an already-loaded class, it is critical thatsuperclassOrInterfaceType
is loaded by the same classloader as the class referred to by thisClassInfo
object, otherwise the class cast will fail.- Type Parameters:
T
- The superclass or interface.- Parameters:
superclassOrInterfaceType
- The superclass or interface class reference to cast each loaded class to.- Returns:
- The loaded
Class<?>
objects corresponding to eachClassInfo
object in this list. - Throws:
java.lang.IllegalArgumentException
- if an exception or error was thrown while trying to load or cast any of the classes.
-
loadClasses
public java.util.List<java.lang.Class<?>> loadClasses(boolean ignoreExceptions)
Convert this list ofClassInfo
objects to a list ofClass<?>
objects. Causes the classloader to load the class named by eachClassInfo
object, if it is not already loaded.- Parameters:
ignoreExceptions
- If true, ignore any exceptions or errors thrown during classloading. If an exception or error is thrown during classloading, noClass<?>
reference is added to the output class for the correspondingClassInfo
object, so the returned list may contain fewer items than this input list. If false,IllegalArgumentException
is thrown if the class could not be loaded.- Returns:
- The loaded
Class<?>
objects corresponding to eachClassInfo
object in this list. - Throws:
java.lang.IllegalArgumentException
- if ignoreExceptions is false and an exception or error was thrown while trying to load any of the classes.
-
loadClasses
public java.util.List<java.lang.Class<?>> loadClasses()
Convert this list ofClassInfo
objects to a list ofClass<?>
objects. Causes the classloader to load the class named by eachClassInfo
object, if it is not already loaded.- Returns:
- The loaded
Class<?>
objects corresponding to eachClassInfo
object in this list. - Throws:
java.lang.IllegalArgumentException
- if an exception or error was thrown while trying to load any of the classes.
-
directOnly
public ClassInfoList directOnly()
Get the list of classes that were directly related, as opposed to reachable through multiple steps. For example, if thisClassInfoList
was produced by querying for all superclasses of a given class, thendirectOnly()
will return only the direct superclass of this class.- Returns:
- The list of directly-related classes.
-
union
public ClassInfoList union(ClassInfoList... others)
Find the union of thisClassInfoList
with one or more others.- Parameters:
others
- The otherClassInfoList
s to union with this one.- Returns:
- The union of this
ClassInfoList
with the others.
-
intersect
public ClassInfoList intersect(ClassInfoList... others)
Find the intersection of thisClassInfoList
with one or more others.- Parameters:
others
- The otherClassInfoList
s to intersect with this one.- Returns:
- The intersection of this
ClassInfoList
with the others.
-
exclude
public ClassInfoList exclude(ClassInfoList other)
Find the set difference between thisClassInfoList
and anotherClassInfoList
, i.e. (this \ other).- Parameters:
other
- The otherClassInfoList
to subtract from this one.- Returns:
- The set difference of this
ClassInfoList
and other, i.e. (this \ other).
-
filter
public ClassInfoList filter(ClassInfoList.ClassInfoFilter filter)
Find the subset of thisClassInfoList
for which the given filter predicate is true.- Parameters:
filter
- TheClassInfoList.ClassInfoFilter
to apply.- Returns:
- The subset of this
ClassInfoList
for which the given filter predicate is true.
-
getStandardClasses
public ClassInfoList getStandardClasses()
Filter thisClassInfoList
to include only standard classes (classes that are not interfaces or annotations).- Returns:
- The filtered list, containing only standard classes.
-
getInterfaces
public ClassInfoList getInterfaces()
Filter thisClassInfoList
to include only interfaces that are not annotations. See alsogetInterfacesAndAnnotations()
.- Returns:
- The filtered list, containing only interfaces.
-
getInterfacesAndAnnotations
public ClassInfoList getInterfacesAndAnnotations()
Filter thisClassInfoList
to include only interfaces and annotations (annotations are interfaces, and can be implemented). See alsogetInterfaces()
.- Returns:
- The filtered list, containing only interfaces.
-
getImplementedInterfaces
public ClassInfoList getImplementedInterfaces()
Filter thisClassInfoList
to include only implemented interfaces, i.e. non-annotation interfaces, or annotations that have been implemented by a class.- Returns:
- The filtered list, containing only implemented interfaces.
-
getAnnotations
public ClassInfoList getAnnotations()
Filter thisClassInfoList
to include only annotations.- Returns:
- The filtered list, containing only annotations.
-
getEnums
public ClassInfoList getEnums()
Filter thisClassInfoList
to include onlyEnum
classes.- Returns:
- The filtered list, containing only enums.
-
getAssignableTo
public ClassInfoList getAssignableTo(ClassInfo assignableToClass)
Filter thisClassInfoList
to include only classes that are assignable to the requested class, assignableToClass (i.e. where assignableToClass is a superclass or implemented interface of the list element).- Parameters:
assignableToClass
- the superclass or interface to filter for.- Returns:
- The filtered list, containing only classes for which
assignableToClassRef.isAssignableFrom(listItemClassRef)
is true for the correspondingClass<?>
references for assignableToClass and the list items. Returns the empty list if no classes were assignable to the requested class. - Throws:
java.lang.IllegalArgumentException
- if classInfo is null.
-
generateGraphVizDotFileFromInterClassDependencies
public java.lang.String generateGraphVizDotFileFromInterClassDependencies(float sizeX, float sizeY, boolean includeExternalClasses)
Generate a .dot file which can be fed into GraphViz for layout and visualization of the class graph. The returned graph shows inter-class dependencies only. The sizeX and sizeY parameters are the image output size to use (in inches) when GraphViz is asked to render the .dot file. You must have calledClassGraph.enableInterClassDependencies()
before scanning to use this method.- Parameters:
sizeX
- The GraphViz layout width in inches.sizeY
- The GraphViz layout width in inches.includeExternalClasses
- If true, and ifClassGraph.enableExternalClasses()
was called before scanning, show "external classes" (non-whitelisted classes) within the dependency graph.- Returns:
- the GraphViz file contents.
- Throws:
java.lang.IllegalArgumentException
- if thisClassInfoList
is empty orClassGraph.enableInterClassDependencies()
was not called before scanning (since there would be nothing to graph).
-
generateGraphVizDotFileFromClassDependencies
public java.lang.String generateGraphVizDotFileFromClassDependencies()
Generate a .dot file which can be fed into GraphViz for layout and visualization of the class graph. The returned graph shows inter-class dependencies only. The sizeX and sizeY parameters are the image output size to use (in inches) when GraphViz is asked to render the .dot file. You must have calledClassGraph.enableInterClassDependencies()
before scanning to use this method.Equivalent to calling
generateGraphVizDotFileFromInterClassDependencies(float, float, boolean)
with parameters of (10.5f, 8f, scanSpec.enableExternalClasses), where scanSpec.enableExternalClasses is true ifClassGraph.enableExternalClasses()
was called before scanning.- Returns:
- the GraphViz file contents.
- Throws:
java.lang.IllegalArgumentException
- if thisClassInfoList
is empty orClassGraph.enableInterClassDependencies()
was not called before scanning (since there would be nothing to graph).
-
generateGraphVizDotFile
public java.lang.String generateGraphVizDotFile(float sizeX, float sizeY, boolean showFields, boolean showFieldTypeDependencyEdges, boolean showMethods, boolean showMethodTypeDependencyEdges, boolean showAnnotations)
Generate a .dot file which can be fed into GraphViz for layout and visualization of the class graph. The sizeX and sizeY parameters are the image output size to use (in inches) when GraphViz is asked to render the .dot file.To show non-public classes, call
ClassGraph.ignoreClassVisibility()
before scanning.To show fields, call
ClassGraph.enableFieldInfo()
before scanning. To show non-public fields, also callClassGraph.ignoreFieldVisibility()
before scanning.To show methods, call
ClassGraph.enableMethodInfo()
before scanning. To show non-public methods, also callClassGraph.ignoreMethodVisibility()
before scanning.To show annotations, call
ClassGraph.enableAnnotationInfo()
before scanning. To show non-public annotations, also callClassGraph.ignoreFieldVisibility()
before scanning (there is no separate visibility modifier for annotations).- Parameters:
sizeX
- The GraphViz layout width in inches.sizeY
- The GraphViz layout width in inches.showFields
- If true, show fields within class nodes in the graph.showFieldTypeDependencyEdges
- If true, show edges between classes and the types of their fields.showMethods
- If true, show methods within class nodes in the graph.showMethodTypeDependencyEdges
- If true, show edges between classes and the return types and/or parameter types of their methods.showAnnotations
- If true, show annotations in the graph.- Returns:
- the GraphViz file contents.
- Throws:
java.lang.IllegalArgumentException
- if thisClassInfoList
is empty orClassGraph.enableClassInfo()
was not called before scanning (since there would be nothing to graph).
-
generateGraphVizDotFile
public java.lang.String generateGraphVizDotFile(float sizeX, float sizeY)
Generate a .dot file which can be fed into GraphViz for layout and visualization of the class graph.Methods, fields and annotations are shown if enabled, via
ClassGraph.enableMethodInfo()
,ClassGraph.enableFieldInfo()
andClassGraph.enableAnnotationInfo()
.Only public classes, methods, and fields are shown, unless
ClassGraph.ignoreClassVisibility()
,ClassGraph.ignoreMethodVisibility()
, and/orClassGraph.ignoreFieldVisibility()
has/have been called.- Parameters:
sizeX
- The GraphViz layout width in inches.sizeY
- The GraphViz layout width in inches.- Returns:
- the GraphViz file contents.
- Throws:
java.lang.IllegalArgumentException
- if thisClassInfoList
is empty orClassGraph.enableClassInfo()
was not called before scanning (since there would be nothing to graph).
-
generateGraphVizDotFile
public java.lang.String generateGraphVizDotFile()
Generate a .dot file which can be fed into GraphViz for layout and visualization of the class graph.Methods, fields and annotations are shown if enabled, via
ClassGraph.enableMethodInfo()
,ClassGraph.enableFieldInfo()
andClassGraph.enableAnnotationInfo()
.Only public classes, methods, and fields are shown, unless
ClassGraph.ignoreClassVisibility()
,ClassGraph.ignoreMethodVisibility()
, and/orClassGraph.ignoreFieldVisibility()
has/have been called.- Returns:
- the GraphViz file contents.
- Throws:
java.lang.IllegalArgumentException
- if thisClassInfoList
is empty orClassGraph.enableClassInfo()
was not called before scanning (since there would be nothing to graph).
-
generateGraphVizDotFile
public void generateGraphVizDotFile(java.io.File file) throws java.io.IOException
Generate a and save a .dot file, which can be fed into GraphViz for layout and visualization of the class graph.Methods, fields and annotations are shown if enabled, via
ClassGraph.enableMethodInfo()
,ClassGraph.enableFieldInfo()
andClassGraph.enableAnnotationInfo()
.Only public classes, methods, and fields are shown, unless
ClassGraph.ignoreClassVisibility()
,ClassGraph.ignoreMethodVisibility()
, and/orClassGraph.ignoreFieldVisibility()
has/have been called.- Parameters:
file
- the file to save the GraphViz .dot file to.- Throws:
java.lang.IllegalArgumentException
- if thisClassInfoList
is empty orClassGraph.enableClassInfo()
was not called before scanning (since there would be nothing to graph).java.io.IOException
- if the file could not be saved.
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.util.AbstractCollection<ClassInfo>
-
asMap
public java.util.Map<java.lang.String,T> asMap()
- Returns:
- An index for this list, as a map from the name of each list item (obtained by calling
getName
on the list item) to the list item.
-
containsName
public boolean containsName(java.lang.String name)
- Parameters:
name
- The name to search for.- Returns:
- true if this list contains an item with the given name.
-
get
public T get(java.lang.String name)
- Parameters:
name
- The name to search for.- Returns:
- The list item with the given name, or null if not found.
-
getNames
public java.util.List<java.lang.String> getNames()
- Returns:
- The names of all packages in this list, by calling
PackageInfo.getName()
for each item in the list.
-
getAsStrings
public java.util.List<java.lang.String> getAsStrings()
- Returns:
- The string representations of all items in this list, obtained by calling
toString()
on each item in the list.
-
-