diff --git a/pom.xml b/pom.xml index 5b4cc0ba..a597a6b5 100644 --- a/pom.xml +++ b/pom.xml @@ -618,7 +618,7 @@ - + diff --git a/src/main/java/javax/money/Monetary.java b/src/main/java/javax/money/Monetary.java index c8af7ae7..c2d109f1 100644 --- a/src/main/java/javax/money/Monetary.java +++ b/src/main/java/javax/money/Monetary.java @@ -41,7 +41,7 @@ public final class Monetary { /** * The used {@link javax.money.spi.MonetaryCurrenciesSingletonSpi} instance. */ - private static final MonetaryCurrenciesSingletonSpi MONETARY_CURRENCIES_SINGLETON_SPI() { + private static MonetaryCurrenciesSingletonSpi MONETARY_CURRENCIES_SINGLETON_SPI() { try { return Optional.ofNullable(Bootstrap .getService(MonetaryCurrenciesSingletonSpi.class)).orElseGet( @@ -56,7 +56,7 @@ private static final MonetaryCurrenciesSingletonSpi MONETARY_CURRENCIES_SINGLETO /** * The used {@link javax.money.spi.MonetaryAmountsSingletonSpi} instance. */ - private static final MonetaryAmountsSingletonSpi MONETARY_AMOUNTS_SINGLETON_SPI() { + private static MonetaryAmountsSingletonSpi monetaryAmountsSingletonSpi() { try { return Bootstrap.getService(MonetaryAmountsSingletonSpi.class); } catch (Exception e) { @@ -69,7 +69,7 @@ private static final MonetaryAmountsSingletonSpi MONETARY_AMOUNTS_SINGLETON_SPI( /** * The used {@link javax.money.spi.MonetaryAmountsSingletonSpi} instance. */ - private static final MonetaryAmountsSingletonQuerySpi MONETARY_AMOUNTS_SINGLETON_QUERY_SPI() { + private static MonetaryAmountsSingletonQuerySpi MONETARY_AMOUNTS_SINGLETON_QUERY_SPI() { try { return Bootstrap.getService(MonetaryAmountsSingletonQuerySpi.class); } catch (Exception e) { @@ -84,7 +84,7 @@ private static final MonetaryAmountsSingletonQuerySpi MONETARY_AMOUNTS_SINGLETON /** * The used {@link javax.money.spi.MonetaryCurrenciesSingletonSpi} instance. */ - private static final MonetaryRoundingsSingletonSpi MONETARY_ROUNDINGS_SINGLETON_SPI() { + private static MonetaryRoundingsSingletonSpi MONETARY_ROUNDINGS_SINGLETON_SPI() { try { return Optional.ofNullable(Bootstrap .getService(MonetaryRoundingsSingletonSpi.class)) @@ -275,10 +275,10 @@ public static Set getRoundingNames(String... providers) { * implementation class is registered. */ public static MonetaryAmountFactory getAmountFactory(Class amountType) { - Optional.ofNullable(MONETARY_AMOUNTS_SINGLETON_SPI()) + Optional.ofNullable(monetaryAmountsSingletonSpi()) .orElseThrow(() -> new MonetaryException("No MonetaryAmountsSingletonSpi loaded.")); - MonetaryAmountFactory factory = MONETARY_AMOUNTS_SINGLETON_SPI().getAmountFactory(amountType); + MonetaryAmountFactory factory = monetaryAmountsSingletonSpi().getAmountFactory(amountType); return Optional.ofNullable(factory).orElseThrow( () -> new MonetaryException("No AmountFactory available for type: " + amountType.getName())); } @@ -293,7 +293,7 @@ public static MonetaryAmountFactory getAmountFacto * implementation class is registered. */ public static MonetaryAmountFactory getDefaultAmountFactory() { - return Optional.ofNullable(MONETARY_AMOUNTS_SINGLETON_SPI()) + return Optional.ofNullable(monetaryAmountsSingletonSpi()) .orElseThrow(() -> new MonetaryException("No MonetaryAmountsSingletonSpi loaded.")) .getDefaultAmountFactory(); } @@ -306,7 +306,7 @@ public static MonetaryAmountFactory getDefaultAmountFactory() { * corresponding {@link MonetaryAmountFactory} instances provided, never {@code null} */ public static Collection> getAmountFactories() { - return Optional.ofNullable(MONETARY_AMOUNTS_SINGLETON_SPI()) + return Optional.ofNullable(monetaryAmountsSingletonSpi()) .orElseThrow(() -> new MonetaryException("No MonetaryAmountsSingletonSpi loaded.")) .getAmountFactories(); } @@ -319,7 +319,7 @@ public static Collection> getAmountFactories() { * corresponding {@link MonetaryAmountFactory} instances provided, never {@code null} */ public static Collection> getAmountTypes() { - return Optional.ofNullable(MONETARY_AMOUNTS_SINGLETON_SPI()) + return Optional.ofNullable(monetaryAmountsSingletonSpi()) .orElseThrow(() -> new MonetaryException("No MonetaryAmountsSingletonSpi loaded.")).getAmountTypes(); } @@ -330,7 +330,7 @@ public static Collection> getAmountTypes() { * @return all current default {@link MonetaryAmount} implementation class, never {@code null} */ public static Class getDefaultAmountType() { - return Optional.ofNullable(MONETARY_AMOUNTS_SINGLETON_SPI()) + return Optional.ofNullable(monetaryAmountsSingletonSpi()) .orElseThrow(() -> new MonetaryException("No MonetaryAmountsSingletonSpi loaded.")) .getDefaultAmountType(); } diff --git a/src/main/java/javax/money/convert/MonetaryConversions.java b/src/main/java/javax/money/convert/MonetaryConversions.java index a6496e55..e7f9a003 100644 --- a/src/main/java/javax/money/convert/MonetaryConversions.java +++ b/src/main/java/javax/money/convert/MonetaryConversions.java @@ -56,8 +56,12 @@ public final class MonetaryConversions{ * The SPI currently active, use {@link ServiceLoader} to register an * alternate implementation. */ - private static final MonetaryConversionsSingletonSpi getMonetaryConversionsSpi() { - return Optional.of(Bootstrap.getService(MonetaryConversionsSingletonSpi.class)).get(); + private static MonetaryConversionsSingletonSpi getMonetaryConversionsSpi() { + return Optional.ofNullable(Bootstrap.getService(MonetaryConversionsSingletonSpi.class)) + .orElseThrow(() -> new MonetaryException("No MonetaryConversionsSingletonSpi " + + "loaded, " + + "query functionality is not " + + "available.")); } /** @@ -111,11 +115,7 @@ public static CurrencyConversion getConversion(String termCurrencyCode, String.. * @throws IllegalArgumentException if the query defines {@link ExchangeRateProvider}s that are not available. */ public static CurrencyConversion getConversion(ConversionQuery conversionQuery){ - return Optional.ofNullable(getMonetaryConversionsSpi()) - .orElseThrow(() -> new MonetaryException("No MonetaryConversionsSingletonSpi " + - "loaded, " + - "query functionality is not " + - "available.")).getConversion(conversionQuery); + return getMonetaryConversionsSpi().getConversion(conversionQuery); } /** @@ -125,11 +125,7 @@ public static CurrencyConversion getConversion(ConversionQuery conversionQuery){ * @return true, if a conversion is accessible from {@link #getConversion(ConversionQuery)}. */ public static boolean isConversionAvailable(ConversionQuery conversionQuery){ - return Optional.ofNullable(getMonetaryConversionsSpi()) - .orElseThrow(() -> new MonetaryException("No MonetaryConversionsSingletonSpi " + - "loaded, " + - "query functionality is not " + - "available.")).isConversionAvailable(conversionQuery); + return getMonetaryConversionsSpi().isConversionAvailable(conversionQuery); } /** @@ -141,11 +137,7 @@ public static boolean isConversionAvailable(ConversionQuery conversionQuery){ * @return true, if a conversion is accessible from {@link #getConversion(String, String...)}. */ public static boolean isConversionAvailable(String currencyCode, String... providers){ - return Optional.ofNullable(getMonetaryConversionsSpi()) - .orElseThrow(() -> new MonetaryException("No MonetaryConversionsSingletonSpi " + - "loaded, " + - "query functionality is not " + - "available.")) + return getMonetaryConversionsSpi() .isConversionAvailable(Monetary.getCurrency(currencyCode), providers); } @@ -157,11 +149,7 @@ public static boolean isConversionAvailable(String currencyCode, String... provi * @return true, if a conversion is accessible from {@link #getConversion(String, String...)}. */ public static boolean isConversionAvailable(CurrencyUnit termCurrency, String... providers){ - return Optional.ofNullable(getMonetaryConversionsSpi()) - .orElseThrow(() -> new MonetaryException("No MonetaryConversionsSingletonSpi " + - "loaded, " + - "query functionality is not " + - "available.")) + return getMonetaryConversionsSpi() .isConversionAvailable(termCurrency, providers); } @@ -203,7 +191,7 @@ public static ExchangeRateProvider getExchangeRateProvider( List suppliers = new ArrayList<>(); suppliers.add(Objects.requireNonNull(provider)); - Stream.of(providers).forEach(suppliers::add); + suppliers.addAll(Arrays.asList(providers)); String[] array = suppliers.stream() .map(ExchangeRateProviderSupplier::get).toArray(String[]::new); @@ -219,8 +207,7 @@ public static ExchangeRateProvider getExchangeRateProvider( * @throws IllegalArgumentException if no such {@link ExchangeRateProvider} is available. */ public static ExchangeRateProvider getExchangeRateProvider(ConversionQuery conversionQuery){ - return Optional.ofNullable(getMonetaryConversionsSpi()).orElseThrow(() -> new MonetaryException( - "No MonetaryConversionsSingletonSpi loaded, query functionality is not available.")) + return getMonetaryConversionsSpi() .getExchangeRateProvider(conversionQuery); } @@ -231,11 +218,7 @@ public static ExchangeRateProvider getExchangeRateProvider(ConversionQuery conve * @return true, if a rate provider is accessible from {@link #getExchangeRateProvider(ConversionQuery)}}. */ public static boolean isExchangeRateProviderAvailable(ConversionQuery conversionQuery){ - return Optional.ofNullable(getMonetaryConversionsSpi()) - .orElseThrow(() -> new MonetaryException("No MonetaryConversionsSingletonSpi " + - "loaded, " + - "query functionality is not " + - "available.")) + return getMonetaryConversionsSpi() .isExchangeRateProviderAvailable(conversionQuery); } @@ -248,10 +231,7 @@ public static boolean isExchangeRateProviderAvailable(ConversionQuery conversion * @return all supported provider ids, never {@code null}. */ public static Collection getConversionProviderNames(){ - Collection providers = Optional.ofNullable(getMonetaryConversionsSpi()).orElseThrow( - () -> new MonetaryException( - "No MonetaryConversionsSingletonSpi loaded, query functionality is not available.")) - .getProviderNames(); + Collection providers = getMonetaryConversionsSpi().getProviderNames(); if(Objects.isNull(providers)){ Logger.getLogger(MonetaryConversions.class.getName()).warning( "No supported rate/conversion providers returned by SPI: " + @@ -267,9 +247,7 @@ public static Collection getConversionProviderNames(){ * @return the default provider, never {@code null}. */ public static List getDefaultConversionProviderChain(){ - List defaultChain = Optional.ofNullable(getMonetaryConversionsSpi()).orElseThrow( - () -> new MonetaryException( - "No MonetaryConversionsSingletonSpi loaded, query functionality is not available.")) + List defaultChain = getMonetaryConversionsSpi() .getDefaultProviderChain(); Objects.requireNonNull(defaultChain, "No default provider chain provided by SPI: " + getMonetaryConversionsSpi().getClass().getName()); diff --git a/src/main/java/javax/money/format/MonetaryFormats.java b/src/main/java/javax/money/format/MonetaryFormats.java index eb254636..8014dedf 100644 --- a/src/main/java/javax/money/format/MonetaryFormats.java +++ b/src/main/java/javax/money/format/MonetaryFormats.java @@ -27,7 +27,7 @@ */ public final class MonetaryFormats { - private static final MonetaryFormatsSingletonSpi getMonetaryFormatsSpi() { + private static MonetaryFormatsSingletonSpi getMonetaryFormatsSpi() { return loadMonetaryFormatsSingletonSpi(); } diff --git a/src/main/java/javax/money/spi/Bootstrap.java b/src/main/java/javax/money/spi/Bootstrap.java index 33cdb72b..b89de3cc 100644 --- a/src/main/java/javax/money/spi/Bootstrap.java +++ b/src/main/java/javax/money/spi/Bootstrap.java @@ -8,10 +8,7 @@ */ package javax.money.spi; -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import java.util.ServiceLoader; +import java.util.*; import java.util.logging.Logger; /** @@ -44,6 +41,7 @@ private Bootstrap() { */ private static ServiceProvider loadDefaultServiceProvider() { try { + //noinspection LoopStatementThatDoesntLoop for (ServiceProvider sp : ServiceLoader.load(ServiceProvider.class)) { return sp; } @@ -115,7 +113,7 @@ public static T getService(Class serviceType) { List services = getServiceProvider().getServices(serviceType); return services .stream() - .sorted((o1, o2) -> o1.getClass().getSimpleName().compareTo(o2.getClass().getSimpleName())) + .sorted(Comparator.comparing(o -> o.getClass().getSimpleName())) .findFirst() .orElse(null); } diff --git a/src/main/java/javax/money/spi/ServiceProvider.java b/src/main/java/javax/money/spi/ServiceProvider.java index 2c78b7aa..14b02a4f 100644 --- a/src/main/java/javax/money/spi/ServiceProvider.java +++ b/src/main/java/javax/money/spi/ServiceProvider.java @@ -27,7 +27,7 @@ public interface ServiceProvider { * * @return the provider's priority (default is 0). */ - public int getPriority(); + int getPriority(); /** * Access a list of services, given its type. The bootstrap mechanism should