docs: private static boolean typeEquals(ParameterizedType from,
  			ParameterizedType to, Map<String, Type> typeVarMap) {
  		if (from.getRawType().equals(to.getRawType())) {
  			Type[] fromArgs = from.getActualTypeArguments();
  			Type[] toArgs = to.getActualTypeArguments();
  			for (int i = 0; i < fromArgs.length; i++) {
  				if (!matches(fromArgs[i], toArgs[i], typeVarMap)) {
  					return false;
  				}
  			}
  			return true;
  		}
  		return false;
  	}