Class SwitchHandler
java.lang.Object
edu.umd.cs.findbugs.SwitchHandler
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final List<SwitchHandler.SwitchDetails> The set of program counters for the 'switch' instruction of each of the type switches -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidenterSwitch(int opCode, int pc, int[] switchOffsets, int defaultSwitchOffset, boolean exhaustive) voidenterSwitch(DismantleBytecode dbc, XClass enumType) private SwitchHandler.SwitchDetailsfindSwitchDetailsByPc(int... possiblePC) Finds a switch from the first PC of a caseintintbooleanbooleanisTypeSwitchCaseCheckCast(int opCode, int pc) In type switches aCHECKCASTis inserted by the compiler for each case.booleanisTypeSwitchCaseLoad(Location location) In type switches anASTOREis inserted by the compiler for each case.(package private) intvoidsawInvokeDynamic(int pc, String methodName) For type switches introduced in Java 21 we are using the invocation of a bootstrap 'typeswitch()' method to detect that the switch operates on the class of the object.int
-
Field Details
-
switchOffsetStack
-
typeSwitchPC
-
-
Constructor Details
-
SwitchHandler
public SwitchHandler()
-
-
Method Details
-
stackSize
public int stackSize() -
numEnumValues
-
enterSwitch
-
enterSwitch
public void enterSwitch(int opCode, int pc, int[] switchOffsets, int defaultSwitchOffset, boolean exhaustive) - Parameters:
opCode- The op code of the switch, should beTABLESWITCHorLOOKUPSWITCHpc- The PC of the switch instructionswitchOffsets- The PC offsets of the switch casesdefaultSwitchOffset- The PC of the default caseexhaustive-trueif the switch is exhaustive
-
isOnSwitchOffset
-
getNextSwitchOffset
-
getNextSwitchDetails
-
getDefaultOffset
public int getDefaultOffset() -
getCurrentSwitchStatement
-
sawInvokeDynamic
For type switches introduced in Java 21 we are using the invocation of a bootstrap 'typeswitch()' method to detect that the switch operates on the class of the object.- Parameters:
pc-methodName-
-
isTypeSwitchCaseCheckCast
public boolean isTypeSwitchCaseCheckCast(int opCode, int pc) In type switches aCHECKCASTis inserted by the compiler for each case. This method checks if the instruction is one of these casts and then checks if the corresponding switch is a type switch.- Parameters:
opCode- The operation codepc- The program counter- Returns:
trueIf this instruction is a cast for a type switch
-
isTypeSwitchCaseLoad
In type switches anASTOREis inserted by the compiler for each case. This method checks if the instruction is one of these loads and then checks if the corresponding switch is a type switch. We're looking for: an ASTORE preceded by a CHECKCAST preceded by an instruction at the offset of a switch case- Parameters:
location- The Location- Returns:
trueIf this instruction is a load for a type switch
-
findSwitchDetailsByPc
Finds a switch from the first PC of a case- Parameters:
possiblePC- The possible first PC of a switch case- Returns:
- The
SwitchDetailsof the switch corresponding to the case or null if there was no case at this PC
-