code: private static Type unrollVariableAssignments(TypeVariable<?> var, final Map<TypeVariable<?>, Type> typeVarAssigns) {
          Type result;
          do {
              result = typeVarAssigns.get(var);
              if (result instanceof TypeVariable<?> && !result.equals(var)) {
                  var = (TypeVariable<?>) result;
                  continue;
              }
              break;
          } while (true);
          return result;
      }
docs: Look up {@code var} in {@code typeVarAssigns} <em>transitively</em>,
  i.e. keep looking until the value found is <em>not</em> a type variable.
  
  @param var            the type variable to look up
  @param typeVarAssigns the map used for the look up
  @return Type or {@code null} if some variable was not in the map
  @since 3.2