private void addThrows(Collection<? extends PsiType> exceptions) {
    StreamEx<TypeConstraint> allExceptions = StreamEx.of(JAVA_LANG_ERROR, JAVA_LANG_RUNTIME_EXCEPTION)
      .map(fqn -> myTrapTracker.transfer(fqn).getThrowable());
    if (!exceptions.isEmpty()) {
      allExceptions = allExceptions.append(StreamEx.of(exceptions).map(TypeConstraints::instanceOf))
        .map(TypeConstraint::tryNegate).nonNull()
        .reduce(TypeConstraints.TOP, TypeConstraint::meet)
        .notInstanceOfTypes()
        .map(TypeConstraint.Exact::instanceOf);
    }
    allExceptions
      .map(exc -> myTrapTracker.transferValue(new ExceptionTransfer(exc)))
      .map(transfer -> new EnsureInstruction(null, RelationType.EQ, DfType.TOP, transfer))
      .forEach(this::addInstruction);
  }
private void addThrows(Collection<? extends PsiType> exceptions)