@Override
  public BasicValue newOperation(AbstractInsnNode insn) throws AnalyzerException {
    boolean propagate = resultOrigins[insns.indexOf(insn)];
    if (propagate || isThrowAnalysis()) {
      switch (insn.getOpcode()) {
        case ICONST_0 -> {
          return FalseValue;
        }
        case ICONST_1 -> {
          return TrueValue;
        }
        case ACONST_NULL -> {
          return NullValue;
        }
        case LDC -> {
          Object cst = ((LdcInsnNode)insn).cst;
          if (cst instanceof Type type) {
            if (type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY) {
              return CLASS_VALUE;
            }
            if (type.getSort() == Type.METHOD) {
              return METHOD_VALUE;
            }
          }
          else if (cst instanceof String) {
            return STRING_VALUE;
          }
          else if (cst instanceof Handle) {
            return METHOD_HANDLE_VALUE;
          }
        }
        case NEW -> {
          return new NotNullValue(Type.getObjectType(((TypeInsnNode)insn).desc));
        }
        default -> {
        }
      }
    }
    return super.newOperation(insn);
  }
@Override
  public BasicValue newOperation(AbstractInsnNode insn)