Class SwitchHandler

java.lang.Object
edu.umd.cs.findbugs.SwitchHandler

public class SwitchHandler extends Object
  • Constructor Details

    • SwitchHandler

      public SwitchHandler()
  • Method Details

    • stackSize

      public int stackSize()
    • enterSwitch

      public void enterSwitch(DismantleBytecode dbc, @CheckForNull XClass enumType)
    • enterSwitch

      public void enterSwitch(int opCode, int pc, int[] switchOffsets, int defaultSwitchOffset, boolean exhaustive)
      Parameters:
      opCode - The op code of the switch, should be TABLESWITCH or LOOKUPSWITCH
      pc - The PC of the switch instruction
      switchOffsets - The PC offsets of the switch cases
      defaultSwitchOffset - The PC of the default case
      exhaustive - true if the switch is exhaustive
    • isOnSwitchOffset

      public boolean isOnSwitchOffset(DismantleBytecode dbc)
    • getNextSwitchOffset

      public int getNextSwitchOffset(DismantleBytecode dbc)
    • getDefaultOffset

      public int getDefaultOffset()
    • getCurrentSwitchStatement

      public SourceLineAnnotation getCurrentSwitchStatement(BytecodeScanningDetector detector)
    • sawInvokeDynamic

      public void sawInvokeDynamic(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.
      Parameters:
      pc -
      methodName -
    • isTypeSwitchCaseCheckCast

      public boolean isTypeSwitchCaseCheckCast(int opCode, int pc)
      In type switches a CHECKCAST is 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 code
      pc - The program counter
      Returns:
      trueIf this instruction is a cast for a type switch
    • isTypeSwitchCaseLoad

      public boolean isTypeSwitchCaseLoad(Location location)
      In type switches an ASTORE is 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