docs: public static @Nonnull
      Set<XMethod> resolveMethodCallTargets(InvokeInstruction invokeInstruction, TypeFrame typeFrame, ConstantPoolGen cpg)
              throws DataflowAnalysisException, ClassNotFoundException {
  
          short opcode = invokeInstruction.getOpcode();
  
          if (opcode == Const.INVOKESTATIC) {
              return Util.emptyOrNonnullSingleton(findInvocationLeastUpperBound(invokeInstruction, cpg, STATIC_METHOD));
          }
  
          if (!typeFrame.isValid()) {
              return Collections.<XMethod> emptySet();
          }
  
          // XXX handle INVOKEDYNAMIC
          if (opcode == Const.INVOKEDYNAMIC) {
              return Collections.<XMethod> emptySet();
          }
  
          Type receiverType;
          boolean receiverTypeIsExact;
  
          if (opcode == Const.INVOKESPECIAL) {
              // invokespecial instructions are dispatched to EXACTLY
              // the class specified by the instruction
              receiverType = ObjectTypeFactory.getInstance(invokeInstruction.getClassName(cpg));
              receiverTypeIsExact = false; // Doesn't actually matter
          } else {
              // For invokevirtual and invokeinterface instructions, we have
              // virtual dispatch. By taking the receiver type (which may be a
              // subtype of the class specified by the instruction),
              // we may get a more precise set of call targets.
              int instanceStackLocation = typeFrame.getInstanceStackLocation(invokeInstruction, cpg);
              receiverType = typeFrame.getStackValue(instanceStackLocation);
              if (!(receiverType instanceof ReferenceType)) {
                  return Collections.<XMethod> emptySet();
              }
              receiverTypeIsExact = typeFrame.isExact(instanceStackLocation);
          }
          if (DEBUG_METHOD_LOOKUP) {
              System.out.println("[receiver type is " + receiverType + ", " + (receiverTypeIsExact ? "exact]" : " not exact]"));
          }
  
          return resolveMethodCallTargets((ReferenceType) receiverType, invokeInstruction, cpg, receiverTypeIsExact);
      }