Class ClassInfo

All Implemented Interfaces:
AccessibleEntity, XClass, AnnotatedObject, Serializable, Comparable<ClassDescriptor>

public class ClassInfo extends ClassNameAndSuperclassInfo implements XClass
ClassInfo represents important metadata about a loaded class, such as its superclass, access flags, codebase entry, etc.
See Also:
  • Field Details

    • DEBUG

      private static final boolean DEBUG
    • xFields

      private final FieldInfo[] xFields
    • xMethods

      private final MethodInfo[] xMethods
    • methodsInCallOrder

      private final MethodInfo[] methodsInCallOrder
    • immediateEnclosingClass

      private final ClassDescriptor immediateEnclosingClass
    • classAnnotations

    • classSourceSignature

      private final String classSourceSignature
    • source

      private final String source
    • usesConcurrency

      private final boolean usesConcurrency
    • hasStubs

      private final boolean hasStubs
    • containingScope

      @CheckForNull AnnotatedObject containingScope
    • containingScopeCached

      private boolean containingScopeCached
  • Constructor Details

    • ClassInfo

      private ClassInfo(ClassDescriptor classDescriptor, String classSourceSignature, ClassDescriptor superclassDescriptor, ClassDescriptor[] interfaceDescriptorList, ICodeBaseEntry codeBaseEntry, int accessFlags, String source, int majorVersion, int minorVersion, Collection<ClassDescriptor> referencedClassDescriptorList, Set<ClassDescriptor> calledClassDescriptors, Map<ClassDescriptor,AnnotationValue> classAnnotations, FieldInfo[] fieldDescriptorList, MethodInfo[] methodInfoList, ClassDescriptor immediateEnclosingClass, boolean usesConcurrency, boolean hasStubs)
      Parameters:
      classDescriptor - ClassDescriptor representing the class name
      superclassDescriptor - ClassDescriptor representing the superclass name
      interfaceDescriptorList - ClassDescriptors representing implemented interface names
      codeBaseEntry - codebase entry class was loaded from
      accessFlags - class's access flags
      referencedClassDescriptorList - ClassDescriptors of all classes/interfaces referenced by the class
      fieldDescriptorList - FieldDescriptors of fields defined in the class
      methodInfoList - MethodDescriptors of methods defined in the class
  • Method Details

    • computeMethodsInCallOrder

      private MethodInfo[] computeMethodsInCallOrder()
    • getXFields

      public List<? extends XField> getXFields()
      Specified by:
      getXFields in interface XClass
    • getXMethods

      public List<? extends XMethod> getXMethods()
      Specified by:
      getXMethods in interface XClass
    • getXMethodsInCallOrder

      public List<? extends XMethod> getXMethodsInCallOrder()
    • findMethod

      public XMethod findMethod(String methodName, String methodSig, boolean isStatic)
      Description copied from interface: XClass
      Find an XMethod matching given parameters.
      Specified by:
      findMethod in interface XClass
      Parameters:
      methodName - name of the method
      methodSig - signature of the method
      isStatic - true if the method is static, false if not
      Returns:
      matching XMethod, or null if there is no matching XMethod
    • findMethod

      public XMethod findMethod(MethodDescriptor descriptor)
      Description copied from interface: XClass
      Find XMethod matching given MethodDescriptor.
      Specified by:
      findMethod in interface XClass
      Parameters:
      descriptor - a MethodDescriptor
      Returns:
      matching XMethod, or null if there is no matching method
    • findMatchingMethod

      public XMethod findMatchingMethod(MethodDescriptor descriptor)
      Description copied from interface: XClass
      Find XMethod matching the name and signature of the supplied method MethodDescriptor. The class descriptor of the argument is ignored.
      Specified by:
      findMatchingMethod in interface XClass
      Parameters:
      descriptor - a MethodDescriptor
      Returns:
      matching XMethod, or null if there is no matching method
    • findField

      public XField findField(String name, String signature, boolean isStatic)
      Description copied from interface: XClass
      Find an XField matching given parameters.
      Specified by:
      findField in interface XClass
      Parameters:
      name - name of the field
      signature - signature of the field
      isStatic - true if field is static, false if not
      Returns:
      XField, or null if there is no matching XField
    • getImmediateEnclosingClass

      public ClassDescriptor getImmediateEnclosingClass()
      Description copied from interface: XClass
      Get the ClassDescriptor of the immediate enclosing class, or null if this XClass is not a nested or inner class.
      Specified by:
      getImmediateEnclosingClass in interface XClass
      Returns:
      the ClassDescriptor of the immediate enclosing class, or null if this XClass is not a nested or inner class
    • getPackageName

      public String getPackageName()
      Description copied from class: ClassDescriptor
      Get the name of the package in dotted format.
      Overrides:
      getPackageName in class ClassDescriptor
      Returns:
      the name of the package in dotted format
    • getSlashedPackageName

      public String getSlashedPackageName()
    • getAnnotationDescriptors

      public Collection<ClassDescriptor> getAnnotationDescriptors()
      Specified by:
      getAnnotationDescriptors in interface AnnotatedObject
      Specified by:
      getAnnotationDescriptors in interface XClass
    • getAnnotations

      public Collection<AnnotationValue> getAnnotations()
      Specified by:
      getAnnotations in interface AnnotatedObject
    • getAnnotation

      public AnnotationValue getAnnotation(ClassDescriptor desc)
      Specified by:
      getAnnotation in interface AnnotatedObject
      Specified by:
      getAnnotation in interface XClass
    • addAnnotation

      public void addAnnotation(AnnotationValue annotationValue)
      Destructively add an annotation to the object. In general, this is not a great idea, since it could cause the same class to appear to have different annotations at different times. However, this method is necessary for "built-in" annotations that FindBugs adds to system classes. As long as we add such annotations early enough that nobody will notice, we should be ok.
      Parameters:
      annotationValue - an AnnotationValue to add to the class
    • getElementType

      public ElementType getElementType()
      Specified by:
      getElementType in interface AnnotatedObject
    • getSource

      @CheckForNull public String getSource()
      Specified by:
      getSource in interface XClass
      Returns:
      the Source attribute
    • getContainingScope

      @CheckForNull public AnnotatedObject getContainingScope()
      Specified by:
      getContainingScope in interface AnnotatedObject
    • getContainingScope0

      @CheckForNull public AnnotatedObject getContainingScope0()
    • getSourceSignature

      public String getSourceSignature()
      Specified by:
      getSourceSignature in interface XClass
    • usesConcurrency

      public boolean usesConcurrency()
      Specified by:
      usesConcurrency in interface XClass
    • hasStubs

      public boolean hasStubs()
      Specified by:
      hasStubs in interface XClass