private boolean checkSameBounds(TypeVar tv1,TypeVar tv2){
  TypePair p=new TypePair(tv1,tv2,true);
  if (cache.add(p)) {
    try {
      return visit(tv1.getUpperBound(),tv2.getUpperBound());
    }
  finally {
      cache.remove(p);
    }
  }
 else {
    return false;
  }
}

private boolean checkSameBounds ( TypeVar tv1 , TypeVar tv2 ) { TypePair p = new TypePair ( tv1 , tv2 , true ) ; if ( cache . add ( p ) ) { try { return visit ( tv1 . getUpperBound ( ) , tv2 . getUpperBound ( ) ) ; } finally { cache . remove ( p ) ; } } else { return false ; } }
since type - variable bounds can be recursive , we need to protect against infinite loops - where the same bounds are checked over and over recursively .
