src/java.base/share/classes/sun/util/locale/provider/SPILocaleProviderAdapter.java

Print this page
rev 11100 : 8062588: Support java.util.spi.*, java.text.spi.*, java.awt.im.spi loaded from classpath
Reviewed-by:


  60  */
  61 public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter {
  62 
  63     /**
  64      * Returns the type of this LocaleProviderAdapter
  65      */
  66     @Override
  67     public LocaleProviderAdapter.Type getAdapterType() {
  68         return LocaleProviderAdapter.Type.SPI;
  69     }
  70 
  71     @Override
  72     protected <P extends LocaleServiceProvider> P findInstalledProvider(final Class<P> c) {
  73         try {
  74             return AccessController.doPrivileged(new PrivilegedExceptionAction<P>() {
  75                 @Override
  76                 @SuppressWarnings("unchecked")
  77                 public P run() {
  78                     P delegate = null;
  79 
  80                     for (LocaleServiceProvider provider : ServiceLoader.loadInstalled(c)) {
  81                         if (delegate == null) {
  82                             try {
  83                                 delegate =
  84                                     (P) Class.forName(SPILocaleProviderAdapter.class.getCanonicalName() +
  85                                               "$" +
  86                                               c.getSimpleName() +
  87                                               "Delegate")
  88                                               .newInstance();
  89                             }  catch (ClassNotFoundException |
  90                                       InstantiationException |
  91                                       IllegalAccessException e) {
  92                                 LocaleServiceProviderPool.config(SPILocaleProviderAdapter.class, e.toString());
  93                                 return null;
  94                             }
  95                         }
  96 
  97                         ((Delegate)delegate).addImpl(provider);
  98                     }
  99                     return delegate;
 100                 }




  60  */
  61 public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter {
  62 
  63     /**
  64      * Returns the type of this LocaleProviderAdapter
  65      */
  66     @Override
  67     public LocaleProviderAdapter.Type getAdapterType() {
  68         return LocaleProviderAdapter.Type.SPI;
  69     }
  70 
  71     @Override
  72     protected <P extends LocaleServiceProvider> P findInstalledProvider(final Class<P> c) {
  73         try {
  74             return AccessController.doPrivileged(new PrivilegedExceptionAction<P>() {
  75                 @Override
  76                 @SuppressWarnings("unchecked")
  77                 public P run() {
  78                     P delegate = null;
  79 
  80                     for (LocaleServiceProvider provider : ServiceLoader.load(c)) {
  81                         if (delegate == null) {
  82                             try {
  83                                 delegate =
  84                                     (P) Class.forName(SPILocaleProviderAdapter.class.getCanonicalName() +
  85                                               "$" +
  86                                               c.getSimpleName() +
  87                                               "Delegate")
  88                                               .newInstance();
  89                             }  catch (ClassNotFoundException |
  90                                       InstantiationException |
  91                                       IllegalAccessException e) {
  92                                 LocaleServiceProviderPool.config(SPILocaleProviderAdapter.class, e.toString());
  93                                 return null;
  94                             }
  95                         }
  96 
  97                         ((Delegate)delegate).addImpl(provider);
  98                     }
  99                     return delegate;
 100                 }