Class 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 of ClassInfo 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
    • Field Summary

      • Fields inherited from class java.util.AbstractList

        modCount
    • 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 this ClassInfoList and another ClassInfoList, i.e.
      ClassInfoList filter​(ClassInfoList.ClassInfoFilter filter)
      Find the subset of this ClassInfoList 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 this ClassInfoList to include only annotations.
      ClassInfoList getAssignableTo​(ClassInfo assignableToClass)
      Filter this ClassInfoList to include only classes that are assignable to the requested class, assignableToClass (i.e.
      java.util.List<java.lang.String> getAsStrings()  
      ClassInfoList getEnums()
      Filter this ClassInfoList to include only Enum classes.
      ClassInfoList getImplementedInterfaces()
      Filter this ClassInfoList to include only implemented interfaces, i.e.
      ClassInfoList getInterfaces()
      Filter this ClassInfoList to include only interfaces that are not annotations.
      ClassInfoList getInterfacesAndAnnotations()
      Filter this ClassInfoList to include only interfaces and annotations (annotations are interfaces, and can be implemented).
      java.util.List<java.lang.String> getNames()  
      ClassInfoList getStandardClasses()
      Filter this ClassInfoList to include only standard classes (classes that are not interfaces or annotations).
      ClassInfoList intersect​(ClassInfoList... others)
      Find the intersection of this ClassInfoList with one or more others.
      java.util.List<java.lang.Class<?>> loadClasses()
      Convert this list of ClassInfo objects to a list of Class<?> objects.
      java.util.List<java.lang.Class<?>> loadClasses​(boolean ignoreExceptions)
      Convert this list of ClassInfo objects to a list of Class<?> objects.
      <T> java.util.List<java.lang.Class<T>> loadClasses​(java.lang.Class<T> superclassOrInterfaceType)
      Convert this list of ClassInfo objects to a list of Class<?> 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 of ClassInfo objects to a list of Class<?> 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 this ClassInfoList 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
      • Methods inherited from class java.util.AbstractCollection

        containsAll
      • Methods inherited from class java.lang.Object

        finalize, getClass, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.util.Collection

        parallelStream, stream, toArray
      • Methods inherited from interface java.util.List

        containsAll
    • Method Detail

      • loadClasses

        public <T> java.util.List<java.lang.Class<T>> loadClasses​(java.lang.Class<T> superclassOrInterfaceType,
                                                                  boolean ignoreExceptions)
        Convert this list of ClassInfo objects to a list of Class<?> objects, casting each item in the list to the requested superclass or interface type. Causes the classloader to load the class named by each ClassInfo object, if it is not already loaded.

        Important note: since superclassOrInterfaceType is a class reference for an already-loaded class, it is critical that superclassOrInterfaceType is loaded by the same classloader as the class referred to by this ClassInfo 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 resulting Class<?> 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 each ClassInfo 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 of ClassInfo objects to a list of Class<?> objects, casting each item in the list to the requested superclass or interface type. Causes the classloader to load the class named by each ClassInfo object, if it is not already loaded.

        Important note: since superclassOrInterfaceType is a class reference for an already-loaded class, it is critical that superclassOrInterfaceType is loaded by the same classloader as the class referred to by this ClassInfo 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 each ClassInfo 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 of ClassInfo objects to a list of Class<?> objects. Causes the classloader to load the class named by each ClassInfo 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, no Class<?> reference is added to the output class for the corresponding ClassInfo 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 each ClassInfo 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 of ClassInfo objects to a list of Class<?> objects. Causes the classloader to load the class named by each ClassInfo object, if it is not already loaded.
        Returns:
        The loaded Class<?> objects corresponding to each ClassInfo 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 this ClassInfoList was produced by querying for all superclasses of a given class, then directOnly() will return only the direct superclass of this class.
        Returns:
        The list of directly-related classes.
      • getStandardClasses

        public ClassInfoList getStandardClasses()
        Filter this ClassInfoList to include only standard classes (classes that are not interfaces or annotations).
        Returns:
        The filtered list, containing only standard classes.
      • getInterfacesAndAnnotations

        public ClassInfoList getInterfacesAndAnnotations()
        Filter this ClassInfoList to include only interfaces and annotations (annotations are interfaces, and can be implemented). See also getInterfaces().
        Returns:
        The filtered list, containing only interfaces.
      • getImplementedInterfaces

        public ClassInfoList getImplementedInterfaces()
        Filter this ClassInfoList 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 this ClassInfoList to include only annotations.
        Returns:
        The filtered list, containing only annotations.
      • getEnums

        public ClassInfoList getEnums()
        Filter this ClassInfoList to include only Enum classes.
        Returns:
        The filtered list, containing only enums.
      • getAssignableTo

        public ClassInfoList getAssignableTo​(ClassInfo assignableToClass)
        Filter this ClassInfoList 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 corresponding Class<?> 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 called ClassGraph.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 if ClassGraph.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 this ClassInfoList is empty or ClassGraph.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 call ClassGraph.ignoreFieldVisibility() before scanning.

        To show methods, call ClassGraph.enableMethodInfo() before scanning. To show non-public methods, also call ClassGraph.ignoreMethodVisibility() before scanning.

        To show annotations, call ClassGraph.enableAnnotationInfo() before scanning. To show non-public annotations, also call ClassGraph.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 this ClassInfoList is empty or ClassGraph.enableClassInfo() was not called before scanning (since there would be nothing to graph).
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.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.