private void upDown(Collection<? extends PsiType> eqBounds, Collection<? extends PsiType> upperBounds) {
    for (PsiType upperBound : upperBounds) {
      if (upperBound == null || PsiTypes.nullType().equals(upperBound) || upperBound instanceof PsiWildcardType) continue;

      for (PsiType eqBound : eqBounds) {
        if (eqBound == null || PsiTypes.nullType().equals(eqBound) || eqBound instanceof PsiWildcardType) continue;
        if (Registry.is("javac.unchecked.subtyping.during.incorporation", true)) {
          if (TypeCompatibilityConstraint.isUncheckedConversion(upperBound, eqBound, mySession)) {
            if (PsiUtil.resolveClassInType(eqBound) instanceof PsiTypeParameter && !mySession.isProperType(upperBound)) {
              mySession.setErased();
            }
            continue;
          }

          if (!mySession.isProperType(upperBound) &&
              eqBound instanceof PsiCapturedWildcardType && 
              TypeCompatibilityConstraint.isUncheckedConversion(upperBound, ((PsiCapturedWildcardType)eqBound).getUpperBound(), mySession)) {
            mySession.setErased();
            continue;
          }
        }

        addConstraint(new StrictSubtypingConstraint(upperBound, eqBound));
      }
    }
  }
private void upDown(Collection<? extends PsiType> eqBounds, Collection<? extends PsiType> upperBounds)