From 6c62e2d0f18bbdc5177b64edfd9563571b07b6aa Mon Sep 17 00:00:00 2001 From: Naoto Sato Date: Thu, 15 Nov 2012 20:17:05 -0800 Subject: [PATCH] 7199750: Loading sequence of service provider is changed Reviewed-by: okutsu --- .../provider/SPILocaleProviderAdapter.java | 26 +++++++++--------- .../CurrencyNameProviderTest.sh | 2 +- .../java/util/PluggableLocale/barprovider.jar | Bin 14629 -> 14680 bytes .../CurrencyNameProviderImpl2.java | 19 +++++++++---- 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/jdk/src/share/classes/sun/util/locale/provider/SPILocaleProviderAdapter.java b/jdk/src/share/classes/sun/util/locale/provider/SPILocaleProviderAdapter.java index 1d380e38ac2..15de9f52283 100644 --- a/jdk/src/share/classes/sun/util/locale/provider/SPILocaleProviderAdapter.java +++ b/jdk/src/share/classes/sun/util/locale/provider/SPILocaleProviderAdapter.java @@ -91,7 +91,7 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { IllegalAccessException e) { LocaleServiceProviderPool.config(SPILocaleProviderAdapter.class, e.toString()); return null; - } + } } ((Delegate)delegate).addImpl(provider); @@ -112,7 +112,7 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { interface Delegate

{ public void addImpl(P impl); public P getImpl(Locale locale); -} + } /* * Obtain the real SPI implementation, using locale fallback @@ -137,7 +137,7 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { @Override public void addImpl(BreakIteratorProvider impl) { for (Locale l : impl.getAvailableLocales()) { - map.put(l, impl); + map.putIfAbsent(l, impl); } } @@ -192,7 +192,7 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { @Override public void addImpl(CollatorProvider impl) { for (Locale l : impl.getAvailableLocales()) { - map.put(l, impl); + map.putIfAbsent(l, impl); } } @@ -226,7 +226,7 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { @Override public void addImpl(DateFormatProvider impl) { for (Locale l : impl.getAvailableLocales()) { - map.put(l, impl); + map.putIfAbsent(l, impl); } } @@ -274,7 +274,7 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { @Override public void addImpl(DateFormatSymbolsProvider impl) { for (Locale l : impl.getAvailableLocales()) { - map.put(l, impl); + map.putIfAbsent(l, impl); } } @@ -308,7 +308,7 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { @Override public void addImpl(DecimalFormatSymbolsProvider impl) { for (Locale l : impl.getAvailableLocales()) { - map.put(l, impl); + map.putIfAbsent(l, impl); } } @@ -342,7 +342,7 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { @Override public void addImpl(NumberFormatProvider impl) { for (Locale l : impl.getAvailableLocales()) { - map.put(l, impl); + map.putIfAbsent(l, impl); } } @@ -397,7 +397,7 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { @Override public void addImpl(CalendarDataProvider impl) { for (Locale l : impl.getAvailableLocales()) { - map.put(l, impl); + map.putIfAbsent(l, impl); } } @@ -438,7 +438,7 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { @Override public void addImpl(CalendarNameProvider impl) { for (Locale l : impl.getAvailableLocales()) { - map.put(l, impl); + map.putIfAbsent(l, impl); } } @@ -483,7 +483,7 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { @Override public void addImpl(CurrencyNameProvider impl) { for (Locale l : impl.getAvailableLocales()) { - map.put(l, impl); + map.putIfAbsent(l, impl); } } @@ -524,7 +524,7 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { @Override public void addImpl(LocaleNameProvider impl) { for (Locale l : impl.getAvailableLocales()) { - map.put(l, impl); + map.putIfAbsent(l, impl); } } @@ -579,7 +579,7 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { @Override public void addImpl(TimeZoneNameProvider impl) { for (Locale l : impl.getAvailableLocales()) { - map.put(l, impl); + map.putIfAbsent(l, impl); } } diff --git a/jdk/test/java/util/PluggableLocale/CurrencyNameProviderTest.sh b/jdk/test/java/util/PluggableLocale/CurrencyNameProviderTest.sh index 9cfc700766a..8fb9459116c 100644 --- a/jdk/test/java/util/PluggableLocale/CurrencyNameProviderTest.sh +++ b/jdk/test/java/util/PluggableLocale/CurrencyNameProviderTest.sh @@ -23,6 +23,6 @@ #!/bin/sh # # @test -# @bug 4052440 8000997 +# @bug 4052440 7199750 8000997 # @summary CurrencyNameProvider tests # @run shell ExecTest.sh bar CurrencyNameProviderTest true diff --git a/jdk/test/java/util/PluggableLocale/barprovider.jar b/jdk/test/java/util/PluggableLocale/barprovider.jar index 7f621fa3c67efb04fdf6b540bf94461bfdb87d0c..deed5facccbba17157bb62d49f5f82c70e7bbaf6 100644 GIT binary patch delta 1909 zcmZux3pkWn82;y$VTJ~SVO+*wG^S!OW=e9aTqc){TPwGrtJ}JyHZ(4~vb4GU4BN^^ zF1wLp6nV-DZ6qWs#p)i_Ls3Lg?f?Hu?C$xW^Ze(W@BPks&-b18D~q}lCF{z^V95X; zj|X@$;n}k5G4RjP-TGO%o^pO^DI>3(wP#jEk1<+mz#COjdZMBy2F{1Pj+%@@0j_*0 z{8YQetN;K2cc{aA$p8QzfcF9)VzuDSKnzX?`CAaQ!67qc$q8jV8eWiC5O(1(TnJ%7 zP?K2Eu~=mCN@|_R-AB;pO8V#=Azia$HLWBKw^^_%H-qjZ-Cy0(xW zDWtOLH0=O)8$4S+XkL9(n4A%(klbJ>bZfzEjhwAZQO&iE;L+xaoJQJ0H z7E_Y1HmHdl5HW+qW0xAMA_HEzbzJb!d3D7sG}?b?+jw3{ zS!U*hY2eg@EtG+8eVb1iX$Ea?291h@KNNpjnW^OKMMy8IC6txyYskF+)T6V1Yf5ot z(U{PokBPIbf7!3tU-(;Ks#rTUtXO2j44Tj7l70(|g^* zG6j{pt*S*cAro$XZ=Q(D)Xa&kvYG?$D%?*v*UEk34x}FJ<**p3au**`$3xo!DsR`C zcnZ%ntzk9_Mg>9EJBRan@`oBweJY1fi+qGW&rT)uIn5nOe{7i;Zr#{-gm#y&W~o{) zC%&@rQ1dUkwna6+2ItzipS1AU^FT4)ZhyPE?p$Q0C_O$Cn2%|qJ&~TDRK#vPIYYiO z#{C(QNqvf;g(x4p%I`avuZp9xJ+fHSthzcjp9KmlMJZ3LD?`f#TF1kHhHePYa zDx^*|vfVy_c&b3>Vq#?J-l6Ish5F0;K16vDCe>y?jpek3i|=&BT^h-vU$h?+rwzZ} z9!sA-Yqlv1*Q1n`;xFIv-o;_lppHg%w{dlFZPNWiDg&0SUX~_)Pkl4f<_WO=y1eDX z=okQqTd|0Q6I2f$O*=$zw`40s-w9 zdXi337W%U~RV7_i*A>!Vr9HTof$V@We1j$|(R_CQ8bs=vST^{{m<&3i5|+&IV2242 z>_NvZt{ujlK*rZmmp`vH$fD3>V39S5G3LoawZeL_%z*aB91gq!)tkkJT^zxKTTl;* z2s3o$qtG(I64s_v>eOeOFfaoV6}WJIUjl21KAvX%-roGJVx;6w<20KZzpaYkP+^z0B@efVtO(n_#0Am?A zSr^>TT}@aT*-$fGhfSPMzm6%hf)+9PIfX!P2k(7@>Ef2SqUn2M&Z z1yQEtW$}We(hQmSut_J!L<_mYIOtLp2+>J`y6G}nB*O)q6!gj{2v$8TG$jJU6#oa? z2V-pz5Str!EdT-}K;0PXUt6gW1fqj;D23Ha^9UyZLrK^8e-^=P#K{FqR(9p%p!flR N3iMH>06-tv{vWgKjVJ&B delta 1793 zcmaJ>4K!3~7{2o(Gh-&d!*C~Qn8}zh7-qyNHYuhuB4Lm6Ta=PfYqvcaD?93(N_bA%v_KCqxhLoKN{vPS z(q64ZVGPDpwaX@`4OkQyBRfhm0(^8`weHS>vt{|E8Zs*edG76g? zv#$N}W2;jBYu7((`-HJwQG#)Rq2(Dbx>U&S6|Rc2*~jJ899~b?&!_Cl=s;r!L4O;TgUk3=UX^(qlgjfNa=u;&9{n?b;n~moP7J`A-mol zhE$$hl%INwT7>uZ3hCrY?mo(#Ig`#zsXY5sIJ5oEgJ)4kHoUo$+mUmi$X#yIBWu+i z5>@bJ=hitkJ;onesfm5(ay3x_h5Bok8r2y+HJtui9Q{Fl(R=*DrF#)O8iHoe`dRL@ zqev$_yE1bMd`Qx5H6pLgabHQ_OLKA}vTha`x20ga>f#RW!k3=3Y?F+nci*l!ucxIM z3_IlnpTD@N#JkhEEt`Bg^K|G4ogIF2BCtH}(Y%@1d!H~ST?Qq4zjWf;)Y+O7C@J6rA( zTd>77f^z>>OYzIZDyLbO*@@)Ihr;WgPBpf^^xC2F!aVz+gtDOWj|J9mUgl|(dZ~r* z10?m&Hr-U$6h10Re==#9D4{_$s~eemxS^PJU6>-^ds}-nK{g-8G=o|$6$J9hL>0$XJp~^I z9`dP}DFip2pD8qyohpE_H5gFG<$>1%G77cuVeBz10x=M#9x$GVEfJ;*4uzuyCMa_l zfwb`;(Z)d{5@N6|iWc1Dvwsp(@b<#%5`O zHhX>G>|lsO0roJ~TNi=oKnZJsKY4Rif)T?2eIS@Oyn(Q?X$VVz#xJiR*BT=iDv<&~ ztR?ZU!XVeo90c2uQR4o_eJ@&Z5OiJr-$X+Ok|;_<(;y)M*0PWQG_c;@0EMD?FxHg~ zPVy`?7L^`cbAY2-t>%inCnn~T?&{Uzy5EH&J5I4U~MDl9rAE>0v= SLk=*^b+&w0{7bdXGo| diff --git a/jdk/test/java/util/PluggableLocale/providersrc/CurrencyNameProviderImpl2.java b/jdk/test/java/util/PluggableLocale/providersrc/CurrencyNameProviderImpl2.java index 5ed7222f95e..80dab1715fc 100644 --- a/jdk/test/java/util/PluggableLocale/providersrc/CurrencyNameProviderImpl2.java +++ b/jdk/test/java/util/PluggableLocale/providersrc/CurrencyNameProviderImpl2.java @@ -32,7 +32,8 @@ import java.util.spi.*; import com.foobar.Utils; public class CurrencyNameProviderImpl2 extends CurrencyNameProvider { - static Locale[] avail = {new Locale("ja", "JP", "tokyo")}; + static Locale[] avail = {new Locale("ja", "JP", "tokyo"), + new Locale("ja", "JP", "osaka"), }; public Locale[] getAvailableLocales() { return avail; } @@ -43,8 +44,12 @@ public class CurrencyNameProviderImpl2 extends CurrencyNameProvider { throw new IllegalArgumentException("locale is not supported: "+locale); } - if (c.equals("JPY") && Utils.supportsLocale(avail[0], locale)) { - return "JPY-tokyo"; + if (c.equals("JPY")) { + if (Utils.supportsLocale(avail[0], locale)) { + return "JPY-tokyo"; + } else if (Utils.supportsLocale(avail[1], locale)) { + return "JPY-osaka"; + } } return null; } @@ -55,8 +60,12 @@ public class CurrencyNameProviderImpl2 extends CurrencyNameProvider { throw new IllegalArgumentException("locale is not supported: "+locale); } - if (c.equals("JPY") && Utils.supportsLocale(avail[0], locale)) { - return "JPY-tokyo"; + if (c.equals("JPY")) { + if (Utils.supportsLocale(avail[0], locale)) { + return "JPY-tokyo"; + } else if (Utils.supportsLocale(avail[1], locale)) { + return "JPY-osaka"; + } } return null; }