Class InnerClassAccessMap

java.lang.Object
edu.umd.cs.findbugs.ba.InnerClassAccessMap

public class InnerClassAccessMap extends Object
Determine which methods are accessors used by inner classes to access fields in their enclosing classes. This has been tested with javac from the Sun JDK 1.4.x, but will probably not work with other source to bytecode compilers.

The instance of InnerClassAccessMap should be retrieved from the AnalysisContext.

See Also:
  • Field Details

    • DEBUG

      private static final boolean DEBUG
    • classToAccessMap

      private final Map<String,Map<String,InnerClassAccess>> classToAccessMap
      Map of class names to maps of method names to InnerClassAccess objects representing access methods.
  • Constructor Details

    • InnerClassAccessMap

      private InnerClassAccessMap()
      Constructor.
  • Method Details

    • create

      public static InnerClassAccessMap create()
      Create an instance.
      Returns:
      a new instance of InnerClassAccessMap
    • getInnerClassAccess

      public InnerClassAccess getInnerClassAccess(String className, String methodName) throws ClassNotFoundException
      Get the InnerClassAccess in given class with the given method name.
      Parameters:
      className - the name of the class
      methodName - the name of the access method
      Returns:
      the InnerClassAccess object for the method, or null if the method doesn't seem to be an inner class access
      Throws:
      ClassNotFoundException
    • getInnerClassAccess

      public InnerClassAccess getInnerClassAccess(org.apache.bcel.generic.INVOKESTATIC inv, org.apache.bcel.generic.ConstantPoolGen cpg) throws ClassNotFoundException
      Get the inner class access object for given invokestatic instruction. Returns null if the called method is not an inner class access.
      Parameters:
      inv - the invokestatic instruction
      cpg - the ConstantPoolGen for the method
      Returns:
      the InnerClassAccess, or null if the call is not an inner class access
      Throws:
      ClassNotFoundException
    • clearCache

      public void clearCache()
      Clear the cache.
    • toInt

      private static int toInt(byte b)
      Convert byte to unsigned int.
    • getIndex

      private static int getIndex(byte[] instructionList, int index)
      Get an unsigned 16 bit constant pool index from a byte array.
    • getAccessMapForClass

      private Map<String,InnerClassAccess> getAccessMapForClass(String className) throws ClassNotFoundException
      Return a map of inner-class member access method names to the fields that they access for given class name.
      Parameters:
      className - the name of the class
      Returns:
      map of access method names to the fields they access
      Throws:
      ClassNotFoundException