code: public Set<CurrencyUnit> getCurrencies(CurrencyQuery currencyQuery) {
          Set<CurrencyUnit> result = new HashSet<>(CURRENCY_UNITS.size());
          if (currencyQuery.get(LocalDateTime.class) != null || currencyQuery.get(LocalDate.class) != null) {
              return Collections.emptySet();
          }
          if (!currencyQuery.getCurrencyCodes().isEmpty()) {
              for (String code : currencyQuery.getCurrencyCodes()) {
                  CurrencyUnit cu = CURRENCY_UNITS.get(code);
                  if (cu != null) {
                      result.add(cu);
                  }
              }
              return result;
          }
          if (!currencyQuery.getCountries().isEmpty()) {
              for (Locale locale : currencyQuery.getCountries()) {
                  CurrencyUnit cu = CURRENCY_UNITS_BY_LOCALE.get(locale);
                  if (cu != null) {
                      result.add(cu);
                  }
              }
              return result;
          }
          result.addAll(CURRENCY_UNITS.values());
          return result;
      }
docs: Return a {@link CurrencyUnit} instances matching the given
  {@link javax.money.CurrencyContext}.
  
  @param currencyQuery the {@link javax.money.CurrencyQuery} containing the parameters determining the query. not null.
  @return the corresponding {@link CurrencyUnit}, or null, if no such unit
  is provided by this provider.