boolean isFullyIncorporated() {
    boolean needFurtherIncorporation = false;
    for (InferenceVariable inferenceVariable : mySession.getInferenceVariables()) {
      if (inferenceVariable.getInstantiation() != PsiTypes.nullType()) continue;
      Map<InferenceBound, Set<PsiType>> boundsMap = myCurrentBounds.remove(inferenceVariable);
      if (boundsMap == null) continue;
      final Set<PsiType> upperBounds = boundsMap.get(InferenceBound.UPPER);
      final Set<PsiType> lowerBounds = boundsMap.get(InferenceBound.LOWER);
      if (upperBounds != null) {
        needFurtherIncorporation |= crossVariables(inferenceVariable, upperBounds, lowerBounds, InferenceBound.LOWER);
      }
      if (lowerBounds != null) {
        needFurtherIncorporation |= crossVariables(inferenceVariable, lowerBounds, upperBounds, InferenceBound.UPPER);
      }
    }
    return !needFurtherIncorporation;
  }
boolean isFullyIncorporated()