Package edu.umd.cs.findbugs.ba
Class InnerClassAccessMap
- java.lang.Object
-
- edu.umd.cs.findbugs.ba.InnerClassAccessMap
-
public class InnerClassAccessMap extends java.lang.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:
InnerClassAccess
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
InnerClassAccessMap.InstructionCallback
Callback to scan an access method to determine what field it accesses, and whether the field is loaded or stored.
-
Field Summary
Fields Modifier and Type Field Description private java.util.Map<java.lang.String,java.util.Map<java.lang.String,InnerClassAccess>>
classToAccessMap
Map of class names to maps of method names to InnerClassAccess objects representing access methods.private static boolean
DEBUG
-
Constructor Summary
Constructors Modifier Constructor Description private
InnerClassAccessMap()
Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clearCache()
Clear the cache.static InnerClassAccessMap
create()
Create an instance.private java.util.Map<java.lang.String,InnerClassAccess>
getAccessMapForClass(java.lang.String className)
Return a map of inner-class member access method names to the fields that they access for given class name.private static int
getIndex(byte[] instructionList, int index)
Get an unsigned 16 bit constant pool index from a byte array.InnerClassAccess
getInnerClassAccess(java.lang.String className, java.lang.String methodName)
Get the InnerClassAccess in given class with the given method name.InnerClassAccess
getInnerClassAccess(org.apache.bcel.generic.INVOKESTATIC inv, org.apache.bcel.generic.ConstantPoolGen cpg)
Get the inner class access object for given invokestatic instruction.private static int
toInt(byte b)
Convert byte to unsigned int.
-
-
-
Field Detail
-
DEBUG
private static final boolean DEBUG
-
classToAccessMap
private final java.util.Map<java.lang.String,java.util.Map<java.lang.String,InnerClassAccess>> classToAccessMap
Map of class names to maps of method names to InnerClassAccess objects representing access methods.
-
-
Method Detail
-
create
public static InnerClassAccessMap create()
Create an instance.- Returns:
- a new instance of InnerClassAccessMap
-
getInnerClassAccess
public InnerClassAccess getInnerClassAccess(java.lang.String className, java.lang.String methodName) throws java.lang.ClassNotFoundException
Get the InnerClassAccess in given class with the given method name.- Parameters:
className
- the name of the classmethodName
- 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:
java.lang.ClassNotFoundException
-
getInnerClassAccess
public InnerClassAccess getInnerClassAccess(org.apache.bcel.generic.INVOKESTATIC inv, org.apache.bcel.generic.ConstantPoolGen cpg) throws java.lang.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 instructioncpg
- the ConstantPoolGen for the method- Returns:
- the InnerClassAccess, or null if the call is not an inner class access
- Throws:
java.lang.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 java.util.Map<java.lang.String,InnerClassAccess> getAccessMapForClass(java.lang.String className) throws java.lang.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:
java.lang.ClassNotFoundException
-
-