docs: @Override
      public void transferInstruction(InstructionHandle handle, BasicBlock basicBlock, TypeQualifierValueSet fact)
              throws DataflowAnalysisException {
          if (!fact.isValid()) {
              return;
          }
          Location location = new Location(handle, basicBlock);
  
          Instruction i = handle.getInstruction();
          if (i instanceof InvokeInstruction) {
              InvokeInstruction ii = (InvokeInstruction) i;
              if (i instanceof INVOKEDYNAMIC) {
                  return;
              }
              XMethod m = XFactory.createXMethod(ii, cpg);
              if (TypeQualifierDataflowAnalysis.isIdentifyFunctionForTypeQualifiers(m)) {
                  ValueNumberFrame vnaFrameAtLocation = vnaDataflow.getFactAtLocation(location);
                  ValueNumberFrame vnaFrameAfterInstruction = vnaDataflow.getFactAfterLocation(location);
                  ValueNumber in = vnaFrameAtLocation.getStackValue(0);
                  ValueNumber out = vnaFrameAfterInstruction.getStackValue(0);
                  fact.copyInfo(in, out);
                  return;
              }
          }
  
          // This is a simple process.
          // Check to see if there are any sources/sinks at this location,
          // and if so, model them.
  
          Set<SourceSinkInfo> sourceSinkSet = sourceSinkMap.get(location);
          if (sourceSinkSet != null) {
              if (DEBUG_VERBOSE) {
                  System.out.println("Modeling source/sink at " + location.toCompactString() + ": " + sourceSinkSet.toString());
              }
              for (SourceSinkInfo sourceSinkInfo : sourceSinkSet) {
                  fact.modelSourceSink(sourceSinkInfo);
              }
          }
      }