@Override
  public BasicValue naryOperation(AbstractInsnNode insn, List<? extends BasicValue> values) throws AnalyzerException {
    int opCode = insn.getOpcode();
    int origin = insnIndex(insn);

    switch (opCode) {
      case INVOKESTATIC, INVOKESPECIAL, INVOKEVIRTUAL, INVOKEINTERFACE -> {
        MethodInsnNode mNode = (MethodInsnNode)insn;
        Member method = new Member(mNode.owner, mNode.name, mNode.desc);
        TrackableCallValue value = methodCall(opCode, origin, method, values);
        calls.add(value);
        return value;
      }
      case INVOKEDYNAMIC -> {
        InvokeDynamicInsnNode indy = (InvokeDynamicInsnNode)insn;
        if (ClassDataIndexer.STRING_CONCAT_FACTORY.equals(indy.bsm.getOwner())) {
          return new NotNullValue(Type.getReturnType(indy.desc));
        }
        LambdaIndy lambda = LambdaIndy.from(indy);
        if (lambda == null) break;
        int targetOpCode = lambda.getAssociatedOpcode();
        if (targetOpCode == -1) break;
        methodCall(targetOpCode, origin, lambda.getMethod(), lambda.getLambdaMethodArguments(values, this::newValue));
        return new NotNullValue(lambda.getFunctionalInterfaceType());
      }
      case MULTIANEWARRAY -> {
        return new NotNullValue(super.naryOperation(insn, values).getType());
      }
      default -> {
      }
    }
    return track(origin, super.naryOperation(insn, values));
  }
@Override
  public BasicValue naryOperation(AbstractInsnNode insn, List<? extends BasicValue> values)