Class ClassInfo

java.lang.Object
io.github.classgraph.ClassInfo
All Implemented Interfaces:
HasName, Comparable<ClassInfo>
Direct Known Subclasses:
ArrayClassInfo

public class ClassInfo extends Object implements Comparable<ClassInfo>, HasName
Holds metadata about a class encountered during a scan.
  • Field Details

    • name

      protected String name
      The name of the class.
    • typeSignatureStr

      protected String typeSignatureStr
      The class type signature string.
    • isExternalClass

      protected boolean isExternalClass
      If true, this class is only being referenced by another class' classfile as a superclass / implemented interface / annotation, but this class is not itself an accepted (non-rejected) class, or in a accepted (non-rejected) package. If false, this classfile was matched during scanning (i.e. its classfile contents read), i.e. this class is a accepted (and non-rejected) class in an accepted (and non-rejected) package.
    • isScannedClass

      protected boolean isScannedClass
      Set to true when the class is actually scanned (as opposed to just referenced as a superclass, interface or annotation of a scanned class).
    • classfileResource

      protected transient Resource classfileResource
      The Resource for the classfile of this class.
    • scanResult

      protected transient ScanResult scanResult
      The scan result.
    • classRef

      protected transient Class<?> classRef
      The class ref, once the class is loaded.
  • Constructor Details

    • ClassInfo

      protected ClassInfo(String name, int classModifiers, Resource classfileResource)
      Constructor.
      Parameters:
      name - the name
      classModifiers - the class modifiers
      classfileResource - the classfile resource
  • Method Details

    • getName

      public String getName()
      Get the name of the class.
      Specified by:
      getName in interface HasName
      Returns:
      The name of the class.
    • getSimpleName

      public String getSimpleName()
      Get the simple name of the class. Returns everything after the last '.' in the class name, or the whole string if the class is in the root package. (Note that this is not the same as the result of Class.getSimpleName(), which returns "" for anonymous classes.)
      Returns:
      The simple name of the class.
    • getModuleInfo

      public ModuleInfo getModuleInfo()
      Get the ModuleInfo object for the class.
      Returns:
      the ModuleInfo object for the class, or null if the class is not part of a named module.
    • getPackageInfo

      public PackageInfo getPackageInfo()
      Get the PackageInfo object for the class.
      Returns:
      the PackageInfo object for the package that contains the class.
    • getPackageName

      public String getPackageName()
      Get the name of the class' package.
      Returns:
      The name of the class' package.
    • isExternalClass

      public boolean isExternalClass()
      Checks if this is an external class.
      Returns:
      true if this class is an external class, i.e. was referenced by an accepted class as a superclass, interface, or annotation, but is not itself an accepted class.
    • getClassfileMinorVersion

      public int getClassfileMinorVersion()
      Get the minor version of the classfile format for this class' classfile.
      Returns:
      The minor version of the classfile format for this class' classfile, or 0 if this ClassInfo object is a placeholder for a referenced class that was not found or not accepted during the scan.
    • getClassfileMajorVersion

      public int getClassfileMajorVersion()
      Get the major version of the classfile format for this class' classfile.
      Returns:
      The major version of the classfile format for this class' classfile, or 0 if this ClassInfo object is a placeholder for a referenced class that was not found or not accepted during the scan.
    • getModifiers

      public int getModifiers()
      Get the class modifier bits.
      Returns:
      The class modifier bits, e.g. Modifier.PUBLIC.
    • getModifiersStr

      public String getModifiersStr()
      Get the class modifiers as a String.
      Returns:
      The field modifiers as a string, e.g. "public static final". For the modifier bits, call getModifiers().
    • isPublic

      public boolean isPublic()
      Checks if the class is public.
      Returns:
      true if this class is a public class.
    • isPrivate

      public boolean isPrivate()
      Checks if the class is private.
      Returns:
      true if this class is a private class.
    • isProtected

      public boolean isProtected()
      Checks if the class is protected.
      Returns:
      true if this class is a protected class.
    • isPackageVisible

      public boolean isPackageVisible()
      Checks if the class has default (package) visibility.
      Returns:
      true if this class is only visible within its package.
    • isAbstract

      public boolean isAbstract()
      Checks if the class is abstract.
      Returns:
      true if this class is an abstract class.
    • isSynthetic

      public boolean isSynthetic()
      Checks if the class is synthetic.
      Returns:
      true if this class is a synthetic class.
    • isFinal

      public boolean isFinal()
      Checks if the class is final.
      Returns:
      true if this class is a final class.
    • isStatic

      public boolean isStatic()
      Checks if the class is static.
      Returns:
      true if this class is static.
    • isAnnotation

      public boolean isAnnotation()
      Checks if the class is an annotation.
      Returns:
      true if this class is an annotation class.
    • isInterface

      public boolean isInterface()
      Checks if is the class an interface and is not an annotation.
      Returns:
      true if this class is an interface and is not an annotation (annotations are interfaces, and can be implemented).
    • isInterfaceOrAnnotation

      public boolean isInterfaceOrAnnotation()
      Checks if is an interface or an annotation.
      Returns:
      true if this class is an interface or an annotation (annotations are interfaces, and can be implemented).
    • isEnum

      public boolean isEnum()
      Checks if is the class is an Enum.
      Returns:
      true if this class is an Enum.
    • isRecord

      public boolean isRecord()
      Checks if is the class is a record (JDK 14+).
      Returns:
      true if this class is a record.
    • isStandardClass

      public boolean isStandardClass()
      Checks if this class is a standard class.
      Returns:
      true if this class is a standard class (i.e. is not an annotation or interface).
    • isArrayClass

      public boolean isArrayClass()
      Checks if this class is an array class. Returns false unless this ClassInfo is an instance of ArrayClassInfo.
      Returns:
      true if this is an array class.
    • extendsSuperclass

      public boolean extendsSuperclass(Class<?> superclass)
      Checks if this class extends the superclass.
      Parameters:
      superclass - A superclass.
      Returns:
      true if this class extends the superclass.
    • extendsSuperclass

      public boolean extendsSuperclass(String superclassName)
      Checks if this class extends the named superclass.
      Parameters:
      superclassName - The name of a superclass.
      Returns:
      true if this class extends the named superclass.
    • isInnerClass

      public boolean isInnerClass()
      Checks if this class is an inner class.
      Returns:
      true if this is an inner class (call isAnonymousInnerClass() to test if this is an anonymous inner class). If true, the containing class can be determined by calling getOuterClasses().
    • isOuterClass

      public boolean isOuterClass()
      Checks if this class is an outer class.
      Returns:
      true if this class contains inner classes. If true, the inner classes can be determined by calling getInnerClasses().
    • isAnonymousInnerClass

      public boolean isAnonymousInnerClass()
      Checks if this class is an anonymous inner class.
      Returns:
      true if this is an anonymous inner class. If true, the name of the containing method can be obtained by calling getFullyQualifiedDefiningMethodName().
    • isImplementedInterface

      public boolean isImplementedInterface()
      Checks whether this class is an implemented interface (meaning a standard, non-annotation interface, or an annotation that has also been implemented as an interface by some class).

      Annotations are interfaces, but you can also implement an annotation, so to we return whether an interface (even an annotation) is implemented by a class or extended by a subinterface, or (failing that) if it is not an interface but not an annotation.

      Returns:
      true if this class is an implemented interface.
    • implementsInterface

      public boolean implementsInterface(Class<?> interfaceClazz)
      Checks whether this class implements the interface.
      Parameters:
      interfaceClazz - An interface.
      Returns:
      true if this class implements the interface.
    • implementsInterface

      public boolean implementsInterface(String interfaceName)
      Checks whether this class implements the named interface.
      Parameters:
      interfaceName - The name of an interface.
      Returns:
      true if this class implements the named interface.
    • hasAnnotation

      public boolean hasAnnotation(Class<? extends Annotation> annotation)
      Checks whether this class has the annotation.
      Parameters:
      annotation - An annotation.
      Returns:
      true if this class has the annotation.
    • hasAnnotation

      public boolean hasAnnotation(String annotationName)
      Checks whether this class has the named annotation.
      Parameters:
      annotationName - The name of an annotation.
      Returns:
      true if this class has the named annotation.
    • hasDeclaredField

      public boolean hasDeclaredField(String fieldName)
      Checks whether this class has the named declared field.
      Parameters:
      fieldName - The name of a field.
      Returns:
      true if this class declares a field of the given name.
    • hasField

      public boolean hasField(String fieldName)
      Checks whether this class or one of its superclasses has the named field.
      Parameters:
      fieldName - The name of a field.
      Returns:
      true if this class or one of its superclasses declares a field of the given name.
    • hasDeclaredFieldAnnotation

      public boolean hasDeclaredFieldAnnotation(Class<? extends Annotation> annotation)
      Checks whether this class declares a field with the annotation.
      Parameters:
      annotation - A field annotation.
      Returns:
      true if this class declares a field with the annotation.
    • hasDeclaredFieldAnnotation

      public boolean hasDeclaredFieldAnnotation(String fieldAnnotationName)
      Checks whether this class declares a field with the named annotation.
      Parameters:
      fieldAnnotationName - The name of a field annotation.
      Returns:
      true if this class declares a field with the named annotation.
    • hasFieldAnnotation

      public boolean hasFieldAnnotation(Class<? extends Annotation> fieldAnnotation)
      Checks whether this class or one of its superclasses declares a field with the annotation.
      Parameters:
      fieldAnnotation - A field annotation.
      Returns:
      true if this class or one of its superclasses declares a field with the annotation.
    • hasFieldAnnotation

      public boolean hasFieldAnnotation(String fieldAnnotationName)
      Checks whether this class or one of its superclasses declares a field with the named annotation.
      Parameters:
      fieldAnnotationName - The name of a field annotation.
      Returns:
      true if this class or one of its superclasses declares a field with the named annotation.
    • hasDeclaredMethod

      public boolean hasDeclaredMethod(String methodName)
      Checks whether this class declares a method of the given name.
      Parameters:
      methodName - The name of a method.
      Returns:
      true if this class declares a method of the given name.
    • hasMethod

      public boolean hasMethod(String methodName)
      Checks whether this class or one of its superclasses or interfaces declares a method of the given name.
      Parameters:
      methodName - The name of a method.
      Returns:
      true if this class or one of its superclasses or interfaces declares a method of the given name.
    • hasDeclaredMethodAnnotation

      public boolean hasDeclaredMethodAnnotation(Class<? extends Annotation> methodAnnotation)
      Checks whether this class declares a method with the annotation.
      Parameters:
      methodAnnotation - A method annotation.
      Returns:
      true if this class declares a method with the annotation.
    • hasDeclaredMethodAnnotation

      public boolean hasDeclaredMethodAnnotation(String methodAnnotationName)
      Checks whether this class declares a method with the named annotation.
      Parameters:
      methodAnnotationName - The name of a method annotation.
      Returns:
      true if this class declares a method with the named annotation.
    • hasMethodAnnotation

      public boolean hasMethodAnnotation(Class<? extends Annotation> methodAnnotation)
      Checks whether this class or one of its superclasses or interfaces declares a method with the annotation.
      Parameters:
      methodAnnotation - A method annotation.
      Returns:
      true if this class or one of its superclasses or interfaces declares a method with the annotation.
    • hasMethodAnnotation

      public boolean hasMethodAnnotation(String methodAnnotationName)
      Checks whether this class or one of its superclasses or interfaces declares a method with the named annotation.
      Parameters:
      methodAnnotationName - The name of a method annotation.
      Returns:
      true if this class or one of its superclasses or interfaces declares a method with the named annotation.
    • hasDeclaredMethodParameterAnnotation

      public boolean hasDeclaredMethodParameterAnnotation(Class<? extends Annotation> methodParameterAnnotation)
      Checks whether this class declares a method with the annotation.
      Parameters:
      methodParameterAnnotation - A method annotation.
      Returns:
      true if this class declares a method with the annotation.
    • hasDeclaredMethodParameterAnnotation

      public boolean hasDeclaredMethodParameterAnnotation(String methodParameterAnnotationName)
      Checks whether this class declares a method with the named annotation.
      Parameters:
      methodParameterAnnotationName - The name of a method annotation.
      Returns:
      true if this class declares a method with the named annotation.
    • hasMethodParameterAnnotation

      public boolean hasMethodParameterAnnotation(Class<? extends Annotation> methodParameterAnnotation)
      Checks whether this class or one of its superclasses or interfaces has a method with the annotation.
      Parameters:
      methodParameterAnnotation - A method annotation.
      Returns:
      true if this class or one of its superclasses or interfaces has a method with the annotation.
    • hasMethodParameterAnnotation

      public boolean hasMethodParameterAnnotation(String methodParameterAnnotationName)
      Checks whether this class or one of its superclasses or interfaces has a method with the named annotation.
      Parameters:
      methodParameterAnnotationName - The name of a method annotation.
      Returns:
      true if this class or one of its superclasses or interfaces has a method with the named annotation.
    • getSubclasses

      public ClassInfoList getSubclasses()
      Get the subclasses of this class, sorted in order of name. Call ClassInfoList.directOnly() to get direct subclasses. If this class represents Object, then returns only standard classes, not interfaces, since interfaces don't extend Object.
      Returns:
      the list of subclasses of this class, or the empty list if none.
    • getSuperclasses

      public ClassInfoList getSuperclasses()
      Get all superclasses of this class, in ascending order in the class hierarchy, not including Object for simplicity, since that is the superclass of all classes. Also does not include superinterfaces, if this is an interface (use getInterfaces() to get superinterfaces of an interface.}
      Returns:
      the list of all superclasses of this class, or the empty list if none.
    • getSuperclass

      public ClassInfo getSuperclass()
      Get the single direct superclass of this class, or null if none. Does not return the superinterfaces, if this is an interface (use getInterfaces() to get superinterfaces of an interface.}
      Returns:
      the superclass of this class, or null if none.
    • getOuterClasses

      public ClassInfoList getOuterClasses()
      Get the containing outer classes, if this is an inner class.
      Returns:
      A list of the containing outer classes, if this is an inner class, otherwise the empty list. Note that all containing outer classes are returned, not just the innermost of the containing outer classes.
    • getInnerClasses

      public ClassInfoList getInnerClasses()
      Get the inner classes contained within this class, if this is an outer class.
      Returns:
      A list of the inner classes contained within this class, or the empty list if none.
    • getFullyQualifiedDefiningMethodName

      public String getFullyQualifiedDefiningMethodName()
      Gets fully-qualified method name (i.e. fully qualified classname, followed by dot, followed by method name) for the defining method, if this is an anonymous inner class.
      Returns:
      The fully-qualified method name (i.e. fully qualified classname, followed by dot, followed by method name) for the defining method, if this is an anonymous inner class, or null if not.
    • getInterfaces

      public ClassInfoList getInterfaces()
      Get the interfaces implemented by this 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.
      Returns:
      The list of interfaces implemented by this 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. Returns the empty list if none.
    • getClassesImplementing

      public ClassInfoList getClassesImplementing()
      Get the classes (and their subclasses) that implement this interface, if this is an interface.
      Returns:
      the list of the classes (and their subclasses) that implement this interface, if this is an interface, otherwise returns the empty list.
    • getAnnotations

      public ClassInfoList getAnnotations()
      Get the annotations and meta-annotations on this class. (Call getAnnotationInfo() instead, if you need the parameter values of annotations, rather than just the annotation classes.)

      Also handles the Inherited meta-annotation, which causes an annotation to annotate a class and all of its subclasses.

      Filters out meta-annotations in the java.lang.annotation package.

      Returns:
      the list of annotations and meta-annotations on this class.
    • getAnnotationInfo

      public AnnotationInfoList getAnnotationInfo()
      Get a list of the annotations on this class, or the empty list if none.

      Also handles the Inherited meta-annotation, which causes an annotation to annotate a class and all of its subclasses.

      Returns:
      A list of AnnotationInfo objects for the annotations on this class, or the empty list if none.
    • getAnnotationInfo

      public AnnotationInfo getAnnotationInfo(Class<? extends Annotation> annotation)
      Get a the non-Repeatable annotation on this class, or null if the class does not have the annotation. (Use getAnnotationInfoRepeatable(String) for Repeatable annotations.)

      Also handles the Inherited meta-annotation, which causes an annotation to annotate a class and all of its subclasses.

      Note that if you need to get multiple annotations, it is faster to call getAnnotationInfo(), and then get the annotations from the returned AnnotationInfoList, so that the returned list doesn't have to be built multiple times.

      Parameters:
      annotation - The annotation.
      Returns:
      An AnnotationInfo object representing the annotation on this class, or null if the class does not have the annotation.
    • getAnnotationInfo

      public AnnotationInfo getAnnotationInfo(String annotationName)
      Get a the named non-Repeatable annotation on this class, or null if the class does not have the named annotation. (Use getAnnotationInfoRepeatable(String) for Repeatable annotations.)

      Also handles the Inherited meta-annotation, which causes an annotation to annotate a class and all of its subclasses.

      Note that if you need to get multiple named annotations, it is faster to call getAnnotationInfo(), and then get the named annotations from the returned AnnotationInfoList, so that the returned list doesn't have to be built multiple times.

      Parameters:
      annotationName - The annotation name.
      Returns:
      An AnnotationInfo object representing the named annotation on this class, or null if the class does not have the named annotation.
    • getAnnotationInfoRepeatable

      public AnnotationInfoList getAnnotationInfoRepeatable(Class<? extends Annotation> annotation)
      Get a the Repeatable annotation on this class, or the empty list if the class does not have the annotation.

      Also handles the Inherited meta-annotation, which causes an annotation to annotate a class and all of its subclasses.

      Note that if you need to get multiple annotations, it is faster to call getAnnotationInfo(), and then get the annotations from the returned AnnotationInfoList, so that the returned list doesn't have to be built multiple times.

      Parameters:
      annotation - The annotation.
      Returns:
      An AnnotationInfoList of all instances of the annotation on this class, or the empty list if the class does not have the annotation.
    • getAnnotationInfoRepeatable

      public AnnotationInfoList getAnnotationInfoRepeatable(String annotationName)
      Get a the named Repeatable annotation on this class, or the empty list if the class does not have the named annotation.

      Also handles the Inherited meta-annotation, which causes an annotation to annotate a class and all of its subclasses.

      Note that if you need to get multiple named annotations, it is faster to call getAnnotationInfo(), and then get the named annotations from the returned AnnotationInfoList, so that the returned list doesn't have to be built multiple times.

      Parameters:
      annotationName - The annotation name.
      Returns:
      An AnnotationInfoList of all instances of the named annotation on this class, or the empty list if the class does not have the named annotation.
    • getAnnotationDefaultParameterValues

      public AnnotationParameterValueList getAnnotationDefaultParameterValues()
      Get the default parameter values for this annotation, if this is an annotation class.
      Returns:
      A list of AnnotationParameterValue objects for each of the default parameter values for this annotation, if this is an annotation class with default parameter values, otherwise the empty list.
    • getClassesWithAnnotation

      public ClassInfoList getClassesWithAnnotation()
      Get the classes that have this class as an annotation.
      Returns:
      A list of standard classes and non-annotation interfaces that are annotated by this class, if this is an annotation class, or the empty list if none. Also handles the Inherited meta-annotation, which causes an annotation on a class to be inherited by all of its subclasses.
    • getDeclaredMethodInfo

      public MethodInfoList getDeclaredMethodInfo()
      Returns information on visible methods declared by this class, but not by its interfaces or superclasses, that are not constructors. See also:

      There may be more than one method of a given name with different type signatures, due to overloading.

      Requires that ClassGraph.enableMethodInfo() be called before scanning, otherwise throws IllegalArgumentException.

      By default only returns information for public methods, unless ClassGraph.ignoreMethodVisibility() was called before the scan.

      Returns:
      the list of MethodInfo objects for visible methods declared by this class, or the empty list if no methods were found.
      Throws:
      IllegalArgumentException - if ClassGraph.enableMethodInfo() was not called prior to initiating the scan.
    • getMethodInfo

      public MethodInfoList getMethodInfo()
      Returns information on visible methods declared by this class, or by its interfaces or superclasses, that are not constructors. See also:

      There may be more than one method of a given name with different type signatures, due to overloading.

      Requires that ClassGraph.enableMethodInfo() be called before scanning, otherwise throws IllegalArgumentException.

      By default only returns information for public methods, unless ClassGraph.ignoreMethodVisibility() was called before the scan.

      Returns:
      the list of MethodInfo objects for visible methods of this class, its interfaces and superclasses, or the empty list if no methods were found.
      Throws:
      IllegalArgumentException - if ClassGraph.enableMethodInfo() was not called prior to initiating the scan.
    • getDeclaredConstructorInfo

      public MethodInfoList getDeclaredConstructorInfo()
      Returns information on visible constructors declared by this class, but not by its interfaces or superclasses. Constructors have the method name of "<init>". See also:

      There may be more than one constructor of a given name with different type signatures, due to overloading.

      Requires that ClassGraph.enableMethodInfo() be called before scanning, otherwise throws IllegalArgumentException.

      By default only returns information for public constructors, unless ClassGraph.ignoreMethodVisibility() was called before the scan.

      Returns:
      the list of MethodInfo objects for visible constructors declared by this class, or the empty list if no constructors were found or visible.
      Throws:
      IllegalArgumentException - if ClassGraph.enableMethodInfo() was not called prior to initiating the scan.
    • getConstructorInfo

      public MethodInfoList getConstructorInfo()
      Returns information on visible constructors declared by this class, or by its interfaces or superclasses. Constructors have the method name of "<init>". See also:

      There may be more than one method of a given name with different type signatures, due to overloading.

      Requires that ClassGraph.enableMethodInfo() be called before scanning, otherwise throws IllegalArgumentException.

      By default only returns information for public methods, unless ClassGraph.ignoreMethodVisibility() was called before the scan.

      Returns:
      the list of MethodInfo objects for visible constructors of this class and its superclasses, or the empty list if no methods were found.
      Throws:
      IllegalArgumentException - if ClassGraph.enableMethodInfo() was not called prior to initiating the scan.
    • getDeclaredMethodAndConstructorInfo

      public MethodInfoList getDeclaredMethodAndConstructorInfo()
      Returns information on visible methods and constructors declared by this class, but not by its interfaces or superclasses. Constructors have the method name of "<init>" and static initializer blocks have the name of "<clinit>". See also:

      There may be more than one method or constructor or method of a given name with different type signatures, due to overloading.

      Requires that ClassGraph.enableMethodInfo() be called before scanning, otherwise throws IllegalArgumentException.

      By default only returns information for public methods and constructors, unless ClassGraph.ignoreMethodVisibility() was called before the scan. If method visibility is ignored, the result may include a reference to a private static class initializer block, with a method name of "<clinit>".

      Returns:
      the list of MethodInfo objects for visible methods and constructors of this class, or the empty list if no methods or constructors were found or visible.
      Throws:
      IllegalArgumentException - if ClassGraph.enableMethodInfo() was not called prior to initiating the scan.
    • getMethodAndConstructorInfo

      public MethodInfoList getMethodAndConstructorInfo()
      Returns information on visible constructors declared by this class, or by its interfaces or superclasses. Constructors have the method name of "<init>" and static initializer blocks have the name of "<clinit>". See also:

      There may be more than one method of a given name with different type signatures, due to overloading.

      Requires that ClassGraph.enableMethodInfo() be called before scanning, otherwise throws IllegalArgumentException.

      By default only returns information for public methods, unless ClassGraph.ignoreMethodVisibility() was called before the scan.

      Returns:
      the list of MethodInfo objects for visible methods and constructors of this class, its interfaces and superclasses, or the empty list if no methods were found.
      Throws:
      IllegalArgumentException - if ClassGraph.enableMethodInfo() was not called prior to initiating the scan.
    • getDeclaredMethodInfo

      public MethodInfoList getDeclaredMethodInfo(String methodName)
      Returns information on the method(s) or constructor(s) of the given name declared by this class, but not by its interfaces or superclasses. Constructors have the method name of "<init>". See also:

      Requires that ClassGraph.enableMethodInfo() be called before scanning, otherwise throws IllegalArgumentException.

      By default only returns information for public methods, unless ClassGraph.ignoreMethodVisibility() was called before the scan.

      May return info for multiple methods with the same name (with different type signatures).

      Parameters:
      methodName - The method name to query.
      Returns:
      a list of MethodInfo objects for the method(s) with the given name, or the empty list if the method was not found in this class (or is not visible).
      Throws:
      IllegalArgumentException - if ClassGraph.enableMethodInfo() was not called prior to initiating the scan.
    • getMethodInfo

      public MethodInfoList getMethodInfo(String methodName)
      Returns information on the method(s) or constructor(s) of the given name declared by this class, but not by its interfaces or superclasses. Constructors have the method name of "<init>". See also:

      Requires that ClassGraph.enableMethodInfo() be called before scanning, otherwise throws IllegalArgumentException.

      By default only returns information for public methods, unless ClassGraph.ignoreMethodVisibility() was called before the scan.

      May return info for multiple methods with the same name (with different type signatures).

      Parameters:
      methodName - The method name to query.
      Returns:
      a list of MethodInfo objects for the method(s) with the given name, or the empty list if the method was not found in this class (or is not visible).
      Throws:
      IllegalArgumentException - if ClassGraph.enableMethodInfo() was not called prior to initiating the scan.
    • getMethodAnnotations

      public ClassInfoList getMethodAnnotations()
      Get all method annotations.
      Returns:
      A list of all annotations or meta-annotations on methods declared by the class, (not including methods declared by the interfaces or superclasses of this class), as a list of ClassInfo objects, or the empty list if none. N.B. these annotations do not contain specific annotation parameters -- call ClassMemberInfo.getAnnotationInfo() to get details on specific method annotation instances.
    • getMethodParameterAnnotations

      public ClassInfoList getMethodParameterAnnotations()
      Get all method parameter annotations.
      Returns:
      A list of all annotations or meta-annotations on methods declared by the class, (not including methods declared by the interfaces or superclasses of this class), as a list of ClassInfo objects, or the empty list if none. N.B. these annotations do not contain specific annotation parameters -- call ClassMemberInfo.getAnnotationInfo() to get details on specific method annotation instances.
    • getClassesWithMethodAnnotation

      public ClassInfoList getClassesWithMethodAnnotation()
      Get all classes that have this class as a method annotation, and their subclasses, if the method is non-private.
      Returns:
      A list of classes that have a declared method with this annotation or meta-annotation, or the empty list if none.
    • getClassesWithMethodParameterAnnotation

      public ClassInfoList getClassesWithMethodParameterAnnotation()
      Get all classes that have this class as a method parameter annotation, and their subclasses, if the method is non-private.
      Returns:
      A list of classes that have a declared method with a parameter that is annotated with this annotation or meta-annotation, or the empty list if none.
    • getDeclaredFieldInfo

      public FieldInfoList getDeclaredFieldInfo()
      Returns information on all visible fields declared by this class, but not by its superclasses. See also:

      Requires that ClassGraph.enableFieldInfo() be called before scanning, otherwise throws IllegalArgumentException.

      By default only returns information for public fields, unless ClassGraph.ignoreFieldVisibility() was called before the scan.

      Returns:
      the list of FieldInfo objects for visible fields declared by this class, or the empty list if no fields were found or visible.
      Throws:
      IllegalArgumentException - if ClassGraph.enableFieldInfo() was not called prior to initiating the scan.
    • getFieldInfo

      public FieldInfoList getFieldInfo()
      Returns information on all visible fields declared by this class, or by its superclasses. See also:

      Requires that ClassGraph.enableFieldInfo() be called before scanning, otherwise throws IllegalArgumentException.

      By default only returns information for public fields, unless ClassGraph.ignoreFieldVisibility() was called before the scan.

      Returns:
      the list of FieldInfo objects for visible fields of this class or its superclases, or the empty list if no fields were found or visible.
      Throws:
      IllegalArgumentException - if ClassGraph.enableFieldInfo() was not called prior to initiating the scan.
    • getEnumConstants

      public FieldInfoList getEnumConstants()
      Returns:
      All enum constants of an enum class as a list of FieldInfo objects (enum constants are stored as fields in Java classes).
    • getEnumConstantObjects

      public List<Object> getEnumConstantObjects()
      Returns:
      All enum constants of an enum class as a list of objects of the same type as the enum.
    • getDeclaredFieldInfo

      public FieldInfo getDeclaredFieldInfo(String fieldName)
      Returns information on the named field declared by the class, but not by its superclasses. See also:

      Requires that ClassGraph.enableFieldInfo() be called before scanning, otherwise throws IllegalArgumentException.

      By default only returns information for public fields, unless ClassGraph.ignoreFieldVisibility() was called before the scan.

      Parameters:
      fieldName - The field name.
      Returns:
      the FieldInfo object for the named field declared by this class, or null if the field was not found in this class (or is not visible).
      Throws:
      IllegalArgumentException - if ClassGraph.enableFieldInfo() was not called prior to initiating the scan.
    • getFieldInfo

      public FieldInfo getFieldInfo(String fieldName)
      Returns information on the named filed declared by this class, or by its superclasses. See also:

      Requires that ClassGraph.enableFieldInfo() be called before scanning, otherwise throws IllegalArgumentException.

      By default only returns information for public fields, unless ClassGraph.ignoreFieldVisibility() was called before the scan.

      Parameters:
      fieldName - The field name.
      Returns:
      the FieldInfo object for the named field of this class or its superclases, or the empty list if no fields were found or visible.
      Throws:
      IllegalArgumentException - if ClassGraph.enableFieldInfo() was not called prior to initiating the scan.
    • getFieldAnnotations

      public ClassInfoList getFieldAnnotations()
      Get all field annotations.
      Returns:
      A list of all annotations on fields of this class, or the empty list if none. N.B. these annotations do not contain specific annotation parameters -- call ClassMemberInfo.getAnnotationInfo() to get details on specific field annotation instances.
    • getClassesWithFieldAnnotation

      public ClassInfoList getClassesWithFieldAnnotation()
      Get the classes that have this class as a field annotation or meta-annotation.
      Returns:
      A list of classes that have a field with this annotation or meta-annotation, or the empty list if none.
    • getTypeSignature

      public ClassTypeSignature getTypeSignature()
      Get the parsed type signature for the class.
      Returns:
      The parsed type signature for the class, including any generic type parameters, or null if not available (probably indicating the class is not generic).
      Throws:
      IllegalArgumentException - if the class type signature cannot be parsed (this should only be thrown in the case of classfile corruption, or a compiler bug that causes an invalid type signature to be written to the classfile).
    • getTypeSignatureStr

      public String getTypeSignatureStr()
      Get the type signature string for the class.
      Returns:
      The type signature string for the class, including any generic type parameters, or null if not available (probably indicating the class is not generic).
    • getTypeSignatureOrTypeDescriptor

      public ClassTypeSignature getTypeSignatureOrTypeDescriptor()
      Returns the parsed type signature for this class, possibly including type parameters. If the type signature is not present for this class, indicating that this is not a generic class, then a type descriptor will be synthesized and returned, as if there were a type descriptor (classfiles may have a type signature but do not contain a type descriptor). May include type annotations on the superclass or interface(s).
      Returns:
      The parsed generic type signature for the class, or if not available, the synthetic type descriptor for the class.
    • getTypeDescriptor

      public ClassTypeSignature getTypeDescriptor()
      Returns a synthetic type descriptor for the method, created from the class name, superclass name, and implemented interfaces. May include type annotations on the superclass or interface(s).
      Returns:
      The synthetic type descriptor for the class.
    • getSourceFile

      public String getSourceFile()
      Returns the name of the source file this class has been compiled from, such as ClassInfo.java or KClass.kt.

      This field may be null.

      Returns:
      The name of the source file of this class, or null if not available
    • getClasspathElementURI

      public URI getClasspathElementURI()
      Get the URI of the classpath element that this class was found within.
      Returns:
      The URI of the classpath element that this class was found within.
      Throws:
      IllegalArgumentException - if the classpath element does not have a valid URI (e.g. for modules whose location URI is null).
    • getClasspathElementURL

      public URL getClasspathElementURL()
      Get the URL of the classpath element or module that this class was found within. Use getClasspathElementURI() instead if the resource may have come from a system module, or if this is a jlink'd runtime image, since "jrt:" URI schemes used by system modules and jlink'd runtime images are not suppored by URL, and this will cause IllegalArgumentException to be thrown.
      Returns:
      The URL of the classpath element that this class was found within.
      Throws:
      IllegalArgumentException - if the classpath element URI cannot be converted to a URL (in particular, if the URI has a jrt:/ scheme).
    • getClasspathElementFile

      public File getClasspathElementFile()
      Get the File for the classpath element package root dir or jar that this class was found within, or null if this class was found in a module. (See also getModuleRef().)
      Returns:
      The File for the classpath element package root dir or jar that this class was found within, or null if this class was found in a module (see getModuleRef()). May also return null if the classpath element was an http/https URL, and the jar was downloaded directly to RAM, rather than to a temp file on disk (e.g. if the temp dir is not writeable).
    • getModuleRef

      public ModuleRef getModuleRef()
      Get the module that this class was found within, as a ModuleRef, or null if this class was found in a directory or jar in the classpath. (See also getClasspathElementFile().)
      Returns:
      The module that this class was found within, as a ModuleRef, or null if this class was found in a directory or jar in the classpath. (See also getClasspathElementFile().)
    • getResource

      public Resource getResource()
      The Resource for the classfile of this class.
      Returns:
      The Resource for the classfile of this class. Returns null if the classfile for this class was not actually read during the scan, e.g. because this class was not itself accepted, but was referenced by an accepted class.
    • loadClass

      public <T> Class<T> loadClass(Class<T> superclassOrInterfaceType, boolean ignoreExceptions)
      Obtain a Class<?> reference for the class named by this ClassInfo object, casting it to the requested interface or superclass type. Causes the ClassLoader to load the class, 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 type
      Parameters:
      superclassOrInterfaceType - The Class reference for the type to cast the loaded class to.
      ignoreExceptions - If true, return null if any exceptions or errors thrown during classloading, or if attempting to cast the resulting Class<?> reference to the requested superclass or interface type fails. If false, IllegalArgumentException is thrown if the class could not be loaded or could not be cast to the requested type.
      Returns:
      The class reference, or null, if ignoreExceptions is true and there was an exception or error loading the class.
      Throws:
      IllegalArgumentException - if ignoreExceptions is false and there were problems loading the class, or casting it to the requested type.
    • loadClass

      public <T> Class<T> loadClass(Class<T> superclassOrInterfaceType)
      Obtain a Class<?> reference for the class named by this ClassInfo object, casting it to the requested interface or superclass type. Causes the ClassLoader to load the class, 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 type
      Parameters:
      superclassOrInterfaceType - The type to cast the loaded class to.
      Returns:
      The class reference.
      Throws:
      IllegalArgumentException - if there were problems loading the class or casting it to the requested type.
    • loadClass

      public Class<?> loadClass(boolean ignoreExceptions)
      Obtain a Class<?> reference for the class named by this ClassInfo object. Causes the ClassLoader to load the class, if it is not already loaded.
      Parameters:
      ignoreExceptions - Whether or not to ignore exceptions
      Returns:
      The class reference, or null, if ignoreExceptions is true and there was an exception or error loading the class.
      Throws:
      IllegalArgumentException - if ignoreExceptions is false and there were problems loading the class.
    • loadClass

      public Class<?> loadClass()
      Obtain a Class<?> reference for the class named by this ClassInfo object. Causes the ClassLoader to load the class, if it is not already loaded.
      Returns:
      The class reference.
      Throws:
      IllegalArgumentException - if there were problems loading the class.
    • getClassName

      protected String getClassName()
      The name of the class (used by ScanResultObject.getClassInfo() to fetch the ClassInfo object for the class).
      Returns:
      The class name.
    • getClassInfo

      protected ClassInfo getClassInfo()
    • findReferencedClassInfo

      protected void findReferencedClassInfo(Map<String, ClassInfo> classNameToClassInfo, Set<ClassInfo> refdClassInfo, nonapi.io.github.classgraph.utils.LogNode log)
      Get ClassInfo objects for any classes referenced in this class' type descriptor, or the type descriptors of fields, methods or annotations.
      Parameters:
      classNameToClassInfo - the map from class name to ClassInfo.
      refdClassInfo - the referenced class info
      log - the log
    • getClassDependencies

      public ClassInfoList getClassDependencies()
      Get the class dependencies.
      Returns:
      A ClassInfoList of ClassInfo objects for all classes referenced by this class. Note that you need to call ClassGraph.enableInterClassDependencies() before ClassGraph.scan() for this method to work. You should also call ClassGraph.enableExternalClasses() before ClassGraph.scan() if you want non-accepted classes to appear in the result.
    • compareTo

      public int compareTo(ClassInfo o)
      Compare based on class name.
      Specified by:
      compareTo in interface Comparable<ClassInfo>
      Parameters:
      o - the other object
      Returns:
      the comparison result
    • equals

      public boolean equals(Object obj)
      Use class name for equals().
      Overrides:
      equals in class Object
      Parameters:
      obj - the other object
      Returns:
      Whether the objects were equal.
    • hashCode

      public int hashCode()
      Use hash code of class name.
      Overrides:
      hashCode in class Object
      Returns:
      the hashcode
    • toString

      protected void toString(boolean useSimpleNames, StringBuilder buf)
      To string.
      Parameters:
      useSimpleNames - use simple names
      buf - the buf
    • toStringWithSimpleNames

      public String toStringWithSimpleNames()
      Render to string, using only simple names for classes.
      Returns:
      the string representation, using simple names for classes.
    • toString

      public String toString()
      Render to string.
      Overrides:
      toString in class Object
      Returns:
      the string representation.