docs: private void examineBasicBlocks() throws DataflowAnalysisException, CFGBuilderException {
          // Look for null check blocks where the reference being checked
          // is definitely null, or null on some path
          Iterator<BasicBlock> bbIter = invDataflow.getCFG().blockIterator();
          while (bbIter.hasNext()) {
              BasicBlock basicBlock = bbIter.next();
  
              if (basicBlock.isNullCheck()) {
                  analyzeNullCheck(invDataflow, basicBlock);
              } else if (!basicBlock.isEmpty()) {
                  // Look for all reference comparisons where
                  // - both values compared are definitely null, or
                  // - one value is definitely null and one is definitely not null
                  // These cases are not null dereferences,
                  // but they are quite likely to indicate an error, so while
                  // we've got
                  // information about null values, we may as well report them.
                  InstructionHandle lastHandle = basicBlock.getLastInstruction();
                  Instruction last = lastHandle.getInstruction();
                  switch (last.getOpcode()) {
                  case Const.IF_ACMPEQ:
                  case Const.IF_ACMPNE:
                      analyzeRefComparisonBranch(basicBlock, lastHandle);
                      break;
                  case Const.IFNULL:
                  case Const.IFNONNULL:
                      analyzeIfNullBranch(basicBlock, lastHandle);
                      break;
                  default:
                      break;
                  }
              }
          }
      }