--- a/jdk/make/data/characterdata/CharacterData00.java.template Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/make/data/characterdata/CharacterData00.java.template Thu Oct 22 11:14:00 2015 -0700
@@ -136,101 +136,179 @@
if ((val & $$maskLowerCase) != 0) {
if ((val & $$maskCaseOffset) == $$maskCaseOffset) {
switch(ch) {
- // map the offset overflow chars
- case 0x0130 : mapChar = 0x0069; break;
- case 0x2126 : mapChar = 0x03C9; break;
- case 0x212A : mapChar = 0x006B; break;
- case 0x212B : mapChar = 0x00E5; break;
- // map the titlecase chars with both a 1:M uppercase map
- // and a lowercase map
- case 0x1F88 : mapChar = 0x1F80; break;
- case 0x1F89 : mapChar = 0x1F81; break;
- case 0x1F8A : mapChar = 0x1F82; break;
- case 0x1F8B : mapChar = 0x1F83; break;
- case 0x1F8C : mapChar = 0x1F84; break;
- case 0x1F8D : mapChar = 0x1F85; break;
- case 0x1F8E : mapChar = 0x1F86; break;
- case 0x1F8F : mapChar = 0x1F87; break;
- case 0x1F98 : mapChar = 0x1F90; break;
- case 0x1F99 : mapChar = 0x1F91; break;
- case 0x1F9A : mapChar = 0x1F92; break;
- case 0x1F9B : mapChar = 0x1F93; break;
- case 0x1F9C : mapChar = 0x1F94; break;
- case 0x1F9D : mapChar = 0x1F95; break;
- case 0x1F9E : mapChar = 0x1F96; break;
- case 0x1F9F : mapChar = 0x1F97; break;
- case 0x1FA8 : mapChar = 0x1FA0; break;
- case 0x1FA9 : mapChar = 0x1FA1; break;
- case 0x1FAA : mapChar = 0x1FA2; break;
- case 0x1FAB : mapChar = 0x1FA3; break;
- case 0x1FAC : mapChar = 0x1FA4; break;
- case 0x1FAD : mapChar = 0x1FA5; break;
- case 0x1FAE : mapChar = 0x1FA6; break;
- case 0x1FAF : mapChar = 0x1FA7; break;
- case 0x1FBC : mapChar = 0x1FB3; break;
- case 0x1FCC : mapChar = 0x1FC3; break;
- case 0x1FFC : mapChar = 0x1FF3; break;
-
- case 0x023A : mapChar = 0x2C65; break;
- case 0x023E : mapChar = 0x2C66; break;
- case 0x10A0 : mapChar = 0x2D00; break;
- case 0x10A1 : mapChar = 0x2D01; break;
- case 0x10A2 : mapChar = 0x2D02; break;
- case 0x10A3 : mapChar = 0x2D03; break;
- case 0x10A4 : mapChar = 0x2D04; break;
- case 0x10A5 : mapChar = 0x2D05; break;
- case 0x10A6 : mapChar = 0x2D06; break;
- case 0x10A7 : mapChar = 0x2D07; break;
- case 0x10A8 : mapChar = 0x2D08; break;
- case 0x10A9 : mapChar = 0x2D09; break;
- case 0x10AA : mapChar = 0x2D0A; break;
- case 0x10AB : mapChar = 0x2D0B; break;
- case 0x10AC : mapChar = 0x2D0C; break;
- case 0x10AD : mapChar = 0x2D0D; break;
- case 0x10AE : mapChar = 0x2D0E; break;
- case 0x10AF : mapChar = 0x2D0F; break;
- case 0x10B0 : mapChar = 0x2D10; break;
- case 0x10B1 : mapChar = 0x2D11; break;
- case 0x10B2 : mapChar = 0x2D12; break;
- case 0x10B3 : mapChar = 0x2D13; break;
- case 0x10B4 : mapChar = 0x2D14; break;
- case 0x10B5 : mapChar = 0x2D15; break;
- case 0x10B6 : mapChar = 0x2D16; break;
- case 0x10B7 : mapChar = 0x2D17; break;
- case 0x10B8 : mapChar = 0x2D18; break;
- case 0x10B9 : mapChar = 0x2D19; break;
- case 0x10BA : mapChar = 0x2D1A; break;
- case 0x10BB : mapChar = 0x2D1B; break;
- case 0x10BC : mapChar = 0x2D1C; break;
- case 0x10BD : mapChar = 0x2D1D; break;
- case 0x10BE : mapChar = 0x2D1E; break;
- case 0x10BF : mapChar = 0x2D1F; break;
- case 0x10C0 : mapChar = 0x2D20; break;
- case 0x10C1 : mapChar = 0x2D21; break;
- case 0x10C2 : mapChar = 0x2D22; break;
- case 0x10C3 : mapChar = 0x2D23; break;
- case 0x10C4 : mapChar = 0x2D24; break;
- case 0x10C5 : mapChar = 0x2D25; break;
- case 0x10C7 : mapChar = 0x2D27; break;
- case 0x10CD : mapChar = 0x2D2D; break;
- case 0x1E9E : mapChar = 0x00DF; break;
- case 0x2C62 : mapChar = 0x026B; break;
- case 0x2C63 : mapChar = 0x1D7D; break;
- case 0x2C64 : mapChar = 0x027D; break;
- case 0x2C6D : mapChar = 0x0251; break;
- case 0x2C6E : mapChar = 0x0271; break;
- case 0x2C6F : mapChar = 0x0250; break;
- case 0x2C70 : mapChar = 0x0252; break;
- case 0x2C7E : mapChar = 0x023F; break;
- case 0x2C7F : mapChar = 0x0240; break;
- case 0xA77D : mapChar = 0x1D79; break;
- case 0xA78D : mapChar = 0x0265; break;
- case 0xA7AA : mapChar = 0x0266; break;
- case 0xA7AB : mapChar = 0x025C; break;
- case 0xA7AC : mapChar = 0x0261; break;
- case 0xA7AD : mapChar = 0x026C; break;
- case 0xA7B0 : mapChar = 0x029E; break;
- case 0xA7B1 : mapChar = 0x0287; break;
+ case 0x0130: mapChar = 0x0069; break;
+ case 0x023A: mapChar = 0x2C65; break;
+ case 0x023E: mapChar = 0x2C66; break;
+ case 0x10A0: mapChar = 0x2D00; break;
+ case 0x10A1: mapChar = 0x2D01; break;
+ case 0x10A2: mapChar = 0x2D02; break;
+ case 0x10A3: mapChar = 0x2D03; break;
+ case 0x10A4: mapChar = 0x2D04; break;
+ case 0x10A5: mapChar = 0x2D05; break;
+ case 0x10A6: mapChar = 0x2D06; break;
+ case 0x10A7: mapChar = 0x2D07; break;
+ case 0x10A8: mapChar = 0x2D08; break;
+ case 0x10A9: mapChar = 0x2D09; break;
+ case 0x10AA: mapChar = 0x2D0A; break;
+ case 0x10AB: mapChar = 0x2D0B; break;
+ case 0x10AC: mapChar = 0x2D0C; break;
+ case 0x10AD: mapChar = 0x2D0D; break;
+ case 0x10AE: mapChar = 0x2D0E; break;
+ case 0x10AF: mapChar = 0x2D0F; break;
+ case 0x10B0: mapChar = 0x2D10; break;
+ case 0x10B1: mapChar = 0x2D11; break;
+ case 0x10B2: mapChar = 0x2D12; break;
+ case 0x10B3: mapChar = 0x2D13; break;
+ case 0x10B4: mapChar = 0x2D14; break;
+ case 0x10B5: mapChar = 0x2D15; break;
+ case 0x10B6: mapChar = 0x2D16; break;
+ case 0x10B7: mapChar = 0x2D17; break;
+ case 0x10B8: mapChar = 0x2D18; break;
+ case 0x10B9: mapChar = 0x2D19; break;
+ case 0x10BA: mapChar = 0x2D1A; break;
+ case 0x10BB: mapChar = 0x2D1B; break;
+ case 0x10BC: mapChar = 0x2D1C; break;
+ case 0x10BD: mapChar = 0x2D1D; break;
+ case 0x10BE: mapChar = 0x2D1E; break;
+ case 0x10BF: mapChar = 0x2D1F; break;
+ case 0x10C0: mapChar = 0x2D20; break;
+ case 0x10C1: mapChar = 0x2D21; break;
+ case 0x10C2: mapChar = 0x2D22; break;
+ case 0x10C3: mapChar = 0x2D23; break;
+ case 0x10C4: mapChar = 0x2D24; break;
+ case 0x10C5: mapChar = 0x2D25; break;
+ case 0x10C7: mapChar = 0x2D27; break;
+ case 0x10CD: mapChar = 0x2D2D; break;
+ case 0x13A0: mapChar = 0xAB70; break;
+ case 0x13A1: mapChar = 0xAB71; break;
+ case 0x13A2: mapChar = 0xAB72; break;
+ case 0x13A3: mapChar = 0xAB73; break;
+ case 0x13A4: mapChar = 0xAB74; break;
+ case 0x13A5: mapChar = 0xAB75; break;
+ case 0x13A6: mapChar = 0xAB76; break;
+ case 0x13A7: mapChar = 0xAB77; break;
+ case 0x13A8: mapChar = 0xAB78; break;
+ case 0x13A9: mapChar = 0xAB79; break;
+ case 0x13AA: mapChar = 0xAB7A; break;
+ case 0x13AB: mapChar = 0xAB7B; break;
+ case 0x13AC: mapChar = 0xAB7C; break;
+ case 0x13AD: mapChar = 0xAB7D; break;
+ case 0x13AE: mapChar = 0xAB7E; break;
+ case 0x13AF: mapChar = 0xAB7F; break;
+ case 0x13B0: mapChar = 0xAB80; break;
+ case 0x13B1: mapChar = 0xAB81; break;
+ case 0x13B2: mapChar = 0xAB82; break;
+ case 0x13B3: mapChar = 0xAB83; break;
+ case 0x13B4: mapChar = 0xAB84; break;
+ case 0x13B5: mapChar = 0xAB85; break;
+ case 0x13B6: mapChar = 0xAB86; break;
+ case 0x13B7: mapChar = 0xAB87; break;
+ case 0x13B8: mapChar = 0xAB88; break;
+ case 0x13B9: mapChar = 0xAB89; break;
+ case 0x13BA: mapChar = 0xAB8A; break;
+ case 0x13BB: mapChar = 0xAB8B; break;
+ case 0x13BC: mapChar = 0xAB8C; break;
+ case 0x13BD: mapChar = 0xAB8D; break;
+ case 0x13BE: mapChar = 0xAB8E; break;
+ case 0x13BF: mapChar = 0xAB8F; break;
+ case 0x13C0: mapChar = 0xAB90; break;
+ case 0x13C1: mapChar = 0xAB91; break;
+ case 0x13C2: mapChar = 0xAB92; break;
+ case 0x13C3: mapChar = 0xAB93; break;
+ case 0x13C4: mapChar = 0xAB94; break;
+ case 0x13C5: mapChar = 0xAB95; break;
+ case 0x13C6: mapChar = 0xAB96; break;
+ case 0x13C7: mapChar = 0xAB97; break;
+ case 0x13C8: mapChar = 0xAB98; break;
+ case 0x13C9: mapChar = 0xAB99; break;
+ case 0x13CA: mapChar = 0xAB9A; break;
+ case 0x13CB: mapChar = 0xAB9B; break;
+ case 0x13CC: mapChar = 0xAB9C; break;
+ case 0x13CD: mapChar = 0xAB9D; break;
+ case 0x13CE: mapChar = 0xAB9E; break;
+ case 0x13CF: mapChar = 0xAB9F; break;
+ case 0x13D0: mapChar = 0xABA0; break;
+ case 0x13D1: mapChar = 0xABA1; break;
+ case 0x13D2: mapChar = 0xABA2; break;
+ case 0x13D3: mapChar = 0xABA3; break;
+ case 0x13D4: mapChar = 0xABA4; break;
+ case 0x13D5: mapChar = 0xABA5; break;
+ case 0x13D6: mapChar = 0xABA6; break;
+ case 0x13D7: mapChar = 0xABA7; break;
+ case 0x13D8: mapChar = 0xABA8; break;
+ case 0x13D9: mapChar = 0xABA9; break;
+ case 0x13DA: mapChar = 0xABAA; break;
+ case 0x13DB: mapChar = 0xABAB; break;
+ case 0x13DC: mapChar = 0xABAC; break;
+ case 0x13DD: mapChar = 0xABAD; break;
+ case 0x13DE: mapChar = 0xABAE; break;
+ case 0x13DF: mapChar = 0xABAF; break;
+ case 0x13E0: mapChar = 0xABB0; break;
+ case 0x13E1: mapChar = 0xABB1; break;
+ case 0x13E2: mapChar = 0xABB2; break;
+ case 0x13E3: mapChar = 0xABB3; break;
+ case 0x13E4: mapChar = 0xABB4; break;
+ case 0x13E5: mapChar = 0xABB5; break;
+ case 0x13E6: mapChar = 0xABB6; break;
+ case 0x13E7: mapChar = 0xABB7; break;
+ case 0x13E8: mapChar = 0xABB8; break;
+ case 0x13E9: mapChar = 0xABB9; break;
+ case 0x13EA: mapChar = 0xABBA; break;
+ case 0x13EB: mapChar = 0xABBB; break;
+ case 0x13EC: mapChar = 0xABBC; break;
+ case 0x13ED: mapChar = 0xABBD; break;
+ case 0x13EE: mapChar = 0xABBE; break;
+ case 0x13EF: mapChar = 0xABBF; break;
+ case 0x1E9E: mapChar = 0x00DF; break;
+ case 0x1F88: mapChar = 0x1F80; break;
+ case 0x1F89: mapChar = 0x1F81; break;
+ case 0x1F8A: mapChar = 0x1F82; break;
+ case 0x1F8B: mapChar = 0x1F83; break;
+ case 0x1F8C: mapChar = 0x1F84; break;
+ case 0x1F8D: mapChar = 0x1F85; break;
+ case 0x1F8E: mapChar = 0x1F86; break;
+ case 0x1F8F: mapChar = 0x1F87; break;
+ case 0x1F98: mapChar = 0x1F90; break;
+ case 0x1F99: mapChar = 0x1F91; break;
+ case 0x1F9A: mapChar = 0x1F92; break;
+ case 0x1F9B: mapChar = 0x1F93; break;
+ case 0x1F9C: mapChar = 0x1F94; break;
+ case 0x1F9D: mapChar = 0x1F95; break;
+ case 0x1F9E: mapChar = 0x1F96; break;
+ case 0x1F9F: mapChar = 0x1F97; break;
+ case 0x1FA8: mapChar = 0x1FA0; break;
+ case 0x1FA9: mapChar = 0x1FA1; break;
+ case 0x1FAA: mapChar = 0x1FA2; break;
+ case 0x1FAB: mapChar = 0x1FA3; break;
+ case 0x1FAC: mapChar = 0x1FA4; break;
+ case 0x1FAD: mapChar = 0x1FA5; break;
+ case 0x1FAE: mapChar = 0x1FA6; break;
+ case 0x1FAF: mapChar = 0x1FA7; break;
+ case 0x1FBC: mapChar = 0x1FB3; break;
+ case 0x1FCC: mapChar = 0x1FC3; break;
+ case 0x1FFC: mapChar = 0x1FF3; break;
+ case 0x2126: mapChar = 0x03C9; break;
+ case 0x212A: mapChar = 0x006B; break;
+ case 0x212B: mapChar = 0x00E5; break;
+ case 0x2C62: mapChar = 0x026B; break;
+ case 0x2C63: mapChar = 0x1D7D; break;
+ case 0x2C64: mapChar = 0x027D; break;
+ case 0x2C6D: mapChar = 0x0251; break;
+ case 0x2C6E: mapChar = 0x0271; break;
+ case 0x2C6F: mapChar = 0x0250; break;
+ case 0x2C70: mapChar = 0x0252; break;
+ case 0x2C7E: mapChar = 0x023F; break;
+ case 0x2C7F: mapChar = 0x0240; break;
+ case 0xA77D: mapChar = 0x1D79; break;
+ case 0xA78D: mapChar = 0x0265; break;
+ case 0xA7AA: mapChar = 0x0266; break;
+ case 0xA7AB: mapChar = 0x025C; break;
+ case 0xA7AC: mapChar = 0x0261; break;
+ case 0xA7AD: mapChar = 0x026C; break;
+ case 0xA7B0: mapChar = 0x029E; break;
+ case 0xA7B1: mapChar = 0x0287; break;
+ case 0xA7B2: mapChar = 0x029D; break;
+ case 0xA7B3: mapChar = 0xAB53; break;
// default mapChar is already set, so no
// need to redo it here.
// default : mapChar = ch;
@@ -251,98 +329,176 @@
if ((val & $$maskUpperCase) != 0) {
if ((val & $$maskCaseOffset) == $$maskCaseOffset) {
switch(ch) {
- // map chars with overflow offsets
- case 0x00B5 : mapChar = 0x039C; break;
- case 0x017F : mapChar = 0x0053; break;
- case 0x1FBE : mapChar = 0x0399; break;
- // map char that have both a 1:1 and 1:M map
- case 0x1F80 : mapChar = 0x1F88; break;
- case 0x1F81 : mapChar = 0x1F89; break;
- case 0x1F82 : mapChar = 0x1F8A; break;
- case 0x1F83 : mapChar = 0x1F8B; break;
- case 0x1F84 : mapChar = 0x1F8C; break;
- case 0x1F85 : mapChar = 0x1F8D; break;
- case 0x1F86 : mapChar = 0x1F8E; break;
- case 0x1F87 : mapChar = 0x1F8F; break;
- case 0x1F90 : mapChar = 0x1F98; break;
- case 0x1F91 : mapChar = 0x1F99; break;
- case 0x1F92 : mapChar = 0x1F9A; break;
- case 0x1F93 : mapChar = 0x1F9B; break;
- case 0x1F94 : mapChar = 0x1F9C; break;
- case 0x1F95 : mapChar = 0x1F9D; break;
- case 0x1F96 : mapChar = 0x1F9E; break;
- case 0x1F97 : mapChar = 0x1F9F; break;
- case 0x1FA0 : mapChar = 0x1FA8; break;
- case 0x1FA1 : mapChar = 0x1FA9; break;
- case 0x1FA2 : mapChar = 0x1FAA; break;
- case 0x1FA3 : mapChar = 0x1FAB; break;
- case 0x1FA4 : mapChar = 0x1FAC; break;
- case 0x1FA5 : mapChar = 0x1FAD; break;
- case 0x1FA6 : mapChar = 0x1FAE; break;
- case 0x1FA7 : mapChar = 0x1FAF; break;
- case 0x1FB3 : mapChar = 0x1FBC; break;
- case 0x1FC3 : mapChar = 0x1FCC; break;
- case 0x1FF3 : mapChar = 0x1FFC; break;
-
- case 0x023F : mapChar = 0x2C7E; break;
- case 0x0240 : mapChar = 0x2C7F; break;
- case 0x0250 : mapChar = 0x2C6F; break;
- case 0x0251 : mapChar = 0x2C6D; break;
- case 0x0252 : mapChar = 0x2C70; break;
- case 0x025C : mapChar = 0xA7AB; break;
- case 0x0261 : mapChar = 0xA7AC; break;
- case 0x0265 : mapChar = 0xA78D; break;
- case 0x0266 : mapChar = 0xA7AA; break;
- case 0x026B : mapChar = 0x2C62; break;
- case 0x026C : mapChar = 0xA7AD; break;
- case 0x0271 : mapChar = 0x2C6E; break;
- case 0x0287 : mapChar = 0xA7B1; break;
- case 0x029E : mapChar = 0xA7B0; break;
- case 0x027D : mapChar = 0x2C64; break;
- case 0x1D79 : mapChar = 0xA77D; break;
- case 0x1D7D : mapChar = 0x2C63; break;
- case 0x2C65 : mapChar = 0x023A; break;
- case 0x2C66 : mapChar = 0x023E; break;
- case 0x2D00 : mapChar = 0x10A0; break;
- case 0x2D01 : mapChar = 0x10A1; break;
- case 0x2D02 : mapChar = 0x10A2; break;
- case 0x2D03 : mapChar = 0x10A3; break;
- case 0x2D04 : mapChar = 0x10A4; break;
- case 0x2D05 : mapChar = 0x10A5; break;
- case 0x2D06 : mapChar = 0x10A6; break;
- case 0x2D07 : mapChar = 0x10A7; break;
- case 0x2D08 : mapChar = 0x10A8; break;
- case 0x2D09 : mapChar = 0x10A9; break;
- case 0x2D0A : mapChar = 0x10AA; break;
- case 0x2D0B : mapChar = 0x10AB; break;
- case 0x2D0C : mapChar = 0x10AC; break;
- case 0x2D0D : mapChar = 0x10AD; break;
- case 0x2D0E : mapChar = 0x10AE; break;
- case 0x2D0F : mapChar = 0x10AF; break;
- case 0x2D10 : mapChar = 0x10B0; break;
- case 0x2D11 : mapChar = 0x10B1; break;
- case 0x2D12 : mapChar = 0x10B2; break;
- case 0x2D13 : mapChar = 0x10B3; break;
- case 0x2D14 : mapChar = 0x10B4; break;
- case 0x2D15 : mapChar = 0x10B5; break;
- case 0x2D16 : mapChar = 0x10B6; break;
- case 0x2D17 : mapChar = 0x10B7; break;
- case 0x2D18 : mapChar = 0x10B8; break;
- case 0x2D19 : mapChar = 0x10B9; break;
- case 0x2D1A : mapChar = 0x10BA; break;
- case 0x2D1B : mapChar = 0x10BB; break;
- case 0x2D1C : mapChar = 0x10BC; break;
- case 0x2D1D : mapChar = 0x10BD; break;
- case 0x2D1E : mapChar = 0x10BE; break;
- case 0x2D1F : mapChar = 0x10BF; break;
- case 0x2D20 : mapChar = 0x10C0; break;
- case 0x2D21 : mapChar = 0x10C1; break;
- case 0x2D22 : mapChar = 0x10C2; break;
- case 0x2D23 : mapChar = 0x10C3; break;
- case 0x2D24 : mapChar = 0x10C4; break;
- case 0x2D25 : mapChar = 0x10C5; break;
- case 0x2D27 : mapChar = 0x10C7; break;
- case 0x2D2D : mapChar = 0x10CD; break;
+ case 0x017F: mapChar = 0x0053; break;
+ case 0x023F: mapChar = 0x2C7E; break;
+ case 0x0240: mapChar = 0x2C7F; break;
+ case 0x0250: mapChar = 0x2C6F; break;
+ case 0x0251: mapChar = 0x2C6D; break;
+ case 0x0252: mapChar = 0x2C70; break;
+ case 0x025C: mapChar = 0xA7AB; break;
+ case 0x0261: mapChar = 0xA7AC; break;
+ case 0x0265: mapChar = 0xA78D; break;
+ case 0x0266: mapChar = 0xA7AA; break;
+ case 0x026B: mapChar = 0x2C62; break;
+ case 0x026C: mapChar = 0xA7AD; break;
+ case 0x0271: mapChar = 0x2C6E; break;
+ case 0x027D: mapChar = 0x2C64; break;
+ case 0x0287: mapChar = 0xA7B1; break;
+ case 0x029D: mapChar = 0xA7B2; break;
+ case 0x029E: mapChar = 0xA7B0; break;
+ case 0x1D79: mapChar = 0xA77D; break;
+ case 0x1D7D: mapChar = 0x2C63; break;
+ case 0x1F80: mapChar = 0x1F88; break;
+ case 0x1F81: mapChar = 0x1F89; break;
+ case 0x1F82: mapChar = 0x1F8A; break;
+ case 0x1F83: mapChar = 0x1F8B; break;
+ case 0x1F84: mapChar = 0x1F8C; break;
+ case 0x1F85: mapChar = 0x1F8D; break;
+ case 0x1F86: mapChar = 0x1F8E; break;
+ case 0x1F87: mapChar = 0x1F8F; break;
+ case 0x1F90: mapChar = 0x1F98; break;
+ case 0x1F91: mapChar = 0x1F99; break;
+ case 0x1F92: mapChar = 0x1F9A; break;
+ case 0x1F93: mapChar = 0x1F9B; break;
+ case 0x1F94: mapChar = 0x1F9C; break;
+ case 0x1F95: mapChar = 0x1F9D; break;
+ case 0x1F96: mapChar = 0x1F9E; break;
+ case 0x1F97: mapChar = 0x1F9F; break;
+ case 0x1FA0: mapChar = 0x1FA8; break;
+ case 0x1FA1: mapChar = 0x1FA9; break;
+ case 0x1FA2: mapChar = 0x1FAA; break;
+ case 0x1FA3: mapChar = 0x1FAB; break;
+ case 0x1FA4: mapChar = 0x1FAC; break;
+ case 0x1FA5: mapChar = 0x1FAD; break;
+ case 0x1FA6: mapChar = 0x1FAE; break;
+ case 0x1FA7: mapChar = 0x1FAF; break;
+ case 0x1FB3: mapChar = 0x1FBC; break;
+ case 0x1FBE: mapChar = 0x0399; break;
+ case 0x1FC3: mapChar = 0x1FCC; break;
+ case 0x1FF3: mapChar = 0x1FFC; break;
+ case 0x2C65: mapChar = 0x023A; break;
+ case 0x2C66: mapChar = 0x023E; break;
+ case 0x2D00: mapChar = 0x10A0; break;
+ case 0x2D01: mapChar = 0x10A1; break;
+ case 0x2D02: mapChar = 0x10A2; break;
+ case 0x2D03: mapChar = 0x10A3; break;
+ case 0x2D04: mapChar = 0x10A4; break;
+ case 0x2D05: mapChar = 0x10A5; break;
+ case 0x2D06: mapChar = 0x10A6; break;
+ case 0x2D07: mapChar = 0x10A7; break;
+ case 0x2D08: mapChar = 0x10A8; break;
+ case 0x2D09: mapChar = 0x10A9; break;
+ case 0x2D0A: mapChar = 0x10AA; break;
+ case 0x2D0B: mapChar = 0x10AB; break;
+ case 0x2D0C: mapChar = 0x10AC; break;
+ case 0x2D0D: mapChar = 0x10AD; break;
+ case 0x2D0E: mapChar = 0x10AE; break;
+ case 0x2D0F: mapChar = 0x10AF; break;
+ case 0x2D10: mapChar = 0x10B0; break;
+ case 0x2D11: mapChar = 0x10B1; break;
+ case 0x2D12: mapChar = 0x10B2; break;
+ case 0x2D13: mapChar = 0x10B3; break;
+ case 0x2D14: mapChar = 0x10B4; break;
+ case 0x2D15: mapChar = 0x10B5; break;
+ case 0x2D16: mapChar = 0x10B6; break;
+ case 0x2D17: mapChar = 0x10B7; break;
+ case 0x2D18: mapChar = 0x10B8; break;
+ case 0x2D19: mapChar = 0x10B9; break;
+ case 0x2D1A: mapChar = 0x10BA; break;
+ case 0x2D1B: mapChar = 0x10BB; break;
+ case 0x2D1C: mapChar = 0x10BC; break;
+ case 0x2D1D: mapChar = 0x10BD; break;
+ case 0x2D1E: mapChar = 0x10BE; break;
+ case 0x2D1F: mapChar = 0x10BF; break;
+ case 0x2D20: mapChar = 0x10C0; break;
+ case 0x2D21: mapChar = 0x10C1; break;
+ case 0x2D22: mapChar = 0x10C2; break;
+ case 0x2D23: mapChar = 0x10C3; break;
+ case 0x2D24: mapChar = 0x10C4; break;
+ case 0x2D25: mapChar = 0x10C5; break;
+ case 0x2D27: mapChar = 0x10C7; break;
+ case 0x2D2D: mapChar = 0x10CD; break;
+ case 0xAB53: mapChar = 0xA7B3; break;
+ case 0xAB70: mapChar = 0x13A0; break;
+ case 0xAB71: mapChar = 0x13A1; break;
+ case 0xAB72: mapChar = 0x13A2; break;
+ case 0xAB73: mapChar = 0x13A3; break;
+ case 0xAB74: mapChar = 0x13A4; break;
+ case 0xAB75: mapChar = 0x13A5; break;
+ case 0xAB76: mapChar = 0x13A6; break;
+ case 0xAB77: mapChar = 0x13A7; break;
+ case 0xAB78: mapChar = 0x13A8; break;
+ case 0xAB79: mapChar = 0x13A9; break;
+ case 0xAB7A: mapChar = 0x13AA; break;
+ case 0xAB7B: mapChar = 0x13AB; break;
+ case 0xAB7C: mapChar = 0x13AC; break;
+ case 0xAB7D: mapChar = 0x13AD; break;
+ case 0xAB7E: mapChar = 0x13AE; break;
+ case 0xAB7F: mapChar = 0x13AF; break;
+ case 0xAB80: mapChar = 0x13B0; break;
+ case 0xAB81: mapChar = 0x13B1; break;
+ case 0xAB82: mapChar = 0x13B2; break;
+ case 0xAB83: mapChar = 0x13B3; break;
+ case 0xAB84: mapChar = 0x13B4; break;
+ case 0xAB85: mapChar = 0x13B5; break;
+ case 0xAB86: mapChar = 0x13B6; break;
+ case 0xAB87: mapChar = 0x13B7; break;
+ case 0xAB88: mapChar = 0x13B8; break;
+ case 0xAB89: mapChar = 0x13B9; break;
+ case 0xAB8A: mapChar = 0x13BA; break;
+ case 0xAB8B: mapChar = 0x13BB; break;
+ case 0xAB8C: mapChar = 0x13BC; break;
+ case 0xAB8D: mapChar = 0x13BD; break;
+ case 0xAB8E: mapChar = 0x13BE; break;
+ case 0xAB8F: mapChar = 0x13BF; break;
+ case 0xAB90: mapChar = 0x13C0; break;
+ case 0xAB91: mapChar = 0x13C1; break;
+ case 0xAB92: mapChar = 0x13C2; break;
+ case 0xAB93: mapChar = 0x13C3; break;
+ case 0xAB94: mapChar = 0x13C4; break;
+ case 0xAB95: mapChar = 0x13C5; break;
+ case 0xAB96: mapChar = 0x13C6; break;
+ case 0xAB97: mapChar = 0x13C7; break;
+ case 0xAB98: mapChar = 0x13C8; break;
+ case 0xAB99: mapChar = 0x13C9; break;
+ case 0xAB9A: mapChar = 0x13CA; break;
+ case 0xAB9B: mapChar = 0x13CB; break;
+ case 0xAB9C: mapChar = 0x13CC; break;
+ case 0xAB9D: mapChar = 0x13CD; break;
+ case 0xAB9E: mapChar = 0x13CE; break;
+ case 0xAB9F: mapChar = 0x13CF; break;
+ case 0xABA0: mapChar = 0x13D0; break;
+ case 0xABA1: mapChar = 0x13D1; break;
+ case 0xABA2: mapChar = 0x13D2; break;
+ case 0xABA3: mapChar = 0x13D3; break;
+ case 0xABA4: mapChar = 0x13D4; break;
+ case 0xABA5: mapChar = 0x13D5; break;
+ case 0xABA6: mapChar = 0x13D6; break;
+ case 0xABA7: mapChar = 0x13D7; break;
+ case 0xABA8: mapChar = 0x13D8; break;
+ case 0xABA9: mapChar = 0x13D9; break;
+ case 0xABAA: mapChar = 0x13DA; break;
+ case 0xABAB: mapChar = 0x13DB; break;
+ case 0xABAC: mapChar = 0x13DC; break;
+ case 0xABAD: mapChar = 0x13DD; break;
+ case 0xABAE: mapChar = 0x13DE; break;
+ case 0xABAF: mapChar = 0x13DF; break;
+ case 0xABB0: mapChar = 0x13E0; break;
+ case 0xABB1: mapChar = 0x13E1; break;
+ case 0xABB2: mapChar = 0x13E2; break;
+ case 0xABB3: mapChar = 0x13E3; break;
+ case 0xABB4: mapChar = 0x13E4; break;
+ case 0xABB5: mapChar = 0x13E5; break;
+ case 0xABB6: mapChar = 0x13E6; break;
+ case 0xABB7: mapChar = 0x13E7; break;
+ case 0xABB8: mapChar = 0x13E8; break;
+ case 0xABB9: mapChar = 0x13E9; break;
+ case 0xABBA: mapChar = 0x13EA; break;
+ case 0xABBB: mapChar = 0x13EB; break;
+ case 0xABBC: mapChar = 0x13EC; break;
+ case 0xABBD: mapChar = 0x13ED; break;
+ case 0xABBE: mapChar = 0x13EE; break;
+ case 0xABBF: mapChar = 0x13EF; break;
// ch must have a 1:M case mapping, but we
// can't handle it here. Return ch.
// since mapChar is already set, no need
@@ -420,6 +576,8 @@
switch (ch) {
case 0x0BF1: retval = 100; break; // TAMIL NUMBER ONE HUNDRED
case 0x0BF2: retval = 1000; break; // TAMIL NUMBER ONE THOUSAND
+ case 0x0D71: retval = 100; break; // MALAYALAM NUMBER ONE HUNDRED
+ case 0x0D72: retval = 1000; break; // MALAYALAM NUMBER ONE THOUSAND
case 0x1375: retval = 40; break; // ETHIOPIC NUMBER FORTY
case 0x1376: retval = 50; break; // ETHIOPIC NUMBER FIFTY
case 0x1377: retval = 60; break; // ETHIOPIC NUMBER SIXTY
@@ -440,14 +598,15 @@
case 0x2180: retval = 1000; break; // ROMAN NUMERAL ONE THOUSAND C D
case 0x2181: retval = 5000; break; // ROMAN NUMERAL FIVE THOUSAND
case 0x2182: retval = 10000; break; // ROMAN NUMERAL TEN THOUSAND
-
- case 0x324B: retval = 40; break;
- case 0x324C: retval = 50; break;
- case 0x324D: retval = 60; break;
- case 0x324E: retval = 70; break;
- case 0x324F: retval = 80; break;
- case 0x325C: retval = 32; break;
-
+ case 0x2186: retval = 50; break; // ROMAN NUMERAL FIFTY EARLY FORM
+ case 0x2187: retval = 50000; break; // ROMAN NUMERAL FIFTY THOUSAND
+ case 0x2188: retval = 100000; break; // ROMAN NUMERAL ONE HUNDRED THOUSAND
+ case 0x324B: retval = 40; break; // CIRCLED NUMBER FORTY ON BLACK SQUARE
+ case 0x324C: retval = 50; break; // CIRCLED NUMBER FIFTY ON BLACK SQUARE
+ case 0x324D: retval = 60; break; // CIRCLED NUMBER SIXTY ON BLACK SQUARE
+ case 0x324E: retval = 70; break; // CIRCLED NUMBER SEVENTY ON BLACK SQUARE
+ case 0x324F: retval = 80; break; // CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+ case 0x325C: retval = 32; break; // CIRCLED NUMBER THIRTY TWO
case 0x325D: retval = 33; break; // CIRCLED NUMBER THIRTY THREE
case 0x325E: retval = 34; break; // CIRCLED NUMBER THIRTY FOUR
case 0x325F: retval = 35; break; // CIRCLED NUMBER THIRTY FIVE
@@ -466,13 +625,6 @@
case 0x32BD: retval = 48; break; // CIRCLED NUMBER FORTY EIGHT
case 0x32BE: retval = 49; break; // CIRCLED NUMBER FORTY NINE
case 0x32BF: retval = 50; break; // CIRCLED NUMBER FIFTY
-
- case 0x0D71: retval = 100; break; // MALAYALAM NUMBER ONE HUNDRED
- case 0x0D72: retval = 1000; break; // MALAYALAM NUMBER ONE THOUSAND
- case 0x2186: retval = 50; break; // ROMAN NUMERAL FIFTY EARLY FORM
- case 0x2187: retval = 50000; break; // ROMAN NUMERAL FIFTY THOUSAND
- case 0x2188: retval = 100000; break; // ROMAN NUMERAL ONE HUNDRED THOUSAND
-
default: retval = -2; break;
}
break;
@@ -553,70 +705,149 @@
}
else {
switch(ch) {
- // map overflow characters
- case 0x00B5 : mapChar = 0x039C; break;
- case 0x017F : mapChar = 0x0053; break;
- case 0x1FBE : mapChar = 0x0399; break;
-
- case 0x023F : mapChar = 0x2C7E; break;
- case 0x0240 : mapChar = 0x2C7F; break;
- case 0x0250 : mapChar = 0x2C6F; break;
- case 0x0251 : mapChar = 0x2C6D; break;
- case 0x0252 : mapChar = 0x2C70; break;
- case 0x025C : mapChar = 0xA7AB; break;
- case 0x0261 : mapChar = 0xA7AC; break;
- case 0x0265 : mapChar = 0xA78D; break;
- case 0x0266 : mapChar = 0xA7AA; break;
- case 0x026B : mapChar = 0x2C62; break;
- case 0x026C : mapChar = 0xA7AD; break;
- case 0x0271 : mapChar = 0x2C6E; break;
- case 0x027D : mapChar = 0x2C64; break;
- case 0x0287 : mapChar = 0xA7B1; break;
- case 0x029E : mapChar = 0xA7B0; break;
- case 0x1D79 : mapChar = 0xA77D; break;
- case 0x1D7D : mapChar = 0x2C63; break;
- case 0x2C65 : mapChar = 0x023A; break;
- case 0x2C66 : mapChar = 0x023E; break;
- case 0x2D00 : mapChar = 0x10A0; break;
- case 0x2D01 : mapChar = 0x10A1; break;
- case 0x2D02 : mapChar = 0x10A2; break;
- case 0x2D03 : mapChar = 0x10A3; break;
- case 0x2D04 : mapChar = 0x10A4; break;
- case 0x2D05 : mapChar = 0x10A5; break;
- case 0x2D06 : mapChar = 0x10A6; break;
- case 0x2D07 : mapChar = 0x10A7; break;
- case 0x2D08 : mapChar = 0x10A8; break;
- case 0x2D09 : mapChar = 0x10A9; break;
- case 0x2D0A : mapChar = 0x10AA; break;
- case 0x2D0B : mapChar = 0x10AB; break;
- case 0x2D0C : mapChar = 0x10AC; break;
- case 0x2D0D : mapChar = 0x10AD; break;
- case 0x2D0E : mapChar = 0x10AE; break;
- case 0x2D0F : mapChar = 0x10AF; break;
- case 0x2D10 : mapChar = 0x10B0; break;
- case 0x2D11 : mapChar = 0x10B1; break;
- case 0x2D12 : mapChar = 0x10B2; break;
- case 0x2D13 : mapChar = 0x10B3; break;
- case 0x2D14 : mapChar = 0x10B4; break;
- case 0x2D15 : mapChar = 0x10B5; break;
- case 0x2D16 : mapChar = 0x10B6; break;
- case 0x2D17 : mapChar = 0x10B7; break;
- case 0x2D18 : mapChar = 0x10B8; break;
- case 0x2D19 : mapChar = 0x10B9; break;
- case 0x2D1A : mapChar = 0x10BA; break;
- case 0x2D1B : mapChar = 0x10BB; break;
- case 0x2D1C : mapChar = 0x10BC; break;
- case 0x2D1D : mapChar = 0x10BD; break;
- case 0x2D1E : mapChar = 0x10BE; break;
- case 0x2D1F : mapChar = 0x10BF; break;
- case 0x2D20 : mapChar = 0x10C0; break;
- case 0x2D21 : mapChar = 0x10C1; break;
- case 0x2D22 : mapChar = 0x10C2; break;
- case 0x2D23 : mapChar = 0x10C3; break;
- case 0x2D24 : mapChar = 0x10C4; break;
- case 0x2D25 : mapChar = 0x10C5; break;
- case 0x2D27 : mapChar = 0x10C7; break;
- case 0x2D2D : mapChar = 0x10CD; break;
+ case 0x017F: mapChar = 0x0053; break;
+ case 0x023F: mapChar = 0x2C7E; break;
+ case 0x0240: mapChar = 0x2C7F; break;
+ case 0x0250: mapChar = 0x2C6F; break;
+ case 0x0251: mapChar = 0x2C6D; break;
+ case 0x0252: mapChar = 0x2C70; break;
+ case 0x025C: mapChar = 0xA7AB; break;
+ case 0x0261: mapChar = 0xA7AC; break;
+ case 0x0265: mapChar = 0xA78D; break;
+ case 0x0266: mapChar = 0xA7AA; break;
+ case 0x026B: mapChar = 0x2C62; break;
+ case 0x026C: mapChar = 0xA7AD; break;
+ case 0x0271: mapChar = 0x2C6E; break;
+ case 0x027D: mapChar = 0x2C64; break;
+ case 0x0287: mapChar = 0xA7B1; break;
+ case 0x029D: mapChar = 0xA7B2; break;
+ case 0x029E: mapChar = 0xA7B0; break;
+ case 0x1D79: mapChar = 0xA77D; break;
+ case 0x1D7D: mapChar = 0x2C63; break;
+ case 0x1FBE: mapChar = 0x0399; break;
+ case 0x2C65: mapChar = 0x023A; break;
+ case 0x2C66: mapChar = 0x023E; break;
+ case 0x2D00: mapChar = 0x10A0; break;
+ case 0x2D01: mapChar = 0x10A1; break;
+ case 0x2D02: mapChar = 0x10A2; break;
+ case 0x2D03: mapChar = 0x10A3; break;
+ case 0x2D04: mapChar = 0x10A4; break;
+ case 0x2D05: mapChar = 0x10A5; break;
+ case 0x2D06: mapChar = 0x10A6; break;
+ case 0x2D07: mapChar = 0x10A7; break;
+ case 0x2D08: mapChar = 0x10A8; break;
+ case 0x2D09: mapChar = 0x10A9; break;
+ case 0x2D0A: mapChar = 0x10AA; break;
+ case 0x2D0B: mapChar = 0x10AB; break;
+ case 0x2D0C: mapChar = 0x10AC; break;
+ case 0x2D0D: mapChar = 0x10AD; break;
+ case 0x2D0E: mapChar = 0x10AE; break;
+ case 0x2D0F: mapChar = 0x10AF; break;
+ case 0x2D10: mapChar = 0x10B0; break;
+ case 0x2D11: mapChar = 0x10B1; break;
+ case 0x2D12: mapChar = 0x10B2; break;
+ case 0x2D13: mapChar = 0x10B3; break;
+ case 0x2D14: mapChar = 0x10B4; break;
+ case 0x2D15: mapChar = 0x10B5; break;
+ case 0x2D16: mapChar = 0x10B6; break;
+ case 0x2D17: mapChar = 0x10B7; break;
+ case 0x2D18: mapChar = 0x10B8; break;
+ case 0x2D19: mapChar = 0x10B9; break;
+ case 0x2D1A: mapChar = 0x10BA; break;
+ case 0x2D1B: mapChar = 0x10BB; break;
+ case 0x2D1C: mapChar = 0x10BC; break;
+ case 0x2D1D: mapChar = 0x10BD; break;
+ case 0x2D1E: mapChar = 0x10BE; break;
+ case 0x2D1F: mapChar = 0x10BF; break;
+ case 0x2D20: mapChar = 0x10C0; break;
+ case 0x2D21: mapChar = 0x10C1; break;
+ case 0x2D22: mapChar = 0x10C2; break;
+ case 0x2D23: mapChar = 0x10C3; break;
+ case 0x2D24: mapChar = 0x10C4; break;
+ case 0x2D25: mapChar = 0x10C5; break;
+ case 0x2D27: mapChar = 0x10C7; break;
+ case 0x2D2D: mapChar = 0x10CD; break;
+ case 0xAB53: mapChar = 0xA7B3; break;
+ case 0xAB70: mapChar = 0x13A0; break;
+ case 0xAB71: mapChar = 0x13A1; break;
+ case 0xAB72: mapChar = 0x13A2; break;
+ case 0xAB73: mapChar = 0x13A3; break;
+ case 0xAB74: mapChar = 0x13A4; break;
+ case 0xAB75: mapChar = 0x13A5; break;
+ case 0xAB76: mapChar = 0x13A6; break;
+ case 0xAB77: mapChar = 0x13A7; break;
+ case 0xAB78: mapChar = 0x13A8; break;
+ case 0xAB79: mapChar = 0x13A9; break;
+ case 0xAB7A: mapChar = 0x13AA; break;
+ case 0xAB7B: mapChar = 0x13AB; break;
+ case 0xAB7C: mapChar = 0x13AC; break;
+ case 0xAB7D: mapChar = 0x13AD; break;
+ case 0xAB7E: mapChar = 0x13AE; break;
+ case 0xAB7F: mapChar = 0x13AF; break;
+ case 0xAB80: mapChar = 0x13B0; break;
+ case 0xAB81: mapChar = 0x13B1; break;
+ case 0xAB82: mapChar = 0x13B2; break;
+ case 0xAB83: mapChar = 0x13B3; break;
+ case 0xAB84: mapChar = 0x13B4; break;
+ case 0xAB85: mapChar = 0x13B5; break;
+ case 0xAB86: mapChar = 0x13B6; break;
+ case 0xAB87: mapChar = 0x13B7; break;
+ case 0xAB88: mapChar = 0x13B8; break;
+ case 0xAB89: mapChar = 0x13B9; break;
+ case 0xAB8A: mapChar = 0x13BA; break;
+ case 0xAB8B: mapChar = 0x13BB; break;
+ case 0xAB8C: mapChar = 0x13BC; break;
+ case 0xAB8D: mapChar = 0x13BD; break;
+ case 0xAB8E: mapChar = 0x13BE; break;
+ case 0xAB8F: mapChar = 0x13BF; break;
+ case 0xAB90: mapChar = 0x13C0; break;
+ case 0xAB91: mapChar = 0x13C1; break;
+ case 0xAB92: mapChar = 0x13C2; break;
+ case 0xAB93: mapChar = 0x13C3; break;
+ case 0xAB94: mapChar = 0x13C4; break;
+ case 0xAB95: mapChar = 0x13C5; break;
+ case 0xAB96: mapChar = 0x13C6; break;
+ case 0xAB97: mapChar = 0x13C7; break;
+ case 0xAB98: mapChar = 0x13C8; break;
+ case 0xAB99: mapChar = 0x13C9; break;
+ case 0xAB9A: mapChar = 0x13CA; break;
+ case 0xAB9B: mapChar = 0x13CB; break;
+ case 0xAB9C: mapChar = 0x13CC; break;
+ case 0xAB9D: mapChar = 0x13CD; break;
+ case 0xAB9E: mapChar = 0x13CE; break;
+ case 0xAB9F: mapChar = 0x13CF; break;
+ case 0xABA0: mapChar = 0x13D0; break;
+ case 0xABA1: mapChar = 0x13D1; break;
+ case 0xABA2: mapChar = 0x13D2; break;
+ case 0xABA3: mapChar = 0x13D3; break;
+ case 0xABA4: mapChar = 0x13D4; break;
+ case 0xABA5: mapChar = 0x13D5; break;
+ case 0xABA6: mapChar = 0x13D6; break;
+ case 0xABA7: mapChar = 0x13D7; break;
+ case 0xABA8: mapChar = 0x13D8; break;
+ case 0xABA9: mapChar = 0x13D9; break;
+ case 0xABAA: mapChar = 0x13DA; break;
+ case 0xABAB: mapChar = 0x13DB; break;
+ case 0xABAC: mapChar = 0x13DC; break;
+ case 0xABAD: mapChar = 0x13DD; break;
+ case 0xABAE: mapChar = 0x13DE; break;
+ case 0xABAF: mapChar = 0x13DF; break;
+ case 0xABB0: mapChar = 0x13E0; break;
+ case 0xABB1: mapChar = 0x13E1; break;
+ case 0xABB2: mapChar = 0x13E2; break;
+ case 0xABB3: mapChar = 0x13E3; break;
+ case 0xABB4: mapChar = 0x13E4; break;
+ case 0xABB5: mapChar = 0x13E5; break;
+ case 0xABB6: mapChar = 0x13E6; break;
+ case 0xABB7: mapChar = 0x13E7; break;
+ case 0xABB8: mapChar = 0x13E8; break;
+ case 0xABB9: mapChar = 0x13E9; break;
+ case 0xABBA: mapChar = 0x13EA; break;
+ case 0xABBB: mapChar = 0x13EB; break;
+ case 0xABBC: mapChar = 0x13EC; break;
+ case 0xABBD: mapChar = 0x13ED; break;
+ case 0xABBE: mapChar = 0x13EE; break;
+ case 0xABBF: mapChar = 0x13EF; break;
default : mapChar = Character.ERROR; break;
}
}
--- a/jdk/make/data/characterdata/CharacterData01.java.template Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/make/data/characterdata/CharacterData01.java.template Thu Oct 22 11:14:00 2015 -0700
@@ -243,36 +243,35 @@
case 0x10131: retval = 70000; break; // AEGEAN NUMBER SEVENTY THOUSAND
case 0x10132: retval = 80000; break; // AEGEAN NUMBER EIGHTY THOUSAND
case 0x10133: retval = 90000; break; // AEGEAN NUMBER NINETY THOUSAND
- case 0x10323: retval = 50; break; // OLD ITALIC NUMERAL FIFTY
- case 0x10144: retval = 50; break; // ACROPHONIC ATTIC FIFTY
- case 0x10145: retval = 500; break; // ACROPHONIC ATTIC FIVE HUNDRED
- case 0x10146: retval = 5000; break; // ACROPHONIC ATTIC FIVE THOUSAND
- case 0x10147: retval = 50000; break; // ACROPHONIC ATTIC FIFTY THOUSAND
- case 0x1014A: retval = 50; break; // ACROPHONIC ATTIC FIFTY TALENTS
- case 0x1014B: retval = 100; break; // ACROPHONIC ATTIC ONE HUNDRED TALENTS
- case 0x1014C: retval = 500; break; // ACROPHONIC ATTIC FIVE HUNDRED TALENTS
- case 0x1014D: retval = 1000; break; // ACROPHONIC ATTIC ONE THOUSAND TALENTS
- case 0x1014E: retval = 5000; break; // ACROPHONIC ATTIC FIVE THOUSAND TALENTS
- case 0x10151: retval = 50; break; // ACROPHONIC ATTIC FIFTY STATERS
- case 0x10152: retval = 100; break; // ACROPHONIC ATTIC ONE HUNDRED STATERS
- case 0x10153: retval = 500; break; // ACROPHONIC ATTIC FIVE HUNDRED STATERS
- case 0x10154: retval = 1000; break; // ACROPHONIC ATTIC ONE THOUSAND STATERS
- case 0x10155: retval = 10000; break; // ACROPHONIC ATTIC TEN THOUSAND STATERS
- case 0x10156: retval = 50000; break; // ACROPHONIC ATTIC FIFTY THOUSAND STATERS
- case 0x10166: retval = 50; break; // ACROPHONIC TROEZENIAN FIFTY
- case 0x10167: retval = 50; break; // ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
- case 0x10168: retval = 50; break; // ACROPHONIC HERMIONIAN FIFTY
- case 0x10169: retval = 50; break; // ACROPHONIC THESPIAN FIFTY
- case 0x1016A: retval = 100; break; // ACROPHONIC THESPIAN ONE HUNDRED
- case 0x1016B: retval = 300; break; // ACROPHONIC THESPIAN THREE HUNDRED
- case 0x1016C: retval = 500; break; // ACROPHONIC EPIDAUREAN FIVE HUNDRED
- case 0x1016D: retval = 500; break; // ACROPHONIC TROEZENIAN FIVE HUNDRED
- case 0x1016E: retval = 500; break; // ACROPHONIC THESPIAN FIVE HUNDRED
- case 0x1016F: retval = 500; break; // ACROPHONIC CARYSTIAN FIVE HUNDRED
- case 0x10170: retval = 500; break; // ACROPHONIC NAXIAN FIVE HUNDRED
- case 0x10171: retval = 1000; break; // ACROPHONIC THESPIAN ONE THOUSAND
- case 0x10172: retval = 5000; break; // ACROPHONIC THESPIAN FIVE THOUSAND
- case 0x10174: retval = 50; break; // ACROPHONIC STRATIAN FIFTY MNAS
+ case 0x10144: retval = 50; break; // GREEK ACROPHONIC ATTIC FIFTY
+ case 0x10145: retval = 500; break; // GREEK ACROPHONIC ATTIC FIVE HUNDRED
+ case 0x10146: retval = 5000; break; // GREEK ACROPHONIC ATTIC FIVE THOUSAND
+ case 0x10147: retval = 50000; break; // GREEK ACROPHONIC ATTIC FIFTY THOUSAND
+ case 0x1014A: retval = 50; break; // GREEK ACROPHONIC ATTIC FIFTY TALENTS
+ case 0x1014B: retval = 100; break; // GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS
+ case 0x1014C: retval = 500; break; // GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS
+ case 0x1014D: retval = 1000; break; // GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS
+ case 0x1014E: retval = 5000; break; // GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS
+ case 0x10151: retval = 50; break; // GREEK ACROPHONIC ATTIC FIFTY STATERS
+ case 0x10152: retval = 100; break; // GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS
+ case 0x10153: retval = 500; break; // GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS
+ case 0x10154: retval = 1000; break; // GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS
+ case 0x10155: retval = 10000; break; // GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS
+ case 0x10156: retval = 50000; break; // GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS
+ case 0x10166: retval = 50; break; // GREEK ACROPHONIC TROEZENIAN FIFTY
+ case 0x10167: retval = 50; break; // GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
+ case 0x10168: retval = 50; break; // GREEK ACROPHONIC HERMIONIAN FIFTY
+ case 0x10169: retval = 50; break; // GREEK ACROPHONIC THESPIAN FIFTY
+ case 0x1016A: retval = 100; break; // GREEK ACROPHONIC THESPIAN ONE HUNDRED
+ case 0x1016B: retval = 300; break; // GREEK ACROPHONIC THESPIAN THREE HUNDRED
+ case 0x1016C: retval = 500; break; // GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED
+ case 0x1016D: retval = 500; break; // GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED
+ case 0x1016E: retval = 500; break; // GREEK ACROPHONIC THESPIAN FIVE HUNDRED
+ case 0x1016F: retval = 500; break; // GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED
+ case 0x10170: retval = 500; break; // GREEK ACROPHONIC NAXIAN FIVE HUNDRED
+ case 0x10171: retval = 1000; break; // GREEK ACROPHONIC THESPIAN ONE THOUSAND
+ case 0x10172: retval = 5000; break; // GREEK ACROPHONIC THESPIAN FIVE THOUSAND
+ case 0x10174: retval = 50; break; // GREEK ACROPHONIC STRATIAN FIFTY MNAS
case 0x102ED: retval = 40; break; // COPTIC EPACT NUMBER FORTY
case 0x102EE: retval = 50; break; // COPTIC EPACT NUMBER FIFTY
case 0x102EF: retval = 60; break; // COPTIC EPACT NUMBER SIXTY
@@ -288,6 +287,7 @@
case 0x102F9: retval = 700; break; // COPTIC EPACT NUMBER SEVEN HUNDRED
case 0x102FA: retval = 800; break; // COPTIC EPACT NUMBER EIGHT HUNDRED
case 0x102FB: retval = 900; break; // COPTIC EPACT NUMBER NINE HUNDRED
+ case 0x10323: retval = 50; break; // OLD ITALIC NUMERAL FIFTY
case 0x10341: retval = 90; break; // GOTHIC LETTER NINETY
case 0x1034A: retval = 900; break; // GOTHIC LETTER NINE HUNDRED
case 0x103D5: retval = 100; break; // OLD PERSIAN NUMBER HUNDRED
@@ -295,7 +295,48 @@
case 0x1085E: retval = 1000; break; // IMPERIAL ARAMAIC NUMBER ONE THOUSAND
case 0x1085F: retval = 10000; break; // IMPERIAL ARAMAIC NUMBER TEN THOUSAND
case 0x108AF: retval = 100; break; // NABATAEAN NUMBER ONE HUNDRED
+ case 0x108FF: retval = 100; break; // HATRAN NUMBER ONE HUNDRED
case 0x10919: retval = 100; break; // PHOENICIAN NUMBER ONE HUNDRED
+ case 0x109CC: retval = 40; break; // MEROITIC CURSIVE NUMBER FORTY
+ case 0x109CD: retval = 50; break; // MEROITIC CURSIVE NUMBER FIFTY
+ case 0x109CE: retval = 60; break; // MEROITIC CURSIVE NUMBER SIXTY
+ case 0x109CF: retval = 70; break; // MEROITIC CURSIVE NUMBER SEVENTY
+ case 0x109D2: retval = 100; break; // MEROITIC CURSIVE NUMBER ONE HUNDRED
+ case 0x109D3: retval = 200; break; // MEROITIC CURSIVE NUMBER TWO HUNDRED
+ case 0x109D4: retval = 300; break; // MEROITIC CURSIVE NUMBER THREE HUNDRED
+ case 0x109D5: retval = 400; break; // MEROITIC CURSIVE NUMBER FOUR HUNDRED
+ case 0x109D6: retval = 500; break; // MEROITIC CURSIVE NUMBER FIVE HUNDRED
+ case 0x109D7: retval = 600; break; // MEROITIC CURSIVE NUMBER SIX HUNDRED
+ case 0x109D8: retval = 700; break; // MEROITIC CURSIVE NUMBER SEVEN HUNDRED
+ case 0x109D9: retval = 800; break; // MEROITIC CURSIVE NUMBER EIGHT HUNDRED
+ case 0x109DA: retval = 900; break; // MEROITIC CURSIVE NUMBER NINE HUNDRED
+ case 0x109DB: retval = 1000; break; // MEROITIC CURSIVE NUMBER ONE THOUSAND
+ case 0x109DC: retval = 2000; break; // MEROITIC CURSIVE NUMBER TWO THOUSAND
+ case 0x109DD: retval = 3000; break; // MEROITIC CURSIVE NUMBER THREE THOUSAND
+ case 0x109DE: retval = 4000; break; // MEROITIC CURSIVE NUMBER FOUR THOUSAND
+ case 0x109DF: retval = 5000; break; // MEROITIC CURSIVE NUMBER FIVE THOUSAND
+ case 0x109E0: retval = 6000; break; // MEROITIC CURSIVE NUMBER SIX THOUSAND
+ case 0x109E1: retval = 7000; break; // MEROITIC CURSIVE NUMBER SEVEN THOUSAND
+ case 0x109E2: retval = 8000; break; // MEROITIC CURSIVE NUMBER EIGHT THOUSAND
+ case 0x109E3: retval = 9000; break; // MEROITIC CURSIVE NUMBER NINE THOUSAND
+ case 0x109E4: retval = 10000; break; // MEROITIC CURSIVE NUMBER TEN THOUSAND
+ case 0x109E5: retval = 20000; break; // MEROITIC CURSIVE NUMBER TWENTY THOUSAND
+ case 0x109E6: retval = 30000; break; // MEROITIC CURSIVE NUMBER THIRTY THOUSAND
+ case 0x109E7: retval = 40000; break; // MEROITIC CURSIVE NUMBER FORTY THOUSAND
+ case 0x109E8: retval = 50000; break; // MEROITIC CURSIVE NUMBER FIFTY THOUSAND
+ case 0x109E9: retval = 60000; break; // MEROITIC CURSIVE NUMBER SIXTY THOUSAND
+ case 0x109EA: retval = 70000; break; // MEROITIC CURSIVE NUMBER SEVENTY THOUSAND
+ case 0x109EB: retval = 80000; break; // MEROITIC CURSIVE NUMBER EIGHTY THOUSAND
+ case 0x109EC: retval = 90000; break; // MEROITIC CURSIVE NUMBER NINETY THOUSAND
+ case 0x109ED: retval = 100000; break; // MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND
+ case 0x109EE: retval = 200000; break; // MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND
+ case 0x109EF: retval = 300000; break; // MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND
+ case 0x109F0: retval = 400000; break; // MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND
+ case 0x109F1: retval = 500000; break; // MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND
+ case 0x109F2: retval = 600000; break; // MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND
+ case 0x109F3: retval = 700000; break; // MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND
+ case 0x109F4: retval = 800000; break; // MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND
+ case 0x109F5: retval = 900000; break; // MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND
case 0x10A46: retval = 100; break; // KHAROSHTHI NUMBER ONE HUNDRED
case 0x10A47: retval = 1000; break; // KHAROSHTHI NUMBER ONE THOUSAND
case 0x10A7E: retval = 50; break; // OLD SOUTH ARABIAN NUMBER FIFTY
@@ -305,6 +346,9 @@
case 0x10B7E: retval = 100; break; // INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED
case 0x10B7F: retval = 1000; break; // INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
case 0x10BAF: retval = 100; break; // PSALTER PAHLAVI NUMBER ONE HUNDRED
+ case 0x10CFD: retval = 50; break; // OLD HUNGARIAN NUMBER FIFTY
+ case 0x10CFE: retval = 100; break; // OLD HUNGARIAN NUMBER ONE HUNDRED
+ case 0x10CFF: retval = 1000; break; // OLD HUNGARIAN NUMBER ONE THOUSAND
case 0x10E6C: retval = 40; break; // RUMI NUMBER FORTY
case 0x10E6D: retval = 50; break; // RUMI NUMBER FIFTY
case 0x10E6E: retval = 60; break; // RUMI NUMBER SIXTY
--- a/jdk/make/data/unicodedata/PropList.txt Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/make/data/unicodedata/PropList.txt Thu Oct 22 11:14:00 2015 -0700
@@ -1,8 +1,8 @@
-# PropList-7.0.0.txt
-# Date: 2014-02-19, 15:51:26 GMT [MD]
+# PropList-8.0.0.txt
+# Date: 2015-05-16, 17:50:38 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2014 Unicode, Inc.
+# Copyright (c) 1991-2015 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see http://www.unicode.org/reports/tr44/
@@ -189,18 +189,22 @@
11141..11143 ; Terminal_Punctuation # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
111C5..111C6 ; Terminal_Punctuation # Po [2] SHARADA DANDA..SHARADA DOUBLE DANDA
111CD ; Terminal_Punctuation # Po SHARADA SUTRA MARK
+111DE..111DF ; Terminal_Punctuation # Po [2] SHARADA SECTION MARK-1..SHARADA SECTION MARK-2
11238..1123C ; Terminal_Punctuation # Po [5] KHOJKI DANDA..KHOJKI DOUBLE SECTION MARK
+112A9 ; Terminal_Punctuation # Po MULTANI SECTION MARK
115C2..115C5 ; Terminal_Punctuation # Po [4] SIDDHAM DANDA..SIDDHAM SEPARATOR BAR
-115C9 ; Terminal_Punctuation # Po SIDDHAM END OF TEXT MARK
+115C9..115D7 ; Terminal_Punctuation # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
11641..11642 ; Terminal_Punctuation # Po [2] MODI DANDA..MODI DOUBLE DANDA
+1173C..1173E ; Terminal_Punctuation # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
12470..12474 ; Terminal_Punctuation # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
16A6E..16A6F ; Terminal_Punctuation # Po [2] MRO DANDA..MRO DOUBLE DANDA
16AF5 ; Terminal_Punctuation # Po BASSA VAH FULL STOP
16B37..16B39 ; Terminal_Punctuation # Po [3] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN CIM CHEEM
16B44 ; Terminal_Punctuation # Po PAHAWH HMONG SIGN XAUS
1BC9F ; Terminal_Punctuation # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+1DA87..1DA8A ; Terminal_Punctuation # Po [4] SIGNWRITING COMMA..SIGNWRITING COLON
-# Total code points: 214
+# Total code points: 238
# ================================================
@@ -425,7 +429,7 @@
081B..0823 ; Other_Alphabetic # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
0825..0827 ; Other_Alphabetic # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
0829..082C ; Other_Alphabetic # Mn [4] SAMARITAN VOWEL SIGN LONG I..SAMARITAN VOWEL SIGN SUKUN
-08E4..08E9 ; Other_Alphabetic # Mn [6] ARABIC CURLY FATHA..ARABIC CURLY KASRATAN
+08E3..08E9 ; Other_Alphabetic # Mn [7] ARABIC TURNED DAMMA BELOW..ARABIC CURLY KASRATAN
08F0..0902 ; Other_Alphabetic # Mn [19] ARABIC OPEN FATHATAN..DEVANAGARI SIGN ANUSVARA
0903 ; Other_Alphabetic # Mc DEVANAGARI SIGN VISARGA
093A ; Other_Alphabetic # Mn DEVANAGARI VOWEL SIGN OE
@@ -560,8 +564,6 @@
1930..1931 ; Other_Alphabetic # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
1932 ; Other_Alphabetic # Mn LIMBU SMALL LETTER ANUSVARA
1933..1938 ; Other_Alphabetic # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
-19B0..19C0 ; Other_Alphabetic # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
-19C8..19C9 ; Other_Alphabetic # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
1A17..1A18 ; Other_Alphabetic # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
1A19..1A1A ; Other_Alphabetic # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
1A1B ; Other_Alphabetic # Mn BUGINESE VOWEL SIGN AE
@@ -605,7 +607,7 @@
24B6..24E9 ; Other_Alphabetic # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
2DE0..2DFF ; Other_Alphabetic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
A674..A67B ; Other_Alphabetic # Mn [8] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC LETTER OMEGA
-A69F ; Other_Alphabetic # Mn COMBINING CYRILLIC LETTER IOTIFIED E
+A69E..A69F ; Other_Alphabetic # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
A823..A824 ; Other_Alphabetic # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
A825..A826 ; Other_Alphabetic # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
A827 ; Other_Alphabetic # Mc SYLOTI NAGRI VOWEL SIGN OO
@@ -672,7 +674,7 @@
112DF ; Other_Alphabetic # Mn KHUDAWADI SIGN ANUSVARA
112E0..112E2 ; Other_Alphabetic # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
112E3..112E8 ; Other_Alphabetic # Mn [6] KHUDAWADI VOWEL SIGN U..KHUDAWADI VOWEL SIGN AU
-11301 ; Other_Alphabetic # Mn GRANTHA SIGN CANDRABINDU
+11300..11301 ; Other_Alphabetic # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
11302..11303 ; Other_Alphabetic # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
1133E..1133F ; Other_Alphabetic # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
11340 ; Other_Alphabetic # Mn GRANTHA VOWEL SIGN II
@@ -693,6 +695,7 @@
115B8..115BB ; Other_Alphabetic # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
115BC..115BD ; Other_Alphabetic # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
115BE ; Other_Alphabetic # Mc SIDDHAM SIGN VISARGA
+115DC..115DD ; Other_Alphabetic # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
11630..11632 ; Other_Alphabetic # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
11633..1163A ; Other_Alphabetic # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
1163B..1163C ; Other_Alphabetic # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
@@ -704,6 +707,11 @@
116AD ; Other_Alphabetic # Mn TAKRI VOWEL SIGN AA
116AE..116AF ; Other_Alphabetic # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
116B0..116B5 ; Other_Alphabetic # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+1171D..1171F ; Other_Alphabetic # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11720..11721 ; Other_Alphabetic # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+11722..11725 ; Other_Alphabetic # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11726 ; Other_Alphabetic # Mc AHOM VOWEL SIGN E
+11727..1172A ; Other_Alphabetic # Mn [4] AHOM VOWEL SIGN AW..AHOM VOWEL SIGN AM
16B30..16B36 ; Other_Alphabetic # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
16F51..16F7E ; Other_Alphabetic # Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG
1BC9E ; Other_Alphabetic # Mn DUPLOYAN DOUBLE MARK
@@ -720,15 +728,16 @@
3021..3029 ; Ideographic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
3038..303A ; Ideographic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
3400..4DB5 ; Ideographic # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FCC ; Ideographic # Lo [20941] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCC
+4E00..9FD5 ; Ideographic # Lo [20950] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FD5
F900..FA6D ; Ideographic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
20000..2A6D6 ; Ideographic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
2A700..2B734 ; Ideographic # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Ideographic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; Ideographic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 75633
+# Total code points: 81404
# ================================================
@@ -773,7 +782,7 @@
07EB..07F3 ; Diacritic # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
07F4..07F5 ; Diacritic # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
0818..0819 ; Diacritic # Mn [2] SAMARITAN MARK OCCLUSION..SAMARITAN MARK DAGESH
-08E4..08FE ; Diacritic # Mn [27] ARABIC CURLY FATHA..ARABIC DAMMA WITH DOT
+08E3..08FE ; Diacritic # Mn [28] ARABIC TURNED DAMMA BELOW..ARABIC DAMMA WITH DOT
093C ; Diacritic # Mn DEVANAGARI SIGN NUKTA
094D ; Diacritic # Mn DEVANAGARI SIGN VIRAMA
0951..0954 ; Diacritic # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
@@ -877,7 +886,7 @@
ABEC ; Diacritic # Mc MEETEI MAYEK LUM IYEK
ABED ; Diacritic # Mn MEETEI MAYEK APUN IYEK
FB1E ; Diacritic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
-FE20..FE2D ; Diacritic # Mn [14] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON BELOW
+FE20..FE2F ; Diacritic # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
FF3E ; Diacritic # Sk FULLWIDTH CIRCUMFLEX ACCENT
FF40 ; Diacritic # Sk FULLWIDTH GRAVE ACCENT
FF70 ; Diacritic # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
@@ -889,6 +898,7 @@
11133..11134 ; Diacritic # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA
11173 ; Diacritic # Mn MAHAJANI SIGN NUKTA
111C0 ; Diacritic # Mc SHARADA SIGN VIRAMA
+111CA..111CC ; Diacritic # Mn [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK
11235 ; Diacritic # Mc KHOJKI SIGN VIRAMA
11236 ; Diacritic # Mn KHOJKI SIGN NUKTA
112E9..112EA ; Diacritic # Mn [2] KHUDAWADI SIGN NUKTA..KHUDAWADI SIGN VIRAMA
@@ -901,6 +911,7 @@
1163F ; Diacritic # Mn MODI SIGN VIRAMA
116B6 ; Diacritic # Mc TAKRI SIGN VIRAMA
116B7 ; Diacritic # Mn TAKRI SIGN NUKTA
+1172B ; Diacritic # Mn AHOM SIGN KILLER
16AF0..16AF4 ; Diacritic # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
16F8F..16F92 ; Diacritic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
16F93..16F9F ; Diacritic # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
@@ -911,7 +922,7 @@
1D1AA..1D1AD ; Diacritic # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
1E8D0..1E8D6 ; Diacritic # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
-# Total code points: 766
+# Total code points: 773
# ================================================
@@ -1053,7 +1064,7 @@
# ================================================
3400..4DB5 ; Unified_Ideograph # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FCC ; Unified_Ideograph # Lo [20941] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCC
+4E00..9FD5 ; Unified_Ideograph # Lo [20950] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FD5
FA0E..FA0F ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F
FA11 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA11
FA13..FA14 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14
@@ -1064,8 +1075,9 @@
20000..2A6D6 ; Unified_Ideograph # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
2A700..2B734 ; Unified_Ideograph # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Unified_Ideograph # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; Unified_Ideograph # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
-# Total code points: 74617
+# Total code points: 80388
# ================================================
@@ -1094,9 +1106,9 @@
2329 ; Deprecated # Ps LEFT-POINTING ANGLE BRACKET
232A ; Deprecated # Pe RIGHT-POINTING ANGLE BRACKET
E0001 ; Deprecated # Cf LANGUAGE TAG
-E0020..E007F ; Deprecated # Cf [96] TAG SPACE..CANCEL TAG
+E007F ; Deprecated # Cf CANCEL TAG
-# Total code points: 111
+# Total code points: 16
# ================================================
@@ -1138,11 +1150,13 @@
0E40..0E44 ; Logical_Order_Exception # Lo [5] THAI CHARACTER SARA E..THAI CHARACTER SARA AI MAIMALAI
0EC0..0EC4 ; Logical_Order_Exception # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+19B5..19B7 ; Logical_Order_Exception # Lo [3] NEW TAI LUE VOWEL SIGN E..NEW TAI LUE VOWEL SIGN O
+19BA ; Logical_Order_Exception # Lo NEW TAI LUE VOWEL SIGN AY
AAB5..AAB6 ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O
AAB9 ; Logical_Order_Exception # Lo TAI VIET VOWEL UEA
AABB..AABC ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL AUE..TAI VIET VOWEL AY
-# Total code points: 15
+# Total code points: 19
# ================================================
@@ -1213,18 +1227,22 @@
11141..11143 ; STerm # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
111C5..111C6 ; STerm # Po [2] SHARADA DANDA..SHARADA DOUBLE DANDA
111CD ; STerm # Po SHARADA SUTRA MARK
+111DE..111DF ; STerm # Po [2] SHARADA SECTION MARK-1..SHARADA SECTION MARK-2
11238..11239 ; STerm # Po [2] KHOJKI DANDA..KHOJKI DOUBLE DANDA
1123B..1123C ; STerm # Po [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK
+112A9 ; STerm # Po MULTANI SECTION MARK
115C2..115C3 ; STerm # Po [2] SIDDHAM DANDA..SIDDHAM DOUBLE DANDA
-115C9 ; STerm # Po SIDDHAM END OF TEXT MARK
+115C9..115D7 ; STerm # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
11641..11642 ; STerm # Po [2] MODI DANDA..MODI DOUBLE DANDA
+1173C..1173E ; STerm # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
16A6E..16A6F ; STerm # Po [2] MRO DANDA..MRO DOUBLE DANDA
16AF5 ; STerm # Po BASSA VAH FULL STOP
16B37..16B38 ; STerm # Po [2] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS TSHAB CEEB
16B44 ; STerm # Po PAHAWH HMONG SIGN XAUS
1BC9F ; STerm # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+1DA88 ; STerm # Po SIGNWRITING FULL STOP
-# Total code points: 99
+# Total code points: 120
# ================================================
@@ -1432,7 +1450,9 @@
2BBD..2BC8 ; Pattern_Syntax # So [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
2BC9 ; Pattern_Syntax # Cn <reserved-2BC9>
2BCA..2BD1 ; Pattern_Syntax # So [8] TOP HALF BLACK CIRCLE..UNCERTAINTY SIGN
-2BD2..2BFF ; Pattern_Syntax # Cn [46] <reserved-2BD2>..<reserved-2BFF>
+2BD2..2BEB ; Pattern_Syntax # Cn [26] <reserved-2BD2>..<reserved-2BEB>
+2BEC..2BEF ; Pattern_Syntax # So [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+2BF0..2BFF ; Pattern_Syntax # Cn [16] <reserved-2BF0>..<reserved-2BFF>
2E00..2E01 ; Pattern_Syntax # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
2E02 ; Pattern_Syntax # Pi LEFT SUBSTITUTION BRACKET
2E03 ; Pattern_Syntax # Pf RIGHT SUBSTITUTION BRACKET
--- a/jdk/make/data/unicodedata/Scripts.txt Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/make/data/unicodedata/Scripts.txt Thu Oct 22 11:14:00 2015 -0700
@@ -1,10 +1,16 @@
-# Scripts-7.0.0.txt
-# Date: 2014-05-15, 00:11:35 GMT [MD]
+# Scripts-8.0.0.txt
+# Date: 2015-03-11, 22:29:42 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2014 Unicode, Inc.
+# Copyright (c) 1991-2015 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see http://www.unicode.org/reports/tr44/
+# For more information, see:
+# UAX #24, Unicode Script Property: http://www.unicode.org/reports/tr24/
+# Especially the sections:
+# http://www.unicode.org/reports/tr24/#Assignment_Script_Values
+# http://www.unicode.org/reports/tr24/#Assignment_ScriptX_Values
+#
# ================================================
@@ -89,7 +95,6 @@
061C ; Common # Cf ARABIC LETTER MARK
061F ; Common # Po ARABIC QUESTION MARK
0640 ; Common # Lm ARABIC TATWEEL
-0660..0669 ; Common # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
06DD ; Common # Cf ARABIC END OF AYAH
0964..0965 ; Common # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
0E3F ; Common # Sc THAI CURRENCY SYMBOL BAHT
@@ -148,7 +153,7 @@
208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS
208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS
-20A0..20BD ; Common # Sc [30] EURO-CURRENCY SIGN..RUBLE SIGN
+20A0..20BE ; Common # Sc [31] EURO-CURRENCY SIGN..LARI SIGN
2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
2102 ; Common # L& DOUBLE-STRUCK CAPITAL C
2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA
@@ -182,6 +187,7 @@
214F ; Common # So SYMBOL FOR SAMARITAN SOURCE
2150..215F ; Common # No [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE
2189 ; Common # No VULGAR FRACTION ZERO THIRDS
+218A..218B ; Common # So [2] TURNED DIGIT TWO..TURNED DIGIT THREE
2190..2194 ; Common # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
2195..2199 ; Common # So [5] UP DOWN ARROW..SOUTH WEST ARROW
219A..219B ; Common # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
@@ -304,6 +310,7 @@
2B98..2BB9 ; Common # So [34] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX
2BBD..2BC8 ; Common # So [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
2BCA..2BD1 ; Common # So [8] TOP HALF BLACK CIRCLE..UNCERTAINTY SIGN
+2BEC..2BEF ; Common # So [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
2E00..2E01 ; Common # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
2E02 ; Common # Pi LEFT SUBSTITUTION BRACKET
2E03 ; Common # Pf RIGHT SUBSTITUTION BRACKET
@@ -512,7 +519,7 @@
1D173..1D17A ; Common # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
1D183..1D184 ; Common # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
1D18C..1D1A9 ; Common # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
-1D1AE..1D1DD ; Common # So [48] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL PES SUBPUNCTIS
+1D1AE..1D1E8 ; Common # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN
1D300..1D356 ; Common # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
1D360..1D371 ; Common # No [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE
1D400..1D454 ; Common # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
@@ -571,16 +578,11 @@
1F210..1F23A ; Common # So [43] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-55B6
1F240..1F248 ; Common # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F250..1F251 ; Common # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
-1F300..1F32C ; Common # So [45] CYCLONE..WIND BLOWING FACE
-1F330..1F37D ; Common # So [78] CHESTNUT..FORK AND KNIFE WITH PLATE
-1F380..1F3CE ; Common # So [79] RIBBON..RACING CAR
-1F3D4..1F3F7 ; Common # So [36] SNOW CAPPED MOUNTAIN..LABEL
-1F400..1F4FE ; Common # So [255] RAT..PORTABLE STEREO
-1F500..1F54A ; Common # So [75] TWISTED RIGHTWARDS ARROWS..DOVE OF PEACE
-1F550..1F579 ; Common # So [42] CLOCK FACE ONE OCLOCK..JOYSTICK
+1F300..1F3FA ; Common # So [251] CYCLONE..AMPHORA
+1F3FB..1F3FF ; Common # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
+1F400..1F579 ; Common # So [378] RAT..JOYSTICK
1F57B..1F5A3 ; Common # So [41] LEFT HAND TELEPHONE RECEIVER..BLACK DOWN POINTING BACKHAND INDEX
-1F5A5..1F642 ; Common # So [158] DESKTOP COMPUTER..SLIGHTLY SMILING FACE
-1F645..1F6CF ; Common # So [139] FACE WITH NO GOOD GESTURE..BED
+1F5A5..1F6D0 ; Common # So [300] DESKTOP COMPUTER..PLACE OF WORSHIP
1F6E0..1F6EC ; Common # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
1F6F0..1F6F3 ; Common # So [4] SATELLITE..PASSENGER SHIP
1F700..1F773 ; Common # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
@@ -590,10 +592,13 @@
1F850..1F859 ; Common # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
1F860..1F887 ; Common # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
1F890..1F8AD ; Common # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
+1F910..1F918 ; Common # So [9] ZIPPER-MOUTH FACE..SIGN OF THE HORNS
+1F980..1F984 ; Common # So [5] CRAB..UNICORN FACE
+1F9C0 ; Common # So CHEESE WEDGE
E0001 ; Common # Cf LANGUAGE TAG
E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
-# Total code points: 7129
+# Total code points: 7179
# ================================================
@@ -635,20 +640,21 @@
A770 ; Latin # Lm MODIFIER LETTER US
A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
A78B..A78E ; Latin # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A78F ; Latin # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7AD ; Latin # L& [30] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER L WITH BELT
-A7B0..A7B1 ; Latin # L& [2] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER TURNED T
+A7B0..A7B7 ; Latin # L& [8] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER OMEGA
A7F7 ; Latin # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; Latin # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; Latin # L& LATIN LETTER SMALL CAPITAL TURNED M
A7FB..A7FF ; Latin # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
AB30..AB5A ; Latin # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5C..AB5F ; Latin # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB64 ; Latin # L& LATIN SMALL LETTER INVERTED ALPHA
+AB60..AB64 ; Latin # L& [5] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER INVERTED ALPHA
FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
-# Total code points: 1338
+# Total code points: 1349
# ================================================
@@ -731,9 +737,10 @@
A67F ; Cyrillic # Lm CYRILLIC PAYEROK
A680..A69B ; Cyrillic # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
A69C..A69D ; Cyrillic # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
-A69F ; Cyrillic # Mn COMBINING CYRILLIC LETTER IOTIFIED E
-
-# Total code points: 431
+A69E..A69F ; Cyrillic # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+FE2E..FE2F ; Cyrillic # Mn [2] COMBINING CYRILLIC TITLO LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+
+# Total code points: 434
# ================================================
@@ -788,6 +795,7 @@
0620..063F ; Arabic # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
0641..064A ; Arabic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
0656..065F ; Arabic # Mn [10] ARABIC SUBSCRIPT ALEF..ARABIC WAVY HAMZA BELOW
+0660..0669 ; Arabic # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
066A..066D ; Arabic # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
066E..066F ; Arabic # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
0671..06D3 ; Arabic # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
@@ -806,8 +814,8 @@
06FD..06FE ; Arabic # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V
0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
-08A0..08B2 ; Arabic # Lo [19] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER ZAIN WITH INVERTED V ABOVE
-08E4..08FF ; Arabic # Mn [28] ARABIC CURLY FATHA..ARABIC MARK SIDEWAYS NOON GHUNNA
+08A0..08B4 ; Arabic # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
+08E3..08FF ; Arabic # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
FBB2..FBC1 ; Arabic # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
@@ -854,7 +862,7 @@
1EEAB..1EEBB ; Arabic # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
1EEF0..1EEF1 ; Arabic # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
-# Total code points: 1244
+# Total code points: 1257
# ================================================
@@ -902,8 +910,10 @@
A8F2..A8F7 ; Devanagari # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
A8F8..A8FA ; Devanagari # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
-
-# Total code points: 152
+A8FC ; Devanagari # Po DEVANAGARI SIGN SIDDHAM
+A8FD ; Devanagari # Lo DEVANAGARI JAIN OM
+
+# Total code points: 154
# ================================================
@@ -987,8 +997,9 @@
0AE6..0AEF ; Gujarati # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
0AF0 ; Gujarati # Po GUJARATI ABBREVIATION SIGN
0AF1 ; Gujarati # Sc GUJARATI RUPEE SIGN
-
-# Total code points: 84
+0AF9 ; Gujarati # Lo GUJARATI LETTER ZHA
+
+# Total code points: 85
# ================================================
@@ -1064,14 +1075,14 @@
0C46..0C48 ; Telugu # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
0C4A..0C4D ; Telugu # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
0C55..0C56 ; Telugu # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
-0C58..0C59 ; Telugu # Lo [2] TELUGU LETTER TSA..TELUGU LETTER DZA
+0C58..0C5A ; Telugu # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
0C60..0C61 ; Telugu # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
0C62..0C63 ; Telugu # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
0C66..0C6F ; Telugu # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
0C78..0C7E ; Telugu # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
0C7F ; Telugu # So TELUGU SIGN TUUMU
-# Total code points: 95
+# Total code points: 96
# ================================================
@@ -1115,14 +1126,14 @@
0D4D ; Malayalam # Mn MALAYALAM SIGN VIRAMA
0D4E ; Malayalam # Lo MALAYALAM LETTER DOT REPH
0D57 ; Malayalam # Mc MALAYALAM AU LENGTH MARK
-0D60..0D61 ; Malayalam # Lo [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
+0D5F..0D61 ; Malayalam # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
0D62..0D63 ; Malayalam # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
0D66..0D6F ; Malayalam # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
0D70..0D75 ; Malayalam # No [6] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE QUARTERS
0D79 ; Malayalam # So MALAYALAM DATE MARK
0D7A..0D7F ; Malayalam # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
-# Total code points: 99
+# Total code points: 100
# ================================================
@@ -1358,9 +1369,11 @@
# ================================================
-13A0..13F4 ; Cherokee # Lo [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
-
-# Total code points: 85
+13A0..13F5 ; Cherokee # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+13F8..13FD ; Cherokee # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+AB70..ABBF ; Cherokee # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+
+# Total code points: 172
# ================================================
@@ -1472,15 +1485,16 @@
3038..303A ; Han # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
303B ; Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
3400..4DB5 ; Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FCC ; Han # Lo [20941] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCC
+4E00..9FD5 ; Han # Lo [20950] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FD5
F900..FA6D ; Han # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
2A700..2B734 ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Han # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; Han # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 75963
+# Total code points: 81734
# ================================================
@@ -1680,9 +1694,7 @@
# ================================================
1980..19AB ; New_Tai_Lue # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
-19B0..19C0 ; New_Tai_Lue # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
-19C1..19C7 ; New_Tai_Lue # Lo [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
-19C8..19C9 ; New_Tai_Lue # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
+19B0..19C9 ; New_Tai_Lue # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
19D0..19D9 ; New_Tai_Lue # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
19DA ; New_Tai_Lue # No NEW TAI LUE THAM DIGIT ONE
19DE..19DF ; New_Tai_Lue # So [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
@@ -1770,11 +1782,12 @@
# ================================================
-12000..12398 ; Cuneiform # Lo [921] CUNEIFORM SIGN A..CUNEIFORM SIGN UM TIMES ME
+12000..12399 ; Cuneiform # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
12400..1246E ; Cuneiform # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
12470..12474 ; Cuneiform # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
-
-# Total code points: 1037
+12480..12543 ; Cuneiform # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+
+# Total code points: 1234
# ================================================
@@ -2151,9 +2164,12 @@
# ================================================
109A0..109B7 ; Meroitic_Cursive # Lo [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA
+109BC..109BD ; Meroitic_Cursive # No [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF
109BE..109BF ; Meroitic_Cursive # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
-
-# Total code points: 26
+109C0..109CF ; Meroitic_Cursive # No [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY
+109D2..109FF ; Meroitic_Cursive # No [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS
+
+# Total code points: 90
# ================================================
@@ -2180,12 +2196,16 @@
111B6..111BE ; Sharada # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111BF..111C0 ; Sharada # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
111C1..111C4 ; Sharada # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
-111C5..111C8 ; Sharada # Po [4] SHARADA DANDA..SHARADA SEPARATOR
+111C5..111C9 ; Sharada # Po [5] SHARADA DANDA..SHARADA SANDHI MARK
+111CA..111CC ; Sharada # Mn [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK
111CD ; Sharada # Po SHARADA SUTRA MARK
111D0..111D9 ; Sharada # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
111DA ; Sharada # Lo SHARADA EKAM
-
-# Total code points: 85
+111DB ; Sharada # Po SHARADA SIGN SIDDHAM
+111DC ; Sharada # Lo SHARADA HEADSTROKE
+111DD..111DF ; Sharada # Po [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2
+
+# Total code points: 94
# ================================================
@@ -2243,7 +2263,7 @@
# ================================================
-11301 ; Grantha # Mn GRANTHA SIGN CANDRABINDU
+11300..11301 ; Grantha # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
11302..11303 ; Grantha # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
11305..1130C ; Grantha # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
1130F..11310 ; Grantha # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI
@@ -2258,13 +2278,14 @@
11341..11344 ; Grantha # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
11347..11348 ; Grantha # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
1134B..1134D ; Grantha # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
+11350 ; Grantha # Lo GRANTHA OM
11357 ; Grantha # Mc GRANTHA AU LENGTH MARK
1135D..11361 ; Grantha # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
11362..11363 ; Grantha # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
11366..1136C ; Grantha # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
11370..11374 ; Grantha # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
-# Total code points: 83
+# Total code points: 85
# ================================================
@@ -2407,9 +2428,11 @@
115BC..115BD ; Siddham # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
115BE ; Siddham # Mc SIDDHAM SIGN VISARGA
115BF..115C0 ; Siddham # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
-115C1..115C9 ; Siddham # Po [9] SIDDHAM SIGN SIDDHAM..SIDDHAM END OF TEXT MARK
-
-# Total code points: 72
+115C1..115D7 ; Siddham # Po [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
+115D8..115DB ; Siddham # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
+115DC..115DD ; Siddham # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+
+# Total code points: 92
# ================================================
@@ -2448,4 +2471,69 @@
# Total code points: 84
+# ================================================
+
+11700..11719 ; Ahom # Lo [26] AHOM LETTER KA..AHOM LETTER JHA
+1171D..1171F ; Ahom # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11720..11721 ; Ahom # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+11722..11725 ; Ahom # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11726 ; Ahom # Mc AHOM VOWEL SIGN E
+11727..1172B ; Ahom # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+11730..11739 ; Ahom # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
+1173A..1173B ; Ahom # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
+1173C..1173E ; Ahom # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+1173F ; Ahom # So AHOM SYMBOL VI
+
+# Total code points: 57
+
+# ================================================
+
+14400..14646 ; Anatolian_Hieroglyphs # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
+
+# Total code points: 583
+
+# ================================================
+
+108E0..108F2 ; Hatran # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+108F4..108F5 ; Hatran # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+108FB..108FF ; Hatran # No [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED
+
+# Total code points: 26
+
+# ================================================
+
+11280..11286 ; Multani # Lo [7] MULTANI LETTER A..MULTANI LETTER GA
+11288 ; Multani # Lo MULTANI LETTER GHA
+1128A..1128D ; Multani # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA
+1128F..1129D ; Multani # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA
+1129F..112A8 ; Multani # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+112A9 ; Multani # Po MULTANI SECTION MARK
+
+# Total code points: 38
+
+# ================================================
+
+10C80..10CB2 ; Old_Hungarian # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2 ; Old_Hungarian # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+10CFA..10CFF ; Old_Hungarian # No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
+
+# Total code points: 108
+
+# ================================================
+
+1D800..1D9FF ; SignWriting # So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD
+1DA00..1DA36 ; SignWriting # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
+1DA37..1DA3A ; SignWriting # So [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE
+1DA3B..1DA6C ; SignWriting # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
+1DA6D..1DA74 ; SignWriting # So [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING
+1DA75 ; SignWriting # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+1DA76..1DA83 ; SignWriting # So [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH
+1DA84 ; SignWriting # Mn SIGNWRITING LOCATION HEAD NECK
+1DA85..1DA86 ; SignWriting # So [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS
+1DA87..1DA8B ; SignWriting # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS
+1DA9B..1DA9F ; SignWriting # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
+1DAA1..1DAAF ; SignWriting # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+
+# Total code points: 672
+
# EOF
--- a/jdk/make/data/unicodedata/SpecialCasing.txt Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/make/data/unicodedata/SpecialCasing.txt Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
-# SpecialCasing-7.0.0.txt
-# Date: 2014-03-18, 07:18:02 GMT [MD]
+# SpecialCasing-8.0.0.txt
+# Date: 2014-12-16, 23:08:04 GMT [MD]
#
# Unicode Character Database
# Copyright (c) 1991-2014 Unicode, Inc.
--- a/jdk/make/data/unicodedata/UnicodeData.txt Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/make/data/unicodedata/UnicodeData.txt Thu Oct 22 11:14:00 2015 -0700
@@ -667,7 +667,7 @@
029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
-029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;A7B2;;A7B2
029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;A7B0;;A7B0
029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
@@ -2091,6 +2091,9 @@
08B0;ARABIC LETTER GAF WITH INVERTED STROKE;Lo;0;AL;;;;;N;;;;;
08B1;ARABIC LETTER STRAIGHT WAW;Lo;0;AL;;;;;N;;;;;
08B2;ARABIC LETTER ZAIN WITH INVERTED V ABOVE;Lo;0;AL;;;;;N;;;;;
+08B3;ARABIC LETTER AIN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+08B4;ARABIC LETTER KAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+08E3;ARABIC TURNED DAMMA BELOW;Mn;220;NSM;;;;;N;;;;;
08E4;ARABIC CURLY FATHA;Mn;230;NSM;;;;;N;;;;;
08E5;ARABIC CURLY DAMMA;Mn;230;NSM;;;;;N;;;;;
08E6;ARABIC CURLY KASRA;Mn;220;NSM;;;;;N;;;;;
@@ -2503,6 +2506,7 @@
0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
0AF0;GUJARATI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+0AF9;GUJARATI LETTER ZHA;Lo;0;L;;;;;N;;;;;
0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
@@ -2738,6 +2742,7 @@
0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;;
0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;;
+0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;;
0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
@@ -2919,6 +2924,7 @@
0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
0D4E;MALAYALAM LETTER DOT REPH;Lo;0;L;;;;;N;;;;;
0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D5F;MALAYALAM LETTER ARCHAIC II;Lo;0;L;;;;;N;;;;;
0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
0D62;MALAYALAM VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
@@ -4289,91 +4295,98 @@
1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;;
1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;;
1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;;
-13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
-13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
-13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
-13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;;
-13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;;
-13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;;
-13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;;
-13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;;
-13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;;
-13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;;
-13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;;
-13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;;
-13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;;
-13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;;
-13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;;
-13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;;
-13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;;
-13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;;
-13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;;
-13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;;
-13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;;
-13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;;
-13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;;
-13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;;
-13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;;
-13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;;
-13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;;
-13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;;
-13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;;
-13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;;
-13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;;
-13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;;
-13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;;
-13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;;
-13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;;
-13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;;
-13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;;
-13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;;
-13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;;
-13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;;
-13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;;
-13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;;
-13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;;
-13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;;
-13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;;
-13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;;
-13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;;
-13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;;
-13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;;
-13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;;
-13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;;
-13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;;
-13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;;
-13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;;
-13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;;
-13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;;
-13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;;
-13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;;
-13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;;
-13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;;
-13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;;
-13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;;
-13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;;
-13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;;
-13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;;
-13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;;
-13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;;
-13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;;
-13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;;
-13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;;
-13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;;
-13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;;
-13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;;
-13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;;
-13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;;
-13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;;
-13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;;
-13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;;
-13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;;
-13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;;
-13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;;
-13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;;
-13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;;
-13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;;
-13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;;
+13A0;CHEROKEE LETTER A;Lu;0;L;;;;;N;;;;AB70;
+13A1;CHEROKEE LETTER E;Lu;0;L;;;;;N;;;;AB71;
+13A2;CHEROKEE LETTER I;Lu;0;L;;;;;N;;;;AB72;
+13A3;CHEROKEE LETTER O;Lu;0;L;;;;;N;;;;AB73;
+13A4;CHEROKEE LETTER U;Lu;0;L;;;;;N;;;;AB74;
+13A5;CHEROKEE LETTER V;Lu;0;L;;;;;N;;;;AB75;
+13A6;CHEROKEE LETTER GA;Lu;0;L;;;;;N;;;;AB76;
+13A7;CHEROKEE LETTER KA;Lu;0;L;;;;;N;;;;AB77;
+13A8;CHEROKEE LETTER GE;Lu;0;L;;;;;N;;;;AB78;
+13A9;CHEROKEE LETTER GI;Lu;0;L;;;;;N;;;;AB79;
+13AA;CHEROKEE LETTER GO;Lu;0;L;;;;;N;;;;AB7A;
+13AB;CHEROKEE LETTER GU;Lu;0;L;;;;;N;;;;AB7B;
+13AC;CHEROKEE LETTER GV;Lu;0;L;;;;;N;;;;AB7C;
+13AD;CHEROKEE LETTER HA;Lu;0;L;;;;;N;;;;AB7D;
+13AE;CHEROKEE LETTER HE;Lu;0;L;;;;;N;;;;AB7E;
+13AF;CHEROKEE LETTER HI;Lu;0;L;;;;;N;;;;AB7F;
+13B0;CHEROKEE LETTER HO;Lu;0;L;;;;;N;;;;AB80;
+13B1;CHEROKEE LETTER HU;Lu;0;L;;;;;N;;;;AB81;
+13B2;CHEROKEE LETTER HV;Lu;0;L;;;;;N;;;;AB82;
+13B3;CHEROKEE LETTER LA;Lu;0;L;;;;;N;;;;AB83;
+13B4;CHEROKEE LETTER LE;Lu;0;L;;;;;N;;;;AB84;
+13B5;CHEROKEE LETTER LI;Lu;0;L;;;;;N;;;;AB85;
+13B6;CHEROKEE LETTER LO;Lu;0;L;;;;;N;;;;AB86;
+13B7;CHEROKEE LETTER LU;Lu;0;L;;;;;N;;;;AB87;
+13B8;CHEROKEE LETTER LV;Lu;0;L;;;;;N;;;;AB88;
+13B9;CHEROKEE LETTER MA;Lu;0;L;;;;;N;;;;AB89;
+13BA;CHEROKEE LETTER ME;Lu;0;L;;;;;N;;;;AB8A;
+13BB;CHEROKEE LETTER MI;Lu;0;L;;;;;N;;;;AB8B;
+13BC;CHEROKEE LETTER MO;Lu;0;L;;;;;N;;;;AB8C;
+13BD;CHEROKEE LETTER MU;Lu;0;L;;;;;N;;;;AB8D;
+13BE;CHEROKEE LETTER NA;Lu;0;L;;;;;N;;;;AB8E;
+13BF;CHEROKEE LETTER HNA;Lu;0;L;;;;;N;;;;AB8F;
+13C0;CHEROKEE LETTER NAH;Lu;0;L;;;;;N;;;;AB90;
+13C1;CHEROKEE LETTER NE;Lu;0;L;;;;;N;;;;AB91;
+13C2;CHEROKEE LETTER NI;Lu;0;L;;;;;N;;;;AB92;
+13C3;CHEROKEE LETTER NO;Lu;0;L;;;;;N;;;;AB93;
+13C4;CHEROKEE LETTER NU;Lu;0;L;;;;;N;;;;AB94;
+13C5;CHEROKEE LETTER NV;Lu;0;L;;;;;N;;;;AB95;
+13C6;CHEROKEE LETTER QUA;Lu;0;L;;;;;N;;;;AB96;
+13C7;CHEROKEE LETTER QUE;Lu;0;L;;;;;N;;;;AB97;
+13C8;CHEROKEE LETTER QUI;Lu;0;L;;;;;N;;;;AB98;
+13C9;CHEROKEE LETTER QUO;Lu;0;L;;;;;N;;;;AB99;
+13CA;CHEROKEE LETTER QUU;Lu;0;L;;;;;N;;;;AB9A;
+13CB;CHEROKEE LETTER QUV;Lu;0;L;;;;;N;;;;AB9B;
+13CC;CHEROKEE LETTER SA;Lu;0;L;;;;;N;;;;AB9C;
+13CD;CHEROKEE LETTER S;Lu;0;L;;;;;N;;;;AB9D;
+13CE;CHEROKEE LETTER SE;Lu;0;L;;;;;N;;;;AB9E;
+13CF;CHEROKEE LETTER SI;Lu;0;L;;;;;N;;;;AB9F;
+13D0;CHEROKEE LETTER SO;Lu;0;L;;;;;N;;;;ABA0;
+13D1;CHEROKEE LETTER SU;Lu;0;L;;;;;N;;;;ABA1;
+13D2;CHEROKEE LETTER SV;Lu;0;L;;;;;N;;;;ABA2;
+13D3;CHEROKEE LETTER DA;Lu;0;L;;;;;N;;;;ABA3;
+13D4;CHEROKEE LETTER TA;Lu;0;L;;;;;N;;;;ABA4;
+13D5;CHEROKEE LETTER DE;Lu;0;L;;;;;N;;;;ABA5;
+13D6;CHEROKEE LETTER TE;Lu;0;L;;;;;N;;;;ABA6;
+13D7;CHEROKEE LETTER DI;Lu;0;L;;;;;N;;;;ABA7;
+13D8;CHEROKEE LETTER TI;Lu;0;L;;;;;N;;;;ABA8;
+13D9;CHEROKEE LETTER DO;Lu;0;L;;;;;N;;;;ABA9;
+13DA;CHEROKEE LETTER DU;Lu;0;L;;;;;N;;;;ABAA;
+13DB;CHEROKEE LETTER DV;Lu;0;L;;;;;N;;;;ABAB;
+13DC;CHEROKEE LETTER DLA;Lu;0;L;;;;;N;;;;ABAC;
+13DD;CHEROKEE LETTER TLA;Lu;0;L;;;;;N;;;;ABAD;
+13DE;CHEROKEE LETTER TLE;Lu;0;L;;;;;N;;;;ABAE;
+13DF;CHEROKEE LETTER TLI;Lu;0;L;;;;;N;;;;ABAF;
+13E0;CHEROKEE LETTER TLO;Lu;0;L;;;;;N;;;;ABB0;
+13E1;CHEROKEE LETTER TLU;Lu;0;L;;;;;N;;;;ABB1;
+13E2;CHEROKEE LETTER TLV;Lu;0;L;;;;;N;;;;ABB2;
+13E3;CHEROKEE LETTER TSA;Lu;0;L;;;;;N;;;;ABB3;
+13E4;CHEROKEE LETTER TSE;Lu;0;L;;;;;N;;;;ABB4;
+13E5;CHEROKEE LETTER TSI;Lu;0;L;;;;;N;;;;ABB5;
+13E6;CHEROKEE LETTER TSO;Lu;0;L;;;;;N;;;;ABB6;
+13E7;CHEROKEE LETTER TSU;Lu;0;L;;;;;N;;;;ABB7;
+13E8;CHEROKEE LETTER TSV;Lu;0;L;;;;;N;;;;ABB8;
+13E9;CHEROKEE LETTER WA;Lu;0;L;;;;;N;;;;ABB9;
+13EA;CHEROKEE LETTER WE;Lu;0;L;;;;;N;;;;ABBA;
+13EB;CHEROKEE LETTER WI;Lu;0;L;;;;;N;;;;ABBB;
+13EC;CHEROKEE LETTER WO;Lu;0;L;;;;;N;;;;ABBC;
+13ED;CHEROKEE LETTER WU;Lu;0;L;;;;;N;;;;ABBD;
+13EE;CHEROKEE LETTER WV;Lu;0;L;;;;;N;;;;ABBE;
+13EF;CHEROKEE LETTER YA;Lu;0;L;;;;;N;;;;ABBF;
+13F0;CHEROKEE LETTER YE;Lu;0;L;;;;;N;;;;13F8;
+13F1;CHEROKEE LETTER YI;Lu;0;L;;;;;N;;;;13F9;
+13F2;CHEROKEE LETTER YO;Lu;0;L;;;;;N;;;;13FA;
+13F3;CHEROKEE LETTER YU;Lu;0;L;;;;;N;;;;13FB;
+13F4;CHEROKEE LETTER YV;Lu;0;L;;;;;N;;;;13FC;
+13F5;CHEROKEE LETTER MV;Lu;0;L;;;;;N;;;;13FD;
+13F8;CHEROKEE SMALL LETTER YE;Ll;0;L;;;;;N;;;13F0;;13F0
+13F9;CHEROKEE SMALL LETTER YI;Ll;0;L;;;;;N;;;13F1;;13F1
+13FA;CHEROKEE SMALL LETTER YO;Ll;0;L;;;;;N;;;13F2;;13F2
+13FB;CHEROKEE SMALL LETTER YU;Ll;0;L;;;;;N;;;13F3;;13F3
+13FC;CHEROKEE SMALL LETTER YV;Ll;0;L;;;;;N;;;13F4;;13F4
+13FD;CHEROKEE SMALL LETTER MV;Ll;0;L;;;;;N;;;13F5;;13F5
1400;CANADIAN SYLLABICS HYPHEN;Pd;0;ON;;;;;N;;;;;
1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
@@ -5700,23 +5713,23 @@
19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;;
19AA;NEW TAI LUE LETTER HIGH SUA;Lo;0;L;;;;;N;;;;;
19AB;NEW TAI LUE LETTER LOW SUA;Lo;0;L;;;;;N;;;;;
-19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;;
-19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
-19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
-19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
-19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
-19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;;
-19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;;
-19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;;
-19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;;
-19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;;
-19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;;
-19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;;
-19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;;
-19C0;NEW TAI LUE VOWEL SIGN IY;Mc;0;L;;;;;N;;;;;
+19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Lo;0;L;;;;;N;;;;;
+19B1;NEW TAI LUE VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+19B2;NEW TAI LUE VOWEL SIGN II;Lo;0;L;;;;;N;;;;;
+19B3;NEW TAI LUE VOWEL SIGN U;Lo;0;L;;;;;N;;;;;
+19B4;NEW TAI LUE VOWEL SIGN UU;Lo;0;L;;;;;N;;;;;
+19B5;NEW TAI LUE VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+19B6;NEW TAI LUE VOWEL SIGN AE;Lo;0;L;;;;;N;;;;;
+19B7;NEW TAI LUE VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+19B8;NEW TAI LUE VOWEL SIGN OA;Lo;0;L;;;;;N;;;;;
+19B9;NEW TAI LUE VOWEL SIGN UE;Lo;0;L;;;;;N;;;;;
+19BA;NEW TAI LUE VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+19BB;NEW TAI LUE VOWEL SIGN AAY;Lo;0;L;;;;;N;;;;;
+19BC;NEW TAI LUE VOWEL SIGN UY;Lo;0;L;;;;;N;;;;;
+19BD;NEW TAI LUE VOWEL SIGN OY;Lo;0;L;;;;;N;;;;;
+19BE;NEW TAI LUE VOWEL SIGN OAY;Lo;0;L;;;;;N;;;;;
+19BF;NEW TAI LUE VOWEL SIGN UEY;Lo;0;L;;;;;N;;;;;
+19C0;NEW TAI LUE VOWEL SIGN IY;Lo;0;L;;;;;N;;;;;
19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;;
19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;;
@@ -5724,8 +5737,8 @@
19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;;
19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;;
19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;;
-19C8;NEW TAI LUE TONE MARK-1;Mc;0;L;;;;;N;;;;;
-19C9;NEW TAI LUE TONE MARK-2;Mc;0;L;;;;;N;;;;;
+19C8;NEW TAI LUE TONE MARK-1;Lo;0;L;;;;;N;;;;;
+19C9;NEW TAI LUE TONE MARK-2;Lo;0;L;;;;;N;;;;;
19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -7277,6 +7290,7 @@
20BB;NORDIC MARK SIGN;Sc;0;ET;;;;;N;;;;;
20BC;MANAT SIGN;Sc;0;ET;;;;;N;;;;;
20BD;RUBLE SIGN;Sc;0;ET;;;;;N;;;;;
+20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;;
20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
@@ -7448,6 +7462,8 @@
2187;ROMAN NUMERAL FIFTY THOUSAND;Nl;0;L;;;;50000;N;;;;;
2188;ROMAN NUMERAL ONE HUNDRED THOUSAND;Nl;0;L;;;;100000;N;;;;;
2189;VULGAR FRACTION ZERO THIRDS;No;0;ON;<fraction> 0030 2044 0033;;;0;N;;;;;
+218A;TURNED DIGIT TWO;So;0;ON;;;;;N;;;;;
+218B;TURNED DIGIT THREE;So;0;ON;;;;;N;;;;;
2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
@@ -10015,6 +10031,10 @@
2BCF;ROTATED WHITE FOUR POINTED CUSP;So;0;ON;;;;;N;;;;;
2BD0;SQUARE POSITION INDICATOR;So;0;ON;;;;;N;;;;;
2BD1;UNCERTAINTY SIGN;So;0;ON;;;;;N;;;;;
+2BEC;LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
+2BED;UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
+2BEE;RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
+2BEF;DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30;
2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31;
2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32;
@@ -11942,7 +11962,7 @@
4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
-9FCC;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+9FD5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
@@ -13605,6 +13625,7 @@
A69B;CYRILLIC SMALL LETTER CROSSED O;Ll;0;L;;;;;N;;;A69A;;A69A
A69C;MODIFIER LETTER CYRILLIC HARD SIGN;Lm;0;L;<super> 044A;;;;N;;;;;
A69D;MODIFIER LETTER CYRILLIC SOFT SIGN;Lm;0;L;<super> 044C;;;;N;;;;;
+A69E;COMBINING CYRILLIC LETTER EF;Mn;230;NSM;;;;;N;;;;;
A69F;COMBINING CYRILLIC LETTER IOTIFIED E;Mn;230;NSM;;;;;N;;;;;
A6A0;BAMUM LETTER A;Lo;0;L;;;;;N;;;;;
A6A1;BAMUM LETTER KA;Lo;0;L;;;;;N;;;;;
@@ -13837,6 +13858,7 @@
A78C;LATIN SMALL LETTER SALTILLO;Ll;0;L;;;;;N;;;A78B;;A78B
A78D;LATIN CAPITAL LETTER TURNED H;Lu;0;L;;;;;N;;;;0265;
A78E;LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT;Ll;0;L;;;;;N;;;;;
+A78F;LATIN LETTER SINOLOGICAL DOT;Lo;0;L;;;;;N;;;;;
A790;LATIN CAPITAL LETTER N WITH DESCENDER;Lu;0;L;;;;;N;;;;A791;
A791;LATIN SMALL LETTER N WITH DESCENDER;Ll;0;L;;;;;N;;;A790;;A790
A792;LATIN CAPITAL LETTER C WITH BAR;Lu;0;L;;;;;N;;;;A793;
@@ -13869,6 +13891,12 @@
A7AD;LATIN CAPITAL LETTER L WITH BELT;Lu;0;L;;;;;N;;;;026C;
A7B0;LATIN CAPITAL LETTER TURNED K;Lu;0;L;;;;;N;;;;029E;
A7B1;LATIN CAPITAL LETTER TURNED T;Lu;0;L;;;;;N;;;;0287;
+A7B2;LATIN CAPITAL LETTER J WITH CROSSED-TAIL;Lu;0;L;;;;;N;;;;029D;
+A7B3;LATIN CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;AB53;
+A7B4;LATIN CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;A7B5;
+A7B5;LATIN SMALL LETTER BETA;Ll;0;L;;;;;N;;;A7B4;;A7B4
+A7B6;LATIN CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;A7B7;
+A7B7;LATIN SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;A7B6;;A7B6
A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;;
A7F8;MODIFIER LETTER CAPITAL H WITH STROKE;Lm;0;L;<super> 0126;;;;N;;;;;
A7F9;MODIFIER LETTER SMALL LIGATURE OE;Lm;0;L;<super> 0153;;;;N;;;;;
@@ -14097,6 +14125,8 @@
A8F9;DEVANAGARI GAP FILLER;Po;0;L;;;;;N;;;;;
A8FA;DEVANAGARI CARET;Po;0;L;;;;;N;;;;;
A8FB;DEVANAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;;
+A8FC;DEVANAGARI SIGN SIDDHAM;Po;0;L;;;;;N;;;;;
+A8FD;DEVANAGARI JAIN OM;Lo;0;L;;;;;N;;;;;
A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -14610,7 +14640,7 @@
AB50;LATIN SMALL LETTER UI;Ll;0;L;;;;;N;;;;;
AB51;LATIN SMALL LETTER TURNED UI;Ll;0;L;;;;;N;;;;;
AB52;LATIN SMALL LETTER U WITH LEFT HOOK;Ll;0;L;;;;;N;;;;;
-AB53;LATIN SMALL LETTER CHI;Ll;0;L;;;;;N;;;;;
+AB53;LATIN SMALL LETTER CHI;Ll;0;L;;;;;N;;;A7B3;;A7B3
AB54;LATIN SMALL LETTER CHI WITH LOW RIGHT RING;Ll;0;L;;;;;N;;;;;
AB55;LATIN SMALL LETTER CHI WITH LOW LEFT SERIF;Ll;0;L;;;;;N;;;;;
AB56;LATIN SMALL LETTER X WITH LOW RIGHT RING;Ll;0;L;;;;;N;;;;;
@@ -14623,8 +14653,92 @@
AB5D;MODIFIER LETTER SMALL L WITH INVERTED LAZY S;Lm;0;L;<super> AB37;;;;N;;;;;
AB5E;MODIFIER LETTER SMALL L WITH MIDDLE TILDE;Lm;0;L;<super> 026B;;;;N;;;;;
AB5F;MODIFIER LETTER SMALL U WITH LEFT HOOK;Lm;0;L;<super> AB52;;;;N;;;;;
+AB60;LATIN SMALL LETTER SAKHA YAT;Ll;0;L;;;;;N;;;;;
+AB61;LATIN SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;;;
+AB62;LATIN SMALL LETTER OPEN OE;Ll;0;L;;;;;N;;;;;
+AB63;LATIN SMALL LETTER UO;Ll;0;L;;;;;N;;;;;
AB64;LATIN SMALL LETTER INVERTED ALPHA;Ll;0;L;;;;;N;;;;;
AB65;GREEK LETTER SMALL CAPITAL OMEGA;Ll;0;L;;;;;N;;;;;
+AB70;CHEROKEE SMALL LETTER A;Ll;0;L;;;;;N;;;13A0;;13A0
+AB71;CHEROKEE SMALL LETTER E;Ll;0;L;;;;;N;;;13A1;;13A1
+AB72;CHEROKEE SMALL LETTER I;Ll;0;L;;;;;N;;;13A2;;13A2
+AB73;CHEROKEE SMALL LETTER O;Ll;0;L;;;;;N;;;13A3;;13A3
+AB74;CHEROKEE SMALL LETTER U;Ll;0;L;;;;;N;;;13A4;;13A4
+AB75;CHEROKEE SMALL LETTER V;Ll;0;L;;;;;N;;;13A5;;13A5
+AB76;CHEROKEE SMALL LETTER GA;Ll;0;L;;;;;N;;;13A6;;13A6
+AB77;CHEROKEE SMALL LETTER KA;Ll;0;L;;;;;N;;;13A7;;13A7
+AB78;CHEROKEE SMALL LETTER GE;Ll;0;L;;;;;N;;;13A8;;13A8
+AB79;CHEROKEE SMALL LETTER GI;Ll;0;L;;;;;N;;;13A9;;13A9
+AB7A;CHEROKEE SMALL LETTER GO;Ll;0;L;;;;;N;;;13AA;;13AA
+AB7B;CHEROKEE SMALL LETTER GU;Ll;0;L;;;;;N;;;13AB;;13AB
+AB7C;CHEROKEE SMALL LETTER GV;Ll;0;L;;;;;N;;;13AC;;13AC
+AB7D;CHEROKEE SMALL LETTER HA;Ll;0;L;;;;;N;;;13AD;;13AD
+AB7E;CHEROKEE SMALL LETTER HE;Ll;0;L;;;;;N;;;13AE;;13AE
+AB7F;CHEROKEE SMALL LETTER HI;Ll;0;L;;;;;N;;;13AF;;13AF
+AB80;CHEROKEE SMALL LETTER HO;Ll;0;L;;;;;N;;;13B0;;13B0
+AB81;CHEROKEE SMALL LETTER HU;Ll;0;L;;;;;N;;;13B1;;13B1
+AB82;CHEROKEE SMALL LETTER HV;Ll;0;L;;;;;N;;;13B2;;13B2
+AB83;CHEROKEE SMALL LETTER LA;Ll;0;L;;;;;N;;;13B3;;13B3
+AB84;CHEROKEE SMALL LETTER LE;Ll;0;L;;;;;N;;;13B4;;13B4
+AB85;CHEROKEE SMALL LETTER LI;Ll;0;L;;;;;N;;;13B5;;13B5
+AB86;CHEROKEE SMALL LETTER LO;Ll;0;L;;;;;N;;;13B6;;13B6
+AB87;CHEROKEE SMALL LETTER LU;Ll;0;L;;;;;N;;;13B7;;13B7
+AB88;CHEROKEE SMALL LETTER LV;Ll;0;L;;;;;N;;;13B8;;13B8
+AB89;CHEROKEE SMALL LETTER MA;Ll;0;L;;;;;N;;;13B9;;13B9
+AB8A;CHEROKEE SMALL LETTER ME;Ll;0;L;;;;;N;;;13BA;;13BA
+AB8B;CHEROKEE SMALL LETTER MI;Ll;0;L;;;;;N;;;13BB;;13BB
+AB8C;CHEROKEE SMALL LETTER MO;Ll;0;L;;;;;N;;;13BC;;13BC
+AB8D;CHEROKEE SMALL LETTER MU;Ll;0;L;;;;;N;;;13BD;;13BD
+AB8E;CHEROKEE SMALL LETTER NA;Ll;0;L;;;;;N;;;13BE;;13BE
+AB8F;CHEROKEE SMALL LETTER HNA;Ll;0;L;;;;;N;;;13BF;;13BF
+AB90;CHEROKEE SMALL LETTER NAH;Ll;0;L;;;;;N;;;13C0;;13C0
+AB91;CHEROKEE SMALL LETTER NE;Ll;0;L;;;;;N;;;13C1;;13C1
+AB92;CHEROKEE SMALL LETTER NI;Ll;0;L;;;;;N;;;13C2;;13C2
+AB93;CHEROKEE SMALL LETTER NO;Ll;0;L;;;;;N;;;13C3;;13C3
+AB94;CHEROKEE SMALL LETTER NU;Ll;0;L;;;;;N;;;13C4;;13C4
+AB95;CHEROKEE SMALL LETTER NV;Ll;0;L;;;;;N;;;13C5;;13C5
+AB96;CHEROKEE SMALL LETTER QUA;Ll;0;L;;;;;N;;;13C6;;13C6
+AB97;CHEROKEE SMALL LETTER QUE;Ll;0;L;;;;;N;;;13C7;;13C7
+AB98;CHEROKEE SMALL LETTER QUI;Ll;0;L;;;;;N;;;13C8;;13C8
+AB99;CHEROKEE SMALL LETTER QUO;Ll;0;L;;;;;N;;;13C9;;13C9
+AB9A;CHEROKEE SMALL LETTER QUU;Ll;0;L;;;;;N;;;13CA;;13CA
+AB9B;CHEROKEE SMALL LETTER QUV;Ll;0;L;;;;;N;;;13CB;;13CB
+AB9C;CHEROKEE SMALL LETTER SA;Ll;0;L;;;;;N;;;13CC;;13CC
+AB9D;CHEROKEE SMALL LETTER S;Ll;0;L;;;;;N;;;13CD;;13CD
+AB9E;CHEROKEE SMALL LETTER SE;Ll;0;L;;;;;N;;;13CE;;13CE
+AB9F;CHEROKEE SMALL LETTER SI;Ll;0;L;;;;;N;;;13CF;;13CF
+ABA0;CHEROKEE SMALL LETTER SO;Ll;0;L;;;;;N;;;13D0;;13D0
+ABA1;CHEROKEE SMALL LETTER SU;Ll;0;L;;;;;N;;;13D1;;13D1
+ABA2;CHEROKEE SMALL LETTER SV;Ll;0;L;;;;;N;;;13D2;;13D2
+ABA3;CHEROKEE SMALL LETTER DA;Ll;0;L;;;;;N;;;13D3;;13D3
+ABA4;CHEROKEE SMALL LETTER TA;Ll;0;L;;;;;N;;;13D4;;13D4
+ABA5;CHEROKEE SMALL LETTER DE;Ll;0;L;;;;;N;;;13D5;;13D5
+ABA6;CHEROKEE SMALL LETTER TE;Ll;0;L;;;;;N;;;13D6;;13D6
+ABA7;CHEROKEE SMALL LETTER DI;Ll;0;L;;;;;N;;;13D7;;13D7
+ABA8;CHEROKEE SMALL LETTER TI;Ll;0;L;;;;;N;;;13D8;;13D8
+ABA9;CHEROKEE SMALL LETTER DO;Ll;0;L;;;;;N;;;13D9;;13D9
+ABAA;CHEROKEE SMALL LETTER DU;Ll;0;L;;;;;N;;;13DA;;13DA
+ABAB;CHEROKEE SMALL LETTER DV;Ll;0;L;;;;;N;;;13DB;;13DB
+ABAC;CHEROKEE SMALL LETTER DLA;Ll;0;L;;;;;N;;;13DC;;13DC
+ABAD;CHEROKEE SMALL LETTER TLA;Ll;0;L;;;;;N;;;13DD;;13DD
+ABAE;CHEROKEE SMALL LETTER TLE;Ll;0;L;;;;;N;;;13DE;;13DE
+ABAF;CHEROKEE SMALL LETTER TLI;Ll;0;L;;;;;N;;;13DF;;13DF
+ABB0;CHEROKEE SMALL LETTER TLO;Ll;0;L;;;;;N;;;13E0;;13E0
+ABB1;CHEROKEE SMALL LETTER TLU;Ll;0;L;;;;;N;;;13E1;;13E1
+ABB2;CHEROKEE SMALL LETTER TLV;Ll;0;L;;;;;N;;;13E2;;13E2
+ABB3;CHEROKEE SMALL LETTER TSA;Ll;0;L;;;;;N;;;13E3;;13E3
+ABB4;CHEROKEE SMALL LETTER TSE;Ll;0;L;;;;;N;;;13E4;;13E4
+ABB5;CHEROKEE SMALL LETTER TSI;Ll;0;L;;;;;N;;;13E5;;13E5
+ABB6;CHEROKEE SMALL LETTER TSO;Ll;0;L;;;;;N;;;13E6;;13E6
+ABB7;CHEROKEE SMALL LETTER TSU;Ll;0;L;;;;;N;;;13E7;;13E7
+ABB8;CHEROKEE SMALL LETTER TSV;Ll;0;L;;;;;N;;;13E8;;13E8
+ABB9;CHEROKEE SMALL LETTER WA;Ll;0;L;;;;;N;;;13E9;;13E9
+ABBA;CHEROKEE SMALL LETTER WE;Ll;0;L;;;;;N;;;13EA;;13EA
+ABBB;CHEROKEE SMALL LETTER WI;Ll;0;L;;;;;N;;;13EB;;13EB
+ABBC;CHEROKEE SMALL LETTER WO;Ll;0;L;;;;;N;;;13EC;;13EC
+ABBD;CHEROKEE SMALL LETTER WU;Ll;0;L;;;;;N;;;13ED;;13ED
+ABBE;CHEROKEE SMALL LETTER WV;Ll;0;L;;;;;N;;;13EE;;13EE
+ABBF;CHEROKEE SMALL LETTER YA;Ll;0;L;;;;;N;;;13EF;;13EF
ABC0;MEETEI MAYEK LETTER KOK;Lo;0;L;;;;;N;;;;;
ABC1;MEETEI MAYEK LETTER SAM;Lo;0;L;;;;;N;;;;;
ABC2;MEETEI MAYEK LETTER LAI;Lo;0;L;;;;;N;;;;;
@@ -15944,6 +16058,8 @@
FE2B;COMBINING MACRON LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;;
FE2C;COMBINING MACRON RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;;
FE2D;COMBINING CONJOINING MACRON BELOW;Mn;220;NSM;;;;;N;;;;;
+FE2E;COMBINING CYRILLIC TITLO LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE2F;COMBINING CYRILLIC TITLO RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
@@ -17830,6 +17946,32 @@
108AD;NABATAEAN NUMBER TEN;No;0;R;;;;10;N;;;;;
108AE;NABATAEAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
108AF;NABATAEAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+108E0;HATRAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+108E1;HATRAN LETTER BETH;Lo;0;R;;;;;N;;;;;
+108E2;HATRAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+108E3;HATRAN LETTER DALETH-RESH;Lo;0;R;;;;;N;;;;;
+108E4;HATRAN LETTER HE;Lo;0;R;;;;;N;;;;;
+108E5;HATRAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+108E6;HATRAN LETTER ZAYN;Lo;0;R;;;;;N;;;;;
+108E7;HATRAN LETTER HETH;Lo;0;R;;;;;N;;;;;
+108E8;HATRAN LETTER TETH;Lo;0;R;;;;;N;;;;;
+108E9;HATRAN LETTER YODH;Lo;0;R;;;;;N;;;;;
+108EA;HATRAN LETTER KAPH;Lo;0;R;;;;;N;;;;;
+108EB;HATRAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+108EC;HATRAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+108ED;HATRAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+108EE;HATRAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+108EF;HATRAN LETTER AYN;Lo;0;R;;;;;N;;;;;
+108F0;HATRAN LETTER PE;Lo;0;R;;;;;N;;;;;
+108F1;HATRAN LETTER SADHE;Lo;0;R;;;;;N;;;;;
+108F2;HATRAN LETTER QOPH;Lo;0;R;;;;;N;;;;;
+108F4;HATRAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+108F5;HATRAN LETTER TAW;Lo;0;R;;;;;N;;;;;
+108FB;HATRAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+108FC;HATRAN NUMBER FIVE;No;0;R;;;;5;N;;;;;
+108FD;HATRAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+108FE;HATRAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+108FF;HATRAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;;
10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;;
10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;;
@@ -17942,8 +18084,72 @@
109B5;MEROITIC CURSIVE LETTER TE;Lo;0;R;;;;;N;;;;;
109B6;MEROITIC CURSIVE LETTER TO;Lo;0;R;;;;;N;;;;;
109B7;MEROITIC CURSIVE LETTER DA;Lo;0;R;;;;;N;;;;;
+109BC;MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS;No;0;R;;;;11/12;N;;;;;
+109BD;MEROITIC CURSIVE FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;;
109BE;MEROITIC CURSIVE LOGOGRAM RMT;Lo;0;R;;;;;N;;;;;
109BF;MEROITIC CURSIVE LOGOGRAM IMN;Lo;0;R;;;;;N;;;;;
+109C0;MEROITIC CURSIVE NUMBER ONE;No;0;R;;;;1;N;;;;;
+109C1;MEROITIC CURSIVE NUMBER TWO;No;0;R;;;;2;N;;;;;
+109C2;MEROITIC CURSIVE NUMBER THREE;No;0;R;;;;3;N;;;;;
+109C3;MEROITIC CURSIVE NUMBER FOUR;No;0;R;;;;4;N;;;;;
+109C4;MEROITIC CURSIVE NUMBER FIVE;No;0;R;;;;5;N;;;;;
+109C5;MEROITIC CURSIVE NUMBER SIX;No;0;R;;;;6;N;;;;;
+109C6;MEROITIC CURSIVE NUMBER SEVEN;No;0;R;;;;7;N;;;;;
+109C7;MEROITIC CURSIVE NUMBER EIGHT;No;0;R;;;;8;N;;;;;
+109C8;MEROITIC CURSIVE NUMBER NINE;No;0;R;;;;9;N;;;;;
+109C9;MEROITIC CURSIVE NUMBER TEN;No;0;R;;;;10;N;;;;;
+109CA;MEROITIC CURSIVE NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+109CB;MEROITIC CURSIVE NUMBER THIRTY;No;0;R;;;;30;N;;;;;
+109CC;MEROITIC CURSIVE NUMBER FORTY;No;0;R;;;;40;N;;;;;
+109CD;MEROITIC CURSIVE NUMBER FIFTY;No;0;R;;;;50;N;;;;;
+109CE;MEROITIC CURSIVE NUMBER SIXTY;No;0;R;;;;60;N;;;;;
+109CF;MEROITIC CURSIVE NUMBER SEVENTY;No;0;R;;;;70;N;;;;;
+109D2;MEROITIC CURSIVE NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+109D3;MEROITIC CURSIVE NUMBER TWO HUNDRED;No;0;R;;;;200;N;;;;;
+109D4;MEROITIC CURSIVE NUMBER THREE HUNDRED;No;0;R;;;;300;N;;;;;
+109D5;MEROITIC CURSIVE NUMBER FOUR HUNDRED;No;0;R;;;;400;N;;;;;
+109D6;MEROITIC CURSIVE NUMBER FIVE HUNDRED;No;0;R;;;;500;N;;;;;
+109D7;MEROITIC CURSIVE NUMBER SIX HUNDRED;No;0;R;;;;600;N;;;;;
+109D8;MEROITIC CURSIVE NUMBER SEVEN HUNDRED;No;0;R;;;;700;N;;;;;
+109D9;MEROITIC CURSIVE NUMBER EIGHT HUNDRED;No;0;R;;;;800;N;;;;;
+109DA;MEROITIC CURSIVE NUMBER NINE HUNDRED;No;0;R;;;;900;N;;;;;
+109DB;MEROITIC CURSIVE NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+109DC;MEROITIC CURSIVE NUMBER TWO THOUSAND;No;0;R;;;;2000;N;;;;;
+109DD;MEROITIC CURSIVE NUMBER THREE THOUSAND;No;0;R;;;;3000;N;;;;;
+109DE;MEROITIC CURSIVE NUMBER FOUR THOUSAND;No;0;R;;;;4000;N;;;;;
+109DF;MEROITIC CURSIVE NUMBER FIVE THOUSAND;No;0;R;;;;5000;N;;;;;
+109E0;MEROITIC CURSIVE NUMBER SIX THOUSAND;No;0;R;;;;6000;N;;;;;
+109E1;MEROITIC CURSIVE NUMBER SEVEN THOUSAND;No;0;R;;;;7000;N;;;;;
+109E2;MEROITIC CURSIVE NUMBER EIGHT THOUSAND;No;0;R;;;;8000;N;;;;;
+109E3;MEROITIC CURSIVE NUMBER NINE THOUSAND;No;0;R;;;;9000;N;;;;;
+109E4;MEROITIC CURSIVE NUMBER TEN THOUSAND;No;0;R;;;;10000;N;;;;;
+109E5;MEROITIC CURSIVE NUMBER TWENTY THOUSAND;No;0;R;;;;20000;N;;;;;
+109E6;MEROITIC CURSIVE NUMBER THIRTY THOUSAND;No;0;R;;;;30000;N;;;;;
+109E7;MEROITIC CURSIVE NUMBER FORTY THOUSAND;No;0;R;;;;40000;N;;;;;
+109E8;MEROITIC CURSIVE NUMBER FIFTY THOUSAND;No;0;R;;;;50000;N;;;;;
+109E9;MEROITIC CURSIVE NUMBER SIXTY THOUSAND;No;0;R;;;;60000;N;;;;;
+109EA;MEROITIC CURSIVE NUMBER SEVENTY THOUSAND;No;0;R;;;;70000;N;;;;;
+109EB;MEROITIC CURSIVE NUMBER EIGHTY THOUSAND;No;0;R;;;;80000;N;;;;;
+109EC;MEROITIC CURSIVE NUMBER NINETY THOUSAND;No;0;R;;;;90000;N;;;;;
+109ED;MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND;No;0;R;;;;100000;N;;;;;
+109EE;MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND;No;0;R;;;;200000;N;;;;;
+109EF;MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND;No;0;R;;;;300000;N;;;;;
+109F0;MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND;No;0;R;;;;400000;N;;;;;
+109F1;MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND;No;0;R;;;;500000;N;;;;;
+109F2;MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND;No;0;R;;;;600000;N;;;;;
+109F3;MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND;No;0;R;;;;700000;N;;;;;
+109F4;MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND;No;0;R;;;;800000;N;;;;;
+109F5;MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND;No;0;R;;;;900000;N;;;;;
+109F6;MEROITIC CURSIVE FRACTION ONE TWELFTH;No;0;R;;;;1/12;N;;;;;
+109F7;MEROITIC CURSIVE FRACTION TWO TWELFTHS;No;0;R;;;;2/12;N;;;;;
+109F8;MEROITIC CURSIVE FRACTION THREE TWELFTHS;No;0;R;;;;3/12;N;;;;;
+109F9;MEROITIC CURSIVE FRACTION FOUR TWELFTHS;No;0;R;;;;4/12;N;;;;;
+109FA;MEROITIC CURSIVE FRACTION FIVE TWELFTHS;No;0;R;;;;5/12;N;;;;;
+109FB;MEROITIC CURSIVE FRACTION SIX TWELFTHS;No;0;R;;;;6/12;N;;;;;
+109FC;MEROITIC CURSIVE FRACTION SEVEN TWELFTHS;No;0;R;;;;7/12;N;;;;;
+109FD;MEROITIC CURSIVE FRACTION EIGHT TWELFTHS;No;0;R;;;;8/12;N;;;;;
+109FE;MEROITIC CURSIVE FRACTION NINE TWELFTHS;No;0;R;;;;9/12;N;;;;;
+109FF;MEROITIC CURSIVE FRACTION TEN TWELFTHS;No;0;R;;;;10/12;N;;;;;
10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;;
10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
@@ -18344,6 +18550,114 @@
10C46;OLD TURKIC LETTER YENISEI AET;Lo;0;R;;;;;N;;;;;
10C47;OLD TURKIC LETTER ORKHON OT;Lo;0;R;;;;;N;;;;;
10C48;OLD TURKIC LETTER ORKHON BASH;Lo;0;R;;;;;N;;;;;
+10C80;OLD HUNGARIAN CAPITAL LETTER A;Lu;0;R;;;;;N;;;;10CC0;
+10C81;OLD HUNGARIAN CAPITAL LETTER AA;Lu;0;R;;;;;N;;;;10CC1;
+10C82;OLD HUNGARIAN CAPITAL LETTER EB;Lu;0;R;;;;;N;;;;10CC2;
+10C83;OLD HUNGARIAN CAPITAL LETTER AMB;Lu;0;R;;;;;N;;;;10CC3;
+10C84;OLD HUNGARIAN CAPITAL LETTER EC;Lu;0;R;;;;;N;;;;10CC4;
+10C85;OLD HUNGARIAN CAPITAL LETTER ENC;Lu;0;R;;;;;N;;;;10CC5;
+10C86;OLD HUNGARIAN CAPITAL LETTER ECS;Lu;0;R;;;;;N;;;;10CC6;
+10C87;OLD HUNGARIAN CAPITAL LETTER ED;Lu;0;R;;;;;N;;;;10CC7;
+10C88;OLD HUNGARIAN CAPITAL LETTER AND;Lu;0;R;;;;;N;;;;10CC8;
+10C89;OLD HUNGARIAN CAPITAL LETTER E;Lu;0;R;;;;;N;;;;10CC9;
+10C8A;OLD HUNGARIAN CAPITAL LETTER CLOSE E;Lu;0;R;;;;;N;;;;10CCA;
+10C8B;OLD HUNGARIAN CAPITAL LETTER EE;Lu;0;R;;;;;N;;;;10CCB;
+10C8C;OLD HUNGARIAN CAPITAL LETTER EF;Lu;0;R;;;;;N;;;;10CCC;
+10C8D;OLD HUNGARIAN CAPITAL LETTER EG;Lu;0;R;;;;;N;;;;10CCD;
+10C8E;OLD HUNGARIAN CAPITAL LETTER EGY;Lu;0;R;;;;;N;;;;10CCE;
+10C8F;OLD HUNGARIAN CAPITAL LETTER EH;Lu;0;R;;;;;N;;;;10CCF;
+10C90;OLD HUNGARIAN CAPITAL LETTER I;Lu;0;R;;;;;N;;;;10CD0;
+10C91;OLD HUNGARIAN CAPITAL LETTER II;Lu;0;R;;;;;N;;;;10CD1;
+10C92;OLD HUNGARIAN CAPITAL LETTER EJ;Lu;0;R;;;;;N;;;;10CD2;
+10C93;OLD HUNGARIAN CAPITAL LETTER EK;Lu;0;R;;;;;N;;;;10CD3;
+10C94;OLD HUNGARIAN CAPITAL LETTER AK;Lu;0;R;;;;;N;;;;10CD4;
+10C95;OLD HUNGARIAN CAPITAL LETTER UNK;Lu;0;R;;;;;N;;;;10CD5;
+10C96;OLD HUNGARIAN CAPITAL LETTER EL;Lu;0;R;;;;;N;;;;10CD6;
+10C97;OLD HUNGARIAN CAPITAL LETTER ELY;Lu;0;R;;;;;N;;;;10CD7;
+10C98;OLD HUNGARIAN CAPITAL LETTER EM;Lu;0;R;;;;;N;;;;10CD8;
+10C99;OLD HUNGARIAN CAPITAL LETTER EN;Lu;0;R;;;;;N;;;;10CD9;
+10C9A;OLD HUNGARIAN CAPITAL LETTER ENY;Lu;0;R;;;;;N;;;;10CDA;
+10C9B;OLD HUNGARIAN CAPITAL LETTER O;Lu;0;R;;;;;N;;;;10CDB;
+10C9C;OLD HUNGARIAN CAPITAL LETTER OO;Lu;0;R;;;;;N;;;;10CDC;
+10C9D;OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE;Lu;0;R;;;;;N;;;;10CDD;
+10C9E;OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE;Lu;0;R;;;;;N;;;;10CDE;
+10C9F;OLD HUNGARIAN CAPITAL LETTER OEE;Lu;0;R;;;;;N;;;;10CDF;
+10CA0;OLD HUNGARIAN CAPITAL LETTER EP;Lu;0;R;;;;;N;;;;10CE0;
+10CA1;OLD HUNGARIAN CAPITAL LETTER EMP;Lu;0;R;;;;;N;;;;10CE1;
+10CA2;OLD HUNGARIAN CAPITAL LETTER ER;Lu;0;R;;;;;N;;;;10CE2;
+10CA3;OLD HUNGARIAN CAPITAL LETTER SHORT ER;Lu;0;R;;;;;N;;;;10CE3;
+10CA4;OLD HUNGARIAN CAPITAL LETTER ES;Lu;0;R;;;;;N;;;;10CE4;
+10CA5;OLD HUNGARIAN CAPITAL LETTER ESZ;Lu;0;R;;;;;N;;;;10CE5;
+10CA6;OLD HUNGARIAN CAPITAL LETTER ET;Lu;0;R;;;;;N;;;;10CE6;
+10CA7;OLD HUNGARIAN CAPITAL LETTER ENT;Lu;0;R;;;;;N;;;;10CE7;
+10CA8;OLD HUNGARIAN CAPITAL LETTER ETY;Lu;0;R;;;;;N;;;;10CE8;
+10CA9;OLD HUNGARIAN CAPITAL LETTER ECH;Lu;0;R;;;;;N;;;;10CE9;
+10CAA;OLD HUNGARIAN CAPITAL LETTER U;Lu;0;R;;;;;N;;;;10CEA;
+10CAB;OLD HUNGARIAN CAPITAL LETTER UU;Lu;0;R;;;;;N;;;;10CEB;
+10CAC;OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE;Lu;0;R;;;;;N;;;;10CEC;
+10CAD;OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE;Lu;0;R;;;;;N;;;;10CED;
+10CAE;OLD HUNGARIAN CAPITAL LETTER EV;Lu;0;R;;;;;N;;;;10CEE;
+10CAF;OLD HUNGARIAN CAPITAL LETTER EZ;Lu;0;R;;;;;N;;;;10CEF;
+10CB0;OLD HUNGARIAN CAPITAL LETTER EZS;Lu;0;R;;;;;N;;;;10CF0;
+10CB1;OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN;Lu;0;R;;;;;N;;;;10CF1;
+10CB2;OLD HUNGARIAN CAPITAL LETTER US;Lu;0;R;;;;;N;;;;10CF2;
+10CC0;OLD HUNGARIAN SMALL LETTER A;Ll;0;R;;;;;N;;;10C80;;10C80
+10CC1;OLD HUNGARIAN SMALL LETTER AA;Ll;0;R;;;;;N;;;10C81;;10C81
+10CC2;OLD HUNGARIAN SMALL LETTER EB;Ll;0;R;;;;;N;;;10C82;;10C82
+10CC3;OLD HUNGARIAN SMALL LETTER AMB;Ll;0;R;;;;;N;;;10C83;;10C83
+10CC4;OLD HUNGARIAN SMALL LETTER EC;Ll;0;R;;;;;N;;;10C84;;10C84
+10CC5;OLD HUNGARIAN SMALL LETTER ENC;Ll;0;R;;;;;N;;;10C85;;10C85
+10CC6;OLD HUNGARIAN SMALL LETTER ECS;Ll;0;R;;;;;N;;;10C86;;10C86
+10CC7;OLD HUNGARIAN SMALL LETTER ED;Ll;0;R;;;;;N;;;10C87;;10C87
+10CC8;OLD HUNGARIAN SMALL LETTER AND;Ll;0;R;;;;;N;;;10C88;;10C88
+10CC9;OLD HUNGARIAN SMALL LETTER E;Ll;0;R;;;;;N;;;10C89;;10C89
+10CCA;OLD HUNGARIAN SMALL LETTER CLOSE E;Ll;0;R;;;;;N;;;10C8A;;10C8A
+10CCB;OLD HUNGARIAN SMALL LETTER EE;Ll;0;R;;;;;N;;;10C8B;;10C8B
+10CCC;OLD HUNGARIAN SMALL LETTER EF;Ll;0;R;;;;;N;;;10C8C;;10C8C
+10CCD;OLD HUNGARIAN SMALL LETTER EG;Ll;0;R;;;;;N;;;10C8D;;10C8D
+10CCE;OLD HUNGARIAN SMALL LETTER EGY;Ll;0;R;;;;;N;;;10C8E;;10C8E
+10CCF;OLD HUNGARIAN SMALL LETTER EH;Ll;0;R;;;;;N;;;10C8F;;10C8F
+10CD0;OLD HUNGARIAN SMALL LETTER I;Ll;0;R;;;;;N;;;10C90;;10C90
+10CD1;OLD HUNGARIAN SMALL LETTER II;Ll;0;R;;;;;N;;;10C91;;10C91
+10CD2;OLD HUNGARIAN SMALL LETTER EJ;Ll;0;R;;;;;N;;;10C92;;10C92
+10CD3;OLD HUNGARIAN SMALL LETTER EK;Ll;0;R;;;;;N;;;10C93;;10C93
+10CD4;OLD HUNGARIAN SMALL LETTER AK;Ll;0;R;;;;;N;;;10C94;;10C94
+10CD5;OLD HUNGARIAN SMALL LETTER UNK;Ll;0;R;;;;;N;;;10C95;;10C95
+10CD6;OLD HUNGARIAN SMALL LETTER EL;Ll;0;R;;;;;N;;;10C96;;10C96
+10CD7;OLD HUNGARIAN SMALL LETTER ELY;Ll;0;R;;;;;N;;;10C97;;10C97
+10CD8;OLD HUNGARIAN SMALL LETTER EM;Ll;0;R;;;;;N;;;10C98;;10C98
+10CD9;OLD HUNGARIAN SMALL LETTER EN;Ll;0;R;;;;;N;;;10C99;;10C99
+10CDA;OLD HUNGARIAN SMALL LETTER ENY;Ll;0;R;;;;;N;;;10C9A;;10C9A
+10CDB;OLD HUNGARIAN SMALL LETTER O;Ll;0;R;;;;;N;;;10C9B;;10C9B
+10CDC;OLD HUNGARIAN SMALL LETTER OO;Ll;0;R;;;;;N;;;10C9C;;10C9C
+10CDD;OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE;Ll;0;R;;;;;N;;;10C9D;;10C9D
+10CDE;OLD HUNGARIAN SMALL LETTER RUDIMENTA OE;Ll;0;R;;;;;N;;;10C9E;;10C9E
+10CDF;OLD HUNGARIAN SMALL LETTER OEE;Ll;0;R;;;;;N;;;10C9F;;10C9F
+10CE0;OLD HUNGARIAN SMALL LETTER EP;Ll;0;R;;;;;N;;;10CA0;;10CA0
+10CE1;OLD HUNGARIAN SMALL LETTER EMP;Ll;0;R;;;;;N;;;10CA1;;10CA1
+10CE2;OLD HUNGARIAN SMALL LETTER ER;Ll;0;R;;;;;N;;;10CA2;;10CA2
+10CE3;OLD HUNGARIAN SMALL LETTER SHORT ER;Ll;0;R;;;;;N;;;10CA3;;10CA3
+10CE4;OLD HUNGARIAN SMALL LETTER ES;Ll;0;R;;;;;N;;;10CA4;;10CA4
+10CE5;OLD HUNGARIAN SMALL LETTER ESZ;Ll;0;R;;;;;N;;;10CA5;;10CA5
+10CE6;OLD HUNGARIAN SMALL LETTER ET;Ll;0;R;;;;;N;;;10CA6;;10CA6
+10CE7;OLD HUNGARIAN SMALL LETTER ENT;Ll;0;R;;;;;N;;;10CA7;;10CA7
+10CE8;OLD HUNGARIAN SMALL LETTER ETY;Ll;0;R;;;;;N;;;10CA8;;10CA8
+10CE9;OLD HUNGARIAN SMALL LETTER ECH;Ll;0;R;;;;;N;;;10CA9;;10CA9
+10CEA;OLD HUNGARIAN SMALL LETTER U;Ll;0;R;;;;;N;;;10CAA;;10CAA
+10CEB;OLD HUNGARIAN SMALL LETTER UU;Ll;0;R;;;;;N;;;10CAB;;10CAB
+10CEC;OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE;Ll;0;R;;;;;N;;;10CAC;;10CAC
+10CED;OLD HUNGARIAN SMALL LETTER RUDIMENTA UE;Ll;0;R;;;;;N;;;10CAD;;10CAD
+10CEE;OLD HUNGARIAN SMALL LETTER EV;Ll;0;R;;;;;N;;;10CAE;;10CAE
+10CEF;OLD HUNGARIAN SMALL LETTER EZ;Ll;0;R;;;;;N;;;10CAF;;10CAF
+10CF0;OLD HUNGARIAN SMALL LETTER EZS;Ll;0;R;;;;;N;;;10CB0;;10CB0
+10CF1;OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN;Ll;0;R;;;;;N;;;10CB1;;10CB1
+10CF2;OLD HUNGARIAN SMALL LETTER US;Ll;0;R;;;;;N;;;10CB2;;10CB2
+10CFA;OLD HUNGARIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10CFB;OLD HUNGARIAN NUMBER FIVE;No;0;R;;;;5;N;;;;;
+10CFC;OLD HUNGARIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10CFD;OLD HUNGARIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;;
+10CFE;OLD HUNGARIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10CFF;OLD HUNGARIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
10E60;RUMI DIGIT ONE;No;0;AN;;;1;1;N;;;;;
10E61;RUMI DIGIT TWO;No;0;AN;;;2;2;N;;;;;
10E62;RUMI DIGIT THREE;No;0;AN;;;3;3;N;;;;;
@@ -18764,6 +19078,10 @@
111C6;SHARADA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
111C7;SHARADA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
111C8;SHARADA SEPARATOR;Po;0;L;;;;;N;;;;;
+111C9;SHARADA SANDHI MARK;Po;0;L;;;;;N;;;;;
+111CA;SHARADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+111CB;SHARADA VOWEL MODIFIER MARK;Mn;0;NSM;;;;;N;;;;;
+111CC;SHARADA EXTRA SHORT VOWEL MARK;Mn;0;NSM;;;;;N;;;;;
111CD;SHARADA SUTRA MARK;Po;0;L;;;;;N;;;;;
111D0;SHARADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
111D1;SHARADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
@@ -18776,6 +19094,11 @@
111D8;SHARADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
111D9;SHARADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
111DA;SHARADA EKAM;Lo;0;L;;;;;N;;;;;
+111DB;SHARADA SIGN SIDDHAM;Po;0;L;;;;;N;;;;;
+111DC;SHARADA HEADSTROKE;Lo;0;L;;;;;N;;;;;
+111DD;SHARADA CONTINUATION SIGN;Po;0;L;;;;;N;;;;;
+111DE;SHARADA SECTION MARK-1;Po;0;L;;;;;N;;;;;
+111DF;SHARADA SECTION MARK-2;Po;0;L;;;;;N;;;;;
111E1;SINHALA ARCHAIC DIGIT ONE;No;0;L;;;;1;N;;;;;
111E2;SINHALA ARCHAIC DIGIT TWO;No;0;L;;;;2;N;;;;;
111E3;SINHALA ARCHAIC DIGIT THREE;No;0;L;;;;3;N;;;;;
@@ -18857,6 +19180,44 @@
1123B;KHOJKI SECTION MARK;Po;0;L;;;;;N;;;;;
1123C;KHOJKI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;
1123D;KHOJKI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+11280;MULTANI LETTER A;Lo;0;L;;;;;N;;;;;
+11281;MULTANI LETTER I;Lo;0;L;;;;;N;;;;;
+11282;MULTANI LETTER U;Lo;0;L;;;;;N;;;;;
+11283;MULTANI LETTER E;Lo;0;L;;;;;N;;;;;
+11284;MULTANI LETTER KA;Lo;0;L;;;;;N;;;;;
+11285;MULTANI LETTER KHA;Lo;0;L;;;;;N;;;;;
+11286;MULTANI LETTER GA;Lo;0;L;;;;;N;;;;;
+11288;MULTANI LETTER GHA;Lo;0;L;;;;;N;;;;;
+1128A;MULTANI LETTER CA;Lo;0;L;;;;;N;;;;;
+1128B;MULTANI LETTER CHA;Lo;0;L;;;;;N;;;;;
+1128C;MULTANI LETTER JA;Lo;0;L;;;;;N;;;;;
+1128D;MULTANI LETTER JJA;Lo;0;L;;;;;N;;;;;
+1128F;MULTANI LETTER NYA;Lo;0;L;;;;;N;;;;;
+11290;MULTANI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11291;MULTANI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11292;MULTANI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11293;MULTANI LETTER DDDA;Lo;0;L;;;;;N;;;;;
+11294;MULTANI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11295;MULTANI LETTER NNA;Lo;0;L;;;;;N;;;;;
+11296;MULTANI LETTER TA;Lo;0;L;;;;;N;;;;;
+11297;MULTANI LETTER THA;Lo;0;L;;;;;N;;;;;
+11298;MULTANI LETTER DA;Lo;0;L;;;;;N;;;;;
+11299;MULTANI LETTER DHA;Lo;0;L;;;;;N;;;;;
+1129A;MULTANI LETTER NA;Lo;0;L;;;;;N;;;;;
+1129B;MULTANI LETTER PA;Lo;0;L;;;;;N;;;;;
+1129C;MULTANI LETTER PHA;Lo;0;L;;;;;N;;;;;
+1129D;MULTANI LETTER BA;Lo;0;L;;;;;N;;;;;
+1129F;MULTANI LETTER BHA;Lo;0;L;;;;;N;;;;;
+112A0;MULTANI LETTER MA;Lo;0;L;;;;;N;;;;;
+112A1;MULTANI LETTER YA;Lo;0;L;;;;;N;;;;;
+112A2;MULTANI LETTER RA;Lo;0;L;;;;;N;;;;;
+112A3;MULTANI LETTER LA;Lo;0;L;;;;;N;;;;;
+112A4;MULTANI LETTER VA;Lo;0;L;;;;;N;;;;;
+112A5;MULTANI LETTER SA;Lo;0;L;;;;;N;;;;;
+112A6;MULTANI LETTER HA;Lo;0;L;;;;;N;;;;;
+112A7;MULTANI LETTER RRA;Lo;0;L;;;;;N;;;;;
+112A8;MULTANI LETTER RHA;Lo;0;L;;;;;N;;;;;
+112A9;MULTANI SECTION MARK;Po;0;L;;;;;N;;;;;
112B0;KHUDAWADI LETTER A;Lo;0;L;;;;;N;;;;;
112B1;KHUDAWADI LETTER AA;Lo;0;L;;;;;N;;;;;
112B2;KHUDAWADI LETTER I;Lo;0;L;;;;;N;;;;;
@@ -18926,6 +19287,7 @@
112F7;KHUDAWADI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
112F8;KHUDAWADI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
112F9;KHUDAWADI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11300;GRANTHA SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;;
11301;GRANTHA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
11302;GRANTHA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
11303;GRANTHA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
@@ -18989,6 +19351,7 @@
1134B;GRANTHA VOWEL SIGN OO;Mc;0;L;11347 1133E;;;;N;;;;;
1134C;GRANTHA VOWEL SIGN AU;Mc;0;L;11347 11357;;;;N;;;;;
1134D;GRANTHA SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
+11350;GRANTHA OM;Lo;0;L;;;;;N;;;;;
11357;GRANTHA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
1135D;GRANTHA SIGN PLUTA;Lo;0;L;;;;;N;;;;;
1135E;GRANTHA LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;
@@ -19163,6 +19526,26 @@
115C7;SIDDHAM REPETITION MARK-2;Po;0;L;;;;;N;;;;;
115C8;SIDDHAM REPETITION MARK-3;Po;0;L;;;;;N;;;;;
115C9;SIDDHAM END OF TEXT MARK;Po;0;L;;;;;N;;;;;
+115CA;SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS;Po;0;L;;;;;N;;;;;
+115CB;SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS;Po;0;L;;;;;N;;;;;
+115CC;SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS;Po;0;L;;;;;N;;;;;
+115CD;SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS;Po;0;L;;;;;N;;;;;
+115CE;SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS;Po;0;L;;;;;N;;;;;
+115CF;SIDDHAM SECTION MARK DOUBLE RING;Po;0;L;;;;;N;;;;;
+115D0;SIDDHAM SECTION MARK DOUBLE RING WITH RAYS;Po;0;L;;;;;N;;;;;
+115D1;SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS;Po;0;L;;;;;N;;;;;
+115D2;SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS;Po;0;L;;;;;N;;;;;
+115D3;SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS;Po;0;L;;;;;N;;;;;
+115D4;SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS;Po;0;L;;;;;N;;;;;
+115D5;SIDDHAM SECTION MARK WITH CIRCLES AND RAYS;Po;0;L;;;;;N;;;;;
+115D6;SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES;Po;0;L;;;;;N;;;;;
+115D7;SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES;Po;0;L;;;;;N;;;;;
+115D8;SIDDHAM LETTER THREE-CIRCLE ALTERNATE I;Lo;0;L;;;;;N;;;;;
+115D9;SIDDHAM LETTER TWO-CIRCLE ALTERNATE I;Lo;0;L;;;;;N;;;;;
+115DA;SIDDHAM LETTER TWO-CIRCLE ALTERNATE II;Lo;0;L;;;;;N;;;;;
+115DB;SIDDHAM LETTER ALTERNATE U;Lo;0;L;;;;;N;;;;;
+115DC;SIDDHAM VOWEL SIGN ALTERNATE U;Mn;0;NSM;;;;;N;;;;;
+115DD;SIDDHAM VOWEL SIGN ALTERNATE UU;Mn;0;NSM;;;;;N;;;;;
11600;MODI LETTER A;Lo;0;L;;;;;N;;;;;
11601;MODI LETTER AA;Lo;0;L;;;;;N;;;;;
11602;MODI LETTER I;Lo;0;L;;;;;N;;;;;
@@ -19308,6 +19691,63 @@
116C7;TAKRI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
116C8;TAKRI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
116C9;TAKRI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11700;AHOM LETTER KA;Lo;0;L;;;;;N;;;;;
+11701;AHOM LETTER KHA;Lo;0;L;;;;;N;;;;;
+11702;AHOM LETTER NGA;Lo;0;L;;;;;N;;;;;
+11703;AHOM LETTER NA;Lo;0;L;;;;;N;;;;;
+11704;AHOM LETTER TA;Lo;0;L;;;;;N;;;;;
+11705;AHOM LETTER ALTERNATE TA;Lo;0;L;;;;;N;;;;;
+11706;AHOM LETTER PA;Lo;0;L;;;;;N;;;;;
+11707;AHOM LETTER PHA;Lo;0;L;;;;;N;;;;;
+11708;AHOM LETTER BA;Lo;0;L;;;;;N;;;;;
+11709;AHOM LETTER MA;Lo;0;L;;;;;N;;;;;
+1170A;AHOM LETTER JA;Lo;0;L;;;;;N;;;;;
+1170B;AHOM LETTER CHA;Lo;0;L;;;;;N;;;;;
+1170C;AHOM LETTER THA;Lo;0;L;;;;;N;;;;;
+1170D;AHOM LETTER RA;Lo;0;L;;;;;N;;;;;
+1170E;AHOM LETTER LA;Lo;0;L;;;;;N;;;;;
+1170F;AHOM LETTER SA;Lo;0;L;;;;;N;;;;;
+11710;AHOM LETTER NYA;Lo;0;L;;;;;N;;;;;
+11711;AHOM LETTER HA;Lo;0;L;;;;;N;;;;;
+11712;AHOM LETTER A;Lo;0;L;;;;;N;;;;;
+11713;AHOM LETTER DA;Lo;0;L;;;;;N;;;;;
+11714;AHOM LETTER DHA;Lo;0;L;;;;;N;;;;;
+11715;AHOM LETTER GA;Lo;0;L;;;;;N;;;;;
+11716;AHOM LETTER ALTERNATE GA;Lo;0;L;;;;;N;;;;;
+11717;AHOM LETTER GHA;Lo;0;L;;;;;N;;;;;
+11718;AHOM LETTER BHA;Lo;0;L;;;;;N;;;;;
+11719;AHOM LETTER JHA;Lo;0;L;;;;;N;;;;;
+1171D;AHOM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;;
+1171E;AHOM CONSONANT SIGN MEDIAL RA;Mn;0;NSM;;;;;N;;;;;
+1171F;AHOM CONSONANT SIGN MEDIAL LIGATING RA;Mn;0;NSM;;;;;N;;;;;
+11720;AHOM VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
+11721;AHOM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11722;AHOM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11723;AHOM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+11724;AHOM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11725;AHOM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+11726;AHOM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+11727;AHOM VOWEL SIGN AW;Mn;0;NSM;;;;;N;;;;;
+11728;AHOM VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11729;AHOM VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1172A;AHOM VOWEL SIGN AM;Mn;0;NSM;;;;;N;;;;;
+1172B;AHOM SIGN KILLER;Mn;9;NSM;;;;;N;;;;;
+11730;AHOM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11731;AHOM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11732;AHOM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11733;AHOM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11734;AHOM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11735;AHOM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11736;AHOM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11737;AHOM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11738;AHOM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11739;AHOM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1173A;AHOM NUMBER TEN;No;0;L;;;;10;N;;;;;
+1173B;AHOM NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+1173C;AHOM SIGN SMALL SECTION;Po;0;L;;;;;N;;;;;
+1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;;
+1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;;
+1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;;
118A0;WARANG CITI CAPITAL LETTER NGAA;Lu;0;L;;;;;N;;;;118C0;
118A1;WARANG CITI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;118C1;
118A2;WARANG CITI CAPITAL LETTER WI;Lu;0;L;;;;;N;;;;118C2;
@@ -20370,6 +20810,7 @@
12396;CUNEIFORM SIGN SAG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
12397;CUNEIFORM SIGN TI2;Lo;0;L;;;;;N;;;;;
12398;CUNEIFORM SIGN UM TIMES ME;Lo;0;L;;;;;N;;;;;
+12399;CUNEIFORM SIGN U U;Lo;0;L;;;;;N;;;;;
12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;;
12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;;
12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;;
@@ -20486,6 +20927,202 @@
12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;;
12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;;
12474;CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON;Po;0;L;;;;;N;;;;;
+12480;CUNEIFORM SIGN AB TIMES NUN TENU;Lo;0;L;;;;;N;;;;;
+12481;CUNEIFORM SIGN AB TIMES SHU2;Lo;0;L;;;;;N;;;;;
+12482;CUNEIFORM SIGN AD TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12483;CUNEIFORM SIGN BAD TIMES DISH TENU;Lo;0;L;;;;;N;;;;;
+12484;CUNEIFORM SIGN BAHAR2 TIMES AB2;Lo;0;L;;;;;N;;;;;
+12485;CUNEIFORM SIGN BAHAR2 TIMES NI;Lo;0;L;;;;;N;;;;;
+12486;CUNEIFORM SIGN BAHAR2 TIMES ZA;Lo;0;L;;;;;N;;;;;
+12487;CUNEIFORM SIGN BU OVER BU TIMES NA2;Lo;0;L;;;;;N;;;;;
+12488;CUNEIFORM SIGN DA TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12489;CUNEIFORM SIGN DAG TIMES KUR;Lo;0;L;;;;;N;;;;;
+1248A;CUNEIFORM SIGN DIM TIMES IGI;Lo;0;L;;;;;N;;;;;
+1248B;CUNEIFORM SIGN DIM TIMES U U U;Lo;0;L;;;;;N;;;;;
+1248C;CUNEIFORM SIGN DIM2 TIMES UD;Lo;0;L;;;;;N;;;;;
+1248D;CUNEIFORM SIGN DUG TIMES ANSHE;Lo;0;L;;;;;N;;;;;
+1248E;CUNEIFORM SIGN DUG TIMES ASH;Lo;0;L;;;;;N;;;;;
+1248F;CUNEIFORM SIGN DUG TIMES ASH AT LEFT;Lo;0;L;;;;;N;;;;;
+12490;CUNEIFORM SIGN DUG TIMES DIN;Lo;0;L;;;;;N;;;;;
+12491;CUNEIFORM SIGN DUG TIMES DUN;Lo;0;L;;;;;N;;;;;
+12492;CUNEIFORM SIGN DUG TIMES ERIN2;Lo;0;L;;;;;N;;;;;
+12493;CUNEIFORM SIGN DUG TIMES GA;Lo;0;L;;;;;N;;;;;
+12494;CUNEIFORM SIGN DUG TIMES GI;Lo;0;L;;;;;N;;;;;
+12495;CUNEIFORM SIGN DUG TIMES GIR2 GUNU;Lo;0;L;;;;;N;;;;;
+12496;CUNEIFORM SIGN DUG TIMES GISH;Lo;0;L;;;;;N;;;;;
+12497;CUNEIFORM SIGN DUG TIMES HA;Lo;0;L;;;;;N;;;;;
+12498;CUNEIFORM SIGN DUG TIMES HI;Lo;0;L;;;;;N;;;;;
+12499;CUNEIFORM SIGN DUG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+1249A;CUNEIFORM SIGN DUG TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+1249B;CUNEIFORM SIGN DUG TIMES KUR;Lo;0;L;;;;;N;;;;;
+1249C;CUNEIFORM SIGN DUG TIMES KUSHU2;Lo;0;L;;;;;N;;;;;
+1249D;CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL;Lo;0;L;;;;;N;;;;;
+1249E;CUNEIFORM SIGN DUG TIMES LAK-020;Lo;0;L;;;;;N;;;;;
+1249F;CUNEIFORM SIGN DUG TIMES LAM;Lo;0;L;;;;;N;;;;;
+124A0;CUNEIFORM SIGN DUG TIMES LAM TIMES KUR;Lo;0;L;;;;;N;;;;;
+124A1;CUNEIFORM SIGN DUG TIMES LUH PLUS GISH;Lo;0;L;;;;;N;;;;;
+124A2;CUNEIFORM SIGN DUG TIMES MASH;Lo;0;L;;;;;N;;;;;
+124A3;CUNEIFORM SIGN DUG TIMES MES;Lo;0;L;;;;;N;;;;;
+124A4;CUNEIFORM SIGN DUG TIMES MI;Lo;0;L;;;;;N;;;;;
+124A5;CUNEIFORM SIGN DUG TIMES NI;Lo;0;L;;;;;N;;;;;
+124A6;CUNEIFORM SIGN DUG TIMES PI;Lo;0;L;;;;;N;;;;;
+124A7;CUNEIFORM SIGN DUG TIMES SHE;Lo;0;L;;;;;N;;;;;
+124A8;CUNEIFORM SIGN DUG TIMES SI GUNU;Lo;0;L;;;;;N;;;;;
+124A9;CUNEIFORM SIGN E2 TIMES KUR;Lo;0;L;;;;;N;;;;;
+124AA;CUNEIFORM SIGN E2 TIMES PAP;Lo;0;L;;;;;N;;;;;
+124AB;CUNEIFORM SIGN ERIN2 X;Lo;0;L;;;;;N;;;;;
+124AC;CUNEIFORM SIGN ESH2 CROSSING ESH2;Lo;0;L;;;;;N;;;;;
+124AD;CUNEIFORM SIGN EZEN SHESHIG TIMES ASH;Lo;0;L;;;;;N;;;;;
+124AE;CUNEIFORM SIGN EZEN SHESHIG TIMES HI;Lo;0;L;;;;;N;;;;;
+124AF;CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+124B0;CUNEIFORM SIGN EZEN SHESHIG TIMES LA;Lo;0;L;;;;;N;;;;;
+124B1;CUNEIFORM SIGN EZEN SHESHIG TIMES LAL;Lo;0;L;;;;;N;;;;;
+124B2;CUNEIFORM SIGN EZEN SHESHIG TIMES ME;Lo;0;L;;;;;N;;;;;
+124B3;CUNEIFORM SIGN EZEN SHESHIG TIMES MES;Lo;0;L;;;;;N;;;;;
+124B4;CUNEIFORM SIGN EZEN SHESHIG TIMES SU;Lo;0;L;;;;;N;;;;;
+124B5;CUNEIFORM SIGN EZEN TIMES SU;Lo;0;L;;;;;N;;;;;
+124B6;CUNEIFORM SIGN GA2 TIMES BAHAR2;Lo;0;L;;;;;N;;;;;
+124B7;CUNEIFORM SIGN GA2 TIMES DIM GUNU;Lo;0;L;;;;;N;;;;;
+124B8;CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+124B9;CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+124BA;CUNEIFORM SIGN GA2 TIMES EREN;Lo;0;L;;;;;N;;;;;
+124BB;CUNEIFORM SIGN GA2 TIMES GA;Lo;0;L;;;;;N;;;;;
+124BC;CUNEIFORM SIGN GA2 TIMES GAR PLUS DI;Lo;0;L;;;;;N;;;;;
+124BD;CUNEIFORM SIGN GA2 TIMES GAR PLUS NE;Lo;0;L;;;;;N;;;;;
+124BE;CUNEIFORM SIGN GA2 TIMES HA PLUS A;Lo;0;L;;;;;N;;;;;
+124BF;CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL;Lo;0;L;;;;;N;;;;;
+124C0;CUNEIFORM SIGN GA2 TIMES LAM;Lo;0;L;;;;;N;;;;;
+124C1;CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR;Lo;0;L;;;;;N;;;;;
+124C2;CUNEIFORM SIGN GA2 TIMES LUH;Lo;0;L;;;;;N;;;;;
+124C3;CUNEIFORM SIGN GA2 TIMES MUSH;Lo;0;L;;;;;N;;;;;
+124C4;CUNEIFORM SIGN GA2 TIMES NE;Lo;0;L;;;;;N;;;;;
+124C5;CUNEIFORM SIGN GA2 TIMES NE PLUS E2;Lo;0;L;;;;;N;;;;;
+124C6;CUNEIFORM SIGN GA2 TIMES NE PLUS GI;Lo;0;L;;;;;N;;;;;
+124C7;CUNEIFORM SIGN GA2 TIMES SHIM;Lo;0;L;;;;;N;;;;;
+124C8;CUNEIFORM SIGN GA2 TIMES ZIZ2;Lo;0;L;;;;;N;;;;;
+124C9;CUNEIFORM SIGN GABA ROTATED NINETY DEGREES;Lo;0;L;;;;;N;;;;;
+124CA;CUNEIFORM SIGN GESHTIN TIMES U;Lo;0;L;;;;;N;;;;;
+124CB;CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
+124CC;CUNEIFORM SIGN GU2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+124CD;CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4;Lo;0;L;;;;;N;;;;;
+124CE;CUNEIFORM SIGN HA TENU GUNU;Lo;0;L;;;;;N;;;;;
+124CF;CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH;Lo;0;L;;;;;N;;;;;
+124D0;CUNEIFORM SIGN KA TIMES BU;Lo;0;L;;;;;N;;;;;
+124D1;CUNEIFORM SIGN KA TIMES KA;Lo;0;L;;;;;N;;;;;
+124D2;CUNEIFORM SIGN KA TIMES U U U;Lo;0;L;;;;;N;;;;;
+124D3;CUNEIFORM SIGN KA TIMES UR;Lo;0;L;;;;;N;;;;;
+124D4;CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU;Lo;0;L;;;;;N;;;;;
+124D5;CUNEIFORM SIGN LAK-003;Lo;0;L;;;;;N;;;;;
+124D6;CUNEIFORM SIGN LAK-021;Lo;0;L;;;;;N;;;;;
+124D7;CUNEIFORM SIGN LAK-025;Lo;0;L;;;;;N;;;;;
+124D8;CUNEIFORM SIGN LAK-030;Lo;0;L;;;;;N;;;;;
+124D9;CUNEIFORM SIGN LAK-050;Lo;0;L;;;;;N;;;;;
+124DA;CUNEIFORM SIGN LAK-051;Lo;0;L;;;;;N;;;;;
+124DB;CUNEIFORM SIGN LAK-062;Lo;0;L;;;;;N;;;;;
+124DC;CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU;Lo;0;L;;;;;N;;;;;
+124DD;CUNEIFORM SIGN LAK-080;Lo;0;L;;;;;N;;;;;
+124DE;CUNEIFORM SIGN LAK-081 OVER LAK-081;Lo;0;L;;;;;N;;;;;
+124DF;CUNEIFORM SIGN LAK-092;Lo;0;L;;;;;N;;;;;
+124E0;CUNEIFORM SIGN LAK-130;Lo;0;L;;;;;N;;;;;
+124E1;CUNEIFORM SIGN LAK-142;Lo;0;L;;;;;N;;;;;
+124E2;CUNEIFORM SIGN LAK-210;Lo;0;L;;;;;N;;;;;
+124E3;CUNEIFORM SIGN LAK-219;Lo;0;L;;;;;N;;;;;
+124E4;CUNEIFORM SIGN LAK-220;Lo;0;L;;;;;N;;;;;
+124E5;CUNEIFORM SIGN LAK-225;Lo;0;L;;;;;N;;;;;
+124E6;CUNEIFORM SIGN LAK-228;Lo;0;L;;;;;N;;;;;
+124E7;CUNEIFORM SIGN LAK-238;Lo;0;L;;;;;N;;;;;
+124E8;CUNEIFORM SIGN LAK-265;Lo;0;L;;;;;N;;;;;
+124E9;CUNEIFORM SIGN LAK-266;Lo;0;L;;;;;N;;;;;
+124EA;CUNEIFORM SIGN LAK-343;Lo;0;L;;;;;N;;;;;
+124EB;CUNEIFORM SIGN LAK-347;Lo;0;L;;;;;N;;;;;
+124EC;CUNEIFORM SIGN LAK-348;Lo;0;L;;;;;N;;;;;
+124ED;CUNEIFORM SIGN LAK-383;Lo;0;L;;;;;N;;;;;
+124EE;CUNEIFORM SIGN LAK-384;Lo;0;L;;;;;N;;;;;
+124EF;CUNEIFORM SIGN LAK-390;Lo;0;L;;;;;N;;;;;
+124F0;CUNEIFORM SIGN LAK-441;Lo;0;L;;;;;N;;;;;
+124F1;CUNEIFORM SIGN LAK-449;Lo;0;L;;;;;N;;;;;
+124F2;CUNEIFORM SIGN LAK-449 TIMES GU;Lo;0;L;;;;;N;;;;;
+124F3;CUNEIFORM SIGN LAK-449 TIMES IGI;Lo;0;L;;;;;N;;;;;
+124F4;CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3;Lo;0;L;;;;;N;;;;;
+124F5;CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;;
+124F6;CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA;Lo;0;L;;;;;N;;;;;
+124F7;CUNEIFORM SIGN LAK-450;Lo;0;L;;;;;N;;;;;
+124F8;CUNEIFORM SIGN LAK-457;Lo;0;L;;;;;N;;;;;
+124F9;CUNEIFORM SIGN LAK-470;Lo;0;L;;;;;N;;;;;
+124FA;CUNEIFORM SIGN LAK-483;Lo;0;L;;;;;N;;;;;
+124FB;CUNEIFORM SIGN LAK-490;Lo;0;L;;;;;N;;;;;
+124FC;CUNEIFORM SIGN LAK-492;Lo;0;L;;;;;N;;;;;
+124FD;CUNEIFORM SIGN LAK-493;Lo;0;L;;;;;N;;;;;
+124FE;CUNEIFORM SIGN LAK-495;Lo;0;L;;;;;N;;;;;
+124FF;CUNEIFORM SIGN LAK-550;Lo;0;L;;;;;N;;;;;
+12500;CUNEIFORM SIGN LAK-608;Lo;0;L;;;;;N;;;;;
+12501;CUNEIFORM SIGN LAK-617;Lo;0;L;;;;;N;;;;;
+12502;CUNEIFORM SIGN LAK-617 TIMES ASH;Lo;0;L;;;;;N;;;;;
+12503;CUNEIFORM SIGN LAK-617 TIMES BAD;Lo;0;L;;;;;N;;;;;
+12504;CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
+12505;CUNEIFORM SIGN LAK-617 TIMES KU3;Lo;0;L;;;;;N;;;;;
+12506;CUNEIFORM SIGN LAK-617 TIMES LA;Lo;0;L;;;;;N;;;;;
+12507;CUNEIFORM SIGN LAK-617 TIMES TAR;Lo;0;L;;;;;N;;;;;
+12508;CUNEIFORM SIGN LAK-617 TIMES TE;Lo;0;L;;;;;N;;;;;
+12509;CUNEIFORM SIGN LAK-617 TIMES U2;Lo;0;L;;;;;N;;;;;
+1250A;CUNEIFORM SIGN LAK-617 TIMES UD;Lo;0;L;;;;;N;;;;;
+1250B;CUNEIFORM SIGN LAK-617 TIMES URUDA;Lo;0;L;;;;;N;;;;;
+1250C;CUNEIFORM SIGN LAK-636;Lo;0;L;;;;;N;;;;;
+1250D;CUNEIFORM SIGN LAK-648;Lo;0;L;;;;;N;;;;;
+1250E;CUNEIFORM SIGN LAK-648 TIMES DUB;Lo;0;L;;;;;N;;;;;
+1250F;CUNEIFORM SIGN LAK-648 TIMES GA;Lo;0;L;;;;;N;;;;;
+12510;CUNEIFORM SIGN LAK-648 TIMES IGI;Lo;0;L;;;;;N;;;;;
+12511;CUNEIFORM SIGN LAK-648 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12512;CUNEIFORM SIGN LAK-648 TIMES NI;Lo;0;L;;;;;N;;;;;
+12513;CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;;
+12514;CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI;Lo;0;L;;;;;N;;;;;
+12515;CUNEIFORM SIGN LAK-648 TIMES UD;Lo;0;L;;;;;N;;;;;
+12516;CUNEIFORM SIGN LAK-648 TIMES URUDA;Lo;0;L;;;;;N;;;;;
+12517;CUNEIFORM SIGN LAK-724;Lo;0;L;;;;;N;;;;;
+12518;CUNEIFORM SIGN LAK-749;Lo;0;L;;;;;N;;;;;
+12519;CUNEIFORM SIGN LU2 GUNU TIMES ASH;Lo;0;L;;;;;N;;;;;
+1251A;CUNEIFORM SIGN LU2 TIMES DISH;Lo;0;L;;;;;N;;;;;
+1251B;CUNEIFORM SIGN LU2 TIMES HAL;Lo;0;L;;;;;N;;;;;
+1251C;CUNEIFORM SIGN LU2 TIMES PAP;Lo;0;L;;;;;N;;;;;
+1251D;CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;;
+1251E;CUNEIFORM SIGN LU2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+1251F;CUNEIFORM SIGN MI PLUS ZA7;Lo;0;L;;;;;N;;;;;
+12520;CUNEIFORM SIGN MUSH OVER MUSH TIMES GA;Lo;0;L;;;;;N;;;;;
+12521;CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK;Lo;0;L;;;;;N;;;;;
+12522;CUNEIFORM SIGN NINDA2 TIMES DIM GUNU;Lo;0;L;;;;;N;;;;;
+12523;CUNEIFORM SIGN NINDA2 TIMES GISH;Lo;0;L;;;;;N;;;;;
+12524;CUNEIFORM SIGN NINDA2 TIMES GUL;Lo;0;L;;;;;N;;;;;
+12525;CUNEIFORM SIGN NINDA2 TIMES HI;Lo;0;L;;;;;N;;;;;
+12526;CUNEIFORM SIGN NINDA2 TIMES KESH2;Lo;0;L;;;;;N;;;;;
+12527;CUNEIFORM SIGN NINDA2 TIMES LAK-050;Lo;0;L;;;;;N;;;;;
+12528;CUNEIFORM SIGN NINDA2 TIMES MASH;Lo;0;L;;;;;N;;;;;
+12529;CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;;
+1252A;CUNEIFORM SIGN NINDA2 TIMES U;Lo;0;L;;;;;N;;;;;
+1252B;CUNEIFORM SIGN NINDA2 TIMES U PLUS U;Lo;0;L;;;;;N;;;;;
+1252C;CUNEIFORM SIGN NINDA2 TIMES URUDA;Lo;0;L;;;;;N;;;;;
+1252D;CUNEIFORM SIGN SAG GUNU TIMES HA;Lo;0;L;;;;;N;;;;;
+1252E;CUNEIFORM SIGN SAG TIMES EN;Lo;0;L;;;;;N;;;;;
+1252F;CUNEIFORM SIGN SAG TIMES SHE AT LEFT;Lo;0;L;;;;;N;;;;;
+12530;CUNEIFORM SIGN SAG TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12531;CUNEIFORM SIGN SHA6 TENU;Lo;0;L;;;;;N;;;;;
+12532;CUNEIFORM SIGN SHE OVER SHE;Lo;0;L;;;;;N;;;;;
+12533;CUNEIFORM SIGN SHE PLUS HUB2;Lo;0;L;;;;;N;;;;;
+12534;CUNEIFORM SIGN SHE PLUS NAM2;Lo;0;L;;;;;N;;;;;
+12535;CUNEIFORM SIGN SHE PLUS SAR;Lo;0;L;;;;;N;;;;;
+12536;CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI;Lo;0;L;;;;;N;;;;;
+12537;CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN;Lo;0;L;;;;;N;;;;;
+12538;CUNEIFORM SIGN SI TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12539;CUNEIFORM SIGN TAK4 PLUS SAG;Lo;0;L;;;;;N;;;;;
+1253A;CUNEIFORM SIGN TUM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1253B;CUNEIFORM SIGN TUM TIMES THREE DISH;Lo;0;L;;;;;N;;;;;
+1253C;CUNEIFORM SIGN UR2 INVERTED;Lo;0;L;;;;;N;;;;;
+1253D;CUNEIFORM SIGN UR2 TIMES UD;Lo;0;L;;;;;N;;;;;
+1253E;CUNEIFORM SIGN URU TIMES DARA3;Lo;0;L;;;;;N;;;;;
+1253F;CUNEIFORM SIGN URU TIMES LAK-668;Lo;0;L;;;;;N;;;;;
+12540;CUNEIFORM SIGN URU TIMES LU3;Lo;0;L;;;;;N;;;;;
+12541;CUNEIFORM SIGN ZA7;Lo;0;L;;;;;N;;;;;
+12542;CUNEIFORM SIGN ZU OVER ZU PLUS SAR;Lo;0;L;;;;;N;;;;;
+12543;CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU;Lo;0;L;;;;;N;;;;;
13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;;
13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;;
13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;;
@@ -21557,6 +22194,589 @@
1342C;EGYPTIAN HIEROGLYPH AA030;Lo;0;L;;;;;N;;;;;
1342D;EGYPTIAN HIEROGLYPH AA031;Lo;0;L;;;;;N;;;;;
1342E;EGYPTIAN HIEROGLYPH AA032;Lo;0;L;;;;;N;;;;;
+14400;ANATOLIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;;
+14401;ANATOLIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;;
+14402;ANATOLIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;;
+14403;ANATOLIAN HIEROGLYPH A004;Lo;0;L;;;;;N;;;;;
+14404;ANATOLIAN HIEROGLYPH A005;Lo;0;L;;;;;N;;;;;
+14405;ANATOLIAN HIEROGLYPH A006;Lo;0;L;;;;;N;;;;;
+14406;ANATOLIAN HIEROGLYPH A007;Lo;0;L;;;;;N;;;;;
+14407;ANATOLIAN HIEROGLYPH A008;Lo;0;L;;;;;N;;;;;
+14408;ANATOLIAN HIEROGLYPH A009;Lo;0;L;;;;;N;;;;;
+14409;ANATOLIAN HIEROGLYPH A010;Lo;0;L;;;;;N;;;;;
+1440A;ANATOLIAN HIEROGLYPH A010A;Lo;0;L;;;;;N;;;;;
+1440B;ANATOLIAN HIEROGLYPH A011;Lo;0;L;;;;;N;;;;;
+1440C;ANATOLIAN HIEROGLYPH A012;Lo;0;L;;;;;N;;;;;
+1440D;ANATOLIAN HIEROGLYPH A013;Lo;0;L;;;;;N;;;;;
+1440E;ANATOLIAN HIEROGLYPH A014;Lo;0;L;;;;;N;;;;;
+1440F;ANATOLIAN HIEROGLYPH A015;Lo;0;L;;;;;N;;;;;
+14410;ANATOLIAN HIEROGLYPH A016;Lo;0;L;;;;;N;;;;;
+14411;ANATOLIAN HIEROGLYPH A017;Lo;0;L;;;;;N;;;;;
+14412;ANATOLIAN HIEROGLYPH A018;Lo;0;L;;;;;N;;;;;
+14413;ANATOLIAN HIEROGLYPH A019;Lo;0;L;;;;;N;;;;;
+14414;ANATOLIAN HIEROGLYPH A020;Lo;0;L;;;;;N;;;;;
+14415;ANATOLIAN HIEROGLYPH A021;Lo;0;L;;;;;N;;;;;
+14416;ANATOLIAN HIEROGLYPH A022;Lo;0;L;;;;;N;;;;;
+14417;ANATOLIAN HIEROGLYPH A023;Lo;0;L;;;;;N;;;;;
+14418;ANATOLIAN HIEROGLYPH A024;Lo;0;L;;;;;N;;;;;
+14419;ANATOLIAN HIEROGLYPH A025;Lo;0;L;;;;;N;;;;;
+1441A;ANATOLIAN HIEROGLYPH A026;Lo;0;L;;;;;N;;;;;
+1441B;ANATOLIAN HIEROGLYPH A026A;Lo;0;L;;;;;N;;;;;
+1441C;ANATOLIAN HIEROGLYPH A027;Lo;0;L;;;;;N;;;;;
+1441D;ANATOLIAN HIEROGLYPH A028;Lo;0;L;;;;;N;;;;;
+1441E;ANATOLIAN HIEROGLYPH A029;Lo;0;L;;;;;N;;;;;
+1441F;ANATOLIAN HIEROGLYPH A030;Lo;0;L;;;;;N;;;;;
+14420;ANATOLIAN HIEROGLYPH A031;Lo;0;L;;;;;N;;;;;
+14421;ANATOLIAN HIEROGLYPH A032;Lo;0;L;;;;;N;;;;;
+14422;ANATOLIAN HIEROGLYPH A033;Lo;0;L;;;;;N;;;;;
+14423;ANATOLIAN HIEROGLYPH A034;Lo;0;L;;;;;N;;;;;
+14424;ANATOLIAN HIEROGLYPH A035;Lo;0;L;;;;;N;;;;;
+14425;ANATOLIAN HIEROGLYPH A036;Lo;0;L;;;;;N;;;;;
+14426;ANATOLIAN HIEROGLYPH A037;Lo;0;L;;;;;N;;;;;
+14427;ANATOLIAN HIEROGLYPH A038;Lo;0;L;;;;;N;;;;;
+14428;ANATOLIAN HIEROGLYPH A039;Lo;0;L;;;;;N;;;;;
+14429;ANATOLIAN HIEROGLYPH A039A;Lo;0;L;;;;;N;;;;;
+1442A;ANATOLIAN HIEROGLYPH A040;Lo;0;L;;;;;N;;;;;
+1442B;ANATOLIAN HIEROGLYPH A041;Lo;0;L;;;;;N;;;;;
+1442C;ANATOLIAN HIEROGLYPH A041A;Lo;0;L;;;;;N;;;;;
+1442D;ANATOLIAN HIEROGLYPH A042;Lo;0;L;;;;;N;;;;;
+1442E;ANATOLIAN HIEROGLYPH A043;Lo;0;L;;;;;N;;;;;
+1442F;ANATOLIAN HIEROGLYPH A044;Lo;0;L;;;;;N;;;;;
+14430;ANATOLIAN HIEROGLYPH A045;Lo;0;L;;;;;N;;;;;
+14431;ANATOLIAN HIEROGLYPH A045A;Lo;0;L;;;;;N;;;;;
+14432;ANATOLIAN HIEROGLYPH A046;Lo;0;L;;;;;N;;;;;
+14433;ANATOLIAN HIEROGLYPH A046A;Lo;0;L;;;;;N;;;;;
+14434;ANATOLIAN HIEROGLYPH A046B;Lo;0;L;;;;;N;;;;;
+14435;ANATOLIAN HIEROGLYPH A047;Lo;0;L;;;;;N;;;;;
+14436;ANATOLIAN HIEROGLYPH A048;Lo;0;L;;;;;N;;;;;
+14437;ANATOLIAN HIEROGLYPH A049;Lo;0;L;;;;;N;;;;;
+14438;ANATOLIAN HIEROGLYPH A050;Lo;0;L;;;;;N;;;;;
+14439;ANATOLIAN HIEROGLYPH A051;Lo;0;L;;;;;N;;;;;
+1443A;ANATOLIAN HIEROGLYPH A052;Lo;0;L;;;;;N;;;;;
+1443B;ANATOLIAN HIEROGLYPH A053;Lo;0;L;;;;;N;;;;;
+1443C;ANATOLIAN HIEROGLYPH A054;Lo;0;L;;;;;N;;;;;
+1443D;ANATOLIAN HIEROGLYPH A055;Lo;0;L;;;;;N;;;;;
+1443E;ANATOLIAN HIEROGLYPH A056;Lo;0;L;;;;;N;;;;;
+1443F;ANATOLIAN HIEROGLYPH A057;Lo;0;L;;;;;N;;;;;
+14440;ANATOLIAN HIEROGLYPH A058;Lo;0;L;;;;;N;;;;;
+14441;ANATOLIAN HIEROGLYPH A059;Lo;0;L;;;;;N;;;;;
+14442;ANATOLIAN HIEROGLYPH A060;Lo;0;L;;;;;N;;;;;
+14443;ANATOLIAN HIEROGLYPH A061;Lo;0;L;;;;;N;;;;;
+14444;ANATOLIAN HIEROGLYPH A062;Lo;0;L;;;;;N;;;;;
+14445;ANATOLIAN HIEROGLYPH A063;Lo;0;L;;;;;N;;;;;
+14446;ANATOLIAN HIEROGLYPH A064;Lo;0;L;;;;;N;;;;;
+14447;ANATOLIAN HIEROGLYPH A065;Lo;0;L;;;;;N;;;;;
+14448;ANATOLIAN HIEROGLYPH A066;Lo;0;L;;;;;N;;;;;
+14449;ANATOLIAN HIEROGLYPH A066A;Lo;0;L;;;;;N;;;;;
+1444A;ANATOLIAN HIEROGLYPH A066B;Lo;0;L;;;;;N;;;;;
+1444B;ANATOLIAN HIEROGLYPH A066C;Lo;0;L;;;;;N;;;;;
+1444C;ANATOLIAN HIEROGLYPH A067;Lo;0;L;;;;;N;;;;;
+1444D;ANATOLIAN HIEROGLYPH A068;Lo;0;L;;;;;N;;;;;
+1444E;ANATOLIAN HIEROGLYPH A069;Lo;0;L;;;;;N;;;;;
+1444F;ANATOLIAN HIEROGLYPH A070;Lo;0;L;;;;;N;;;;;
+14450;ANATOLIAN HIEROGLYPH A071;Lo;0;L;;;;;N;;;;;
+14451;ANATOLIAN HIEROGLYPH A072;Lo;0;L;;;;;N;;;;;
+14452;ANATOLIAN HIEROGLYPH A073;Lo;0;L;;;;;N;;;;;
+14453;ANATOLIAN HIEROGLYPH A074;Lo;0;L;;;;;N;;;;;
+14454;ANATOLIAN HIEROGLYPH A075;Lo;0;L;;;;;N;;;;;
+14455;ANATOLIAN HIEROGLYPH A076;Lo;0;L;;;;;N;;;;;
+14456;ANATOLIAN HIEROGLYPH A077;Lo;0;L;;;;;N;;;;;
+14457;ANATOLIAN HIEROGLYPH A078;Lo;0;L;;;;;N;;;;;
+14458;ANATOLIAN HIEROGLYPH A079;Lo;0;L;;;;;N;;;;;
+14459;ANATOLIAN HIEROGLYPH A080;Lo;0;L;;;;;N;;;;;
+1445A;ANATOLIAN HIEROGLYPH A081;Lo;0;L;;;;;N;;;;;
+1445B;ANATOLIAN HIEROGLYPH A082;Lo;0;L;;;;;N;;;;;
+1445C;ANATOLIAN HIEROGLYPH A083;Lo;0;L;;;;;N;;;;;
+1445D;ANATOLIAN HIEROGLYPH A084;Lo;0;L;;;;;N;;;;;
+1445E;ANATOLIAN HIEROGLYPH A085;Lo;0;L;;;;;N;;;;;
+1445F;ANATOLIAN HIEROGLYPH A086;Lo;0;L;;;;;N;;;;;
+14460;ANATOLIAN HIEROGLYPH A087;Lo;0;L;;;;;N;;;;;
+14461;ANATOLIAN HIEROGLYPH A088;Lo;0;L;;;;;N;;;;;
+14462;ANATOLIAN HIEROGLYPH A089;Lo;0;L;;;;;N;;;;;
+14463;ANATOLIAN HIEROGLYPH A090;Lo;0;L;;;;;N;;;;;
+14464;ANATOLIAN HIEROGLYPH A091;Lo;0;L;;;;;N;;;;;
+14465;ANATOLIAN HIEROGLYPH A092;Lo;0;L;;;;;N;;;;;
+14466;ANATOLIAN HIEROGLYPH A093;Lo;0;L;;;;;N;;;;;
+14467;ANATOLIAN HIEROGLYPH A094;Lo;0;L;;;;;N;;;;;
+14468;ANATOLIAN HIEROGLYPH A095;Lo;0;L;;;;;N;;;;;
+14469;ANATOLIAN HIEROGLYPH A096;Lo;0;L;;;;;N;;;;;
+1446A;ANATOLIAN HIEROGLYPH A097;Lo;0;L;;;;;N;;;;;
+1446B;ANATOLIAN HIEROGLYPH A097A;Lo;0;L;;;;;N;;;;;
+1446C;ANATOLIAN HIEROGLYPH A098;Lo;0;L;;;;;N;;;;;
+1446D;ANATOLIAN HIEROGLYPH A098A;Lo;0;L;;;;;N;;;;;
+1446E;ANATOLIAN HIEROGLYPH A099;Lo;0;L;;;;;N;;;;;
+1446F;ANATOLIAN HIEROGLYPH A100;Lo;0;L;;;;;N;;;;;
+14470;ANATOLIAN HIEROGLYPH A100A;Lo;0;L;;;;;N;;;;;
+14471;ANATOLIAN HIEROGLYPH A101;Lo;0;L;;;;;N;;;;;
+14472;ANATOLIAN HIEROGLYPH A101A;Lo;0;L;;;;;N;;;;;
+14473;ANATOLIAN HIEROGLYPH A102;Lo;0;L;;;;;N;;;;;
+14474;ANATOLIAN HIEROGLYPH A102A;Lo;0;L;;;;;N;;;;;
+14475;ANATOLIAN HIEROGLYPH A103;Lo;0;L;;;;;N;;;;;
+14476;ANATOLIAN HIEROGLYPH A104;Lo;0;L;;;;;N;;;;;
+14477;ANATOLIAN HIEROGLYPH A104A;Lo;0;L;;;;;N;;;;;
+14478;ANATOLIAN HIEROGLYPH A104B;Lo;0;L;;;;;N;;;;;
+14479;ANATOLIAN HIEROGLYPH A104C;Lo;0;L;;;;;N;;;;;
+1447A;ANATOLIAN HIEROGLYPH A105;Lo;0;L;;;;;N;;;;;
+1447B;ANATOLIAN HIEROGLYPH A105A;Lo;0;L;;;;;N;;;;;
+1447C;ANATOLIAN HIEROGLYPH A105B;Lo;0;L;;;;;N;;;;;
+1447D;ANATOLIAN HIEROGLYPH A106;Lo;0;L;;;;;N;;;;;
+1447E;ANATOLIAN HIEROGLYPH A107;Lo;0;L;;;;;N;;;;;
+1447F;ANATOLIAN HIEROGLYPH A107A;Lo;0;L;;;;;N;;;;;
+14480;ANATOLIAN HIEROGLYPH A107B;Lo;0;L;;;;;N;;;;;
+14481;ANATOLIAN HIEROGLYPH A107C;Lo;0;L;;;;;N;;;;;
+14482;ANATOLIAN HIEROGLYPH A108;Lo;0;L;;;;;N;;;;;
+14483;ANATOLIAN HIEROGLYPH A109;Lo;0;L;;;;;N;;;;;
+14484;ANATOLIAN HIEROGLYPH A110;Lo;0;L;;;;;N;;;;;
+14485;ANATOLIAN HIEROGLYPH A110A;Lo;0;L;;;;;N;;;;;
+14486;ANATOLIAN HIEROGLYPH A110B;Lo;0;L;;;;;N;;;;;
+14487;ANATOLIAN HIEROGLYPH A111;Lo;0;L;;;;;N;;;;;
+14488;ANATOLIAN HIEROGLYPH A112;Lo;0;L;;;;;N;;;;;
+14489;ANATOLIAN HIEROGLYPH A113;Lo;0;L;;;;;N;;;;;
+1448A;ANATOLIAN HIEROGLYPH A114;Lo;0;L;;;;;N;;;;;
+1448B;ANATOLIAN HIEROGLYPH A115;Lo;0;L;;;;;N;;;;;
+1448C;ANATOLIAN HIEROGLYPH A115A;Lo;0;L;;;;;N;;;;;
+1448D;ANATOLIAN HIEROGLYPH A116;Lo;0;L;;;;;N;;;;;
+1448E;ANATOLIAN HIEROGLYPH A117;Lo;0;L;;;;;N;;;;;
+1448F;ANATOLIAN HIEROGLYPH A118;Lo;0;L;;;;;N;;;;;
+14490;ANATOLIAN HIEROGLYPH A119;Lo;0;L;;;;;N;;;;;
+14491;ANATOLIAN HIEROGLYPH A120;Lo;0;L;;;;;N;;;;;
+14492;ANATOLIAN HIEROGLYPH A121;Lo;0;L;;;;;N;;;;;
+14493;ANATOLIAN HIEROGLYPH A122;Lo;0;L;;;;;N;;;;;
+14494;ANATOLIAN HIEROGLYPH A123;Lo;0;L;;;;;N;;;;;
+14495;ANATOLIAN HIEROGLYPH A124;Lo;0;L;;;;;N;;;;;
+14496;ANATOLIAN HIEROGLYPH A125;Lo;0;L;;;;;N;;;;;
+14497;ANATOLIAN HIEROGLYPH A125A;Lo;0;L;;;;;N;;;;;
+14498;ANATOLIAN HIEROGLYPH A126;Lo;0;L;;;;;N;;;;;
+14499;ANATOLIAN HIEROGLYPH A127;Lo;0;L;;;;;N;;;;;
+1449A;ANATOLIAN HIEROGLYPH A128;Lo;0;L;;;;;N;;;;;
+1449B;ANATOLIAN HIEROGLYPH A129;Lo;0;L;;;;;N;;;;;
+1449C;ANATOLIAN HIEROGLYPH A130;Lo;0;L;;;;;N;;;;;
+1449D;ANATOLIAN HIEROGLYPH A131;Lo;0;L;;;;;N;;;;;
+1449E;ANATOLIAN HIEROGLYPH A132;Lo;0;L;;;;;N;;;;;
+1449F;ANATOLIAN HIEROGLYPH A133;Lo;0;L;;;;;N;;;;;
+144A0;ANATOLIAN HIEROGLYPH A134;Lo;0;L;;;;;N;;;;;
+144A1;ANATOLIAN HIEROGLYPH A135;Lo;0;L;;;;;N;;;;;
+144A2;ANATOLIAN HIEROGLYPH A135A;Lo;0;L;;;;;N;;;;;
+144A3;ANATOLIAN HIEROGLYPH A136;Lo;0;L;;;;;N;;;;;
+144A4;ANATOLIAN HIEROGLYPH A137;Lo;0;L;;;;;N;;;;;
+144A5;ANATOLIAN HIEROGLYPH A138;Lo;0;L;;;;;N;;;;;
+144A6;ANATOLIAN HIEROGLYPH A139;Lo;0;L;;;;;N;;;;;
+144A7;ANATOLIAN HIEROGLYPH A140;Lo;0;L;;;;;N;;;;;
+144A8;ANATOLIAN HIEROGLYPH A141;Lo;0;L;;;;;N;;;;;
+144A9;ANATOLIAN HIEROGLYPH A142;Lo;0;L;;;;;N;;;;;
+144AA;ANATOLIAN HIEROGLYPH A143;Lo;0;L;;;;;N;;;;;
+144AB;ANATOLIAN HIEROGLYPH A144;Lo;0;L;;;;;N;;;;;
+144AC;ANATOLIAN HIEROGLYPH A145;Lo;0;L;;;;;N;;;;;
+144AD;ANATOLIAN HIEROGLYPH A146;Lo;0;L;;;;;N;;;;;
+144AE;ANATOLIAN HIEROGLYPH A147;Lo;0;L;;;;;N;;;;;
+144AF;ANATOLIAN HIEROGLYPH A148;Lo;0;L;;;;;N;;;;;
+144B0;ANATOLIAN HIEROGLYPH A149;Lo;0;L;;;;;N;;;;;
+144B1;ANATOLIAN HIEROGLYPH A150;Lo;0;L;;;;;N;;;;;
+144B2;ANATOLIAN HIEROGLYPH A151;Lo;0;L;;;;;N;;;;;
+144B3;ANATOLIAN HIEROGLYPH A152;Lo;0;L;;;;;N;;;;;
+144B4;ANATOLIAN HIEROGLYPH A153;Lo;0;L;;;;;N;;;;;
+144B5;ANATOLIAN HIEROGLYPH A154;Lo;0;L;;;;;N;;;;;
+144B6;ANATOLIAN HIEROGLYPH A155;Lo;0;L;;;;;N;;;;;
+144B7;ANATOLIAN HIEROGLYPH A156;Lo;0;L;;;;;N;;;;;
+144B8;ANATOLIAN HIEROGLYPH A157;Lo;0;L;;;;;N;;;;;
+144B9;ANATOLIAN HIEROGLYPH A158;Lo;0;L;;;;;N;;;;;
+144BA;ANATOLIAN HIEROGLYPH A159;Lo;0;L;;;;;N;;;;;
+144BB;ANATOLIAN HIEROGLYPH A160;Lo;0;L;;;;;N;;;;;
+144BC;ANATOLIAN HIEROGLYPH A161;Lo;0;L;;;;;N;;;;;
+144BD;ANATOLIAN HIEROGLYPH A162;Lo;0;L;;;;;N;;;;;
+144BE;ANATOLIAN HIEROGLYPH A163;Lo;0;L;;;;;N;;;;;
+144BF;ANATOLIAN HIEROGLYPH A164;Lo;0;L;;;;;N;;;;;
+144C0;ANATOLIAN HIEROGLYPH A165;Lo;0;L;;;;;N;;;;;
+144C1;ANATOLIAN HIEROGLYPH A166;Lo;0;L;;;;;N;;;;;
+144C2;ANATOLIAN HIEROGLYPH A167;Lo;0;L;;;;;N;;;;;
+144C3;ANATOLIAN HIEROGLYPH A168;Lo;0;L;;;;;N;;;;;
+144C4;ANATOLIAN HIEROGLYPH A169;Lo;0;L;;;;;N;;;;;
+144C5;ANATOLIAN HIEROGLYPH A170;Lo;0;L;;;;;N;;;;;
+144C6;ANATOLIAN HIEROGLYPH A171;Lo;0;L;;;;;N;;;;;
+144C7;ANATOLIAN HIEROGLYPH A172;Lo;0;L;;;;;N;;;;;
+144C8;ANATOLIAN HIEROGLYPH A173;Lo;0;L;;;;;N;;;;;
+144C9;ANATOLIAN HIEROGLYPH A174;Lo;0;L;;;;;N;;;;;
+144CA;ANATOLIAN HIEROGLYPH A175;Lo;0;L;;;;;N;;;;;
+144CB;ANATOLIAN HIEROGLYPH A176;Lo;0;L;;;;;N;;;;;
+144CC;ANATOLIAN HIEROGLYPH A177;Lo;0;L;;;;;N;;;;;
+144CD;ANATOLIAN HIEROGLYPH A178;Lo;0;L;;;;;N;;;;;
+144CE;ANATOLIAN HIEROGLYPH A179;Lo;0;L;;;;;N;;;;;
+144CF;ANATOLIAN HIEROGLYPH A180;Lo;0;L;;;;;N;;;;;
+144D0;ANATOLIAN HIEROGLYPH A181;Lo;0;L;;;;;N;;;;;
+144D1;ANATOLIAN HIEROGLYPH A182;Lo;0;L;;;;;N;;;;;
+144D2;ANATOLIAN HIEROGLYPH A183;Lo;0;L;;;;;N;;;;;
+144D3;ANATOLIAN HIEROGLYPH A184;Lo;0;L;;;;;N;;;;;
+144D4;ANATOLIAN HIEROGLYPH A185;Lo;0;L;;;;;N;;;;;
+144D5;ANATOLIAN HIEROGLYPH A186;Lo;0;L;;;;;N;;;;;
+144D6;ANATOLIAN HIEROGLYPH A187;Lo;0;L;;;;;N;;;;;
+144D7;ANATOLIAN HIEROGLYPH A188;Lo;0;L;;;;;N;;;;;
+144D8;ANATOLIAN HIEROGLYPH A189;Lo;0;L;;;;;N;;;;;
+144D9;ANATOLIAN HIEROGLYPH A190;Lo;0;L;;;;;N;;;;;
+144DA;ANATOLIAN HIEROGLYPH A191;Lo;0;L;;;;;N;;;;;
+144DB;ANATOLIAN HIEROGLYPH A192;Lo;0;L;;;;;N;;;;;
+144DC;ANATOLIAN HIEROGLYPH A193;Lo;0;L;;;;;N;;;;;
+144DD;ANATOLIAN HIEROGLYPH A194;Lo;0;L;;;;;N;;;;;
+144DE;ANATOLIAN HIEROGLYPH A195;Lo;0;L;;;;;N;;;;;
+144DF;ANATOLIAN HIEROGLYPH A196;Lo;0;L;;;;;N;;;;;
+144E0;ANATOLIAN HIEROGLYPH A197;Lo;0;L;;;;;N;;;;;
+144E1;ANATOLIAN HIEROGLYPH A198;Lo;0;L;;;;;N;;;;;
+144E2;ANATOLIAN HIEROGLYPH A199;Lo;0;L;;;;;N;;;;;
+144E3;ANATOLIAN HIEROGLYPH A200;Lo;0;L;;;;;N;;;;;
+144E4;ANATOLIAN HIEROGLYPH A201;Lo;0;L;;;;;N;;;;;
+144E5;ANATOLIAN HIEROGLYPH A202;Lo;0;L;;;;;N;;;;;
+144E6;ANATOLIAN HIEROGLYPH A202A;Lo;0;L;;;;;N;;;;;
+144E7;ANATOLIAN HIEROGLYPH A202B;Lo;0;L;;;;;N;;;;;
+144E8;ANATOLIAN HIEROGLYPH A203;Lo;0;L;;;;;N;;;;;
+144E9;ANATOLIAN HIEROGLYPH A204;Lo;0;L;;;;;N;;;;;
+144EA;ANATOLIAN HIEROGLYPH A205;Lo;0;L;;;;;N;;;;;
+144EB;ANATOLIAN HIEROGLYPH A206;Lo;0;L;;;;;N;;;;;
+144EC;ANATOLIAN HIEROGLYPH A207;Lo;0;L;;;;;N;;;;;
+144ED;ANATOLIAN HIEROGLYPH A207A;Lo;0;L;;;;;N;;;;;
+144EE;ANATOLIAN HIEROGLYPH A208;Lo;0;L;;;;;N;;;;;
+144EF;ANATOLIAN HIEROGLYPH A209;Lo;0;L;;;;;N;;;;;
+144F0;ANATOLIAN HIEROGLYPH A209A;Lo;0;L;;;;;N;;;;;
+144F1;ANATOLIAN HIEROGLYPH A210;Lo;0;L;;;;;N;;;;;
+144F2;ANATOLIAN HIEROGLYPH A211;Lo;0;L;;;;;N;;;;;
+144F3;ANATOLIAN HIEROGLYPH A212;Lo;0;L;;;;;N;;;;;
+144F4;ANATOLIAN HIEROGLYPH A213;Lo;0;L;;;;;N;;;;;
+144F5;ANATOLIAN HIEROGLYPH A214;Lo;0;L;;;;;N;;;;;
+144F6;ANATOLIAN HIEROGLYPH A215;Lo;0;L;;;;;N;;;;;
+144F7;ANATOLIAN HIEROGLYPH A215A;Lo;0;L;;;;;N;;;;;
+144F8;ANATOLIAN HIEROGLYPH A216;Lo;0;L;;;;;N;;;;;
+144F9;ANATOLIAN HIEROGLYPH A216A;Lo;0;L;;;;;N;;;;;
+144FA;ANATOLIAN HIEROGLYPH A217;Lo;0;L;;;;;N;;;;;
+144FB;ANATOLIAN HIEROGLYPH A218;Lo;0;L;;;;;N;;;;;
+144FC;ANATOLIAN HIEROGLYPH A219;Lo;0;L;;;;;N;;;;;
+144FD;ANATOLIAN HIEROGLYPH A220;Lo;0;L;;;;;N;;;;;
+144FE;ANATOLIAN HIEROGLYPH A221;Lo;0;L;;;;;N;;;;;
+144FF;ANATOLIAN HIEROGLYPH A222;Lo;0;L;;;;;N;;;;;
+14500;ANATOLIAN HIEROGLYPH A223;Lo;0;L;;;;;N;;;;;
+14501;ANATOLIAN HIEROGLYPH A224;Lo;0;L;;;;;N;;;;;
+14502;ANATOLIAN HIEROGLYPH A225;Lo;0;L;;;;;N;;;;;
+14503;ANATOLIAN HIEROGLYPH A226;Lo;0;L;;;;;N;;;;;
+14504;ANATOLIAN HIEROGLYPH A227;Lo;0;L;;;;;N;;;;;
+14505;ANATOLIAN HIEROGLYPH A227A;Lo;0;L;;;;;N;;;;;
+14506;ANATOLIAN HIEROGLYPH A228;Lo;0;L;;;;;N;;;;;
+14507;ANATOLIAN HIEROGLYPH A229;Lo;0;L;;;;;N;;;;;
+14508;ANATOLIAN HIEROGLYPH A230;Lo;0;L;;;;;N;;;;;
+14509;ANATOLIAN HIEROGLYPH A231;Lo;0;L;;;;;N;;;;;
+1450A;ANATOLIAN HIEROGLYPH A232;Lo;0;L;;;;;N;;;;;
+1450B;ANATOLIAN HIEROGLYPH A233;Lo;0;L;;;;;N;;;;;
+1450C;ANATOLIAN HIEROGLYPH A234;Lo;0;L;;;;;N;;;;;
+1450D;ANATOLIAN HIEROGLYPH A235;Lo;0;L;;;;;N;;;;;
+1450E;ANATOLIAN HIEROGLYPH A236;Lo;0;L;;;;;N;;;;;
+1450F;ANATOLIAN HIEROGLYPH A237;Lo;0;L;;;;;N;;;;;
+14510;ANATOLIAN HIEROGLYPH A238;Lo;0;L;;;;;N;;;;;
+14511;ANATOLIAN HIEROGLYPH A239;Lo;0;L;;;;;N;;;;;
+14512;ANATOLIAN HIEROGLYPH A240;Lo;0;L;;;;;N;;;;;
+14513;ANATOLIAN HIEROGLYPH A241;Lo;0;L;;;;;N;;;;;
+14514;ANATOLIAN HIEROGLYPH A242;Lo;0;L;;;;;N;;;;;
+14515;ANATOLIAN HIEROGLYPH A243;Lo;0;L;;;;;N;;;;;
+14516;ANATOLIAN HIEROGLYPH A244;Lo;0;L;;;;;N;;;;;
+14517;ANATOLIAN HIEROGLYPH A245;Lo;0;L;;;;;N;;;;;
+14518;ANATOLIAN HIEROGLYPH A246;Lo;0;L;;;;;N;;;;;
+14519;ANATOLIAN HIEROGLYPH A247;Lo;0;L;;;;;N;;;;;
+1451A;ANATOLIAN HIEROGLYPH A248;Lo;0;L;;;;;N;;;;;
+1451B;ANATOLIAN HIEROGLYPH A249;Lo;0;L;;;;;N;;;;;
+1451C;ANATOLIAN HIEROGLYPH A250;Lo;0;L;;;;;N;;;;;
+1451D;ANATOLIAN HIEROGLYPH A251;Lo;0;L;;;;;N;;;;;
+1451E;ANATOLIAN HIEROGLYPH A252;Lo;0;L;;;;;N;;;;;
+1451F;ANATOLIAN HIEROGLYPH A253;Lo;0;L;;;;;N;;;;;
+14520;ANATOLIAN HIEROGLYPH A254;Lo;0;L;;;;;N;;;;;
+14521;ANATOLIAN HIEROGLYPH A255;Lo;0;L;;;;;N;;;;;
+14522;ANATOLIAN HIEROGLYPH A256;Lo;0;L;;;;;N;;;;;
+14523;ANATOLIAN HIEROGLYPH A257;Lo;0;L;;;;;N;;;;;
+14524;ANATOLIAN HIEROGLYPH A258;Lo;0;L;;;;;N;;;;;
+14525;ANATOLIAN HIEROGLYPH A259;Lo;0;L;;;;;N;;;;;
+14526;ANATOLIAN HIEROGLYPH A260;Lo;0;L;;;;;N;;;;;
+14527;ANATOLIAN HIEROGLYPH A261;Lo;0;L;;;;;N;;;;;
+14528;ANATOLIAN HIEROGLYPH A262;Lo;0;L;;;;;N;;;;;
+14529;ANATOLIAN HIEROGLYPH A263;Lo;0;L;;;;;N;;;;;
+1452A;ANATOLIAN HIEROGLYPH A264;Lo;0;L;;;;;N;;;;;
+1452B;ANATOLIAN HIEROGLYPH A265;Lo;0;L;;;;;N;;;;;
+1452C;ANATOLIAN HIEROGLYPH A266;Lo;0;L;;;;;N;;;;;
+1452D;ANATOLIAN HIEROGLYPH A267;Lo;0;L;;;;;N;;;;;
+1452E;ANATOLIAN HIEROGLYPH A267A;Lo;0;L;;;;;N;;;;;
+1452F;ANATOLIAN HIEROGLYPH A268;Lo;0;L;;;;;N;;;;;
+14530;ANATOLIAN HIEROGLYPH A269;Lo;0;L;;;;;N;;;;;
+14531;ANATOLIAN HIEROGLYPH A270;Lo;0;L;;;;;N;;;;;
+14532;ANATOLIAN HIEROGLYPH A271;Lo;0;L;;;;;N;;;;;
+14533;ANATOLIAN HIEROGLYPH A272;Lo;0;L;;;;;N;;;;;
+14534;ANATOLIAN HIEROGLYPH A273;Lo;0;L;;;;;N;;;;;
+14535;ANATOLIAN HIEROGLYPH A274;Lo;0;L;;;;;N;;;;;
+14536;ANATOLIAN HIEROGLYPH A275;Lo;0;L;;;;;N;;;;;
+14537;ANATOLIAN HIEROGLYPH A276;Lo;0;L;;;;;N;;;;;
+14538;ANATOLIAN HIEROGLYPH A277;Lo;0;L;;;;;N;;;;;
+14539;ANATOLIAN HIEROGLYPH A278;Lo;0;L;;;;;N;;;;;
+1453A;ANATOLIAN HIEROGLYPH A279;Lo;0;L;;;;;N;;;;;
+1453B;ANATOLIAN HIEROGLYPH A280;Lo;0;L;;;;;N;;;;;
+1453C;ANATOLIAN HIEROGLYPH A281;Lo;0;L;;;;;N;;;;;
+1453D;ANATOLIAN HIEROGLYPH A282;Lo;0;L;;;;;N;;;;;
+1453E;ANATOLIAN HIEROGLYPH A283;Lo;0;L;;;;;N;;;;;
+1453F;ANATOLIAN HIEROGLYPH A284;Lo;0;L;;;;;N;;;;;
+14540;ANATOLIAN HIEROGLYPH A285;Lo;0;L;;;;;N;;;;;
+14541;ANATOLIAN HIEROGLYPH A286;Lo;0;L;;;;;N;;;;;
+14542;ANATOLIAN HIEROGLYPH A287;Lo;0;L;;;;;N;;;;;
+14543;ANATOLIAN HIEROGLYPH A288;Lo;0;L;;;;;N;;;;;
+14544;ANATOLIAN HIEROGLYPH A289;Lo;0;L;;;;;N;;;;;
+14545;ANATOLIAN HIEROGLYPH A289A;Lo;0;L;;;;;N;;;;;
+14546;ANATOLIAN HIEROGLYPH A290;Lo;0;L;;;;;N;;;;;
+14547;ANATOLIAN HIEROGLYPH A291;Lo;0;L;;;;;N;;;;;
+14548;ANATOLIAN HIEROGLYPH A292;Lo;0;L;;;;;N;;;;;
+14549;ANATOLIAN HIEROGLYPH A293;Lo;0;L;;;;;N;;;;;
+1454A;ANATOLIAN HIEROGLYPH A294;Lo;0;L;;;;;N;;;;;
+1454B;ANATOLIAN HIEROGLYPH A294A;Lo;0;L;;;;;N;;;;;
+1454C;ANATOLIAN HIEROGLYPH A295;Lo;0;L;;;;;N;;;;;
+1454D;ANATOLIAN HIEROGLYPH A296;Lo;0;L;;;;;N;;;;;
+1454E;ANATOLIAN HIEROGLYPH A297;Lo;0;L;;;;;N;;;;;
+1454F;ANATOLIAN HIEROGLYPH A298;Lo;0;L;;;;;N;;;;;
+14550;ANATOLIAN HIEROGLYPH A299;Lo;0;L;;;;;N;;;;;
+14551;ANATOLIAN HIEROGLYPH A299A;Lo;0;L;;;;;N;;;;;
+14552;ANATOLIAN HIEROGLYPH A300;Lo;0;L;;;;;N;;;;;
+14553;ANATOLIAN HIEROGLYPH A301;Lo;0;L;;;;;N;;;;;
+14554;ANATOLIAN HIEROGLYPH A302;Lo;0;L;;;;;N;;;;;
+14555;ANATOLIAN HIEROGLYPH A303;Lo;0;L;;;;;N;;;;;
+14556;ANATOLIAN HIEROGLYPH A304;Lo;0;L;;;;;N;;;;;
+14557;ANATOLIAN HIEROGLYPH A305;Lo;0;L;;;;;N;;;;;
+14558;ANATOLIAN HIEROGLYPH A306;Lo;0;L;;;;;N;;;;;
+14559;ANATOLIAN HIEROGLYPH A307;Lo;0;L;;;;;N;;;;;
+1455A;ANATOLIAN HIEROGLYPH A308;Lo;0;L;;;;;N;;;;;
+1455B;ANATOLIAN HIEROGLYPH A309;Lo;0;L;;;;;N;;;;;
+1455C;ANATOLIAN HIEROGLYPH A309A;Lo;0;L;;;;;N;;;;;
+1455D;ANATOLIAN HIEROGLYPH A310;Lo;0;L;;;;;N;;;;;
+1455E;ANATOLIAN HIEROGLYPH A311;Lo;0;L;;;;;N;;;;;
+1455F;ANATOLIAN HIEROGLYPH A312;Lo;0;L;;;;;N;;;;;
+14560;ANATOLIAN HIEROGLYPH A313;Lo;0;L;;;;;N;;;;;
+14561;ANATOLIAN HIEROGLYPH A314;Lo;0;L;;;;;N;;;;;
+14562;ANATOLIAN HIEROGLYPH A315;Lo;0;L;;;;;N;;;;;
+14563;ANATOLIAN HIEROGLYPH A316;Lo;0;L;;;;;N;;;;;
+14564;ANATOLIAN HIEROGLYPH A317;Lo;0;L;;;;;N;;;;;
+14565;ANATOLIAN HIEROGLYPH A318;Lo;0;L;;;;;N;;;;;
+14566;ANATOLIAN HIEROGLYPH A319;Lo;0;L;;;;;N;;;;;
+14567;ANATOLIAN HIEROGLYPH A320;Lo;0;L;;;;;N;;;;;
+14568;ANATOLIAN HIEROGLYPH A321;Lo;0;L;;;;;N;;;;;
+14569;ANATOLIAN HIEROGLYPH A322;Lo;0;L;;;;;N;;;;;
+1456A;ANATOLIAN HIEROGLYPH A323;Lo;0;L;;;;;N;;;;;
+1456B;ANATOLIAN HIEROGLYPH A324;Lo;0;L;;;;;N;;;;;
+1456C;ANATOLIAN HIEROGLYPH A325;Lo;0;L;;;;;N;;;;;
+1456D;ANATOLIAN HIEROGLYPH A326;Lo;0;L;;;;;N;;;;;
+1456E;ANATOLIAN HIEROGLYPH A327;Lo;0;L;;;;;N;;;;;
+1456F;ANATOLIAN HIEROGLYPH A328;Lo;0;L;;;;;N;;;;;
+14570;ANATOLIAN HIEROGLYPH A329;Lo;0;L;;;;;N;;;;;
+14571;ANATOLIAN HIEROGLYPH A329A;Lo;0;L;;;;;N;;;;;
+14572;ANATOLIAN HIEROGLYPH A330;Lo;0;L;;;;;N;;;;;
+14573;ANATOLIAN HIEROGLYPH A331;Lo;0;L;;;;;N;;;;;
+14574;ANATOLIAN HIEROGLYPH A332A;Lo;0;L;;;;;N;;;;;
+14575;ANATOLIAN HIEROGLYPH A332B;Lo;0;L;;;;;N;;;;;
+14576;ANATOLIAN HIEROGLYPH A332C;Lo;0;L;;;;;N;;;;;
+14577;ANATOLIAN HIEROGLYPH A333;Lo;0;L;;;;;N;;;;;
+14578;ANATOLIAN HIEROGLYPH A334;Lo;0;L;;;;;N;;;;;
+14579;ANATOLIAN HIEROGLYPH A335;Lo;0;L;;;;;N;;;;;
+1457A;ANATOLIAN HIEROGLYPH A336;Lo;0;L;;;;;N;;;;;
+1457B;ANATOLIAN HIEROGLYPH A336A;Lo;0;L;;;;;N;;;;;
+1457C;ANATOLIAN HIEROGLYPH A336B;Lo;0;L;;;;;N;;;;;
+1457D;ANATOLIAN HIEROGLYPH A336C;Lo;0;L;;;;;N;;;;;
+1457E;ANATOLIAN HIEROGLYPH A337;Lo;0;L;;;;;N;;;;;
+1457F;ANATOLIAN HIEROGLYPH A338;Lo;0;L;;;;;N;;;;;
+14580;ANATOLIAN HIEROGLYPH A339;Lo;0;L;;;;;N;;;;;
+14581;ANATOLIAN HIEROGLYPH A340;Lo;0;L;;;;;N;;;;;
+14582;ANATOLIAN HIEROGLYPH A341;Lo;0;L;;;;;N;;;;;
+14583;ANATOLIAN HIEROGLYPH A342;Lo;0;L;;;;;N;;;;;
+14584;ANATOLIAN HIEROGLYPH A343;Lo;0;L;;;;;N;;;;;
+14585;ANATOLIAN HIEROGLYPH A344;Lo;0;L;;;;;N;;;;;
+14586;ANATOLIAN HIEROGLYPH A345;Lo;0;L;;;;;N;;;;;
+14587;ANATOLIAN HIEROGLYPH A346;Lo;0;L;;;;;N;;;;;
+14588;ANATOLIAN HIEROGLYPH A347;Lo;0;L;;;;;N;;;;;
+14589;ANATOLIAN HIEROGLYPH A348;Lo;0;L;;;;;N;;;;;
+1458A;ANATOLIAN HIEROGLYPH A349;Lo;0;L;;;;;N;;;;;
+1458B;ANATOLIAN HIEROGLYPH A350;Lo;0;L;;;;;N;;;;;
+1458C;ANATOLIAN HIEROGLYPH A351;Lo;0;L;;;;;N;;;;;
+1458D;ANATOLIAN HIEROGLYPH A352;Lo;0;L;;;;;N;;;;;
+1458E;ANATOLIAN HIEROGLYPH A353;Lo;0;L;;;;;N;;;;;
+1458F;ANATOLIAN HIEROGLYPH A354;Lo;0;L;;;;;N;;;;;
+14590;ANATOLIAN HIEROGLYPH A355;Lo;0;L;;;;;N;;;;;
+14591;ANATOLIAN HIEROGLYPH A356;Lo;0;L;;;;;N;;;;;
+14592;ANATOLIAN HIEROGLYPH A357;Lo;0;L;;;;;N;;;;;
+14593;ANATOLIAN HIEROGLYPH A358;Lo;0;L;;;;;N;;;;;
+14594;ANATOLIAN HIEROGLYPH A359;Lo;0;L;;;;;N;;;;;
+14595;ANATOLIAN HIEROGLYPH A359A;Lo;0;L;;;;;N;;;;;
+14596;ANATOLIAN HIEROGLYPH A360;Lo;0;L;;;;;N;;;;;
+14597;ANATOLIAN HIEROGLYPH A361;Lo;0;L;;;;;N;;;;;
+14598;ANATOLIAN HIEROGLYPH A362;Lo;0;L;;;;;N;;;;;
+14599;ANATOLIAN HIEROGLYPH A363;Lo;0;L;;;;;N;;;;;
+1459A;ANATOLIAN HIEROGLYPH A364;Lo;0;L;;;;;N;;;;;
+1459B;ANATOLIAN HIEROGLYPH A364A;Lo;0;L;;;;;N;;;;;
+1459C;ANATOLIAN HIEROGLYPH A365;Lo;0;L;;;;;N;;;;;
+1459D;ANATOLIAN HIEROGLYPH A366;Lo;0;L;;;;;N;;;;;
+1459E;ANATOLIAN HIEROGLYPH A367;Lo;0;L;;;;;N;;;;;
+1459F;ANATOLIAN HIEROGLYPH A368;Lo;0;L;;;;;N;;;;;
+145A0;ANATOLIAN HIEROGLYPH A368A;Lo;0;L;;;;;N;;;;;
+145A1;ANATOLIAN HIEROGLYPH A369;Lo;0;L;;;;;N;;;;;
+145A2;ANATOLIAN HIEROGLYPH A370;Lo;0;L;;;;;N;;;;;
+145A3;ANATOLIAN HIEROGLYPH A371;Lo;0;L;;;;;N;;;;;
+145A4;ANATOLIAN HIEROGLYPH A371A;Lo;0;L;;;;;N;;;;;
+145A5;ANATOLIAN HIEROGLYPH A372;Lo;0;L;;;;;N;;;;;
+145A6;ANATOLIAN HIEROGLYPH A373;Lo;0;L;;;;;N;;;;;
+145A7;ANATOLIAN HIEROGLYPH A374;Lo;0;L;;;;;N;;;;;
+145A8;ANATOLIAN HIEROGLYPH A375;Lo;0;L;;;;;N;;;;;
+145A9;ANATOLIAN HIEROGLYPH A376;Lo;0;L;;;;;N;;;;;
+145AA;ANATOLIAN HIEROGLYPH A377;Lo;0;L;;;;;N;;;;;
+145AB;ANATOLIAN HIEROGLYPH A378;Lo;0;L;;;;;N;;;;;
+145AC;ANATOLIAN HIEROGLYPH A379;Lo;0;L;;;;;N;;;;;
+145AD;ANATOLIAN HIEROGLYPH A380;Lo;0;L;;;;;N;;;;;
+145AE;ANATOLIAN HIEROGLYPH A381;Lo;0;L;;;;;N;;;;;
+145AF;ANATOLIAN HIEROGLYPH A381A;Lo;0;L;;;;;N;;;;;
+145B0;ANATOLIAN HIEROGLYPH A382;Lo;0;L;;;;;N;;;;;
+145B1;ANATOLIAN HIEROGLYPH A383 RA OR RI;Lo;0;L;;;;;N;;;;;
+145B2;ANATOLIAN HIEROGLYPH A383A;Lo;0;L;;;;;N;;;;;
+145B3;ANATOLIAN HIEROGLYPH A384;Lo;0;L;;;;;N;;;;;
+145B4;ANATOLIAN HIEROGLYPH A385;Lo;0;L;;;;;N;;;;;
+145B5;ANATOLIAN HIEROGLYPH A386;Lo;0;L;;;;;N;;;;;
+145B6;ANATOLIAN HIEROGLYPH A386A;Lo;0;L;;;;;N;;;;;
+145B7;ANATOLIAN HIEROGLYPH A387;Lo;0;L;;;;;N;;;;;
+145B8;ANATOLIAN HIEROGLYPH A388;Lo;0;L;;;;;N;;;;;
+145B9;ANATOLIAN HIEROGLYPH A389;Lo;0;L;;;;;N;;;;;
+145BA;ANATOLIAN HIEROGLYPH A390;Lo;0;L;;;;;N;;;;;
+145BB;ANATOLIAN HIEROGLYPH A391;Lo;0;L;;;;;N;;;;;
+145BC;ANATOLIAN HIEROGLYPH A392;Lo;0;L;;;;;N;;;;;
+145BD;ANATOLIAN HIEROGLYPH A393 EIGHT;Lo;0;L;;;;;N;;;;;
+145BE;ANATOLIAN HIEROGLYPH A394;Lo;0;L;;;;;N;;;;;
+145BF;ANATOLIAN HIEROGLYPH A395;Lo;0;L;;;;;N;;;;;
+145C0;ANATOLIAN HIEROGLYPH A396;Lo;0;L;;;;;N;;;;;
+145C1;ANATOLIAN HIEROGLYPH A397;Lo;0;L;;;;;N;;;;;
+145C2;ANATOLIAN HIEROGLYPH A398;Lo;0;L;;;;;N;;;;;
+145C3;ANATOLIAN HIEROGLYPH A399;Lo;0;L;;;;;N;;;;;
+145C4;ANATOLIAN HIEROGLYPH A400;Lo;0;L;;;;;N;;;;;
+145C5;ANATOLIAN HIEROGLYPH A401;Lo;0;L;;;;;N;;;;;
+145C6;ANATOLIAN HIEROGLYPH A402;Lo;0;L;;;;;N;;;;;
+145C7;ANATOLIAN HIEROGLYPH A403;Lo;0;L;;;;;N;;;;;
+145C8;ANATOLIAN HIEROGLYPH A404;Lo;0;L;;;;;N;;;;;
+145C9;ANATOLIAN HIEROGLYPH A405;Lo;0;L;;;;;N;;;;;
+145CA;ANATOLIAN HIEROGLYPH A406;Lo;0;L;;;;;N;;;;;
+145CB;ANATOLIAN HIEROGLYPH A407;Lo;0;L;;;;;N;;;;;
+145CC;ANATOLIAN HIEROGLYPH A408;Lo;0;L;;;;;N;;;;;
+145CD;ANATOLIAN HIEROGLYPH A409;Lo;0;L;;;;;N;;;;;
+145CE;ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK;Lo;0;L;;;;;N;;;;;
+145CF;ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK;Lo;0;L;;;;;N;;;;;
+145D0;ANATOLIAN HIEROGLYPH A411;Lo;0;L;;;;;N;;;;;
+145D1;ANATOLIAN HIEROGLYPH A412;Lo;0;L;;;;;N;;;;;
+145D2;ANATOLIAN HIEROGLYPH A413;Lo;0;L;;;;;N;;;;;
+145D3;ANATOLIAN HIEROGLYPH A414;Lo;0;L;;;;;N;;;;;
+145D4;ANATOLIAN HIEROGLYPH A415;Lo;0;L;;;;;N;;;;;
+145D5;ANATOLIAN HIEROGLYPH A416;Lo;0;L;;;;;N;;;;;
+145D6;ANATOLIAN HIEROGLYPH A417;Lo;0;L;;;;;N;;;;;
+145D7;ANATOLIAN HIEROGLYPH A418;Lo;0;L;;;;;N;;;;;
+145D8;ANATOLIAN HIEROGLYPH A419;Lo;0;L;;;;;N;;;;;
+145D9;ANATOLIAN HIEROGLYPH A420;Lo;0;L;;;;;N;;;;;
+145DA;ANATOLIAN HIEROGLYPH A421;Lo;0;L;;;;;N;;;;;
+145DB;ANATOLIAN HIEROGLYPH A422;Lo;0;L;;;;;N;;;;;
+145DC;ANATOLIAN HIEROGLYPH A423;Lo;0;L;;;;;N;;;;;
+145DD;ANATOLIAN HIEROGLYPH A424;Lo;0;L;;;;;N;;;;;
+145DE;ANATOLIAN HIEROGLYPH A425;Lo;0;L;;;;;N;;;;;
+145DF;ANATOLIAN HIEROGLYPH A426;Lo;0;L;;;;;N;;;;;
+145E0;ANATOLIAN HIEROGLYPH A427;Lo;0;L;;;;;N;;;;;
+145E1;ANATOLIAN HIEROGLYPH A428;Lo;0;L;;;;;N;;;;;
+145E2;ANATOLIAN HIEROGLYPH A429;Lo;0;L;;;;;N;;;;;
+145E3;ANATOLIAN HIEROGLYPH A430;Lo;0;L;;;;;N;;;;;
+145E4;ANATOLIAN HIEROGLYPH A431;Lo;0;L;;;;;N;;;;;
+145E5;ANATOLIAN HIEROGLYPH A432;Lo;0;L;;;;;N;;;;;
+145E6;ANATOLIAN HIEROGLYPH A433;Lo;0;L;;;;;N;;;;;
+145E7;ANATOLIAN HIEROGLYPH A434;Lo;0;L;;;;;N;;;;;
+145E8;ANATOLIAN HIEROGLYPH A435;Lo;0;L;;;;;N;;;;;
+145E9;ANATOLIAN HIEROGLYPH A436;Lo;0;L;;;;;N;;;;;
+145EA;ANATOLIAN HIEROGLYPH A437;Lo;0;L;;;;;N;;;;;
+145EB;ANATOLIAN HIEROGLYPH A438;Lo;0;L;;;;;N;;;;;
+145EC;ANATOLIAN HIEROGLYPH A439;Lo;0;L;;;;;N;;;;;
+145ED;ANATOLIAN HIEROGLYPH A440;Lo;0;L;;;;;N;;;;;
+145EE;ANATOLIAN HIEROGLYPH A441;Lo;0;L;;;;;N;;;;;
+145EF;ANATOLIAN HIEROGLYPH A442;Lo;0;L;;;;;N;;;;;
+145F0;ANATOLIAN HIEROGLYPH A443;Lo;0;L;;;;;N;;;;;
+145F1;ANATOLIAN HIEROGLYPH A444;Lo;0;L;;;;;N;;;;;
+145F2;ANATOLIAN HIEROGLYPH A445;Lo;0;L;;;;;N;;;;;
+145F3;ANATOLIAN HIEROGLYPH A446;Lo;0;L;;;;;N;;;;;
+145F4;ANATOLIAN HIEROGLYPH A447;Lo;0;L;;;;;N;;;;;
+145F5;ANATOLIAN HIEROGLYPH A448;Lo;0;L;;;;;N;;;;;
+145F6;ANATOLIAN HIEROGLYPH A449;Lo;0;L;;;;;N;;;;;
+145F7;ANATOLIAN HIEROGLYPH A450;Lo;0;L;;;;;N;;;;;
+145F8;ANATOLIAN HIEROGLYPH A450A;Lo;0;L;;;;;N;;;;;
+145F9;ANATOLIAN HIEROGLYPH A451;Lo;0;L;;;;;N;;;;;
+145FA;ANATOLIAN HIEROGLYPH A452;Lo;0;L;;;;;N;;;;;
+145FB;ANATOLIAN HIEROGLYPH A453;Lo;0;L;;;;;N;;;;;
+145FC;ANATOLIAN HIEROGLYPH A454;Lo;0;L;;;;;N;;;;;
+145FD;ANATOLIAN HIEROGLYPH A455;Lo;0;L;;;;;N;;;;;
+145FE;ANATOLIAN HIEROGLYPH A456;Lo;0;L;;;;;N;;;;;
+145FF;ANATOLIAN HIEROGLYPH A457;Lo;0;L;;;;;N;;;;;
+14600;ANATOLIAN HIEROGLYPH A457A;Lo;0;L;;;;;N;;;;;
+14601;ANATOLIAN HIEROGLYPH A458;Lo;0;L;;;;;N;;;;;
+14602;ANATOLIAN HIEROGLYPH A459;Lo;0;L;;;;;N;;;;;
+14603;ANATOLIAN HIEROGLYPH A460;Lo;0;L;;;;;N;;;;;
+14604;ANATOLIAN HIEROGLYPH A461;Lo;0;L;;;;;N;;;;;
+14605;ANATOLIAN HIEROGLYPH A462;Lo;0;L;;;;;N;;;;;
+14606;ANATOLIAN HIEROGLYPH A463;Lo;0;L;;;;;N;;;;;
+14607;ANATOLIAN HIEROGLYPH A464;Lo;0;L;;;;;N;;;;;
+14608;ANATOLIAN HIEROGLYPH A465;Lo;0;L;;;;;N;;;;;
+14609;ANATOLIAN HIEROGLYPH A466;Lo;0;L;;;;;N;;;;;
+1460A;ANATOLIAN HIEROGLYPH A467;Lo;0;L;;;;;N;;;;;
+1460B;ANATOLIAN HIEROGLYPH A468;Lo;0;L;;;;;N;;;;;
+1460C;ANATOLIAN HIEROGLYPH A469;Lo;0;L;;;;;N;;;;;
+1460D;ANATOLIAN HIEROGLYPH A470;Lo;0;L;;;;;N;;;;;
+1460E;ANATOLIAN HIEROGLYPH A471;Lo;0;L;;;;;N;;;;;
+1460F;ANATOLIAN HIEROGLYPH A472;Lo;0;L;;;;;N;;;;;
+14610;ANATOLIAN HIEROGLYPH A473;Lo;0;L;;;;;N;;;;;
+14611;ANATOLIAN HIEROGLYPH A474;Lo;0;L;;;;;N;;;;;
+14612;ANATOLIAN HIEROGLYPH A475;Lo;0;L;;;;;N;;;;;
+14613;ANATOLIAN HIEROGLYPH A476;Lo;0;L;;;;;N;;;;;
+14614;ANATOLIAN HIEROGLYPH A477;Lo;0;L;;;;;N;;;;;
+14615;ANATOLIAN HIEROGLYPH A478;Lo;0;L;;;;;N;;;;;
+14616;ANATOLIAN HIEROGLYPH A479;Lo;0;L;;;;;N;;;;;
+14617;ANATOLIAN HIEROGLYPH A480;Lo;0;L;;;;;N;;;;;
+14618;ANATOLIAN HIEROGLYPH A481;Lo;0;L;;;;;N;;;;;
+14619;ANATOLIAN HIEROGLYPH A482;Lo;0;L;;;;;N;;;;;
+1461A;ANATOLIAN HIEROGLYPH A483;Lo;0;L;;;;;N;;;;;
+1461B;ANATOLIAN HIEROGLYPH A484;Lo;0;L;;;;;N;;;;;
+1461C;ANATOLIAN HIEROGLYPH A485;Lo;0;L;;;;;N;;;;;
+1461D;ANATOLIAN HIEROGLYPH A486;Lo;0;L;;;;;N;;;;;
+1461E;ANATOLIAN HIEROGLYPH A487;Lo;0;L;;;;;N;;;;;
+1461F;ANATOLIAN HIEROGLYPH A488;Lo;0;L;;;;;N;;;;;
+14620;ANATOLIAN HIEROGLYPH A489;Lo;0;L;;;;;N;;;;;
+14621;ANATOLIAN HIEROGLYPH A490;Lo;0;L;;;;;N;;;;;
+14622;ANATOLIAN HIEROGLYPH A491;Lo;0;L;;;;;N;;;;;
+14623;ANATOLIAN HIEROGLYPH A492;Lo;0;L;;;;;N;;;;;
+14624;ANATOLIAN HIEROGLYPH A493;Lo;0;L;;;;;N;;;;;
+14625;ANATOLIAN HIEROGLYPH A494;Lo;0;L;;;;;N;;;;;
+14626;ANATOLIAN HIEROGLYPH A495;Lo;0;L;;;;;N;;;;;
+14627;ANATOLIAN HIEROGLYPH A496;Lo;0;L;;;;;N;;;;;
+14628;ANATOLIAN HIEROGLYPH A497;Lo;0;L;;;;;N;;;;;
+14629;ANATOLIAN HIEROGLYPH A501;Lo;0;L;;;;;N;;;;;
+1462A;ANATOLIAN HIEROGLYPH A502;Lo;0;L;;;;;N;;;;;
+1462B;ANATOLIAN HIEROGLYPH A503;Lo;0;L;;;;;N;;;;;
+1462C;ANATOLIAN HIEROGLYPH A504;Lo;0;L;;;;;N;;;;;
+1462D;ANATOLIAN HIEROGLYPH A505;Lo;0;L;;;;;N;;;;;
+1462E;ANATOLIAN HIEROGLYPH A506;Lo;0;L;;;;;N;;;;;
+1462F;ANATOLIAN HIEROGLYPH A507;Lo;0;L;;;;;N;;;;;
+14630;ANATOLIAN HIEROGLYPH A508;Lo;0;L;;;;;N;;;;;
+14631;ANATOLIAN HIEROGLYPH A509;Lo;0;L;;;;;N;;;;;
+14632;ANATOLIAN HIEROGLYPH A510;Lo;0;L;;;;;N;;;;;
+14633;ANATOLIAN HIEROGLYPH A511;Lo;0;L;;;;;N;;;;;
+14634;ANATOLIAN HIEROGLYPH A512;Lo;0;L;;;;;N;;;;;
+14635;ANATOLIAN HIEROGLYPH A513;Lo;0;L;;;;;N;;;;;
+14636;ANATOLIAN HIEROGLYPH A514;Lo;0;L;;;;;N;;;;;
+14637;ANATOLIAN HIEROGLYPH A515;Lo;0;L;;;;;N;;;;;
+14638;ANATOLIAN HIEROGLYPH A516;Lo;0;L;;;;;N;;;;;
+14639;ANATOLIAN HIEROGLYPH A517;Lo;0;L;;;;;N;;;;;
+1463A;ANATOLIAN HIEROGLYPH A518;Lo;0;L;;;;;N;;;;;
+1463B;ANATOLIAN HIEROGLYPH A519;Lo;0;L;;;;;N;;;;;
+1463C;ANATOLIAN HIEROGLYPH A520;Lo;0;L;;;;;N;;;;;
+1463D;ANATOLIAN HIEROGLYPH A521;Lo;0;L;;;;;N;;;;;
+1463E;ANATOLIAN HIEROGLYPH A522;Lo;0;L;;;;;N;;;;;
+1463F;ANATOLIAN HIEROGLYPH A523;Lo;0;L;;;;;N;;;;;
+14640;ANATOLIAN HIEROGLYPH A524;Lo;0;L;;;;;N;;;;;
+14641;ANATOLIAN HIEROGLYPH A525;Lo;0;L;;;;;N;;;;;
+14642;ANATOLIAN HIEROGLYPH A526;Lo;0;L;;;;;N;;;;;
+14643;ANATOLIAN HIEROGLYPH A527;Lo;0;L;;;;;N;;;;;
+14644;ANATOLIAN HIEROGLYPH A528;Lo;0;L;;;;;N;;;;;
+14645;ANATOLIAN HIEROGLYPH A529;Lo;0;L;;;;;N;;;;;
+14646;ANATOLIAN HIEROGLYPH A530;Lo;0;L;;;;;N;;;;;
16800;BAMUM LETTER PHASE-A NGKUE MFON;Lo;0;L;;;;;N;;;;;
16801;BAMUM LETTER PHASE-A GBIEE FON;Lo;0;L;;;;;N;;;;;
16802;BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE;Lo;0;L;;;;;N;;;;;
@@ -23080,6 +24300,17 @@
1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;;
1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;;
1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;;
+1D1DE;MUSICAL SYMBOL KIEVAN C CLEF;So;0;L;;;;;N;;;;;
+1D1DF;MUSICAL SYMBOL KIEVAN END OF PIECE;So;0;L;;;;;N;;;;;
+1D1E0;MUSICAL SYMBOL KIEVAN FINAL NOTE;So;0;L;;;;;N;;;;;
+1D1E1;MUSICAL SYMBOL KIEVAN RECITATIVE MARK;So;0;L;;;;;N;;;;;
+1D1E2;MUSICAL SYMBOL KIEVAN WHOLE NOTE;So;0;L;;;;;N;;;;;
+1D1E3;MUSICAL SYMBOL KIEVAN HALF NOTE;So;0;L;;;;;N;;;;;
+1D1E4;MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN;So;0;L;;;;;N;;;;;
+1D1E5;MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP;So;0;L;;;;;N;;;;;
+1D1E6;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN;So;0;L;;;;;N;;;;;
+1D1E7;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP;So;0;L;;;;;N;;;;;
+1D1E8;MUSICAL SYMBOL KIEVAN FLAT SIGN;So;0;L;;;;;N;;;;;
1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;;
@@ -24251,6 +25482,678 @@
1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D800;SIGNWRITING HAND-FIST INDEX;So;0;L;;;;;N;;;;;
+1D801;SIGNWRITING HAND-CIRCLE INDEX;So;0;L;;;;;N;;;;;
+1D802;SIGNWRITING HAND-CUP INDEX;So;0;L;;;;;N;;;;;
+1D803;SIGNWRITING HAND-OVAL INDEX;So;0;L;;;;;N;;;;;
+1D804;SIGNWRITING HAND-HINGE INDEX;So;0;L;;;;;N;;;;;
+1D805;SIGNWRITING HAND-ANGLE INDEX;So;0;L;;;;;N;;;;;
+1D806;SIGNWRITING HAND-FIST INDEX BENT;So;0;L;;;;;N;;;;;
+1D807;SIGNWRITING HAND-CIRCLE INDEX BENT;So;0;L;;;;;N;;;;;
+1D808;SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT;So;0;L;;;;;N;;;;;
+1D809;SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE;So;0;L;;;;;N;;;;;
+1D80A;SIGNWRITING HAND-FIST INDEX CUPPED;So;0;L;;;;;N;;;;;
+1D80B;SIGNWRITING HAND-FIST INDEX HINGED;So;0;L;;;;;N;;;;;
+1D80C;SIGNWRITING HAND-FIST INDEX HINGED LOW;So;0;L;;;;;N;;;;;
+1D80D;SIGNWRITING HAND-CIRCLE INDEX HINGE;So;0;L;;;;;N;;;;;
+1D80E;SIGNWRITING HAND-FIST INDEX MIDDLE;So;0;L;;;;;N;;;;;
+1D80F;SIGNWRITING HAND-CIRCLE INDEX MIDDLE;So;0;L;;;;;N;;;;;
+1D810;SIGNWRITING HAND-FIST INDEX MIDDLE BENT;So;0;L;;;;;N;;;;;
+1D811;SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES;So;0;L;;;;;N;;;;;
+1D812;SIGNWRITING HAND-FIST INDEX MIDDLE HINGED;So;0;L;;;;;N;;;;;
+1D813;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED;So;0;L;;;;;N;;;;;
+1D814;SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP;So;0;L;;;;;N;;;;;
+1D815;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED;So;0;L;;;;;N;;;;;
+1D816;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT;So;0;L;;;;;N;;;;;
+1D817;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT;So;0;L;;;;;N;;;;;
+1D818;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED;So;0;L;;;;;N;;;;;
+1D819;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED;So;0;L;;;;;N;;;;;
+1D81A;SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED;So;0;L;;;;;N;;;;;
+1D81B;SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED;So;0;L;;;;;N;;;;;
+1D81C;SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX;So;0;L;;;;;N;;;;;
+1D81D;SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE;So;0;L;;;;;N;;;;;
+1D81E;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB;So;0;L;;;;;N;;;;;
+1D81F;SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB;So;0;L;;;;;N;;;;;
+1D820;SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT;So;0;L;;;;;N;;;;;
+1D821;SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT;So;0;L;;;;;N;;;;;
+1D822;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT;So;0;L;;;;;N;;;;;
+1D823;SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE;So;0;L;;;;;N;;;;;
+1D824;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE;So;0;L;;;;;N;;;;;
+1D825;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED;So;0;L;;;;;N;;;;;
+1D826;SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE;So;0;L;;;;;N;;;;;
+1D827;SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D828;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED;So;0;L;;;;;N;;;;;
+1D829;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED;So;0;L;;;;;N;;;;;
+1D82A;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED;So;0;L;;;;;N;;;;;
+1D82B;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED;So;0;L;;;;;N;;;;;
+1D82C;SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT;So;0;L;;;;;N;;;;;
+1D82D;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE;So;0;L;;;;;N;;;;;
+1D82E;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED;So;0;L;;;;;N;;;;;
+1D82F;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT;So;0;L;;;;;N;;;;;
+1D830;SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP;So;0;L;;;;;N;;;;;
+1D831;SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP;So;0;L;;;;;N;;;;;
+1D832;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE;So;0;L;;;;;N;;;;;
+1D833;SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE;So;0;L;;;;;N;;;;;
+1D834;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D835;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D836;SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP;So;0;L;;;;;N;;;;;
+1D837;SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP;So;0;L;;;;;N;;;;;
+1D838;SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP;So;0;L;;;;;N;;;;;
+1D839;SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED;So;0;L;;;;;N;;;;;
+1D83A;SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP;So;0;L;;;;;N;;;;;
+1D83B;SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP;So;0;L;;;;;N;;;;;
+1D83C;SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP;So;0;L;;;;;N;;;;;
+1D83D;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED;So;0;L;;;;;N;;;;;
+1D83E;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT;So;0;L;;;;;N;;;;;
+1D83F;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED;So;0;L;;;;;N;;;;;
+1D840;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP;So;0;L;;;;;N;;;;;
+1D841;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED;So;0;L;;;;;N;;;;;
+1D842;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP;So;0;L;;;;;N;;;;;
+1D843;SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED;So;0;L;;;;;N;;;;;
+1D844;SIGNWRITING HAND-FLAT FOUR FINGERS;So;0;L;;;;;N;;;;;
+1D845;SIGNWRITING HAND-FLAT FOUR FINGERS BENT;So;0;L;;;;;N;;;;;
+1D846;SIGNWRITING HAND-FLAT FOUR FINGERS HINGED;So;0;L;;;;;N;;;;;
+1D847;SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;;
+1D848;SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT;So;0;L;;;;;N;;;;;
+1D849;SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;;
+1D84A;SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT;So;0;L;;;;;N;;;;;
+1D84B;SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;;
+1D84C;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;;
+1D84D;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;;
+1D84E;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT;So;0;L;;;;;N;;;;;
+1D84F;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT;So;0;L;;;;;N;;;;;
+1D850;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT;So;0;L;;;;;N;;;;;
+1D851;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT;So;0;L;;;;;N;;;;;
+1D852;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D853;SIGNWRITING HAND-CUP FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;;
+1D854;SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN;So;0;L;;;;;N;;;;;
+1D855;SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN;So;0;L;;;;;N;;;;;
+1D856;SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;;
+1D857;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED;So;0;L;;;;;N;;;;;
+1D858;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE;So;0;L;;;;;N;;;;;
+1D859;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB;So;0;L;;;;;N;;;;;
+1D85A;SIGNWRITING HAND-FLAT;So;0;L;;;;;N;;;;;
+1D85B;SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS;So;0;L;;;;;N;;;;;
+1D85C;SIGNWRITING HAND-FLAT HEEL;So;0;L;;;;;N;;;;;
+1D85D;SIGNWRITING HAND-FLAT THUMB SIDE;So;0;L;;;;;N;;;;;
+1D85E;SIGNWRITING HAND-FLAT HEEL THUMB SIDE;So;0;L;;;;;N;;;;;
+1D85F;SIGNWRITING HAND-FLAT THUMB BENT;So;0;L;;;;;N;;;;;
+1D860;SIGNWRITING HAND-FLAT THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D861;SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE;So;0;L;;;;;N;;;;;
+1D862;SIGNWRITING HAND-FLAT SPLIT CENTRE;So;0;L;;;;;N;;;;;
+1D863;SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE;So;0;L;;;;;N;;;;;
+1D864;SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT;So;0;L;;;;;N;;;;;
+1D865;SIGNWRITING HAND-FLAT SPLIT LITTLE;So;0;L;;;;;N;;;;;
+1D866;SIGNWRITING HAND-CLAW;So;0;L;;;;;N;;;;;
+1D867;SIGNWRITING HAND-CLAW THUMB SIDE;So;0;L;;;;;N;;;;;
+1D868;SIGNWRITING HAND-CLAW NO THUMB;So;0;L;;;;;N;;;;;
+1D869;SIGNWRITING HAND-CLAW THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D86A;SIGNWRITING HAND-HOOK CURLICUE;So;0;L;;;;;N;;;;;
+1D86B;SIGNWRITING HAND-HOOK;So;0;L;;;;;N;;;;;
+1D86C;SIGNWRITING HAND-CUP OPEN;So;0;L;;;;;N;;;;;
+1D86D;SIGNWRITING HAND-CUP;So;0;L;;;;;N;;;;;
+1D86E;SIGNWRITING HAND-CUP OPEN THUMB SIDE;So;0;L;;;;;N;;;;;
+1D86F;SIGNWRITING HAND-CUP THUMB SIDE;So;0;L;;;;;N;;;;;
+1D870;SIGNWRITING HAND-CUP OPEN NO THUMB;So;0;L;;;;;N;;;;;
+1D871;SIGNWRITING HAND-CUP NO THUMB;So;0;L;;;;;N;;;;;
+1D872;SIGNWRITING HAND-CUP OPEN THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D873;SIGNWRITING HAND-CUP THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D874;SIGNWRITING HAND-CURLICUE OPEN;So;0;L;;;;;N;;;;;
+1D875;SIGNWRITING HAND-CURLICUE;So;0;L;;;;;N;;;;;
+1D876;SIGNWRITING HAND-CIRCLE;So;0;L;;;;;N;;;;;
+1D877;SIGNWRITING HAND-OVAL;So;0;L;;;;;N;;;;;
+1D878;SIGNWRITING HAND-OVAL THUMB SIDE;So;0;L;;;;;N;;;;;
+1D879;SIGNWRITING HAND-OVAL NO THUMB;So;0;L;;;;;N;;;;;
+1D87A;SIGNWRITING HAND-OVAL THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D87B;SIGNWRITING HAND-HINGE OPEN;So;0;L;;;;;N;;;;;
+1D87C;SIGNWRITING HAND-HINGE OPEN THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D87D;SIGNWRITING HAND-HINGE;So;0;L;;;;;N;;;;;
+1D87E;SIGNWRITING HAND-HINGE SMALL;So;0;L;;;;;N;;;;;
+1D87F;SIGNWRITING HAND-HINGE OPEN THUMB SIDE;So;0;L;;;;;N;;;;;
+1D880;SIGNWRITING HAND-HINGE THUMB SIDE;So;0;L;;;;;N;;;;;
+1D881;SIGNWRITING HAND-HINGE OPEN NO THUMB;So;0;L;;;;;N;;;;;
+1D882;SIGNWRITING HAND-HINGE NO THUMB;So;0;L;;;;;N;;;;;
+1D883;SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX;So;0;L;;;;;N;;;;;
+1D884;SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING;So;0;L;;;;;N;;;;;
+1D885;SIGNWRITING HAND-ANGLE;So;0;L;;;;;N;;;;;
+1D886;SIGNWRITING HAND-FIST INDEX MIDDLE RING;So;0;L;;;;;N;;;;;
+1D887;SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING;So;0;L;;;;;N;;;;;
+1D888;SIGNWRITING HAND-HINGE INDEX MIDDLE RING;So;0;L;;;;;N;;;;;
+1D889;SIGNWRITING HAND-ANGLE INDEX MIDDLE RING;So;0;L;;;;;N;;;;;
+1D88A;SIGNWRITING HAND-HINGE LITTLE;So;0;L;;;;;N;;;;;
+1D88B;SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT;So;0;L;;;;;N;;;;;
+1D88C;SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED;So;0;L;;;;;N;;;;;
+1D88D;SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED;So;0;L;;;;;N;;;;;
+1D88E;SIGNWRITING HAND-FIST LITTLE DOWN;So;0;L;;;;;N;;;;;
+1D88F;SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT;So;0;L;;;;;N;;;;;
+1D890;SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED;So;0;L;;;;;N;;;;;
+1D891;SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED;So;0;L;;;;;N;;;;;
+1D892;SIGNWRITING HAND-FIST LITTLE UP;So;0;L;;;;;N;;;;;
+1D893;SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP;So;0;L;;;;;N;;;;;
+1D894;SIGNWRITING HAND-CIRCLE LITTLE UP;So;0;L;;;;;N;;;;;
+1D895;SIGNWRITING HAND-OVAL LITTLE UP;So;0;L;;;;;N;;;;;
+1D896;SIGNWRITING HAND-ANGLE LITTLE UP;So;0;L;;;;;N;;;;;
+1D897;SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE;So;0;L;;;;;N;;;;;
+1D898;SIGNWRITING HAND-FIST LITTLE BENT;So;0;L;;;;;N;;;;;
+1D899;SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB;So;0;L;;;;;N;;;;;
+1D89A;SIGNWRITING HAND-FIST LITTLE THUMB;So;0;L;;;;;N;;;;;
+1D89B;SIGNWRITING HAND-HINGE LITTLE THUMB;So;0;L;;;;;N;;;;;
+1D89C;SIGNWRITING HAND-FIST LITTLE INDEX THUMB;So;0;L;;;;;N;;;;;
+1D89D;SIGNWRITING HAND-HINGE LITTLE INDEX THUMB;So;0;L;;;;;N;;;;;
+1D89E;SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT;So;0;L;;;;;N;;;;;
+1D89F;SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB;So;0;L;;;;;N;;;;;
+1D8A0;SIGNWRITING HAND-FIST LITTLE INDEX;So;0;L;;;;;N;;;;;
+1D8A1;SIGNWRITING HAND-CIRCLE LITTLE INDEX;So;0;L;;;;;N;;;;;
+1D8A2;SIGNWRITING HAND-HINGE LITTLE INDEX;So;0;L;;;;;N;;;;;
+1D8A3;SIGNWRITING HAND-ANGLE LITTLE INDEX;So;0;L;;;;;N;;;;;
+1D8A4;SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;;
+1D8A5;SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;;
+1D8A6;SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;;
+1D8A7;SIGNWRITING HAND-HINGE RING;So;0;L;;;;;N;;;;;
+1D8A8;SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;;
+1D8A9;SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE;So;0;L;;;;;N;;;;;
+1D8AA;SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE;So;0;L;;;;;N;;;;;
+1D8AB;SIGNWRITING HAND-FIST RING DOWN;So;0;L;;;;;N;;;;;
+1D8AC;SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE;So;0;L;;;;;N;;;;;
+1D8AD;SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS;So;0;L;;;;;N;;;;;
+1D8AE;SIGNWRITING HAND-FIST RING UP;So;0;L;;;;;N;;;;;
+1D8AF;SIGNWRITING HAND-FIST RING RAISED KNUCKLE;So;0;L;;;;;N;;;;;
+1D8B0;SIGNWRITING HAND-FIST RING LITTLE;So;0;L;;;;;N;;;;;
+1D8B1;SIGNWRITING HAND-CIRCLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8B2;SIGNWRITING HAND-OVAL RING LITTLE;So;0;L;;;;;N;;;;;
+1D8B3;SIGNWRITING HAND-ANGLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8B4;SIGNWRITING HAND-FIST RING MIDDLE;So;0;L;;;;;N;;;;;
+1D8B5;SIGNWRITING HAND-FIST RING MIDDLE CONJOINED;So;0;L;;;;;N;;;;;
+1D8B6;SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES;So;0;L;;;;;N;;;;;
+1D8B7;SIGNWRITING HAND-FIST RING INDEX;So;0;L;;;;;N;;;;;
+1D8B8;SIGNWRITING HAND-FIST RING THUMB;So;0;L;;;;;N;;;;;
+1D8B9;SIGNWRITING HAND-HOOK RING THUMB;So;0;L;;;;;N;;;;;
+1D8BA;SIGNWRITING HAND-FIST INDEX RING LITTLE;So;0;L;;;;;N;;;;;
+1D8BB;SIGNWRITING HAND-CIRCLE INDEX RING LITTLE;So;0;L;;;;;N;;;;;
+1D8BC;SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON;So;0;L;;;;;N;;;;;
+1D8BD;SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT;So;0;L;;;;;N;;;;;
+1D8BE;SIGNWRITING HAND-HOOK INDEX RING LITTLE IN;So;0;L;;;;;N;;;;;
+1D8BF;SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER;So;0;L;;;;;N;;;;;
+1D8C0;SIGNWRITING HAND-CUP INDEX RING LITTLE;So;0;L;;;;;N;;;;;
+1D8C1;SIGNWRITING HAND-HINGE INDEX RING LITTLE;So;0;L;;;;;N;;;;;
+1D8C2;SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT;So;0;L;;;;;N;;;;;
+1D8C3;SIGNWRITING HAND-ANGLE INDEX RING LITTLE;So;0;L;;;;;N;;;;;
+1D8C4;SIGNWRITING HAND-FIST MIDDLE DOWN;So;0;L;;;;;N;;;;;
+1D8C5;SIGNWRITING HAND-HINGE MIDDLE;So;0;L;;;;;N;;;;;
+1D8C6;SIGNWRITING HAND-FIST MIDDLE UP;So;0;L;;;;;N;;;;;
+1D8C7;SIGNWRITING HAND-CIRCLE MIDDLE UP;So;0;L;;;;;N;;;;;
+1D8C8;SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE;So;0;L;;;;;N;;;;;
+1D8C9;SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE;So;0;L;;;;;N;;;;;
+1D8CA;SIGNWRITING HAND-HOOK MIDDLE THUMB;So;0;L;;;;;N;;;;;
+1D8CB;SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE;So;0;L;;;;;N;;;;;
+1D8CC;SIGNWRITING HAND-FIST MIDDLE LITTLE;So;0;L;;;;;N;;;;;
+1D8CD;SIGNWRITING HAND-FIST MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8CE;SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8CF;SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON;So;0;L;;;;;N;;;;;
+1D8D0;SIGNWRITING HAND-CUP MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8D1;SIGNWRITING HAND-HINGE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8D2;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT;So;0;L;;;;;N;;;;;
+1D8D3;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN;So;0;L;;;;;N;;;;;
+1D8D4;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8D5;SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT;So;0;L;;;;;N;;;;;
+1D8D6;SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED;So;0;L;;;;;N;;;;;
+1D8D7;SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE;So;0;L;;;;;N;;;;;
+1D8D8;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT;So;0;L;;;;;N;;;;;
+1D8D9;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN;So;0;L;;;;;N;;;;;
+1D8DA;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED;So;0;L;;;;;N;;;;;
+1D8DB;SIGNWRITING HAND-HINGE INDEX HINGED;So;0;L;;;;;N;;;;;
+1D8DC;SIGNWRITING HAND-FIST INDEX THUMB SIDE;So;0;L;;;;;N;;;;;
+1D8DD;SIGNWRITING HAND-HINGE INDEX THUMB SIDE;So;0;L;;;;;N;;;;;
+1D8DE;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL;So;0;L;;;;;N;;;;;
+1D8DF;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED;So;0;L;;;;;N;;;;;
+1D8E0;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT;So;0;L;;;;;N;;;;;
+1D8E1;SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT;So;0;L;;;;;N;;;;;
+1D8E2;SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT;So;0;L;;;;;N;;;;;
+1D8E3;SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE;So;0;L;;;;;N;;;;;
+1D8E4;SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT;So;0;L;;;;;N;;;;;
+1D8E5;SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT;So;0;L;;;;;N;;;;;
+1D8E6;SIGNWRITING HAND-FIST INDEX THUMB HOOK;So;0;L;;;;;N;;;;;
+1D8E7;SIGNWRITING HAND-FIST INDEX THUMB CURLICUE;So;0;L;;;;;N;;;;;
+1D8E8;SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE;So;0;L;;;;;N;;;;;
+1D8E9;SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE;So;0;L;;;;;N;;;;;
+1D8EA;SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER;So;0;L;;;;;N;;;;;
+1D8EB;SIGNWRITING HAND-FIST INDEX THUMB CIRCLE;So;0;L;;;;;N;;;;;
+1D8EC;SIGNWRITING HAND-CUP INDEX THUMB;So;0;L;;;;;N;;;;;
+1D8ED;SIGNWRITING HAND-CUP INDEX THUMB OPEN;So;0;L;;;;;N;;;;;
+1D8EE;SIGNWRITING HAND-HINGE INDEX THUMB OPEN;So;0;L;;;;;N;;;;;
+1D8EF;SIGNWRITING HAND-HINGE INDEX THUMB LARGE;So;0;L;;;;;N;;;;;
+1D8F0;SIGNWRITING HAND-HINGE INDEX THUMB;So;0;L;;;;;N;;;;;
+1D8F1;SIGNWRITING HAND-HINGE INDEX THUMB SMALL;So;0;L;;;;;N;;;;;
+1D8F2;SIGNWRITING HAND-ANGLE INDEX THUMB OUT;So;0;L;;;;;N;;;;;
+1D8F3;SIGNWRITING HAND-ANGLE INDEX THUMB IN;So;0;L;;;;;N;;;;;
+1D8F4;SIGNWRITING HAND-ANGLE INDEX THUMB;So;0;L;;;;;N;;;;;
+1D8F5;SIGNWRITING HAND-FIST THUMB;So;0;L;;;;;N;;;;;
+1D8F6;SIGNWRITING HAND-FIST THUMB HEEL;So;0;L;;;;;N;;;;;
+1D8F7;SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL;So;0;L;;;;;N;;;;;
+1D8F8;SIGNWRITING HAND-FIST THUMB SIDE CONJOINED;So;0;L;;;;;N;;;;;
+1D8F9;SIGNWRITING HAND-FIST THUMB SIDE BENT;So;0;L;;;;;N;;;;;
+1D8FA;SIGNWRITING HAND-FIST THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D8FB;SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE;So;0;L;;;;;N;;;;;
+1D8FC;SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING;So;0;L;;;;;N;;;;;
+1D8FD;SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE;So;0;L;;;;;N;;;;;
+1D8FE;SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS;So;0;L;;;;;N;;;;;
+1D8FF;SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS;So;0;L;;;;;N;;;;;
+1D900;SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS;So;0;L;;;;;N;;;;;
+1D901;SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS;So;0;L;;;;;N;;;;;
+1D902;SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES;So;0;L;;;;;N;;;;;
+1D903;SIGNWRITING HAND-FIST;So;0;L;;;;;N;;;;;
+1D904;SIGNWRITING HAND-FIST HEEL;So;0;L;;;;;N;;;;;
+1D905;SIGNWRITING TOUCH SINGLE;So;0;L;;;;;N;;;;;
+1D906;SIGNWRITING TOUCH MULTIPLE;So;0;L;;;;;N;;;;;
+1D907;SIGNWRITING TOUCH BETWEEN;So;0;L;;;;;N;;;;;
+1D908;SIGNWRITING GRASP SINGLE;So;0;L;;;;;N;;;;;
+1D909;SIGNWRITING GRASP MULTIPLE;So;0;L;;;;;N;;;;;
+1D90A;SIGNWRITING GRASP BETWEEN;So;0;L;;;;;N;;;;;
+1D90B;SIGNWRITING STRIKE SINGLE;So;0;L;;;;;N;;;;;
+1D90C;SIGNWRITING STRIKE MULTIPLE;So;0;L;;;;;N;;;;;
+1D90D;SIGNWRITING STRIKE BETWEEN;So;0;L;;;;;N;;;;;
+1D90E;SIGNWRITING BRUSH SINGLE;So;0;L;;;;;N;;;;;
+1D90F;SIGNWRITING BRUSH MULTIPLE;So;0;L;;;;;N;;;;;
+1D910;SIGNWRITING BRUSH BETWEEN;So;0;L;;;;;N;;;;;
+1D911;SIGNWRITING RUB SINGLE;So;0;L;;;;;N;;;;;
+1D912;SIGNWRITING RUB MULTIPLE;So;0;L;;;;;N;;;;;
+1D913;SIGNWRITING RUB BETWEEN;So;0;L;;;;;N;;;;;
+1D914;SIGNWRITING SURFACE SYMBOLS;So;0;L;;;;;N;;;;;
+1D915;SIGNWRITING SURFACE BETWEEN;So;0;L;;;;;N;;;;;
+1D916;SIGNWRITING SQUEEZE LARGE SINGLE;So;0;L;;;;;N;;;;;
+1D917;SIGNWRITING SQUEEZE SMALL SINGLE;So;0;L;;;;;N;;;;;
+1D918;SIGNWRITING SQUEEZE LARGE MULTIPLE;So;0;L;;;;;N;;;;;
+1D919;SIGNWRITING SQUEEZE SMALL MULTIPLE;So;0;L;;;;;N;;;;;
+1D91A;SIGNWRITING SQUEEZE SEQUENTIAL;So;0;L;;;;;N;;;;;
+1D91B;SIGNWRITING FLICK LARGE SINGLE;So;0;L;;;;;N;;;;;
+1D91C;SIGNWRITING FLICK SMALL SINGLE;So;0;L;;;;;N;;;;;
+1D91D;SIGNWRITING FLICK LARGE MULTIPLE;So;0;L;;;;;N;;;;;
+1D91E;SIGNWRITING FLICK SMALL MULTIPLE;So;0;L;;;;;N;;;;;
+1D91F;SIGNWRITING FLICK SEQUENTIAL;So;0;L;;;;;N;;;;;
+1D920;SIGNWRITING SQUEEZE FLICK ALTERNATING;So;0;L;;;;;N;;;;;
+1D921;SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE;So;0;L;;;;;N;;;;;
+1D922;SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL;So;0;L;;;;;N;;;;;
+1D923;SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL;So;0;L;;;;;N;;;;;
+1D924;SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL;So;0;L;;;;;N;;;;;
+1D925;SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE;So;0;L;;;;;N;;;;;
+1D926;SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL;So;0;L;;;;;N;;;;;
+1D927;SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS;So;0;L;;;;;N;;;;;
+1D928;SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT;So;0;L;;;;;N;;;;;
+1D929;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT;So;0;L;;;;;N;;;;;
+1D92A;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL;So;0;L;;;;;N;;;;;
+1D92B;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM;So;0;L;;;;;N;;;;;
+1D92C;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE;So;0;L;;;;;N;;;;;
+1D92D;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST;So;0;L;;;;;N;;;;;
+1D92E;SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX;So;0;L;;;;;N;;;;;
+1D92F;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT;So;0;L;;;;;N;;;;;
+1D930;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX;So;0;L;;;;;N;;;;;
+1D931;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING;So;0;L;;;;;N;;;;;
+1D932;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;;
+1D933;SIGNWRITING MOVEMENT-WALLPLANE CROSS;So;0;L;;;;;N;;;;;
+1D934;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT;So;0;L;;;;;N;;;;;
+1D935;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX;So;0;L;;;;;N;;;;;
+1D936;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING;So;0;L;;;;;N;;;;;
+1D937;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;;
+1D938;SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL;So;0;L;;;;;N;;;;;
+1D939;SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM;So;0;L;;;;;N;;;;;
+1D93A;SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE;So;0;L;;;;;N;;;;;
+1D93B;SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL;So;0;L;;;;;N;;;;;
+1D93C;SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM;So;0;L;;;;;N;;;;;
+1D93D;SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE;So;0;L;;;;;N;;;;;
+1D93E;SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION;So;0;L;;;;;N;;;;;
+1D93F;SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL;So;0;L;;;;;N;;;;;
+1D940;SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM;So;0;L;;;;;N;;;;;
+1D941;SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE;So;0;L;;;;;N;;;;;
+1D942;SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL;So;0;L;;;;;N;;;;;
+1D943;SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM;So;0;L;;;;;N;;;;;
+1D944;SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE;So;0;L;;;;;N;;;;;
+1D945;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL;So;0;L;;;;;N;;;;;
+1D946;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM;So;0;L;;;;;N;;;;;
+1D947;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE;So;0;L;;;;;N;;;;;
+1D948;SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL;So;0;L;;;;;N;;;;;
+1D949;SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM;So;0;L;;;;;N;;;;;
+1D94A;SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE;So;0;L;;;;;N;;;;;
+1D94B;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;;
+1D94C;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;;
+1D94D;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING;So;0;L;;;;;N;;;;;
+1D94E;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;;
+1D94F;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;;
+1D950;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;;
+1D951;SIGNWRITING TRAVEL-WALLPLANE SHAKING;So;0;L;;;;;N;;;;;
+1D952;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE;So;0;L;;;;;N;;;;;
+1D953;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE;So;0;L;;;;;N;;;;;
+1D954;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE;So;0;L;;;;;N;;;;;
+1D955;SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL;So;0;L;;;;;N;;;;;
+1D956;SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM;So;0;L;;;;;N;;;;;
+1D957;SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE;So;0;L;;;;;N;;;;;
+1D958;SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST;So;0;L;;;;;N;;;;;
+1D959;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL;So;0;L;;;;;N;;;;;
+1D95A;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM;So;0;L;;;;;N;;;;;
+1D95B;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE;So;0;L;;;;;N;;;;;
+1D95C;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST;So;0;L;;;;;N;;;;;
+1D95D;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL;So;0;L;;;;;N;;;;;
+1D95E;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM;So;0;L;;;;;N;;;;;
+1D95F;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE;So;0;L;;;;;N;;;;;
+1D960;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST;So;0;L;;;;;N;;;;;
+1D961;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL;So;0;L;;;;;N;;;;;
+1D962;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM;So;0;L;;;;;N;;;;;
+1D963;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE;So;0;L;;;;;N;;;;;
+1D964;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST;So;0;L;;;;;N;;;;;
+1D965;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL;So;0;L;;;;;N;;;;;
+1D966;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM;So;0;L;;;;;N;;;;;
+1D967;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE;So;0;L;;;;;N;;;;;
+1D968;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST;So;0;L;;;;;N;;;;;
+1D969;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX;So;0;L;;;;;N;;;;;
+1D96A;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT;So;0;L;;;;;N;;;;;
+1D96B;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX;So;0;L;;;;;N;;;;;
+1D96C;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING;So;0;L;;;;;N;;;;;
+1D96D;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;;
+1D96E;SIGNWRITING MOVEMENT-FLOORPLANE CROSS;So;0;L;;;;;N;;;;;
+1D96F;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT;So;0;L;;;;;N;;;;;
+1D970;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX;So;0;L;;;;;N;;;;;
+1D971;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT;So;0;L;;;;;N;;;;;
+1D972;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;;
+1D973;SIGNWRITING MOVEMENT-FLOORPLANE BEND;So;0;L;;;;;N;;;;;
+1D974;SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL;So;0;L;;;;;N;;;;;
+1D975;SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM;So;0;L;;;;;N;;;;;
+1D976;SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE;So;0;L;;;;;N;;;;;
+1D977;SIGNWRITING MOVEMENT-FLOORPLANE CHECK;So;0;L;;;;;N;;;;;
+1D978;SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL;So;0;L;;;;;N;;;;;
+1D979;SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM;So;0;L;;;;;N;;;;;
+1D97A;SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE;So;0;L;;;;;N;;;;;
+1D97B;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL;So;0;L;;;;;N;;;;;
+1D97C;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM;So;0;L;;;;;N;;;;;
+1D97D;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE;So;0;L;;;;;N;;;;;
+1D97E;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL;So;0;L;;;;;N;;;;;
+1D97F;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM;So;0;L;;;;;N;;;;;
+1D980;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE;So;0;L;;;;;N;;;;;
+1D981;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;;
+1D982;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;;
+1D983;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;;
+1D984;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;;
+1D985;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;;
+1D986;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING;So;0;L;;;;;N;;;;;
+1D987;SIGNWRITING TRAVEL-FLOORPLANE SHAKING;So;0;L;;;;;N;;;;;
+1D988;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL;So;0;L;;;;;N;;;;;
+1D989;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM;So;0;L;;;;;N;;;;;
+1D98A;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE;So;0;L;;;;;N;;;;;
+1D98B;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST;So;0;L;;;;;N;;;;;
+1D98C;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL;So;0;L;;;;;N;;;;;
+1D98D;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM;So;0;L;;;;;N;;;;;
+1D98E;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE;So;0;L;;;;;N;;;;;
+1D98F;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST;So;0;L;;;;;N;;;;;
+1D990;SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL;So;0;L;;;;;N;;;;;
+1D991;SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM;So;0;L;;;;;N;;;;;
+1D992;SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL;So;0;L;;;;;N;;;;;
+1D993;SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM;So;0;L;;;;;N;;;;;
+1D994;SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE;So;0;L;;;;;N;;;;;
+1D995;SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL;So;0;L;;;;;N;;;;;
+1D996;SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM;So;0;L;;;;;N;;;;;
+1D997;SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE;So;0;L;;;;;N;;;;;
+1D998;SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D999;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL;So;0;L;;;;;N;;;;;
+1D99A;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM;So;0;L;;;;;N;;;;;
+1D99B;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE;So;0;L;;;;;N;;;;;
+1D99C;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL;So;0;L;;;;;N;;;;;
+1D99D;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM;So;0;L;;;;;N;;;;;
+1D99E;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE;So;0;L;;;;;N;;;;;
+1D99F;SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT;So;0;L;;;;;N;;;;;
+1D9A0;SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL;So;0;L;;;;;N;;;;;
+1D9A1;SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM;So;0;L;;;;;N;;;;;
+1D9A2;SIGNWRITING ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;;
+1D9A3;SIGNWRITING ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;;
+1D9A4;SIGNWRITING ROTATION-WALLPLANE ALTERNATE;So;0;L;;;;;N;;;;;
+1D9A5;SIGNWRITING MOVEMENT-WALLPLANE SHAKING;So;0;L;;;;;N;;;;;
+1D9A6;SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9A7;SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9A8;SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9A9;SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9AA;SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9AB;SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9AC;SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9AD;SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9AE;SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9AF;SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9B0;SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9B1;SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9B2;SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9B3;SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9B4;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL;So;0;L;;;;;N;;;;;
+1D9B5;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM;So;0;L;;;;;N;;;;;
+1D9B6;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE;So;0;L;;;;;N;;;;;
+1D9B7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL;So;0;L;;;;;N;;;;;
+1D9B8;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE;So;0;L;;;;;N;;;;;
+1D9B9;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9BA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE;So;0;L;;;;;N;;;;;
+1D9BB;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE;So;0;L;;;;;N;;;;;
+1D9BC;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE;So;0;L;;;;;N;;;;;
+1D9BD;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE;So;0;L;;;;;N;;;;;
+1D9BE;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE;So;0;L;;;;;N;;;;;
+1D9BF;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9C0;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE;So;0;L;;;;;N;;;;;
+1D9C1;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL;So;0;L;;;;;N;;;;;
+1D9C2;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE;So;0;L;;;;;N;;;;;
+1D9C3;SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING;So;0;L;;;;;N;;;;;
+1D9C4;SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING;So;0;L;;;;;N;;;;;
+1D9C5;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING;So;0;L;;;;;N;;;;;
+1D9C6;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL;So;0;L;;;;;N;;;;;
+1D9C7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE;So;0;L;;;;;N;;;;;
+1D9C8;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9C9;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE;So;0;L;;;;;N;;;;;
+1D9CA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE;So;0;L;;;;;N;;;;;
+1D9CB;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE;So;0;L;;;;;N;;;;;
+1D9CC;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE;So;0;L;;;;;N;;;;;
+1D9CD;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE;So;0;L;;;;;N;;;;;
+1D9CE;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9CF;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE;So;0;L;;;;;N;;;;;
+1D9D0;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL;So;0;L;;;;;N;;;;;
+1D9D1;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE;So;0;L;;;;;N;;;;;
+1D9D2;SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR;So;0;L;;;;;N;;;;;
+1D9D3;SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR;So;0;L;;;;;N;;;;;
+1D9D4;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR;So;0;L;;;;;N;;;;;
+1D9D5;SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL;So;0;L;;;;;N;;;;;
+1D9D6;SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM;So;0;L;;;;;N;;;;;
+1D9D7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE;So;0;L;;;;;N;;;;;
+1D9D8;SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST;So;0;L;;;;;N;;;;;
+1D9D9;SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED;So;0;L;;;;;N;;;;;
+1D9DA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL;So;0;L;;;;;N;;;;;
+1D9DB;SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL;So;0;L;;;;;N;;;;;
+1D9DC;SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE;So;0;L;;;;;N;;;;;
+1D9DD;SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL;So;0;L;;;;;N;;;;;
+1D9DE;SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE;So;0;L;;;;;N;;;;;
+1D9DF;SIGNWRITING ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;;
+1D9E0;SIGNWRITING ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;;
+1D9E1;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;;
+1D9E2;SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL;So;0;L;;;;;N;;;;;
+1D9E3;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE;So;0;L;;;;;N;;;;;
+1D9E4;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE;So;0;L;;;;;N;;;;;
+1D9E5;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9E6;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE;So;0;L;;;;;N;;;;;
+1D9E7;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE;So;0;L;;;;;N;;;;;
+1D9E8;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE;So;0;L;;;;;N;;;;;
+1D9E9;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE;So;0;L;;;;;N;;;;;
+1D9EA;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9EB;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE;So;0;L;;;;;N;;;;;
+1D9EC;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE;So;0;L;;;;;N;;;;;
+1D9ED;SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE;So;0;L;;;;;N;;;;;
+1D9EE;SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE;So;0;L;;;;;N;;;;;
+1D9EF;SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE;So;0;L;;;;;N;;;;;
+1D9F0;SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9F1;SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE;So;0;L;;;;;N;;;;;
+1D9F2;SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE;So;0;L;;;;;N;;;;;
+1D9F3;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE;So;0;L;;;;;N;;;;;
+1D9F4;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9F5;SIGNWRITING DYNAMIC ARROWHEAD SMALL;So;0;L;;;;;N;;;;;
+1D9F6;SIGNWRITING DYNAMIC ARROWHEAD LARGE;So;0;L;;;;;N;;;;;
+1D9F7;SIGNWRITING DYNAMIC FAST;So;0;L;;;;;N;;;;;
+1D9F8;SIGNWRITING DYNAMIC SLOW;So;0;L;;;;;N;;;;;
+1D9F9;SIGNWRITING DYNAMIC TENSE;So;0;L;;;;;N;;;;;
+1D9FA;SIGNWRITING DYNAMIC RELAXED;So;0;L;;;;;N;;;;;
+1D9FB;SIGNWRITING DYNAMIC SIMULTANEOUS;So;0;L;;;;;N;;;;;
+1D9FC;SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING;So;0;L;;;;;N;;;;;
+1D9FD;SIGNWRITING DYNAMIC EVERY OTHER TIME;So;0;L;;;;;N;;;;;
+1D9FE;SIGNWRITING DYNAMIC GRADUAL;So;0;L;;;;;N;;;;;
+1D9FF;SIGNWRITING HEAD;So;0;L;;;;;N;;;;;
+1DA00;SIGNWRITING HEAD RIM;Mn;0;NSM;;;;;N;;;;;
+1DA01;SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;;
+1DA02;SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT;Mn;0;NSM;;;;;N;;;;;
+1DA03;SIGNWRITING HEAD MOVEMENT-FLOORPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;;
+1DA04;SIGNWRITING HEAD MOVEMENT-WALLPLANE CURVE;Mn;0;NSM;;;;;N;;;;;
+1DA05;SIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVE;Mn;0;NSM;;;;;N;;;;;
+1DA06;SIGNWRITING HEAD MOVEMENT CIRCLE;Mn;0;NSM;;;;;N;;;;;
+1DA07;SIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTING;Mn;0;NSM;;;;;N;;;;;
+1DA08;SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN;Mn;0;NSM;;;;;N;;;;;
+1DA09;SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTING;Mn;0;NSM;;;;;N;;;;;
+1DA0A;SIGNWRITING EYEBROWS STRAIGHT UP;Mn;0;NSM;;;;;N;;;;;
+1DA0B;SIGNWRITING EYEBROWS STRAIGHT NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA0C;SIGNWRITING EYEBROWS STRAIGHT DOWN;Mn;0;NSM;;;;;N;;;;;
+1DA0D;SIGNWRITING DREAMY EYEBROWS NEUTRAL DOWN;Mn;0;NSM;;;;;N;;;;;
+1DA0E;SIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA0F;SIGNWRITING DREAMY EYEBROWS UP NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA10;SIGNWRITING DREAMY EYEBROWS NEUTRAL UP;Mn;0;NSM;;;;;N;;;;;
+1DA11;SIGNWRITING FOREHEAD NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA12;SIGNWRITING FOREHEAD CONTACT;Mn;0;NSM;;;;;N;;;;;
+1DA13;SIGNWRITING FOREHEAD WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA14;SIGNWRITING EYES OPEN;Mn;0;NSM;;;;;N;;;;;
+1DA15;SIGNWRITING EYES SQUEEZED;Mn;0;NSM;;;;;N;;;;;
+1DA16;SIGNWRITING EYES CLOSED;Mn;0;NSM;;;;;N;;;;;
+1DA17;SIGNWRITING EYE BLINK SINGLE;Mn;0;NSM;;;;;N;;;;;
+1DA18;SIGNWRITING EYE BLINK MULTIPLE;Mn;0;NSM;;;;;N;;;;;
+1DA19;SIGNWRITING EYES HALF OPEN;Mn;0;NSM;;;;;N;;;;;
+1DA1A;SIGNWRITING EYES WIDE OPEN;Mn;0;NSM;;;;;N;;;;;
+1DA1B;SIGNWRITING EYES HALF CLOSED;Mn;0;NSM;;;;;N;;;;;
+1DA1C;SIGNWRITING EYES WIDENING MOVEMENT;Mn;0;NSM;;;;;N;;;;;
+1DA1D;SIGNWRITING EYE WINK;Mn;0;NSM;;;;;N;;;;;
+1DA1E;SIGNWRITING EYELASHES UP;Mn;0;NSM;;;;;N;;;;;
+1DA1F;SIGNWRITING EYELASHES DOWN;Mn;0;NSM;;;;;N;;;;;
+1DA20;SIGNWRITING EYELASHES FLUTTERING;Mn;0;NSM;;;;;N;;;;;
+1DA21;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;;
+1DA22;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLE;Mn;0;NSM;;;;;N;;;;;
+1DA23;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATING;Mn;0;NSM;;;;;N;;;;;
+1DA24;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;;
+1DA25;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLE;Mn;0;NSM;;;;;N;;;;;
+1DA26;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATING;Mn;0;NSM;;;;;N;;;;;
+1DA27;SIGNWRITING EYEGAZE-WALLPLANE CURVED;Mn;0;NSM;;;;;N;;;;;
+1DA28;SIGNWRITING EYEGAZE-FLOORPLANE CURVED;Mn;0;NSM;;;;;N;;;;;
+1DA29;SIGNWRITING EYEGAZE-WALLPLANE CIRCLING;Mn;0;NSM;;;;;N;;;;;
+1DA2A;SIGNWRITING CHEEKS PUFFED;Mn;0;NSM;;;;;N;;;;;
+1DA2B;SIGNWRITING CHEEKS NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA2C;SIGNWRITING CHEEKS SUCKED;Mn;0;NSM;;;;;N;;;;;
+1DA2D;SIGNWRITING TENSE CHEEKS HIGH;Mn;0;NSM;;;;;N;;;;;
+1DA2E;SIGNWRITING TENSE CHEEKS MIDDLE;Mn;0;NSM;;;;;N;;;;;
+1DA2F;SIGNWRITING TENSE CHEEKS LOW;Mn;0;NSM;;;;;N;;;;;
+1DA30;SIGNWRITING EARS;Mn;0;NSM;;;;;N;;;;;
+1DA31;SIGNWRITING NOSE NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA32;SIGNWRITING NOSE CONTACT;Mn;0;NSM;;;;;N;;;;;
+1DA33;SIGNWRITING NOSE WRINKLES;Mn;0;NSM;;;;;N;;;;;
+1DA34;SIGNWRITING NOSE WIGGLES;Mn;0;NSM;;;;;N;;;;;
+1DA35;SIGNWRITING AIR BLOWING OUT;Mn;0;NSM;;;;;N;;;;;
+1DA36;SIGNWRITING AIR SUCKING IN;Mn;0;NSM;;;;;N;;;;;
+1DA37;SIGNWRITING AIR BLOW SMALL ROTATIONS;So;0;L;;;;;N;;;;;
+1DA38;SIGNWRITING AIR SUCK SMALL ROTATIONS;So;0;L;;;;;N;;;;;
+1DA39;SIGNWRITING BREATH INHALE;So;0;L;;;;;N;;;;;
+1DA3A;SIGNWRITING BREATH EXHALE;So;0;L;;;;;N;;;;;
+1DA3B;SIGNWRITING MOUTH CLOSED NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA3C;SIGNWRITING MOUTH CLOSED FORWARD;Mn;0;NSM;;;;;N;;;;;
+1DA3D;SIGNWRITING MOUTH CLOSED CONTACT;Mn;0;NSM;;;;;N;;;;;
+1DA3E;SIGNWRITING MOUTH SMILE;Mn;0;NSM;;;;;N;;;;;
+1DA3F;SIGNWRITING MOUTH SMILE WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA40;SIGNWRITING MOUTH SMILE OPEN;Mn;0;NSM;;;;;N;;;;;
+1DA41;SIGNWRITING MOUTH FROWN;Mn;0;NSM;;;;;N;;;;;
+1DA42;SIGNWRITING MOUTH FROWN WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA43;SIGNWRITING MOUTH FROWN OPEN;Mn;0;NSM;;;;;N;;;;;
+1DA44;SIGNWRITING MOUTH OPEN CIRCLE;Mn;0;NSM;;;;;N;;;;;
+1DA45;SIGNWRITING MOUTH OPEN FORWARD;Mn;0;NSM;;;;;N;;;;;
+1DA46;SIGNWRITING MOUTH OPEN WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA47;SIGNWRITING MOUTH OPEN OVAL;Mn;0;NSM;;;;;N;;;;;
+1DA48;SIGNWRITING MOUTH OPEN OVAL WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA49;SIGNWRITING MOUTH OPEN OVAL YAWN;Mn;0;NSM;;;;;N;;;;;
+1DA4A;SIGNWRITING MOUTH OPEN RECTANGLE;Mn;0;NSM;;;;;N;;;;;
+1DA4B;SIGNWRITING MOUTH OPEN RECTANGLE WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA4C;SIGNWRITING MOUTH OPEN RECTANGLE YAWN;Mn;0;NSM;;;;;N;;;;;
+1DA4D;SIGNWRITING MOUTH KISS;Mn;0;NSM;;;;;N;;;;;
+1DA4E;SIGNWRITING MOUTH KISS FORWARD;Mn;0;NSM;;;;;N;;;;;
+1DA4F;SIGNWRITING MOUTH KISS WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA50;SIGNWRITING MOUTH TENSE;Mn;0;NSM;;;;;N;;;;;
+1DA51;SIGNWRITING MOUTH TENSE FORWARD;Mn;0;NSM;;;;;N;;;;;
+1DA52;SIGNWRITING MOUTH TENSE SUCKED;Mn;0;NSM;;;;;N;;;;;
+1DA53;SIGNWRITING LIPS PRESSED TOGETHER;Mn;0;NSM;;;;;N;;;;;
+1DA54;SIGNWRITING LIP LOWER OVER UPPER;Mn;0;NSM;;;;;N;;;;;
+1DA55;SIGNWRITING LIP UPPER OVER LOWER;Mn;0;NSM;;;;;N;;;;;
+1DA56;SIGNWRITING MOUTH CORNERS;Mn;0;NSM;;;;;N;;;;;
+1DA57;SIGNWRITING MOUTH WRINKLES SINGLE;Mn;0;NSM;;;;;N;;;;;
+1DA58;SIGNWRITING MOUTH WRINKLES DOUBLE;Mn;0;NSM;;;;;N;;;;;
+1DA59;SIGNWRITING TONGUE STICKING OUT FAR;Mn;0;NSM;;;;;N;;;;;
+1DA5A;SIGNWRITING TONGUE LICKING LIPS;Mn;0;NSM;;;;;N;;;;;
+1DA5B;SIGNWRITING TONGUE TIP BETWEEN LIPS;Mn;0;NSM;;;;;N;;;;;
+1DA5C;SIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTH;Mn;0;NSM;;;;;N;;;;;
+1DA5D;SIGNWRITING TONGUE INSIDE MOUTH RELAXED;Mn;0;NSM;;;;;N;;;;;
+1DA5E;SIGNWRITING TONGUE MOVES AGAINST CHEEK;Mn;0;NSM;;;;;N;;;;;
+1DA5F;SIGNWRITING TONGUE CENTRE STICKING OUT;Mn;0;NSM;;;;;N;;;;;
+1DA60;SIGNWRITING TONGUE CENTRE INSIDE MOUTH;Mn;0;NSM;;;;;N;;;;;
+1DA61;SIGNWRITING TEETH;Mn;0;NSM;;;;;N;;;;;
+1DA62;SIGNWRITING TEETH MOVEMENT;Mn;0;NSM;;;;;N;;;;;
+1DA63;SIGNWRITING TEETH ON TONGUE;Mn;0;NSM;;;;;N;;;;;
+1DA64;SIGNWRITING TEETH ON TONGUE MOVEMENT;Mn;0;NSM;;;;;N;;;;;
+1DA65;SIGNWRITING TEETH ON LIPS;Mn;0;NSM;;;;;N;;;;;
+1DA66;SIGNWRITING TEETH ON LIPS MOVEMENT;Mn;0;NSM;;;;;N;;;;;
+1DA67;SIGNWRITING TEETH BITE LIPS;Mn;0;NSM;;;;;N;;;;;
+1DA68;SIGNWRITING MOVEMENT-WALLPLANE JAW;Mn;0;NSM;;;;;N;;;;;
+1DA69;SIGNWRITING MOVEMENT-FLOORPLANE JAW;Mn;0;NSM;;;;;N;;;;;
+1DA6A;SIGNWRITING NECK;Mn;0;NSM;;;;;N;;;;;
+1DA6B;SIGNWRITING HAIR;Mn;0;NSM;;;;;N;;;;;
+1DA6C;SIGNWRITING EXCITEMENT;Mn;0;NSM;;;;;N;;;;;
+1DA6D;SIGNWRITING SHOULDER HIP SPINE;So;0;L;;;;;N;;;;;
+1DA6E;SIGNWRITING SHOULDER HIP POSITIONS;So;0;L;;;;;N;;;;;
+1DA6F;SIGNWRITING WALLPLANE SHOULDER HIP MOVE;So;0;L;;;;;N;;;;;
+1DA70;SIGNWRITING FLOORPLANE SHOULDER HIP MOVE;So;0;L;;;;;N;;;;;
+1DA71;SIGNWRITING SHOULDER TILTING FROM WAIST;So;0;L;;;;;N;;;;;
+1DA72;SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH;So;0;L;;;;;N;;;;;
+1DA73;SIGNWRITING TORSO-WALLPLANE CURVED BEND;So;0;L;;;;;N;;;;;
+1DA74;SIGNWRITING TORSO-FLOORPLANE TWISTING;So;0;L;;;;;N;;;;;
+1DA75;SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS;Mn;0;NSM;;;;;N;;;;;
+1DA76;SIGNWRITING LIMB COMBINATION;So;0;L;;;;;N;;;;;
+1DA77;SIGNWRITING LIMB LENGTH-1;So;0;L;;;;;N;;;;;
+1DA78;SIGNWRITING LIMB LENGTH-2;So;0;L;;;;;N;;;;;
+1DA79;SIGNWRITING LIMB LENGTH-3;So;0;L;;;;;N;;;;;
+1DA7A;SIGNWRITING LIMB LENGTH-4;So;0;L;;;;;N;;;;;
+1DA7B;SIGNWRITING LIMB LENGTH-5;So;0;L;;;;;N;;;;;
+1DA7C;SIGNWRITING LIMB LENGTH-6;So;0;L;;;;;N;;;;;
+1DA7D;SIGNWRITING LIMB LENGTH-7;So;0;L;;;;;N;;;;;
+1DA7E;SIGNWRITING FINGER;So;0;L;;;;;N;;;;;
+1DA7F;SIGNWRITING LOCATION-WALLPLANE SPACE;So;0;L;;;;;N;;;;;
+1DA80;SIGNWRITING LOCATION-FLOORPLANE SPACE;So;0;L;;;;;N;;;;;
+1DA81;SIGNWRITING LOCATION HEIGHT;So;0;L;;;;;N;;;;;
+1DA82;SIGNWRITING LOCATION WIDTH;So;0;L;;;;;N;;;;;
+1DA83;SIGNWRITING LOCATION DEPTH;So;0;L;;;;;N;;;;;
+1DA84;SIGNWRITING LOCATION HEAD NECK;Mn;0;NSM;;;;;N;;;;;
+1DA85;SIGNWRITING LOCATION TORSO;So;0;L;;;;;N;;;;;
+1DA86;SIGNWRITING LOCATION LIMBS DIGITS;So;0;L;;;;;N;;;;;
+1DA87;SIGNWRITING COMMA;Po;0;L;;;;;N;;;;;
+1DA88;SIGNWRITING FULL STOP;Po;0;L;;;;;N;;;;;
+1DA89;SIGNWRITING SEMICOLON;Po;0;L;;;;;N;;;;;
+1DA8A;SIGNWRITING COLON;Po;0;L;;;;;N;;;;;
+1DA8B;SIGNWRITING PARENTHESIS;Po;0;L;;;;;N;;;;;
+1DA9B;SIGNWRITING FILL MODIFIER-2;Mn;0;NSM;;;;;N;;;;;
+1DA9C;SIGNWRITING FILL MODIFIER-3;Mn;0;NSM;;;;;N;;;;;
+1DA9D;SIGNWRITING FILL MODIFIER-4;Mn;0;NSM;;;;;N;;;;;
+1DA9E;SIGNWRITING FILL MODIFIER-5;Mn;0;NSM;;;;;N;;;;;
+1DA9F;SIGNWRITING FILL MODIFIER-6;Mn;0;NSM;;;;;N;;;;;
+1DAA1;SIGNWRITING ROTATION MODIFIER-2;Mn;0;NSM;;;;;N;;;;;
+1DAA2;SIGNWRITING ROTATION MODIFIER-3;Mn;0;NSM;;;;;N;;;;;
+1DAA3;SIGNWRITING ROTATION MODIFIER-4;Mn;0;NSM;;;;;N;;;;;
+1DAA4;SIGNWRITING ROTATION MODIFIER-5;Mn;0;NSM;;;;;N;;;;;
+1DAA5;SIGNWRITING ROTATION MODIFIER-6;Mn;0;NSM;;;;;N;;;;;
+1DAA6;SIGNWRITING ROTATION MODIFIER-7;Mn;0;NSM;;;;;N;;;;;
+1DAA7;SIGNWRITING ROTATION MODIFIER-8;Mn;0;NSM;;;;;N;;;;;
+1DAA8;SIGNWRITING ROTATION MODIFIER-9;Mn;0;NSM;;;;;N;;;;;
+1DAA9;SIGNWRITING ROTATION MODIFIER-10;Mn;0;NSM;;;;;N;;;;;
+1DAAA;SIGNWRITING ROTATION MODIFIER-11;Mn;0;NSM;;;;;N;;;;;
+1DAAB;SIGNWRITING ROTATION MODIFIER-12;Mn;0;NSM;;;;;N;;;;;
+1DAAC;SIGNWRITING ROTATION MODIFIER-13;Mn;0;NSM;;;;;N;;;;;
+1DAAD;SIGNWRITING ROTATION MODIFIER-14;Mn;0;NSM;;;;;N;;;;;
+1DAAE;SIGNWRITING ROTATION MODIFIER-15;Mn;0;NSM;;;;;N;;;;;
+1DAAF;SIGNWRITING ROTATION MODIFIER-16;Mn;0;NSM;;;;;N;;;;;
1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;;
1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;;
1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;;
@@ -25108,6 +27011,9 @@
1F32A;CLOUD WITH TORNADO;So;0;ON;;;;;N;;;;;
1F32B;FOG;So;0;ON;;;;;N;;;;;
1F32C;WIND BLOWING FACE;So;0;ON;;;;;N;;;;;
+1F32D;HOT DOG;So;0;ON;;;;;N;;;;;
+1F32E;TACO;So;0;ON;;;;;N;;;;;
+1F32F;BURRITO;So;0;ON;;;;;N;;;;;
1F330;CHESTNUT;So;0;ON;;;;;N;;;;;
1F331;SEEDLING;So;0;ON;;;;;N;;;;;
1F332;EVERGREEN TREE;So;0;ON;;;;;N;;;;;
@@ -25186,6 +27092,8 @@
1F37B;CLINKING BEER MUGS;So;0;ON;;;;;N;;;;;
1F37C;BABY BOTTLE;So;0;ON;;;;;N;;;;;
1F37D;FORK AND KNIFE WITH PLATE;So;0;ON;;;;;N;;;;;
+1F37E;BOTTLE WITH POPPING CORK;So;0;ON;;;;;N;;;;;
+1F37F;POPCORN;So;0;ON;;;;;N;;;;;
1F380;RIBBON;So;0;ON;;;;;N;;;;;
1F381;WRAPPED PRESENT;So;0;ON;;;;;N;;;;;
1F382;BIRTHDAY CAKE;So;0;ON;;;;;N;;;;;
@@ -25265,6 +27173,11 @@
1F3CC;GOLFER;So;0;ON;;;;;N;;;;;
1F3CD;RACING MOTORCYCLE;So;0;ON;;;;;N;;;;;
1F3CE;RACING CAR;So;0;ON;;;;;N;;;;;
+1F3CF;CRICKET BAT AND BALL;So;0;ON;;;;;N;;;;;
+1F3D0;VOLLEYBALL;So;0;ON;;;;;N;;;;;
+1F3D1;FIELD HOCKEY STICK AND BALL;So;0;ON;;;;;N;;;;;
+1F3D2;ICE HOCKEY STICK AND PUCK;So;0;ON;;;;;N;;;;;
+1F3D3;TABLE TENNIS PADDLE AND BALL;So;0;ON;;;;;N;;;;;
1F3D4;SNOW CAPPED MOUNTAIN;So;0;ON;;;;;N;;;;;
1F3D5;CAMPING;So;0;ON;;;;;N;;;;;
1F3D6;BEACH WITH UMBRELLA;So;0;ON;;;;;N;;;;;
@@ -25301,6 +27214,14 @@
1F3F5;ROSETTE;So;0;ON;;;;;N;;;;;
1F3F6;BLACK ROSETTE;So;0;ON;;;;;N;;;;;
1F3F7;LABEL;So;0;ON;;;;;N;;;;;
+1F3F8;BADMINTON RACQUET AND SHUTTLECOCK;So;0;ON;;;;;N;;;;;
+1F3F9;BOW AND ARROW;So;0;ON;;;;;N;;;;;
+1F3FA;AMPHORA;So;0;ON;;;;;N;;;;;
+1F3FB;EMOJI MODIFIER FITZPATRICK TYPE-1-2;Sk;0;ON;;;;;N;;;;;
+1F3FC;EMOJI MODIFIER FITZPATRICK TYPE-3;Sk;0;ON;;;;;N;;;;;
+1F3FD;EMOJI MODIFIER FITZPATRICK TYPE-4;Sk;0;ON;;;;;N;;;;;
+1F3FE;EMOJI MODIFIER FITZPATRICK TYPE-5;Sk;0;ON;;;;;N;;;;;
+1F3FF;EMOJI MODIFIER FITZPATRICK TYPE-6;Sk;0;ON;;;;;N;;;;;
1F400;RAT;So;0;ON;;;;;N;;;;;
1F401;MOUSE;So;0;ON;;;;;N;;;;;
1F402;OX;So;0;ON;;;;;N;;;;;
@@ -25556,6 +27477,7 @@
1F4FC;VIDEOCASSETTE;So;0;ON;;;;;N;;;;;
1F4FD;FILM PROJECTOR;So;0;ON;;;;;N;;;;;
1F4FE;PORTABLE STEREO;So;0;ON;;;;;N;;;;;
+1F4FF;PRAYER BEADS;So;0;ON;;;;;N;;;;;
1F500;TWISTED RIGHTWARDS ARROWS;So;0;ON;;;;;N;;;;;
1F501;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;;
1F502;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY;So;0;ON;;;;;N;;;;;
@@ -25631,6 +27553,11 @@
1F548;CELTIC CROSS;So;0;ON;;;;;N;;;;;
1F549;OM SYMBOL;So;0;ON;;;;;N;;;;;
1F54A;DOVE OF PEACE;So;0;ON;;;;;N;;;;;
+1F54B;KAABA;So;0;ON;;;;;N;;;;;
+1F54C;MOSQUE;So;0;ON;;;;;N;;;;;
+1F54D;SYNAGOGUE;So;0;ON;;;;;N;;;;;
+1F54E;MENORAH WITH NINE BRANCHES;So;0;ON;;;;;N;;;;;
+1F54F;BOWL OF HYGIEIA;So;0;ON;;;;;N;;;;;
1F550;CLOCK FACE ONE OCLOCK;So;0;ON;;;;;N;;;;;
1F551;CLOCK FACE TWO OCLOCK;So;0;ON;;;;;N;;;;;
1F552;CLOCK FACE THREE OCLOCK;So;0;ON;;;;;N;;;;;
@@ -25872,6 +27799,8 @@
1F640;WEARY CAT FACE;So;0;ON;;;;;N;;;;;
1F641;SLIGHTLY FROWNING FACE;So;0;ON;;;;;N;;;;;
1F642;SLIGHTLY SMILING FACE;So;0;ON;;;;;N;;;;;
+1F643;UPSIDE-DOWN FACE;So;0;ON;;;;;N;;;;;
+1F644;FACE WITH ROLLING EYES;So;0;ON;;;;;N;;;;;
1F645;FACE WITH NO GOOD GESTURE;So;0;ON;;;;;N;;;;;
1F646;FACE WITH OK GESTURE;So;0;ON;;;;;N;;;;;
1F647;PERSON BOWING DEEPLY;So;0;ON;;;;;N;;;;;
@@ -26011,6 +27940,7 @@
1F6CD;SHOPPING BAGS;So;0;ON;;;;;N;;;;;
1F6CE;BELLHOP BELL;So;0;ON;;;;;N;;;;;
1F6CF;BED;So;0;ON;;;;;N;;;;;
+1F6D0;PLACE OF WORSHIP;So;0;ON;;;;;N;;;;;
1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;;
1F6E1;SHIELD;So;0;ON;;;;;N;;;;;
1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;;
@@ -26377,12 +28307,29 @@
1F8AB;RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;;
1F8AC;WHITE ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;;
1F8AD;WHITE ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;;
+1F910;ZIPPER-MOUTH FACE;So;0;ON;;;;;N;;;;;
+1F911;MONEY-MOUTH FACE;So;0;ON;;;;;N;;;;;
+1F912;FACE WITH THERMOMETER;So;0;ON;;;;;N;;;;;
+1F913;NERD FACE;So;0;ON;;;;;N;;;;;
+1F914;THINKING FACE;So;0;ON;;;;;N;;;;;
+1F915;FACE WITH HEAD-BANDAGE;So;0;ON;;;;;N;;;;;
+1F916;ROBOT FACE;So;0;ON;;;;;N;;;;;
+1F917;HUGGING FACE;So;0;ON;;;;;N;;;;;
+1F918;SIGN OF THE HORNS;So;0;ON;;;;;N;;;;;
+1F980;CRAB;So;0;ON;;;;;N;;;;;
+1F981;LION FACE;So;0;ON;;;;;N;;;;;
+1F982;SCORPION;So;0;ON;;;;;N;;;;;
+1F983;TURKEY;So;0;ON;;;;;N;;;;;
+1F984;UNICORN FACE;So;0;ON;;;;;N;;;;;
+1F9C0;CHEESE WEDGE;So;0;ON;;;;;N;;;;;
20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;
2B734;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;
2B740;<CJK Ideograph Extension D, First>;Lo;0;L;;;;;N;;;;;
2B81D;<CJK Ideograph Extension D, Last>;Lo;0;L;;;;;N;;;;;
+2B820;<CJK Ideograph Extension E, First>;Lo;0;L;;;;;N;;;;;
+2CEA1;<CJK Ideograph Extension E, Last>;Lo;0;L;;;;;N;;;;;
2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;;
2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;;
2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;;
--- a/jdk/make/data/unicodedata/VERSION Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/make/data/unicodedata/VERSION Thu Oct 22 11:14:00 2015 -0700
@@ -1,1 +1,1 @@
-7.0.0
+8.0.0
--- a/jdk/make/gendata/Gendata-java.base.gmk Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/make/gendata/Gendata-java.base.gmk Thu Oct 22 11:14:00 2015 -0700
@@ -70,7 +70,7 @@
$(ECHO) "Generating java.security"
$(MKDIR) -p $(@D)
$(TOOL_MAKEJAVASECURITY) $(GENDATA_JAVA_SECURITY_SRC) $@ $(OPENJDK_TARGET_OS) \
- $(RESTRICTED_PKGS_SRC) || exit 1
+ $(OPENJDK_TARGET_CPU_ARCH) $(RESTRICTED_PKGS_SRC) || exit 1
TARGETS += $(GENDATA_JAVA_SECURITY)
--- a/jdk/make/gensrc/GensrcSwing.gmk Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/make/gensrc/GensrcSwing.gmk Thu Oct 22 11:14:00 2015 -0700
@@ -41,71 +41,4 @@
GENSRC_SWING_NIMBUS := $(SUPPORT_OUTPUTDIR)/gensrc/java.desktop/_the.generated_nimbus
-#
-# Generate beaninfo java files
-#
-
-BEANINFO_OUTPUTDIR := $(SUPPORT_OUTPUTDIR)/gensrc_no_docs/java.desktop
-DOCLET_DATA_DIR := $(JDK_TOPDIR)/make/data/swingbeaninfo
-
-# javax.swing package
-BEANS = AbstractButton Box JComponent JApplet JButton \
- JCheckBox JCheckBoxMenuItem JComboBox JColorChooser \
- JDesktopPane JDialog JEditorPane JFileChooser JFrame \
- JFormattedTextField JInternalFrame JLabel JLayeredPane \
- JList JMenu JMenuBar JMenuItem JOptionPane JPanel \
- JPasswordField JPopupMenu JProgressBar JRadioButton \
- JRadioButtonMenuItem JScrollBar JScrollPane JSeparator \
- JSlider JSplitPane JSpinner JTabbedPane JTable \
- JTextArea JTextField JTextPane JToggleButton JToolBar \
- JTree JWindow
-
-# javax.swing.text package
-BEANS_TEXT = JTextComponent
-
-BEANS_SRC = $(BEANS:%=$(JDK_TOPDIR)/src/java.desktop/share/classes/javax/swing/%.java) \
- $(BEANS_TEXT:%=$(JDK_TOPDIR)/src/java.desktop/share/classes/javax/swing/text/%.java)
-
-# Dummy variable so far, in the old build system it was false by default
-SWINGBEAN_DEBUG_FLAG = false
-# GenDocletBeanInfo is compiled in Tools.gmk and picks up from $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes
-# LocaleDataMetaInfo needs to be generated before running this to avoid confusing errors
-# in the build log.
-$(BEANINFO_OUTPUTDIR)/_the.generated_beaninfo: $(BEANS_SRC) \
- $(BEANINFO_OUTPUTDIR)/javax/swing/SwingBeanInfoBase.java \
- $(BEANINFO_OUTPUTDIR)/sun/swing/BeanInfoUtils.java $(BUILD_TOOLS_JDK)
- $(ECHO) Generating beaninfo
- $(MKDIR) -p $(BEANINFO_OUTPUTDIR)/javax/swing
- $(JAVA) -Djava.awt.headless=true $(NEW_JAVADOC) \
- -sourcepath $(call PathList,\
- $(wildcard $(JDK_TOPDIR)/src/*/*/classes) \
- $(SUPPORT_OUTPUTDIR)/gensrc/java.base) \
- -doclet build.tools.swingbeaninfo.GenDocletBeanInfo \
- -x $(SWINGBEAN_DEBUG_FLAG) -d $(BEANINFO_OUTPUTDIR)/javax/swing \
- -t $(DOCLET_DATA_DIR)/SwingBeanInfo.template \
- -docletpath $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
- -XDignore.symbol.file=true \
- -classpath $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes $(BEANS_SRC) $(LOG_INFO)
- # Move the JTextComponent into its proper package directory.
- $(MKDIR) -p $(BEANINFO_OUTPUTDIR)/javax/swing/text
- $(MV) $(BEANINFO_OUTPUTDIR)/javax/swing/JTextComponentBeanInfo.java \
- $(BEANINFO_OUTPUTDIR)/javax/swing/text/JTextComponentBeanInfo.java
- $(TOUCH) $@
-
-# This file is the part of dt.jar
-# For some reason it is under $(JDK_TOPDIR)/make/data/swingbeaninfo
-# Should it be moved under $(JDK_TOPDIR)/src/java.desktop/share/classes/javax/swing instead?
-$(BEANINFO_OUTPUTDIR)/javax/swing/SwingBeanInfoBase.java: \
- $(DOCLET_DATA_DIR)/javax/swing/SwingBeanInfoBase.java
- $(call install-file)
-
-# This file is the part of dt.jar
-# For some reason it is under $(JDK_TOPDIR)/make/data/swingbeaninfo
-# Should it be moved under $(JDK_TOPDIR)/src/java.desktop/share/classes/sun/swing instead?
-$(BEANINFO_OUTPUTDIR)/sun/swing/BeanInfoUtils.java: \
- $(DOCLET_DATA_DIR)/sun/swing/BeanInfoUtils.java
- $(call install-file)
-
-GENSRC_SWING_BEANINFO = $(BEANINFO_OUTPUTDIR)/_the.generated_beaninfo
-
-GENSRC_JAVA_DESKTOP += $(GENSRC_SWING_BEANINFO) $(GENSRC_SWING_NIMBUS)
+GENSRC_JAVA_DESKTOP += $(GENSRC_SWING_NIMBUS)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/launcher/Launcher-jdk.jshell.gmk Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,31 @@
+#
+# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+include LauncherCommon.gmk
+
+$(eval $(call SetupLauncher,jshell, \
+ -DEXPAND_CLASSPATH_WILDCARDS \
+ -DNEVER_ACT_AS_SERVER_CLASS_MACHINE \
+ -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "jdk.internal.jshell.tool.JShellTool"$(COMMA) }'))
--- a/jdk/make/launcher/Launcher-jdk.pack200.gmk Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/make/launcher/Launcher-jdk.pack200.gmk Thu Oct 22 11:14:00 2015 -0700
@@ -40,7 +40,7 @@
ifeq ($(USE_EXTERNAL_LIBZ), true)
UNPACKEXE_CFLAGS += -DSYSTEM_ZLIB
- UNPACKEXE_ZIPOBJS := -lz
+ UNPACKEXE_LIBS := -lz
else
UNPACKEXE_CFLAGS += -I$(JDK_TOPDIR)/src/java.base/share/native/libzip/zlib-1.2.8
UNPACKEXE_ZIPOBJS := $(SUPPORT_OUTPUTDIR)/native/java.base/libzip/zcrc32$(OBJ_SUFFIX) \
@@ -90,9 +90,9 @@
$(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \
$(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX)) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
- LDFLAGS_linux := -lc, \
+ LDFLAGS_linux := , \
LDFLAGS_solaris := $(UNPACKEXE_LDFLAGS_solaris) -lc, \
- LDFLAGS_SUFFIX := $(LIBCXX), \
+ LDFLAGS_SUFFIX := $(UNPACKEXE_LIBS) $(LIBCXX), \
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/unpackexe$(OUTPUT_SUBDIR), \
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_cmds/$(MODULE), \
PROGRAM := unpack200, \
--- a/jdk/make/lib/Awt2dLibraries.gmk Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/make/lib/Awt2dLibraries.gmk Thu Oct 22 11:14:00 2015 -0700
@@ -391,6 +391,8 @@
-I$(JDK_TOPDIR)/src/java.desktop/share/native/common/awt/debug \
$(LIBJAVA_HEADER_FLAGS) \
#
+# The fast floor code loses precision.
+LCMS_CFLAGS=-DCMS_DONT_USE_FAST_FLOOR
ifeq ($(USE_EXTERNAL_LCMS), true)
# If we're using an external library, we'll just need the wrapper part.
@@ -498,10 +500,10 @@
DISABLED_WARNINGS_clang := logical-op-parentheses, \
DISABLED_WARNINGS_microsoft := 4267, \
MAPFILE := $(BUILD_LIBJAVAJPEG_MAPFILE), \
- LDFLAGS := $(LDFLAGS_JDKLIB) $(LIBJPEG_LIBS) \
+ LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_windows := $(WIN_JAVA_LIB) jvm.lib, \
- LDFLAGS_SUFFIX := $(LDFLAGS_JDKLIB_SUFFIX), \
+ LDFLAGS_SUFFIX := $(LIBJPEG_LIBS) $(LDFLAGS_JDKLIB_SUFFIX), \
VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \
RC_FLAGS := $(RC_FLAGS) \
-D "JDK_FNAME=javajpeg.dll" \
--- a/jdk/make/src/classes/build/tools/makejavasecurity/MakeJavaSecurity.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/make/src/classes/build/tools/makejavasecurity/MakeJavaSecurity.java Thu Oct 22 11:14:00 2015 -0700
@@ -50,19 +50,21 @@
public static void main(String[] args) throws Exception {
- if (args.length < 3) {
+ if (args.length < 4) {
System.err.println("Usage: java MakeJavaSecurity " +
"[input java.security file name] " +
"[output java.security file name] " +
"[openjdk target os] " +
+ "[openjdk target cpu architecture]" +
"[more restricted packages file name?]");
- System.exit(1);
+
+ System.exit(1);
}
// more restricted packages
List<String> extraLines;
- if (args.length == 4) {
- extraLines = Files.readAllLines(Paths.get(args[3]));
+ if (args.length == 5) {
+ extraLines = Files.readAllLines(Paths.get(args[4]));
} else {
extraLines = Collections.emptyList();
}
@@ -96,7 +98,11 @@
mode = 0;
iter.remove();
} else if (line.startsWith("#ifdef ")) {
- mode = line.endsWith(args[2])?1:2;
+ if (line.indexOf('-') > 0) {
+ mode = line.endsWith(args[2]+"-"+args[3]) ? 1 : 2;
+ } else {
+ mode = line.endsWith(args[2]) ? 1 : 2;
+ }
iter.remove();
} else if (line.startsWith("#ifndef ")) {
mode = line.endsWith(args[2])?2:1;
--- a/jdk/make/src/classes/build/tools/module/boot.modules Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/make/src/classes/build/tools/module/boot.modules Thu Oct 22 11:14:00 2015 -0700
@@ -29,3 +29,4 @@
jdk.security.auth
jdk.security.jgss
jdk.snmp
+jdk.vm.ci
--- a/jdk/src/java.base/share/classes/java/io/ObjectStreamClass.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/io/ObjectStreamClass.java Thu Oct 22 11:14:00 2015 -0700
@@ -189,6 +189,9 @@
/** superclass descriptor appearing in stream */
private ObjectStreamClass superDesc;
+ /** true if, and only if, the object has been correctly initialized */
+ private boolean initialized;
+
/**
* Initializes native code.
*/
@@ -266,6 +269,7 @@
if (cl == null) {
return null;
}
+ requireInitialized();
if (System.getSecurityManager() != null) {
Class<?> caller = Reflection.getCallerClass();
if (ReflectUtil.needsPackageAccessCheck(caller.getClassLoader(), cl.getClassLoader())) {
@@ -533,6 +537,7 @@
name, "unmatched serializable field(s) declared");
}
}
+ initialized = true;
}
/**
@@ -550,6 +555,14 @@
ObjectStreamClass superDesc)
throws InvalidClassException
{
+ ObjectStreamClass osc = null;
+ if (cl != null) {
+ osc = lookup(cl, true);
+ if (!osc.isProxy) {
+ throw new InvalidClassException(
+ "cannot bind proxy descriptor to a non-proxy class");
+ }
+ }
this.cl = cl;
this.resolveEx = resolveEx;
this.superDesc = superDesc;
@@ -557,21 +570,17 @@
serializable = true;
suid = Long.valueOf(0);
fields = NO_FIELDS;
-
- if (cl != null) {
- localDesc = lookup(cl, true);
- if (!localDesc.isProxy) {
- throw new InvalidClassException(
- "cannot bind proxy descriptor to a non-proxy class");
- }
+ if (osc != null) {
+ localDesc = osc;
name = localDesc.name;
externalizable = localDesc.externalizable;
- cons = localDesc.cons;
writeReplaceMethod = localDesc.writeReplaceMethod;
readResolveMethod = localDesc.readResolveMethod;
deserializeEx = localDesc.deserializeEx;
+ cons = localDesc.cons;
}
fieldRefl = getReflector(fields, localDesc);
+ initialized = true;
}
/**
@@ -583,11 +592,57 @@
ObjectStreamClass superDesc)
throws InvalidClassException
{
+ long suid = Long.valueOf(model.getSerialVersionUID());
+ ObjectStreamClass osc = null;
+ if (cl != null) {
+ osc = lookup(cl, true);
+ if (osc.isProxy) {
+ throw new InvalidClassException(
+ "cannot bind non-proxy descriptor to a proxy class");
+ }
+ if (model.isEnum != osc.isEnum) {
+ throw new InvalidClassException(model.isEnum ?
+ "cannot bind enum descriptor to a non-enum class" :
+ "cannot bind non-enum descriptor to an enum class");
+ }
+
+ if (model.serializable == osc.serializable &&
+ !cl.isArray() &&
+ suid != osc.getSerialVersionUID()) {
+ throw new InvalidClassException(osc.name,
+ "local class incompatible: " +
+ "stream classdesc serialVersionUID = " + suid +
+ ", local class serialVersionUID = " +
+ osc.getSerialVersionUID());
+ }
+
+ if (!classNamesEqual(model.name, osc.name)) {
+ throw new InvalidClassException(osc.name,
+ "local class name incompatible with stream class " +
+ "name \"" + model.name + "\"");
+ }
+
+ if (!model.isEnum) {
+ if ((model.serializable == osc.serializable) &&
+ (model.externalizable != osc.externalizable)) {
+ throw new InvalidClassException(osc.name,
+ "Serializable incompatible with Externalizable");
+ }
+
+ if ((model.serializable != osc.serializable) ||
+ (model.externalizable != osc.externalizable) ||
+ !(model.serializable || model.externalizable)) {
+ deserializeEx = new ExceptionInfo(
+ osc.name, "class invalid for deserialization");
+ }
+ }
+ }
+
this.cl = cl;
this.resolveEx = resolveEx;
this.superDesc = superDesc;
name = model.name;
- suid = Long.valueOf(model.getSerialVersionUID());
+ this.suid = suid;
isProxy = false;
isEnum = model.isEnum;
serializable = model.serializable;
@@ -598,53 +653,8 @@
primDataSize = model.primDataSize;
numObjFields = model.numObjFields;
- if (cl != null) {
- localDesc = lookup(cl, true);
- if (localDesc.isProxy) {
- throw new InvalidClassException(
- "cannot bind non-proxy descriptor to a proxy class");
- }
- if (isEnum != localDesc.isEnum) {
- throw new InvalidClassException(isEnum ?
- "cannot bind enum descriptor to a non-enum class" :
- "cannot bind non-enum descriptor to an enum class");
- }
-
- if (serializable == localDesc.serializable &&
- !cl.isArray() &&
- suid.longValue() != localDesc.getSerialVersionUID())
- {
- throw new InvalidClassException(localDesc.name,
- "local class incompatible: " +
- "stream classdesc serialVersionUID = " + suid +
- ", local class serialVersionUID = " +
- localDesc.getSerialVersionUID());
- }
-
- if (!classNamesEqual(name, localDesc.name)) {
- throw new InvalidClassException(localDesc.name,
- "local class name incompatible with stream class " +
- "name \"" + name + "\"");
- }
-
- if (!isEnum) {
- if ((serializable == localDesc.serializable) &&
- (externalizable != localDesc.externalizable))
- {
- throw new InvalidClassException(localDesc.name,
- "Serializable incompatible with Externalizable");
- }
-
- if ((serializable != localDesc.serializable) ||
- (externalizable != localDesc.externalizable) ||
- !(serializable || externalizable))
- {
- deserializeEx = new ExceptionInfo(
- localDesc.name, "class invalid for deserialization");
- }
- }
-
- cons = localDesc.cons;
+ if (osc != null) {
+ localDesc = osc;
writeObjectMethod = localDesc.writeObjectMethod;
readObjectMethod = localDesc.readObjectMethod;
readObjectNoDataMethod = localDesc.readObjectNoDataMethod;
@@ -653,10 +663,13 @@
if (deserializeEx == null) {
deserializeEx = localDesc.deserializeEx;
}
+ cons = localDesc.cons;
}
+
fieldRefl = getReflector(fields, localDesc);
// reassign to matched fields so as to reflect local unshared settings
fields = fieldRefl.getFields();
+ initialized = true;
}
/**
@@ -759,11 +772,20 @@
}
/**
+ * Throws InternalError if not initialized.
+ */
+ private final void requireInitialized() {
+ if (!initialized)
+ throw new InternalError("Unexpected call when not initialized");
+ }
+
+ /**
* Throws an InvalidClassException if object instances referencing this
* class descriptor should not be allowed to deserialize. This method does
* not apply to deserialization of enum constants.
*/
void checkDeserialize() throws InvalidClassException {
+ requireInitialized();
if (deserializeEx != null) {
throw deserializeEx.newInvalidClassException();
}
@@ -775,6 +797,7 @@
* not apply to serialization of enum constants.
*/
void checkSerialize() throws InvalidClassException {
+ requireInitialized();
if (serializeEx != null) {
throw serializeEx.newInvalidClassException();
}
@@ -788,6 +811,7 @@
* does not apply to deserialization of enum constants.
*/
void checkDefaultSerialize() throws InvalidClassException {
+ requireInitialized();
if (defaultSerializeEx != null) {
throw defaultSerializeEx.newInvalidClassException();
}
@@ -799,6 +823,7 @@
* of the subclass descriptor's bound class.
*/
ObjectStreamClass getSuperDesc() {
+ requireInitialized();
return superDesc;
}
@@ -809,6 +834,7 @@
* associated with this descriptor.
*/
ObjectStreamClass getLocalDesc() {
+ requireInitialized();
return localDesc;
}
@@ -851,6 +877,7 @@
* otherwise.
*/
boolean isProxy() {
+ requireInitialized();
return isProxy;
}
@@ -859,6 +886,7 @@
* otherwise.
*/
boolean isEnum() {
+ requireInitialized();
return isEnum;
}
@@ -867,6 +895,7 @@
* otherwise.
*/
boolean isExternalizable() {
+ requireInitialized();
return externalizable;
}
@@ -875,6 +904,7 @@
* otherwise.
*/
boolean isSerializable() {
+ requireInitialized();
return serializable;
}
@@ -883,6 +913,7 @@
* has written its data in 1.2 (block data) format, false otherwise.
*/
boolean hasBlockExternalData() {
+ requireInitialized();
return hasBlockExternalData;
}
@@ -892,6 +923,7 @@
* writeObject() method, false otherwise.
*/
boolean hasWriteObjectData() {
+ requireInitialized();
return hasWriteObjectData;
}
@@ -903,6 +935,7 @@
* accessible no-arg constructor. Otherwise, returns false.
*/
boolean isInstantiable() {
+ requireInitialized();
return (cons != null);
}
@@ -912,6 +945,7 @@
* returns false.
*/
boolean hasWriteObjectMethod() {
+ requireInitialized();
return (writeObjectMethod != null);
}
@@ -921,6 +955,7 @@
* returns false.
*/
boolean hasReadObjectMethod() {
+ requireInitialized();
return (readObjectMethod != null);
}
@@ -930,6 +965,7 @@
* Otherwise, returns false.
*/
boolean hasReadObjectNoDataMethod() {
+ requireInitialized();
return (readObjectNoDataMethod != null);
}
@@ -938,6 +974,7 @@
* defines a conformant writeReplace method. Otherwise, returns false.
*/
boolean hasWriteReplaceMethod() {
+ requireInitialized();
return (writeReplaceMethod != null);
}
@@ -946,6 +983,7 @@
* defines a conformant readResolve method. Otherwise, returns false.
*/
boolean hasReadResolveMethod() {
+ requireInitialized();
return (readResolveMethod != null);
}
@@ -962,6 +1000,7 @@
throws InstantiationException, InvocationTargetException,
UnsupportedOperationException
{
+ requireInitialized();
if (cons != null) {
try {
return cons.newInstance();
@@ -983,6 +1022,7 @@
void invokeWriteObject(Object obj, ObjectOutputStream out)
throws IOException, UnsupportedOperationException
{
+ requireInitialized();
if (writeObjectMethod != null) {
try {
writeObjectMethod.invoke(obj, new Object[]{ out });
@@ -1012,6 +1052,7 @@
throws ClassNotFoundException, IOException,
UnsupportedOperationException
{
+ requireInitialized();
if (readObjectMethod != null) {
try {
readObjectMethod.invoke(obj, new Object[]{ in });
@@ -1042,6 +1083,7 @@
void invokeReadObjectNoData(Object obj)
throws IOException, UnsupportedOperationException
{
+ requireInitialized();
if (readObjectNoDataMethod != null) {
try {
readObjectNoDataMethod.invoke(obj, (Object[]) null);
@@ -1070,6 +1112,7 @@
Object invokeWriteReplace(Object obj)
throws IOException, UnsupportedOperationException
{
+ requireInitialized();
if (writeReplaceMethod != null) {
try {
return writeReplaceMethod.invoke(obj, (Object[]) null);
@@ -1099,6 +1142,7 @@
Object invokeReadResolve(Object obj)
throws IOException, UnsupportedOperationException
{
+ requireInitialized();
if (readResolveMethod != null) {
try {
return readResolveMethod.invoke(obj, (Object[]) null);
--- a/jdk/src/java.base/share/classes/java/lang/Character.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/Character.java Thu Oct 22 11:14:00 2015 -0700
@@ -42,7 +42,7 @@
* a character's category (lowercase letter, digit, etc.) and for converting
* characters from uppercase to lowercase and vice versa.
* <p>
- * Character information is based on the Unicode Standard, version 7.0.0.
+ * Character information is based on the Unicode Standard, version 8.0.0.
* <p>
* The methods and data of class {@code Character} are defined by
* the information in the <i>UnicodeData</i> file that is part of the
@@ -2850,6 +2850,93 @@
"SUPPLEMENTAL ARROWS-C",
"SUPPLEMENTALARROWS-C");
+ /**
+ * Constant for the "Cherokee Supplement" Unicode character block.
+ * @since 1.9
+ */
+ public static final UnicodeBlock CHEROKEE_SUPPLEMENT =
+ new UnicodeBlock("CHEROKEE_SUPPLEMENT",
+ "CHEROKEE SUPPLEMENT",
+ "CHEROKEESUPPLEMENT");
+
+ /**
+ * Constant for the "Hatran" Unicode character block.
+ * @since 1.9
+ */
+ public static final UnicodeBlock HATRAN =
+ new UnicodeBlock("HATRAN");
+
+ /**
+ * Constant for the "Old Hungarian" Unicode character block.
+ * @since 1.9
+ */
+ public static final UnicodeBlock OLD_HUNGARIAN =
+ new UnicodeBlock("OLD_HUNGARIAN",
+ "OLD HUNGARIAN",
+ "OLDHUNGARIAN");
+
+ /**
+ * Constant for the "Multani" Unicode character block.
+ * @since 1.9
+ */
+ public static final UnicodeBlock MULTANI =
+ new UnicodeBlock("MULTANI");
+
+ /**
+ * Constant for the "Ahom" Unicode character block.
+ * @since 1.9
+ */
+ public static final UnicodeBlock AHOM =
+ new UnicodeBlock("AHOM");
+
+ /**
+ * Constant for the "Early Dynastic Cuneiform" Unicode character block.
+ * @since 1.9
+ */
+ public static final UnicodeBlock EARLY_DYNASTIC_CUNEIFORM =
+ new UnicodeBlock("EARLY_DYNASTIC_CUNEIFORM",
+ "EARLY DYNASTIC CUNEIFORM",
+ "EARLYDYNASTICCUNEIFORM");
+
+ /**
+ * Constant for the "Anatolian Hieroglyphs" Unicode character block.
+ * @since 1.9
+ */
+ public static final UnicodeBlock ANATOLIAN_HIEROGLYPHS =
+ new UnicodeBlock("ANATOLIAN_HIEROGLYPHS",
+ "ANATOLIAN HIEROGLYPHS",
+ "ANATOLIANHIEROGLYPHS");
+
+ /**
+ * Constant for the "Sutton SignWriting" Unicode character block.
+ * @since 1.9
+ */
+ public static final UnicodeBlock SUTTON_SIGNWRITING =
+ new UnicodeBlock("SUTTON_SIGNWRITING",
+ "SUTTON SIGNWRITING",
+ "SUTTONSIGNWRITING");
+
+ /**
+ * Constant for the "Supplemental Symbols and Pictographs" Unicode
+ * character block.
+ * @since 1.9
+ */
+ public static final UnicodeBlock SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS =
+ new UnicodeBlock("SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS",
+ "SUPPLEMENTAL SYMBOLS AND PICTOGRAPHS",
+ "SUPPLEMENTALSYMBOLSANDPICTOGRAPHS");
+
+ /**
+ * Constant for the "CJK Unified Ideographs Extension E" Unicode
+ * character block.
+ * @since 1.9
+ */
+ public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E =
+ new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E",
+ "CJK UNIFIED IDEOGRAPHS EXTENSION E",
+ "CJKUNIFIEDIDEOGRAPHSEXTENSIONE");
+
+
private static final int blockStarts[] = {
0x0000, // 0000..007F; Basic Latin
0x0080, // 0080..00FF; Latin-1 Supplement
@@ -2995,7 +3082,7 @@
0xAAE0, // AAE0..AAFF; Meetei Mayek Extensions
0xAB00, // AB00..AB2F; Ethiopic Extended-A
0xAB30, // AB30..AB6F; Latin Extended-E
- 0xAB70, // unassigned
+ 0xAB70, // AB70..ABBF; Cherokee Supplement
0xABC0, // ABC0..ABFF; Meetei Mayek
0xAC00, // AC00..D7AF; Hangul Syllables
0xD7B0, // D7B0..D7FF; Hangul Jamo Extended-B
@@ -3044,6 +3131,7 @@
0x10860, // 10860..1087F; Palmyrene
0x10880, // 10880..108AF; Nabataean
0x108B0, // unassigned
+ 0x108E0, // 108E0..108FF; Hatran
0x10900, // 10900..1091F; Phoenician
0x10920, // 10920..1093F; Lydian
0x10940, // unassigned
@@ -3061,6 +3149,8 @@
0x10BB0, // unassigned
0x10C00, // 10C00..10C4F; Old Turkic
0x10C50, // unassigned
+ 0x10C80, // 10C80..10CFF; Old Hungarian
+ 0x10D00, // unassigned
0x10E60, // 10E60..10E7F; Rumi Numeral Symbols
0x10E80, // unassigned
0x11000, // 11000..1107F; Brahmi
@@ -3072,6 +3162,7 @@
0x111E0, // 111E0..111FF; Sinhala Archaic Numbers
0x11200, // 11200..1124F; Khojki
0x11250, // unassigned
+ 0x11280, // 11280..112AF; Multani
0x112B0, // 112B0..112FF; Khudawadi
0x11300, // 11300..1137F; Grantha
0x11380, // unassigned
@@ -3082,15 +3173,20 @@
0x11660, // unassigned
0x11680, // 11680..116CF; Takri
0x116D0, // unassigned
+ 0x11700, // 11700..1173F; Ahom
+ 0x11740, // unassigned
0x118A0, // 118A0..118FF; Warang Citi
0x11900, // unassigned
0x11AC0, // 11AC0..11AFF; Pau Cin Hau
0x11B00, // unassigned
0x12000, // 12000..123FF; Cuneiform
0x12400, // 12400..1247F; Cuneiform Numbers and Punctuation
- 0x12480, // unassigned
+ 0x12480, // 12480..1254F; Early Dynastic Cuneiform
+ 0x12550, // unassigned
0x13000, // 13000..1342F; Egyptian Hieroglyphs
0x13430, // unassigned
+ 0x14400, // 14400..1467F; Anatolian Hieroglyphs
+ 0x14680, // unassigned
0x16800, // 16800..16A3F; Bamum Supplement
0x16A40, // 16A40..16A6F; Mro
0x16A70, // unassigned
@@ -3112,7 +3208,8 @@
0x1D360, // 1D360..1D37F; Counting Rod Numerals
0x1D380, // unassigned
0x1D400, // 1D400..1D7FF; Mathematical Alphanumeric Symbols
- 0x1D800, // unassigned
+ 0x1D800, // 1D800..1DAAF; Sutton SignWriting
+ 0x1DAB0, // unassigned
0x1E800, // 1E800..1E8DF; Mende Kikakui
0x1E8E0, // unassigned
0x1EE00, // 1EE00..1EEFF; Arabic Mathematical Alphabetic Symbols
@@ -3122,19 +3219,21 @@
0x1F0A0, // 1F0A0..1F0FF; Playing Cards
0x1F100, // 1F100..1F1FF; Enclosed Alphanumeric Supplement
0x1F200, // 1F200..1F2FF; Enclosed Ideographic Supplement
- 0x1F300, // 1F300..1F5FF; Miscellaneous Symbols And Pictographs
+ 0x1F300, // 1F300..1F5FF; Miscellaneous Symbols and Pictographs
0x1F600, // 1F600..1F64F; Emoticons
0x1F650, // 1F650..1F67F; Ornamental Dingbats
- 0x1F680, // 1F680..1F6FF; Transport And Map Symbols
+ 0x1F680, // 1F680..1F6FF; Transport and Map Symbols
0x1F700, // 1F700..1F77F; Alchemical Symbols
0x1F780, // 1F780..1F7FF; Geometric Shapes Extended
0x1F800, // 1F800..1F8FF; Supplemental Arrows-C
- 0x1F900, // unassigned
+ 0x1F900, // 1F900..1F9FF; Supplemental Symbols and Pictographs
+ 0x1FA00, // unassigned
0x20000, // 20000..2A6DF; CJK Unified Ideographs Extension B
0x2A6E0, // unassigned
0x2A700, // 2A700..2B73F; CJK Unified Ideographs Extension C
0x2B740, // 2B740..2B81F; CJK Unified Ideographs Extension D
- 0x2B820, // unassigned
+ 0x2B820, // 2B820..2CEAF; CJK Unified Ideographs Extension E
+ 0x2CEB0, // unassigned
0x2F800, // 2F800..2FA1F; CJK Compatibility Ideographs Supplement
0x2FA20, // unassigned
0xE0000, // E0000..E007F; Tags
@@ -3290,7 +3389,7 @@
MEETEI_MAYEK_EXTENSIONS,
ETHIOPIC_EXTENDED_A,
LATIN_EXTENDED_E,
- null,
+ CHEROKEE_SUPPLEMENT,
MEETEI_MAYEK,
HANGUL_SYLLABLES,
HANGUL_JAMO_EXTENDED_B,
@@ -3339,6 +3438,7 @@
PALMYRENE,
NABATAEAN,
null,
+ HATRAN,
PHOENICIAN,
LYDIAN,
null,
@@ -3356,6 +3456,8 @@
null,
OLD_TURKIC,
null,
+ OLD_HUNGARIAN,
+ null,
RUMI_NUMERAL_SYMBOLS,
null,
BRAHMI,
@@ -3367,6 +3469,7 @@
SINHALA_ARCHAIC_NUMBERS,
KHOJKI,
null,
+ MULTANI,
KHUDAWADI,
GRANTHA,
null,
@@ -3377,15 +3480,20 @@
null,
TAKRI,
null,
+ AHOM,
+ null,
WARANG_CITI,
null,
PAU_CIN_HAU,
null,
CUNEIFORM,
CUNEIFORM_NUMBERS_AND_PUNCTUATION,
+ EARLY_DYNASTIC_CUNEIFORM,
null,
EGYPTIAN_HIEROGLYPHS,
null,
+ ANATOLIAN_HIEROGLYPHS,
+ null,
BAMUM_SUPPLEMENT,
MRO,
null,
@@ -3407,6 +3515,7 @@
COUNTING_ROD_NUMERALS,
null,
MATHEMATICAL_ALPHANUMERIC_SYMBOLS,
+ SUTTON_SIGNWRITING,
null,
MENDE_KIKAKUI,
null,
@@ -3424,11 +3533,13 @@
ALCHEMICAL_SYMBOLS,
GEOMETRIC_SHAPES_EXTENDED,
SUPPLEMENTAL_ARROWS_C,
+ SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS,
null,
CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B,
null,
CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C,
CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D,
+ CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E,
null,
CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT,
null,
@@ -4214,6 +4325,42 @@
*/
WARANG_CITI,
+ /**
+ * Unicode script "Ahom".
+ * @since 1.9
+ */
+ AHOM,
+
+ /**
+ * Unicode script "Anatolian Hieroglyphs".
+ * @since 1.9
+ */
+ ANATOLIAN_HIEROGLYPHS,
+
+ /**
+ * Unicode script "Hatran".
+ * @since 1.9
+ */
+ HATRAN,
+
+ /**
+ * Unicode script "Multani".
+ * @since 1.9
+ */
+ MULTANI,
+
+ /**
+ * Unicode script "Old Hungarian".
+ * @since 1.9
+ */
+ OLD_HUNGARIAN,
+
+ /**
+ * Unicode script "SignWriting".
+ * @since 1.9
+ */
+ SIGNWRITING,
+
/**
* Unicode script "Unknown".
*/
@@ -4295,9 +4442,7 @@
0x0640, // 0640 ; COMMON
0x0641, // 0641..064A; ARABIC
0x064B, // 064B..0655; INHERITED
- 0x0656, // 0656..065F; ARABIC
- 0x0660, // 0660..0669; COMMON
- 0x066A, // 066A..066F; ARABIC
+ 0x0656, // 0656..066F; ARABIC
0x0670, // 0670 ; INHERITED
0x0671, // 0671..06DC; ARABIC
0x06DD, // 06DD ; COMMON
@@ -4320,9 +4465,9 @@
0x085C, // 085C..085D; UNKNOWN
0x085E, // 085E ; MANDAIC
0x085F, // 085F..089F; UNKNOWN
- 0x08A0, // 08A0..08B2; ARABIC
- 0x08B3, // 08B3..08E3; UNKNOWN
- 0x08E4, // 08E4..08FF; ARABIC
+ 0x08A0, // 08A0..08B4; ARABIC
+ 0x08B5, // 08B5..08E2; UNKNOWN
+ 0x08E3, // 08E3..08FF; ARABIC
0x0900, // 0900..0950; DEVANAGARI
0x0951, // 0951..0952; INHERITED
0x0953, // 0953..0963; DEVANAGARI
@@ -4413,7 +4558,9 @@
0x0AE0, // 0AE0..0AE3; GUJARATI
0x0AE4, // 0AE4..0AE5; UNKNOWN
0x0AE6, // 0AE6..0AF1; GUJARATI
- 0x0AF2, // 0AF2..0B00; UNKNOWN
+ 0x0AF2, // 0AF2..0AF8; UNKNOWN
+ 0x0AF9, // 0AF9 ; GUJARATI
+ 0x0AFA, // 0AFA..0B00; UNKNOWN
0x0B01, // 0B01..0B03; ORIYA
0x0B04, // 0B04 ; UNKNOWN
0x0B05, // 0B05..0B0C; ORIYA
@@ -4492,8 +4639,8 @@
0x0C4E, // 0C4E..0C54; UNKNOWN
0x0C55, // 0C55..0C56; TELUGU
0x0C57, // 0C57 ; UNKNOWN
- 0x0C58, // 0C58..0C59; TELUGU
- 0x0C5A, // 0C5A..0C5F; UNKNOWN
+ 0x0C58, // 0C58..0C5A; TELUGU
+ 0x0C5B, // 0C5B..0C5F; UNKNOWN
0x0C60, // 0C60..0C63; TELUGU
0x0C64, // 0C64..0C65; UNKNOWN
0x0C66, // 0C66..0C6F; TELUGU
@@ -4543,8 +4690,8 @@
0x0D4A, // 0D4A..0D4E; MALAYALAM
0x0D4F, // 0D4F..0D56; UNKNOWN
0x0D57, // 0D57 ; MALAYALAM
- 0x0D58, // 0D58..0D5F; UNKNOWN
- 0x0D60, // 0D60..0D63; MALAYALAM
+ 0x0D58, // 0D58..0D5E; UNKNOWN
+ 0x0D5F, // 0D5F..0D63; MALAYALAM
0x0D64, // 0D64..0D65; UNKNOWN
0x0D66, // 0D66..0D75; MALAYALAM
0x0D76, // 0D76..0D78; UNKNOWN
@@ -4676,8 +4823,10 @@
0x137D, // 137D..137F; UNKNOWN
0x1380, // 1380..1399; ETHIOPIC
0x139A, // 139A..139F; UNKNOWN
- 0x13A0, // 13A0..13F4; CHEROKEE
- 0x13F5, // 13F5..13FF; UNKNOWN
+ 0x13A0, // 13A0..13F5; CHEROKEE
+ 0x13F6, // 13F6..13F7; UNKNOWN
+ 0x13F8, // 13F8..13FD; CHEROKEE
+ 0x13FE, // 13FE..13FF; UNKNOWN
0x1400, // 1400..167F; CANADIAN_ABORIGINAL
0x1680, // 1680..169C; OGHAM
0x169D, // 169D..169F; UNKNOWN
@@ -4846,8 +4995,8 @@
0x208F, // 208F ; UNKNOWN
0x2090, // 2090..209C; LATIN
0x209D, // 209D..209F; UNKNOWN
- 0x20A0, // 20A0..20BD; COMMON
- 0x20BE, // 20BE..20CF; UNKNOWN
+ 0x20A0, // 20A0..20BE; COMMON
+ 0x20BF, // 20BF..20CF; UNKNOWN
0x20D0, // 20D0..20F0; INHERITED
0x20F1, // 20F1..20FF; UNKNOWN
0x2100, // 2100..2125; COMMON
@@ -4860,8 +5009,8 @@
0x214E, // 214E ; LATIN
0x214F, // 214F..215F; COMMON
0x2160, // 2160..2188; LATIN
- 0x2189, // 2189 ; COMMON
- 0x218A, // 218A..218F; UNKNOWN
+ 0x2189, // 2189..218B; COMMON
+ 0x218C, // 218C..218F; UNKNOWN
0x2190, // 2190..23FA; COMMON
0x23FB, // 23FB..23FF; UNKNOWN
0x2400, // 2400..2426; COMMON
@@ -4879,7 +5028,9 @@
0x2BBD, // 2BBD..2BC8; COMMON
0x2BC9, // 2BC9 ; UNKNOWN
0x2BCA, // 2BCA..2BD1; COMMON
- 0x2BD2, // 2BD2..2BFF; UNKNOWN
+ 0x2BD2, // 2BD2..2BEB; UNKNOWN
+ 0x2BEC, // 2BEC..2BEF; COMMON
+ 0x2BF0, // 2BF0..2BFF; UNKNOWN
0x2C00, // 2C00..2C2E; GLAGOLITIC
0x2C2F, // 2C2F ; UNKNOWN
0x2C30, // 2C30..2C5E; GLAGOLITIC
@@ -4972,8 +5123,8 @@
0x3400, // 3400..4DB5; HAN
0x4DB6, // 4DB6..4DBF; UNKNOWN
0x4DC0, // 4DC0..4DFF; COMMON
- 0x4E00, // 4E00..9FCC; HAN
- 0x9FCD, // 9FCD..9FFF; UNKNOWN
+ 0x4E00, // 4E00..9FD5; HAN
+ 0x9FD6, // 9FD6..9FFF; UNKNOWN
0xA000, // A000..A48C; YI
0xA48D, // A48D..A48F; UNKNOWN
0xA490, // A490..A4C6; YI
@@ -4981,20 +5132,16 @@
0xA4D0, // A4D0..A4FF; LISU
0xA500, // A500..A62B; VAI
0xA62C, // A62C..A63F; UNKNOWN
- 0xA640, // A640..A69D; CYRILLIC
- 0xA69E, // A69E ; UNKNOWN
- 0xA69F, // A69F ; CYRILLIC
+ 0xA640, // A640..A69F; CYRILLIC
0xA6A0, // A6A0..A6F7; BAMUM
0xA6F8, // A6F8..A6FF; UNKNOWN
0xA700, // A700..A721; COMMON
0xA722, // A722..A787; LATIN
0xA788, // A788..A78A; COMMON
- 0xA78B, // A78B..A78E; LATIN
- 0xA78F, // A78F ; UNKNOWN
- 0xA790, // A790..A7AD; LATIN
+ 0xA78B, // A78B..A7AD; LATIN
0xA7AE, // A7AE..A7AF; UNKNOWN
- 0xA7B0, // A7B0..A7B1; LATIN
- 0xA7B2, // A7B2..A7F6; UNKNOWN
+ 0xA7B0, // A7B0..A7B7; LATIN
+ 0xA7B8, // A7B8..A7F6; UNKNOWN
0xA7F7, // A7F7..A7FF; LATIN
0xA800, // A800..A82B; SYLOTI_NAGRI
0xA82C, // A82C..A82F; UNKNOWN
@@ -5006,8 +5153,8 @@
0xA8C5, // A8C5..A8CD; UNKNOWN
0xA8CE, // A8CE..A8D9; SAURASHTRA
0xA8DA, // A8DA..A8DF; UNKNOWN
- 0xA8E0, // A8E0..A8FB; DEVANAGARI
- 0xA8FC, // A8FC..A8FF; UNKNOWN
+ 0xA8E0, // A8E0..A8FD; DEVANAGARI
+ 0xA8FE, // A8FE..A8FF; UNKNOWN
0xA900, // A900..A92D; KAYAH_LI
0xA92E, // A92E ; COMMON
0xA92F, // A92F ; KAYAH_LI
@@ -5049,11 +5196,10 @@
0xAB2F, // AB2F ; UNKNOWN
0xAB30, // AB30..AB5A; LATIN
0xAB5B, // AB5B ; COMMON
- 0xAB5C, // AB5C..AB5F; LATIN
- 0xAB60, // AB60..AB63; UNKNOWN
- 0xAB64, // AB64 ; LATIN
+ 0xAB5C, // AB5C..AB64; LATIN
0xAB65, // AB65 ; GREEK
- 0xAB66, // AB66..ABBF; UNKNOWN
+ 0xAB66, // AB66..AB6F; UNKNOWN
+ 0xAB70, // AB70..ABBF; CHEROKEE
0xABC0, // ABC0..ABED; MEETEI_MAYEK
0xABEE, // ABEE..ABEF; UNKNOWN
0xABF0, // ABF0..ABF9; MEETEI_MAYEK
@@ -5098,7 +5244,7 @@
0xFE10, // FE10..FE19; COMMON
0xFE1A, // FE1A..FE1F; UNKNOWN
0xFE20, // FE20..FE2D; INHERITED
- 0xFE2E, // FE2E..FE2F; UNKNOWN
+ 0xFE2E, // FE2E..FE2F; CYRILLIC
0xFE30, // FE30..FE52; COMMON
0xFE53, // FE53 ; UNKNOWN
0xFE54, // FE54..FE66; COMMON
@@ -5220,7 +5366,12 @@
0x10880, // 10880..1089E; NABATAEAN
0x1089F, // 1089F..108A6; UNKNOWN
0x108A7, // 108A7..108AF; NABATAEAN
- 0x108B0, // 108B0..108FF; UNKNOWN
+ 0x108B0, // 108B0..108DF; UNKNOWN
+ 0x108E0, // 108E0..108F2; HATRAN
+ 0x108F3, // 108F3 ; UNKNOWN
+ 0x108F4, // 108F4..108F5; HATRAN
+ 0x108F6, // 108F6..108FA; UNKNOWN
+ 0x108FB, // 108FB..108FF; HATRAN
0x10900, // 10900..1091B; PHOENICIAN
0x1091C, // 1091C..1091E; UNKNOWN
0x1091F, // 1091F ; PHOENICIAN
@@ -5230,9 +5381,10 @@
0x10940, // 10940..1097F; UNKNOWN
0x10980, // 10980..1099F; MEROITIC_HIEROGLYPHS
0x109A0, // 109A0..109B7; MEROITIC_CURSIVE
- 0x109B8, // 109B8..109BD; UNKNOWN
- 0x109BE, // 109BE..109BF; MEROITIC_CURSIVE
- 0x109C0, // 109C0..109FF; UNKNOWN
+ 0x109B8, // 109B8..109BB; UNKNOWN
+ 0x109BC, // 109BC..109CF; MEROITIC_CURSIVE
+ 0x109D0, // 109D0..109D1; UNKNOWN
+ 0x109D2, // 109D2..109FF; MEROITIC_CURSIVE
0x10A00, // 10A00..10A03; KHAROSHTHI
0x10A04, // 10A04 ; UNKNOWN
0x10A05, // 10A05..10A06; KHAROSHTHI
@@ -5272,7 +5424,13 @@
0x10BA9, // 10BA9..10BAF; PSALTER_PAHLAVI
0x10BB0, // 10BB0..10BFF; UNKNOWN
0x10C00, // 10C00..10C48; OLD_TURKIC
- 0x10C49, // 10C49..10E5F; UNKNOWN
+ 0x10C49, // 10C49..10C7F; UNKNOWN
+ 0x10C80, // 10C80..10CB2; OLD_HUNGARIAN
+ 0x10CB3, // 10CB3..10CBF; UNKNOWN
+ 0x10CC0, // 10CC0..10CF2; OLD_HUNGARIAN
+ 0x10CF3, // 10CF3..10CF9; UNKNOWN
+ 0x10CFA, // 10CFA..10CFF; OLD_HUNGARIAN
+ 0x10D00, // 10D00..10E5F; UNKNOWN
0x10E60, // 10E60..10E7E; ARABIC
0x10E7F, // 10E7F..10FFF; UNKNOWN
0x11000, // 11000..1104D; BRAHMI
@@ -5292,23 +5450,31 @@
0x11144, // 11144..1114F; UNKNOWN
0x11150, // 11150..11176; MAHAJANI
0x11177, // 11177..1117F; UNKNOWN
- 0x11180, // 11180..111C8; SHARADA
- 0x111C9, // 111C9..111CC; UNKNOWN
- 0x111CD, // 111CD ; SHARADA
+ 0x11180, // 11180..111CD; SHARADA
0x111CE, // 111CE..111CF; UNKNOWN
- 0x111D0, // 111D0..111DA; SHARADA
- 0x111DB, // 111DB..111E0; UNKNOWN
+ 0x111D0, // 111D0..111DF; SHARADA
+ 0x111E0, // 111E0 ; UNKNOWN
0x111E1, // 111E1..111F4; SINHALA
0x111F5, // 111F5..111FF; UNKNOWN
0x11200, // 11200..11211; KHOJKI
0x11212, // 11212 ; UNKNOWN
0x11213, // 11213..1123D; KHOJKI
- 0x1123E, // 1123E..112AF; UNKNOWN
+ 0x1123E, // 1123E..1127F; UNKNOWN
+ 0x11280, // 11280..11286; MULTANI
+ 0x11287, // 11287 ; UNKNOWN
+ 0x11288, // 11288 ; MULTANI
+ 0x11289, // 11289 ; UNKNOWN
+ 0x1128A, // 1128A..1128D; MULTANI
+ 0x1128E, // 1128E ; UNKNOWN
+ 0x1128F, // 1128F..1129D; MULTANI
+ 0x1129E, // 1129E ; UNKNOWN
+ 0x1129F, // 1129F..112A9; MULTANI
+ 0x112AA, // 112AA..112AF; UNKNOWN
0x112B0, // 112B0..112EA; KHUDAWADI
0x112EB, // 112EB..112EF; UNKNOWN
0x112F0, // 112F0..112F9; KHUDAWADI
- 0x112FA, // 112FA..11300; UNKNOWN
- 0x11301, // 11301..11303; GRANTHA
+ 0x112FA, // 112FA..112FF; UNKNOWN
+ 0x11300, // 11300..11303; GRANTHA
0x11304, // 11304 ; UNKNOWN
0x11305, // 11305..1130C; GRANTHA
0x1130D, // 1130D..1130E; UNKNOWN
@@ -5327,7 +5493,9 @@
0x11347, // 11347..11348; GRANTHA
0x11349, // 11349..1134A; UNKNOWN
0x1134B, // 1134B..1134D; GRANTHA
- 0x1134E, // 1134E..11356; UNKNOWN
+ 0x1134E, // 1134E..1134F; UNKNOWN
+ 0x11350, // 11350 ; GRANTHA
+ 0x11351, // 11351..11356; UNKNOWN
0x11357, // 11357 ; GRANTHA
0x11358, // 11358..1135C; UNKNOWN
0x1135D, // 1135D..11363; GRANTHA
@@ -5342,8 +5510,8 @@
0x114DA, // 114DA..1157F; UNKNOWN
0x11580, // 11580..115B5; SIDDHAM
0x115B6, // 115B6..115B7; UNKNOWN
- 0x115B8, // 115B8..115C9; SIDDHAM
- 0x115CA, // 115CA..115FF; UNKNOWN
+ 0x115B8, // 115B8..115DD; SIDDHAM
+ 0x115DE, // 115DE..115FF; UNKNOWN
0x11600, // 11600..11644; MODI
0x11645, // 11645..1164F; UNKNOWN
0x11650, // 11650..11659; MODI
@@ -5351,21 +5519,31 @@
0x11680, // 11680..116B7; TAKRI
0x116B8, // 116B8..116BF; UNKNOWN
0x116C0, // 116C0..116C9; TAKRI
- 0x116CA, // 116CA..1189F; UNKNOWN
+ 0x116CA, // 116CA..116FF; UNKNOWN
+ 0x11700, // 11700..11719; AHOM
+ 0x1171A, // 1171A..1171C; UNKNOWN
+ 0x1171D, // 1171D..1172B; AHOM
+ 0x1172C, // 1172C..1172F; UNKNOWN
+ 0x11730, // 11730..1173F; AHOM
+ 0x11740, // 11740..1189F; UNKNOWN
0x118A0, // 118A0..118F2; WARANG_CITI
0x118F3, // 118F3..118FE; UNKNOWN
0x118FF, // 118FF ; WARANG_CITI
0x11900, // 11900..11ABF; UNKNOWN
0x11AC0, // 11AC0..11AF8; PAU_CIN_HAU
0x11AF9, // 11AF9..11FFF; UNKNOWN
- 0x12000, // 12000..12398; CUNEIFORM
- 0x12399, // 12399..123FF; UNKNOWN
+ 0x12000, // 12000..12399; CUNEIFORM
+ 0x1239A, // 1239A..123FF; UNKNOWN
0x12400, // 12400..1246E; CUNEIFORM
0x1246F, // 1246F ; UNKNOWN
0x12470, // 12470..12474; CUNEIFORM
- 0x12475, // 12475..12FFF; UNKNOWN
+ 0x12475, // 12475..1247F; UNKNOWN
+ 0x12480, // 12480..12543; CUNEIFORM
+ 0x12544, // 12544..12FFF; UNKNOWN
0x13000, // 13000..1342E; EGYPTIAN_HIEROGLYPHS
- 0x1342F, // 1342F..167FF; UNKNOWN
+ 0x1342F, // 1342F..143FF; UNKNOWN
+ 0x14400, // 14400..14646; ANATOLIAN_HIEROGLYPHS
+ 0x14647, // 14647..167FF; UNKNOWN
0x16800, // 16800..16A38; BAMUM
0x16A39, // 16A39..16A3F; UNKNOWN
0x16A40, // 16A40..16A5E; MRO
@@ -5420,8 +5598,8 @@
0x1D185, // 1D185..1D18B; INHERITED
0x1D18C, // 1D18C..1D1A9; COMMON
0x1D1AA, // 1D1AA..1D1AD; INHERITED
- 0x1D1AE, // 1D1AE..1D1DD; COMMON
- 0x1D1DE, // 1D1DE..1D1FF; UNKNOWN
+ 0x1D1AE, // 1D1AE..1D1E8; COMMON
+ 0x1D1E9, // 1D1E9..1D1FF; UNKNOWN
0x1D200, // 1D200..1D245; GREEK
0x1D246, // 1D246..1D2FF; UNKNOWN
0x1D300, // 1D300..1D356; COMMON
@@ -5469,7 +5647,12 @@
0x1D6A8, // 1D6A8..1D7CB; COMMON
0x1D7CC, // 1D7CC..1D7CD; UNKNOWN
0x1D7CE, // 1D7CE..1D7FF; COMMON
- 0x1D800, // 1D800..1E7FF; UNKNOWN
+ 0x1D800, // 1D800..1DA8B; SIGNWRITING
+ 0x1DA8C, // 1DA8C..1DA9A; UNKNOWN
+ 0x1DA9B, // 1DA9B..1DA9F; SIGNWRITING
+ 0x1DAA0, // 1DAA0 ; UNKNOWN
+ 0x1DAA1, // 1DAA1..1DAAF; SIGNWRITING
+ 0x1DAB0, // 1DAB0..1E7FF; UNKNOWN
0x1E800, // 1E800..1E8C4; MENDE_KIKAKUI
0x1E8C5, // 1E8C5..1E8C6; UNKNOWN
0x1E8C7, // 1E8C7..1E8D6; MENDE_KIKAKUI
@@ -5572,26 +5755,12 @@
0x1F249, // 1F249..1F24F; UNKNOWN
0x1F250, // 1F250..1F251; COMMON
0x1F252, // 1F252..1F2FF; UNKNOWN
- 0x1F300, // 1F300..1F32C; COMMON
- 0x1F32D, // 1F32D..1F32F; UNKNOWN
- 0x1F330, // 1F330..1F37D; COMMON
- 0x1F37E, // 1F37E..1F37F; UNKNOWN
- 0x1F380, // 1F380..1F3CE; COMMON
- 0x1F3CF, // 1F3CF..1F3D3; UNKNOWN
- 0x1F3D4, // 1F3D4..1F3F7; COMMON
- 0x1F3F8, // 1F3F8..1F3FF; UNKNOWN
- 0x1F400, // 1F400..1F4FE; COMMON
- 0x1F4FF, // 1F4FF ; UNKNOWN
- 0x1F500, // 1F500..1F54A; COMMON
- 0x1F54B, // 1F54B..1F54F; UNKNOWN
- 0x1F550, // 1F550..1F579; COMMON
+ 0x1F300, // 1F300..1F579; COMMON
0x1F57A, // 1F57A ; UNKNOWN
0x1F57B, // 1F57B..1F5A3; COMMON
0x1F5A4, // 1F5A4 ; UNKNOWN
- 0x1F5A5, // 1F5A5..1F642; COMMON
- 0x1F643, // 1F643..1F644; UNKNOWN
- 0x1F645, // 1F645..1F6CF; COMMON
- 0x1F6D0, // 1F6D0..1F6DF; UNKNOWN
+ 0x1F5A5, // 1F5A5..1F6D0; COMMON
+ 0x1F6D1, // 1F6D1..1F6DF; UNKNOWN
0x1F6E0, // 1F6E0..1F6EC; COMMON
0x1F6ED, // 1F6ED..1F6EF; UNKNOWN
0x1F6F0, // 1F6F0..1F6F3; COMMON
@@ -5609,13 +5778,21 @@
0x1F860, // 1F860..1F887; COMMON
0x1F888, // 1F888..1F88F; UNKNOWN
0x1F890, // 1F890..1F8AD; COMMON
- 0x1F8AE, // 1F8AE..1FFFF; UNKNOWN
+ 0x1F8AE, // 1F8AE..1F90F; UNKNOWN
+ 0x1F910, // 1F910..1F918; COMMON
+ 0x1F919, // 1F919..1F97F; UNKNOWN
+ 0x1F980, // 1F980..1F984; COMMON
+ 0x1F985, // 1F985..1F9BF; UNKNOWN
+ 0x1F9C0, // 1F9C0 ; COMMON
+ 0x1F9C1, // 1F9C1..1FFFF; UNKNOWN
0x20000, // 20000..2A6D6; HAN
0x2A6D7, // 2A6D7..2A6FF; UNKNOWN
0x2A700, // 2A700..2B734; HAN
0x2B735, // 2B735..2B73F; UNKNOWN
0x2B740, // 2B740..2B81D; HAN
- 0x2B81E, // 2B81E..2F7FF; UNKNOWN
+ 0x2B81E, // 2B81E..2B81F; UNKNOWN
+ 0x2B820, // 2B820..2CEA1; HAN
+ 0x2CEA2, // 2CEA2..2F7FF; UNKNOWN
0x2F800, // 2F800..2FA1D; HAN
0x2FA1E, // 2FA1E..E0000; UNKNOWN
0xE0001, // E0001 ; COMMON
@@ -5702,9 +5879,7 @@
COMMON, // 0640
ARABIC, // 0641..064A
INHERITED, // 064B..0655
- ARABIC, // 0656..065F
- COMMON, // 0660..0669
- ARABIC, // 066A..066F
+ ARABIC, // 0656..066F
INHERITED, // 0670
ARABIC, // 0671..06DC
COMMON, // 06DD
@@ -5727,9 +5902,9 @@
UNKNOWN, // 085C..085D
MANDAIC, // 085E
UNKNOWN, // 085F..089F
- ARABIC, // 08A0..08B2
- UNKNOWN, // 08B3..08E3
- ARABIC, // 08E4..08FF
+ ARABIC, // 08A0..08B4
+ UNKNOWN, // 08B5..08E2
+ ARABIC, // 08E3..08FF
DEVANAGARI, // 0900..0950
INHERITED, // 0951..0952
DEVANAGARI, // 0953..0963
@@ -5820,7 +5995,9 @@
GUJARATI, // 0AE0..0AE3
UNKNOWN, // 0AE4..0AE5
GUJARATI, // 0AE6..0AF1
- UNKNOWN, // 0AF2..0B00
+ UNKNOWN, // 0AF2..0AF8
+ GUJARATI, // 0AF9
+ UNKNOWN, // 0AFA..0B00
ORIYA, // 0B01..0B03
UNKNOWN, // 0B04
ORIYA, // 0B05..0B0C
@@ -5899,8 +6076,8 @@
UNKNOWN, // 0C4E..0C54
TELUGU, // 0C55..0C56
UNKNOWN, // 0C57
- TELUGU, // 0C58..0C59
- UNKNOWN, // 0C5A..0C5F
+ TELUGU, // 0C58..0C5A
+ UNKNOWN, // 0C5B..0C5F
TELUGU, // 0C60..0C63
UNKNOWN, // 0C64..0C65
TELUGU, // 0C66..0C6F
@@ -5950,8 +6127,8 @@
MALAYALAM, // 0D4A..0D4E
UNKNOWN, // 0D4F..0D56
MALAYALAM, // 0D57
- UNKNOWN, // 0D58..0D5F
- MALAYALAM, // 0D60..0D63
+ UNKNOWN, // 0D58..0D5E
+ MALAYALAM, // 0D5F..0D63
UNKNOWN, // 0D64..0D65
MALAYALAM, // 0D66..0D75
UNKNOWN, // 0D76..0D78
@@ -6083,8 +6260,10 @@
UNKNOWN, // 137D..137F
ETHIOPIC, // 1380..1399
UNKNOWN, // 139A..139F
- CHEROKEE, // 13A0..13F4
- UNKNOWN, // 13F5..13FF
+ CHEROKEE, // 13A0..13F5
+ UNKNOWN, // 13F6..13F7
+ CHEROKEE, // 13F8..13FD
+ UNKNOWN, // 13FE..13FF
CANADIAN_ABORIGINAL, // 1400..167F
OGHAM, // 1680..169C
UNKNOWN, // 169D..169F
@@ -6253,8 +6432,8 @@
UNKNOWN, // 208F
LATIN, // 2090..209C
UNKNOWN, // 209D..209F
- COMMON, // 20A0..20BD
- UNKNOWN, // 20BE..20CF
+ COMMON, // 20A0..20BE
+ UNKNOWN, // 20BF..20CF
INHERITED, // 20D0..20F0
UNKNOWN, // 20F1..20FF
COMMON, // 2100..2125
@@ -6267,8 +6446,8 @@
LATIN, // 214E
COMMON, // 214F..215F
LATIN, // 2160..2188
- COMMON, // 2189
- UNKNOWN, // 218A..218F
+ COMMON, // 2189..218B
+ UNKNOWN, // 218C..218F
COMMON, // 2190..23FA
UNKNOWN, // 23FB..23FF
COMMON, // 2400..2426
@@ -6286,7 +6465,9 @@
COMMON, // 2BBD..2BC8
UNKNOWN, // 2BC9
COMMON, // 2BCA..2BD1
- UNKNOWN, // 2BD2..2BFF
+ UNKNOWN, // 2BD2..2BEB
+ COMMON, // 2BEC..2BEF
+ UNKNOWN, // 2BF0..2BFF
GLAGOLITIC, // 2C00..2C2E
UNKNOWN, // 2C2F
GLAGOLITIC, // 2C30..2C5E
@@ -6379,8 +6560,8 @@
HAN, // 3400..4DB5
UNKNOWN, // 4DB6..4DBF
COMMON, // 4DC0..4DFF
- HAN, // 4E00..9FCC
- UNKNOWN, // 9FCD..9FFF
+ HAN, // 4E00..9FD5
+ UNKNOWN, // 9FD6..9FFF
YI, // A000..A48C
UNKNOWN, // A48D..A48F
YI, // A490..A4C6
@@ -6388,20 +6569,16 @@
LISU, // A4D0..A4FF
VAI, // A500..A62B
UNKNOWN, // A62C..A63F
- CYRILLIC, // A640..A69D
- UNKNOWN, // A69E
- CYRILLIC, // A69F
+ CYRILLIC, // A640..A69F
BAMUM, // A6A0..A6F7
UNKNOWN, // A6F8..A6FF
COMMON, // A700..A721
LATIN, // A722..A787
COMMON, // A788..A78A
- LATIN, // A78B..A78E
- UNKNOWN, // A78F
- LATIN, // A790..A7AD
+ LATIN, // A78B..A7AD
UNKNOWN, // A7AE..A7AF
- LATIN, // A7B0..A7B1
- UNKNOWN, // A7B2..A7F6
+ LATIN, // A7B0..A7B7
+ UNKNOWN, // A7B8..A7F6
LATIN, // A7F7..A7FF
SYLOTI_NAGRI, // A800..A82B
UNKNOWN, // A82C..A82F
@@ -6413,8 +6590,8 @@
UNKNOWN, // A8C5..A8CD
SAURASHTRA, // A8CE..A8D9
UNKNOWN, // A8DA..A8DF
- DEVANAGARI, // A8E0..A8FB
- UNKNOWN, // A8FC..A8FF
+ DEVANAGARI, // A8E0..A8FD
+ UNKNOWN, // A8FE..A8FF
KAYAH_LI, // A900..A92D
COMMON, // A92E
KAYAH_LI, // A92F
@@ -6456,11 +6633,10 @@
UNKNOWN, // AB2F
LATIN, // AB30..AB5A
COMMON, // AB5B
- LATIN, // AB5C..AB5F
- UNKNOWN, // AB60..AB63
- LATIN, // AB64
+ LATIN, // AB5C..AB64
GREEK, // AB65
- UNKNOWN, // AB66..ABBF
+ UNKNOWN, // AB66..AB6F
+ CHEROKEE, // AB70..ABBF
MEETEI_MAYEK, // ABC0..ABED
UNKNOWN, // ABEE..ABEF
MEETEI_MAYEK, // ABF0..ABF9
@@ -6505,7 +6681,7 @@
COMMON, // FE10..FE19
UNKNOWN, // FE1A..FE1F
INHERITED, // FE20..FE2D
- UNKNOWN, // FE2E..FE2F
+ CYRILLIC, // FE2E..FE2F
COMMON, // FE30..FE52
UNKNOWN, // FE53
COMMON, // FE54..FE66
@@ -6627,7 +6803,12 @@
NABATAEAN, // 10880..1089E
UNKNOWN, // 1089F..108A6
NABATAEAN, // 108A7..108AF
- UNKNOWN, // 108B0..108FF
+ UNKNOWN, // 108B0..108DF
+ HATRAN, // 108E0..108F2
+ UNKNOWN, // 108F3
+ HATRAN, // 108F4..108F5
+ UNKNOWN, // 108F6..108FA
+ HATRAN, // 108FB..108FF
PHOENICIAN, // 10900..1091B
UNKNOWN, // 1091C..1091E
PHOENICIAN, // 1091F
@@ -6637,9 +6818,10 @@
UNKNOWN, // 10940..1097F
MEROITIC_HIEROGLYPHS, // 10980..1099F
MEROITIC_CURSIVE, // 109A0..109B7
- UNKNOWN, // 109B8..109BD
- MEROITIC_CURSIVE, // 109BE..109BF
- UNKNOWN, // 109C0..109FF
+ UNKNOWN, // 109B8..109BB
+ MEROITIC_CURSIVE, // 109BC..109CF
+ UNKNOWN, // 109D0..109D1
+ MEROITIC_CURSIVE, // 109D2..109FF
KHAROSHTHI, // 10A00..10A03
UNKNOWN, // 10A04
KHAROSHTHI, // 10A05..10A06
@@ -6679,7 +6861,13 @@
PSALTER_PAHLAVI, // 10BA9..10BAF
UNKNOWN, // 10BB0..10BFF
OLD_TURKIC, // 10C00..10C48
- UNKNOWN, // 10C49..10E5F
+ UNKNOWN, // 10C49..10C7F
+ OLD_HUNGARIAN, // 10C80..10CB2
+ UNKNOWN, // 10CB3..10CBF
+ OLD_HUNGARIAN, // 10CC0..10CF2
+ UNKNOWN, // 10CF3..10CF9
+ OLD_HUNGARIAN, // 10CFA..10CFF
+ UNKNOWN, // 10D00..10E5F
ARABIC, // 10E60..10E7E
UNKNOWN, // 10E7F..10FFF
BRAHMI, // 11000..1104D
@@ -6699,23 +6887,31 @@
UNKNOWN, // 11144..1114F
MAHAJANI, // 11150..11176
UNKNOWN, // 11177..1117F
- SHARADA, // 11180..111C8
- UNKNOWN, // 111C9..111CC
- SHARADA, // 111CD
+ SHARADA, // 11180..111CD
UNKNOWN, // 111CE..111CF
- SHARADA, // 111D0..111DA
- UNKNOWN, // 111DB..111E0
+ SHARADA, // 111D0..111DF
+ UNKNOWN, // 111E0
SINHALA, // 111E1..111F4
UNKNOWN, // 111F5..111FF
KHOJKI, // 11200..11211
UNKNOWN, // 11212
KHOJKI, // 11213..1123D
- UNKNOWN, // 1123E..112AF
+ UNKNOWN, // 1123E..1127F
+ MULTANI, // 11280..11286
+ UNKNOWN, // 11287
+ MULTANI, // 11288
+ UNKNOWN, // 11289
+ MULTANI, // 1128A..1128D
+ UNKNOWN, // 1128E
+ MULTANI, // 1128F..1129D
+ UNKNOWN, // 1129E
+ MULTANI, // 1129F..112A9
+ UNKNOWN, // 112AA..112AF
KHUDAWADI, // 112B0..112EA
UNKNOWN, // 112EB..112EF
KHUDAWADI, // 112F0..112F9
- UNKNOWN, // 112FA..11300
- GRANTHA, // 11301..11303
+ UNKNOWN, // 112FA..112FF
+ GRANTHA, // 11300..11303
UNKNOWN, // 11304
GRANTHA, // 11305..1130C
UNKNOWN, // 1130D..1130E
@@ -6734,7 +6930,9 @@
GRANTHA, // 11347..11348
UNKNOWN, // 11349..1134A
GRANTHA, // 1134B..1134D
- UNKNOWN, // 1134E..11356
+ UNKNOWN, // 1134E..1134F
+ GRANTHA, // 11350
+ UNKNOWN, // 11351..11356
GRANTHA, // 11357
UNKNOWN, // 11358..1135C
GRANTHA, // 1135D..11363
@@ -6749,8 +6947,8 @@
UNKNOWN, // 114DA..1157F
SIDDHAM, // 11580..115B5
UNKNOWN, // 115B6..115B7
- SIDDHAM, // 115B8..115C9
- UNKNOWN, // 115CA..115FF
+ SIDDHAM, // 115B8..115DD
+ UNKNOWN, // 115DE..115FF
MODI, // 11600..11644
UNKNOWN, // 11645..1164F
MODI, // 11650..11659
@@ -6758,21 +6956,31 @@
TAKRI, // 11680..116B7
UNKNOWN, // 116B8..116BF
TAKRI, // 116C0..116C9
- UNKNOWN, // 116CA..1189F
+ UNKNOWN, // 116CA..116FF
+ AHOM, // 11700..11719
+ UNKNOWN, // 1171A..1171C
+ AHOM, // 1171D..1172B
+ UNKNOWN, // 1172C..1172F
+ AHOM, // 11730..1173F
+ UNKNOWN, // 11740..1189F
WARANG_CITI, // 118A0..118F2
UNKNOWN, // 118F3..118FE
WARANG_CITI, // 118FF
UNKNOWN, // 11900..11ABF
PAU_CIN_HAU, // 11AC0..11AF8
UNKNOWN, // 11AF9..11FFF
- CUNEIFORM, // 12000..12398
- UNKNOWN, // 12399..123FF
+ CUNEIFORM, // 12000..12399
+ UNKNOWN, // 1239A..123FF
CUNEIFORM, // 12400..1246E
UNKNOWN, // 1246F
CUNEIFORM, // 12470..12474
- UNKNOWN, // 12475..12FFF
+ UNKNOWN, // 12475..1247F
+ CUNEIFORM, // 12480..12543
+ UNKNOWN, // 12544..12FFF
EGYPTIAN_HIEROGLYPHS, // 13000..1342E
- UNKNOWN, // 1342F..167FF
+ UNKNOWN, // 1342F..143FF
+ ANATOLIAN_HIEROGLYPHS, // 14400..14646
+ UNKNOWN, // 14647..167FF
BAMUM, // 16800..16A38
UNKNOWN, // 16A39..16A3F
MRO, // 16A40..16A5E
@@ -6827,8 +7035,8 @@
INHERITED, // 1D185..1D18B
COMMON, // 1D18C..1D1A9
INHERITED, // 1D1AA..1D1AD
- COMMON, // 1D1AE..1D1DD
- UNKNOWN, // 1D1DE..1D1FF
+ COMMON, // 1D1AE..1D1E8
+ UNKNOWN, // 1D1E9..1D1FF
GREEK, // 1D200..1D245
UNKNOWN, // 1D246..1D2FF
COMMON, // 1D300..1D356
@@ -6876,7 +7084,12 @@
COMMON, // 1D6A8..1D7CB
UNKNOWN, // 1D7CC..1D7CD
COMMON, // 1D7CE..1D7FF
- UNKNOWN, // 1D800..1E7FF
+ SIGNWRITING, // 1D800..1DA8B
+ UNKNOWN, // 1DA8C..1DA9A
+ SIGNWRITING, // 1DA9B..1DA9F
+ UNKNOWN, // 1DAA0
+ SIGNWRITING, // 1DAA1..1DAAF
+ UNKNOWN, // 1DAB0..1E7FF
MENDE_KIKAKUI, // 1E800..1E8C4
UNKNOWN, // 1E8C5..1E8C6
MENDE_KIKAKUI, // 1E8C7..1E8D6
@@ -6979,26 +7192,12 @@
UNKNOWN, // 1F249..1F24F
COMMON, // 1F250..1F251
UNKNOWN, // 1F252..1F2FF
- COMMON, // 1F300..1F32C
- UNKNOWN, // 1F32D..1F32F
- COMMON, // 1F330..1F37D
- UNKNOWN, // 1F37E..1F37F
- COMMON, // 1F380..1F3CE
- UNKNOWN, // 1F3CF..1F3D3
- COMMON, // 1F3D4..1F3F7
- UNKNOWN, // 1F3F8..1F3FF
- COMMON, // 1F400..1F4FE
- UNKNOWN, // 1F4FF
- COMMON, // 1F500..1F54A
- UNKNOWN, // 1F54B..1F54F
- COMMON, // 1F550..1F579
+ COMMON, // 1F300..1F579
UNKNOWN, // 1F57A
COMMON, // 1F57B..1F5A3
UNKNOWN, // 1F5A4
- COMMON, // 1F5A5..1F642
- UNKNOWN, // 1F643..1F644
- COMMON, // 1F645..1F6CF
- UNKNOWN, // 1F6D0..1F6DF
+ COMMON, // 1F5A5..1F6D0
+ UNKNOWN, // 1F6D1..1F6DF
COMMON, // 1F6E0..1F6EC
UNKNOWN, // 1F6ED..1F6EF
COMMON, // 1F6F0..1F6F3
@@ -7016,13 +7215,21 @@
COMMON, // 1F860..1F887
UNKNOWN, // 1F888..1F88F
COMMON, // 1F890..1F8AD
- UNKNOWN, // 1F8AE..1FFFF
+ UNKNOWN, // 1F8AE..1F90F
+ COMMON, // 1F910..1F918
+ UNKNOWN, // 1F919..1F97F
+ COMMON, // 1F980..1F984
+ UNKNOWN, // 1F985..1F9BF
+ COMMON, // 1F9C0
+ UNKNOWN, // 1F9C1..1FFFF
HAN, // 20000..2A6D6
UNKNOWN, // 2A6D7..2A6FF
HAN, // 2A700..2B734
UNKNOWN, // 2B735..2B73F
HAN, // 2B740..2B81D
- UNKNOWN, // 2B81E..2F7FF
+ UNKNOWN, // 2B81E..2B81F
+ HAN, // 2B820..2CEA1
+ UNKNOWN, // 2CEA2..2F7FF
HAN, // 2F800..2FA1D
UNKNOWN, // 2FA1E..E0000
COMMON, // E0001
@@ -7035,8 +7242,9 @@
private static HashMap<String, Character.UnicodeScript> aliases;
static {
- aliases = new HashMap<>(128);
+ aliases = new HashMap<>(134);
aliases.put("AGHB", CAUCASIAN_ALBANIAN);
+ aliases.put("AHOM", AHOM);
aliases.put("ARAB", ARABIC);
aliases.put("ARMI", IMPERIAL_ARAMAIC);
aliases.put("ARMN", ARMENIAN);
@@ -7075,11 +7283,14 @@
aliases.put("HANG", HANGUL);
aliases.put("HANI", HAN);
aliases.put("HANO", HANUNOO);
+ aliases.put("HATR", HATRAN);
aliases.put("HEBR", HEBREW);
aliases.put("HIRA", HIRAGANA);
+ aliases.put("HLUW", ANATOLIAN_HIEROGLYPHS);
aliases.put("HMNG", PAHAWH_HMONG);
// it appears we don't have the KATAKANA_OR_HIRAGANA
//aliases.put("HRKT", KATAKANA_OR_HIRAGANA);
+ aliases.put("HUNG", OLD_HUNGARIAN);
aliases.put("ITAL", OLD_ITALIC);
aliases.put("JAVA", JAVANESE);
aliases.put("KALI", KAYAH_LI);
@@ -7110,6 +7321,7 @@
aliases.put("MONG", MONGOLIAN);
aliases.put("MROO", MRO);
aliases.put("MTEI", MEETEI_MAYEK);
+ aliases.put("MULT", MULTANI);
aliases.put("MYMR", MYANMAR);
aliases.put("NARB", OLD_NORTH_ARABIAN);
aliases.put("NBAT", NABATAEAN);
@@ -7133,6 +7345,7 @@
aliases.put("SAMR", SAMARITAN);
aliases.put("SARB", OLD_SOUTH_ARABIAN);
aliases.put("SAUR", SAURASHTRA);
+ aliases.put("SGNW", SIGNWRITING);
aliases.put("SHAW", SHAVIAN);
aliases.put("SHRD", SHARADA);
aliases.put("SIDD", SIDDHAM);
@@ -9356,7 +9569,7 @@
* <td>{@code FORM FEED}</td></tr>
* <tr><td>{@code '\r'}</td> <td>{@code U+000D}</td>
* <td>{@code CARRIAGE RETURN}</td></tr>
- * <tr><td>{@code ' '}</td> <td>{@code U+0020}</td>
+ * <tr><td>{@code ' '}</td> <td>{@code U+0020}</td>
* <td>{@code SPACE}</td></tr>
* </table>
*
--- a/jdk/src/java.base/share/classes/java/net/Inet4Address.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/net/Inet4Address.java Thu Oct 22 11:14:00 2015 -0700
@@ -117,11 +117,13 @@
holder().address = address;
}
}
+ holder().originalHostName = hostName;
}
Inet4Address(String hostName, int address) {
holder().hostName = hostName;
holder().family = IPv4;
holder().address = address;
+ holder().originalHostName = hostName;
}
/**
--- a/jdk/src/java.base/share/classes/java/net/InetAddress.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/net/InetAddress.java Thu Oct 22 11:14:00 2015 -0700
@@ -221,7 +221,7 @@
*
* Note: May define a new public method in the future if necessary.
*/
- private String originalHostName;
+ String originalHostName;
InetAddressHolder() {}
--- a/jdk/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template Thu Oct 22 11:14:00 2015 -0700
@@ -242,7 +242,7 @@
}
private long ix(int i) {
- return address + (i << $LG_BYTES_PER_VALUE$);
+ return address + ((long)i << $LG_BYTES_PER_VALUE$);
}
public $type$ get() {
@@ -261,7 +261,7 @@
public $Type$Buffer get($type$[] dst, int offset, int length) {
#if[rw]
- if ((length << $LG_BYTES_PER_VALUE$) > Bits.JNI_COPY_TO_ARRAY_THRESHOLD) {
+ if (((long)length << $LG_BYTES_PER_VALUE$) > Bits.JNI_COPY_TO_ARRAY_THRESHOLD) {
checkBounds(offset, length, dst.length);
int pos = position();
int lim = limit();
@@ -273,13 +273,13 @@
#if[!byte]
if (order() != ByteOrder.nativeOrder())
Bits.copyTo$Memtype$Array(ix(pos), dst,
- offset << $LG_BYTES_PER_VALUE$,
- length << $LG_BYTES_PER_VALUE$);
+ (long)offset << $LG_BYTES_PER_VALUE$,
+ (long)length << $LG_BYTES_PER_VALUE$);
else
#end[!byte]
Bits.copyToArray(ix(pos), dst, arrayBaseOffset,
- offset << $LG_BYTES_PER_VALUE$,
- length << $LG_BYTES_PER_VALUE$);
+ (long)offset << $LG_BYTES_PER_VALUE$,
+ (long)length << $LG_BYTES_PER_VALUE$);
position(pos + length);
} else {
super.get(dst, offset, length);
@@ -329,7 +329,7 @@
if (srem > rem)
throw new BufferOverflowException();
- unsafe.copyMemory(sb.ix(spos), ix(pos), srem << $LG_BYTES_PER_VALUE$);
+ unsafe.copyMemory(sb.ix(spos), ix(pos), (long)srem << $LG_BYTES_PER_VALUE$);
sb.position(spos + srem);
position(pos + srem);
} else if (src.hb != null) {
@@ -353,7 +353,7 @@
public $Type$Buffer put($type$[] src, int offset, int length) {
#if[rw]
- if ((length << $LG_BYTES_PER_VALUE$) > Bits.JNI_COPY_FROM_ARRAY_THRESHOLD) {
+ if (((long)length << $LG_BYTES_PER_VALUE$) > Bits.JNI_COPY_FROM_ARRAY_THRESHOLD) {
checkBounds(offset, length, src.length);
int pos = position();
int lim = limit();
@@ -364,12 +364,16 @@
#if[!byte]
if (order() != ByteOrder.nativeOrder())
- Bits.copyFrom$Memtype$Array(src, offset << $LG_BYTES_PER_VALUE$,
- ix(pos), length << $LG_BYTES_PER_VALUE$);
+ Bits.copyFrom$Memtype$Array(src,
+ (long)offset << $LG_BYTES_PER_VALUE$,
+ ix(pos),
+ (long)length << $LG_BYTES_PER_VALUE$);
else
#end[!byte]
- Bits.copyFromArray(src, arrayBaseOffset, offset << $LG_BYTES_PER_VALUE$,
- ix(pos), length << $LG_BYTES_PER_VALUE$);
+ Bits.copyFromArray(src, arrayBaseOffset,
+ (long)offset << $LG_BYTES_PER_VALUE$,
+ ix(pos),
+ (long)length << $LG_BYTES_PER_VALUE$);
position(pos + length);
} else {
super.put(src, offset, length);
@@ -387,7 +391,7 @@
assert (pos <= lim);
int rem = (pos <= lim ? lim - pos : 0);
- unsafe.copyMemory(ix(pos), ix(0), rem << $LG_BYTES_PER_VALUE$);
+ unsafe.copyMemory(ix(pos), ix(0), (long)rem << $LG_BYTES_PER_VALUE$);
position(rem);
limit(capacity());
discardMark();
--- a/jdk/src/java.base/share/classes/java/security/AlgorithmParameterGenerator.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/AlgorithmParameterGenerator.java Thu Oct 22 11:14:00 2015 -0700
@@ -138,6 +138,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the name of the algorithm this
* parameter generator is associated with.
* See the AlgorithmParameterGenerator section in the <a href=
--- a/jdk/src/java.base/share/classes/java/security/AlgorithmParameters.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/AlgorithmParameters.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -126,6 +126,13 @@
* {@code init}, using an appropriate parameter specification or
* parameter encoding.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the name of the algorithm requested.
* See the AlgorithmParameters section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameters">
--- a/jdk/src/java.base/share/classes/java/security/KeyFactory.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/KeyFactory.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -153,6 +153,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the name of the requested key algorithm.
* See the KeyFactory section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyFactory">
--- a/jdk/src/java.base/share/classes/java/security/KeyPairGenerator.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/KeyPairGenerator.java Thu Oct 22 11:14:00 2015 -0700
@@ -195,6 +195,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the standard string name of the algorithm.
* See the KeyPairGenerator section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyPairGenerator">
--- a/jdk/src/java.base/share/classes/java/security/KeyStore.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/KeyStore.java Thu Oct 22 11:14:00 2015 -0700
@@ -841,6 +841,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param type the type of keystore.
* See the KeyStore section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyStore">
--- a/jdk/src/java.base/share/classes/java/security/MessageDigest.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/MessageDigest.java Thu Oct 22 11:14:00 2015 -0700
@@ -146,6 +146,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the name of the algorithm requested.
* See the MessageDigest section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#MessageDigest">
--- a/jdk/src/java.base/share/classes/java/security/Policy.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/Policy.java Thu Oct 22 11:14:00 2015 -0700
@@ -355,6 +355,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param type the specified Policy type. See the Policy section in the
* <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#Policy">
--- a/jdk/src/java.base/share/classes/java/security/SecureRandom.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/SecureRandom.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -268,6 +268,13 @@
* This self-seeding will not occur if {@code setSeed} was
* previously called.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the name of the RNG algorithm.
* See the SecureRandom section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
--- a/jdk/src/java.base/share/classes/java/security/Signature.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/Signature.java Thu Oct 22 11:14:00 2015 -0700
@@ -203,6 +203,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the standard name of the algorithm requested.
* See the Signature section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#Signature">
--- a/jdk/src/java.base/share/classes/java/security/cert/CertPathBuilder.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertPathBuilder.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -142,6 +142,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the name of the requested {@code CertPathBuilder}
* algorithm. See the CertPathBuilder section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathBuilder">
--- a/jdk/src/java.base/share/classes/java/security/cert/CertPathValidator.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertPathValidator.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -143,6 +143,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the name of the requested {@code CertPathValidator}
* algorithm. See the CertPathValidator section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathValidator">
--- a/jdk/src/java.base/share/classes/java/security/cert/CertStore.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertStore.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -201,6 +201,13 @@
* Note that the specified {@code CertStoreParameters} object is
* cloned.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param type the name of the requested {@code CertStore} type.
* See the CertStore section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#CertStore">
--- a/jdk/src/java.base/share/classes/java/security/cert/CertificateFactory.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertificateFactory.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -163,6 +163,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param type the name of the requested certificate type.
* See the CertificateFactory section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#CertificateFactory">
--- a/jdk/src/java.base/share/classes/java/time/Instant.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/time/Instant.java Thu Oct 22 11:14:00 2015 -0700
@@ -758,7 +758,7 @@
throw new UnsupportedTemporalTypeException("Unit must divide into a standard day without remainder");
}
long nod = (seconds % LocalTime.SECONDS_PER_DAY) * LocalTime.NANOS_PER_SECOND + nanos;
- long result = (nod / dur) * dur;
+ long result = Math.floorDiv(nod, dur) * dur ;
return plusNanos(result - nod);
}
--- a/jdk/src/java.base/share/classes/java/util/Objects.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Objects.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -282,6 +282,43 @@
}
/**
+ * Returns the first argument if it is non-{@code null} and
+ * otherwise returns the non-{@code null} second argument.
+ *
+ * @param obj an object
+ * @param defaultObj a non-{@code null} object to return if the first argument
+ * is {@code null}
+ * @param <T> the type of the reference
+ * @return the first argument if it is non-{@code null} and
+ * otherwise the second argument if it is non-{@code null}
+ * @throws NullPointerException if both {@code obj} is null and
+ * {@code defaultObj} is {@code null}
+ * @since 9
+ */
+ public static <T> T nonNullElse(T obj, T defaultObj) {
+ return (obj != null) ? obj : requireNonNull(defaultObj, "defaultObj");
+ }
+
+ /**
+ * Returns the first argument if it is non-{@code null} and otherwise
+ * returns the non-{@code null} value of {@code supplier.get()}.
+ *
+ * @param obj an object
+ * @param supplier of a non-{@code null} object to return if the first argument
+ * is {@code null}
+ * @param <T> the type of the first argument and return type
+ * @return the first argument if it is non-{@code null} and otherwise
+ * the value from {@code supplier.get()} if it is non-{@code null}
+ * @throws NullPointerException if both {@code obj} is null and
+ * either the {@code supplier} is {@code null} or
+ * the {@code supplier.get()} value is {@code null}
+ * @since 9
+ */
+ public static <T> T nonNullElseGet(T obj, Supplier<? extends T> supplier) {
+ return (obj != null) ? obj : requireNonNull(requireNonNull(supplier, "supplier").get(), "supplier.get()");
+ }
+
+ /**
* Checks that the specified object reference is not {@code null} and
* throws a customized {@link NullPointerException} if it is.
*
--- a/jdk/src/java.base/share/classes/java/util/Optional.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Optional.java Thu Oct 22 11:14:00 2015 -0700
@@ -31,21 +31,22 @@
import java.util.stream.Stream;
/**
- * A container object which may or may not contain a non-null value.
- * If a value is present, {@code isPresent()} will return {@code true} and
- * {@code get()} will return the value.
+ * A container object which may or may not contain a non-{@code null} value.
+ * If a value is present, {@code isPresent()} returns {@code true} and
+ * {@code get()} returns the value.
*
* <p>Additional methods that depend on the presence or absence of a contained
* value are provided, such as {@link #orElse(java.lang.Object) orElse()}
- * (return a default value if value not present) and
- * {@link #ifPresent(java.util.function.Consumer) ifPresent()} (perform an
- * action if the value is present).
+ * (returns a default value if no value is present) and
+ * {@link #ifPresent(java.util.function.Consumer) ifPresent()} (performs an
+ * action if a value is present).
*
* <p>This is a <a href="../lang/doc-files/ValueBased.html">value-based</a>
* class; use of identity-sensitive operations (including reference equality
* ({@code ==}), identity hash code, or synchronization) on instances of
* {@code Optional} may have unpredictable results and should be avoided.
*
+ * @param <T> the type of value
* @since 1.8
*/
public final class Optional<T> {
@@ -71,14 +72,15 @@
/**
* Returns an empty {@code Optional} instance. No value is present for this
- * Optional.
+ * {@code Optional}.
*
- * @apiNote Though it may be tempting to do so, avoid testing if an object
- * is empty by comparing with {@code ==} against instances returned by
- * {@code Option.empty()}. There is no guarantee that it is a singleton.
+ * @apiNote
+ * Though it may be tempting to do so, avoid testing if an object is empty
+ * by comparing with {@code ==} against instances returned by
+ * {@code Optional.empty()}. There is no guarantee that it is a singleton.
* Instead, use {@link #isPresent()}.
*
- * @param <T> Type of the non-existent value
+ * @param <T> The type of the non-existent value
* @return an empty {@code Optional}
*/
public static<T> Optional<T> empty() {
@@ -88,47 +90,47 @@
}
/**
- * Constructs an instance with the value present.
+ * Constructs an instance with the described value.
*
- * @param value the non-null value to be present
- * @throws NullPointerException if value is null
+ * @param value the non-{@code null} value to describe
+ * @throws NullPointerException if value is {@code null}
*/
private Optional(T value) {
this.value = Objects.requireNonNull(value);
}
/**
- * Returns an {@code Optional} with the specified present non-null value.
+ * Returns an {@code Optional} describing the given non-{@code null}
+ * value.
*
- * @param <T> the class of the value
- * @param value the value to be present, which must be non-null
+ * @param value the value to describe, which must be non-{@code null}
+ * @param <T> the type of the value
* @return an {@code Optional} with the value present
- * @throws NullPointerException if value is null
+ * @throws NullPointerException if value is {@code null}
*/
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
/**
- * Returns an {@code Optional} describing the specified value, if non-null,
- * otherwise returns an empty {@code Optional}.
+ * Returns an {@code Optional} describing the given value, if
+ * non-{@code null}, otherwise returns an empty {@code Optional}.
*
- * @param <T> the class of the value
- * @param value the possibly-null value to describe
+ * @param value the possibly-{@code null} value to describe
+ * @param <T> the type of the value
* @return an {@code Optional} with a present value if the specified value
- * is non-null, otherwise an empty {@code Optional}
+ * is non-{@code null}, otherwise an empty {@code Optional}
*/
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
/**
- * If a value is present in this {@code Optional}, returns the value,
- * otherwise throws {@code NoSuchElementException}.
+ * If a value is present, returns the value, otherwise throws
+ * {@code NoSuchElementException}.
*
- * @return the non-null value held by this {@code Optional}
- * @throws NoSuchElementException if there is no value present
- *
+ * @return the non-{@code null} value described by this {@code Optional}
+ * @throws NoSuchElementException if no value is present
* @see Optional#isPresent()
*/
public T get() {
@@ -139,21 +141,21 @@
}
/**
- * Return {@code true} if there is a value present, otherwise {@code false}.
+ * If a value is present, returns {@code true}, otherwise {@code false}.
*
- * @return {@code true} if there is a value present, otherwise {@code false}
+ * @return {@code true} if a value is present, otherwise {@code false}
*/
public boolean isPresent() {
return value != null;
}
/**
- * If a value is present, perform the given action with the value,
- * otherwise do nothing.
+ * If a value is present, performs the given action with the value,
+ * otherwise does nothing.
*
- * @param action the action to be performed if a value is present
- * @throws NullPointerException if a value is present and {@code action} is
- * null
+ * @param action the action to be performed, if a value is present
+ * @throws NullPointerException if value is present and the given action is
+ * {@code null}
*/
public void ifPresent(Consumer<? super T> action) {
if (value != null) {
@@ -162,15 +164,16 @@
}
/**
- * If a value is present, perform the given action with the value,
- * otherwise perform the given empty-based action.
+ * If a value is present, performs the given action with the value,
+ * otherwise performs the given empty-based action.
*
- * @param action the action to be performed if a value is present
- * @param emptyAction the empty-based action to be performed if a value is
- * not present
- * @throws NullPointerException if a value is present and {@code action} is
- * null, or a value is not present and {@code emptyAction} is null.
- * @since 1.9
+ * @param action the action to be performed, if a value is present
+ * @param emptyAction the empty-based action to be performed, if no value is
+ * present
+ * @throws NullPointerException if a value is present and the given action
+ * is {@code null}, or no value is present and the given empty-based
+ * action is {@code null}.
+ * @since 9
*/
public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) {
if (value != null) {
@@ -182,14 +185,14 @@
/**
* If a value is present, and the value matches the given predicate,
- * return an {@code Optional} describing the value, otherwise return an
+ * returns an {@code Optional} describing the value, otherwise returns an
* empty {@code Optional}.
*
- * @param predicate a predicate to apply to the value, if present
- * @return an {@code Optional} describing the value of this {@code Optional}
- * if a value is present and the value matches the given predicate,
- * otherwise an empty {@code Optional}
- * @throws NullPointerException if the predicate is null
+ * @param predicate the predicate to apply to a value, if present
+ * @return an {@code Optional} describing the value of this
+ * {@code Optional}, if a value is present and the value matches the
+ * given predicate, otherwise an empty {@code Optional}
+ * @throws NullPointerException if the predicate is {@code null}
*/
public Optional<T> filter(Predicate<? super T> predicate) {
Objects.requireNonNull(predicate);
@@ -201,14 +204,18 @@
}
/**
- * If a value is present, apply the provided mapping function to it,
- * and if the result is non-null, return an {@code Optional} describing the
- * result. Otherwise return an empty {@code Optional}.
+ * If a value is present, returns an {@code Optional} describing (as if by
+ * {@link #ofNullable}) the result of applying the given mapping function to
+ * the value, otherwise returns an empty {@code Optional}.
*
- * @apiNote This method supports post-processing on optional values, without
+ * <p>If the mapping function returns a {@code null} result then this method
+ * returns an empty {@code Optional}.
+ *
+ * @apiNote
+ * This method supports post-processing on {@code Optional} values, without
* the need to explicitly check for a return status. For example, the
- * following code traverses a stream of file names, selects one that has
- * not yet been processed, and then opens that file, returning an
+ * following code traverses a stream of file names, selects one that has not
+ * yet been processed, and then opens that file, returning an
* {@code Optional<FileInputStream>}:
*
* <pre>{@code
@@ -222,12 +229,12 @@
* {@code map} returns an {@code Optional<FileInputStream>} for the desired
* file if one exists.
*
- * @param <U> The type of the result of the mapping function
- * @param mapper a mapping function to apply to the value, if present
+ * @param mapper the mapping function to apply to a value, if present
+ * @param <U> The type of the value returned from the mapping function
* @return an {@code Optional} describing the result of applying a mapping
- * function to the value of this {@code Optional}, if a value is present,
- * otherwise an empty {@code Optional}
- * @throws NullPointerException if the mapping function is null
+ * function to the value of this {@code Optional}, if a value is
+ * present, otherwise an empty {@code Optional}
+ * @throws NullPointerException if the mapping function is {@code null}
*/
public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
Objects.requireNonNull(mapper);
@@ -239,21 +246,23 @@
}
/**
- * If a value is present, apply the provided {@code Optional}-bearing
- * mapping function to it, return that result, otherwise return an empty
- * {@code Optional}. This method is similar to {@link #map(Function)},
- * but the provided mapper is one whose result is already an {@code Optional},
- * and if invoked, {@code flatMap} does not wrap it with an additional
+ * If a value is present, returns the result of applying the given
+ * {@code Optional}-bearing mapping function to the value, otherwise returns
+ * an empty {@code Optional}.
+ *
+ * <p>This method is similar to {@link #map(Function)}, but the mapping
+ * function is one whose result is already an {@code Optional}, and if
+ * invoked, {@code flatMap} does not wrap it within an additional
* {@code Optional}.
*
- * @param <U> The type parameter to the {@code Optional} returned by
- * @param mapper a mapping function to apply to the value, if present
- * the mapping function
+ * @param <U> The type of value of the {@code Optional} returned by the
+ * mapping function
+ * @param mapper the mapping function to apply to a value, if present
* @return the result of applying an {@code Optional}-bearing mapping
- * function to the value of this {@code Optional}, if a value is present,
- * otherwise an empty {@code Optional}
- * @throws NullPointerException if the mapping function is null or returns
- * a null result
+ * function to the value of this {@code Optional}, if a value is
+ * present, otherwise an empty {@code Optional}
+ * @throws NullPointerException if the mapping function is {@code null} or
+ * returns a {@code null} result
*/
public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) {
Objects.requireNonNull(mapper);
@@ -265,19 +274,41 @@
}
/**
- * If a value is present return a sequential {@link Stream} containing only
- * that value, otherwise return an empty {@code Stream}.
+ * If a value is present, returns an {@code Optional} describing the value,
+ * otherwise returns an {@code Optional} produced by the supplying function.
*
- * @apiNote This method can be used to transform a {@code Stream} of
- * optional elements to a {@code Stream} of present value elements:
+ * @param supplier the supplying function that produces an {@code Optional}
+ * to be returned
+ * @return returns an {@code Optional} describing the value of this
+ * {@code Optional}, if a value is present, otherwise an
+ * {@code Optional} produced by the supplying function.
+ * @throws NullPointerException if the supplying function is {@code null} or
+ * produces a {@code null} result
+ * @since 9
+ */
+ public Optional<T> or(Supplier<Optional<T>> supplier) {
+ Objects.requireNonNull(supplier);
+ if (isPresent()) {
+ return this;
+ } else {
+ return Objects.requireNonNull(supplier.get());
+ }
+ }
+
+ /**
+ * If a value is present, returns a sequential {@link Stream} containing
+ * only that value, otherwise returns an empty {@code Stream}.
*
+ * @apiNote
+ * This method can be used to transform a {@code Stream} of optional
+ * elements to a {@code Stream} of present value elements:
* <pre>{@code
* Stream<Optional<T>> os = ..
* Stream<T> s = os.flatMap(Optional::stream)
* }</pre>
*
* @return the optional value as a {@code Stream}
- * @since 1.9
+ * @since 9
*/
public Stream<T> stream() {
if (!isPresent()) {
@@ -288,10 +319,11 @@
}
/**
- * Return the value if present, otherwise return {@code other}.
+ * If a value is present, returns the value, otherwise returns
+ * {@code other}.
*
- * @param other the value to be returned if there is no value present, may
- * be null
+ * @param other the value to be returned, if no value is present.
+ * May be {@code null}.
* @return the value, if present, otherwise {@code other}
*/
public T orElse(T other) {
@@ -299,34 +331,35 @@
}
/**
- * Return the value if present, otherwise invoke {@code other} and return
- * the result of that invocation.
+ * If a value is present, returns the value, otherwise returns the result
+ * produced by the supplying function.
*
- * @param other a {@code Supplier} whose result is returned if no value
- * is present
- * @return the value if present otherwise the result of {@code other.get()}
- * @throws NullPointerException if value is not present and {@code other} is
- * null
+ * @param supplier the supplying function that produces a value to be returned
+ * @return the value, if present, otherwise the result produced by the
+ * supplying function
+ * @throws NullPointerException if no value is present and the supplying
+ * function is {@code null}
*/
- public T orElseGet(Supplier<? extends T> other) {
- return value != null ? value : other.get();
+ public T orElseGet(Supplier<? extends T> supplier) {
+ return value != null ? value : supplier.get();
}
/**
- * Return the contained value, if present, otherwise throw an exception
- * to be created by the provided supplier.
+ * If a value is present, returns the value, otherwise throws an exception
+ * produced by the exception supplying function.
*
- * @apiNote A method reference to the exception constructor with an empty
- * argument list can be used as the supplier. For example,
+ * @apiNote
+ * A method reference to the exception constructor with an empty argument
+ * list can be used as the supplier. For example,
* {@code IllegalStateException::new}
*
* @param <X> Type of the exception to be thrown
- * @param exceptionSupplier The supplier which will return the exception to
- * be thrown
- * @return the present value
- * @throws X if there is no value present
- * @throws NullPointerException if no value is present and
- * {@code exceptionSupplier} is null
+ * @param exceptionSupplier the supplying function that produces an
+ * exception to be thrown
+ * @return the value, if present
+ * @throws X if no value is present
+ * @throws NullPointerException if no value is present and the exception
+ * supplying function is {@code null}
*/
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
if (value != null) {
@@ -337,8 +370,8 @@
}
/**
- * Indicates whether some other object is "equal to" this Optional. The
- * other object is considered equal if:
+ * Indicates whether some other object is "equal to" this {@code Optional}.
+ * The other object is considered equal if:
* <ul>
* <li>it is also an {@code Optional} and;
* <li>both instances have no value present or;
@@ -347,7 +380,7 @@
*
* @param obj an object to be tested for equality
* @return {@code true} if the other object is "equal to" this object
- * otherwise {@code false}
+ * otherwise {@code false}
*/
@Override
public boolean equals(Object obj) {
@@ -364,10 +397,11 @@
}
/**
- * Returns the hash code value of the present value, if any, or 0 (zero) if
- * no value is present.
+ * Returns the hash code of the value, if present, otherwise {@code 0}
+ * (zero) if no value is present.
*
- * @return hash code value of the present value or 0 if no value is present
+ * @return hash code value of the present value or {@code 0} if no value is
+ * present
*/
@Override
public int hashCode() {
@@ -375,13 +409,14 @@
}
/**
- * Returns a non-empty string representation of this Optional suitable for
- * debugging. The exact presentation format is unspecified and may vary
- * between implementations and versions.
+ * Returns a non-empty string representation of this {@code Optional}
+ * suitable for debugging. The exact presentation format is unspecified and
+ * may vary between implementations and versions.
*
- * @implSpec If a value is present the result must include its string
- * representation in the result. Empty and present Optionals must be
- * unambiguously differentiable.
+ * @implSpec
+ * If a value is present the result must include its string representation
+ * in the result. Empty and present {@code Optional}s must be unambiguously
+ * differentiable.
*
* @return the string representation of this instance
*/
--- a/jdk/src/java.base/share/classes/java/util/OptionalDouble.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/util/OptionalDouble.java Thu Oct 22 11:14:00 2015 -0700
@@ -30,15 +30,15 @@
import java.util.stream.DoubleStream;
/**
- * A container object which may or may not contain a {@code double} value.
- * If a value is present, {@code isPresent()} will return {@code true} and
- * {@code getAsDouble()} will return the value.
+ * A container object which may or may not contain a {@code double} value. If a
+ * value is present, {@code isPresent()} returns {@code true} and
+ * {@code getAsDouble()} returns the value.
*
* <p>Additional methods that depend on the presence or absence of a contained
* value are provided, such as {@link #orElse(double) orElse()}
- * (return a default value if value not present) and
- * {@link #ifPresent(java.util.function.DoubleConsumer) ifPresent()} (perform an
- * action if the value is present).
+ * (returns a default value if no value is present) and
+ * {@link #ifPresent(java.util.function.DoubleConsumer) ifPresent()} (performs
+ * an action if a value is present).
*
* <p>This is a <a href="../lang/doc-files/ValueBased.html">value-based</a>
* class; use of identity-sensitive operations (including reference equality
@@ -71,12 +71,13 @@
}
/**
- * Returns an empty {@code OptionalDouble} instance. No value is present for this
- * OptionalDouble.
+ * Returns an empty {@code OptionalDouble} instance. No value is present
+ * for this {@code OptionalDouble}.
*
- * @apiNote Though it may be tempting to do so, avoid testing if an object
- * is empty by comparing with {@code ==} against instances returned by
- * {@code Option.empty()}. There is no guarantee that it is a singleton.
+ * @apiNote
+ * Though it may be tempting to do so, avoid testing if an object is empty
+ * by comparing with {@code ==} against instances returned by
+ * {@code OptionalDouble.empty()}. There is no guarantee that it is a singleton.
* Instead, use {@link #isPresent()}.
*
* @return an empty {@code OptionalDouble}.
@@ -86,9 +87,9 @@
}
/**
- * Construct an instance with the value present.
+ * Construct an instance with the described value.
*
- * @param value the double value to be present.
+ * @param value the double value to describe.
*/
private OptionalDouble(double value) {
this.isPresent = true;
@@ -96,9 +97,9 @@
}
/**
- * Return an {@code OptionalDouble} with the specified value present.
+ * Returns an {@code OptionalDouble} describing the given value.
*
- * @param value the value to be present
+ * @param value the value to describe
* @return an {@code OptionalDouble} with the value present
*/
public static OptionalDouble of(double value) {
@@ -106,12 +107,11 @@
}
/**
- * If a value is present in this {@code OptionalDouble}, returns the value,
- * otherwise throws {@code NoSuchElementException}.
+ * If a value is present, returns the value, otherwise throws
+ * {@code NoSuchElementException}.
*
- * @return the value held by this {@code OptionalDouble}
- * @throws NoSuchElementException if there is no value present
- *
+ * @return the value described by this {@code OptionalDouble}
+ * @throws NoSuchElementException if no value is present
* @see OptionalDouble#isPresent()
*/
public double getAsDouble() {
@@ -122,21 +122,21 @@
}
/**
- * Return {@code true} if there is a value present, otherwise {@code false}.
+ * If a value is present, returns {@code true}, otherwise {@code false}.
*
- * @return {@code true} if there is a value present, otherwise {@code false}
+ * @return {@code true} if a value is present, otherwise {@code false}
*/
public boolean isPresent() {
return isPresent;
}
/**
- * If a value is present, perform the given action with the value,
- * otherwise do nothing.
+ * If a value is present, performs the given action with the value,
+ * otherwise does nothing.
*
- * @param action the action to be performed if a value is present
- * @throws NullPointerException if a value is present and {@code action} is
- * null
+ * @param action the action to be performed, if a value is present
+ * @throws NullPointerException if value is present and the given action is
+ * {@code null}
*/
public void ifPresent(DoubleConsumer action) {
if (isPresent) {
@@ -145,15 +145,16 @@
}
/**
- * If a value is present, perform the given action with the value,
- * otherwise perform the given empty-based action.
+ * If a value is present, performs the given action with the value,
+ * otherwise performs the given empty-based action.
*
- * @param action the action to be performed if a value is present
- * @param emptyAction the empty-based action to be performed if a value is
- * not present
- * @throws NullPointerException if a value is present and {@code action} is
- * null, or a value is not present and {@code emptyAction} is null.
- * @since 1.9
+ * @param action the action to be performed, if a value is present
+ * @param emptyAction the empty-based action to be performed, if no value is
+ * present
+ * @throws NullPointerException if a value is present and the given action
+ * is {@code null}, or no value is present and the given empty-based
+ * action is {@code null}.
+ * @since 9
*/
public void ifPresentOrElse(DoubleConsumer action, Runnable emptyAction) {
if (isPresent) {
@@ -164,19 +165,20 @@
}
/**
- * If a value is present return a sequential {@link DoubleStream} containing
- * only that value, otherwise return an empty {@code DoubleStream}.
+ * If a value is present, returns a sequential {@link DoubleStream}
+ * containing only that value, otherwise returns an empty
+ * {@code DoubleStream}.
*
- * @apiNote This method can be used to transform a {@code Stream} of
- * optional doubles to a {@code DoubleStream} of present doubles:
- *
+ * @apiNote
+ * This method can be used to transform a {@code Stream} of optional doubles
+ * to a {@code DoubleStream} of present doubles:
* <pre>{@code
* Stream<OptionalDouble> os = ..
* DoubleStream s = os.flatMapToDouble(OptionalDouble::stream)
* }</pre>
*
* @return the optional value as a {@code DoubleStream}
- * @since 1.9
+ * @since 9
*/
public DoubleStream stream() {
if (isPresent) {
@@ -187,9 +189,10 @@
}
/**
- * Return the value if present, otherwise return {@code other}.
+ * If a value is present, returns the value, otherwise returns
+ * {@code other}.
*
- * @param other the value to be returned if there is no value present
+ * @param other the value to be returned, if no value is present
* @return the value, if present, otherwise {@code other}
*/
public double orElse(double other) {
@@ -197,34 +200,35 @@
}
/**
- * Return the value if present, otherwise invoke {@code other} and return
- * the result of that invocation.
+ * If a value is present, returns the value, otherwise returns the result
+ * produced by the supplying function.
*
- * @param other a {@code DoubleSupplier} whose result is returned if no value
- * is present
- * @return the value if present otherwise the result of {@code other.getAsDouble()}
- * @throws NullPointerException if value is not present and {@code other} is
- * null
+ * @param supplier the supplying function that produces a value to be returned
+ * @return the value, if present, otherwise the result produced by the
+ * supplying function
+ * @throws NullPointerException if no value is present and the supplying
+ * function is {@code null}
*/
- public double orElseGet(DoubleSupplier other) {
- return isPresent ? value : other.getAsDouble();
+ public double orElseGet(DoubleSupplier supplier) {
+ return isPresent ? value : supplier.getAsDouble();
}
/**
- * Return the contained value, if present, otherwise throw an exception
- * to be created by the provided supplier.
+ * If a value is present, returns the value, otherwise throws an exception
+ * produced by the exception supplying function.
*
- * @apiNote A method reference to the exception constructor with an empty
- * argument list can be used as the supplier. For example,
+ * @apiNote
+ * A method reference to the exception constructor with an empty argument
+ * list can be used as the supplier. For example,
* {@code IllegalStateException::new}
*
* @param <X> Type of the exception to be thrown
- * @param exceptionSupplier The supplier which will return the exception to
- * be thrown
- * @return the present value
- * @throws X if there is no value present
- * @throws NullPointerException if no value is present and
- * {@code exceptionSupplier} is null
+ * @param exceptionSupplier the supplying function that produces an
+ * exception to be thrown
+ * @return the value, if present
+ * @throws X if no value is present
+ * @throws NullPointerException if no value is present and the exception
+ * supplying function is {@code null}
*/
public<X extends Throwable> double orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
if (isPresent) {
@@ -235,17 +239,18 @@
}
/**
- * Indicates whether some other object is "equal to" this OptionalDouble. The
- * other object is considered equal if:
+ * Indicates whether some other object is "equal to" this
+ * {@code OptionalDouble}. The other object is considered equal if:
* <ul>
* <li>it is also an {@code OptionalDouble} and;
* <li>both instances have no value present or;
- * <li>the present values are "equal to" each other via {@code Double.compare() == 0}.
+ * <li>the present values are "equal to" each other via
+ * {@code Double.compare() == 0}.
* </ul>
*
* @param obj an object to be tested for equality
* @return {@code true} if the other object is "equal to" this object
- * otherwise {@code false}
+ * otherwise {@code false}
*/
@Override
public boolean equals(Object obj) {
@@ -264,10 +269,11 @@
}
/**
- * Returns the hash code value of the present value, if any, or 0 (zero) if
- * no value is present.
+ * Returns the hash code of the value, if present, otherwise {@code 0}
+ * (zero) if no value is present.
*
- * @return hash code value of the present value or 0 if no value is present
+ * @return hash code value of the present value or {@code 0} if no value is
+ * present
*/
@Override
public int hashCode() {
@@ -275,14 +281,13 @@
}
/**
- * {@inheritDoc}
+ * Returns a non-empty string representation of this {@code OptionalDouble}
+ * suitable for debugging. The exact presentation format is unspecified and
+ * may vary between implementations and versions.
*
- * Returns a non-empty string representation of this object suitable for
- * debugging. The exact presentation format is unspecified and may vary
- * between implementations and versions.
- *
- * @implSpec If a value is present the result must include its string
- * representation in the result. Empty and present instances must be
+ * @implSpec
+ * If a value is present the result must include its string representation
+ * in the result. Empty and present {@code OptionalDouble}s must be
* unambiguously differentiable.
*
* @return the string representation of this instance
--- a/jdk/src/java.base/share/classes/java/util/OptionalInt.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/util/OptionalInt.java Thu Oct 22 11:14:00 2015 -0700
@@ -30,15 +30,15 @@
import java.util.stream.IntStream;
/**
- * A container object which may or may not contain a {@code int} value.
- * If a value is present, {@code isPresent()} will return {@code true} and
- * {@code getAsInt()} will return the value.
+ * A container object which may or may not contain an {@code int} value. If a
+ * value is present, {@code isPresent()} returns {@code true} and
+ * {@code getAsInt()} returns the value.
*
* <p>Additional methods that depend on the presence or absence of a contained
* value are provided, such as {@link #orElse(int) orElse()}
- * (return a default value if value not present) and
- * {@link #ifPresent(java.util.function.IntConsumer) ifPresent()} (perform an
- * action if the value is present).
+ * (returns a default value if no value is present) and
+ * {@link #ifPresent(java.util.function.IntConsumer) ifPresent()} (performs an
+ * action if a value is present).
*
* <p>This is a <a href="../lang/doc-files/ValueBased.html">value-based</a>
* class; use of identity-sensitive operations (including reference equality
@@ -71,24 +71,25 @@
}
/**
- * Returns an empty {@code OptionalInt} instance. No value is present for this
- * OptionalInt.
+ * Returns an empty {@code OptionalInt} instance. No value is present for
+ * this {@code OptionalInt}.
*
- * @apiNote Though it may be tempting to do so, avoid testing if an object
- * is empty by comparing with {@code ==} against instances returned by
- * {@code Option.empty()}. There is no guarantee that it is a singleton.
+ * @apiNote
+ * Though it may be tempting to do so, avoid testing if an object is empty
+ * by comparing with {@code ==} against instances returned by
+ * {@code OptionalInt.empty()}. There is no guarantee that it is a singleton.
* Instead, use {@link #isPresent()}.
*
- * @return an empty {@code OptionalInt}
+ * @return an empty {@code OptionalInt}
*/
public static OptionalInt empty() {
return EMPTY;
}
/**
- * Construct an instance with the value present.
+ * Construct an instance with the described value.
*
- * @param value the int value to be present
+ * @param value the int value to describe
*/
private OptionalInt(int value) {
this.isPresent = true;
@@ -96,9 +97,9 @@
}
/**
- * Return an {@code OptionalInt} with the specified value present.
+ * Returns an {@code OptionalInt} describing the given value.
*
- * @param value the value to be present
+ * @param value the value to describe
* @return an {@code OptionalInt} with the value present
*/
public static OptionalInt of(int value) {
@@ -106,12 +107,11 @@
}
/**
- * If a value is present in this {@code OptionalInt}, returns the value,
- * otherwise throws {@code NoSuchElementException}.
+ * If a value is present, returns the value, otherwise throws
+ * {@code NoSuchElementException}.
*
- * @return the value held by this {@code OptionalInt}
- * @throws NoSuchElementException if there is no value present
- *
+ * @return the value described by this {@code OptionalInt}
+ * @throws NoSuchElementException if no value is present
* @see OptionalInt#isPresent()
*/
public int getAsInt() {
@@ -122,21 +122,21 @@
}
/**
- * Return {@code true} if there is a value present, otherwise {@code false}.
+ * If a value is present, returns {@code true}, otherwise {@code false}.
*
- * @return {@code true} if there is a value present, otherwise {@code false}
+ * @return {@code true} if a value is present, otherwise {@code false}
*/
public boolean isPresent() {
return isPresent;
}
/**
- * If a value is present, perform the given action with the value,
- * otherwise do nothing.
+ * If a value is present, performs the given action with the value,
+ * otherwise does nothing.
*
- * @param action the action to be performed if a value is present
- * @throws NullPointerException if value is present and {@code action} is
- * null
+ * @param action the action to be performed, if a value is present
+ * @throws NullPointerException if value is present and the given action is
+ * {@code null}
*/
public void ifPresent(IntConsumer action) {
if (isPresent) {
@@ -145,15 +145,16 @@
}
/**
- * If a value is present, perform the given action with the value,
- * otherwise perform the given empty-based action.
+ * If a value is present, performs the given action with the value,
+ * otherwise performs the given empty-based action.
*
- * @param action the action to be performed if a value is present
- * @param emptyAction the empty-based action to be performed if a value is
- * not present
- * @throws NullPointerException if a value is present and {@code action} is
- * null, or a value is not present and {@code emptyAction} is null.
- * @since 1.9
+ * @param action the action to be performed, if a value is present
+ * @param emptyAction the empty-based action to be performed, if no value is
+ * present
+ * @throws NullPointerException if a value is present and the given action
+ * is {@code null}, or no value is present and the given empty-based
+ * action is {@code null}.
+ * @since 9
*/
public void ifPresentOrElse(IntConsumer action, Runnable emptyAction) {
if (isPresent) {
@@ -164,19 +165,19 @@
}
/**
- * If a value is present return a sequential {@link IntStream} containing
- * only that value, otherwise return an empty {@code IntStream}.
+ * If a value is present, returns a sequential {@link IntStream} containing
+ * only that value, otherwise returns an empty {@code IntStream}.
*
- * @apiNote This method can be used to transform a {@code Stream} of
- * optional integers to an {@code IntStream} of present integers:
- *
+ * @apiNote
+ * This method can be used to transform a {@code Stream} of optional
+ * integers to an {@code IntStream} of present integers:
* <pre>{@code
* Stream<OptionalInt> os = ..
* IntStream s = os.flatMapToInt(OptionalInt::stream)
* }</pre>
*
* @return the optional value as an {@code IntStream}
- * @since 1.9
+ * @since 9
*/
public IntStream stream() {
if (isPresent) {
@@ -187,9 +188,10 @@
}
/**
- * Return the value if present, otherwise return {@code other}.
+ * If a value is present, returns the value, otherwise returns
+ * {@code other}.
*
- * @param other the value to be returned if there is no value present
+ * @param other the value to be returned, if no value is present
* @return the value, if present, otherwise {@code other}
*/
public int orElse(int other) {
@@ -197,34 +199,35 @@
}
/**
- * Return the value if present, otherwise invoke {@code other} and return
- * the result of that invocation.
+ * If a value is present, returns the value, otherwise returns the result
+ * produced by the supplying function.
*
- * @param other a {@code IntSupplier} whose result is returned if no value
- * is present
- * @return the value if present otherwise the result of {@code other.getAsInt()}
- * @throws NullPointerException if value is not present and {@code other} is
- * null
+ * @param supplier the supplying function that produces a value to be returned
+ * @return the value, if present, otherwise the result produced by the
+ * supplying function
+ * @throws NullPointerException if no value is present and the supplying
+ * function is {@code null}
*/
- public int orElseGet(IntSupplier other) {
- return isPresent ? value : other.getAsInt();
+ public int orElseGet(IntSupplier supplier) {
+ return isPresent ? value : supplier.getAsInt();
}
/**
- * Return the contained value, if present, otherwise throw an exception
- * to be created by the provided supplier.
+ * If a value is present, returns the value, otherwise throws an exception
+ * produced by the exception supplying function.
*
- * @apiNote A method reference to the exception constructor with an empty
- * argument list can be used as the supplier. For example,
+ * @apiNote
+ * A method reference to the exception constructor with an empty argument
+ * list can be used as the supplier. For example,
* {@code IllegalStateException::new}
*
* @param <X> Type of the exception to be thrown
- * @param exceptionSupplier The supplier which will return the exception to
- * be thrown
- * @return the present value
- * @throws X if there is no value present
- * @throws NullPointerException if no value is present and
- * {@code exceptionSupplier} is null
+ * @param exceptionSupplier the supplying function that produces an
+ * exception to be thrown
+ * @return the value, if present
+ * @throws X if no value is present
+ * @throws NullPointerException if no value is present and the exception
+ * supplying function is {@code null}
*/
public<X extends Throwable> int orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
if (isPresent) {
@@ -235,8 +238,8 @@
}
/**
- * Indicates whether some other object is "equal to" this OptionalInt. The
- * other object is considered equal if:
+ * Indicates whether some other object is "equal to" this
+ * {@code OptionalInt}. The other object is considered equal if:
* <ul>
* <li>it is also an {@code OptionalInt} and;
* <li>both instances have no value present or;
@@ -245,7 +248,7 @@
*
* @param obj an object to be tested for equality
* @return {@code true} if the other object is "equal to" this object
- * otherwise {@code false}
+ * otherwise {@code false}
*/
@Override
public boolean equals(Object obj) {
@@ -264,10 +267,11 @@
}
/**
- * Returns the hash code value of the present value, if any, or 0 (zero) if
- * no value is present.
+ * Returns the hash code of the value, if present, otherwise {@code 0}
+ * (zero) if no value is present.
*
- * @return hash code value of the present value or 0 if no value is present
+ * @return hash code value of the present value or {@code 0} if no value is
+ * present
*/
@Override
public int hashCode() {
@@ -275,14 +279,13 @@
}
/**
- * {@inheritDoc}
+ * Returns a non-empty string representation of this {@code OptionalInt}
+ * suitable for debugging. The exact presentation format is unspecified and
+ * may vary between implementations and versions.
*
- * Returns a non-empty string representation of this object suitable for
- * debugging. The exact presentation format is unspecified and may vary
- * between implementations and versions.
- *
- * @implSpec If a value is present the result must include its string
- * representation in the result. Empty and present instances must be
+ * @implSpec
+ * If a value is present the result must include its string representation
+ * in the result. Empty and present {@code OptionalInt}s must be
* unambiguously differentiable.
*
* @return the string representation of this instance
--- a/jdk/src/java.base/share/classes/java/util/OptionalLong.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/util/OptionalLong.java Thu Oct 22 11:14:00 2015 -0700
@@ -30,15 +30,15 @@
import java.util.stream.LongStream;
/**
- * A container object which may or may not contain a {@code long} value.
- * If a value is present, {@code isPresent()} will return {@code true} and
- * {@code getAsLong()} will return the value.
+ * A container object which may or may not contain a {@code long} value. If a
+ * value is present, {@code isPresent()} returns {@code true} and
+ * {@code getAsLong()} returns the value.
*
* <p>Additional methods that depend on the presence or absence of a contained
* value are provided, such as {@link #orElse(long) orElse()}
- * (return a default value if value not present) and
- * {@link #ifPresent(java.util.function.LongConsumer) ifPresent()} (perform an
- * action if the value is present).
+ * (returns a default value if no value is present) and
+ * {@link #ifPresent(java.util.function.LongConsumer) ifPresent()} (performs an
+ * action if a value is present).
*
* <p>This is a <a href="../lang/doc-files/ValueBased.html">value-based</a>
* class; use of identity-sensitive operations (including reference equality
@@ -71,24 +71,25 @@
}
/**
- * Returns an empty {@code OptionalLong} instance. No value is present for this
- * OptionalLong.
+ * Returns an empty {@code OptionalLong} instance. No value is present for
+ * this {@code OptionalLong}.
*
- * @apiNote Though it may be tempting to do so, avoid testing if an object
- * is empty by comparing with {@code ==} against instances returned by
- * {@code Option.empty()}. There is no guarantee that it is a singleton.
+ * @apiNote
+ * Though it may be tempting to do so, avoid testing if an object is empty
+ * by comparing with {@code ==} against instances returned by
+ * {@code OptionalLong.empty()}. There is no guarantee that it is a singleton.
* Instead, use {@link #isPresent()}.
*
- * @return an empty {@code OptionalLong}.
+ * @return an empty {@code OptionalLong}.
*/
public static OptionalLong empty() {
return EMPTY;
}
/**
- * Construct an instance with the value present.
+ * Construct an instance with the described value.
*
- * @param value the long value to be present
+ * @param value the long value to describe
*/
private OptionalLong(long value) {
this.isPresent = true;
@@ -96,9 +97,9 @@
}
/**
- * Return an {@code OptionalLong} with the specified value present.
+ * Returns an {@code OptionalLong} describing the given value.
*
- * @param value the value to be present
+ * @param value the value to describe
* @return an {@code OptionalLong} with the value present
*/
public static OptionalLong of(long value) {
@@ -106,12 +107,11 @@
}
/**
- * If a value is present in this {@code OptionalLong}, returns the value,
- * otherwise throws {@code NoSuchElementException}.
+ * If a value is present, returns the value, otherwise throws
+ * {@code NoSuchElementException}.
*
- * @return the value held by this {@code OptionalLong}
- * @throws NoSuchElementException if there is no value present
- *
+ * @return the value described by this {@code OptionalLong}
+ * @throws NoSuchElementException if no value is present
* @see OptionalLong#isPresent()
*/
public long getAsLong() {
@@ -122,21 +122,21 @@
}
/**
- * Return {@code true} if there is a value present, otherwise {@code false}.
+ * If a value is present, returns {@code true}, otherwise {@code false}.
*
- * @return {@code true} if there is a value present, otherwise {@code false}
+ * @return {@code true} if a value is present, otherwise {@code false}
*/
public boolean isPresent() {
return isPresent;
}
/**
- * If a value is present, perform the given action with the value,
- * otherwise do nothing.
+ * If a value is present, performs the given action with the value,
+ * otherwise does nothing.
*
- * @param action the action to be performed if a value is present
- * @throws NullPointerException if a value is present and {@code action} is
- * null
+ * @param action the action to be performed, if a value is present
+ * @throws NullPointerException if value is present and the given action is
+ * {@code null}
*/
public void ifPresent(LongConsumer action) {
if (isPresent) {
@@ -145,15 +145,16 @@
}
/**
- * If a value is present, perform the given action with the value,
- * otherwise perform the given empty-based action.
+ * If a value is present, performs the given action with the value,
+ * otherwise performs the given empty-based action.
*
- * @param action the action to be performed if a value is present
- * @param emptyAction the empty-based action to be performed if a value is
- * not present
- * @throws NullPointerException if a value is present and {@code action} is
- * null, or a value is not present and {@code emptyAction} is null.
- * @since 1.9
+ * @param action the action to be performed, if a value is present
+ * @param emptyAction the empty-based action to be performed, if no value is
+ * present
+ * @throws NullPointerException if a value is present and the given action
+ * is {@code null}, or no value is present and the given empty-based
+ * action is {@code null}.
+ * @since 9
*/
public void ifPresentOrElse(LongConsumer action, Runnable emptyAction) {
if (isPresent) {
@@ -164,19 +165,19 @@
}
/**
- * If a value is present return a sequential {@link LongStream} containing
- * only that value, otherwise return an empty {@code LongStream}.
+ * If a value is present, returns a sequential {@link LongStream} containing
+ * only that value, otherwise returns an empty {@code LongStream}.
*
- * @apiNote This method can be used to transform a {@code Stream} of
- * optional longs to a {@code LongStream} of present longs:
- *
+ * @apiNote
+ * This method can be used to transform a {@code Stream} of optional longs
+ * to an {@code LongStream} of present longs:
* <pre>{@code
* Stream<OptionalLong> os = ..
* LongStream s = os.flatMapToLong(OptionalLong::stream)
* }</pre>
*
- * @return the optional value as a {@code LongStream}
- * @since 1.9
+ * @return the optional value as an {@code LongStream}
+ * @since 9
*/
public LongStream stream() {
if (isPresent) {
@@ -187,9 +188,10 @@
}
/**
- * Return the value if present, otherwise return {@code other}.
+ * If a value is present, returns the value, otherwise returns
+ * {@code other}.
*
- * @param other the value to be returned if there is no value present
+ * @param other the value to be returned, if no value is present
* @return the value, if present, otherwise {@code other}
*/
public long orElse(long other) {
@@ -197,34 +199,35 @@
}
/**
- * Return the value if present, otherwise invoke {@code other} and return
- * the result of that invocation.
+ * If a value is present, returns the value, otherwise returns the result
+ * produced by the supplying function.
*
- * @param other a {@code LongSupplier} whose result is returned if no value
- * is present
- * @return the value if present otherwise the result of {@code other.getAsLong()}
- * @throws NullPointerException if value is not present and {@code other} is
- * null
+ * @param supplier the supplying function that produces a value to be returned
+ * @return the value, if present, otherwise the result produced by the
+ * supplying function
+ * @throws NullPointerException if no value is present and the supplying
+ * function is {@code null}
*/
- public long orElseGet(LongSupplier other) {
- return isPresent ? value : other.getAsLong();
+ public long orElseGet(LongSupplier supplier) {
+ return isPresent ? value : supplier.getAsLong();
}
/**
- * Return the contained value, if present, otherwise throw an exception
- * to be created by the provided supplier.
+ * If a value is present, returns the value, otherwise throws an exception
+ * produced by the exception supplying function.
*
- * @apiNote A method reference to the exception constructor with an empty
- * argument list can be used as the supplier. For example,
+ * @apiNote
+ * A method reference to the exception constructor with an empty argument
+ * list can be used as the supplier. For example,
* {@code IllegalStateException::new}
*
* @param <X> Type of the exception to be thrown
- * @param exceptionSupplier The supplier which will return the exception to
- * be thrown
- * @return the present value
- * @throws X if there is no value present
- * @throws NullPointerException if no value is present and
- * {@code exceptionSupplier} is null
+ * @param exceptionSupplier the supplying function that produces an
+ * exception to be thrown
+ * @return the value, if present
+ * @throws X if no value is present
+ * @throws NullPointerException if no value is present and the exception
+ * supplying function is {@code null}
*/
public<X extends Throwable> long orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
if (isPresent) {
@@ -235,8 +238,8 @@
}
/**
- * Indicates whether some other object is "equal to" this OptionalLong. The
- * other object is considered equal if:
+ * Indicates whether some other object is "equal to" this
+ * {@code OptionalLong}. The other object is considered equal if:
* <ul>
* <li>it is also an {@code OptionalLong} and;
* <li>both instances have no value present or;
@@ -245,7 +248,7 @@
*
* @param obj an object to be tested for equality
* @return {@code true} if the other object is "equal to" this object
- * otherwise {@code false}
+ * otherwise {@code false}
*/
@Override
public boolean equals(Object obj) {
@@ -264,10 +267,11 @@
}
/**
- * Returns the hash code value of the present value, if any, or 0 (zero) if
- * no value is present.
+ * Returns the hash code of the value, if present, otherwise {@code 0}
+ * (zero) if no value is present.
*
- * @return hash code value of the present value or 0 if no value is present
+ * @return hash code value of the present value or {@code 0} if no value is
+ * present
*/
@Override
public int hashCode() {
@@ -275,14 +279,13 @@
}
/**
- * {@inheritDoc}
+ * Returns a non-empty string representation of this {@code OptionalLong}
+ * suitable for debugging. The exact presentation format is unspecified and
+ * may vary between implementations and versions.
*
- * Returns a non-empty string representation of this object suitable for
- * debugging. The exact presentation format is unspecified and may vary
- * between implementations and versions.
- *
- * @implSpec If a value is present the result must include its string
- * representation in the result. Empty and present instances must be
+ * @implSpec
+ * If a value is present the result must include its string representation
+ * in the result. Empty and present {@code OptionalLong}s must be
* unambiguously differentiable.
*
* @return the string representation of this instance
--- a/jdk/src/java.base/share/classes/java/util/jar/JarFile.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/util/jar/JarFile.java Thu Oct 22 11:14:00 2015 -0700
@@ -438,10 +438,19 @@
private byte[] getBytes(ZipEntry ze) throws IOException {
try (InputStream is = super.getInputStream(ze)) {
int len = (int)ze.getSize();
- byte[] b = is.readAllBytes();
- if (len != -1 && b.length != len)
- throw new EOFException("Expected:" + len + ", read:" + b.length);
-
+ int bytesRead;
+ byte[] b;
+ // trust specified entry sizes when reasonably small
+ if (len != -1 && len <= 65535) {
+ b = new byte[len];
+ bytesRead = is.readNBytes(b, 0, len);
+ } else {
+ b = is.readAllBytes();
+ bytesRead = b.length;
+ }
+ if (len != -1 && len != bytesRead) {
+ throw new EOFException("Expected:" + len + ", read:" + bytesRead);
+ }
return b;
}
}
--- a/jdk/src/java.base/share/classes/javax/crypto/Cipher.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/javax/crypto/Cipher.java Thu Oct 22 11:14:00 2015 -0700
@@ -478,6 +478,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param transformation the name of the transformation, e.g.,
* <i>DES/CBC/PKCS5Padding</i>.
* See the Cipher section in the <a href=
--- a/jdk/src/java.base/share/classes/javax/crypto/ExemptionMechanism.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/javax/crypto/ExemptionMechanism.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -112,6 +112,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the standard name of the requested exemption
* mechanism.
* See the ExemptionMechanism section in the
--- a/jdk/src/java.base/share/classes/javax/crypto/KeyAgreement.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/javax/crypto/KeyAgreement.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -150,6 +150,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the standard name of the requested key agreement
* algorithm.
* See the KeyAgreement section in the <a href=
--- a/jdk/src/java.base/share/classes/javax/crypto/KeyGenerator.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/javax/crypto/KeyGenerator.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -202,6 +202,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the standard name of the requested key algorithm.
* See the KeyGenerator section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyGenerator">
--- a/jdk/src/java.base/share/classes/javax/crypto/Mac.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/javax/crypto/Mac.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -152,6 +152,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the standard name of the requested MAC algorithm.
* See the Mac section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#Mac">
--- a/jdk/src/java.base/share/classes/javax/crypto/SecretKeyFactory.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/javax/crypto/SecretKeyFactory.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -137,6 +137,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the standard name of the requested secret-key
* algorithm.
* See the SecretKeyFactory section in the <a href=
--- a/jdk/src/java.base/share/classes/javax/net/ssl/KeyManagerFactory.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/KeyManagerFactory.java Thu Oct 22 11:14:00 2015 -0700
@@ -116,6 +116,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the standard name of the requested algorithm.
* See the <a href=
* "{@docRoot}/../technotes/guides/security/jsse/JSSERefGuide.html">
--- a/jdk/src/java.base/share/classes/javax/net/ssl/SSLContext.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/SSLContext.java Thu Oct 22 11:14:00 2015 -0700
@@ -136,6 +136,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param protocol the standard name of the requested protocol.
* See the SSLContext section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#SSLContext">
--- a/jdk/src/java.base/share/classes/javax/net/ssl/TrustManagerFactory.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/TrustManagerFactory.java Thu Oct 22 11:14:00 2015 -0700
@@ -130,6 +130,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the standard name of the requested trust management
* algorithm. See the <a href=
* "{@docRoot}/../technotes/guides/security/jsse/JSSERefGuide.html">
--- a/jdk/src/java.base/share/classes/javax/security/auth/AuthPermission.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/javax/security/auth/AuthPermission.java Thu Oct 22 11:14:00 2015 -0700
@@ -101,6 +101,18 @@
* login Configuration.
* </pre>
*
+ * <p>Please note that granting this permission with the "modifyPrincipals",
+ * "modifyPublicCredentials" or "modifyPrivateCredentials" target allows
+ * a JAAS login module to populate principal or credential objects into
+ * the Subject. Although reading information inside the private credentials
+ * set requires a {@link PrivateCredentialPermission} of the credential type to
+ * be granted, reading information inside the principals set and the public
+ * credentials set requires no additional permission. These objects can contain
+ * potentially sensitive information. For example, login modules that read
+ * local user information or perform a Kerberos login are able to add
+ * potentially sensitive information such as user ids, groups and domain names
+ * to the principals set.
+ *
* <p> The following target name has been deprecated in favor of
* {@code createLoginContext.{name}}.
*
--- a/jdk/src/java.base/share/classes/javax/security/auth/login/Configuration.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/Configuration.java Thu Oct 22 11:14:00 2015 -0700
@@ -311,6 +311,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param type the specified Configuration type. See the Configuration
* section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#Configuration">
--- a/jdk/src/java.base/share/classes/jdk/internal/HotSpotIntrinsicCandidate.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/jdk/internal/HotSpotIntrinsicCandidate.java Thu Oct 22 11:14:00 2015 -0700
@@ -28,8 +28,8 @@
import java.lang.annotation.*;
/**
- * The {@code @HotSpotIntrinsicCandidate} annotation is specific to the Oracle Java
- * HotSpot Virtual Machine implementation and indicates that an annotated method
+ * The {@code @HotSpotIntrinsicCandidate} annotation is specific to the
+ * HotSpot Virtual Machine. It indicates that an annotated method
* may be (but is not guaranteed to be) intrinsified by the HotSpot VM. A method
* is intrinsified if the HotSpot VM replaces the annotated method with hand-written
* assembly and/or hand-written compiler IR -- a compiler intrinsic -- to improve
--- a/jdk/src/java.base/share/classes/overview-core.html Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/overview-core.html Thu Oct 22 11:14:00 2015 -0700
@@ -3,7 +3,7 @@
<head>
<!--
-Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
@@ -30,9 +30,6 @@
</head>
<body bgcolor="white">
-
-<body>
-
This document is the API specification for the Java™
Platform, Standard Edition.
--- a/jdk/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Thu Oct 22 11:14:00 2015 -0700
@@ -487,7 +487,8 @@
private void checkMessageHeader(String key, String value) {
char LF = '\n';
int index = key.indexOf(LF);
- if (index != -1) {
+ int index1 = key.indexOf(':');
+ if (index != -1 || index1 != -1) {
throw new IllegalArgumentException(
"Illegal character(s) in message header field: " + key);
}
--- a/jdk/src/java.base/share/classes/sun/security/jca/ProviderList.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/jca/ProviderList.java Thu Oct 22 11:14:00 2015 -0700
@@ -27,8 +27,11 @@
import java.util.*;
-import java.security.*;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.Provider;
import java.security.Provider.Service;
+import java.security.Security;
/**
* List of Providers. Used to represent the provider preferences.
@@ -65,6 +68,9 @@
// constant for an ProviderList with no elements
static final ProviderList EMPTY = new ProviderList(PC0, true);
+ // list of all jdk.security.provider.preferred entries
+ static private PreferredList preferredPropList = null;
+
// dummy provider object to use during initialization
// used to avoid explicit null checks in various places
private static final Provider EMPTY_PROVIDER =
@@ -162,11 +168,10 @@
*/
private ProviderList() {
List<ProviderConfig> configList = new ArrayList<>();
- for (int i = 1; true; i++) {
- String entry = Security.getProperty("security.provider." + i);
- if (entry == null) {
- break;
- }
+ String entry;
+ int i = 1;
+
+ while ((entry = Security.getProperty("security.provider." + i)) != null) {
entry = entry.trim();
if (entry.length() == 0) {
System.err.println("invalid entry for " +
@@ -187,10 +192,36 @@
if (configList.contains(config) == false) {
configList.add(config);
}
+ i++;
}
configs = configList.toArray(PC0);
+
+ // Load config entries for use when getInstance is called
+ entry = Security.getProperty("jdk.security.provider.preferred");
+ if (entry != null && (entry = entry.trim()).length() > 0) {
+ String[] entries = entry.split(",");
+ if (ProviderList.preferredPropList == null) {
+ ProviderList.preferredPropList = new PreferredList();
+ }
+
+ for (String e : entries) {
+ i = e.indexOf(':');
+ if (i < 0) {
+ if (debug != null) {
+ debug.println("invalid preferred entry skipped. " +
+ "Missing colon delimiter \"" + e + "\"");
+ }
+ continue;
+ }
+ ProviderList.preferredPropList.add(new PreferredEntry(
+ e.substring(0, i).trim(), e.substring(i + 1).trim()));
+ }
+ }
+
if (debug != null) {
debug.println("provider configuration: " + configList);
+ debug.println("config configuration: " +
+ ProviderList.preferredPropList);
}
}
@@ -327,7 +358,22 @@
* algorithm.
*/
public Service getService(String type, String name) {
- for (int i = 0; i < configs.length; i++) {
+ ArrayList<PreferredEntry> pList = null;
+ int i;
+
+ // Preferred provider list
+ if (preferredPropList != null &&
+ (pList = preferredPropList.getAll(type, name)) != null) {
+ for (i = 0; i < pList.size(); i++) {
+ Provider p = getProvider(pList.get(i).provider);
+ Service s = p.getService(type, name);
+ if (s != null) {
+ return s;
+ }
+ }
+ }
+
+ for (i = 0; i < configs.length; i++) {
Provider p = getProvider(i);
Service s = p.getService(type, name);
if (s != null) {
@@ -394,7 +440,11 @@
private List<Service> services;
// index into config[] of the next provider we need to query
- private int providerIndex;
+ private int providerIndex = 0;
+
+ // Matching preferred provider list for this ServiceList
+ ArrayList<PreferredEntry> preferredList = null;
+ private int preferredIndex = 0;
ServiceList(String type, String algorithm) {
this.type = type;
@@ -421,6 +471,14 @@
}
private Service tryGet(int index) {
+ Provider p;
+
+ // If preferred providers are configured, check for matches with
+ // the requested service.
+ if (preferredPropList != null && preferredList == null) {
+ preferredList = preferredPropList.getAll(this);
+ }
+
while (true) {
if ((index == 0) && (firstService != null)) {
return firstService;
@@ -430,8 +488,27 @@
if (providerIndex >= configs.length) {
return null;
}
- // check all algorithms in this provider before moving on
- Provider p = getProvider(providerIndex++);
+
+ // If there were matches with a preferred provider, iterate
+ // through the list first before going through the
+ // ordered list (java.security.provider.#)
+ if (preferredList != null &&
+ preferredIndex < preferredList.size()) {
+ PreferredEntry entry = preferredList.get(preferredIndex++);
+ // Look for the provider name in the PreferredEntry
+ p = getProvider(entry.provider);
+ if (p == null) {
+ if (debug != null) {
+ debug.println("No provider found with name: " +
+ entry.provider);
+ }
+ continue;
+ }
+ } else {
+ // check all algorithms in this provider before moving on
+ p = getProvider(providerIndex++);
+ }
+
if (type != null) {
// simple lookup
Service s = p.getService(type, algorithm);
@@ -502,4 +579,119 @@
}
}
+ // Provider list defined by jdk.security.provider.preferred entry
+ static final class PreferredList {
+ ArrayList<PreferredEntry> list = new ArrayList<PreferredEntry>();
+
+ /*
+ * Return a list of all preferred entries that match the passed
+ * ServiceList.
+ */
+ ArrayList<PreferredEntry> getAll(ServiceList s) {
+ if (s.ids == null) {
+ return getAll(s.type, s.algorithm);
+
+ }
+
+ ArrayList<PreferredEntry> l = new ArrayList<PreferredEntry>();
+ for (ServiceId id : s.ids) {
+ implGetAll(l, id.type, id.algorithm);
+ }
+
+ return l;
+ }
+
+ /*
+ * Return a list of all preferred entries that match the passed
+ * type and algorithm.
+ */
+ ArrayList<PreferredEntry> getAll(String type, String algorithm) {
+ ArrayList<PreferredEntry> l = new ArrayList<PreferredEntry>();
+ implGetAll(l, type, algorithm);
+ return l;
+ }
+
+ /*
+ * Compare each preferred entry against the passed type and
+ * algorithm, putting any matches in the passed ArrayList.
+ */
+ private void implGetAll(ArrayList<PreferredEntry> l, String type,
+ String algorithm) {
+ PreferredEntry e;
+
+ for (int i = 0; i < size(); i++) {
+ e = list.get(i);
+ if (e.match(type, algorithm)) {
+ l.add(e);
+ }
+ }
+ }
+
+ public PreferredEntry get(int i) {
+ return list.get(i);
+ }
+
+ public int size() {
+ return list.size();
+ }
+
+ public boolean add(PreferredEntry e) {
+ return list.add(e);
+ }
+
+ public String toString() {
+ String s = "";
+ for (PreferredEntry e: list) {
+ s += e.toString();
+ }
+ return s;
+ }
+ }
+
+ // Individual preferred property entry from jdk.security.provider.preferred
+ private class PreferredEntry {
+ String type = null;
+ String algorithm;
+ String provider;
+
+ PreferredEntry(String t, String p) {
+ int i = t.indexOf('.');
+ if (i > 0) {
+ type = t.substring(0, i);
+ algorithm = t.substring(i + 1);
+ } else {
+ algorithm = t;
+ }
+
+ provider = p;
+ }
+
+ boolean match(String t, String a) {
+ if (debug != null) {
+ debug.println("Config match: " + toString() + " == [" + t +
+ ", " + a + "]");
+ }
+
+ // Compare service type if configured
+ if (type != null && type.compareToIgnoreCase(t) != 0) {
+ return false;
+ }
+
+ // Compare the algorithm string.
+ if (a.compareToIgnoreCase(algorithm) == 0) {
+ if (debug != null) {
+ debug.println("Config entry found: " + toString());
+ }
+ return true;
+ }
+
+ // No match
+ return false;
+ }
+
+ public String toString() {
+ return "[" + type + ", " + algorithm + " : " + provider + "] ";
+ }
+ }
+
}
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/AlgorithmChecker.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/AlgorithmChecker.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -77,6 +77,13 @@
private static final Set<CryptoPrimitive> SIGNATURE_PRIMITIVE_SET =
Collections.unmodifiableSet(EnumSet.of(CryptoPrimitive.SIGNATURE));
+ private static final Set<CryptoPrimitive> KU_PRIMITIVE_SET =
+ Collections.unmodifiableSet(EnumSet.of(
+ CryptoPrimitive.SIGNATURE,
+ CryptoPrimitive.KEY_ENCAPSULATION,
+ CryptoPrimitive.PUBLIC_KEY_ENCRYPTION,
+ CryptoPrimitive.KEY_AGREEMENT));
+
private static final DisabledAlgorithmConstraints
certPathDefaultConstraints = new DisabledAlgorithmConstraints(
DisabledAlgorithmConstraints.PROPERTY_CERTPATH_DISABLED_ALGS);
@@ -210,9 +217,11 @@
null, null, -1, PKIXReason.INVALID_KEY_USAGE);
}
+ // Assume all key usage bits are set if key usage is not present
+ Set<CryptoPrimitive> primitives = KU_PRIMITIVE_SET;
+
if (keyUsage != null) {
- Set<CryptoPrimitive> primitives =
- EnumSet.noneOf(CryptoPrimitive.class);
+ primitives = EnumSet.noneOf(CryptoPrimitive.class);
if (keyUsage[0] || keyUsage[1] || keyUsage[5] || keyUsage[6]) {
// keyUsage[0]: KeyUsage.digitalSignature
@@ -237,15 +246,19 @@
// KeyUsage.encipherOnly and KeyUsage.decipherOnly are
// undefined in the absence of the keyAgreement bit.
- if (!primitives.isEmpty()) {
- if (!constraints.permits(primitives, currPubKey)) {
- throw new CertPathValidatorException(
- "algorithm constraints check failed",
- null, null, -1, BasicReason.ALGORITHM_CONSTRAINED);
- }
+ if (primitives.isEmpty()) {
+ throw new CertPathValidatorException(
+ "incorrect KeyUsage extension",
+ null, null, -1, PKIXReason.INVALID_KEY_USAGE);
}
}
+ if (!constraints.permits(primitives, currPubKey)) {
+ throw new CertPathValidatorException(
+ "algorithm constraints check failed",
+ null, null, -1, BasicReason.ALGORITHM_CONSTRAINED);
+ }
+
// Check with previous cert for signature algorithm and public key
if (prevPubKey != null) {
if (currSigAlg != null) {
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/RevocationChecker.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/RevocationChecker.java Thu Oct 22 11:14:00 2015 -0700
@@ -1068,20 +1068,17 @@
boolean signFlag = true;
List<? extends Certificate> cpList =
cpbr.getCertPath().getCertificates();
- if (cpList.isEmpty()) {
- return;
- }
try {
- for (int i = cpList.size()-1; i >= 0; i-- ) {
- X509Certificate cert = (X509Certificate)cpList.get(i);
+ for (int i = cpList.size() - 1; i >= 0; i--) {
+ X509Certificate cert = (X509Certificate) cpList.get(i);
if (debug != null) {
debug.println("RevocationChecker.buildToNewKey()"
- + " index " + i + " checking "
- + cert);
+ + " index " + i + " checking "
+ + cert);
}
checkCRLs(cert, prevKey2, null, signFlag, true,
- stackedCerts, newAnchors);
+ stackedCerts, newAnchors);
signFlag = certCanSignCrl(cert);
prevKey2 = cert.getPublicKey();
}
@@ -1100,8 +1097,10 @@
// If it doesn't check out, try to find a different key.
// And if we can't find a key, then return false.
PublicKey newKey = cpbr.getPublicKey();
+ X509Certificate newCert = cpList.isEmpty() ?
+ null : (X509Certificate) cpList.get(0);
try {
- checkCRLs(currCert, newKey, (X509Certificate) cpList.get(0),
+ checkCRLs(currCert, newKey, newCert,
true, false, null, params.trustAnchors());
// If that passed, the cert is OK!
return;
--- a/jdk/src/java.base/share/classes/sun/security/ssl/CipherSuite.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/CipherSuite.java Thu Oct 22 11:14:00 2015 -0700
@@ -350,8 +350,6 @@
private static void add(String name, int id, int priority,
KeyExchange keyExchange, BulkCipher cipher, MacAlg mac,
boolean allowed, int obsoleted) {
- // If this is an obsoleted suite, then don't let the TLS 1.2
- // protocol have a valid PRF value.
PRF prf = obsoleted < ProtocolVersion.TLS12.v ? P_NONE : P_SHA256;
add(name, id, priority, keyExchange, cipher, mac, allowed, obsoleted,
--- a/jdk/src/java.base/share/classes/sun/security/ssl/ClientHandshaker.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/ClientHandshaker.java Thu Oct 22 11:14:00 2015 -0700
@@ -672,6 +672,9 @@
}
} else {
// we wanted to resume, but the server refused
+ //
+ // Invalidate the session in case of reusing next time.
+ session.invalidate();
session = null;
if (!enableNewSession) {
throw new SSLException("New session creation is disabled");
--- a/jdk/src/java.base/share/classes/sun/security/ssl/DHCrypt.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/DHCrypt.java Thu Oct 22 11:14:00 2015 -0700
@@ -26,6 +26,11 @@
package sun.security.ssl;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Collections;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
import java.math.BigInteger;
import java.security.*;
import java.io.IOException;
@@ -95,9 +100,35 @@
* Generate a Diffie-Hellman keypair of the specified size.
*/
DHCrypt(int keyLength, SecureRandom random) {
+ this(keyLength,
+ ParametersHolder.definedParams.get(keyLength), random);
+ }
+
+ /**
+ * Generate a Diffie-Hellman keypair using the specified parameters.
+ *
+ * @param modulus the Diffie-Hellman modulus P
+ * @param base the Diffie-Hellman base G
+ */
+ DHCrypt(BigInteger modulus, BigInteger base, SecureRandom random) {
+ this(modulus.bitLength(),
+ new DHParameterSpec(modulus, base), random);
+ }
+
+ /**
+ * Generate a Diffie-Hellman keypair using the specified size and
+ * parameters.
+ */
+ private DHCrypt(int keyLength,
+ DHParameterSpec params, SecureRandom random) {
+
try {
KeyPairGenerator kpg = JsseJce.getKeyPairGenerator("DiffieHellman");
- kpg.initialize(keyLength, random);
+ if (params != null) {
+ kpg.initialize(params, random);
+ } else {
+ kpg.initialize(keyLength, random);
+ }
DHPublicKeySpec spec = generateDHPublicKeySpec(kpg);
if (spec == null) {
@@ -112,33 +143,6 @@
}
}
-
- /**
- * Generate a Diffie-Hellman keypair using the specified parameters.
- *
- * @param modulus the Diffie-Hellman modulus P
- * @param base the Diffie-Hellman base G
- */
- DHCrypt(BigInteger modulus, BigInteger base, SecureRandom random) {
- this.modulus = modulus;
- this.base = base;
- try {
- KeyPairGenerator kpg = JsseJce.getKeyPairGenerator("DiffieHellman");
- DHParameterSpec params = new DHParameterSpec(modulus, base);
- kpg.initialize(params, random);
-
- DHPublicKeySpec spec = generateDHPublicKeySpec(kpg);
- if (spec == null) {
- throw new RuntimeException("Could not generate DH keypair");
- }
-
- publicValue = spec.getY();
- } catch (GeneralSecurityException e) {
- throw new RuntimeException("Could not generate DH keypair", e);
- }
- }
-
-
static DHPublicKeySpec getDHPublicKeySpec(PublicKey key) {
if (key instanceof DHPublicKey) {
DHPublicKey dhKey = (DHPublicKey)key;
@@ -268,4 +272,141 @@
return null;
}
+
+ // lazy initialization holder class idiom for static default parameters
+ //
+ // See Effective Java Second Edition: Item 71.
+ private static class ParametersHolder {
+ private final static boolean debugIsOn =
+ (Debug.getInstance("ssl") != null) && Debug.isOn("sslctx");
+
+ //
+ // Default DH ephemeral parameters
+ //
+ private static final BigInteger g2 = BigInteger.valueOf(2);
+
+ private static final BigInteger p512 = new BigInteger( // generated
+ "D87780E15FF50B4ABBE89870188B049406B5BEA98AB23A02" +
+ "41D88EA75B7755E669C08093D3F0CA7FC3A5A25CF067DCB9" +
+ "A43DD89D1D90921C6328884461E0B6D3", 16);
+ private static final BigInteger p768 = new BigInteger( // RFC 2409
+ "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
+ "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
+ "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
+ "E485B576625E7EC6F44C42E9A63A3620FFFFFFFFFFFFFFFF", 16);
+
+ private static final BigInteger p1024 = new BigInteger( // RFC 2409
+ "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
+ "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
+ "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
+ "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" +
+ "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381" +
+ "FFFFFFFFFFFFFFFF", 16);
+ private static final BigInteger p2048 = new BigInteger( // TLS FEDHE
+ "FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1" +
+ "D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF9" +
+ "7D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD6561" +
+ "2433F51F5F066ED0856365553DED1AF3B557135E7F57C935" +
+ "984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE735" +
+ "30ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FB" +
+ "B96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB19" +
+ "0B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F61" +
+ "9172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD73" +
+ "3BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA" +
+ "886B423861285C97FFFFFFFFFFFFFFFF", 16);
+
+ private static final BigInteger[] supportedPrimes = {
+ p512, p768, p1024, p2048};
+
+ // a measure of the uncertainty that prime modulus p is not a prime
+ //
+ // see BigInteger.isProbablePrime(int certainty)
+ private final static int PRIME_CERTAINTY = 120;
+
+ // the known security property, jdk.tls.server.defaultDHEParameters
+ private final static String PROPERTY_NAME =
+ "jdk.tls.server.defaultDHEParameters";
+
+ private static final Pattern spacesPattern = Pattern.compile("\\s+");
+
+ private final static Pattern syntaxPattern = Pattern.compile(
+ "(\\{[0-9A-Fa-f]+,[0-9A-Fa-f]+\\})" +
+ "(,\\{[0-9A-Fa-f]+,[0-9A-Fa-f]+\\})*");
+
+ private static final Pattern paramsPattern = Pattern.compile(
+ "\\{([0-9A-Fa-f]+),([0-9A-Fa-f]+)\\}");
+
+ // cache of predefined default DH ephemeral parameters
+ private final static Map<Integer,DHParameterSpec> definedParams;
+
+ static {
+ String property = AccessController.doPrivileged(
+ new PrivilegedAction<String>() {
+ public String run() {
+ return Security.getProperty(PROPERTY_NAME);
+ }
+ });
+
+ if (property != null && !property.isEmpty()) {
+ // remove double quote marks from beginning/end of the property
+ if (property.length() >= 2 && property.charAt(0) == '"' &&
+ property.charAt(property.length() - 1) == '"') {
+ property = property.substring(1, property.length() - 1);
+ }
+
+ property = property.trim();
+ }
+
+ if (property != null && !property.isEmpty()) {
+ Matcher spacesMatcher = spacesPattern.matcher(property);
+ property = spacesMatcher.replaceAll("");
+
+ if (debugIsOn) {
+ System.out.println("The Security Property " +
+ PROPERTY_NAME + ": " + property);
+ }
+ }
+
+ Map<Integer,DHParameterSpec> defaultParams = new HashMap<>();
+ if (property != null && !property.isEmpty()) {
+ Matcher syntaxMatcher = syntaxPattern.matcher(property);
+ if (syntaxMatcher.matches()) {
+ Matcher paramsFinder = paramsPattern.matcher(property);
+ while(paramsFinder.find()) {
+ String primeModulus = paramsFinder.group(1);
+ BigInteger p = new BigInteger(primeModulus, 16);
+ if (!p.isProbablePrime(PRIME_CERTAINTY)) {
+ if (debugIsOn) {
+ System.out.println(
+ "Prime modulus p in Security Property, " +
+ PROPERTY_NAME + ", is not a prime: " +
+ primeModulus);
+ }
+
+ continue;
+ }
+
+ String baseGenerator = paramsFinder.group(2);
+ BigInteger g = new BigInteger(baseGenerator, 16);
+
+ DHParameterSpec spec = new DHParameterSpec(p, g);
+ int primeLen = p.bitLength();
+ defaultParams.put(primeLen, spec);
+ }
+ } else if (debugIsOn) {
+ System.out.println("Invalid Security Property, " +
+ PROPERTY_NAME + ", definition");
+ }
+ }
+
+ for (BigInteger p : supportedPrimes) {
+ int primeLen = p.bitLength();
+ defaultParams.putIfAbsent(primeLen, new DHParameterSpec(p, g2));
+ }
+
+ definedParams =
+ Collections.<Integer,DHParameterSpec>unmodifiableMap(
+ defaultParams);
+ }
+ }
}
--- a/jdk/src/java.base/share/classes/sun/security/ssl/SSLEngineInputRecord.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/SSLEngineInputRecord.java Thu Oct 22 11:14:00 2015 -0700
@@ -284,7 +284,7 @@
((plaintext.get() & 0xFF) << 8) |
(plaintext.get() & 0xFF);
plaintext.position(frgPos);
- if (remains < (handshakeLen + 1)) { // 1: handshake type
+ if (remains < (handshakeLen + 4)) { // 4: handshake header
// This handshake message is fragmented.
prevType = handshakeType;
hsMsgOff = remains - 4; // 4: handshake header
--- a/jdk/src/java.base/share/classes/sun/security/util/AbstractAlgorithmConstraints.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/util/AbstractAlgorithmConstraints.java Thu Oct 22 11:14:00 2015 -0700
@@ -54,13 +54,12 @@
String[] algorithmsInProperty = null;
if (property != null && !property.isEmpty()) {
// remove double quote marks from beginning/end of the property
- if (property.charAt(0) == '"'
- && property.charAt(property.length() - 1) == '"') {
+ if (property.length() >= 2 && property.charAt(0) == '"' &&
+ property.charAt(property.length() - 1) == '"') {
property = property.substring(1, property.length() - 1);
}
algorithmsInProperty = property.split(",");
- for (int i = 0; i < algorithmsInProperty.length;
- i++) {
+ for (int i = 0; i < algorithmsInProperty.length; i++) {
algorithmsInProperty[i] = algorithmsInProperty[i].trim();
}
}
Binary file jdk/src/java.base/share/classes/sun/text/resources/nfc.icu has changed
Binary file jdk/src/java.base/share/classes/sun/text/resources/nfkc.icu has changed
Binary file jdk/src/java.base/share/classes/sun/text/resources/nfkc_cf.icu has changed
Binary file jdk/src/java.base/share/classes/sun/text/resources/ubidi.icu has changed
Binary file jdk/src/java.base/share/classes/sun/text/resources/uprops.icu has changed
--- a/jdk/src/java.base/share/conf/security/java.security Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/conf/security/java.security Thu Oct 22 11:14:00 2015 -0700
@@ -90,6 +90,31 @@
security.provider.tbd=sun.security.pkcs11.SunPKCS11
#endif
+#
+# A list of preferred providers for specific algorithms. These providers will
+# be searched for matching algorithms before the list of registered providers.
+# Entries containing errors (parsing, etc) will be ignored. Use the
+# -Djava.security.debug=jca property to debug these errors.
+#
+# The property is a comma-separated list of serviceType.algorithm:provider
+# entries. The serviceType (example: "MessageDigest") is optional, and if
+# not specified, the algorithm applies to all service types that support it.
+# The algorithm is the standard algorithm name or transformation.
+# Transformations can be specified in their full standard name
+# (ex: AES/CBC/PKCS5Padding), or as partial matches (ex: AES, AES/CBC).
+# The provider is the name of the provider. Any provider that does not
+# also appear in the registered list will be ignored.
+#
+# Example:
+# jdk.security.provider.preferred=AES/GCM/NoPadding:SunJCE, \
+# MessageDigest.SHA-256:SUN
+#ifdef solaris-sparc
+jdk.security.provider.preferred=AES:SunJCE, SHA-256:SUN, SHA-384:SUN, SHA-512:SUN
+#endif
+#ifdef solaris-x86
+jdk.security.provider.preferred=AES:SunJCE, RSA:SunRsaSign
+#endif
+
#
# Sun Provider SecureRandom seed source.
@@ -234,6 +259,7 @@
com.sun.org.apache.xalan.internal.xsltc.util.,\
com.sun.org.apache.xml.internal.res.,\
com.sun.org.apache.xml.internal.security.,\
+ com.sun.org.apache.xml.internal.serializer.dom3.,\
com.sun.org.apache.xml.internal.serializer.utils.,\
com.sun.org.apache.xml.internal.utils.,\
com.sun.org.glassfish.,\
@@ -289,6 +315,7 @@
com.sun.org.apache.xalan.internal.xsltc.util.,\
com.sun.org.apache.xml.internal.res.,\
com.sun.org.apache.xml.internal.security.,\
+ com.sun.org.apache.xml.internal.serializer.dom3.,\
com.sun.org.apache.xml.internal.serializer.utils.,\
com.sun.org.apache.xml.internal.utils.,\
com.sun.org.glassfish.,\
@@ -607,3 +634,60 @@
DH_RSA_EXPORT, RSA_EXPORT, \
DH_anon, ECDH_anon, \
RC4_128, RC4_40, DES_CBC, DES40_CBC
+
+# The pre-defined default finite field Diffie-Hellman ephemeral (DHE)
+# parameters for Transport Layer Security (SSL/TLS/DTLS) processing.
+#
+# In traditional SSL/TLS/DTLS connections where finite field DHE parameters
+# negotiation mechanism is not used, the server offers the client group
+# parameters, base generator g and prime modulus p, for DHE key exchange.
+# It is recommended to use dynamic group parameters. This property defines
+# a mechanism that allows you to specify custom group parameters.
+#
+# The syntax of this property string is described as this Java BNF-style:
+# DefaultDHEParameters:
+# DefinedDHEParameters { , DefinedDHEParameters }
+#
+# DefinedDHEParameters:
+# "{" DHEPrimeModulus , DHEBaseGenerator "}"
+#
+# DHEPrimeModulus:
+# HexadecimalDigits
+#
+# DHEBaseGenerator:
+# HexadecimalDigits
+#
+# HexadecimalDigits:
+# HexadecimalDigit { HexadecimalDigit }
+#
+# HexadecimalDigit: one of
+# 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
+#
+# Whitespace characters are ignored.
+#
+# The "DefinedDHEParameters" defines the custom group parameters, prime
+# modulus p and base generator g, for a particular size of prime modulus p.
+# The "DHEPrimeModulus" defines the hexadecimal prime modulus p, and the
+# "DHEBaseGenerator" defines the hexadecimal base generator g of a group
+# parameter. It is recommended to use safe primes for the custom group
+# parameters.
+#
+# If this property is not defined or the value is empty, the underlying JSSE
+# provider's default group parameter is used for each connection.
+#
+# If the property value does not follow the grammar, or a particular group
+# parameter is not valid, the connection will fall back and use the
+# underlying JSSE provider's default group parameter.
+#
+# Note: This property is currently used by OpenJDK's JSSE implementation. It
+# is not guaranteed to be examined and used by other implementations.
+#
+# Example:
+# jdk.tls.server.defaultDHEParameters=
+# { \
+# FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 \
+# 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD \
+# EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 \
+# E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED \
+# EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE65381 \
+# FFFFFFFF FFFFFFFF, 2}
--- a/jdk/src/java.base/share/native/libnet/InetAddress.c Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/native/libnet/InetAddress.c Thu Oct 22 11:14:00 2015 -0700
@@ -38,6 +38,7 @@
jfieldID iac_addressID;
jfieldID iac_familyID;
jfieldID iac_hostNameID;
+jfieldID iac_origHostNameID;
jfieldID ia_preferIPv6AddressID;
static int ia_initialized = 0;
@@ -69,6 +70,8 @@
CHECK_NULL(iac_familyID);
iac_hostNameID = (*env)->GetFieldID(env, iac_class, "hostName", "Ljava/lang/String;");
CHECK_NULL(iac_hostNameID);
+ iac_origHostNameID = (*env)->GetFieldID(env, iac_class, "originalHostName", "Ljava/lang/String;");
+ CHECK_NULL(iac_origHostNameID);
ia_initialized = 1;
}
}
--- a/jdk/src/java.base/share/native/libnet/net_util.c Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/native/libnet/net_util.c Thu Oct 22 11:14:00 2015 -0700
@@ -174,6 +174,7 @@
void setInetAddress_hostName(JNIEnv *env, jobject iaObj, jobject host) {
jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
(*env)->SetObjectField(env, holder, iac_hostNameID, host);
+ (*env)->SetObjectField(env, holder, iac_origHostNameID, host);
}
int getInetAddress_addr(JNIEnv *env, jobject iaObj) {
--- a/jdk/src/java.base/share/native/libnet/net_util.h Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.base/share/native/libnet/net_util.h Thu Oct 22 11:14:00 2015 -0700
@@ -53,6 +53,7 @@
extern jfieldID iac_addressID;
extern jfieldID iac_familyID;
extern jfieldID iac_hostNameID;
+extern jfieldID iac_origHostNameID;
extern jfieldID ia_preferIPv6AddressID;
JNIEXPORT void JNICALL initInetAddressIDs(JNIEnv *env);
--- a/jdk/src/java.datatransfer/macosx/classes/sun/datatransfer/resources/flavormap.properties Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.datatransfer/macosx/classes/sun/datatransfer/resources/flavormap.properties Thu Oct 22 11:14:00 2015 -0700
@@ -74,3 +74,4 @@
HTML=text/html;charset=utf-8;eoln="\r\n";terminators=1
URL=application/x-java-url;class=java.net.URL,\
text/uri-list;eoln="\r\n";terminators=1
+XPICT=image/x-pict;class=java.io.InputStream
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDataTransferer.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDataTransferer.java Thu Oct 22 11:14:00 2015 -0700
@@ -54,7 +54,8 @@
"PDF",
"URL",
"PNG",
- "JFIF"
+ "JFIF",
+ "XPICT"
};
static {
@@ -78,6 +79,7 @@
public static final int CF_URL = 7;
public static final int CF_PNG = 8;
public static final int CF_JPEG = 9;
+ public static final int CF_XPICT = 10;
private CDataTransferer() {}
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CDataTransferer.m Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CDataTransferer.m Thu Oct 22 11:14:00 2015 -0700
@@ -56,6 +56,8 @@
forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_PNG]];
[sStandardMappings setObject:(NSString*)kUTTypeJPEG
forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_JPEG]];
+ [sStandardMappings setObject:NSPICTPboardType
+ forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_XPICT]];
}
return sStandardMappings;
}
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java Thu Oct 22 11:14:00 2015 -0700
@@ -290,6 +290,8 @@
imageType = VERSION_2_8_BIT;
} else if (bitsPerPixel == 24) {
imageType = VERSION_2_24_BIT;
+ } else {
+ throw new IIOException(I18N.getString("BMPImageReader8"));
}
// Read in the palette
@@ -364,6 +366,9 @@
metadata.redMask = redMask;
metadata.greenMask = greenMask;
metadata.blueMask = blueMask;
+ } else {
+ throw new
+ IIOException(I18N.getString("BMPImageReader8"));
}
metadata.bmpVersion = VERSION_3;
@@ -375,6 +380,9 @@
imageType = VERSION_3_NT_16_BIT;
} else if (bitsPerPixel == 32) {
imageType = VERSION_3_NT_32_BIT;
+ } else {
+ throw new
+ IIOException(I18N.getString("BMPImageReader8"));
}
// BitsField encoding
@@ -493,6 +501,9 @@
greenMask = 0x0000FF00;
blueMask = 0x000000FF;
}
+ } else {
+ throw new
+ IIOException(I18N.getString("BMPImageReader8"));
}
metadata.redMask = redMask;
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/common/iio-plugin.properties Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/common/iio-plugin.properties Thu Oct 22 11:14:00 2015 -0700
@@ -23,6 +23,7 @@
BMPImageReader5=Input has not been set.
BMPImageReader6=Unable to read the image header.
BMPImageReader7=Invalid bitmap offset.
+BMPImageReader8=Invalid bits per pixel in image header.
BMPImageWriter0=Output is not an ImageOutputStream.
BMPImageWriter1=The image region to be encoded is empty.
BMPImageWriter2=Only 1 or 3 band image is encoded.
--- a/jdk/src/java.desktop/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java Thu Oct 22 11:14:00 2015 -0700
@@ -1569,6 +1569,11 @@
&& OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_VISTA) >= 0;
}
+ static boolean isOnWindows7() {
+ return OSInfo.getOSType() == OSInfo.OSType.WINDOWS
+ && OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_7) >= 0;
+ }
+
private void initVistaComponentDefaults(UIDefaults table) {
if (! isOnVista()) {
return;
@@ -1638,28 +1643,30 @@
}
table.putDefaults(menuDefaults);
- /* no margins */
- InsetsUIResource insets = new InsetsUIResource(0, 0, 0, 0);
- for (int i = 0, j = 0; i < menuClasses.length; i++) {
- String key = menuClasses[i] + ".margin";
- Object oldValue = table.get(key);
- menuDefaults[j++] = key;
- menuDefaults[j++] = new XPValue(insets, oldValue);
- }
- table.putDefaults(menuDefaults);
+ /*For Windows7 margin and checkIconOffset should be greater than 0 */
+ if (!isOnWindows7()) {
+ /* no margins */
+ InsetsUIResource insets = new InsetsUIResource(0, 0, 0, 0);
+ for (int i = 0, j = 0; i < menuClasses.length; i++) {
+ String key = menuClasses[i] + ".margin";
+ Object oldValue = table.get(key);
+ menuDefaults[j++] = key;
+ menuDefaults[j++] = new XPValue(insets, oldValue);
+ }
+ table.putDefaults(menuDefaults);
- /* set checkIcon offset */
- Integer checkIconOffsetInteger =
- Integer.valueOf(0);
- for (int i = 0, j = 0; i < menuClasses.length; i++) {
- String key = menuClasses[i] + ".checkIconOffset";
- Object oldValue = table.get(key);
- menuDefaults[j++] = key;
- menuDefaults[j++] =
- new XPValue(checkIconOffsetInteger, oldValue);
+ /* set checkIcon offset */
+ Integer checkIconOffsetInteger =
+ Integer.valueOf(0);
+ for (int i = 0, j = 0; i < menuClasses.length; i++) {
+ String key = menuClasses[i] + ".checkIconOffset";
+ Object oldValue = table.get(key);
+ menuDefaults[j++] = key;
+ menuDefaults[j++] =
+ new XPValue(checkIconOffsetInteger, oldValue);
+ }
+ table.putDefaults(menuDefaults);
}
- table.putDefaults(menuDefaults);
-
/* set width of the gap after check icon */
Integer afterCheckIconGap = WindowsPopupMenuUI.getSpanBeforeGutter()
+ WindowsPopupMenuUI.getGutterWidth()
--- a/jdk/src/java.desktop/share/classes/java/awt/Button.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Button.java Thu Oct 22 11:14:00 2015 -0700
@@ -26,6 +26,7 @@
package java.awt;
import java.awt.peer.ButtonPeer;
+import java.beans.BeanProperty;
import java.util.EventListener;
import java.awt.event.*;
import java.io.ObjectOutputStream;
@@ -511,11 +512,10 @@
*
* @return an <code>AccessibleAWTButton</code> that serves as the
* <code>AccessibleContext</code> of this <code>Button</code>
- * @beaninfo
- * expert: true
- * description: The AccessibleContext associated with this Button.
* @since 1.3
*/
+ @BeanProperty(expert = true, description
+ = "The AccessibleContext associated with this Button.")
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleAWTButton();
--- a/jdk/src/java.desktop/share/classes/java/awt/Component.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Component.java Thu Oct 22 11:14:00 2015 -0700
@@ -1763,8 +1763,6 @@
* is returned
* @see #setForeground
* @since 1.0
- * @beaninfo
- * bound: true
*/
@Transient
public Color getForeground() {
@@ -1843,8 +1841,6 @@
* component will inherit the background color of its parent
* @see #getBackground
* @since 1.0
- * @beaninfo
- * bound: true
*/
public void setBackground(Color c) {
Color oldColor = background;
@@ -1911,8 +1907,6 @@
* @see #getFont
* @see #invalidate
* @since 1.0
- * @beaninfo
- * bound: true
*/
public void setFont(Font f) {
Font oldFont, newFont;
@@ -7234,8 +7228,6 @@
* @param focusable indicates whether this Component is focusable
* @see #isFocusable
* @since 1.4
- * @beaninfo
- * bound: true
*/
public void setFocusable(boolean focusable) {
boolean oldFocusable;
@@ -7327,8 +7319,6 @@
* or if any keystroke already maps to another focus traversal
* operation for this Component
* @since 1.4
- * @beaninfo
- * bound: true
*/
public void setFocusTraversalKeys(int id,
Set<? extends AWTKeyStroke> keystrokes)
@@ -7479,8 +7469,6 @@
* @see #setFocusTraversalKeys
* @see #getFocusTraversalKeys
* @since 1.4
- * @beaninfo
- * bound: true
*/
public void setFocusTraversalKeysEnabled(boolean
focusTraversalKeysEnabled) {
@@ -8995,8 +8983,6 @@
* @see #invalidate
*
* @author Laura Werner, IBM
- * @beaninfo
- * bound: true
*/
public void setComponentOrientation(ComponentOrientation o) {
ComponentOrientation oldValue = componentOrientation;
--- a/jdk/src/java.desktop/share/classes/java/awt/Container.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Container.java Thu Oct 22 11:14:00 2015 -0700
@@ -3131,8 +3131,6 @@
* or if any keystroke already maps to another focus traversal
* operation for this Container
* @since 1.4
- * @beaninfo
- * bound: true
*/
public void setFocusTraversalKeys(int id,
Set<? extends AWTKeyStroke> keystrokes)
@@ -3347,8 +3345,6 @@
* @see #setFocusCycleRoot
* @see #isFocusCycleRoot
* @since 1.4
- * @beaninfo
- * bound: true
*/
public void setFocusTraversalPolicy(FocusTraversalPolicy policy) {
FocusTraversalPolicy oldPolicy;
@@ -3427,8 +3423,6 @@
* @see ContainerOrderFocusTraversalPolicy
* @see #setFocusTraversalPolicyProvider
* @since 1.4
- * @beaninfo
- * bound: true
*/
public void setFocusCycleRoot(boolean focusCycleRoot) {
boolean oldFocusCycleRoot;
@@ -3472,8 +3466,6 @@
* @see #getFocusTraversalPolicy
* @see #isFocusTraversalPolicyProvider
* @since 1.5
- * @beaninfo
- * bound: true
*/
public final void setFocusTraversalPolicyProvider(boolean provider) {
boolean oldProvider;
@@ -3499,8 +3491,6 @@
* @return <code>true</code> if this container provides focus traversal
* policy, <code>false</code> otherwise
* @since 1.5
- * @beaninfo
- * bound: true
*/
public final boolean isFocusTraversalPolicyProvider() {
return focusTraversalPolicyProvider;
--- a/jdk/src/java.desktop/share/classes/java/awt/FileDialog.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/FileDialog.java Thu Oct 22 11:14:00 2015 -0700
@@ -174,6 +174,12 @@
* Creates a file dialog for loading a file. The title of the
* file dialog is initially empty. This is a convenience method for
* <code>FileDialog(parent, "", LOAD)</code>.
+ * <p>
+ * <strong>Note:</strong> Some platforms may not support
+ * showing the user-specified title in a file dialog.
+ * In this situation, either no title will be displayed in the file dialog's
+ * title bar or, on some systems, the file dialog's title bar will not be
+ * displayed.
*
* @param parent the owner of the dialog
* @since 1.1
@@ -187,6 +193,12 @@
* a file. The files shown are those in the current directory.
* This is a convenience method for
* <code>FileDialog(parent, title, LOAD)</code>.
+ * <p>
+ * <strong>Note:</strong> Some platforms may not support
+ * showing the user-specified title in a file dialog.
+ * In this situation, either no title will be displayed in the file dialog's
+ * title bar or, on some systems, the file dialog's title bar will not be
+ * displayed.
*
* @param parent the owner of the dialog
* @param title the title of the dialog
@@ -204,6 +216,12 @@
* in the current directory. If the value of
* <code>mode</code> is <code>SAVE</code>, the file dialog is finding
* a place to write a file.
+ * <p>
+ * <strong>Note:</strong> Some platforms may not support
+ * showing the user-specified title in a file dialog.
+ * In this situation, either no title will be displayed in the file dialog's
+ * title bar or, on some systems, the file dialog's title bar will not be
+ * displayed.
*
* @param parent the owner of the dialog
* @param title the title of the dialog
@@ -224,6 +242,12 @@
* Creates a file dialog for loading a file. The title of the
* file dialog is initially empty. This is a convenience method for
* <code>FileDialog(parent, "", LOAD)</code>.
+ * <p>
+ * <strong>Note:</strong> Some platforms may not support
+ * showing the user-specified title in a file dialog.
+ * In this situation, either no title will be displayed in the file dialog's
+ * title bar or, on some systems, the file dialog's title bar will not be
+ * displayed.
*
* @param parent the owner of the dialog
* @exception java.lang.IllegalArgumentException if the <code>parent</code>'s
@@ -245,6 +269,12 @@
* a file. The files shown are those in the current directory.
* This is a convenience method for
* <code>FileDialog(parent, title, LOAD)</code>.
+ * <p>
+ * <strong>Note:</strong> Some platforms may not support
+ * showing the user-specified title in a file dialog.
+ * In this situation, either no title will be displayed in the file dialog's
+ * title bar or, on some systems, the file dialog's title bar will not be
+ * displayed.
*
* @param parent the owner of the dialog
* @param title the title of the dialog; a <code>null</code> value
@@ -273,6 +303,12 @@
* in the current directory. If the value of
* <code>mode</code> is <code>SAVE</code>, the file dialog is finding
* a place to write a file.
+ * <p>
+ * <strong>Note:</strong> Some platforms may not support
+ * showing the user-specified title in a file dialog.
+ * In this situation, either no title will be displayed in the file dialog's
+ * title bar or, on some systems, the file dialog's title bar will not be
+ * displayed.
*
* @param parent the owner of the dialog
* @param title the title of the dialog; a <code>null</code> value
@@ -300,6 +336,22 @@
setLayout(null);
}
+
+ /**
+ * {@inheritDoc}
+ * <p>
+ * <strong>Note:</strong> Some platforms may not support
+ * showing the user-specified title in a file dialog.
+ * In this situation, either no title will be displayed in the file dialog's
+ * title bar or, on some systems, the file dialog's title bar will not be
+ * displayed.
+ */
+ @Override
+ public void setTitle(String title) {
+ super.setTitle(title);
+ }
+
+
/**
* Constructs a name for this component. Called by <code>getName()</code>
* when the name is <code>null</code>.
--- a/jdk/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java Thu Oct 22 11:14:00 2015 -0700
@@ -528,8 +528,6 @@
* current KeyboardFocusManager for the calling thread's context
* and if the calling thread does not have "replaceKeyboardFocusManager"
* permission
- * @beaninfo
- * bound: true
*/
protected void setGlobalFocusOwner(Component focusOwner)
throws SecurityException
@@ -744,8 +742,6 @@
* current KeyboardFocusManager for the calling thread's context
* and if the calling thread does not have "replaceKeyboardFocusManager"
* permission
- * @beaninfo
- * bound: true
*/
protected void setGlobalPermanentFocusOwner(Component permanentFocusOwner)
throws SecurityException
@@ -847,8 +843,6 @@
* current KeyboardFocusManager for the calling thread's context
* and if the calling thread does not have "replaceKeyboardFocusManager"
* permission
- * @beaninfo
- * bound: true
*/
protected void setGlobalFocusedWindow(Window focusedWindow)
throws SecurityException
@@ -952,8 +946,6 @@
* current KeyboardFocusManager for the calling thread's context
* and if the calling thread does not have "replaceKeyboardFocusManager"
* permission
- * @beaninfo
- * bound: true
*/
protected void setGlobalActiveWindow(Window activeWindow)
throws SecurityException
@@ -1008,8 +1000,6 @@
* @see Container#setFocusTraversalPolicy
* @see Container#getFocusTraversalPolicy
* @throws IllegalArgumentException if defaultPolicy is null
- * @beaninfo
- * bound: true
*/
public void setDefaultFocusTraversalPolicy(FocusTraversalPolicy
defaultPolicy) {
@@ -1113,8 +1103,6 @@
* represents a {@code KEY_TYPED} event,
* or if any keystroke already maps
* to another default focus traversal operation
- * @beaninfo
- * bound: true
*/
public void
setDefaultFocusTraversalKeys(int id,
@@ -1272,8 +1260,6 @@
* @see #getGlobalCurrentFocusCycleRoot
* @throws SecurityException if the calling thread does not have
* "replaceKeyboardFocusManager" permission
- * @beaninfo
- * bound: true
*/
public void setGlobalCurrentFocusCycleRoot(Container newFocusCycleRoot)
throws SecurityException
--- a/jdk/src/java.desktop/share/classes/java/awt/TextArea.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/TextArea.java Thu Oct 22 11:14:00 2015 -0700
@@ -327,9 +327,8 @@
TextAreaPeer peer = (TextAreaPeer)this.peer;
if (peer != null) {
peer.insert(str, pos);
- } else {
- text = text.substring(0, pos) + str + text.substring(pos);
}
+ text = text.substring(0, pos) + str + text.substring(pos);
}
/**
@@ -355,11 +354,7 @@
*/
@Deprecated
public synchronized void appendText(String str) {
- if (peer != null) {
insertText(str, getText().length());
- } else {
- text = text + str;
- }
}
/**
@@ -403,9 +398,8 @@
TextAreaPeer peer = (TextAreaPeer)this.peer;
if (peer != null) {
peer.replaceRange(str, start, end);
- } else {
- text = text.substring(0, start) + str + text.substring(end);
}
+ text = text.substring(0, start) + str + text.substring(end);
}
/**
--- a/jdk/src/java.desktop/share/classes/java/awt/font/NumericShaper.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/font/NumericShaper.java Thu Oct 22 11:14:00 2015 -0700
@@ -672,7 +672,7 @@
0x0825, 0x0828,
0x0829, 0x082e,
0x0859, 0x085c,
- 0x08e4, 0x0903,
+ 0x08e3, 0x0903,
0x093a, 0x093b,
0x093c, 0x093d,
0x0941, 0x0949,
@@ -721,7 +721,8 @@
0x0acd, 0x0ad0,
0x0ad1, 0x0ae0,
0x0ae2, 0x0ae6,
- 0x0af1, 0x0b02,
+ 0x0af1, 0x0af9,
+ 0x0afa, 0x0b02,
0x0b04, 0x0b05,
0x0b0d, 0x0b0f,
0x0b11, 0x0b13,
@@ -761,7 +762,7 @@
0x0c3a, 0x0c3d,
0x0c3e, 0x0c41,
0x0c45, 0x0c58,
- 0x0c5a, 0x0c60,
+ 0x0c5b, 0x0c60,
0x0c62, 0x0c66,
0x0c70, 0x0c7f,
0x0c80, 0x0c82,
@@ -787,7 +788,7 @@
0x0d49, 0x0d4a,
0x0d4d, 0x0d4e,
0x0d4f, 0x0d57,
- 0x0d58, 0x0d60,
+ 0x0d58, 0x0d5f,
0x0d62, 0x0d66,
0x0d76, 0x0d79,
0x0d80, 0x0d82,
@@ -867,7 +868,8 @@
0x135b, 0x1360,
0x137d, 0x1380,
0x1390, 0x13a0,
- 0x13f5, 0x1401,
+ 0x13f6, 0x13f8,
+ 0x13fe, 0x1401,
0x1680, 0x1681,
0x169b, 0x16a0,
0x16f9, 0x1700,
@@ -1019,7 +1021,7 @@
0x33de, 0x33e0,
0x33ff, 0x3400,
0x4db6, 0x4e00,
- 0x9fcd, 0xa000,
+ 0x9fd6, 0xa000,
0xa48d, 0xa4d0,
0xa60d, 0xa610,
0xa62c, 0xa640,
@@ -1028,9 +1030,8 @@
0xa6f0, 0xa6f2,
0xa6f8, 0xa722,
0xa788, 0xa789,
- 0xa78f, 0xa790,
0xa7ae, 0xa7b0,
- 0xa7b2, 0xa7f7,
+ 0xa7b8, 0xa7f7,
0xa802, 0xa803,
0xa806, 0xa807,
0xa80b, 0xa80c,
@@ -1040,7 +1041,7 @@
0xa874, 0xa880,
0xa8c4, 0xa8ce,
0xa8da, 0xa8f2,
- 0xa8fc, 0xa900,
+ 0xa8fe, 0xa900,
0xa926, 0xa92e,
0xa947, 0xa952,
0xa954, 0xa95f,
@@ -1073,8 +1074,7 @@
0xab17, 0xab20,
0xab27, 0xab28,
0xab2f, 0xab30,
- 0xab60, 0xab64,
- 0xab66, 0xabc0,
+ 0xab66, 0xab70,
0xabe5, 0xabe6,
0xabe8, 0xabe9,
0xabed, 0xabf0,
@@ -1152,15 +1152,20 @@
0x11173, 0x11174,
0x11177, 0x11182,
0x111b6, 0x111bf,
- 0x111c9, 0x111cd,
+ 0x111ca, 0x111cd,
0x111ce, 0x111d0,
- 0x111db, 0x111e1,
+ 0x111e0, 0x111e1,
0x111f5, 0x11200,
0x11212, 0x11213,
0x1122f, 0x11232,
0x11234, 0x11235,
0x11236, 0x11238,
- 0x1123e, 0x112b0,
+ 0x1123e, 0x11280,
+ 0x11287, 0x11288,
+ 0x11289, 0x1128a,
+ 0x1128e, 0x1128f,
+ 0x1129e, 0x1129f,
+ 0x112aa, 0x112b0,
0x112df, 0x112e0,
0x112e3, 0x112f0,
0x112fa, 0x11302,
@@ -1174,7 +1179,8 @@
0x11340, 0x11341,
0x11345, 0x11347,
0x11349, 0x1134b,
- 0x1134e, 0x11357,
+ 0x1134e, 0x11350,
+ 0x11351, 0x11357,
0x11358, 0x1135d,
0x11364, 0x11480,
0x114b3, 0x114b9,
@@ -1186,7 +1192,7 @@
0x115b2, 0x115b8,
0x115bc, 0x115be,
0x115bf, 0x115c1,
- 0x115ca, 0x11600,
+ 0x115dc, 0x11600,
0x11633, 0x1163b,
0x1163d, 0x1163e,
0x1163f, 0x11641,
@@ -1196,14 +1202,20 @@
0x116ad, 0x116ae,
0x116b0, 0x116b6,
0x116b7, 0x116c0,
- 0x116ca, 0x118a0,
+ 0x116ca, 0x11700,
+ 0x1171a, 0x11720,
+ 0x11722, 0x11726,
+ 0x11727, 0x11730,
+ 0x11740, 0x118a0,
0x118f3, 0x118ff,
0x11900, 0x11ac0,
0x11af9, 0x12000,
- 0x12399, 0x12400,
+ 0x1239a, 0x12400,
0x1246f, 0x12470,
- 0x12475, 0x13000,
- 0x1342f, 0x16800,
+ 0x12475, 0x12480,
+ 0x12544, 0x13000,
+ 0x1342f, 0x14400,
+ 0x14647, 0x16800,
0x16a39, 0x16a40,
0x16a5f, 0x16a60,
0x16a6a, 0x16a6e,
@@ -1232,7 +1244,7 @@
0x1d173, 0x1d183,
0x1d185, 0x1d18c,
0x1d1aa, 0x1d1ae,
- 0x1d1de, 0x1d360,
+ 0x1d1e9, 0x1d360,
0x1d372, 0x1d400,
0x1d455, 0x1d456,
0x1d49d, 0x1d49e,
@@ -1258,7 +1270,12 @@
0x1d74f, 0x1d750,
0x1d789, 0x1d78a,
0x1d7c3, 0x1d7c4,
- 0x1d7cc, 0x1e800,
+ 0x1d7cc, 0x1d800,
+ 0x1da00, 0x1da37,
+ 0x1da3b, 0x1da6d,
+ 0x1da75, 0x1da76,
+ 0x1da84, 0x1da85,
+ 0x1da8c, 0x1e800,
0x1e8d0, 0x1e8d7,
0x1eef0, 0x1eef2,
0x1f000, 0x1f110,
@@ -1271,7 +1288,8 @@
0x1f252, 0x20000,
0x2a6d7, 0x2a700,
0x2b735, 0x2b740,
- 0x2b81e, 0x2f800,
+ 0x2b81e, 0x2b820,
+ 0x2cea2, 0x2f800,
0x2fa1e, 0xf0000,
0xffffe, 0x100000,
0x10fffe, 0x10ffff // sentinel
--- a/jdk/src/java.desktop/share/classes/java/beans/PropertyDescriptor.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/beans/PropertyDescriptor.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,7 @@
import java.util.Map.Entry;
import com.sun.beans.introspect.PropertyInfo;
+import sun.reflect.misc.ReflectUtil;
/**
* A PropertyDescriptor describes one property that a Java Bean
@@ -463,8 +464,9 @@
public PropertyEditor createPropertyEditor(Object bean) {
Object editor = null;
- Class<?> cls = getPropertyEditorClass();
- if (cls != null) {
+ final Class<?> cls = getPropertyEditorClass();
+ if (cls != null && PropertyEditor.class.isAssignableFrom(cls)
+ && ReflectUtil.isPackageAccessible(cls)) {
Constructor<?> ctor = null;
if (bean != null) {
try {
--- a/jdk/src/java.desktop/share/classes/java/beans/SimpleBeanInfo.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/beans/SimpleBeanInfo.java Thu Oct 22 11:14:00 2015 -0700
@@ -28,6 +28,8 @@
import java.awt.Image;
import java.awt.Toolkit;
import java.io.InputStream;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
/**
* This is a support class to make it easier for people to provide
@@ -41,13 +43,13 @@
*
* @since 1.1
*/
-
public class SimpleBeanInfo implements BeanInfo {
/**
* Deny knowledge about the class and customizer of the bean.
* You can override this if you wish to provide explicit info.
*/
+ @Override
public BeanDescriptor getBeanDescriptor() {
return null;
}
@@ -56,6 +58,7 @@
* Deny knowledge of properties. You can override this
* if you wish to provide explicit property info.
*/
+ @Override
public PropertyDescriptor[] getPropertyDescriptors() {
return null;
}
@@ -64,6 +67,7 @@
* Deny knowledge of a default property. You can override this
* if you wish to define a default property for the bean.
*/
+ @Override
public int getDefaultPropertyIndex() {
return -1;
}
@@ -72,6 +76,7 @@
* Deny knowledge of event sets. You can override this
* if you wish to provide explicit event set info.
*/
+ @Override
public EventSetDescriptor[] getEventSetDescriptors() {
return null;
}
@@ -80,6 +85,7 @@
* Deny knowledge of a default event. You can override this
* if you wish to define a default event for the bean.
*/
+ @Override
public int getDefaultEventIndex() {
return -1;
}
@@ -88,6 +94,7 @@
* Deny knowledge of methods. You can override this
* if you wish to provide explicit method info.
*/
+ @Override
public MethodDescriptor[] getMethodDescriptors() {
return null;
}
@@ -97,6 +104,7 @@
* may override this if you want to (for example) return a
* BeanInfo for a base class.
*/
+ @Override
public BeanInfo[] getAdditionalBeanInfo() {
return null;
}
@@ -105,11 +113,64 @@
* Claim there are no icons available. You can override
* this if you want to provide icons for your bean.
*/
- public Image getIcon(int iconKind) {
+ @Override
+ public Image getIcon(final int iconKind) {
+ final BeanDescriptor descriptor = getBeanDescriptor();
+ if (descriptor != null) {
+ final Class<?> type = descriptor.getBeanClass();
+ if (type != null && type.getClassLoader() == null
+ && type.getAnnotation(JavaBean.class) != null) {
+ final String name = type.getName();
+ final int index = name.lastIndexOf('.');
+ if (name.substring(0, index).equals("javax.swing")) {
+ final String className = type.getSimpleName();
+ switch (iconKind) {
+ case ICON_COLOR_32x32:
+ return loadImage(className, "Color32.gif");
+ case ICON_COLOR_16x16:
+ return loadImage(className, "Color16.gif");
+ case ICON_MONO_32x32:
+ return loadImage(className, "Mono32.gif");
+ case ICON_MONO_16x16:
+ return loadImage(className, "Mono16.gif");
+ }
+ }
+ }
+ }
return null;
}
/**
+ * This is a utility method to help in loading standard icon images.
+ *
+ * @param resourceName A pathname relative to the directory holding the
+ * class file of the current class
+ * @return an image object. May be null if the load failed.
+ * @see java.beans.SimpleBeanInfo#loadImage(String)
+ */
+ private Image loadStandardImage(final String resourceName) {
+ return AccessController.doPrivileged(
+ (PrivilegedAction<Image>) () -> loadImage(resourceName));
+ }
+
+ /**
+ * This is a utility method to help in loading standard icon images.
+ *
+ * @param resourceName A pathname relative to the directory holding the
+ * class file of the current class
+ * @param suffix A {@code String} containing a file suffix (<i>e.g.</i>,
+ * "Color32.gif" or "Mono32.gif")
+ * @return an image object. May be null if the load failed.
+ * @see java.beans.SimpleBeanInfo#loadImage(String)
+ */
+ private Image loadImage(final String resourceName, final String suffix) {
+ final String prefix = "/javax/swing/beaninfo/images/";
+ final Image image = loadStandardImage(prefix + resourceName + suffix);
+ return image == null ? loadStandardImage(prefix + "JComponent" + suffix)
+ : image;
+ }
+
+ /**
* This is a utility method to help in loading icon images.
* It takes the name of a resource file associated with the
* current object's class file and loads an image object
--- a/jdk/src/java.desktop/share/classes/javax/accessibility/AccessibleContext.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/accessibility/AccessibleContext.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -29,11 +29,15 @@
import sun.awt.AppContext;
import java.util.Locale;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyChangeEvent;
import java.awt.IllegalComponentStateException;
+import javax.swing.SwingContainer;
+
/**
* AccessibleContext represents the minimum information all accessible objects
* return. This information includes the accessible name, description, role,
@@ -69,17 +73,13 @@
* minimum and maximum values. Any object that supports a numerical value
* should support this interface.</ul>
*
- *
- * @beaninfo
- * attribute: isContainer false
- * description: Minimal information that all accessible objects return
- *
-
* @author Peter Korn
* @author Hans Muller
* @author Willie Walker
* @author Lynn Monsanto
*/
+@JavaBean(description = "Minimal information that all accessible objects return")
+@SwingContainer(false)
public abstract class AccessibleContext {
/**
@@ -447,11 +447,9 @@
*
* @see #getAccessibleName
* @see #addPropertyChangeListener
- *
- * @beaninfo
- * preferred: true
- * description: Sets the accessible name for the component.
*/
+ @BeanProperty(preferred = true, description
+ = "Sets the accessible name for the component.")
public void setAccessibleName(String s) {
String oldName = accessibleName;
accessibleName = s;
@@ -483,11 +481,9 @@
*
* @see #setAccessibleName
* @see #addPropertyChangeListener
- *
- * @beaninfo
- * preferred: true
- * description: Sets the accessible description for the component.
*/
+ @BeanProperty(preferred = true, description
+ = "Sets the accessible description for the component.")
public void setAccessibleDescription(String s) {
String oldDescription = accessibleDescription;
accessibleDescription = s;
--- a/jdk/src/java.desktop/share/classes/javax/swing/AbstractButton.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/AbstractButton.java Thu Oct 22 11:14:00 2015 -0700
@@ -26,23 +26,19 @@
import java.awt.*;
import java.awt.event.*;
-import java.awt.image.*;
import java.text.*;
import java.awt.geom.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.Transient;
import java.util.Enumeration;
-import java.util.Vector;
import java.io.Serializable;
import javax.swing.event.*;
-import javax.swing.border.*;
import javax.swing.plaf.*;
import javax.accessibility.*;
import javax.swing.text.*;
-import javax.swing.text.html.*;
-import javax.swing.plaf.basic.*;
-import java.util.*;
/**
* Defines common behaviors for buttons and menu items.
@@ -73,6 +69,7 @@
* @author Jeff Dinkins
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI")
@SuppressWarnings("serial") // Same-version serialization only
public abstract class AbstractButton extends JComponent implements ItemSelectable, SwingConstants {
@@ -251,12 +248,9 @@
* @see <a href="Action.html#buttonActions">Swing Components Supporting
* <code>Action</code></a>
* @since 1.6
- * @beaninfo
- * bound: true
- * expert: true
- * description: Whether the text of the button should come from
- * the <code>Action</code>.
*/
+ @BeanProperty(expert = true, description
+ = "Whether the text of the button should come from the <code>Action</code>.")
public void setHideActionText(boolean hideActionText) {
if (hideActionText != this.hideActionText) {
this.hideActionText = hideActionText;
@@ -296,12 +290,9 @@
* Sets the button's text.
* @param text the string used to set the text
* @see #getText
- * @beaninfo
- * bound: true
- * preferred: true
- * attribute: visualUpdate true
- * description: The button's text.
*/
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "The button's text.")
public void setText(String text) {
String oldValue = this.text;
this.text = text;
@@ -390,12 +381,9 @@
* effectively be ignored).
*
* @param m the space between the border and the label
- *
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The space between the button's border and the label.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The space between the button's border and the label.")
public void setMargin(Insets m) {
// Cache the old margin if it comes from the UI
if(m instanceof UIResource) {
@@ -448,11 +436,9 @@
* @param defaultIcon the icon used as the default image
* @see #getIcon
* @see #setPressedIcon
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The button's default icon
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The button's default icon")
public void setIcon(Icon defaultIcon) {
Icon oldValue = this.defaultIcon;
this.defaultIcon = defaultIcon;
@@ -495,11 +481,9 @@
* Sets the pressed icon for the button.
* @param pressedIcon the icon used as the "pressed" image
* @see #getPressedIcon
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The pressed icon for the button.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The pressed icon for the button.")
public void setPressedIcon(Icon pressedIcon) {
Icon oldValue = this.pressedIcon;
this.pressedIcon = pressedIcon;
@@ -529,11 +513,9 @@
* Sets the selected icon for the button.
* @param selectedIcon the icon used as the "selected" image
* @see #getSelectedIcon
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The selected icon for the button.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The selected icon for the button.")
public void setSelectedIcon(Icon selectedIcon) {
Icon oldValue = this.selectedIcon;
this.selectedIcon = selectedIcon;
@@ -575,11 +557,9 @@
* Sets the rollover icon for the button.
* @param rolloverIcon the icon used as the "rollover" image
* @see #getRolloverIcon
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The rollover icon for the button.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The rollover icon for the button.")
public void setRolloverIcon(Icon rolloverIcon) {
Icon oldValue = this.rolloverIcon;
this.rolloverIcon = rolloverIcon;
@@ -612,11 +592,9 @@
* @param rolloverSelectedIcon the icon used as the
* "selected rollover" image
* @see #getRolloverSelectedIcon
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The rollover selected icon for the button.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The rollover selected icon for the button.")
public void setRolloverSelectedIcon(Icon rolloverSelectedIcon) {
Icon oldValue = this.rolloverSelectedIcon;
this.rolloverSelectedIcon = rolloverSelectedIcon;
@@ -664,11 +642,9 @@
* Sets the disabled icon for the button.
* @param disabledIcon the icon used as the disabled image
* @see #getDisabledIcon
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The disabled icon for the button.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The disabled icon for the button.")
public void setDisabledIcon(Icon disabledIcon) {
Icon oldValue = this.disabledIcon;
this.disabledIcon = disabledIcon;
@@ -717,11 +693,9 @@
* @param disabledSelectedIcon the icon used as the disabled
* selection image
* @see #getDisabledSelectedIcon
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The disabled selection icon for the button.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The disabled selection icon for the button.")
public void setDisabledSelectedIcon(Icon disabledSelectedIcon) {
Icon oldValue = this.disabledSelectedIcon;
this.disabledSelectedIcon = disabledSelectedIcon;
@@ -768,14 +742,12 @@
* </ul>
* @throws IllegalArgumentException if the alignment is not one of the legal
* values listed above
- * @beaninfo
- * bound: true
- * enum: TOP SwingConstants.TOP
- * CENTER SwingConstants.CENTER
- * BOTTOM SwingConstants.BOTTOM
- * attribute: visualUpdate true
- * description: The vertical alignment of the icon and text.
*/
+ @BeanProperty(visualUpdate = true, enumerationValues = {
+ "SwingConstants.TOP",
+ "SwingConstants.CENTER",
+ "SwingConstants.BOTTOM"}, description
+ = "The vertical alignment of the icon and text.")
public void setVerticalAlignment(int alignment) {
if (alignment == verticalAlignment) return;
int oldValue = verticalAlignment;
@@ -817,16 +789,14 @@
* </ul>
* @throws IllegalArgumentException if the alignment is not one of the
* valid values
- * @beaninfo
- * bound: true
- * enum: LEFT SwingConstants.LEFT
- * CENTER SwingConstants.CENTER
- * RIGHT SwingConstants.RIGHT
- * LEADING SwingConstants.LEADING
- * TRAILING SwingConstants.TRAILING
- * attribute: visualUpdate true
- * description: The horizontal alignment of the icon and text.
*/
+ @BeanProperty(visualUpdate = true, enumerationValues = {
+ "SwingConstants.LEFT",
+ "SwingConstants.CENTER",
+ "SwingConstants.RIGHT",
+ "SwingConstants.LEADING",
+ "SwingConstants.TRAILING"}, description
+ = "The horizontal alignment of the icon and text.")
public void setHorizontalAlignment(int alignment) {
if (alignment == horizontalAlignment) return;
int oldValue = horizontalAlignment;
@@ -860,14 +830,12 @@
* <li>{@code SwingConstants.TOP}
* <li>{@code SwingConstants.BOTTOM}
* </ul>
- * @beaninfo
- * bound: true
- * enum: TOP SwingConstants.TOP
- * CENTER SwingConstants.CENTER
- * BOTTOM SwingConstants.BOTTOM
- * attribute: visualUpdate true
- * description: The vertical position of the text relative to the icon.
*/
+ @BeanProperty(visualUpdate = true, enumerationValues = {
+ "SwingConstants.TOP",
+ "SwingConstants.CENTER",
+ "SwingConstants.BOTTOM"}, description
+ = "The vertical position of the text relative to the icon.")
public void setVerticalTextPosition(int textPosition) {
if (textPosition == verticalTextPosition) return;
int oldValue = verticalTextPosition;
@@ -905,16 +873,14 @@
* </ul>
* @exception IllegalArgumentException if <code>textPosition</code>
* is not one of the legal values listed above
- * @beaninfo
- * bound: true
- * enum: LEFT SwingConstants.LEFT
- * CENTER SwingConstants.CENTER
- * RIGHT SwingConstants.RIGHT
- * LEADING SwingConstants.LEADING
- * TRAILING SwingConstants.TRAILING
- * attribute: visualUpdate true
- * description: The horizontal position of the text relative to the icon.
*/
+ @BeanProperty(visualUpdate = true, enumerationValues = {
+ "SwingConstants.LEFT",
+ "SwingConstants.CENTER",
+ "SwingConstants.RIGHT",
+ "SwingConstants.LEADING",
+ "SwingConstants.TRAILING"}, description
+ = "The horizontal position of the text relative to the icon.")
public void setHorizontalTextPosition(int textPosition) {
if (textPosition == horizontalTextPosition) return;
int oldValue = horizontalTextPosition;
@@ -951,12 +917,9 @@
* @param iconTextGap the space between icon and text if these properties are set.
* @since 1.4
* @see #getIconTextGap
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: If both the icon and text properties are set, this
- * property defines the space between them.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "If both the icon and text properties are set, this property defines the space between them.")
public void setIconTextGap(int iconTextGap) {
int oldValue = this.iconTextGap;
this.iconTextGap = iconTextGap;
@@ -1095,11 +1058,9 @@
* @see #configurePropertiesFromAction
* @see #createActionPropertyChangeListener
* @see #actionPropertyChanged
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: the Action instance connected with this ActionEvent source
*/
+ @BeanProperty(visualUpdate = true, description
+ = "the Action instance connected with this ActionEvent source")
public void setAction(Action a) {
Action oldValue = getAction();
if (action==null || !action.equals(a)) {
@@ -1393,11 +1354,9 @@
* @param b if true and border property is not <code>null</code>,
* the border is painted
* @see #isBorderPainted
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Whether the border should be painted.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Whether the border should be painted.")
public void setBorderPainted(boolean b) {
boolean oldValue = paintBorder;
paintBorder = b;
@@ -1443,11 +1402,9 @@
*
* @param b if <code>true</code>, the focus state should be painted
* @see #isFocusPainted
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Whether focus should be painted
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Whether focus should be painted")
public void setFocusPainted(boolean b) {
boolean oldValue = paintFocus;
paintFocus = b;
@@ -1486,12 +1443,9 @@
* the content area is not filled
* @see #isContentAreaFilled
* @see #setOpaque
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Whether the button should paint the content area
- * or leave it transparent.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Whether the button should paint the content area or leave it transparent.")
public void setContentAreaFilled(boolean b) {
boolean oldValue = contentAreaFilled;
contentAreaFilled = b;
@@ -1522,11 +1476,9 @@
*
* @param b if <code>true</code>, rollover effects should be painted
* @see #isRolloverEnabled
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Whether rollover effects should be enabled.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Whether rollover effects should be enabled.")
public void setRolloverEnabled(boolean b) {
boolean oldValue = rolloverEnabled;
rolloverEnabled = b;
@@ -1569,12 +1521,9 @@
* @param mnemonic the key code which represents the mnemonic
* @see java.awt.event.KeyEvent
* @see #setDisplayedMnemonicIndex
- *
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: the keyboard character mnemonic
*/
+ @BeanProperty(visualUpdate = true, description
+ = "the keyboard character mnemonic")
public void setMnemonic(int mnemonic) {
int oldValue = getMnemonic();
model.setMnemonic(mnemonic);
@@ -1589,11 +1538,9 @@
*
* @param mnemonic a char specifying the mnemonic value
* @see #setMnemonic(int)
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: the keyboard character mnemonic
*/
+ @BeanProperty(visualUpdate = true, description
+ = "the keyboard character mnemonic")
public void setMnemonic(char mnemonic) {
int vk = (int) mnemonic;
if(vk >= 'a' && vk <='z')
@@ -1622,13 +1569,9 @@
* @exception IllegalArgumentException will be thrown if <code>index</code>
* is >= length of the text, or < -1
* @see #getDisplayedMnemonicIndex
- *
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: the index into the String to draw the keyboard character
- * mnemonic at
*/
+ @BeanProperty(visualUpdate = true, description
+ = "the index into the String to draw the keyboard character mnemonic at")
public void setDisplayedMnemonicIndex(int index)
throws IllegalArgumentException {
int oldValue = mnemonicIndex;
@@ -1743,10 +1686,9 @@
* Sets the model that this button represents.
* @param newModel the new <code>ButtonModel</code>
* @see #getModel
- * @beaninfo
- * bound: true
- * description: Model that the Button uses.
*/
+ @BeanProperty(description
+ = "Model that the Button uses.")
public void setModel(ButtonModel newModel) {
ButtonModel oldModel = getModel();
@@ -1804,12 +1746,9 @@
* Sets the L&F object that renders this component.
* @param ui the <code>ButtonUI</code> L&F object
* @see #getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the LookAndFeel.")
public void setUI(ButtonUI ui) {
super.setUI(ui);
// disabled icons are generated by the LF so they should be unset here
@@ -1897,6 +1836,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public ChangeListener[] getChangeListeners() {
return listenerList.getListeners(ChangeListener.class);
}
@@ -1954,6 +1894,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public ActionListener[] getActionListeners() {
return listenerList.getListeners(ActionListener.class);
}
@@ -2122,11 +2063,10 @@
*
* @param label a <code>String</code> containing the text
* @deprecated - Replaced by <code>setText(text)</code>
- * @beaninfo
- * bound: true
- * description: Replace by setText(text)
*/
@Deprecated
+ @BeanProperty(description
+ = "Replace by setText(text)")
public void setLabel(String label) {
setText(label);
}
@@ -2155,6 +2095,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public ItemListener[] getItemListeners() {
return listenerList.getListeners(ItemListener.class);
}
@@ -2166,7 +2107,8 @@
* @return an array containing 1 Object: the text of the button,
* if the item is selected; otherwise <code>null</code>
*/
- public Object[] getSelectedObjects() {
+ @BeanProperty(bound = false)
+ public Object[] getSelectedObjects() {
if (isSelected() == false) {
return null;
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/Box.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/Box.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,15 +22,12 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
-
package javax.swing;
import java.awt.*;
-import java.awt.event.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.ConstructorProperties;
-import java.util.Locale;
-import java.io.Serializable;
import javax.accessibility.*;
/**
@@ -77,6 +74,7 @@
* @author Timothy Prinzing
* @since 1.2
*/
+@JavaBean(defaultProperty = "accessibleContext")
@SuppressWarnings("serial")
public class Box extends JComponent implements Accessible {
@@ -413,6 +411,7 @@
* @return an AccessibleBox that serves as the
* AccessibleContext of this Box
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleBox();
--- a/jdk/src/java.desktop/share/classes/javax/swing/ImageIcon.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/ImageIcon.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
import java.awt.*;
import java.awt.image.*;
import java.beans.ConstructorProperties;
+import java.beans.BeanProperty;
import java.beans.Transient;
import java.net.URL;
@@ -567,11 +568,10 @@
*
* @return an AccessibleImageIcon that serves as the
* AccessibleContext of this ImageIcon
- * @beaninfo
- * expert: true
- * description: The AccessibleContext associated with this ImageIcon.
* @since 1.3
*/
+ @BeanProperty(expert = true, description
+ = "The AccessibleContext associated with this ImageIcon.")
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleImageIcon();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JApplet.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JApplet.java Thu Oct 22 11:14:00 2015 -0700
@@ -33,6 +33,8 @@
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.LayoutManager;
+import java.beans.BeanProperty;
+import java.beans.JavaBean;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
@@ -87,14 +89,12 @@
* Please see {@link java.beans.XMLEncoder}.
*
* @see javax.swing.RootPaneContainer
- * @beaninfo
- * attribute: isContainer true
- * attribute: containerDelegate getContentPane
- * description: Swing's Applet subclass.
*
* @author Arnaud Weber
* @since 1.2
*/
+@JavaBean(defaultProperty = "JMenuBar", description = "Swing's Applet subclass.")
+@SwingContainer(delegate = "getContentPane")
@SuppressWarnings("serial") // Same-version serialization only
public class JApplet extends Applet implements Accessible,
RootPaneContainer,
@@ -203,12 +203,9 @@
* @see #getTransferHandler
* @see java.awt.Component#setDropTarget
* @since 1.6
- *
- * @beaninfo
- * bound: true
- * hidden: true
- * description: Mechanism for transfer of data into the component
*/
+ @BeanProperty(hidden = true, description
+ = "Mechanism for transfer of data into the component")
public void setTransferHandler(TransferHandler newHandler) {
TransferHandler oldHandler = transferHandler;
transferHandler = newHandler;
@@ -242,11 +239,9 @@
* @param menuBar the menubar being placed in the applet
*
* @see #getJMenuBar
- *
- * @beaninfo
- * hidden: true
- * description: The menubar for accessing pulldown menus from this applet.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "The menubar for accessing pulldown menus from this applet.")
public void setJMenuBar(final JMenuBar menuBar) {
getRootPane().setJMenuBar(menuBar);
}
@@ -291,10 +286,9 @@
* @see #setLayout
* @see #isRootPaneCheckingEnabled
* @see javax.swing.RootPaneContainer
- * @beaninfo
- * hidden: true
- * description: Whether the add and setLayout methods are forwarded
*/
+ @BeanProperty(hidden = true, description
+ = "Whether the add and setLayout methods are forwarded")
protected void setRootPaneCheckingEnabled(boolean enabled) {
rootPaneCheckingEnabled = enabled;
}
@@ -377,6 +371,8 @@
* @see #setRootPane
* @see RootPaneContainer#getRootPane
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "the RootPane object for this applet.")
public JRootPane getRootPane() {
return rootPane;
}
@@ -387,10 +383,6 @@
* @param root the rootPane object for this applet
*
* @see #getRootPane
- *
- * @beaninfo
- * hidden: true
- * description: the RootPane object for this applet.
*/
protected void setRootPane(JRootPane root) {
if(rootPane != null) {
@@ -428,12 +420,9 @@
* exception) if the content pane parameter is null
* @see #getContentPane
* @see RootPaneContainer#setContentPane
- *
- * @beaninfo
- * hidden: true
- * description: The client area of the applet where child
- * components are normally inserted.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "The client area of the applet where child components are normally inserted.")
public void setContentPane(Container contentPane) {
getRootPane().setContentPane(contentPane);
}
@@ -456,11 +445,9 @@
*
* @see #getLayeredPane
* @see RootPaneContainer#setLayeredPane
- *
- * @beaninfo
- * hidden: true
- * description: The pane which holds the various applet layers.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "The pane which holds the various applet layers.")
public void setLayeredPane(JLayeredPane layeredPane) {
getRootPane().setLayeredPane(layeredPane);
}
@@ -482,11 +469,9 @@
*
* @see #getGlassPane
* @see RootPaneContainer#setGlassPane
- *
- * @beaninfo
- * hidden: true
- * description: A transparent pane used for menu rendering.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "A transparent pane used for menu rendering.")
public void setGlassPane(Component glassPane) {
getRootPane().setGlassPane(glassPane);
}
@@ -496,6 +481,7 @@
*
* @since 1.6
*/
+ @BeanProperty(bound = false)
public Graphics getGraphics() {
JComponent.getGraphicsInvoked(this);
return super.getGraphics();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JButton.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JButton.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,21 +24,16 @@
*/
package javax.swing;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.ConstructorProperties;
-import java.awt.*;
-import java.awt.event.*;
-import java.awt.image.*;
-
import javax.swing.plaf.*;
-import javax.swing.event.*;
import javax.accessibility.*;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
-
/**
* An implementation of a "push" button.
* <p>
@@ -69,13 +64,11 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: An implementation of a \"push\" button.
- *
* @author Jeff Dinkins
* @since 1.2
*/
+@JavaBean(defaultProperty = "UIClassID", description = "An implementation of a \"push\" button.")
+@SwingContainer(false)
@SuppressWarnings("serial")
public class JButton extends AbstractButton implements Accessible {
@@ -156,10 +149,9 @@
* @return the string "ButtonUI"
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
- * @beaninfo
- * expert: true
- * description: A string that specifies the name of the L&F class.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "A string that specifies the name of the L&F class.")
public String getUIClassID() {
return uiClassID;
}
@@ -176,9 +168,9 @@
* @return the value of the <code>defaultButton</code> property
* @see JRootPane#setDefaultButton
* @see #isDefaultCapable
- * @beaninfo
- * description: Whether or not this button is the default button
*/
+ @BeanProperty(bound = false, description
+ = "Whether or not this button is the default button")
public boolean isDefaultButton() {
JRootPane root = SwingUtilities.getRootPane(this);
if (root != null) {
@@ -211,11 +203,9 @@
* capable of being the default button on the
* <code>RootPane</code>; otherwise <code>false</code>
* @see #isDefaultCapable
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Whether or not this button can be the default button
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Whether or not this button can be the default button")
public void setDefaultCapable(boolean defaultCapable) {
boolean oldDefaultCapable = this.defaultCapable;
this.defaultCapable = defaultCapable;
@@ -283,10 +273,9 @@
*
* @return an <code>AccessibleJButton</code> that serves as the
* <code>AccessibleContext</code> of this <code>JButton</code>
- * @beaninfo
- * expert: true
- * description: The AccessibleContext associated with this Button.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The AccessibleContext associated with this Button.")
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJButton();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JCheckBox.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JCheckBox.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,9 +24,8 @@
*/
package javax.swing;
-import java.awt.*;
-import java.awt.event.*;
-import java.beans.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import javax.swing.plaf.*;
import javax.accessibility.*;
@@ -35,7 +34,6 @@
import java.io.ObjectInputStream;
import java.io.IOException;
-
/**
* An implementation of a check box -- an item that can be selected or
* deselected, and which displays its state to the user.
@@ -69,13 +67,11 @@
*
* @see JRadioButton
*
- * @beaninfo
- * attribute: isContainer false
- * description: A component which can be selected or deselected.
- *
* @author Jeff Dinkins
* @since 1.2
*/
+@JavaBean(description = "A component which can be selected or deselected.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JCheckBox extends JToggleButton implements Accessible {
@@ -195,12 +191,10 @@
* @param b <code>true</code> requests that the border be painted flat;
* <code>false</code> requests normal borders
* @see #isBorderPaintedFlat
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Whether the border is painted flat.
* @since 1.3
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Whether the border is painted flat.")
public void setBorderPaintedFlat(boolean b) {
boolean oldValue = flat;
flat = b;
@@ -239,10 +233,9 @@
* @return the string "CheckBoxUI"
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
- * @beaninfo
- * expert: true
- * description: A string that specifies the name of the L&F class
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "A string that specifies the name of the L&F class")
public String getUIClassID() {
return uiClassID;
}
@@ -311,10 +304,9 @@
*
* @return an AccessibleJCheckBox that serves as the
* AccessibleContext of this JCheckBox
- * @beaninfo
- * expert: true
- * description: The AccessibleContext associated with this CheckBox.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The AccessibleContext associated with this CheckBox.")
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJCheckBox();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JCheckBoxMenuItem.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JCheckBoxMenuItem.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,20 +24,14 @@
*/
package javax.swing;
-import java.util.EventListener;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.awt.image.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
-import javax.swing.plaf.*;
import javax.accessibility.*;
-
/**
* A menu item that can be selected or deselected. If selected, the menu
* item typically appears with a checkmark next to it. If unselected or
@@ -81,14 +75,12 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: A menu item which can be selected or deselected.
- *
* @author Georges Saab
* @author David Karlton
* @since 1.2
*/
+@JavaBean(description = "A menu item which can be selected or deselected.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JCheckBoxMenuItem extends JMenuItem implements SwingConstants,
Accessible
@@ -178,6 +170,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -200,10 +193,9 @@
*
* @param b a boolean value indicating the item's
* selected-state, where true=selected
- * @beaninfo
- * description: The selection state of the check box menu item
- * hidden: true
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "The selection state of the check box menu item")
public synchronized void setState(boolean b) {
setSelected(b);
}
@@ -216,6 +208,7 @@
* @return an array containing one Object -- the text of the menu item
* -- if the item is selected; otherwise null
*/
+ @BeanProperty(bound = false)
public Object[] getSelectedObjects() {
if (isSelected() == false)
return null;
@@ -274,6 +267,7 @@
* @return an AccessibleJCheckBoxMenuItem that serves as the
* AccessibleContext of this AccessibleJCheckBoxMenuItem
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJCheckBoxMenuItem();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JColorChooser.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JColorChooser.java Thu Oct 22 11:14:00 2015 -0700
@@ -22,11 +22,12 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import java.awt.*;
import java.awt.event.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.io.*;
import java.util.*;
@@ -36,7 +37,6 @@
import sun.swing.SwingUtilities2;
-
/**
* <code>JColorChooser</code> provides a pane of controls designed to allow
* a user to manipulate and select a color.
@@ -73,17 +73,13 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- *
- * @beaninfo
- * attribute: isContainer false
- * description: A component that supports selecting a Color.
- *
- *
* @author James Gosling
* @author Amy Fowler
* @author Steve Wilson
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A component that supports selecting a Color.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JColorChooser extends JComponent implements Accessible {
@@ -261,12 +257,9 @@
*
* @param ui the <code>ColorChooserUI</code> L&F object
* @see UIDefaults#getUI
- *
- * @beaninfo
- * bound: true
- * hidden: true
- * description: The UI object that implements the color chooser's LookAndFeel.
*/
+ @BeanProperty(hidden = true, description
+ = "The UI object that implements the color chooser's LookAndFeel.")
public void setUI(ColorChooserUI ui) {
super.setUI(ui);
}
@@ -289,6 +282,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -308,12 +302,9 @@
* The <code>ColorSelectionModel</code> will fire a <code>ChangeEvent</code>
* @param color the color to be set in the color chooser
* @see JComponent#addPropertyChangeListener
- *
- * @beaninfo
- * bound: false
- * hidden: false
- * description: The current color the chooser is to display.
*/
+ @BeanProperty(bound = false, description
+ = "The current color the chooser is to display.")
public void setColor(Color color) {
selectionModel.setSelectedColor(color);
@@ -381,11 +372,9 @@
* @see #getDragEnabled
* @see #setTransferHandler
* @see TransferHandler
- *
- * @beaninfo
- * description: Determines whether automatic drag handling is enabled.
- * bound: false
*/
+ @BeanProperty(bound = false, description
+ = "Determines whether automatic drag handling is enabled.")
public void setDragEnabled(boolean b) {
if (b && GraphicsEnvironment.isHeadless()) {
throw new HeadlessException();
@@ -411,12 +400,9 @@
*
* @param preview the <code>JComponent</code> which displays the current color
* @see JComponent#addPropertyChangeListener
- *
- * @beaninfo
- * bound: true
- * hidden: true
- * description: The UI component which displays the current color.
*/
+ @BeanProperty(hidden = true, description
+ = "The UI component which displays the current color.")
public void setPreviewPanel(JComponent preview) {
if (previewPanel != preview) {
@@ -496,12 +482,9 @@
*
* @param panels an array of <code>AbstractColorChooserPanel</code>
* objects
- *
- * @beaninfo
- * bound: true
- * hidden: true
- * description: An array of different chooser types.
*/
+ @BeanProperty(hidden = true, description
+ = "An array of different chooser types.")
public void setChooserPanels( AbstractColorChooserPanel[] panels) {
AbstractColorChooserPanel[] oldValue = chooserPanels;
chooserPanels = panels;
@@ -531,12 +514,9 @@
* Sets the model containing the selected color.
*
* @param newModel the new <code>ColorSelectionModel</code> object
- *
- * @beaninfo
- * bound: true
- * hidden: true
- * description: The model which contains the currently selected color.
*/
+ @BeanProperty(hidden = true, description
+ = "The model which contains the currently selected color.")
public void setSelectionModel(ColorSelectionModel newModel ) {
ColorSelectionModel oldModel = selectionModel;
selectionModel = newModel;
@@ -603,6 +583,7 @@
* @return an AccessibleJColorChooser that serves as the
* AccessibleContext of this JColorChooser
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJColorChooser();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JComboBox.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JComboBox.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,8 @@
*/
package javax.swing;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.Transient;
@@ -71,14 +73,12 @@
*
* @param <E> the type of the elements of this combo box
*
- * @beaninfo
- * attribute: isContainer false
- * description: A combination of a text field and a drop-down list.
- *
* @author Arnaud Weber
* @author Mark Davidson
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A combination of a text field and a drop-down list.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JComboBox<E> extends JComponent
implements ItemSelectable,ListDataListener,ActionListener, Accessible {
@@ -255,13 +255,9 @@
*
* @param ui the <code>ComboBoxUI</code> L&F object
* @see UIDefaults#getUI
- *
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(ComboBoxUI ui) {
super.setUI(ui);
}
@@ -288,6 +284,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -308,11 +305,9 @@
*
* @param aModel the <code>ComboBoxModel</code> that provides the
* displayed list of items
- *
- * @beaninfo
- * bound: true
- * description: Model that the combo box uses to get data to display.
*/
+ @BeanProperty(description
+ = "Model that the combo box uses to get data to display.")
public void setModel(ComboBoxModel<E> aModel) {
ComboBoxModel<E> oldModel = dataModel;
if (oldModel != null) {
@@ -363,12 +358,9 @@
* This method fires a property changed event.
*
* @param aFlag if <code>true</code>, lightweight popups are desired
- *
- * @beaninfo
- * bound: true
- * expert: true
- * description: Set to <code>false</code> to require heavyweight popups.
*/
+ @BeanProperty(expert = true, description
+ = "Set to <code>false</code> to require heavyweight popups.")
public void setLightWeightPopupEnabled(boolean aFlag) {
boolean oldFlag = lightWeightPopupEnabled;
lightWeightPopupEnabled = aFlag;
@@ -398,12 +390,9 @@
*
* @param aFlag a boolean value, where true indicates that the
* field is editable
- *
- * @beaninfo
- * bound: true
- * preferred: true
- * description: If true, the user can type a new value in the combo box.
*/
+ @BeanProperty(preferred = true, description
+ = "If true, the user can type a new value in the combo box.")
public void setEditable(boolean aFlag) {
boolean oldFlag = isEditable;
isEditable = aFlag;
@@ -427,11 +416,9 @@
*
* @param count an integer specifying the maximum number of items to
* display in the list before using a scrollbar
- * @beaninfo
- * bound: true
- * preferred: true
- * description: The maximum number of rows the popup should have
*/
+ @BeanProperty(preferred = true, description
+ = "The maximum number of rows the popup should have")
public void setMaximumRowCount(int count) {
int oldCount = maximumRowCount;
maximumRowCount = count;
@@ -465,11 +452,9 @@
* @param aRenderer the <code>ListCellRenderer</code> that
* displays the selected item
* @see #setEditor
- * @beaninfo
- * bound: true
- * expert: true
- * description: The renderer that paints the item selected in the list.
*/
+ @BeanProperty(expert = true, description
+ = "The renderer that paints the item selected in the list.")
public void setRenderer(ListCellRenderer<? super E> aRenderer) {
ListCellRenderer<? super E> oldRenderer = renderer;
renderer = aRenderer;
@@ -497,11 +482,9 @@
* @param anEditor the <code>ComboBoxEditor</code> that
* displays the selected item
* @see #setRenderer
- * @beaninfo
- * bound: true
- * expert: true
- * description: The editor that combo box uses to edit the current value
*/
+ @BeanProperty(expert = true, description
+ = "The editor that combo box uses to edit the current value")
public void setEditor(ComboBoxEditor anEditor) {
ComboBoxEditor oldEditor = editor;
@@ -553,10 +536,9 @@
*
* @param anObject the list object to select; use <code>null</code> to
clear the selection
- * @beaninfo
- * preferred: true
- * description: Sets the selected item in the JComboBox.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "Sets the selected item in the JComboBox.")
public void setSelectedItem(Object anObject) {
Object oldSelection = selectedItemReminder;
Object objectToSelect = anObject;
@@ -618,10 +600,9 @@
* where 0 specifies the first item in the list and -1 indicates no selection
* @exception IllegalArgumentException if <code>anIndex</code> < -1 or
* <code>anIndex</code> is greater than or equal to size
- * @beaninfo
- * preferred: true
- * description: The item at index is selected.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "The item at index is selected.")
public void setSelectedIndex(int anIndex) {
int size = dataModel.getSize();
@@ -689,11 +670,9 @@
* @param prototypeDisplayValue the prototype display value
* @see #getPrototypeDisplayValue
* @since 1.4
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The display prototype value, used to compute display width and height.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The display prototype value, used to compute display width and height.")
public void setPrototypeDisplayValue(E prototypeDisplayValue) {
Object oldValue = this.prototypeDisplayValue;
this.prototypeDisplayValue = prototypeDisplayValue;
@@ -869,6 +848,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public ItemListener[] getItemListeners() {
return listenerList.getListeners(ItemListener.class);
}
@@ -907,6 +887,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public ActionListener[] getActionListeners() {
return listenerList.getListeners(ActionListener.class);
}
@@ -946,6 +927,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public PopupMenuListener[] getPopupMenuListeners() {
return listenerList.getListeners(PopupMenuListener.class);
}
@@ -1074,11 +1056,9 @@
* @see #configurePropertiesFromAction
* @see #createActionPropertyChangeListener
* @see #actionPropertyChanged
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: the Action instance connected with this ActionEvent source
*/
+ @BeanProperty(visualUpdate = true, description
+ = "the Action instance connected with this ActionEvent source")
public void setAction(Action a) {
Action oldValue = getAction();
if (action==null || !action.equals(a)) {
@@ -1305,6 +1285,7 @@
* @return an array of <code>Objects</code> containing one
* element -- the selected item
*/
+ @BeanProperty(bound = false)
public Object[] getSelectedObjects() {
Object selectedObject = getSelectedItem();
if ( selectedObject == null )
@@ -1394,11 +1375,9 @@
*
* @param b a boolean value, where true enables the component and
* false disables it
- * @beaninfo
- * bound: true
- * preferred: true
- * description: Whether the combo box is enabled.
*/
+ @BeanProperty(preferred = true, description
+ = "The enabled state of the component.")
public void setEnabled(boolean b) {
super.setEnabled(b);
firePropertyChange( "enabled", !isEnabled(), isEnabled() );
@@ -1458,10 +1437,9 @@
* character becomes the selected item.
*
* @param aManager a key selection manager
- * @beaninfo
- * expert: true
- * description: The objects that changes the selection when a key is pressed.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The objects that changes the selection when a key is pressed.")
public void setKeySelectionManager(KeySelectionManager aManager) {
keySelectionManager = aManager;
}
@@ -1481,6 +1459,7 @@
*
* @return an integer equal to the number of items in the list
*/
+ @BeanProperty(bound = false)
public int getItemCount() {
return dataModel.getSize();
}
@@ -1629,6 +1608,7 @@
* @return an AccessibleJComboBox that serves as the
* AccessibleContext of this JComboBox
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if ( accessibleContext == null ) {
accessibleContext = new AccessibleJComboBox();
@@ -2131,11 +2111,9 @@
*
* @see #getAccessibleName
* @see #addPropertyChangeListener
- *
- * @beaninfo
- * preferred: true
- * description: Sets the accessible name for the component.
*/
+ @BeanProperty(preferred = true, description
+ = "Sets the accessible name for the component.")
public void setAccessibleName(String s) {
ac.setAccessibleName(s);
}
@@ -2165,11 +2143,9 @@
*
* @see #setAccessibleName
* @see #addPropertyChangeListener
- *
- * @beaninfo
- * preferred: true
- * description: Sets the accessible description for the component.
*/
+ @BeanProperty(preferred = true, description
+ = "Sets the accessible description for the component.")
public void setAccessibleDescription(String s) {
ac.setAccessibleDescription(s);
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/JComponent.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JComponent.java Thu Oct 22 11:14:00 2015 -0700
@@ -25,6 +25,7 @@
package javax.swing;
+import java.beans.*;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Enumeration;
@@ -36,10 +37,6 @@
import java.awt.*;
import java.awt.event.*;
import java.awt.peer.LightweightPeer;
-import java.beans.PropertyChangeListener;
-import java.beans.VetoableChangeListener;
-import java.beans.VetoableChangeSupport;
-import java.beans.Transient;
import java.applet.Applet;
@@ -176,6 +173,7 @@
* @author Arnaud Weber
* @since 1.2
*/
+@JavaBean(defaultProperty = "UIClassID")
@SuppressWarnings("serial") // Same-version serialization only
public abstract class JComponent extends Container implements Serializable,
TransferHandler.HasGetTransferHandler
@@ -479,11 +477,10 @@
*
* @param value whether or not the JPopupMenu is inherited
* @see #setComponentPopupMenu
- * @beaninfo
- * bound: true
- * description: Whether or not the JPopupMenu is inherited
* @since 1.5
*/
+ @BeanProperty(description
+ = "Whether or not the JPopupMenu is inherited")
public void setInheritsPopupMenu(boolean value) {
boolean oldValue = getFlag(INHERITS_POPUP_MENU);
setFlag(INHERITS_POPUP_MENU, value);
@@ -519,12 +516,10 @@
* @param popup - the popup that will be assigned to this component
* may be null
* @see #getComponentPopupMenu
- * @beaninfo
- * bound: true
- * preferred: true
- * description: Popup to show
* @since 1.5
*/
+ @BeanProperty(preferred = true, description
+ = "Popup to show")
public void setComponentPopupMenu(JPopupMenu popup) {
if(popup != null) {
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
@@ -649,12 +644,9 @@
* @see #updateUI
* @see UIManager#getLookAndFeel
* @see UIManager#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The component's look and feel delegate.
- */
+ */
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The component's look and feel delegate.")
protected void setUI(ComponentUI newUI) {
/* We do not check that the UI instance is different
* before allowing the switch in order to enable the
@@ -718,10 +710,9 @@
* @return the <code>UIDefaults</code> key for a
* <code>ComponentUI</code> subclass
* @see UIDefaults#getUI
- * @beaninfo
- * expert: true
- * description: UIClassID
- */
+ */
+ @BeanProperty(bound = false, expert = true, description
+ = "UIClassID")
public String getUIClassID() {
return uiClassID;
}
@@ -1265,6 +1256,7 @@
* @return true if the component is currently painting a tile,
* false otherwise
*/
+ @BeanProperty(bound = false)
public boolean isPaintingTile() {
return getFlag(IS_PAINTING_TILE);
}
@@ -1295,6 +1287,7 @@
* @see #print
* @since 1.6
*/
+ @BeanProperty(bound = false)
public final boolean isPaintingForPrint() {
return getFlag(IS_PRINTING);
}
@@ -1319,6 +1312,7 @@
* <code>Container.setFocusCycleRoot(boolean)</code>.
*/
@Deprecated
+ @BeanProperty(bound = false)
public boolean isManagingFocus() {
return false;
}
@@ -1589,11 +1583,9 @@
* @see #getVerifyInputWhenFocusTarget
*
* @since 1.3
- * @beaninfo
- * bound: true
- * description: Whether the Component verifies input before accepting
- * focus.
- */
+ */
+ @BeanProperty(description
+ = "Whether the Component verifies input before accepting focus.")
public void setVerifyInputWhenFocusTarget(boolean
verifyInputWhenFocusTarget) {
boolean oldVerifyInputWhenFocusTarget =
@@ -1641,11 +1633,9 @@
* Sets the preferred size of this component.
* If <code>preferredSize</code> is <code>null</code>, the UI will
* be asked for the preferred size.
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The preferred size of the component.
- */
+ */
+ @BeanProperty(preferred = true, description
+ = "The preferred size of the component.")
public void setPreferredSize(Dimension preferredSize) {
super.setPreferredSize(preferredSize);
}
@@ -1685,10 +1675,9 @@
* @param maximumSize a <code>Dimension</code> containing the
* desired maximum allowable size
* @see #getMaximumSize
- * @beaninfo
- * bound: true
- * description: The maximum size of the component.
- */
+ */
+ @BeanProperty(description
+ = "The maximum size of the component.")
public void setMaximumSize(Dimension maximumSize) {
super.setMaximumSize(maximumSize);
}
@@ -1726,10 +1715,9 @@
*
* @param minimumSize the new minimum size of this component
* @see #getMinimumSize
- * @beaninfo
- * bound: true
- * description: The minimum size of the component.
- */
+ */
+ @BeanProperty(description
+ = "The minimum size of the component.")
public void setMinimumSize(Dimension minimumSize) {
super.setMinimumSize(minimumSize);
}
@@ -1793,12 +1781,9 @@
* @param border the border to be rendered for this component
* @see Border
* @see CompoundBorder
- * @beaninfo
- * bound: true
- * preferred: true
- * attribute: visualUpdate true
- * description: The component's border.
- */
+ */
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "The component's border.")
public void setBorder(Border border) {
Border oldBorder = this.border;
@@ -1831,6 +1816,7 @@
* @return the value of the insets property
* @see #setBorder
*/
+ @BeanProperty(expert = true)
public Insets getInsets() {
if (border != null) {
return border.getBorderInsets(this);
@@ -1849,8 +1835,6 @@
* @param insets the <code>Insets</code> object, which can be reused
* @return the <code>Insets</code> object
* @see #getInsets
- * @beaninfo
- * expert: true
*/
public Insets getInsets(Insets insets) {
if (insets == null) {
@@ -1892,9 +1876,9 @@
*
* @param alignmentY the new vertical alignment
* @see #getAlignmentY
- * @beaninfo
- * description: The preferred vertical alignment of the component.
- */
+ */
+ @BeanProperty(description
+ = "The preferred vertical alignment of the component.")
public void setAlignmentY(float alignmentY) {
this.alignmentY = validateAlignment(alignmentY);
isAlignmentYSet = true;
@@ -1921,9 +1905,9 @@
*
* @param alignmentX the new horizontal alignment
* @see #getAlignmentX
- * @beaninfo
- * description: The preferred horizontal alignment of the component.
- */
+ */
+ @BeanProperty(description
+ = "The preferred horizontal alignment of the component.")
public void setAlignmentX(float alignmentX) {
this.alignmentX = validateAlignment(alignmentX);
isAlignmentXSet = true;
@@ -1939,10 +1923,9 @@
* @param inputVerifier the new input verifier
* @since 1.3
* @see InputVerifier
- * @beaninfo
- * bound: true
- * description: The component's input verifier.
- */
+ */
+ @BeanProperty(description
+ = "The component's input verifier.")
public void setInputVerifier(InputVerifier inputVerifier) {
InputVerifier oldInputVerifier = (InputVerifier)getClientProperty(
JComponent_INPUT_VERIFIER);
@@ -1967,6 +1950,7 @@
* then invoke operations on that object to draw on the component.
* @return this components graphics context
*/
+ @BeanProperty(bound = false)
public Graphics getGraphics() {
if (DEBUG_GRAPHICS_LOADED && shouldDebugGraphics() != 0) {
DebugGraphics graphics = new DebugGraphics(super.getGraphics(),
@@ -1993,15 +1977,13 @@
* <li>A value of 0 causes no changes to the debugging options.
* </ul>
* <code>debugOptions</code> is bitwise OR'd into the current value
- *
- * @beaninfo
- * preferred: true
- * enum: NONE_OPTION DebugGraphics.NONE_OPTION
- * LOG_OPTION DebugGraphics.LOG_OPTION
- * FLASH_OPTION DebugGraphics.FLASH_OPTION
- * BUFFERED_OPTION DebugGraphics.BUFFERED_OPTION
- * description: Diagnostic options for graphics operations.
*/
+ @BeanProperty(bound = false, preferred = true, enumerationValues = {
+ "DebugGraphics.NONE_OPTION",
+ "DebugGraphics.LOG_OPTION",
+ "DebugGraphics.FLASH_OPTION",
+ "DebugGraphics.BUFFERED_OPTION"}, description
+ = "Diagnostic options for graphics operations.")
public void setDebugGraphicsOptions(int debugOptions) {
DebugGraphics.setDebugOptions(this, debugOptions);
}
@@ -2278,6 +2260,7 @@
* @return an array of <code>KeyStroke</code> objects
* @see #registerKeyboardAction
*/
+ @BeanProperty(bound = false)
public KeyStroke[] getRegisteredKeyStrokes() {
int[] counts = new int[3];
KeyStroke[][] strokes = new KeyStroke[3][];
@@ -2616,6 +2599,7 @@
* @see #getBaseline(int, int)
* @since 1.6
*/
+ @BeanProperty(bound = false)
public BaselineResizeBehavior getBaselineResizeBehavior() {
if (ui != null) {
return ui.getBaselineResizeBehavior(this);
@@ -2666,10 +2650,8 @@
*
* @param aFlag true to make the component visible; false to
* make it invisible
- *
- * @beaninfo
- * attribute: visualUpdate true
- */
+ */
+ @BeanProperty(hidden = true, visualUpdate = true)
public void setVisible(boolean aFlag) {
if (aFlag != isVisible()) {
super.setVisible(aFlag);
@@ -2699,13 +2681,9 @@
* @param enabled true if this component should be enabled, false otherwise
* @see java.awt.Component#isEnabled
* @see java.awt.Component#isLightweight
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * attribute: visualUpdate true
- * description: The enabled state of the component.
- */
+ */
+ @BeanProperty(expert = true, preferred = true, visualUpdate = true, description
+ = "The enabled state of the component.")
public void setEnabled(boolean enabled) {
boolean oldEnabled = isEnabled();
super.setEnabled(enabled);
@@ -2722,13 +2700,9 @@
*
* @param fg the desired foreground <code>Color</code>
* @see java.awt.Component#getForeground
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * attribute: visualUpdate true
- * description: The foreground color of the component.
- */
+ */
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "The foreground color of the component.")
public void setForeground(Color fg) {
Color oldFg = getForeground();
super.setForeground(fg);
@@ -2752,13 +2726,9 @@
* @param bg the desired background <code>Color</code>
* @see java.awt.Component#getBackground
* @see #setOpaque
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * attribute: visualUpdate true
- * description: The background color of the component.
- */
+ */
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "The background color of the component.")
public void setBackground(Color bg) {
Color oldBg = getBackground();
super.setBackground(bg);
@@ -2773,13 +2743,9 @@
*
* @param font the desired <code>Font</code> for this component
* @see java.awt.Component#getFont
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * attribute: visualUpdate true
- * description: The font for the component.
- */
+ */
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "The font for the component.")
public void setFont(Font font) {
Font oldFont = getFont();
super.setFont(font);
@@ -3028,10 +2994,9 @@
* @param text the string to display; if the text is <code>null</code>,
* the tool tip is turned off for this component
* @see #TOOL_TIP_TEXT_KEY
- * @beaninfo
- * preferred: true
- * description: The text to display in a tool tip.
- */
+ */
+ @BeanProperty(bound = false, preferred = true, description
+ = "The text to display in a tool tip.")
public void setToolTipText(String text) {
String oldText = getToolTipText();
putClientProperty(TOOL_TIP_TEXT_KEY, text);
@@ -3190,11 +3155,9 @@
* @see #getAutoscrolls
* @see JViewport
* @see JScrollPane
- *
- * @beaninfo
- * expert: true
- * description: Determines if this component automatically scrolls its contents when dragged.
- */
+ */
+ @BeanProperty(bound = false, expert = true, description
+ = "Determines if this component automatically scrolls its contents when dragged.")
public void setAutoscrolls(boolean autoscrolls) {
setFlag(AUTOSCROLLS_SET, true);
if (this.autoscrolls != autoscrolls) {
@@ -3254,11 +3217,9 @@
* @see TransferHandler
* @see #getTransferHandler
* @since 1.4
- * @beaninfo
- * bound: true
- * hidden: true
- * description: Mechanism for transfer of data to and from the component
- */
+ */
+ @BeanProperty(hidden = true, description
+ = "Mechanism for transfer of data to and from the component")
public void setTransferHandler(TransferHandler newHandler) {
TransferHandler oldHandler = (TransferHandler)getClientProperty(
JComponent_TRANSFER_HANDLER);
@@ -4208,8 +4169,6 @@
* or if any keystroke already maps to another focus traversal
* operation for this Component
* @since 1.5
- * @beaninfo
- * bound: true
*/
public void
setFocusTraversalKeys(int id, Set<? extends AWTKeyStroke> keystrokes)
@@ -4336,6 +4295,7 @@
*
* @return the current x coordinate of the component's origin
*/
+ @BeanProperty(bound = false)
public int getX() { return super.getX(); }
@@ -4348,6 +4308,7 @@
*
* @return the current y coordinate of the component's origin
*/
+ @BeanProperty(bound = false)
public int getY() { return super.getY(); }
@@ -4360,6 +4321,7 @@
*
* @return the current width of this component
*/
+ @BeanProperty(bound = false)
public int getWidth() { return super.getWidth(); }
@@ -4372,6 +4334,7 @@
*
* @return the current height of this component
*/
+ @BeanProperty(bound = false)
public int getHeight() { return super.getHeight(); }
/**
@@ -4405,11 +4368,9 @@
*
* @param isOpaque true if this component should be opaque
* @see #isOpaque
- * @beaninfo
- * bound: true
- * expert: true
- * description: The component's opacity
- */
+ */
+ @BeanProperty(expert = true, description
+ = "The component's opacity")
public void setOpaque(boolean isOpaque) {
boolean oldValue = getFlag(IS_OPAQUE);
setFlag(IS_OPAQUE, isOpaque);
@@ -4520,6 +4481,7 @@
*
* @return the visible rectangle
*/
+ @BeanProperty(bound = false)
public Rectangle getVisibleRect() {
Rectangle visibleRect = new Rectangle();
@@ -4628,6 +4590,7 @@
*
* @since 1.4
*/
+ @BeanProperty(bound = false)
public synchronized VetoableChangeListener[] getVetoableChangeListeners() {
if (vetoableChangeSupport == null) {
return new VetoableChangeListener[0];
@@ -4645,6 +4608,7 @@
* @return the top-level <code>Container</code> that this component is in,
* or <code>null</code> if not in any container
*/
+ @BeanProperty(bound = false)
public Container getTopLevelAncestor() {
for(Container p = this; p != null; p = p.getParent()) {
if(p instanceof Window || p instanceof Applet) {
@@ -4711,6 +4675,7 @@
*
* @since 1.4
*/
+ @BeanProperty(bound = false)
public AncestorListener[] getAncestorListeners() {
AncestorNotifier ancestorNotifier = getAncestorNotifier();
if (ancestorNotifier == null) {
@@ -4943,6 +4908,7 @@
*
* @return always returns true
*/
+ @BeanProperty(bound = false)
public boolean isOptimizedDrawingEnabled() {
return true;
}
@@ -5392,6 +5358,7 @@
* @return the <code>JRootPane</code> that contains this component,
* or <code>null</code> if no <code>JRootPane</code> is found
*/
+ @BeanProperty(bound = false)
public JRootPane getRootPane() {
return SwingUtilities.getRootPane(this);
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/JDesktopPane.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JDesktopPane.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import java.util.List;
@@ -34,16 +33,15 @@
import java.awt.Component;
import java.awt.Container;
-import java.awt.DefaultFocusTraversalPolicy;
-import java.awt.FocusTraversalPolicy;
-import java.awt.Window;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
import java.beans.PropertyVetoException;
import java.util.Set;
import java.util.TreeSet;
import java.util.LinkedHashSet;
+
/**
* A container used to create a multiple-document interface or a virtual desktop.
* You create <code>JInternalFrame</code> objects and add them to the
@@ -88,6 +86,7 @@
* @author David Kloba
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI")
@SuppressWarnings("serial") // Same-version serialization only
public class JDesktopPane extends JLayeredPane implements Accessible
{
@@ -163,12 +162,9 @@
*
* @param ui the DesktopPaneUI L&F object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(DesktopPaneUI ui) {
super.setUI(ui);
}
@@ -183,13 +179,12 @@
* @see #LIVE_DRAG_MODE
* @see #OUTLINE_DRAG_MODE
*
- * @beaninfo
- * bound: true
- * description: Dragging style for internal frame children.
- * enum: LIVE_DRAG_MODE JDesktopPane.LIVE_DRAG_MODE
- * OUTLINE_DRAG_MODE JDesktopPane.OUTLINE_DRAG_MODE
* @since 1.3
*/
+ @BeanProperty(enumerationValues = {
+ "JDesktopPane.LIVE_DRAG_MODE",
+ "JDesktopPane.OUTLINE_DRAG_MODE"}, description
+ = "Dragging style for internal frame children.")
public void setDragMode(int dragMode) {
int oldDragMode = this.dragMode;
this.dragMode = dragMode;
@@ -225,12 +220,9 @@
* {@code LookAndFeel}.
*
* @param d the <code>DesktopManager</code> to use
- *
- * @beaninfo
- * bound: true
- * description: Desktop manager to handle the internal frames in the
- * desktop pane.
*/
+ @BeanProperty(description
+ = "Desktop manager to handle the internal frames in the desktop pane.")
public void setDesktopManager(DesktopManager d) {
DesktopManager oldValue = desktopManager;
desktopManager = d;
@@ -256,6 +248,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -266,6 +259,7 @@
*
* @return an array of <code>JInternalFrame</code> objects
*/
+ @BeanProperty(bound = false)
public JInternalFrame[] getAllFrames() {
return getAllFrames(this).toArray(new JInternalFrame[0]);
}
@@ -600,6 +594,7 @@
* @return an <code>AccessibleJDesktopPane</code> that serves as the
* <code>AccessibleContext</code> of this <code>JDesktopPane</code>
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJDesktopPane();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JDialog.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JDialog.java Thu Oct 22 11:14:00 2015 -0700
@@ -26,6 +26,8 @@
import java.awt.*;
import java.awt.event.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import javax.accessibility.*;
/**
@@ -86,16 +88,13 @@
* @see JRootPane
* @see javax.swing.RootPaneContainer
*
- * @beaninfo
- * attribute: isContainer true
- * attribute: containerDelegate getContentPane
- * description: A toplevel window for creating dialog boxes.
- *
* @author David Kloba
* @author James Gosling
* @author Scott Violet
* @since 1.2
*/
+@JavaBean(defaultProperty = "JMenuBar", description = "A toplevel window for creating dialog boxes.")
+@SwingContainer(delegate = "getContentPane")
@SuppressWarnings("serial") // Same-version serialization only
public class JDialog extends Dialog implements WindowConstants,
Accessible,
@@ -743,15 +742,12 @@
* @see #addWindowListener
* @see #getDefaultCloseOperation
* @see WindowConstants
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * enum: DO_NOTHING_ON_CLOSE WindowConstants.DO_NOTHING_ON_CLOSE
- * HIDE_ON_CLOSE WindowConstants.HIDE_ON_CLOSE
- * DISPOSE_ON_CLOSE WindowConstants.DISPOSE_ON_CLOSE
- * description: The dialog's default close operation.
*/
+ @BeanProperty(preferred = true, enumerationValues = {
+ "WindowConstants.DO_NOTHING_ON_CLOSE",
+ "WindowConstants.HIDE_ON_CLOSE",
+ "WindowConstants.DISPOSE_ON_CLOSE"}, description
+ = "The dialog's default close operation.")
public void setDefaultCloseOperation(int operation) {
if (operation != DO_NOTHING_ON_CLOSE &&
operation != HIDE_ON_CLOSE &&
@@ -802,12 +798,9 @@
* @see #getTransferHandler
* @see java.awt.Component#setDropTarget
* @since 1.6
- *
- * @beaninfo
- * bound: true
- * hidden: true
- * description: Mechanism for transfer of data into the component
*/
+ @BeanProperty(hidden = true, description
+ = "Mechanism for transfer of data into the component")
public void setTransferHandler(TransferHandler newHandler) {
TransferHandler oldHandler = transferHandler;
transferHandler = newHandler;
@@ -844,11 +837,9 @@
* @param menu the menubar being placed in the dialog
*
* @see #getJMenuBar
- *
- * @beaninfo
- * hidden: true
- * description: The menubar for accessing pulldown menus from this dialog.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "The menubar for accessing pulldown menus from this dialog.")
public void setJMenuBar(final JMenuBar menu) {
getRootPane().setJMenuBar(menu);
}
@@ -892,10 +883,9 @@
* @see #setLayout
* @see #isRootPaneCheckingEnabled
* @see javax.swing.RootPaneContainer
- * @beaninfo
- * hidden: true
- * description: Whether the add and setLayout methods are forwarded
*/
+ @BeanProperty(hidden = true, description
+ = "Whether the add and setLayout methods are forwarded")
protected void setRootPaneCheckingEnabled(boolean enabled) {
rootPaneCheckingEnabled = enabled;
}
@@ -977,6 +967,8 @@
* @see #setRootPane
* @see RootPaneContainer#getRootPane
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "the RootPane object for this dialog.")
public JRootPane getRootPane() {
return rootPane;
}
@@ -989,10 +981,6 @@
* @param root the {@code rootPane} object for this dialog
*
* @see #getRootPane
- *
- * @beaninfo
- * hidden: true
- * description: the RootPane object for this dialog.
*/
protected void setRootPane(JRootPane root) {
if(rootPane != null) {
@@ -1041,12 +1029,9 @@
* exception) if the content pane parameter is {@code null}
* @see #getContentPane
* @see RootPaneContainer#setContentPane
- *
- * @beaninfo
- * hidden: true
- * description: The client area of the dialog where child
- * components are normally inserted.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "The client area of the dialog where child components are normally inserted.")
public void setContentPane(Container contentPane) {
getRootPane().setContentPane(contentPane);
}
@@ -1073,11 +1058,9 @@
* exception) if the layered pane parameter is null
* @see #getLayeredPane
* @see RootPaneContainer#setLayeredPane
- *
- * @beaninfo
- * hidden: true
- * description: The pane which holds the various dialog layers.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "The pane which holds the various dialog layers.")
public void setLayeredPane(JLayeredPane layeredPane) {
getRootPane().setLayeredPane(layeredPane);
}
@@ -1101,11 +1084,9 @@
* @param glassPane the {@code glassPane} object for this dialog
* @see #getGlassPane
* @see RootPaneContainer#setGlassPane
- *
- * @beaninfo
- * hidden: true
- * description: A transparent pane used for menu rendering.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "A transparent pane used for menu rendering.")
public void setGlassPane(Component glassPane) {
getRootPane().setGlassPane(glassPane);
}
@@ -1115,6 +1096,7 @@
*
* @since 1.6
*/
+ @BeanProperty(bound = false)
public Graphics getGraphics() {
JComponent.getGraphicsInvoked(this);
return super.getGraphics();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JEditorPane.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JEditorPane.java Thu Oct 22 11:14:00 2015 -0700
@@ -24,15 +24,13 @@
*/
package javax.swing;
-import sun.swing.SwingUtilities2;
-
import java.awt.*;
-import java.awt.event.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.lang.reflect.*;
import java.net.*;
import java.util.*;
import java.io.*;
-import java.util.*;
import javax.swing.plaf.*;
import javax.swing.text.*;
@@ -184,13 +182,11 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: A text component to edit various types of content.
- *
* @author Timothy Prinzing
* @since 1.2
*/
+@JavaBean(defaultProperty = "UIClassID", description = "A text component to edit various types of content.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JEditorPane extends JTextComponent {
@@ -323,6 +319,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public synchronized HyperlinkListener[] getHyperlinkListeners() {
return listenerList.getListeners(javax.swing.event.HyperlinkListener.class);
}
@@ -411,11 +408,9 @@
* @exception IOException for a <code>null</code> or invalid
* page specification, or exception from the stream being read
* @see #getPage
- * @beaninfo
- * description: the URL used to set content
- * bound: true
- * expert: true
*/
+ @BeanProperty(expert = true, description
+ = "the URL used to set content")
public void setPage(URL page) throws IOException {
if (page == null) {
throw new IOException("invalid url");
@@ -895,6 +890,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -960,11 +956,11 @@
* @param type the non-<code>null</code> mime type for the content editing
* support
* @see #getContentType
- * @beaninfo
- * description: the type of content
* @throws NullPointerException if the <code>type</code> parameter
* is <code>null</code>
*/
+ @BeanProperty(bound = false, description
+ = "the type of content")
public final void setContentType(String type) {
// The type could have optional info is part of it,
// for example some charset info. We need to strip that
@@ -1046,11 +1042,9 @@
*
* @param kit the desired editor behavior
* @see #getEditorKit
- * @beaninfo
- * description: the currently installed kit for handling content
- * bound: true
- * expert: true
*/
+ @BeanProperty(expert = true, description
+ = "the currently installed kit for handling content")
public void setEditorKit(EditorKit kit) {
EditorKit old = this.kit;
isUserSetEditorKit = true;
@@ -1414,9 +1408,9 @@
* @param t the new text to be set; if <code>null</code> the old
* text will be deleted
* @see #getText
- * @beaninfo
- * description: the text of this component
*/
+ @BeanProperty(bound = false, description
+ = "the text of this component")
public void setText(String t) {
try {
Document doc = getDocument();
@@ -1466,6 +1460,7 @@
* @return true if a viewport should force the Scrollables width to
* match its own, false otherwise
*/
+ @BeanProperty(bound = false)
public boolean getScrollableTracksViewportWidth() {
Container parent = SwingUtilities.getUnwrappedParent(this);
if (parent instanceof JViewport) {
@@ -1489,6 +1484,7 @@
* <code>Scrollable</code>'s height to match its own,
* false otherwise
*/
+ @BeanProperty(bound = false)
public boolean getScrollableTracksViewportHeight() {
Container parent = SwingUtilities.getUnwrappedParent(this);
if (parent instanceof JViewport) {
@@ -1626,6 +1622,7 @@
* @return an AccessibleJEditorPane that serves as the
* AccessibleContext of this JEditorPane
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (getEditorKit() instanceof HTMLEditorKit) {
if (accessibleContext == null || accessibleContext.getClass() !=
--- a/jdk/src/java.desktop/share/classes/javax/swing/JFileChooser.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JFileChooser.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import javax.swing.event.*;
@@ -48,6 +47,8 @@
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.io.InvalidObjectException;
@@ -83,13 +84,11 @@
* href="package-summary.html#threading">Swing's Threading
* Policy</a>.
*
- * @beaninfo
- * attribute: isContainer false
- * description: A component which allows for the interactive selection of a file.
- *
* @author Jeff Dinkins
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A component which allows for the interactive selection of a file.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Superclass is not serializable across versions
public class JFileChooser extends JComponent implements Accessible {
@@ -456,11 +455,9 @@
* @see #setTransferHandler
* @see TransferHandler
* @since 1.4
- *
- * @beaninfo
- * description: determines whether automatic drag handling is enabled
- * bound: false
*/
+ @BeanProperty(bound = false, description
+ = "determines whether automatic drag handling is enabled")
public void setDragEnabled(boolean b) {
checkDragEnabled(b);
dragEnabled = b;
@@ -505,14 +502,11 @@
* not the current directory, changes the current directory
* to be the file's parent directory.
*
- * @beaninfo
- * preferred: true
- * bound: true
- *
* @see #getSelectedFile
*
* @param file the selected file
*/
+ @BeanProperty(preferred = true)
public void setSelectedFile(File file) {
File oldValue = selectedFile;
selectedFile = file;
@@ -546,10 +540,9 @@
* set to allow multiple selection.
*
* @param selectedFiles an array {@code File}s to be selected
- * @beaninfo
- * bound: true
- * description: The list of selected files if the chooser is in multiple selection mode.
*/
+ @BeanProperty(description
+ = "The list of selected files if the chooser is in multiple selection mode.")
public void setSelectedFiles(File[] selectedFiles) {
File[] oldValue = this.selectedFiles;
if (selectedFiles == null || selectedFiles.length == 0) {
@@ -586,14 +579,11 @@
* until it finds a traversable directory, or hits the root of the
* file system.
*
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The directory that the JFileChooser is showing files of.
- *
* @param dir the current directory to point to
* @see #getCurrentDirectory
*/
+ @BeanProperty(preferred = true, description
+ = "The directory that the JFileChooser is showing files of.")
public void setCurrentDirectory(File dir) {
File oldValue = currentDirectory;
@@ -881,15 +871,12 @@
* @param b <code>false</code> if control buttons should not be
* shown; otherwise, <code>true</code>
*
- * @beaninfo
- * preferred: true
- * bound: true
- * description: Sets whether the approve & cancel buttons are shown.
- *
* @see #getControlButtonsAreShown
* @see #CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY
* @since 1.3
*/
+ @BeanProperty(preferred = true, description
+ = "Sets whether the approve & cancel buttons are shown.")
public void setControlButtonsAreShown(boolean b) {
if(controlsShown == b) {
return;
@@ -939,19 +926,16 @@
*
* @exception IllegalArgumentException if <code>dialogType</code> is
* not legal
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The type (open, save, custom) of the JFileChooser.
- * enum:
- * OPEN_DIALOG JFileChooser.OPEN_DIALOG
- * SAVE_DIALOG JFileChooser.SAVE_DIALOG
- * CUSTOM_DIALOG JFileChooser.CUSTOM_DIALOG
*
* @see #getDialogType
* @see #setApproveButtonText
*/
// PENDING(jeff) - fire button text change property
+ @BeanProperty(preferred = true, enumerationValues = {
+ "JFileChooser.OPEN_DIALOG",
+ "JFileChooser.SAVE_DIALOG",
+ "JFileChooser.CUSTOM_DIALOG"}, description
+ = "The type (open, save, custom) of the JFileChooser.")
public void setDialogType(int dialogType) {
if(this.dialogType == dialogType) {
return;
@@ -979,14 +963,11 @@
*
* @param dialogTitle the new <code>String</code> for the title bar
*
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The title of the JFileChooser dialog window.
- *
* @see #getDialogTitle
*
*/
+ @BeanProperty(preferred = true, description
+ = "The title of the JFileChooser dialog window.")
public void setDialogTitle(String dialogTitle) {
String oldValue = this.dialogTitle;
this.dialogTitle = dialogTitle;
@@ -1016,16 +997,13 @@
* Sets the tooltip text used in the <code>ApproveButton</code>.
* If <code>null</code>, the UI object will determine the button's text.
*
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The tooltip text for the ApproveButton.
- *
* @param toolTipText the tooltip text for the approve button
* @see #setApproveButtonText
* @see #setDialogType
* @see #showDialog
*/
+ @BeanProperty(preferred = true, description
+ = "The tooltip text for the ApproveButton.")
public void setApproveButtonToolTipText(String toolTipText) {
if(approveButtonToolTipText == toolTipText) {
return;
@@ -1065,13 +1043,10 @@
*
* @param mnemonic an integer value for the mnemonic key
*
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The mnemonic key accelerator for the ApproveButton.
- *
* @see #getApproveButtonMnemonic
*/
+ @BeanProperty(preferred = true, description
+ = "The mnemonic key accelerator for the ApproveButton.")
public void setApproveButtonMnemonic(int mnemonic) {
if(approveButtonMnemonic == mnemonic) {
return;
@@ -1100,11 +1075,6 @@
* Sets the text used in the <code>ApproveButton</code> in the
* <code>FileChooserUI</code>.
*
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The text that goes in the ApproveButton.
- *
* @param approveButtonText the text used in the <code>ApproveButton</code>
*
* @see #getApproveButtonText
@@ -1112,6 +1082,8 @@
* @see #showDialog
*/
// PENDING(jeff) - have ui set this on dialog type change
+ @BeanProperty(preferred = true, description
+ = "The text that goes in the ApproveButton.")
public void setApproveButtonText(String approveButtonText) {
if(this.approveButtonText == approveButtonText) {
return;
@@ -1148,6 +1120,7 @@
* @see #removeChoosableFileFilter
* @see #resetChoosableFileFilters
*/
+ @BeanProperty(bound = false)
public FileFilter[] getChoosableFileFilters() {
FileFilter[] filterArray = new FileFilter[filters.size()];
filters.copyInto(filterArray);
@@ -1162,16 +1135,13 @@
* @param filter the <code>FileFilter</code> to add to the choosable file
* filter list
*
- * @beaninfo
- * preferred: true
- * bound: true
- * description: Adds a filter to the list of user choosable file filters.
- *
* @see #getChoosableFileFilters
* @see #removeChoosableFileFilter
* @see #resetChoosableFileFilters
* @see #setFileSelectionMode
*/
+ @BeanProperty(preferred = true, description
+ = "Adds a filter to the list of user choosable file filters.")
public void addChoosableFileFilter(FileFilter filter) {
if(filter != null && !filters.contains(filter)) {
FileFilter[] oldValue = getChoosableFileFilters();
@@ -1249,6 +1219,7 @@
*
* @return the {@code AcceptAll} file filter
*/
+ @BeanProperty(bound = false)
public FileFilter getAcceptAllFileFilter() {
FileFilter filter = null;
if(getUI() != null) {
@@ -1277,16 +1248,14 @@
*
* @param b a {@code boolean} which determines whether the {@code AcceptAll}
* file filter is an available choice in the choosable filter list
- * @beaninfo
- * preferred: true
- * bound: true
- * description: Sets whether the AcceptAll FileFilter is used as an available choice in the choosable filter list.
*
* @see #isAcceptAllFileFilterUsed
* @see #getAcceptAllFileFilter
* @see #setFileFilter
* @since 1.3
*/
+ @BeanProperty(preferred = true, description
+ = "Sets whether the AcceptAll FileFilter is used as an available choice in the choosable filter list.")
public void setAcceptAllFileFilterUsed(boolean b) {
boolean oldValue = useAcceptAllFileFilter;
useAcceptAllFileFilter = b;
@@ -1320,11 +1289,9 @@
* file chooser.
*
* @param newAccessory the accessory component to be set
- * @beaninfo
- * preferred: true
- * bound: true
- * description: Sets the accessory component on the JFileChooser.
*/
+ @BeanProperty(preferred = true, description
+ = "Sets the accessory component on the JFileChooser.")
public void setAccessory(JComponent newAccessory) {
JComponent oldValue = accessory;
accessory = newAccessory;
@@ -1346,17 +1313,14 @@
*
* @exception IllegalArgumentException if <code>mode</code> is an
* illegal file selection mode
- * @beaninfo
- * preferred: true
- * bound: true
- * description: Sets the types of files that the JFileChooser can choose.
- * enum: FILES_ONLY JFileChooser.FILES_ONLY
- * DIRECTORIES_ONLY JFileChooser.DIRECTORIES_ONLY
- * FILES_AND_DIRECTORIES JFileChooser.FILES_AND_DIRECTORIES
- *
*
* @see #getFileSelectionMode
*/
+ @BeanProperty(preferred = true, enumerationValues = {
+ "JFileChooser.FILES_ONLY",
+ "JFileChooser.DIRECTORIES_ONLY",
+ "JFileChooser.FILES_AND_DIRECTORIES"}, description
+ = "Sets the types of files that the JFileChooser can choose.")
public void setFileSelectionMode(int mode) {
if(fileSelectionMode == mode) {
return;
@@ -1400,6 +1364,7 @@
* @see #setFileSelectionMode
* @see #getFileSelectionMode
*/
+ @BeanProperty(bound = false)
public boolean isFileSelectionEnabled() {
return ((fileSelectionMode == FILES_ONLY) || (fileSelectionMode == FILES_AND_DIRECTORIES));
}
@@ -1412,6 +1377,7 @@
* @see #setFileSelectionMode
* @see #getFileSelectionMode
*/
+ @BeanProperty(bound = false)
public boolean isDirectorySelectionEnabled() {
return ((fileSelectionMode == DIRECTORIES_ONLY) || (fileSelectionMode == FILES_AND_DIRECTORIES));
}
@@ -1420,12 +1386,11 @@
* Sets the file chooser to allow multiple file selections.
*
* @param b true if multiple files may be selected
- * @beaninfo
- * bound: true
- * description: Sets multiple file selection mode.
*
* @see #isMultiSelectionEnabled
*/
+ @BeanProperty(description
+ = "Sets multiple file selection mode.")
public void setMultiSelectionEnabled(boolean b) {
if(multiSelectionEnabled == b) {
return;
@@ -1461,15 +1426,12 @@
* in the file chooser. The job of determining which files are
* shown is done by the <code>FileView</code>.
*
- * @beaninfo
- * preferred: true
- * bound: true
- * description: Sets file hiding on or off.
- *
* @param b the boolean value that determines whether file hiding is
* turned on
* @see #isFileHidingEnabled
*/
+ @BeanProperty(preferred = true, description
+ = "Sets file hiding on or off.")
public void setFileHidingEnabled(boolean b) {
// Dump showFilesListener since we'll ignore it from now on
if (showFilesListener != null) {
@@ -1485,14 +1447,11 @@
* Sets the current file filter. The file filter is used by the
* file chooser to filter out files from the user's view.
*
- * @beaninfo
- * preferred: true
- * bound: true
- * description: Sets the File Filter used to filter out files of type.
- *
* @param filter the new current file filter to use
* @see #getFileFilter
*/
+ @BeanProperty(preferred = true, description
+ = "Sets the File Filter used to filter out files of type.")
public void setFileFilter(FileFilter filter) {
FileFilter oldValue = fileFilter;
fileFilter = filter;
@@ -1534,13 +1493,11 @@
* the icon that represents a file or the type description of a file.
*
* @param fileView a {@code FileView} to be used to retrieve UI information
- * @beaninfo
- * preferred: true
- * bound: true
- * description: Sets the File View used to get file type information.
*
* @see #getFileView
*/
+ @BeanProperty(preferred = true, description
+ = "Sets the File View used to get file type information.")
public void setFileView(FileView fileView) {
FileView oldValue = this.fileView;
this.fileView = fileView;
@@ -1704,13 +1661,10 @@
* the floppy drive and getting a list of root drives.
* @param fsv the new <code>FileSystemView</code>
*
- * @beaninfo
- * expert: true
- * bound: true
- * description: Sets the FileSytemView used to get filesystem information.
- *
* @see FileSystemView
*/
+ @BeanProperty(expert = true, description
+ = "Sets the FileSytemView used to get filesystem information.")
public void setFileSystemView(FileSystemView fsv) {
FileSystemView oldValue = fileSystemView;
fileSystemView = fsv;
@@ -1801,6 +1755,7 @@
*
* @since 1.4
*/
+ @BeanProperty(bound = false)
public ActionListener[] getActionListeners() {
return listenerList.getListeners(ActionListener.class);
}
@@ -1895,10 +1850,9 @@
* @return the string "FileChooserUI"
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
- * @beaninfo
- * expert: true
- * description: A string that specifies the name of the L&F class.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "A string that specifies the name of the L&F class.")
public String getUIClassID() {
return uiClassID;
}
@@ -1908,6 +1862,7 @@
*
* @return the FileChooserUI object that implements the FileChooserUI L&F
*/
+ @BeanProperty(bound = false)
public FileChooserUI getUI() {
return (FileChooserUI) ui;
}
@@ -2070,6 +2025,7 @@
* @return an AccessibleJFileChooser that serves as the
* AccessibleContext of this JFileChooser
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJFileChooser();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JFormattedTextField.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JFormattedTextField.java Thu Oct 22 11:14:00 2015 -0700
@@ -27,6 +27,8 @@
import java.awt.*;
import java.awt.event.*;
import java.awt.im.InputContext;
+import java.beans.BeanProperty;
+import java.beans.JavaBean;
import java.io.*;
import java.text.*;
import java.util.*;
@@ -176,6 +178,7 @@
*
* @since 1.4
*/
+@JavaBean
@SuppressWarnings("serial") // Same-version serialization only
public class JFormattedTextField extends JTextField {
private static final String uiClassID = "FormattedTextFieldUI";
@@ -357,13 +360,13 @@
* @param behavior Identifies behavior when focus is lost
* @throws IllegalArgumentException if behavior is not one of the known
* values
- * @beaninfo
- * enum: COMMIT JFormattedTextField.COMMIT
- * COMMIT_OR_REVERT JFormattedTextField.COMMIT_OR_REVERT
- * REVERT JFormattedTextField.REVERT
- * PERSIST JFormattedTextField.PERSIST
- * description: Behavior when component loses focus
*/
+ @BeanProperty(bound = false, enumerationValues = {
+ "JFormattedTextField.COMMIT",
+ "JFormattedTextField.COMMIT_OR_REVERT",
+ "JFormattedTextField.REVERT",
+ "JFormattedTextField.PERSIST"}, description
+ = "Behavior when component loses focus")
public void setFocusLostBehavior(int behavior) {
if (behavior != COMMIT && behavior != COMMIT_OR_REVERT &&
behavior != PERSIST && behavior != REVERT) {
@@ -407,12 +410,9 @@
*
* @param tf <code>AbstractFormatterFactory</code> used to lookup
* instances of <code>AbstractFormatter</code>
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: AbstractFormatterFactory, responsible for returning an
- * AbstractFormatter that can format the current value.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "AbstractFormatterFactory, responsible for returning an AbstractFormatter that can format the current value.")
public void setFormatterFactory(AbstractFormatterFactory tf) {
AbstractFormatterFactory oldFactory = factory;
@@ -448,10 +448,6 @@
*
* @see #setFormatterFactory
* @param format AbstractFormatter to use for formatting
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: TextFormatter, responsible for formatting the current value
*/
protected void setFormatter(AbstractFormatter format) {
AbstractFormatter oldFormat = this.format;
@@ -474,6 +470,8 @@
*
* @return AbstractFormatter used for formatting
*/
+ @BeanProperty(visualUpdate = true, description
+ = "TextFormatter, responsible for formatting the current value")
public AbstractFormatter getFormatter() {
return format;
}
@@ -490,11 +488,9 @@
* This is a JavaBeans bound property.
*
* @param value Current value to display
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The value to be formatted.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The value to be formatted.")
public void setValue(Object value) {
if (value != null && getFormatterFactory() == null) {
setFormatterFactory(getDefaultFormatterFactory(value));
@@ -544,11 +540,9 @@
*
* @param isValid boolean indicating if the currently edited value is
* valid.
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: True indicates the edited value is valid
*/
+ @BeanProperty(visualUpdate = true, description
+ = "True indicates the edited value is valid")
private void setEditValid(boolean isValid) {
if (isValid != editValid) {
editValid = isValid;
@@ -564,6 +558,7 @@
*
* @return true if the current value being edited is valid.
*/
+ @BeanProperty(bound = false)
public boolean isEditValid() {
return editValid;
}
@@ -673,6 +668,7 @@
*
* @return the command list
*/
+ @BeanProperty(bound = false)
public Action[] getActions() {
return TextAction.augmentList(super.getActions(), defaultActions);
}
@@ -683,6 +679,7 @@
* @return the string "FormattedTextFieldUI"
* @see JComponent#getUIClassID
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -695,11 +692,9 @@
*
* @param doc the document to display/edit
* @see #getDocument
- * @beaninfo
- * description: the text document model
- * bound: true
- * expert: true
*/
+ @BeanProperty(expert = true, description
+ = "the text document model")
public void setDocument(Document doc) {
if (documentListener != null && getDocument() != null) {
getDocument().removeDocumentListener(documentListener);
--- a/jdk/src/java.desktop/share/classes/javax/swing/JFrame.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JFrame.java Thu Oct 22 11:14:00 2015 -0700
@@ -36,12 +36,14 @@
import java.awt.LayoutManager;
import java.awt.event.WindowEvent;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
+
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet;
-
/**
* An extended version of <code>java.awt.Frame</code> that adds support for
* the JFC/Swing component architecture.
@@ -111,16 +113,13 @@
* @see java.awt.event.WindowListener#windowClosing
* @see javax.swing.RootPaneContainer
*
- * @beaninfo
- * attribute: isContainer true
- * attribute: containerDelegate getContentPane
- * description: A toplevel window which can be minimized to an icon.
- *
* @author Jeff Dinkins
* @author Georges Saab
* @author David Kloba
* @since 1.2
*/
+@JavaBean(defaultProperty = "JMenuBar", description = "A toplevel window which can be minimized to an icon.")
+@SwingContainer(delegate = "getContentPane")
@SuppressWarnings("serial") // Same-version serialization only
public class JFrame extends Frame implements WindowConstants,
Accessible,
@@ -368,16 +367,13 @@
* <code>SecurityManager</code> will
* not allow the caller to invoke <code>System.exit</code>
* @see java.lang.Runtime#exit(int)
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * enum: DO_NOTHING_ON_CLOSE WindowConstants.DO_NOTHING_ON_CLOSE
- * HIDE_ON_CLOSE WindowConstants.HIDE_ON_CLOSE
- * DISPOSE_ON_CLOSE WindowConstants.DISPOSE_ON_CLOSE
- * EXIT_ON_CLOSE WindowConstants.EXIT_ON_CLOSE
- * description: The frame's default close operation.
*/
+ @BeanProperty(preferred = true, enumerationValues = {
+ "WindowConstants.DO_NOTHING_ON_CLOSE",
+ "WindowConstants.HIDE_ON_CLOSE",
+ "WindowConstants.DISPOSE_ON_CLOSE",
+ "WindowConstants.EXIT_ON_CLOSE"}, description
+ = "The frame's default close operation.")
public void setDefaultCloseOperation(int operation) {
if (operation != DO_NOTHING_ON_CLOSE &&
operation != HIDE_ON_CLOSE &&
@@ -440,12 +436,9 @@
* @see #getTransferHandler
* @see java.awt.Component#setDropTarget
* @since 1.6
- *
- * @beaninfo
- * bound: true
- * hidden: true
- * description: Mechanism for transfer of data into the component
*/
+ @BeanProperty(hidden = true, description
+ = "Mechanism for transfer of data into the component")
public void setTransferHandler(TransferHandler newHandler) {
TransferHandler oldHandler = transferHandler;
transferHandler = newHandler;
@@ -481,11 +474,9 @@
* @param menubar the menubar being placed in the frame
*
* @see #getJMenuBar
- *
- * @beaninfo
- * hidden: true
- * description: The menubar for accessing pulldown menus from this frame.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "The menubar for accessing pulldown menus from this frame.")
public void setJMenuBar(final JMenuBar menubar) {
getRootPane().setJMenuBar(menubar);
}
@@ -529,10 +520,9 @@
* @see #setLayout
* @see #isRootPaneCheckingEnabled
* @see javax.swing.RootPaneContainer
- * @beaninfo
- * hidden: true
- * description: Whether the add and setLayout methods are forwarded
*/
+ @BeanProperty(hidden = true, description
+ = "Whether the add and setLayout methods are forwarded")
protected void setRootPaneCheckingEnabled(boolean enabled) {
rootPaneCheckingEnabled = enabled;
}
@@ -616,6 +606,8 @@
* @see #setRootPane
* @see RootPaneContainer#getRootPane
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "the RootPane object for this frame.")
public JRootPane getRootPane() {
return rootPane;
}
@@ -627,10 +619,6 @@
* @param root the <code>rootPane</code> object for this frame
*
* @see #getRootPane
- *
- * @beaninfo
- * hidden: true
- * description: the RootPane object for this frame.
*/
protected void setRootPane(JRootPane root)
{
@@ -684,12 +672,9 @@
* @see #getContentPane
* @see RootPaneContainer#setContentPane
* @see JRootPane
- *
- * @beaninfo
- * hidden: true
- * description: The client area of the frame where child
- * components are normally inserted.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "The client area of the frame where child components are normally inserted.")
public void setContentPane(Container contentPane) {
getRootPane().setContentPane(contentPane);
}
@@ -714,11 +699,9 @@
* exception) if the layered pane parameter is <code>null</code>
* @see #getLayeredPane
* @see RootPaneContainer#setLayeredPane
- *
- * @beaninfo
- * hidden: true
- * description: The pane that holds the various frame layers.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "The pane that holds the various frame layers.")
public void setLayeredPane(JLayeredPane layeredPane) {
getRootPane().setLayeredPane(layeredPane);
}
@@ -741,11 +724,9 @@
*
* @see #getGlassPane
* @see RootPaneContainer#setGlassPane
- *
- * @beaninfo
- * hidden: true
- * description: A transparent pane used for menu rendering.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "A transparent pane used for menu rendering.")
public void setGlassPane(Component glassPane) {
getRootPane().setGlassPane(glassPane);
}
@@ -755,6 +736,7 @@
*
* @since 1.6
*/
+ @BeanProperty(bound = false)
public Graphics getGraphics() {
JComponent.getGraphicsInvoked(this);
return super.getGraphics();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JInternalFrame.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JInternalFrame.java Thu Oct 22 11:14:00 2015 -0700
@@ -27,8 +27,7 @@
import java.awt.*;
-import java.beans.PropertyVetoException;
-import java.beans.PropertyChangeEvent;
+import java.beans.*;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;
@@ -38,7 +37,7 @@
import java.io.ObjectOutputStream;
import java.io.IOException;
-import java.beans.PropertyChangeListener;
+
import sun.awt.AppContext;
import sun.swing.SwingUtilities2;
@@ -104,12 +103,9 @@
* @author David Kloba
* @author Rich Schiavi
* @since 1.2
- * @beaninfo
- * attribute: isContainer true
- * attribute: containerDelegate getContentPane
- * description: A frame container which is contained within
- * another window.
*/
+@JavaBean(defaultProperty = "JMenuBar", description = "A frame container which is contained within another window.")
+@SwingContainer(delegate = "getContentPane")
@SuppressWarnings("serial") // Same-version serialization only
public class JInternalFrame extends JComponent implements
Accessible, WindowConstants,
@@ -377,12 +373,9 @@
/**
* Sets the UI delegate for this <code>JInternalFrame</code>.
* @param ui the UI delegate
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(InternalFrameUI ui) {
boolean checkingEnabled = isRootPaneCheckingEnabled();
try {
@@ -434,10 +427,9 @@
*
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
- *
- * @beaninfo
- * description: UIClassID
*/
+ @BeanProperty(bound = false, description
+ = "UIClassID")
public String getUIClassID() {
return uiClassID;
}
@@ -470,10 +462,9 @@
* @see #setLayout
* @see #isRootPaneCheckingEnabled
* @see javax.swing.RootPaneContainer
- * @beaninfo
- * hidden: true
- * description: Whether the add and setLayout methods are forwarded
*/
+ @BeanProperty(hidden = true, description
+ = "Whether the add and setLayout methods are forwarded")
protected void setRootPaneCheckingEnabled(boolean enabled) {
rootPaneCheckingEnabled = enabled;
}
@@ -595,12 +586,9 @@
*
* @param m the <code>JMenuBar</code> to use in this internal frame
* @see #getJMenuBar
- * @beaninfo
- * bound: true
- * preferred: true
- * description: The menu bar for accessing pulldown menus
- * from this internal frame.
*/
+ @BeanProperty(preferred = true, description
+ = "The menu bar for accessing pulldown menus from this internal frame.")
public void setJMenuBar(JMenuBar m){
JMenuBar oldValue = getMenuBar();
getRootPane().setJMenuBar(m);
@@ -626,12 +614,9 @@
* @exception java.awt.IllegalComponentStateException (a runtime
* exception) if the content pane parameter is <code>null</code>
* @see RootPaneContainer#getContentPane
- * @beaninfo
- * bound: true
- * hidden: true
- * description: The client area of the internal frame where child
- * components are normally inserted.
*/
+ @BeanProperty(hidden = true, description
+ = "The client area of the internal frame where child components are normally inserted.")
public void setContentPane(Container c) {
Container oldValue = getContentPane();
getRootPane().setContentPane(c);
@@ -658,11 +643,9 @@
* @exception java.awt.IllegalComponentStateException (a runtime
* exception) if the layered pane parameter is <code>null</code>
* @see RootPaneContainer#setLayeredPane
- * @beaninfo
- * hidden: true
- * bound: true
- * description: The pane which holds the various desktop layers.
*/
+ @BeanProperty(hidden = true, description
+ = "The pane which holds the various desktop layers.")
public void setLayeredPane(JLayeredPane layered) {
JLayeredPane oldValue = getLayeredPane();
getRootPane().setLayeredPane(layered);
@@ -685,11 +668,9 @@
*
* @param glass the glass pane for this internal frame
* @see RootPaneContainer#getGlassPane
- * @beaninfo
- * bound: true
- * hidden: true
- * description: A transparent pane used for menu rendering.
*/
+ @BeanProperty(hidden = true, description
+ = "A transparent pane used for menu rendering.")
public void setGlassPane(Component glass) {
Component oldValue = getGlassPane();
getRootPane().setGlassPane(glass);
@@ -702,6 +683,8 @@
* @return the <code>rootPane</code> property
* @see RootPaneContainer#getRootPane
*/
+ @BeanProperty(hidden = true, description
+ = "The root pane used by this internal frame.")
public JRootPane getRootPane() {
return rootPane;
}
@@ -713,10 +696,6 @@
* This method is called by the constructor.
*
* @param root the new <code>JRootPane</code> object
- * @beaninfo
- * bound: true
- * hidden: true
- * description: The root pane used by this internal frame.
*/
protected void setRootPane(JRootPane root) {
if(rootPane != null) {
@@ -741,11 +720,9 @@
* Sets whether this <code>JInternalFrame</code> can be closed by
* some user action.
* @param b a boolean value, where <code>true</code> means this internal frame can be closed
- * @beaninfo
- * preferred: true
- * bound: true
- * description: Indicates whether this internal frame can be closed.
*/
+ @BeanProperty(preferred = true, description
+ = "Indicates whether this internal frame can be closed.")
public void setClosable(boolean b) {
Boolean oldValue = closable ? Boolean.TRUE : Boolean.FALSE;
Boolean newValue = b ? Boolean.TRUE : Boolean.FALSE;
@@ -807,12 +784,9 @@
* @see #setDefaultCloseOperation
* @see #dispose
* @see javax.swing.event.InternalFrameEvent#INTERNAL_FRAME_CLOSING
- *
- * @beaninfo
- * bound: true
- * constrained: true
- * description: Indicates whether this internal frame has been closed.
*/
+ @BeanProperty(description
+ = "Indicates whether this internal frame has been closed.")
public void setClosed(boolean b) throws PropertyVetoException {
if (isClosed == b) {
return;
@@ -844,12 +818,9 @@
* user action.
*
* @param b a boolean, where <code>true</code> means this internal frame can be resized
- * @beaninfo
- * preferred: true
- * bound: true
- * description: Determines whether this internal frame can be resized
- * by the user.
*/
+ @BeanProperty(preferred = true, description
+ = "Determines whether this internal frame can be resized by the user.")
public void setResizable(boolean b) {
Boolean oldValue = resizable ? Boolean.TRUE : Boolean.FALSE;
Boolean newValue = b ? Boolean.TRUE : Boolean.FALSE;
@@ -877,11 +848,9 @@
* they will ignore this property.
*
* @param b a boolean, where <code>true</code> means this internal frame can be iconified
- * @beaninfo
- * preferred: true
- bound: true
- * description: Determines whether this internal frame can be iconified.
*/
+ @BeanProperty(preferred = true, description
+ = "Determines whether this internal frame can be iconified.")
public void setIconifiable(boolean b) {
Boolean oldValue = iconable ? Boolean.TRUE : Boolean.FALSE;
Boolean newValue = b ? Boolean.TRUE : Boolean.FALSE;
@@ -925,12 +894,9 @@
*
* @see InternalFrameEvent#INTERNAL_FRAME_ICONIFIED
* @see InternalFrameEvent#INTERNAL_FRAME_DEICONIFIED
- *
- * @beaninfo
- * bound: true
- * constrained: true
- * description: The image displayed when this internal frame is minimized.
*/
+ @BeanProperty(description
+ = "The image displayed when this internal frame is minimized.")
public void setIcon(boolean b) throws PropertyVetoException {
if (isIcon == b) {
return;
@@ -964,11 +930,9 @@
* they will ignore this property.
*
* @param b <code>true</code> to specify that this internal frame should be maximizable; <code>false</code> to specify that it should not be
- * @beaninfo
- * bound: true
- * preferred: true
- * description: Determines whether this internal frame can be maximized.
*/
+ @BeanProperty(preferred = true, description
+ = "Determines whether this internal frame can be maximized.")
public void setMaximizable(boolean b) {
Boolean oldValue = maximizable ? Boolean.TRUE : Boolean.FALSE;
Boolean newValue = b ? Boolean.TRUE : Boolean.FALSE;
@@ -1006,11 +970,9 @@
* restores it
* @exception PropertyVetoException when the attempt to set the
* property is vetoed by the <code>JInternalFrame</code>
- * @beaninfo
- * bound: true
- * constrained: true
- * description: Indicates whether this internal frame is maximized.
*/
+ @BeanProperty(description
+ = "Indicates whether this internal frame is maximized.")
public void setMaximum(boolean b) throws PropertyVetoException {
if (isMaximum == b) {
return;
@@ -1042,11 +1004,9 @@
* @see #getTitle
*
* @param title the <code>String</code> to display in the title bar
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The text displayed in the title bar.
*/
+ @BeanProperty(preferred = true, description
+ = "The text displayed in the title bar.")
public void setTitle(String title) {
String oldValue = this.title;
this.title = title;
@@ -1076,13 +1036,9 @@
* @see #isShowing
* @see InternalFrameEvent#INTERNAL_FRAME_ACTIVATED
* @see InternalFrameEvent#INTERNAL_FRAME_DEACTIVATED
- *
- * @beaninfo
- * constrained: true
- * bound: true
- * description: Indicates whether this internal frame is currently
- * the active frame.
*/
+ @BeanProperty(description
+ = "Indicates whether this internal frame is currently the active frame.")
public void setSelected(boolean selected) throws PropertyVetoException {
// The InternalFrame may already be selected, but the focus
// may be outside it, so restore the focus to the subcomponent
@@ -1153,10 +1109,9 @@
*
* @param icon the <code>Icon</code> to display in the title bar
* @see #getFrameIcon
- * @beaninfo
- * bound: true
- * description: The icon shown in the top-left corner of this internal frame.
*/
+ @BeanProperty(description
+ = "The icon shown in the top-left corner of this internal frame.")
public void setFrameIcon(Icon icon) {
Icon oldIcon = frameIcon;
frameIcon = icon;
@@ -1214,6 +1169,7 @@
* @return the last non-resizable <code>Cursor</code>
* @since 1.6
*/
+ @BeanProperty(bound = false)
public Cursor getLastCursor() {
return lastCursor;
}
@@ -1249,10 +1205,9 @@
* frame's desktop layer
* @throws NullPointerException if {@code layer} is {@code null}
* @see JLayeredPane
- * @beaninfo
- * expert: true
- * description: Specifies what desktop layer is used.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "Specifies what desktop layer is used.")
public void setLayer(Integer layer) {
if(getParent() != null && getParent() instanceof JLayeredPane) {
// Normally we want to do this, as it causes the LayeredPane
@@ -1280,10 +1235,9 @@
*
* @see #setLayer(Integer)
* @see JLayeredPane
- * @beaninfo
- * expert: true
- * description: Specifies what desktop layer is used.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "Specifies what desktop layer is used.")
public void setLayer(int layer) {
this.setLayer(Integer.valueOf(layer));
}
@@ -1307,6 +1261,7 @@
* @return the <code>JDesktopPane</code> this internal frame belongs to,
* or <code>null</code> if none is found
*/
+ @BeanProperty(bound = false)
public JDesktopPane getDesktopPane() {
Container p;
@@ -1331,10 +1286,9 @@
*
* @param d the <code>JDesktopIcon</code> to display on the desktop
* @see #getDesktopIcon
- * @beaninfo
- * bound: true
- * description: The icon shown when this internal frame is minimized.
*/
+ @BeanProperty(description
+ = "The icon shown when this internal frame is minimized.")
public void setDesktopIcon(JDesktopIcon d) {
JDesktopIcon oldValue = getDesktopIcon();
desktopIcon = d;
@@ -1424,6 +1378,7 @@
* @see #isSelected
* @since 1.4
*/
+ @BeanProperty(bound = false)
public Component getMostRecentFocusOwner() {
if (isSelected()) {
return getFocusOwner();
@@ -1538,6 +1493,7 @@
*
* @see #addInternalFrameListener
*/
+ @BeanProperty(bound = false)
public InternalFrameListener[] getInternalFrameListeners() {
return listenerList.getListeners(InternalFrameListener.class);
}
@@ -1871,6 +1827,7 @@
* @see java.awt.Container#isFocusCycleRoot()
* @since 1.4
*/
+ @BeanProperty(bound = false)
public final Container getFocusCycleRootAncestor() {
return null;
}
@@ -1883,6 +1840,7 @@
* @return <code>null</code>
* @see java.awt.Window#getWarningString
*/
+ @BeanProperty(bound = false)
public final String getWarningString() {
return null;
}
@@ -2018,6 +1976,7 @@
* <code>JInternalFrame</code>
* @see AccessibleJInternalFrame
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJInternalFrame();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JLabel.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JLabel.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,28 +22,23 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import java.awt.Component;
-import java.awt.Font;
import java.awt.Image;
import java.awt.*;
import java.text.*;
import java.awt.geom.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.Transient;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
import javax.swing.plaf.LabelUI;
import javax.accessibility.*;
import javax.swing.text.*;
-import javax.swing.text.html.*;
-import javax.swing.plaf.basic.*;
-import java.util.*;
-
/**
* A display area for a short text string or an image,
@@ -98,13 +93,11 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: A component that displays a short string and an icon.
- *
* @author Hans Muller
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A component that displays a short string and an icon.")
+@SwingContainer(false)
@SuppressWarnings("serial")
public class JLabel extends JComponent implements SwingConstants, Accessible
{
@@ -256,12 +249,9 @@
*
* @param ui the LabelUI L&F object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(LabelUI ui) {
super.setUI(ui);
// disabled icon is generated by LF so it should be unset here
@@ -277,7 +267,7 @@
* @see JComponent#updateUI
*/
public void updateUI() {
- setUI((LabelUI)UIManager.getUI(this));
+ setUI((LabelUI) UIManager.getUI(this));
}
@@ -290,6 +280,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -318,12 +309,9 @@
* @see #setVerticalTextPosition
* @see #setHorizontalTextPosition
* @see #setIcon
- * @beaninfo
- * preferred: true
- * bound: true
- * attribute: visualUpdate true
- * description: Defines the single line of text this component will display.
*/
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "Defines the single line of text this component will display.")
public void setText(String text) {
String oldAccessibleName = null;
@@ -375,12 +363,9 @@
* @see #setVerticalTextPosition
* @see #setHorizontalTextPosition
* @see #getIcon
- * @beaninfo
- * preferred: true
- * bound: true
- * attribute: visualUpdate true
- * description: The icon this component will display.
*/
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "The icon this component will display.")
public void setIcon(Icon icon) {
Icon oldValue = defaultIcon;
defaultIcon = icon;
@@ -452,11 +437,9 @@
* @param disabledIcon the Icon to display when the component is disabled
* @see #getDisabledIcon
* @see #setEnabled
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The icon to display if the label is disabled.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The icon to display if the label is disabled.")
public void setDisabledIcon(Icon disabledIcon) {
Icon oldValue = this.disabledIcon;
this.disabledIcon = disabledIcon;
@@ -485,11 +468,9 @@
* @param key a keycode that indicates a mnemonic key
* @see #getLabelFor
* @see #setLabelFor
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The mnemonic keycode.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The mnemonic keycode.")
public void setDisplayedMnemonic(int key) {
int oldKey = mnemonic;
mnemonic = key;
@@ -555,13 +536,9 @@
* @param index Index into the String to underline
* @exception IllegalArgumentException will be thrown if <code>index</code>
* is >= length of the text, or < -1
- *
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: the index into the String to draw the keyboard character
- * mnemonic at
*/
+ @BeanProperty(visualUpdate = true, description
+ = "the index into the String to draw the keyboard character mnemonic at")
public void setDisplayedMnemonicIndex(int index)
throws IllegalArgumentException {
int oldValue = mnemonicIndex;
@@ -665,12 +642,9 @@
*
* @param iconTextGap the space between the icon and text properties
* @see #getIconTextGap
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: If both the icon and text properties are set, this
- * property defines the space between them.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "If both the icon and text properties are set, this property defines the space between them.")
public void setIconTextGap(int iconTextGap) {
int oldValue = this.iconTextGap;
this.iconTextGap = iconTextGap;
@@ -713,14 +687,12 @@
*
* @see SwingConstants
* @see #getVerticalAlignment
- * @beaninfo
- * bound: true
- * enum: TOP SwingConstants.TOP
- * CENTER SwingConstants.CENTER
- * BOTTOM SwingConstants.BOTTOM
- * attribute: visualUpdate true
- * description: The alignment of the label's contents along the Y axis.
*/
+ @BeanProperty(visualUpdate = true, enumerationValues = {
+ "SwingConstants.TOP",
+ "SwingConstants.CENTER",
+ "SwingConstants.BOTTOM"},
+ description = "The alignment of the label's contents along the Y axis.")
public void setVerticalAlignment(int alignment) {
if (alignment == verticalAlignment) return;
int oldValue = verticalAlignment;
@@ -763,16 +735,14 @@
*
* @see SwingConstants
* @see #getHorizontalAlignment
- * @beaninfo
- * bound: true
- * enum: LEFT SwingConstants.LEFT
- * CENTER SwingConstants.CENTER
- * RIGHT SwingConstants.RIGHT
- * LEADING SwingConstants.LEADING
- * TRAILING SwingConstants.TRAILING
- * attribute: visualUpdate true
- * description: The alignment of the label's content along the X axis.
*/
+ @BeanProperty(visualUpdate = true, enumerationValues = {
+ "SwingConstants.LEFT",
+ "SwingConstants.CENTER",
+ "SwingConstants.RIGHT",
+ "SwingConstants.LEADING",
+ "SwingConstants.TRAILING"}, description
+ = "The alignment of the label's content along the X axis.")
public void setHorizontalAlignment(int alignment) {
if (alignment == horizontalAlignment) return;
int oldValue = horizontalAlignment;
@@ -818,15 +788,12 @@
*
* @see SwingConstants
* @see #getVerticalTextPosition
- * @beaninfo
- * bound: true
- * enum: TOP SwingConstants.TOP
- * CENTER SwingConstants.CENTER
- * BOTTOM SwingConstants.BOTTOM
- * expert: true
- * attribute: visualUpdate true
- * description: The vertical position of the text relative to it's image.
*/
+ @BeanProperty(expert = true, visualUpdate = true, enumerationValues = {
+ "SwingConstants.TOP",
+ "SwingConstants.CENTER",
+ "SwingConstants.BOTTOM"},
+ description = "The vertical position of the text relative to it's image.")
public void setVerticalTextPosition(int textPosition) {
if (textPosition == verticalTextPosition) return;
int old = verticalTextPosition;
@@ -870,18 +837,14 @@
* <code>TRAILING</code> (the default).
*
* @see SwingConstants
- * @beaninfo
- * expert: true
- * bound: true
- * enum: LEFT SwingConstants.LEFT
- * CENTER SwingConstants.CENTER
- * RIGHT SwingConstants.RIGHT
- * LEADING SwingConstants.LEADING
- * TRAILING SwingConstants.TRAILING
- * attribute: visualUpdate true
- * description: The horizontal position of the label's text,
- * relative to its image.
*/
+ @BeanProperty(expert = true, visualUpdate = true, enumerationValues = {
+ "SwingConstants.LEFT",
+ "SwingConstants.CENTER",
+ "SwingConstants.RIGHT",
+ "SwingConstants.LEADING",
+ "SwingConstants.TRAILING"}, description
+ = "The horizontal position of the label's text, relative to its image.")
public void setHorizontalTextPosition(int textPosition) {
int old = horizontalTextPosition;
this.horizontalTextPosition = checkHorizontalKey(textPosition,
@@ -1035,11 +998,9 @@
*
* @see #getDisplayedMnemonic
* @see #setDisplayedMnemonic
- *
- * @beaninfo
- * bound: true
- * description: The component this is labelling.
*/
+ @BeanProperty(description
+ = "The component this is labelling.")
public void setLabelFor(Component c) {
Component oldC = labelFor;
labelFor = c;
@@ -1057,10 +1018,9 @@
* Get the AccessibleContext of this object
*
* @return the AccessibleContext of this object
- * @beaninfo
- * expert: true
- * description: The AccessibleContext associated with this Label.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The AccessibleContext associated with this Label.")
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJLabel();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JLayeredPane.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JLayeredPane.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,9 @@
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
+
import sun.awt.SunToolkit;
import javax.accessibility.*;
@@ -155,6 +158,7 @@
* @author David Kloba
* @since 1.2
*/
+@JavaBean(defaultProperty = "accessibleContext")
@SuppressWarnings("serial")
public class JLayeredPane extends JComponent implements Accessible {
/// Watch the values in getObjectForLayer()
@@ -275,6 +279,7 @@
* @return false if components can overlap, else true
* @see JComponent#isOptimizedDrawingEnabled
*/
+ @BeanProperty(bound = false)
public boolean isOptimizedDrawingEnabled() {
return optimizedDrawingPossible;
}
@@ -738,6 +743,7 @@
* @return an AccessibleJLayeredPane that serves as the
* AccessibleContext of this JLayeredPane
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJLayeredPane();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JList.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JList.java Thu Oct 22 11:14:00 2015 -0700
@@ -22,7 +22,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import java.awt.*;
@@ -34,6 +33,8 @@
import java.util.Collections;
import java.util.List;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.Transient;
@@ -44,7 +45,6 @@
import javax.swing.text.Position;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
import java.io.Serializable;
@@ -52,7 +52,6 @@
import sun.swing.SwingUtilities2.Section;
import static sun.swing.SwingUtilities2.Section.*;
-
/**
* A component that displays a list of objects and allows the user to select
* one or more items. A separate model, {@code ListModel}, maintains the
@@ -271,13 +270,11 @@
*
* @param <E> the type of the elements of this list
*
- * @beaninfo
- * attribute: isContainer false
- * description: A component which allows for the selection of one or more objects from a list.
- *
* @author Hans Muller
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A component which allows for the selection of one or more objects from a list.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JList<E> extends JComponent implements Scrollable, Accessible
{
@@ -515,12 +512,9 @@
*
* @param ui the <code>ListUI</code> object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(ListUI ui) {
super.setUI(ui);
}
@@ -555,6 +549,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -640,11 +635,9 @@
* @see #setFixedCellWidth
* @see #setFixedCellHeight
* @see JComponent#addPropertyChangeListener
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The cell prototype value, used to compute cell width and height.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The cell prototype value, used to compute cell width and height.")
public void setPrototypeCellValue(E prototypeCellValue) {
E oldValue = this.prototypeCellValue;
this.prototypeCellValue = prototypeCellValue;
@@ -685,11 +678,9 @@
* @see #setPrototypeCellValue
* @see #setFixedCellWidth
* @see JComponent#addPropertyChangeListener
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Defines a fixed cell width when greater than zero.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Defines a fixed cell width when greater than zero.")
public void setFixedCellWidth(int width) {
int oldValue = fixedCellWidth;
fixedCellWidth = width;
@@ -721,11 +712,9 @@
* @see #setPrototypeCellValue
* @see #setFixedCellWidth
* @see JComponent#addPropertyChangeListener
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Defines a fixed cell height when greater than zero.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Defines a fixed cell height when greater than zero.")
public void setFixedCellHeight(int height) {
int oldValue = fixedCellHeight;
fixedCellHeight = height;
@@ -763,11 +752,9 @@
* @param cellRenderer the <code>ListCellRenderer</code>
* that paints list cells
* @see #getCellRenderer
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The component used to draw the cells.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The component used to draw the cells.")
public void setCellRenderer(ListCellRenderer<? super E> cellRenderer) {
ListCellRenderer<? super E> oldValue = this.cellRenderer;
this.cellRenderer = cellRenderer;
@@ -818,11 +805,9 @@
* @see #setBackground
* @see #setFont
* @see DefaultListCellRenderer
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The foreground color of selected cells.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The foreground color of selected cells.")
public void setSelectionForeground(Color selectionForeground) {
Color oldValue = this.selectionForeground;
this.selectionForeground = selectionForeground;
@@ -865,11 +850,9 @@
* @see #setBackground
* @see #setFont
* @see DefaultListCellRenderer
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The background color of selected cells.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The background color of selected cells.")
public void setSelectionBackground(Color selectionBackground) {
Color oldValue = this.selectionBackground;
this.selectionBackground = selectionBackground;
@@ -920,12 +903,9 @@
* @see #setLayoutOrientation
* @see JComponent#getVisibleRect
* @see JViewport
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The preferred number of rows to display without
- * requiring scrolling
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The preferred number of rows to display without requiring scrolling")
public void setVisibleRowCount(int visibleRowCount) {
int oldValue = this.visibleRowCount;
this.visibleRowCount = Math.max(0, visibleRowCount);
@@ -999,14 +979,12 @@
* @throws IllegalArgumentException if {@code layoutOrientation} isn't one of the
* allowable values
* @since 1.4
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Defines the way list cells are layed out.
- * enum: VERTICAL JList.VERTICAL
- * HORIZONTAL_WRAP JList.HORIZONTAL_WRAP
- * VERTICAL_WRAP JList.VERTICAL_WRAP
*/
+ @BeanProperty(visualUpdate = true, enumerationValues = {
+ "JList.VERTICAL",
+ "JList.HORIZONTAL_WRAP",
+ "JList.VERTICAL_WRAP"}, description
+ = "Defines the way list cells are layed out.")
public void setLayoutOrientation(int layoutOrientation) {
int oldValue = this.layoutOrientation;
switch (layoutOrientation) {
@@ -1034,6 +1012,7 @@
* @see #getLastVisibleIndex
* @see JComponent#getVisibleRect
*/
+ @BeanProperty(bound = false)
public int getFirstVisibleIndex() {
Rectangle r = getVisibleRect();
int first;
@@ -1064,6 +1043,7 @@
* @see #getFirstVisibleIndex
* @see JComponent#getVisibleRect
*/
+ @BeanProperty(bound = false)
public int getLastVisibleIndex() {
boolean leftToRight = this.getComponentOrientation().isLeftToRight();
Rectangle r = getVisibleRect();
@@ -1180,11 +1160,9 @@
* @see #setTransferHandler
* @see TransferHandler
* @since 1.4
- *
- * @beaninfo
- * description: determines whether automatic drag handling is enabled
- * bound: false
*/
+ @BeanProperty(bound = false, description
+ = "determines whether automatic drag handling is enabled")
public void setDragEnabled(boolean b) {
if (b && GraphicsEnvironment.isHeadless()) {
throw new HeadlessException();
@@ -1449,6 +1427,7 @@
* @see TransferHandler#canImport(TransferHandler.TransferSupport)
* @since 1.6
*/
+ @BeanProperty(bound = false)
public final DropLocation getDropLocation() {
return dropLocation;
}
@@ -1664,11 +1643,9 @@
* <code>null</code>
* @see #getModel
* @see #clearSelection
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The object that contains the data to be drawn by this JList.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The object that contains the data to be drawn by this JList.")
public void setModel(ListModel<E> model) {
if (model == null) {
throw new IllegalArgumentException("model must be non null");
@@ -1860,6 +1837,7 @@
* @see #addListSelectionListener
* @since 1.4
*/
+ @BeanProperty(bound = false)
public ListSelectionListener[] getListSelectionListeners() {
return listenerList.getListeners(ListSelectionListener.class);
}
@@ -1879,10 +1857,9 @@
* @exception IllegalArgumentException if <code>selectionModel</code>
* is <code>null</code>
* @see #getSelectionModel
- * @beaninfo
- * bound: true
- * description: The selection model, recording which cells are selected.
*/
+ @BeanProperty(description
+ = "The selection model, recording which cells are selected.")
public void setSelectionModel(ListSelectionModel selectionModel) {
if (selectionModel == null) {
throw new IllegalArgumentException("selectionModel must be non null");
@@ -1928,12 +1905,12 @@
* @see #getSelectionMode
* @throws IllegalArgumentException if the selection mode isn't
* one of those allowed
- * @beaninfo
- * description: The selection mode.
- * enum: SINGLE_SELECTION ListSelectionModel.SINGLE_SELECTION
- * SINGLE_INTERVAL_SELECTION ListSelectionModel.SINGLE_INTERVAL_SELECTION
- * MULTIPLE_INTERVAL_SELECTION ListSelectionModel.MULTIPLE_INTERVAL_SELECTION
*/
+ @BeanProperty(bound = false, enumerationValues = {
+ "ListSelectionModel.SINGLE_SELECTION",
+ "ListSelectionModel.SINGLE_INTERVAL_SELECTION",
+ "ListSelectionModel.MULTIPLE_INTERVAL_SELECTION"}, description
+ = "The selection mode.")
public void setSelectionMode(int selectionMode) {
getSelectionModel().setSelectionMode(selectionMode);
}
@@ -1958,6 +1935,7 @@
* @return the anchor selection index
* @see ListSelectionModel#getAnchorSelectionIndex
*/
+ @BeanProperty(bound = false)
public int getAnchorSelectionIndex() {
return getSelectionModel().getAnchorSelectionIndex();
}
@@ -1969,9 +1947,9 @@
*
* @return the lead selection index
* @see ListSelectionModel#getLeadSelectionIndex
- * @beaninfo
- * description: The lead selection index.
*/
+ @BeanProperty(bound = false, description
+ = "The lead selection index.")
public int getLeadSelectionIndex() {
return getSelectionModel().getLeadSelectionIndex();
}
@@ -1985,6 +1963,7 @@
* @return the smallest selected cell index, or {@code -1}
* @see ListSelectionModel#getMinSelectionIndex
*/
+ @BeanProperty(bound = false)
public int getMinSelectionIndex() {
return getSelectionModel().getMinSelectionIndex();
}
@@ -1998,6 +1977,7 @@
* @return the largest selected cell index
* @see ListSelectionModel#getMaxSelectionIndex
*/
+ @BeanProperty(bound = false)
public int getMaxSelectionIndex() {
return getSelectionModel().getMaxSelectionIndex();
}
@@ -2028,6 +2008,7 @@
* @see ListSelectionModel#isSelectionEmpty
* @see #clearSelection
*/
+ @BeanProperty(bound = false)
public boolean isSelectionEmpty() {
return getSelectionModel().isSelectionEmpty();
}
@@ -2202,9 +2183,9 @@
* @see ListSelectionModel#setSelectionInterval
* @see #isSelectedIndex
* @see #addListSelectionListener
- * @beaninfo
- * description: The index of the selected cell.
*/
+ @BeanProperty(bound = false, description
+ = "The index of the selected cell.")
public void setSelectedIndex(int index) {
if (index >= getModel().getSize()) {
return;
@@ -2252,6 +2233,7 @@
* @deprecated As of JDK 1.7, replaced by {@link #getSelectedValuesList()}
*/
@Deprecated
+ @BeanProperty(bound = false)
public Object[] getSelectedValues() {
ListSelectionModel sm = getSelectionModel();
ListModel<E> dm = getModel();
@@ -2286,6 +2268,7 @@
*
* @since 1.7
*/
+ @BeanProperty(bound = false)
public List<E> getSelectedValuesList() {
ListSelectionModel sm = getSelectionModel();
ListModel<E> dm = getModel();
@@ -2338,6 +2321,7 @@
* @see #getModel
* @see #addListSelectionListener
*/
+ @BeanProperty(bound = false)
public E getSelectedValue() {
int i = getMinSelectionIndex();
return (i == -1) ? null : getModel().getElementAt(i);
@@ -2427,6 +2411,7 @@
* @see #getPreferredScrollableViewportSize
* @see #setPrototypeCellValue
*/
+ @BeanProperty(bound = false)
public Dimension getPreferredScrollableViewportSize()
{
if (getLayoutOrientation() != VERTICAL) {
@@ -2764,6 +2749,7 @@
* width to match its own
* @see Scrollable#getScrollableTracksViewportWidth
*/
+ @BeanProperty(bound = false)
public boolean getScrollableTracksViewportWidth() {
if (getLayoutOrientation() == HORIZONTAL_WRAP &&
getVisibleRowCount() <= 0) {
@@ -2790,6 +2776,7 @@
* height to match its own
* @see Scrollable#getScrollableTracksViewportHeight
*/
+ @BeanProperty(bound = false)
public boolean getScrollableTracksViewportHeight() {
if (getLayoutOrientation() == VERTICAL_WRAP &&
getVisibleRowCount() <= 0) {
@@ -2861,6 +2848,7 @@
* @return an {@code AccessibleJList} that serves as the
* {@code AccessibleContext} of this {@code JList}
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJList();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JMenu.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JMenu.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,41 +22,34 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
-import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.ComponentOrientation;
import java.awt.Container;
import java.awt.Dimension;
-import java.awt.Frame;
-import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Insets;
import java.awt.Point;
-import java.awt.Polygon;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.*;
-import java.beans.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
+import java.beans.PropertyChangeListener;
import java.util.*;
import java.io.Serializable;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
import javax.swing.event.*;
import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
import javax.accessibility.*;
-import java.lang.ref.WeakReference;
-
/**
* An implementation of a menu -- a popup window containing
* <code>JMenuItem</code>s that
@@ -97,10 +90,6 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer true
- * description: A popup window containing menu items displayed in a menu bar.
- *
* @author Georges Saab
* @author David Karlton
* @author Arnaud Weber
@@ -110,6 +99,8 @@
* @see JPopupMenu
* @since 1.2
*/
+@JavaBean(description = "A popup window containing menu items displayed in a menu bar.")
+@SwingContainer
@SuppressWarnings("serial")
public class JMenu extends JMenuItem implements Accessible,MenuElement
{
@@ -232,6 +223,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -247,11 +239,6 @@
*
* @param newModel the <code>ButtonModel</code>
* @see #getModel
- * @beaninfo
- * description: The menu's model
- * bound: true
- * expert: true
- * hidden: true
*/
public void setModel(ButtonModel newModel) {
ButtonModel oldModel = getModel();
@@ -285,11 +272,9 @@
*
* @param b true to select (highlight) the menu; false to de-select
* the menu
- * @beaninfo
- * description: When the menu is selected, its popup child is shown.
- * expert: true
- * hidden: true
*/
+ @BeanProperty(expert = true, hidden = true, description
+ = "When the menu is selected, its popup child is shown.")
public void setSelected(boolean b) {
ButtonModel model = getModel();
boolean oldValue = model.isSelected();
@@ -323,11 +308,9 @@
*
* @param b a boolean value -- true to make the menu visible,
* false to hide it
- * @beaninfo
- * description: The popup menu's visibility
- * expert: true
- * hidden: true
*/
+ @BeanProperty(bound = false, expert = true, hidden = true, description
+ = "The popup menu's visibility")
public void setPopupMenuVisible(boolean b) {
if (DEBUG) {
System.out.println("in JMenu.setPopupMenuVisible " + b);
@@ -517,10 +500,9 @@
* @param d the number of milliseconds to delay
* @exception IllegalArgumentException if <code>d</code>
* is less than 0
- * @beaninfo
- * description: The delay between menu selection and making the popup menu visible
- * expert: true
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The delay between menu selection and making the popup menu visible")
public void setDelay(int d) {
if (d < 0)
throw new IllegalArgumentException("Delay must be a positive integer");
@@ -788,6 +770,7 @@
* @return an integer equal to the number of items on the menu
* @see #getMenuComponentCount
*/
+ @BeanProperty(bound = false)
public int getItemCount() {
return getMenuComponentCount();
}
@@ -799,6 +782,7 @@
* @return true if the menu can be torn off, else false
* @exception Error if invoked -- this method is not yet implemented
*/
+ @BeanProperty(bound = false)
public boolean isTearOff() {
throw new Error("boolean isTearOff() {} not yet implemented");
}
@@ -856,6 +840,7 @@
*
* @return an integer containing the number of components on the menu
*/
+ @BeanProperty(bound = false)
public int getMenuComponentCount() {
int componentCount = 0;
if (popupMenu != null)
@@ -886,6 +871,7 @@
* @return an array of <code>Component</code>s or an empty array
* if there is no popup menu
*/
+ @BeanProperty(bound = false)
public Component[] getMenuComponents() {
if (popupMenu != null)
return popupMenu.getComponents();
@@ -901,6 +887,7 @@
* false if the menu is activated from a menu item
* on another menu
*/
+ @BeanProperty(bound = false)
public boolean isTopLevelMenu() {
return getParent() instanceof JMenuBar;
@@ -985,6 +972,7 @@
*
* @return the {@code JPopupMenu} associated with this menu
*/
+ @BeanProperty(bound = false)
public JPopupMenu getPopupMenu() {
ensurePopupMenuCreated();
return popupMenu;
@@ -1016,6 +1004,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public MenuListener[] getMenuListeners() {
return listenerList.getListeners(MenuListener.class);
}
@@ -1208,6 +1197,7 @@
*
* @return an array of <code>MenuElement</code> objects
*/
+ @BeanProperty(bound = false)
public MenuElement[] getSubElements() {
if(popupMenu == null)
return new MenuElement[0];
@@ -1270,11 +1260,6 @@
* without navigating the menu hierarchy
* @exception Error if invoked -- this method is not defined for JMenu.
* Use <code>setMnemonic</code> instead
- *
- * @beaninfo
- * description: The keystroke combination which will invoke the JMenuItem's
- * actionlisteners without navigating the menu hierarchy
- * hidden: true
*/
public void setAccelerator(KeyStroke keyStroke) {
throw new Error("setAccelerator() is not defined for JMenu. Use setMnemonic() instead.");
@@ -1381,6 +1366,7 @@
* @return an AccessibleJMenu that serves as the
* AccessibleContext of this JMenu
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJMenu();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JMenuBar.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JMenuBar.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,27 +22,22 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import java.awt.Component;
-import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
-import java.awt.Point;
-import java.awt.Rectangle;
import java.awt.event.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.Transient;
import java.util.Vector;
-import java.util.Enumeration;
import java.io.Serializable;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
-import javax.swing.event.*;
-import javax.swing.border.Border;
import javax.swing.plaf.*;
import javax.accessibility.*;
@@ -78,9 +73,6 @@
* of <code>JMenuBar</code> is set to <code>false</code>. To resolve this,
* you should call the <code>JMenuBar.setFocusTraversalKeysEnabled(true)</code>
* method.
- * @beaninfo
- * attribute: isContainer true
- * description: A container for holding and displaying menus.
*
* @author Georges Saab
* @author David Karlton
@@ -90,6 +82,8 @@
* @see JMenuItem
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A container for holding and displaying menus.")
+@SwingContainer
@SuppressWarnings("serial")
public class JMenuBar extends JComponent implements Accessible,MenuElement
{
@@ -137,12 +131,9 @@
*
* @param ui the new MenuBarUI L&F object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(MenuBarUI ui) {
super.setUI(ui);
}
@@ -164,6 +155,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -184,10 +176,8 @@
*
* @param model the <code>SingleSelectionModel</code> to use
* @see SingleSelectionModel
- * @beaninfo
- * bound: true
- * description: The selection model, recording which child is selected.
*/
+ @BeanProperty(description = "The selection model, recording which child is selected.")
public void setSelectionModel(SingleSelectionModel model) {
SingleSelectionModel oldValue = selectionModel;
this.selectionModel = model;
@@ -227,6 +217,7 @@
*
* @return the number of items in the menu bar
*/
+ @BeanProperty(bound = false)
public int getMenuCount() {
return getComponentCount();
}
@@ -304,6 +295,7 @@
*
* @return true if a selection has been made, else false
*/
+ @BeanProperty(bound = false)
public boolean isSelected() {
return selectionModel.isSelected();
}
@@ -323,11 +315,9 @@
* @param b if true and border property is not <code>null</code>,
* the border is painted.
* @see #isBorderPainted
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Whether the border should be painted.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Whether the border should be painted.")
public void setBorderPainted(boolean b) {
boolean oldValue = paintBorder;
paintBorder = b;
@@ -359,11 +349,9 @@
*
* @param m an Insets object containing the margin values
* @see Insets
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The space between the menubar's border and its contents
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The space between the menubar's border and its contents")
public void setMargin(Insets m) {
Insets old = margin;
this.margin = m;
@@ -423,6 +411,7 @@
* other menu elements.
* @return an array of menu items in the menu bar.
*/
+ @BeanProperty(bound = false)
public MenuElement[] getSubElements() {
MenuElement result[];
Vector<MenuElement> tmp = new Vector<MenuElement>();
@@ -487,6 +476,7 @@
* @return an AccessibleJMenuBar that serves as the
* AccessibleContext of this JMenuBar
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJMenuBar();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JMenuItem.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JMenuItem.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,13 +24,11 @@
*/
package javax.swing;
-import java.util.EventListener;
import java.awt.*;
import java.awt.event.*;
-import java.awt.image.*;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.io.Serializable;
import java.io.ObjectOutputStream;
@@ -38,7 +36,6 @@
import java.io.IOException;
import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
import javax.swing.event.*;
import javax.accessibility.*;
@@ -76,10 +73,6 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: An item which can be selected in a menu.
- *
* @author Georges Saab
* @author David Karlton
* @see JPopupMenu
@@ -88,6 +81,8 @@
* @see JRadioButtonMenuItem
* @since 1.2
*/
+@JavaBean(defaultProperty = "UIClassID", description = "An item which can be selected in a menu.")
+@SwingContainer(false)
@SuppressWarnings("serial")
public class JMenuItem extends AbstractButton implements Accessible,MenuElement {
@@ -232,12 +227,9 @@
*
* @param ui the <code>JMenuItemUI</code> L&F object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the LookAndFeel.")
public void setUI(MenuItemUI ui) {
super.setUI(ui);
}
@@ -260,6 +252,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -272,10 +265,9 @@
* event will not fire and the menu item will be disarmed.
*
* @param b true to arm the menu item so it can be selected
- * @beaninfo
- * description: Mouse release will fire an action event
- * hidden: true
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "Mouse release will fire an action event")
public void setArmed(boolean b) {
ButtonModel model = getModel();
@@ -300,11 +292,9 @@
* Enables or disables the menu item.
*
* @param b true to enable the item
- * @beaninfo
- * description: Does the component react to user interaction
- * bound: true
- * preferred: true
*/
+ @BeanProperty(preferred = true, description
+ = "The enabled state of the component.")
public void setEnabled(boolean b) {
// Make sure we aren't armed!
if (!b && !UIManager.getBoolean("MenuItem.disabledAreNavigable")) {
@@ -344,13 +334,9 @@
*
* @param keyStroke the <code>KeyStroke</code> which will
* serve as an accelerator
- * @beaninfo
- * description: The keystroke combination which will invoke the
- * JMenuItem's actionlisteners without navigating the
- * menu hierarchy
- * bound: true
- * preferred: true
*/
+ @BeanProperty(preferred = true, description
+ = "The keystroke combination which will invoke the JMenuItem's actionlisteners without navigating the menu hierarchy")
public void setAccelerator(KeyStroke keyStroke) {
KeyStroke oldAccelerator = accelerator;
this.accelerator = keyStroke;
@@ -681,6 +667,7 @@
*
* @return an array of <code>MenuElement</code>s
*/
+ @BeanProperty(bound = false)
public MenuElement[] getSubElements() {
return new MenuElement[0];
}
@@ -722,6 +709,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public MenuDragMouseListener[] getMenuDragMouseListeners() {
return listenerList.getListeners(MenuDragMouseListener.class);
}
@@ -752,6 +740,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public MenuKeyListener[] getMenuKeyListeners() {
return listenerList.getListeners(MenuKeyListener.class);
}
@@ -808,6 +797,7 @@
* @return an <code>AccessibleJMenuItem</code> that serves as the
* <code>AccessibleContext</code> of this <code>JMenuItem</code>
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJMenuItem();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JOptionPane.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JOptionPane.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import java.awt.BorderLayout;
@@ -35,6 +34,8 @@
import java.awt.Point;
import java.awt.HeadlessException;
import java.awt.Window;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.awt.event.WindowListener;
@@ -301,14 +302,12 @@
*
* @see JInternalFrame
*
- * @beaninfo
- * attribute: isContainer true
- * description: A component which implements standard dialog box controls.
- *
* @author James Gosling
* @author Scott Violet
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A component which implements standard dialog box controls.")
+@SwingContainer
@SuppressWarnings("serial") // Same-version serialization only
public class JOptionPane extends JComponent implements Accessible
{
@@ -1828,11 +1827,9 @@
*
* @param ui the <code>OptionPaneUI</code> {@literal L&F} object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * description: The UI object that implements the optionpane's LookAndFeel
*/
+ @BeanProperty(hidden = true, description
+ = "The UI object that implements the optionpane's LookAndFeel")
public void setUI(OptionPaneUI ui) {
if (this.ui != ui) {
super.setUI(ui);
@@ -1869,6 +1866,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -1878,12 +1876,9 @@
* Sets the option pane's message-object.
* @param newMessage the <code>Object</code> to display
* @see #getMessage
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The optionpane's message object.
*/
+ @BeanProperty(preferred = true, description
+ = "The optionpane's message object.")
public void setMessage(Object newMessage) {
Object oldMessage = message;
@@ -1907,11 +1902,9 @@
* @param newIcon the <code>Icon</code> to display
*
* @see #getIcon
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The option pane's type icon.
*/
+ @BeanProperty(preferred = true, description
+ = "The option pane's type icon.")
public void setIcon(Icon newIcon) {
Object oldIcon = icon;
@@ -1934,11 +1927,9 @@
* @param newValue the chosen value
*
* @see #getValue
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The option pane's value object.
*/
+ @BeanProperty(preferred = true, description
+ = "The option pane's value object.")
public void setValue(Object newValue) {
Object oldValue = value;
@@ -1975,10 +1966,9 @@
* <code>Components</code> to add to the pane
*
* @see #getOptions
- * @beaninfo
- * bound: true
- * description: The option pane's options objects.
*/
+ @BeanProperty(description
+ = "The option pane's options objects.")
public void setOptions(Object[] newOptions) {
Object[] oldOptions = options;
@@ -2012,11 +2002,9 @@
* keyboard focus
*
* @see #getInitialValue
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The option pane's initial value object.
*/
+ @BeanProperty(preferred = true, description
+ = "The option pane's initial value object.")
public void setInitialValue(Object newInitialValue) {
Object oldIV = initialValue;
@@ -2048,11 +2036,9 @@
* legal values listed above
* @see #getMessageType
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The option pane's message type.
*/
+ @BeanProperty(preferred = true, description
+ = "The option pane's message type.")
public void setMessageType(int newType) {
checkMessageType(newType);
int oldType = messageType;
@@ -2097,11 +2083,9 @@
*
* @see #getOptionType
* @see #setOptions
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The option pane's option type.
*/
+ @BeanProperty(preferred = true, description
+ = "The option pane's option type.")
public void setOptionType(int newType) {
checkOptionType(newType);
int oldType = optionType;
@@ -2149,10 +2133,9 @@
* @see #setWantsInput
* @see #setInitialSelectionValue
* @see #getSelectionValues
- * @beaninfo
- * bound: true
- * description: The option pane's selection values.
*/
+ @BeanProperty(description
+ = "The option pane's selection values.")
public void setSelectionValues(Object[] newValues) {
Object[] oldValues = selectionValues;
@@ -2178,10 +2161,9 @@
* @param newValue the initially selected value
* @see #setSelectionValues
* @see #getInitialSelectionValue
- * @beaninfo
- * bound: true
- * description: The option pane's initial selection value object.
*/
+ @BeanProperty(description
+ = "The option pane's initial selection value object.")
public void setInitialSelectionValue(Object newValue) {
Object oldValue = initialSelectionValue;
@@ -2215,11 +2197,9 @@
* @see #setInitialSelectionValue
* @see #setWantsInput
* @see #getInputValue
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The option pane's input value object.
*/
+ @BeanProperty(preferred = true, description
+ = "The option pane's input value object.")
public void setInputValue(Object newValue) {
Object oldValue = inputValue;
@@ -2251,6 +2231,7 @@
*
* @return an integer giving the maximum number of characters on a line
*/
+ @BeanProperty(bound = false)
public int getMaxCharactersPerLineCount() {
return Integer.MAX_VALUE;
}
@@ -2271,11 +2252,9 @@
* is provided to allow the user to input a value.
* @see #setSelectionValues
* @see #setInputValue
- * @beaninfo
- * preferred: true
- * bound: true
- * description: Flag which allows the user to input a value.
*/
+ @BeanProperty(preferred = true, description
+ = "Flag which allows the user to input a value.")
public void setWantsInput(boolean newValue) {
boolean oldValue = wantsInput;
@@ -2525,10 +2504,9 @@
*
* @return an AccessibleJOptionPane that serves as the
* AccessibleContext of this AccessibleJOptionPane
- * @beaninfo
- * expert: true
- * description: The AccessibleContext associated with this option pane
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The AccessibleContext associated with this option pane")
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJOptionPane();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JPanel.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JPanel.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,13 +25,13 @@
package javax.swing;
import java.awt.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import javax.swing.plaf.*;
import javax.accessibility.*;
-import java.io.Serializable;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
@@ -56,13 +56,11 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * description: A generic lightweight container.
- *
* @author Arnaud Weber
* @author Steve Wilson
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A generic lightweight container.")
@SuppressWarnings("serial") // Same-version serialization only
public class JPanel extends JComponent implements Accessible
{
@@ -145,12 +143,9 @@
* @param ui the PanelUI L&F object
* @see UIDefaults#getUI
* @since 1.4
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(PanelUI ui) {
super.setUI(ui);
}
@@ -162,10 +157,9 @@
* @return "PanelUI"
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
- * @beaninfo
- * expert: true
- * description: A string that specifies the name of the L&F class.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "A string that specifies the name of the L&F class.")
public String getUIClassID() {
return uiClassID;
}
@@ -213,6 +207,7 @@
* @return an AccessibleJPanel that serves as the
* AccessibleContext of this JPanel
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJPanel();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JPasswordField.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JPasswordField.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,13 +25,12 @@
package javax.swing;
import javax.swing.text.*;
-import javax.swing.plaf.*;
import javax.accessibility.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
-import java.io.*;
import java.util.Arrays;
/**
@@ -68,13 +67,11 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: Allows the editing of a line of text but doesn't show the characters.
- *
* @author Timothy Prinzing
* @since 1.2
*/
+@JavaBean(description = "Allows the editing of a line of text but doesn't show the characters.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JPasswordField extends JTextField {
@@ -151,6 +148,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -191,10 +189,9 @@
* @param c the echo character to display
* @see #echoCharIsSet
* @see #getEchoChar
- * @beaninfo
- * description: character to display in place of the real characters
- * attribute: visualUpdate true
*/
+ @BeanProperty(bound = false, visualUpdate = true, description
+ = "character to display in place of the real characters")
public void setEchoChar(char c) {
echoChar = c;
echoCharSet = true;
@@ -292,6 +289,7 @@
*
* @return the text
*/
+ @BeanProperty(bound = false)
public char[] getPassword() {
Document doc = getDocument();
Segment txt = new Segment();
@@ -383,6 +381,7 @@
* <code>AccessibleContext</code> of this
* <code>JPasswordField</code>
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJPasswordField();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JPopupMenu.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JPopupMenu.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import java.awt.*;
@@ -31,21 +30,18 @@
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
-import java.beans.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
-import java.util.Locale;
import java.util.Vector;
-import java.util.Hashtable;
import javax.accessibility.*;
import javax.swing.plaf.PopupMenuUI;
-import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicComboPopup;
import javax.swing.event.*;
import sun.awt.SunToolkit;
-import sun.security.util.SecurityConstants;
-
-import java.applet.Applet;
/**
* An implementation of a popup menu -- a small window that pops up
@@ -75,15 +71,13 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: A small window that pops up and displays a series of choices.
- *
* @author Georges Saab
* @author David Karlton
* @author Arnaud Weber
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A small window that pops up and displays a series of choices.")
+@SwingContainer(false)
@SuppressWarnings("serial")
public class JPopupMenu extends JComponent implements Accessible,MenuElement {
@@ -210,12 +204,9 @@
*
* @param ui the new <code>PopupMenuUI</code> L&F object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(PopupMenuUI ui) {
super.setUI(ui);
}
@@ -237,6 +228,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -274,10 +266,9 @@
*
* @param model the new <code>SingleSelectionModel</code>
* @see SingleSelectionModel
- * @beaninfo
- * description: The selection model for the popup menu
- * expert: true
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The selection model for the popup menu")
public void setSelectionModel(SingleSelectionModel model) {
selectionModel = model;
}
@@ -495,12 +486,11 @@
* no matter what the value of this property.
*
* @param aFlag <code>false</code> to disable lightweight popups
- * @beaninfo
- * description: Determines whether lightweight popups are used when possible
- * expert: true
*
* @see #isLightWeightPopupEnabled
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "Determines whether lightweight popups are used when possible")
public void setLightWeightPopupEnabled(boolean aFlag) {
// NOTE: this use to set the flag on a shared JPopupMenu, which meant
// this effected ALL JPopupMenus.
@@ -534,10 +524,9 @@
* @param label a string specifying the label for the popup menu
*
* @see #setLabel
- * @beaninfo
- * description: The label for the popup menu.
- * bound: true
*/
+ @BeanProperty(description
+ = "The label for the popup menu.")
public void setLabel(String label) {
String oldValue = this.label;
this.label = label;
@@ -637,6 +626,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public PopupMenuListener[] getPopupMenuListeners() {
return listenerList.getListeners(PopupMenuListener.class);
}
@@ -669,6 +659,7 @@
* array if no listeners have been added
* @since 1.5
*/
+ @BeanProperty(bound = false)
public MenuKeyListener[] getMenuKeyListeners() {
return listenerList.getListeners(MenuKeyListener.class);
}
@@ -753,10 +744,9 @@
*
* @param b true to make the popup visible, or false to
* hide it
- * @beaninfo
- * bound: true
- * description: Makes the popup visible
*/
+ @BeanProperty(description
+ = "Makes the popup visible")
public void setVisible(boolean b) {
if (DEBUG) {
System.out.println("JPopupMenu.setVisible " + b);
@@ -868,9 +858,9 @@
* in the screen's coordinate space
* @param y the y coordinate of the popup's new position
* in the screen's coordinate space
- * @beaninfo
- * description: The location of the popup menu.
*/
+ @BeanProperty(description
+ = "The location of the popup menu.")
public void setLocation(int x, int y) {
int oldX = desiredLocationX;
int oldY = desiredLocationY;
@@ -908,10 +898,9 @@
*
* @param invoker the <code>Component</code> in which the popup
* menu is displayed
- * @beaninfo
- * description: The invoking component for the popup menu
- * expert: true
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The invoking component for the popup menu")
public void setInvoker(Component invoker) {
Component oldInvoker = this.invoker;
this.invoker = invoker;
@@ -1024,9 +1013,9 @@
*
* @param d the <code>Dimension</code> specifying the new size
* of this component.
- * @beaninfo
- * description: The size of the popup menu
*/
+ @BeanProperty(description
+ = "The size of the popup menu")
public void setPopupSize(Dimension d) {
Dimension oldSize = getPreferredSize();
@@ -1047,9 +1036,9 @@
*
* @param width the new width of the Popup in pixels
* @param height the new height of the Popup in pixels
- * @beaninfo
- * description: The size of the popup menu
*/
+ @BeanProperty(description
+ = "The size of the popup menu")
public void setPopupSize(int width, int height) {
setPopupSize(new Dimension(width, height));
}
@@ -1059,11 +1048,9 @@
* in a change to the selection model.
*
* @param sel the <code>Component</code> to select
- * @beaninfo
- * description: The selected component on the popup menu
- * expert: true
- * hidden: true
*/
+ @BeanProperty(expert = true, hidden = true, description
+ = "The selected component on the popup menu")
public void setSelected(Component sel) {
SingleSelectionModel model = getSelectionModel();
int index = getComponentIndex(sel);
@@ -1085,9 +1072,9 @@
*
* @param b if true, the border is painted.
* @see #isBorderPainted
- * @beaninfo
- * description: Is the border of the popup menu painted
*/
+ @BeanProperty(bound = false, description
+ = "Is the border of the popup menu painted")
public void setBorderPainted(boolean b) {
paintBorder = b;
repaint();
@@ -1113,6 +1100,7 @@
*
* @return an <code>Insets</code> object containing the margin values.
*/
+ @BeanProperty(bound = false)
public Insets getMargin() {
if(margin == null) {
return new Insets(0,0,0,0);
@@ -1198,6 +1186,7 @@
* @return an AccessibleJPopupMenu that serves as the
* AccessibleContext of this JPopupMenu
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJPopupMenu();
@@ -1512,6 +1501,7 @@
* @return an array of <code>MenuElement</code> objects
* @see MenuElement#getSubElements
*/
+ @BeanProperty(bound = false)
public MenuElement[] getSubElements() {
MenuElement result[];
Vector<MenuElement> tmp = new Vector<MenuElement>();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JProgressBar.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JProgressBar.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,25 +22,23 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
-import java.awt.Color;
import java.awt.Graphics;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.text.Format;
import java.text.NumberFormat;
import java.io.Serializable;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
import javax.swing.event.*;
import javax.accessibility.*;
import javax.swing.plaf.ProgressBarUI;
-
/**
* A component that visually displays the progress of some task. As the task
* progresses towards completion, the progress bar displays the
@@ -122,14 +120,12 @@
* @see javax.swing.BoundedRangeModel
* @see javax.swing.SwingWorker
*
- * @beaninfo
- * attribute: isContainer false
- * description: A component that displays an integer value.
- *
* @author Michael C. Albers
* @author Kathy Walrath
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A component that displays an integer value.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JProgressBar extends JComponent implements SwingConstants, Accessible
{
@@ -394,13 +390,9 @@
* @exception IllegalArgumentException if <code>newOrientation</code>
* is an illegal value
* @see #getOrientation
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * attribute: visualUpdate true
- * description: Set the progress bar's orientation.
*/
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "Set the progress bar's orientation.")
public void setOrientation(int newOrientation) {
if (orientation != newOrientation) {
switch (newOrientation) {
@@ -453,11 +445,9 @@
* @param b <code>true</code> if the progress bar should render a string
* @see #isStringPainted
* @see #setString
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Whether the progress bar should render a string.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Whether the progress bar should render a string.")
public void setStringPainted(boolean b) {
//PENDING: specify that string not painted when in indeterminate mode?
// or just leave that to the L&F?
@@ -506,11 +496,9 @@
* @see #getString
* @see #setStringPainted
* @see #isStringPainted
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Specifies the progress string to paint
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Specifies the progress string to paint")
public void setString(String s){
String oldValue = progressString;
progressString = s;
@@ -526,6 +514,7 @@
*
* @return the percent complete for this progress bar
*/
+ @BeanProperty(bound = false)
public double getPercentComplete() {
long span = model.getMaximum() - model.getMinimum();
double currentValue = model.getValue();
@@ -538,8 +527,6 @@
*
* @return the value of the <code>borderPainted</code> property
* @see #setBorderPainted
- * @beaninfo
- * description: Does the progress bar paint its border
*/
public boolean isBorderPainted() {
return paintBorder;
@@ -556,11 +543,9 @@
* should paint its border;
* otherwise, <code>false</code>
* @see #isBorderPainted
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Whether the progress bar should paint its border.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Whether the progress bar should paint its border.")
public void setBorderPainted(boolean b) {
boolean oldValue = paintBorder;
paintBorder = b;
@@ -601,12 +586,9 @@
*
* @param ui a <code>ProgressBarUI</code> object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(ProgressBarUI ui) {
super.setUI(ui);
}
@@ -628,10 +610,9 @@
* @return the string "ProgressBarUI"
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
- * @beaninfo
- * expert: true
- * description: A string that specifies the name of the look-and-feel class.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "A string that specifies the name of the look-and-feel class.")
public String getUIClassID() {
return uiClassID;
}
@@ -702,6 +683,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public ChangeListener[] getChangeListeners() {
return listenerList.getListeners(ChangeListener.class);
}
@@ -752,11 +734,9 @@
* and is set to {@code 0}.
*
* @param newModel the <code>BoundedRangeModel</code> to use
- *
- * @beaninfo
- * expert: true
- * description: The data model used by the JProgressBar.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The data model used by the JProgressBar.")
public void setModel(BoundedRangeModel newModel) {
// PENDING(???) setting the same model to multiple bars is broken; listeners
BoundedRangeModel oldModel = getModel();
@@ -841,10 +821,9 @@
* @see #getValue
* @see #addChangeListener
* @see BoundedRangeModel#setValue
- * @beaninfo
- * preferred: true
- * description: The progress bar's current value.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "The progress bar's current value.")
public void setValue(int n) {
BoundedRangeModel brm = getModel();
int oldValue = brm.getValue();
@@ -874,10 +853,9 @@
* @see #getMinimum
* @see #addChangeListener
* @see BoundedRangeModel#setMinimum
- * @beaninfo
- * preferred: true
- * description: The progress bar's minimum value.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "The progress bar's minimum value.")
public void setMinimum(int n) { getModel().setMinimum(n); }
/**
@@ -895,10 +873,9 @@
* @see #getMaximum
* @see #addChangeListener
* @see BoundedRangeModel#setMaximum
- * @beaninfo
- * preferred: true
- * description: The progress bar's maximum value.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "The progress bar's maximum value.")
public void setMaximum(int n) { getModel().setMaximum(n); }
/**
@@ -925,12 +902,6 @@
* @see javax.swing.plaf.basic.BasicProgressBarUI
*
* @since 1.4
- *
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Set whether the progress bar is indeterminate (true)
- * or normal (false).
*/
public void setIndeterminate(boolean newValue) {
boolean oldValue = indeterminate;
@@ -945,11 +916,9 @@
* @see #setIndeterminate
*
* @since 1.4
- *
- * @beaninfo
- * description: Is the progress bar indeterminate (true)
- * or normal (false)?
*/
+ @BeanProperty(bound = false, description
+ = "Is the progress bar indeterminate (true) or normal (false)?")
public boolean isIndeterminate() {
return indeterminate;
}
@@ -1013,10 +982,9 @@
*
* @return an <code>AccessibleJProgressBar</code> that serves as the
* <code>AccessibleContext</code> of this <code>JProgressBar</code>
- * @beaninfo
- * expert: true
- * description: The AccessibleContext associated with this ProgressBar.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The AccessibleContext associated with this ProgressBar.")
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJProgressBar();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JRadioButton.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JRadioButton.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,18 +24,15 @@
*/
package javax.swing;
-import java.awt.*;
-import java.awt.event.*;
-import java.beans.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import javax.swing.plaf.*;
import javax.accessibility.*;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
-
/**
* An implementation of a radio button -- an item that can be selected or
* deselected, and which displays its state to the user.
@@ -78,15 +75,13 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: A component which can display it's state as selected or deselected.
- *
* @see ButtonGroup
* @see JCheckBox
* @author Jeff Dinkins
* @since 1.2
*/
+@JavaBean(description = "A component which can display it's state as selected or deselected.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JRadioButton extends JToggleButton implements Accessible {
@@ -204,10 +199,9 @@
* @return String "RadioButtonUI"
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
- * @beaninfo
- * expert: true
- * description: A string that specifies the name of the L&F class.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "A string that specifies the name of the L&F class.")
public String getUIClassID() {
return uiClassID;
}
@@ -263,10 +257,9 @@
*
* @return an AccessibleJRadioButton that serves as the
* AccessibleContext of this JRadioButton
- * @beaninfo
- * expert: true
- * description: The AccessibleContext associated with this Button
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The AccessibleContext associated with this Button")
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJRadioButton();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JRadioButtonMenuItem.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JRadioButtonMenuItem.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,17 +24,11 @@
*/
package javax.swing;
-import java.util.EventListener;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.awt.image.*;
-
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
-import javax.swing.plaf.*;
import javax.accessibility.*;
/**
@@ -75,15 +69,13 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: A component within a group of menu items which can be selected.
- *
* @author Georges Saab
* @author David Karlton
* @see ButtonGroup
* @since 1.2
*/
+@JavaBean(description = "A component within a group of menu items which can be selected.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JRadioButtonMenuItem extends JMenuItem implements Accessible {
/**
@@ -191,6 +183,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -248,6 +241,7 @@
* @return an AccessibleJRadioButtonMenuItem that serves as the
* AccessibleContext of this JRadioButtonMenuItem
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJRadioButtonMenuItem();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JRootPane.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JRootPane.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -34,6 +34,7 @@
import java.util.Vector;
import java.io.Serializable;
import javax.swing.border.*;
+
import sun.awt.AWTAccessor;
import sun.security.action.GetBooleanAction;
@@ -421,21 +422,18 @@
* <code>FILE_CHOOSER_DIALOG</code>, <code>QUESTION_DIALOG</code>, or
* <code>WARNING_DIALOG</code>.
* @since 1.4
- * @beaninfo
- * bound: true
- * enum: NONE JRootPane.NONE
- * FRAME JRootPane.FRAME
- * PLAIN_DIALOG JRootPane.PLAIN_DIALOG
- * INFORMATION_DIALOG JRootPane.INFORMATION_DIALOG
- * ERROR_DIALOG JRootPane.ERROR_DIALOG
- * COLOR_CHOOSER_DIALOG JRootPane.COLOR_CHOOSER_DIALOG
- * FILE_CHOOSER_DIALOG JRootPane.FILE_CHOOSER_DIALOG
- * QUESTION_DIALOG JRootPane.QUESTION_DIALOG
- * WARNING_DIALOG JRootPane.WARNING_DIALOG
- * expert: true
- * attribute: visualUpdate true
- * description: Identifies the type of Window decorations to provide
*/
+ @BeanProperty(expert = true, visualUpdate = true, enumerationValues = {
+ "JRootPane.NONE",
+ "JRootPane.FRAME",
+ "JRootPane.PLAIN_DIALOG",
+ "JRootPane.INFORMATION_DIALOG",
+ "JRootPane.ERROR_DIALOG",
+ "JRootPane.COLOR_CHOOSER_DIALOG",
+ "JRootPane.FILE_CHOOSER_DIALOG",
+ "JRootPane.QUESTION_DIALOG",
+ "JRootPane.WARNING_DIALOG"}, description
+ = "Identifies the type of Window decorations to provide")
public void setWindowDecorationStyle(int windowDecorationStyle) {
if (windowDecorationStyle < 0 ||
windowDecorationStyle > WARNING_DIALOG) {
@@ -463,14 +461,10 @@
*
* @param ui the <code>LabelUI</code> L&F object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * expert: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
* @since 1.3
*/
+ @BeanProperty(expert = true, hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(RootPaneUI ui) {
super.setUI(ui);
}
@@ -783,10 +777,9 @@
*
* @see JButton#isDefaultButton
* @param defaultButton the <code>JButton</code> which is to be the default button
- *
- * @beaninfo
- * description: The button activated by default in this root pane
*/
+ @BeanProperty(description
+ = "The button activated by default in this root pane")
public void setDefaultButton(JButton defaultButton) {
JButton oldDefault = this.defaultButton;
--- a/jdk/src/java.desktop/share/classes/javax/swing/JScrollBar.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JScrollBar.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import java.io.Serializable;
@@ -31,18 +30,16 @@
import java.awt.Dimension;
import java.awt.event.AdjustmentListener;
import java.awt.event.AdjustmentEvent;
-import java.awt.Graphics;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import javax.swing.event.*;
import javax.swing.plaf.*;
import javax.accessibility.*;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
-
-
/**
* An implementation of a scrollbar. The user positions the knob in the
* scrollbar to determine the contents of the viewing area. The
@@ -72,13 +69,12 @@
* Please see {@link java.beans.XMLEncoder}.
*
* @see JScrollPane
- * @beaninfo
- * attribute: isContainer false
- * description: A component that helps determine the visible content range of an area.
*
* @author David Kloba
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A component that helps determine the visible content range of an area.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JScrollBar extends JComponent implements Adjustable, Accessible
{
@@ -207,12 +203,9 @@
* @param ui the <code>ScrollBarUI</code> {@literal L&F} object
* @see UIDefaults#getUI
* @since 1.4
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel")
public void setUI(ScrollBarUI ui) {
super.setUI(ui);
}
@@ -246,6 +239,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -271,14 +265,11 @@
* @param orientation an orientation of the {@code JScrollBar}
* @exception IllegalArgumentException if orientation is not one of VERTICAL, HORIZONTAL
* @see #getOrientation
- * @beaninfo
- * preferred: true
- * bound: true
- * attribute: visualUpdate true
- * description: The scrollbar's orientation.
- * enum: VERTICAL JScrollBar.VERTICAL
- * HORIZONTAL JScrollBar.HORIZONTAL
*/
+ @BeanProperty(preferred = true, visualUpdate = true, enumerationValues = {
+ "JScrollBar.VERTICAL",
+ "JScrollBar.HORIZONTAL"}, description
+ = "The scrollbar's orientation.")
public void setOrientation(int orientation)
{
checkOrientation(orientation);
@@ -319,11 +310,9 @@
*
* @param newModel a new model
* @see #getModel
- * @beaninfo
- * bound: true
- * expert: true
- * description: The scrollbar's BoundedRangeModel.
*/
+ @BeanProperty(expert = true, description
+ = "The scrollbar's BoundedRangeModel.")
public void setModel(BoundedRangeModel newModel) {
Integer oldValue = null;
BoundedRangeModel oldModel = model;
@@ -384,11 +373,9 @@
* and ignore this property.
*
* @see #getUnitIncrement
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The scrollbar's unit increment.
*/
+ @BeanProperty(preferred = true, description
+ = "The scrollbar's unit increment.")
public void setUnitIncrement(int unitIncrement) {
int oldValue = this.unitIncrement;
this.unitIncrement = unitIncrement;
@@ -434,11 +421,9 @@
* and ignore this property.
*
* @see #getBlockIncrement()
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The scrollbar's block increment.
*/
+ @BeanProperty(preferred = true, description
+ = "The scrollbar's block increment.")
public void setBlockIncrement(int blockIncrement) {
int oldValue = this.blockIncrement;
this.blockIncrement = blockIncrement;
@@ -482,10 +467,9 @@
*
* @see #getValue
* @see BoundedRangeModel#setValue
- * @beaninfo
- * preferred: true
- * description: The scrollbar's current value.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "The scrollbar's current value.")
public void setValue(int value) {
BoundedRangeModel m = getModel();
int oldValue = m.getValue();
@@ -518,10 +502,9 @@
*
* @see #getVisibleAmount
* @see BoundedRangeModel#setExtent
- * @beaninfo
- * preferred: true
- * description: The amount of the view that is currently visible.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "The amount of the view that is currently visible.")
public void setVisibleAmount(int extent) {
getModel().setExtent(extent);
}
@@ -544,10 +527,9 @@
*
* @see #getMinimum
* @see BoundedRangeModel#setMinimum
- * @beaninfo
- * preferred: true
- * description: The scrollbar's minimum value.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "The scrollbar's minimum value.")
public void setMinimum(int minimum) {
getModel().setMinimum(minimum);
}
@@ -570,10 +552,9 @@
*
* @see #getMaximum
* @see BoundedRangeModel#setMaximum
- * @beaninfo
- * preferred: true
- * description: The scrollbar's maximum value.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "The scrollbar's maximum value.")
public void setMaximum(int maximum) {
getModel().setMaximum(maximum);
}
@@ -601,10 +582,9 @@
*
* @see #getValueIsAdjusting
* @see BoundedRangeModel#setValueIsAdjusting
- * @beaninfo
- * expert: true
- * description: True if the scrollbar thumb is being dragged.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "True if the scrollbar thumb is being dragged.")
public void setValueIsAdjusting(boolean b) {
BoundedRangeModel m = getModel();
boolean oldValue = m.getValueIsAdjusting();
@@ -693,6 +673,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public AdjustmentListener[] getAdjustmentListeners() {
return listenerList.getListeners(AdjustmentListener.class);
}
@@ -845,6 +826,7 @@
* @return an AccessibleJScrollBar that serves as the
* AccessibleContext of this JScrollBar
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJScrollBar();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JScrollPane.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JScrollPane.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import javax.swing.plaf.*;
@@ -40,6 +39,8 @@
import java.io.ObjectOutputStream;
import java.io.IOException;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.Transient;
@@ -161,14 +162,11 @@
* @see #setCorner
* @see #setViewportBorder
*
- * @beaninfo
- * attribute: isContainer true
- * attribute: containerDelegate getViewport
- * description: A specialized container that manages a viewport, optional scrollbars and headers
- *
* @author Hans Muller
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A specialized container that manages a viewport, optional scrollbars and headers")
+@SwingContainer(delegate = "getViewport")
@SuppressWarnings("serial") // Same-version serialization only
public class JScrollPane extends JComponent implements ScrollPaneConstants, Accessible
{
@@ -360,12 +358,9 @@
* @return the <code>ScrollPaneUI</code> object that renders this
* component
* @see #setUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public ScrollPaneUI getUI() {
return (ScrollPaneUI)ui;
}
@@ -403,10 +398,8 @@
* @return the string "ScrollPaneUI"
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
- *
- * @beaninfo
- * hidden: true
*/
+ @BeanProperty(bound = false, hidden = true)
public String getUIClassID() {
return uiClassID;
}
@@ -427,9 +420,6 @@
* <code>ScrollPaneLayout</code>
* @see java.awt.Container#getLayout
* @see java.awt.Container#setLayout
- *
- * @beaninfo
- * hidden: true
*/
public void setLayout(LayoutManager layout) {
if (layout instanceof ScrollPaneLayout) {
@@ -456,11 +446,9 @@
* @see JComponent#revalidate
* @see JComponent#isValidateRoot
* @see java.awt.Container#isValidateRoot
- *
- * @beaninfo
- * hidden: true
*/
@Override
+ @BeanProperty(hidden = true)
public boolean isValidateRoot() {
return true;
}
@@ -489,15 +477,12 @@
* @exception IllegalArgumentException if <code>policy</code>
* is not one of the legal values shown above
* @see #getVerticalScrollBarPolicy
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The scrollpane vertical scrollbar policy
- * enum: VERTICAL_SCROLLBAR_AS_NEEDED ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED
- * VERTICAL_SCROLLBAR_NEVER ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER
- * VERTICAL_SCROLLBAR_ALWAYS ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS
*/
+ @BeanProperty(preferred = true, enumerationValues = {
+ "ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED",
+ "ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER",
+ "ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS"}, description
+ = "The scrollpane vertical scrollbar policy")
public void setVerticalScrollBarPolicy(int policy) {
switch (policy) {
case VERTICAL_SCROLLBAR_AS_NEEDED:
@@ -537,15 +522,12 @@
* @exception IllegalArgumentException if <code>policy</code>
* is not one of the legal values shown above
* @see #getHorizontalScrollBarPolicy
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The scrollpane scrollbar policy
- * enum: HORIZONTAL_SCROLLBAR_AS_NEEDED ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED
- * HORIZONTAL_SCROLLBAR_NEVER ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER
- * HORIZONTAL_SCROLLBAR_ALWAYS ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS
*/
+ @BeanProperty(preferred = true, enumerationValues = {
+ "ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED",
+ "ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER",
+ "ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS"}, description
+ = "The scrollpane scrollbar policy")
public void setHorizontalScrollBarPolicy(int policy) {
switch (policy) {
case HORIZONTAL_SCROLLBAR_AS_NEEDED:
@@ -587,12 +569,9 @@
* @param viewportBorder the border to be added
* @see #getViewportBorder
* @see #setViewport
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * description: The border around the viewport.
*/
+ @BeanProperty(preferred = true, description
+ = "The border around the viewport.")
public void setViewportBorder(Border viewportBorder) {
Border oldValue = this.viewportBorder;
this.viewportBorder = viewportBorder;
@@ -605,6 +584,7 @@
*
* @return a <code>Rectangle</code> object specifying the viewport border
*/
+ @BeanProperty(bound = false)
public Rectangle getViewportBorderBounds()
{
Rectangle borderR = new Rectangle(getSize());
@@ -840,12 +820,9 @@
* @param horizontalScrollBar the horizontal scrollbar to be added
* @see #createHorizontalScrollBar
* @see #getHorizontalScrollBar
- *
- * @beaninfo
- * expert: true
- * bound: true
- * description: The horizontal scrollbar.
*/
+ @BeanProperty(expert = true, description
+ = "The horizontal scrollbar.")
public void setHorizontalScrollBar(JScrollBar horizontalScrollBar) {
JScrollBar old = getHorizontalScrollBar();
this.horizontalScrollBar = horizontalScrollBar;
@@ -899,12 +876,9 @@
* @param verticalScrollBar the new vertical scrollbar to be added
* @see #createVerticalScrollBar
* @see #getVerticalScrollBar
- *
- * @beaninfo
- * expert: true
- * bound: true
- * description: The vertical scrollbar.
*/
+ @BeanProperty(expert = true, description
+ = "The vertical scrollbar.")
public void setVerticalScrollBar(JScrollBar verticalScrollBar) {
JScrollBar old = getVerticalScrollBar();
this.verticalScrollBar = verticalScrollBar;
@@ -959,14 +933,9 @@
* @see #createViewport
* @see #getViewport
* @see #setViewportView
- *
- * @beaninfo
- * expert: true
- * bound: true
- * attribute: visualUpdate true
- * description: The viewport child for this scrollpane
- *
*/
+ @BeanProperty(expert = true, visualUpdate = true, description
+ = "The viewport child for this scrollpane")
public void setViewport(JViewport viewport) {
JViewport old = getViewport();
this.viewport = viewport;
@@ -1038,12 +1007,9 @@
* is set to <code>null</code>
* @see #getRowHeader
* @see #setRowHeaderView
- *
- * @beaninfo
- * bound: true
- * expert: true
- * description: The row header child for this scrollpane
*/
+ @BeanProperty(expert = true, description
+ = "The row header child for this scrollpane")
public void setRowHeader(JViewport rowHeader) {
JViewport old = getRowHeader();
this.rowHeader = rowHeader;
@@ -1105,12 +1071,9 @@
* @param columnHeader a {@code JViewport} which is the new column header
* @see #getColumnHeader
* @see #setColumnHeaderView
- *
- * @beaninfo
- * bound: true
- * description: The column header child for this scrollpane
- * attribute: visualUpdate true
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The column header child for this scrollpane")
public void setColumnHeader(JViewport columnHeader) {
JViewport old = getColumnHeader();
this.columnHeader = columnHeader;
@@ -1303,10 +1266,9 @@
* @return true if mouse wheel scrolling is enabled, false otherwise
* @see #setWheelScrollingEnabled
* @since 1.4
- * @beaninfo
- * bound: true
- * description: Flag for enabling/disabling mouse wheel scrolling
*/
+ @BeanProperty(description
+ = "Flag for enabling/disabling mouse wheel scrolling")
public boolean isWheelScrollingEnabled() {return wheelScrollState;}
/**
@@ -1320,10 +1282,9 @@
* @see java.awt.event.MouseWheelEvent
* @see java.awt.event.MouseWheelListener
* @since 1.4
- * @beaninfo
- * bound: true
- * description: Flag for enabling/disabling mouse wheel scrolling
*/
+ @BeanProperty(description
+ = "Flag for enabling/disabling mouse wheel scrolling")
public void setWheelScrollingEnabled(boolean handleWheel) {
boolean old = wheelScrollState;
wheelScrollState = handleWheel;
@@ -1424,6 +1385,7 @@
* @return an AccessibleJScrollPane that serves as the
* AccessibleContext of this JScrollPane
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJScrollPane();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JSeparator.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JSeparator.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,17 +22,16 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import javax.swing.plaf.*;
import javax.accessibility.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
-
/**
* <code>JSeparator</code> provides a general purpose component for
* implementing divider lines - most commonly used as a divider
@@ -64,14 +63,12 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: A divider between menu items.
- *
* @author Georges Saab
* @author Jeff Shapiro
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A divider between menu items.")
+@SwingContainer(false)
@SuppressWarnings("serial")
public class JSeparator extends JComponent implements SwingConstants, Accessible
{
@@ -122,12 +119,9 @@
*
* @param ui the SeparatorUI L&F object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(SeparatorUI ui) {
super.setUI(ui);
}
@@ -149,6 +143,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -196,14 +191,11 @@
*
* @see SwingConstants
* @see #getOrientation
- * @beaninfo
- * bound: true
- * preferred: true
- * enum: HORIZONTAL SwingConstants.HORIZONTAL
- * VERTICAL SwingConstants.VERTICAL
- * attribute: visualUpdate true
- * description: The orientation of the separator.
*/
+ @BeanProperty(preferred = true, visualUpdate = true, enumerationValues = {
+ "SwingConstants.HORIZONTAL",
+ "SwingConstants.VERTICAL"}, description
+ = "The orientation of the separator.")
public void setOrientation( int orientation ) {
if (this.orientation == orientation) {
return;
@@ -260,6 +252,7 @@
* @return an AccessibleJSeparator that serves as the
* AccessibleContext of this JSeparator
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJSeparator();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JSlider.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JSlider.java Thu Oct 22 11:14:00 2015 -0700
@@ -22,7 +22,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import javax.swing.event.*;
@@ -35,8 +34,10 @@
import java.awt.*;
import java.util.*;
-import java.beans.*;
-
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
/**
* A component that lets the user graphically select a value by sliding
@@ -72,13 +73,11 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: A component that supports selecting a integer value from a range.
- *
* @author David Kloba
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A component that supports selecting a integer value from a range.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JSlider extends JComponent implements SwingConstants, Accessible {
/**
@@ -310,12 +309,9 @@
*
* @param ui the SliderUI L&F object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the slider's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the slider's LookAndFeel.")
public void setUI(SliderUI ui) {
super.setUI(ui);
}
@@ -343,6 +339,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -413,6 +410,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public ChangeListener[] getChangeListeners() {
return listenerList.getListeners(ChangeListener.class);
}
@@ -468,10 +466,9 @@
*
* @see #getModel
* @see BoundedRangeModel
- * @beaninfo
- * bound: true
- * description: The sliders BoundedRangeModel.
*/
+ @BeanProperty(description
+ = "The sliders BoundedRangeModel.")
public void setModel(BoundedRangeModel newModel)
{
BoundedRangeModel oldModel = getModel();
@@ -527,10 +524,9 @@
* @see #getValue
* @see #addChangeListener
* @see BoundedRangeModel#setValue
- * @beaninfo
- * preferred: true
- * description: The sliders current value.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "The sliders current value.")
public void setValue(int n) {
BoundedRangeModel m = getModel();
int oldValue = m.getValue();
@@ -577,11 +573,9 @@
* @see #getMinimum
* @see #addChangeListener
* @see BoundedRangeModel#setMinimum
- * @beaninfo
- * bound: true
- * preferred: true
- * description: The sliders minimum value.
*/
+ @BeanProperty(preferred = true, description
+ = "The sliders minimum value.")
public void setMinimum(int minimum) {
int oldMin = getModel().getMinimum();
getModel().setMinimum(minimum);
@@ -618,11 +612,9 @@
* @see #getMaximum
* @see #addChangeListener
* @see BoundedRangeModel#setMaximum
- * @beaninfo
- * bound: true
- * preferred: true
- * description: The sliders maximum value.
*/
+ @BeanProperty(preferred = true, description
+ = "The sliders maximum value.")
public void setMaximum(int maximum) {
int oldMax = getModel().getMaximum();
getModel().setMaximum(maximum);
@@ -651,10 +643,9 @@
* @param b the new value for the {@code valueIsAdjusting} property
* @see #getValueIsAdjusting
* @see BoundedRangeModel#setValueIsAdjusting
- * @beaninfo
- * expert: true
- * description: True if the slider knob is being dragged.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "True if the slider knob is being dragged.")
public void setValueIsAdjusting(boolean b) {
BoundedRangeModel m = getModel();
boolean oldValue = m.getValueIsAdjusting();
@@ -699,10 +690,9 @@
* @param extent the new extent
* @see #getExtent
* @see BoundedRangeModel#setExtent
- * @beaninfo
- * expert: true
- * description: Size of the range covered by the knob.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "Size of the range covered by the knob.")
public void setExtent(int extent) {
getModel().setExtent(extent);
}
@@ -726,15 +716,11 @@
* @param orientation {@code HORIZONTAL} or {@code VERTICAL}
* @throws IllegalArgumentException if orientation is not one of {@code VERTICAL}, {@code HORIZONTAL}
* @see #getOrientation
- * @beaninfo
- * preferred: true
- * bound: true
- * attribute: visualUpdate true
- * description: Set the scrollbars orientation to either VERTICAL or HORIZONTAL.
- * enum: VERTICAL JSlider.VERTICAL
- * HORIZONTAL JSlider.HORIZONTAL
- *
*/
+ @BeanProperty(preferred = true, visualUpdate = true, enumerationValues = {
+ "JSlider.VERTICAL",
+ "JSlider.HORIZONTAL"}, description
+ = "Set the scrollbars orientation to either VERTICAL or HORIZONTAL.")
public void setOrientation(int orientation)
{
checkOrientation(orientation);
@@ -828,12 +814,9 @@
* @see #createStandardLabels(int)
* @see #getLabelTable
* @see #setPaintLabels
- * @beaninfo
- * hidden: true
- * bound: true
- * attribute: visualUpdate true
- * description: Specifies what labels will be drawn for any given value.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "Specifies what labels will be drawn for any given value.")
@SuppressWarnings("rawtypes")
public void setLabelTable( Dictionary labels ) {
Dictionary oldTable = labelTable;
@@ -1062,12 +1045,9 @@
* By default, the value of this property is {@code false}.
*
* @param b true to reverse the slider values from their normal order
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: If true reverses the slider values from their normal order
- *
*/
+ @BeanProperty(visualUpdate = true, description
+ = "If true reverses the slider values from their normal order")
public void setInverted( boolean b ) {
boolean oldValue = isInverted;
isInverted = b;
@@ -1118,12 +1098,9 @@
* @see #setPaintTicks
* @see #setLabelTable
* @see #createStandardLabels(int)
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Sets the number of values between major tick marks.
- *
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Sets the number of values between major tick marks.")
public void setMajorTickSpacing(int n) {
int oldValue = majorTickSpacing;
majorTickSpacing = n;
@@ -1166,11 +1143,9 @@
* @param n new value for the {@code minorTickSpacing} property
* @see #getMinorTickSpacing
* @see #setPaintTicks
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Sets the number of values between minor tick marks.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Sets the number of values between minor tick marks.")
public void setMinorTickSpacing(int n) {
int oldValue = minorTickSpacing;
minorTickSpacing = n;
@@ -1215,10 +1190,9 @@
*
* @param b true to snap the knob to the nearest tick mark
* @see #getSnapToTicks
- * @beaninfo
- * bound: true
- * description: If true snap the knob to the nearest tick mark.
*/
+ @BeanProperty(description
+ = "If true snap the knob to the nearest tick mark.")
public void setSnapToTicks(boolean b) {
boolean oldValue = snapToTicks;
snapToTicks = b;
@@ -1236,10 +1210,9 @@
* @param b true to snap the knob to the nearest slider value
* @see #getSnapToValue
* @see #setSnapToTicks
- * @beaninfo
- * bound: true
- * description: If true snap the knob to the nearest slider value.
*/
+ @BeanProperty(description
+ = "If true snap the knob to the nearest slider value.")
void setSnapToValue(boolean b) {
boolean oldValue = snapToValue;
snapToValue = b;
@@ -1263,11 +1236,9 @@
*
* @param b whether or not tick marks should be painted
* @see #getPaintTicks
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: If true tick marks are painted on the slider.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "If true tick marks are painted on the slider.")
public void setPaintTicks(boolean b) {
boolean oldValue = paintTicks;
paintTicks = b;
@@ -1294,11 +1265,9 @@
*
* @param b whether or not to paint the slider track
* @see #getPaintTrack
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: If true, the track is painted on the slider.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "If true, the track is painted on the slider.")
public void setPaintTrack(boolean b) {
boolean oldValue = paintTrack;
paintTrack = b;
@@ -1336,11 +1305,9 @@
* @see #getPaintLabels
* @see #getLabelTable
* @see #createStandardLabels(int)
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: If true labels are painted on the slider.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "If true labels are painted on the slider.")
public void setPaintLabels(boolean b) {
boolean oldValue = paintLabels;
paintLabels = b;
@@ -1422,6 +1389,7 @@
* @return an AccessibleJSlider that serves as the
* AccessibleContext of this JSlider
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJSlider();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JSpinner.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JSpinner.java Thu Oct 22 11:14:00 2015 -0700
@@ -108,11 +108,6 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: A single line input field that lets the user select a
- * number or an object value from an ordered set.
- *
* @see SpinnerModel
* @see AbstractSpinnerModel
* @see SpinnerListModel
@@ -124,6 +119,8 @@
* @author Lynn Monsanto (accessibility)
* @since 1.4
*/
+@JavaBean(defaultProperty = "UI", description = "A single line input field that lets the user select a number or an object value from an ordered set.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JSpinner extends JComponent implements Accessible
{
@@ -199,6 +196,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -273,12 +271,9 @@
* @see #getEditor
* @see #setEditor
* @throws IllegalArgumentException if model is <code>null</code>
- *
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Model that represents the value of this spinner.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "Model that represents the value of this spinner.")
public void setModel(SpinnerModel model) {
if (model == null) {
throw new IllegalArgumentException("null model");
@@ -376,6 +371,7 @@
* @see #getPreviousValue
* @see SpinnerModel#getNextValue
*/
+ @BeanProperty(bound = false)
public Object getNextValue() {
return getModel().getNextValue();
}
@@ -436,6 +432,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public ChangeListener[] getChangeListeners() {
return listenerList.getListeners(ChangeListener.class);
}
@@ -484,6 +481,7 @@
* @see #getNextValue
* @see SpinnerModel#getPreviousValue
*/
+ @BeanProperty(bound = false)
public Object getPreviousValue() {
return getModel().getPreviousValue();
}
@@ -502,12 +500,9 @@
* @see #createEditor
* @see #getModel
* @throws IllegalArgumentException if editor is <code>null</code>
- *
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: JComponent that displays the current value of the model
*/
+ @BeanProperty(visualUpdate = true, description
+ = "JComponent that displays the current value of the model")
public void setEditor(JComponent editor) {
if (editor == null) {
throw new IllegalArgumentException("null editor");
@@ -1427,6 +1422,7 @@
* @return the <code>AccessibleContext</code> for the <code>JSpinner</code>
* @since 1.5
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJSpinner();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JSplitPane.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JSplitPane.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,12 +23,10 @@
* questions.
*/
-
-
package javax.swing;
-
-
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.ConstructorProperties;
import javax.swing.plaf.*;
import javax.accessibility.*;
@@ -36,11 +34,8 @@
import java.awt.*;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
-
-
/**
* <code>JSplitPane</code> is used to divide two (and only two)
* <code>Component</code>s. The two <code>Component</code>s
@@ -99,6 +94,7 @@
* @author Scott Violet
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI")
@SuppressWarnings("serial") // Same-version serialization only
public class JSplitPane extends JComponent implements Accessible
{
@@ -365,11 +361,6 @@
*
* @param ui the <code>SplitPaneUI</code> L&F object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
public void setUI(SplitPaneUI ui) {
if ((SplitPaneUI)this.ui != ui) {
@@ -384,10 +375,9 @@
* current look and feel.
*
* @return the <code>SplitPaneUI</code> object that renders this component
- * @beaninfo
- * expert: true
- * description: The L&F object that renders this component.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The L&F object that renders this component.")
public SplitPaneUI getUI() {
return (SplitPaneUI)ui;
}
@@ -412,10 +402,9 @@
* @return the string "SplitPaneUI"
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
- * @beaninfo
- * expert: true
- * description: A string that specifies the name of the L&F class.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "A string that specifies the name of the L&F class.")
public String getUIClassID() {
return uiClassID;
}
@@ -425,10 +414,9 @@
* Sets the size of the divider.
*
* @param newSize an integer giving the size of the divider in pixels
- * @beaninfo
- * bound: true
- * description: The size of the divider.
*/
+ @BeanProperty(description
+ = "The size of the divider.")
public void setDividerSize(int newSize) {
int oldSize = dividerSize;
@@ -471,10 +459,9 @@
* Returns the component to the left (or above) the divider.
*
* @return the <code>Component</code> displayed in that position
- * @beaninfo
- * preferred: true
- * description: The component to the left (or above) the divider.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "The component to the left (or above) the divider.")
public Component getLeftComponent() {
return leftComponent;
}
@@ -484,9 +471,9 @@
* Sets the component above, or to the left of the divider.
*
* @param comp the <code>Component</code> to display in that position
- * @beaninfo
- * description: The component above, or to the left of the divider.
*/
+ @BeanProperty(bound = false, description
+ = "The component above, or to the left of the divider.")
public void setTopComponent(Component comp) {
setLeftComponent(comp);
}
@@ -506,10 +493,9 @@
* Sets the component to the right (or below) the divider.
*
* @param comp the <code>Component</code> to display in that position
- * @beaninfo
- * preferred: true
- * description: The component to the right (or below) the divider.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "The component to the right (or below) the divider.")
public void setRightComponent(Component comp) {
if (comp == null) {
if (rightComponent != null) {
@@ -536,9 +522,9 @@
* Sets the component below, or to the right of the divider.
*
* @param comp the <code>Component</code> to display in that position
- * @beaninfo
- * description: The component below, or to the right of the divider.
*/
+ @BeanProperty(bound = false, description
+ = "The component below, or to the right of the divider.")
public void setBottomComponent(Component comp) {
setRightComponent(comp);
}
@@ -565,13 +551,11 @@
*
* @param newValue <code>true</code> to specify that the split pane should provide a
* collapse/expand widget
- * @beaninfo
- * bound: true
- * description: UI widget on the divider to quickly
- * expand/collapse the divider.
*
* @see #isOneTouchExpandable
*/
+ @BeanProperty(description
+ = "UI widget on the divider to quickly expand/collapse the divider.")
public void setOneTouchExpandable(boolean newValue) {
boolean oldValue = oneTouchExpandable;
@@ -600,10 +584,9 @@
* @param newLastLocation an integer specifying the last divider location
* in pixels, from the left (or upper) edge of the pane to the
* left (or upper) edge of the divider
- * @beaninfo
- * bound: true
- * description: The last location the divider was at.
*/
+ @BeanProperty(description
+ = "The last location the divider was at.")
public void setLastDividerLocation(int newLastLocation) {
int oldLocation = lastDividerLocation;
@@ -635,12 +618,11 @@
* @param orientation an integer specifying the orientation
* @exception IllegalArgumentException if orientation is not one of:
* HORIZONTAL_SPLIT or VERTICAL_SPLIT.
- * @beaninfo
- * bound: true
- * description: The orientation, or how the splitter is divided.
- * enum: HORIZONTAL_SPLIT JSplitPane.HORIZONTAL_SPLIT
- * VERTICAL_SPLIT JSplitPane.VERTICAL_SPLIT
*/
+ @BeanProperty(enumerationValues = {
+ "JSplitPane.HORIZONTAL_SPLIT",
+ "JSplitPane.VERTICAL_SPLIT"}, description
+ = "The orientation, or how the splitter is divided.")
public void setOrientation(int orientation) {
if ((orientation != VERTICAL_SPLIT) &&
(orientation != HORIZONTAL_SPLIT)) {
@@ -679,13 +661,10 @@
*
* @param newContinuousLayout <code>true</code> if the components
* should continuously be redrawn as the divider changes position
- * @beaninfo
- * bound: true
- * description: Whether the child components are
- * continuously redisplayed and laid out during
- * user intervention.
* @see #isContinuousLayout
*/
+ @BeanProperty(description
+ = "Whether the child components are continuously redisplayed and laid out during user intervention.")
public void setContinuousLayout(boolean newContinuousLayout) {
boolean oldCD = continuousLayout;
@@ -718,11 +697,9 @@
* @param value as described above
* @exception IllegalArgumentException if <code>value</code> is < 0 or > 1
* @since 1.3
- * @beaninfo
- * bound: true
- * description: Specifies how to distribute extra space when the split pane
- * resizes.
*/
+ @BeanProperty(description
+ = "Specifies how to distribute extra space when the split pane resizes.")
public void setResizeWeight(double value) {
if (value < 0 || value > 1) {
throw new IllegalArgumentException("JSplitPane weight must be between 0 and 1");
@@ -773,9 +750,9 @@
* (bottom/right)
* @exception IllegalArgumentException if the specified location is < 0
* or > 1.0
- * @beaninfo
- * description: The location of the divider.
*/
+ @BeanProperty(description
+ = "The location of the divider.")
public void setDividerLocation(double proportionalLocation) {
if (proportionalLocation < 0.0 ||
proportionalLocation > 1.0) {
@@ -802,10 +779,9 @@
*
* @param location an int specifying a UI-specific value (typically a
* pixel count)
- * @beaninfo
- * bound: true
- * description: The location of the divider.
*/
+ @BeanProperty(description
+ = "The location of the divider.")
public void setDividerLocation(int location) {
int oldValue = dividerLocation;
@@ -846,9 +822,9 @@
* @return an integer specifying a UI-specific value for the minimum
* location (typically a pixel count); or -1 if the UI is
* <code>null</code>
- * @beaninfo
- * description: The minimum location of the divider from the L&F.
*/
+ @BeanProperty(bound = false, description
+ = "The minimum location of the divider from the L&F.")
public int getMinimumDividerLocation() {
SplitPaneUI ui = getUI();
@@ -867,6 +843,7 @@
* location (typically a pixel count); or -1 if the UI is
* <code>null</code>
*/
+ @BeanProperty(bound = false)
public int getMaximumDividerLocation() {
SplitPaneUI ui = getUI();
@@ -947,11 +924,9 @@
* @return true
* @see JComponent#revalidate
* @see java.awt.Container#isValidateRoot
- *
- * @beaninfo
- * hidden: true
*/
@Override
+ @BeanProperty(hidden = true)
public boolean isValidateRoot() {
return true;
}
@@ -1132,10 +1107,9 @@
*
* @return an AccessibleJSplitPane that serves as the
* AccessibleContext of this JSplitPane
- * @beaninfo
- * expert: true
- * description: The AccessibleContext associated with this SplitPane.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The AccessibleContext associated with this SplitPane.")
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJSplitPane();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JTabbedPane.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JTabbedPane.java Thu Oct 22 11:14:00 2015 -0700
@@ -22,16 +22,18 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import java.awt.*;
import java.awt.event.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.Transient;
import java.util.*;
import javax.swing.event.*;
import javax.swing.plaf.*;
import javax.accessibility.*;
+
import sun.swing.SwingUtilities2;
import java.io.Serializable;
@@ -95,11 +97,6 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer true
- * description: A component which provides a tab folder metaphor for
- * displaying one component from a set of components.
- *
* @author Dave Moore
* @author Philip Milne
* @author Amy Fowler
@@ -107,6 +104,8 @@
* @see SingleSelectionModel
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A component which provides a tab folder metaphor for displaying one component from a set of components.")
+@SwingContainer
@SuppressWarnings("serial") // Same-version serialization only
public class JTabbedPane extends JComponent
implements Serializable, Accessible, SwingConstants {
@@ -223,12 +222,9 @@
*
* @param ui the new UI object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the tabbedpane's LookAndFeel
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the tabbedpane's LookAndFeel")
public void setUI(TabbedPaneUI ui) {
super.setUI(ui);
// disabled icons are generated by LF so they should be unset here
@@ -258,6 +254,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -315,7 +312,8 @@
* array if no listeners have been added
* @since 1.4
*/
- public ChangeListener[] getChangeListeners() {
+ @BeanProperty(bound = false)
+ public ChangeListener[] getChangeListeners() {
return listenerList.getListeners(ChangeListener.class);
}
@@ -437,10 +435,9 @@
*
* @param model the model to be used
* @see #getModel
- * @beaninfo
- * bound: true
- * description: The tabbedpane's SingleSelectionModel.
*/
+ @BeanProperty(description
+ = "The tabbedpane's SingleSelectionModel.")
public void setModel(SingleSelectionModel model) {
SingleSelectionModel oldModel = getModel();
@@ -483,18 +480,13 @@
* @param tabPlacement the placement for the tabs relative to the content
* @exception IllegalArgumentException if tab placement value isn't one
* of the above valid values
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * attribute: visualUpdate true
- * enum: TOP JTabbedPane.TOP
- * LEFT JTabbedPane.LEFT
- * BOTTOM JTabbedPane.BOTTOM
- * RIGHT JTabbedPane.RIGHT
- * description: The tabbedpane's tab placement.
- *
*/
+ @BeanProperty(preferred = true, visualUpdate = true, enumerationValues = {
+ "JTabbedPane.TOP",
+ "JTabbedPane.LEFT",
+ "JTabbedPane.BOTTOM",
+ "JTabbedPane.RIGHT"}, description
+ = "The tabbedpane's tab placement.")
public void setTabPlacement(int tabPlacement) {
checkTabPlacement(tabPlacement);
if (this.tabPlacement != tabPlacement) {
@@ -546,16 +538,11 @@
* of the above valid values
* @see #getTabLayoutPolicy
* @since 1.4
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * attribute: visualUpdate true
- * enum: WRAP_TAB_LAYOUT JTabbedPane.WRAP_TAB_LAYOUT
- * SCROLL_TAB_LAYOUT JTabbedPane.SCROLL_TAB_LAYOUT
- * description: The tabbedpane's policy for laying out the tabs
- *
*/
+ @BeanProperty(preferred = true, visualUpdate = true, enumerationValues = {
+ "JTabbedPane.WRAP_TAB_LAYOUT",
+ "JTabbedPane.SCROLL_TAB_LAYOUT"}, description
+ = "The tabbedpane's policy for laying out the tabs")
public void setTabLayoutPolicy(int tabLayoutPolicy) {
checkTabLayoutPolicy(tabLayoutPolicy);
if (this.tabLayoutPolicy != tabLayoutPolicy) {
@@ -600,10 +587,9 @@
*
* @see #getSelectedIndex
* @see SingleSelectionModel#setSelectedIndex
- * @beaninfo
- * preferred: true
- * description: The tabbedpane's selected tab index.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "The tabbedpane's selected tab index.")
public void setSelectedIndex(int index) {
if (index != -1) {
checkIndex(index);
@@ -686,10 +672,9 @@
* @exception IllegalArgumentException if component not found in tabbed
* pane
* @see #getSelectedComponent
- * @beaninfo
- * preferred: true
- * description: The tabbedpane's selected component.
*/
+ @BeanProperty(bound = false, preferred = true, description
+ = "The tabbedpane's selected component.")
public void setSelectedComponent(Component c) {
int index = indexOfComponent(c);
if (index != -1) {
@@ -1096,6 +1081,7 @@
*
* @return an integer specifying the number of tabbed pages
*/
+ @BeanProperty(bound = false)
public int getTabCount() {
return pages.size();
}
@@ -1111,6 +1097,7 @@
* is <code>LEFT</code> or <code>RIGHT</code>,
* or 0 if there is no UI set on this <code>tabbedpane</code>
*/
+ @BeanProperty(bound = false)
public int getTabRunCount() {
if (ui != null) {
return ((TabbedPaneUI)ui).getTabRunCount(this);
@@ -1329,11 +1316,9 @@
*
* @see #getTitleAt
* @see #setTabComponentAt
- * @beaninfo
- * preferred: true
- * attribute: visualUpdate true
- * description: The title at the specified tab index.
*/
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "The title at the specified tab index.")
public void setTitleAt(int index, String title) {
Page page = pages.get(index);
String oldTitle =page.title;
@@ -1373,11 +1358,9 @@
* @see #getIconAt
* @see #getDisabledIconAt
* @see #setTabComponentAt
- * @beaninfo
- * preferred: true
- * attribute: visualUpdate true
- * description: The icon at the specified tab index.
*/
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "The icon at the specified tab index.")
public void setIconAt(int index, Icon icon) {
Page page = pages.get(index);
Icon oldIcon = page.icon;
@@ -1414,11 +1397,9 @@
* {@code (index < 0 || index >= tab count)}
*
* @see #getDisabledIconAt
- * @beaninfo
- * preferred: true
- * attribute: visualUpdate true
- * description: The disabled icon at the specified tab index.
*/
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "The disabled icon at the specified tab index.")
public void setDisabledIconAt(int index, Icon disabledIcon) {
Icon oldIcon = pages.get(index).disabledIcon;
pages.get(index).disabledIcon = disabledIcon;
@@ -1439,11 +1420,10 @@
* {@code (index < 0 || index >= tab count)}
*
* @see #getToolTipTextAt
- * @beaninfo
- * preferred: true
- * description: The tooltip text at the specified tab index.
* @since 1.3
*/
+ @BeanProperty(preferred = true, description
+ = "The tooltip text at the specified tab index.")
public void setToolTipTextAt(int index, String toolTipText) {
String oldToolTipText = pages.get(index).tip;
pages.get(index).tip = toolTipText;
@@ -1475,11 +1455,9 @@
* {@code (index < 0 || index >= tab count)}
*
* @see #getBackgroundAt
- * @beaninfo
- * preferred: true
- * attribute: visualUpdate true
- * description: The background color at the specified tab index.
*/
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "The background color at the specified tab index.")
public void setBackgroundAt(int index, Color background) {
Color oldBg = pages.get(index).background;
pages.get(index).setBackground(background);
@@ -1508,11 +1486,9 @@
* {@code (index < 0 || index >= tab count)}
*
* @see #getForegroundAt
- * @beaninfo
- * preferred: true
- * attribute: visualUpdate true
- * description: The foreground color at the specified tab index.
*/
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "The foreground color at the specified tab index.")
public void setForegroundAt(int index, Color foreground) {
Color oldFg = pages.get(index).foreground;
pages.get(index).setForeground(foreground);
@@ -1555,10 +1531,9 @@
* {@code (index < 0 || index >= tab count)}
*
* @see #getComponentAt
- * @beaninfo
- * attribute: visualUpdate true
- * description: The component at the specified tab index.
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The component at the specified tab index.")
@SuppressWarnings("deprecation")
public void setComponentAt(int index, Component component) {
Page page = pages.get(index);
@@ -1635,13 +1610,9 @@
* title , or < -1
* @see #setMnemonicAt(int,int)
* @see #getDisplayedMnemonicIndexAt(int)
- *
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: the index into the String to draw the keyboard character
- * mnemonic at
*/
+ @BeanProperty(visualUpdate = true, description
+ = "the index into the String to draw the keyboard character mnemonic at")
public void setDisplayedMnemonicIndexAt(int tabIndex, int mnemonicIndex) {
checkIndex(tabIndex);
@@ -1675,13 +1646,9 @@
* of range ({@code tabIndex < 0 || tabIndex >= tab count})
* @see #getMnemonicAt(int)
* @see #setDisplayedMnemonicIndexAt(int,int)
- *
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: The keyboard mnenmonic, as a KeyEvent VK constant,
- * for the specified tab
*/
+ @BeanProperty(visualUpdate = true, description
+ = "The keyboard mnenmonic, as a KeyEvent VK constant, for the specified tab")
public void setMnemonicAt(int tabIndex, int mnemonic) {
checkIndex(tabIndex);
@@ -1896,6 +1863,7 @@
* @return an AccessibleJTabbedPane that serves as the
* AccessibleContext of this JTabbedPane
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJTabbedPane();
@@ -2397,12 +2365,10 @@
* added to this <code>JTabbedPane</code>
*
* @see #getTabComponentAt
- * @beaninfo
- * preferred: true
- * attribute: visualUpdate true
- * description: The tab component at the specified tab index.
* @since 1.6
*/
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "The tab component at the specified tab index.")
public void setTabComponentAt(int index, Component component) {
if (component != null && indexOfComponent(component) != -1) {
throw new IllegalArgumentException("Component is already added to this JTabbedPane");
--- a/jdk/src/java.desktop/share/classes/javax/swing/JTable.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JTable.java Thu Oct 22 11:14:00 2015 -0700
@@ -22,7 +22,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import java.util.*;
@@ -32,7 +31,10 @@
import java.awt.event.*;
import java.awt.print.*;
-import java.beans.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
@@ -207,11 +209,6 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- *
- * @beaninfo
- * attribute: isContainer false
- * description: A component which displays data in a two dimensional grid.
- *
* @author Philip Milne
* @author Shannon Hickey (printing support)
* @see javax.swing.table.DefaultTableModel
@@ -221,6 +218,8 @@
/* The first versions of the JTable, contained in Swing-0.1 through
* Swing-0.4, were written by Alan Chung.
*/
+@JavaBean(defaultProperty = "UI", description = "A component which displays data in a two dimensional grid.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JTable extends JComponent implements TableModelListener, Scrollable,
TableColumnModelListener, ListSelectionListener, CellEditorListener,
@@ -894,10 +893,9 @@
*
* @param tableHeader new tableHeader
* @see #getTableHeader
- * @beaninfo
- * bound: true
- * description: The JTableHeader instance which renders the column headers.
- */
+ */
+ @BeanProperty(description
+ = "The JTableHeader instance which renders the column headers.")
public void setTableHeader(JTableHeader tableHeader) {
if (this.tableHeader != tableHeader) {
JTableHeader old = this.tableHeader;
@@ -933,10 +931,9 @@
* @exception IllegalArgumentException if <code>rowHeight</code> is
* less than 1
* @see #getRowHeight
- * @beaninfo
- * bound: true
- * description: The height of the specified row.
- */
+ */
+ @BeanProperty(description
+ = "The height of the specified row.")
public void setRowHeight(int rowHeight) {
if (rowHeight <= 0) {
throw new IllegalArgumentException("New row height less than 1");
@@ -979,11 +976,10 @@
* @param rowHeight new row height, in pixels
* @exception IllegalArgumentException if <code>rowHeight</code> is
* less than 1
- * @beaninfo
- * bound: true
- * description: The height in pixels of the cells in <code>row</code>
* @since 1.3
*/
+ @BeanProperty(description
+ = "The height in pixels of the cells in <code>row</code>")
public void setRowHeight(int row, int rowHeight) {
if (rowHeight <= 0) {
throw new IllegalArgumentException("New row height less than 1");
@@ -1010,10 +1006,9 @@
*
* @param rowMargin the number of pixels between cells in a row
* @see #getRowMargin
- * @beaninfo
- * bound: true
- * description: The amount of space between cells.
- */
+ */
+ @BeanProperty(description
+ = "The amount of space between cells.")
public void setRowMargin(int rowMargin) {
int old = this.rowMargin;
this.rowMargin = rowMargin;
@@ -1041,10 +1036,9 @@
* specifying the new width
* and height between cells
* @see #getIntercellSpacing
- * @beaninfo
- * description: The spacing between the cells,
- * drawn in the background color of the JTable.
- */
+ */
+ @BeanProperty(bound = false, description
+ = "The spacing between the cells, drawn in the background color of the JTable.")
public void setIntercellSpacing(Dimension intercellSpacing) {
// Set the rowMargin here and columnMargin in the TableColumnModel
setRowMargin(intercellSpacing.height);
@@ -1071,10 +1065,9 @@
* @param gridColor the new color of the grid lines
* @exception IllegalArgumentException if <code>gridColor</code> is <code>null</code>
* @see #getGridColor
- * @beaninfo
- * bound: true
- * description: The grid color.
- */
+ */
+ @BeanProperty(description
+ = "The grid color.")
public void setGridColor(Color gridColor) {
if (gridColor == null) {
throw new IllegalArgumentException("New color is null");
@@ -1108,9 +1101,9 @@
*
* @see #setShowVerticalLines
* @see #setShowHorizontalLines
- * @beaninfo
- * description: The color used to draw the grid lines.
- */
+ */
+ @BeanProperty(description
+ = "The color used to draw the grid lines.")
public void setShowGrid(boolean showGrid) {
setShowHorizontalLines(showGrid);
setShowVerticalLines(showGrid);
@@ -1127,10 +1120,9 @@
* @see #getShowHorizontalLines
* @see #setShowGrid
* @see #setShowVerticalLines
- * @beaninfo
- * bound: true
- * description: Whether horizontal lines should be drawn in between the cells.
- */
+ */
+ @BeanProperty(description
+ = "Whether horizontal lines should be drawn in between the cells.")
public void setShowHorizontalLines(boolean showHorizontalLines) {
boolean old = this.showHorizontalLines;
this.showHorizontalLines = showHorizontalLines;
@@ -1148,10 +1140,9 @@
* @see #getShowVerticalLines
* @see #setShowGrid
* @see #setShowHorizontalLines
- * @beaninfo
- * bound: true
- * description: Whether vertical lines should be drawn in between the cells.
- */
+ */
+ @BeanProperty(description
+ = "Whether vertical lines should be drawn in between the cells.")
public void setShowVerticalLines(boolean showVerticalLines) {
boolean old = this.showVerticalLines;
this.showVerticalLines = showVerticalLines;
@@ -1198,15 +1189,14 @@
*
* @see #getAutoResizeMode
* @see #doLayout
- * @beaninfo
- * bound: true
- * description: Whether the columns should adjust themselves automatically.
- * enum: AUTO_RESIZE_OFF JTable.AUTO_RESIZE_OFF
- * AUTO_RESIZE_NEXT_COLUMN JTable.AUTO_RESIZE_NEXT_COLUMN
- * AUTO_RESIZE_SUBSEQUENT_COLUMNS JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS
- * AUTO_RESIZE_LAST_COLUMN JTable.AUTO_RESIZE_LAST_COLUMN
- * AUTO_RESIZE_ALL_COLUMNS JTable.AUTO_RESIZE_ALL_COLUMNS
- */
+ */
+ @BeanProperty(enumerationValues = {
+ "JTable.AUTO_RESIZE_OFF",
+ "JTable.AUTO_RESIZE_NEXT_COLUMN",
+ "JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS",
+ "JTable.AUTO_RESIZE_LAST_COLUMN",
+ "JTable.AUTO_RESIZE_ALL_COLUMNS"}, description
+ = "Whether the columns should adjust themselves automatically.")
public void setAutoResizeMode(int mode) {
if (isValidAutoResizeMode(mode)) {
int old = autoResizeMode;
@@ -1248,10 +1238,9 @@
* @param autoCreateColumnsFromModel true if <code>JTable</code> should automatically create columns
* @see #getAutoCreateColumnsFromModel
* @see #createDefaultColumnsFromModel
- * @beaninfo
- * bound: true
- * description: Automatically populates the columnModel when a new TableModel is submitted.
- */
+ */
+ @BeanProperty(description
+ = "Automatically populates the columnModel when a new TableModel is submitted.")
public void setAutoCreateColumnsFromModel(boolean autoCreateColumnsFromModel) {
if (this.autoCreateColumnsFromModel != autoCreateColumnsFromModel) {
boolean old = this.autoCreateColumnsFromModel;
@@ -1442,11 +1431,9 @@
* @see #setTransferHandler
* @see TransferHandler
* @since 1.4
- *
- * @beaninfo
- * description: determines whether automatic drag handling is enabled
- * bound: false
- */
+ */
+ @BeanProperty(bound = false, description
+ = "determines whether automatic drag handling is enabled")
public void setDragEnabled(boolean b) {
checkDragEnabled(b);
dragEnabled = b;
@@ -1834,6 +1821,7 @@
* @see TransferHandler#canImport(TransferHandler.TransferSupport)
* @since 1.6
*/
+ @BeanProperty(bound = false)
public final DropLocation getDropLocation() {
return dropLocation;
}
@@ -1853,12 +1841,10 @@
* @param autoCreateRowSorter whether or not a {@code RowSorter}
* should be automatically created
* @see javax.swing.table.TableRowSorter
- * @beaninfo
- * bound: true
- * preferred: true
- * description: Whether or not to turn on sorting by default.
* @since 1.6
*/
+ @BeanProperty(preferred = true, description
+ = "Whether or not to turn on sorting by default.")
public void setAutoCreateRowSorter(boolean autoCreateRowSorter) {
boolean oldValue = this.autoCreateRowSorter;
this.autoCreateRowSorter = autoCreateRowSorter;
@@ -1889,12 +1875,10 @@
* is true.
*
* @param update whether or not to update the selection on sorting
- * @beaninfo
- * bound: true
- * expert: true
- * description: Whether or not to update the selection on sorting
* @since 1.6
*/
+ @BeanProperty(expert = true, description
+ = "Whether or not to update the selection on sorting")
public void setUpdateSelectionOnSort(boolean update) {
if (updateSelectionOnSort != update) {
updateSelectionOnSort = update;
@@ -1929,11 +1913,10 @@
* @param sorter the <code>RowSorter</code>; <code>null</code> turns
* sorting off
* @see javax.swing.table.TableRowSorter
- * @beaninfo
- * bound: true
- * description: The table's RowSorter
* @since 1.6
*/
+ @BeanProperty(description
+ = "The table's RowSorter")
public void setRowSorter(RowSorter<? extends TableModel> sorter) {
RowSorter<? extends TableModel> oldRowSorter = null;
if (sortManager != null) {
@@ -1985,12 +1968,12 @@
*
* @param selectionMode the mode used by the row and column selection models
* @see JList#setSelectionMode
- * @beaninfo
- * description: The selection mode used by the row and column selection models.
- * enum: SINGLE_SELECTION ListSelectionModel.SINGLE_SELECTION
- * SINGLE_INTERVAL_SELECTION ListSelectionModel.SINGLE_INTERVAL_SELECTION
- * MULTIPLE_INTERVAL_SELECTION ListSelectionModel.MULTIPLE_INTERVAL_SELECTION
- */
+ */
+ @BeanProperty(enumerationValues = {
+ "ListSelectionModel.SINGLE_SELECTION",
+ "ListSelectionModel.SINGLE_INTERVAL_SELECTION",
+ "ListSelectionModel.MULTIPLE_INTERVAL_SELECTION"}, description
+ = "The selection mode used by the row and column selection models.")
public void setSelectionMode(int selectionMode) {
clearSelection();
getSelectionModel().setSelectionMode(selectionMode);
@@ -2002,11 +1985,9 @@
*
* @param rowSelectionAllowed true if this model will allow row selection
* @see #getRowSelectionAllowed
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: If true, an entire row is selected for each selected cell.
- */
+ */
+ @BeanProperty(visualUpdate = true, description
+ = "If true, an entire row is selected for each selected cell.")
public void setRowSelectionAllowed(boolean rowSelectionAllowed) {
boolean old = this.rowSelectionAllowed;
this.rowSelectionAllowed = rowSelectionAllowed;
@@ -2031,11 +2012,9 @@
*
* @param columnSelectionAllowed true if this model will allow column selection
* @see #getColumnSelectionAllowed
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: If true, an entire column is selected for each selected cell.
- */
+ */
+ @BeanProperty(visualUpdate = true, description
+ = "If true, an entire column is selected for each selected cell.")
public void setColumnSelectionAllowed(boolean columnSelectionAllowed) {
boolean old = columnModel.getColumnSelectionAllowed();
columnModel.setColumnSelectionAllowed(columnSelectionAllowed);
@@ -2069,12 +2048,9 @@
* selection is allowed
* @see #getCellSelectionEnabled
* @see #isCellSelected
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Select a rectangular region of cells rather than
- * rows or columns.
- */
+ */
+ @BeanProperty(visualUpdate = true, description
+ = "Select a rectangular region of cells rather than rows or columns.")
public void setCellSelectionEnabled(boolean cellSelectionEnabled) {
setRowSelectionAllowed(cellSelectionEnabled);
setColumnSelectionAllowed(cellSelectionEnabled);
@@ -2262,6 +2238,7 @@
* Returns the index of the first selected row, -1 if no row is selected.
* @return the index of the first selected row
*/
+ @BeanProperty(bound = false)
public int getSelectedRow() {
return selectionModel.getMinSelectionIndex();
}
@@ -2271,6 +2248,7 @@
* -1 if no column is selected.
* @return the index of the first selected column
*/
+ @BeanProperty(bound = false)
public int getSelectedColumn() {
return columnModel.getSelectionModel().getMinSelectionIndex();
}
@@ -2282,6 +2260,7 @@
* or an empty array if no row is selected
* @see #getSelectedRow
*/
+ @BeanProperty(bound = false)
public int[] getSelectedRows() {
int iMin = selectionModel.getMinSelectionIndex();
int iMax = selectionModel.getMaxSelectionIndex();
@@ -2309,6 +2288,7 @@
* or an empty array if no column is selected
* @see #getSelectedColumn
*/
+ @BeanProperty(bound = false)
public int[] getSelectedColumns() {
return columnModel.getSelectedColumns();
}
@@ -2318,6 +2298,7 @@
*
* @return the number of selected rows, 0 if no rows are selected
*/
+ @BeanProperty(bound = false)
public int getSelectedRowCount() {
int iMin = selectionModel.getMinSelectionIndex();
int iMax = selectionModel.getMaxSelectionIndex();
@@ -2336,6 +2317,7 @@
*
* @return the number of selected columns, 0 if no columns are selected
*/
+ @BeanProperty(bound = false)
public int getSelectedColumnCount() {
return columnModel.getSelectedColumnCount();
}
@@ -2523,10 +2505,9 @@
* @see #setForeground
* @see #setBackground
* @see #setFont
- * @beaninfo
- * bound: true
- * description: A default foreground color for selected cells.
- */
+ */
+ @BeanProperty(description
+ = "A default foreground color for selected cells.")
public void setSelectionForeground(Color selectionForeground) {
Color old = this.selectionForeground;
this.selectionForeground = selectionForeground;
@@ -2561,10 +2542,9 @@
* @see #setForeground
* @see #setBackground
* @see #setFont
- * @beaninfo
- * bound: true
- * description: A default background color for selected cells.
- */
+ */
+ @BeanProperty(description
+ = "A default background color for selected cells.")
public void setSelectionBackground(Color selectionBackground) {
Color old = this.selectionBackground;
this.selectionBackground = selectionBackground;
@@ -2680,6 +2660,7 @@
* @return the number of rows shown in the <code>JTable</code>
* @see #getColumnCount
*/
+ @BeanProperty(bound = false)
public int getRowCount() {
RowSorter<?> sorter = getRowSorter();
if (sorter != null) {
@@ -2696,6 +2677,7 @@
* @see #getRowCount
* @see #removeColumn
*/
+ @BeanProperty(bound = false)
public int getColumnCount() {
return getColumnModel().getColumnCount();
}
@@ -3564,6 +3546,7 @@
* @see #editingColumn
* @see #editingRow
*/
+ @BeanProperty(bound = false)
public boolean isEditing() {
return cellEditor != null;
}
@@ -3574,6 +3557,7 @@
*
* @return Component handling editing session
*/
+ @BeanProperty(bound = false)
public Component getEditorComponent() {
return editorComp;
}
@@ -3620,12 +3604,9 @@
*
* @param ui the TableUI L&F object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
- */
+ */
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(TableUI ui) {
if (this.ui != ui) {
super.setUI(ui);
@@ -3681,6 +3662,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -3697,10 +3679,9 @@
* @param dataModel the new data source for this table
* @throws IllegalArgumentException if {@code dataModel} is {@code null}
* @see #getModel
- * @beaninfo
- * bound: true
- * description: The model that is the source of the data for this view.
- */
+ */
+ @BeanProperty(description
+ = "The model that is the source of the data for this view.")
public void setModel(final TableModel dataModel) {
if (dataModel == null) {
throw new IllegalArgumentException("Cannot set a null TableModel");
@@ -3743,10 +3724,9 @@
* @param columnModel the new data source for this table
* @throws IllegalArgumentException if {@code columnModel} is {@code null}
* @see #getColumnModel
- * @beaninfo
- * bound: true
- * description: The object governing the way columns appear in the view.
- */
+ */
+ @BeanProperty(description
+ = "The object governing the way columns appear in the view.")
public void setColumnModel(final TableColumnModel columnModel) {
if (columnModel == null) {
throw new IllegalArgumentException("Cannot set a null ColumnModel");
@@ -3788,10 +3768,9 @@
* @throws IllegalArgumentException if {@code selectionModel} is
* {@code null}
* @see #getSelectionModel
- * @beaninfo
- * bound: true
- * description: The selection model for rows.
- */
+ */
+ @BeanProperty(description
+ = "The selection model for rows.")
public void setSelectionModel(final ListSelectionModel selectionModel) {
if (selectionModel == null) {
throw new IllegalArgumentException("Cannot set a null SelectionModel");
@@ -4784,9 +4763,9 @@
* @param size a <code>Dimension</code> object specifying the <code>preferredSize</code> of a
* <code>JViewport</code> whose view is this table
* @see Scrollable#getPreferredScrollableViewportSize
- * @beaninfo
- * description: The preferred size of the viewport.
- */
+ */
+ @BeanProperty(bound = false, description
+ = "The preferred size of the viewport.")
public void setPreferredScrollableViewportSize(Dimension size) {
preferredViewportSize = size;
}
@@ -5222,6 +5201,7 @@
* to <code>AUTO_RESIZE_OFF</code>, otherwise returns true
* @see Scrollable#getScrollableTracksViewportWidth
*/
+ @BeanProperty(bound = false)
public boolean getScrollableTracksViewportWidth() {
return !(autoResizeMode == AUTO_RESIZE_OFF);
}
@@ -5239,6 +5219,7 @@
* @see #setFillsViewportHeight
* @see #getFillsViewportHeight
*/
+ @BeanProperty(bound = false)
public boolean getScrollableTracksViewportHeight() {
Container parent = SwingUtilities.getUnwrappedParent(this);
return getFillsViewportHeight()
@@ -5260,11 +5241,9 @@
* @see #getFillsViewportHeight
* @see #getScrollableTracksViewportHeight
* @since 1.6
- * @beaninfo
- * bound: true
- * description: Whether or not this table is always made large enough
- * to fill the height of an enclosing viewport
- */
+ */
+ @BeanProperty(description
+ = "Whether or not this table is always made large enough to fill the height of an enclosing viewport")
public void setFillsViewportHeight(boolean fillsViewportHeight) {
boolean old = this.fillsViewportHeight;
this.fillsViewportHeight = fillsViewportHeight;
@@ -5661,10 +5640,9 @@
*
* @param anEditor the active cell editor
* @see #cellEditor
- * @beaninfo
- * bound: true
- * description: The table's active cell editor.
- */
+ */
+ @BeanProperty(description
+ = "The table's active cell editor.")
public void setCellEditor(TableCellEditor anEditor) {
TableCellEditor oldEditor = cellEditor;
cellEditor = anEditor;
@@ -6656,6 +6634,7 @@
* @return an AccessibleJTable that serves as the
* AccessibleContext of this JTable
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJTable();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JTextArea.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JTextArea.java Thu Oct 22 11:14:00 2015 -0700
@@ -25,17 +25,12 @@
package javax.swing;
import java.awt.*;
-import java.awt.event.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import javax.swing.text.*;
-import javax.swing.plaf.*;
import javax.accessibility.*;
-import java.util.Collections;
-import java.util.Set;
-import java.util.StringTokenizer;
-
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
/**
@@ -116,15 +111,13 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: A multi-line area that displays plain text.
- *
* @author Timothy Prinzing
* @see JTextPane
* @see JEditorPane
* @since 1.2
*/
+@JavaBean(defaultProperty = "UIClassID", description = "A multi-line area that displays plain text.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JTextArea extends JTextComponent {
@@ -237,6 +230,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -260,11 +254,9 @@
*
* @param size number of characters to expand to
* @see #getTabSize
- * @beaninfo
- * preferred: true
- * bound: true
- * description: the number of characters to expand tabs to
*/
+ @BeanProperty(preferred = true, description
+ = "the number of characters to expand tabs to")
public void setTabSize(int size) {
Document doc = getDocument();
if (doc != null) {
@@ -302,11 +294,9 @@
*
* @param wrap indicates if lines should be wrapped
* @see #getLineWrap
- * @beaninfo
- * preferred: true
- * bound: true
- * description: should lines be wrapped
*/
+ @BeanProperty(preferred = true, description
+ = "should lines be wrapped")
public void setLineWrap(boolean wrap) {
boolean old = this.wrap;
this.wrap = wrap;
@@ -336,11 +326,9 @@
* @param word indicates if word boundaries should be used
* for line wrapping
* @see #getWrapStyleWord
- * @beaninfo
- * preferred: false
- * bound: true
- * description: should wrapping occur at word boundaries
*/
+ @BeanProperty(description
+ = "should wrapping occur at word boundaries")
public void setWrapStyleWord(boolean word) {
boolean old = this.word;
this.word = word;
@@ -388,6 +376,7 @@
*
* @return the number of lines > 0
*/
+ @BeanProperty(bound = false)
public int getLineCount() {
Element map = getDocument().getDefaultRootElement();
return map.getElementCount();
@@ -531,9 +520,9 @@
* @param rows the number of rows >= 0
* @exception IllegalArgumentException if rows is less than 0
* @see #getRows
- * @beaninfo
- * description: the number of rows preferred for display
*/
+ @BeanProperty(bound = false, description
+ = "the number of rows preferred for display")
public void setRows(int rows) {
int oldVal = this.rows;
if (rows < 0) {
@@ -575,9 +564,9 @@
* @param columns the number of columns >= 0
* @exception IllegalArgumentException if columns is less than 0
* @see #getColumns
- * @beaninfo
- * description: the number of columns preferred for display
*/
+ @BeanProperty(bound = false, description
+ = "the number of columns preferred for display")
public void setColumns(int columns) {
int oldVal = this.columns;
if (columns < 0) {
@@ -680,6 +669,7 @@
* @return true if a viewport should force the Scrollables width
* to match its own.
*/
+ @BeanProperty(bound = false)
public boolean getScrollableTracksViewportWidth() {
return (wrap) ? true : super.getScrollableTracksViewportWidth();
}
@@ -693,6 +683,7 @@
* @return The preferredSize of a JViewport whose view is this Scrollable.
* @see JViewport#getPreferredSize
*/
+ @BeanProperty(bound = false)
public Dimension getPreferredScrollableViewportSize() {
Dimension size = super.getPreferredScrollableViewportSize();
size = (size == null) ? new Dimension(400,400) : size;
@@ -766,6 +757,7 @@
* @return an AccessibleJTextArea that serves as the
* AccessibleContext of this JTextArea
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJTextArea();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JTextField.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JTextField.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,18 +24,17 @@
*/
package javax.swing;
-import sun.swing.SwingUtilities2;
-
import java.awt.*;
import java.awt.event.*;
-import java.beans.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
import javax.swing.text.*;
-import javax.swing.plaf.*;
import javax.swing.event.*;
import javax.accessibility.*;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
import java.io.Serializable;
@@ -152,16 +151,14 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: A component which allows for the editing of a single line of text.
- *
* @author Timothy Prinzing
* @see #setActionCommand
* @see JPasswordField
* @see #addActionListener
* @since 1.2
*/
+@JavaBean(defaultProperty = "UIClassID", description = "A component which allows for the editing of a single line of text.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JTextField extends JTextComponent implements SwingConstants {
@@ -253,6 +250,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -266,11 +264,9 @@
*
* @param doc the document to display/edit
* @see #getDocument
- * @beaninfo
- * description: the text document model
- * bound: true
- * expert: true
*/
+ @BeanProperty(expert = true, description
+ = "the text document model")
public void setDocument(Document doc) {
if (doc != null) {
doc.putProperty("filterNewlines", Boolean.TRUE);
@@ -332,14 +328,14 @@
* @param alignment the alignment
* @exception IllegalArgumentException if <code>alignment</code>
* is not a valid key
- * @beaninfo
- * preferred: true
- * bound: true
- * description: Set the field alignment to LEFT, CENTER, RIGHT,
- * LEADING (the default) or TRAILING
- * enum: LEFT JTextField.LEFT CENTER JTextField.CENTER RIGHT JTextField.RIGHT
- * LEADING JTextField.LEADING TRAILING JTextField.TRAILING
*/
+ @BeanProperty(preferred = true, enumerationValues = {
+ "JTextField.LEFT",
+ "JTextField.CENTER",
+ "JTextField.RIGHT",
+ "JTextField.LEADING",
+ "JTextField.TRAILING"}, description
+ = "Set the field alignment to LEFT, CENTER, RIGHT, LEADING (the default) or TRAILING")
public void setHorizontalAlignment(int alignment) {
if (alignment == horizontalAlignment) return;
int oldValue = horizontalAlignment;
@@ -382,9 +378,9 @@
* @param columns the number of columns >= 0
* @exception IllegalArgumentException if <code>columns</code>
* is less than 0
- * @beaninfo
- * description: the number of columns preferred for display
*/
+ @BeanProperty(bound = false, description
+ = "the number of columns preferred for display")
public void setColumns(int columns) {
int oldVal = this.columns;
if (columns < 0) {
@@ -476,6 +472,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public synchronized ActionListener[] getActionListeners() {
return listenerList.getListeners(ActionListener.class);
}
@@ -559,11 +556,9 @@
* @see #configurePropertiesFromAction
* @see #createActionPropertyChangeListener
* @see #actionPropertyChanged
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: the Action instance connected with this ActionEvent source
*/
+ @BeanProperty(visualUpdate = true, description
+ = "the Action instance connected with this ActionEvent source")
public void setAction(Action a) {
Action oldValue = getAction();
if (action==null || !action.equals(a)) {
@@ -712,6 +707,7 @@
*
* @return the command list
*/
+ @BeanProperty(bound = false)
public Action[] getActions() {
return TextAction.augmentList(super.getActions(), defaultActions);
}
@@ -742,6 +738,7 @@
* @return the visibility
* @see BoundedRangeModel
*/
+ @BeanProperty(bound = false)
public BoundedRangeModel getHorizontalVisibility() {
return visibility;
}
@@ -926,6 +923,7 @@
* @return an <code>AccessibleJTextField</code> that serves as the
* <code>AccessibleContext</code> of this <code>JTextField</code>
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJTextField();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JTextPane.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JTextPane.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,15 +25,12 @@
package javax.swing;
import java.awt.*;
-import java.awt.event.ActionEvent;
-
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
import javax.swing.text.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
/**
* A text component that can be marked up with attributes that are
@@ -72,14 +69,12 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer true
- * description: A text component that can be marked up with attributes that are graphically represented.
- *
* @author Timothy Prinzing
* @see javax.swing.text.StyledEditorKit
* @since 1.2
*/
+@JavaBean(description = "A text component that can be marked up with attributes that are graphically represented.")
+@SwingContainer
@SuppressWarnings("serial") // Same-version serialization only
public class JTextPane extends JEditorPane {
@@ -120,6 +115,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -338,6 +334,7 @@
*
* @return the attributes, or <code>null</code>
*/
+ @BeanProperty(bound = false)
public AttributeSet getCharacterAttributes() {
StyledDocument doc = getStyledDocument();
Element run = doc.getCharacterElement(getCaretPosition());
@@ -379,6 +376,7 @@
*
* @return the attributes
*/
+ @BeanProperty(bound = false)
public AttributeSet getParagraphAttributes() {
StyledDocument doc = getStyledDocument();
Element paragraph = doc.getParagraphElement(getCaretPosition());
@@ -410,6 +408,7 @@
*
* @return the attributes
*/
+ @BeanProperty(bound = false)
public MutableAttributeSet getInputAttributes() {
return getStyledEditorKit().getInputAttributes();
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/JToggleButton.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JToggleButton.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -26,16 +26,15 @@
import java.awt.*;
import java.awt.event.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
-import javax.swing.event.*;
import javax.swing.plaf.*;
import javax.accessibility.*;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
-
/**
* An implementation of a two-state button.
* The <code>JRadioButton</code> and <code>JCheckBox</code> classes
@@ -68,15 +67,13 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- * description: An implementation of a two-state button.
- *
* @see JRadioButton
* @see JCheckBox
* @author Jeff Dinkins
* @since 1.2
*/
+@JavaBean(defaultProperty = "UIClassID", description = "An implementation of a two-state button.")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public class JToggleButton extends AbstractButton implements Accessible {
@@ -195,9 +192,9 @@
* @return String "ToggleButtonUI"
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
- * @beaninfo
- * description: A string that specifies the name of the L&F class
*/
+ @BeanProperty(bound = false, description
+ = "A string that specifies the name of the L&F class")
public String getUIClassID() {
return uiClassID;
}
@@ -362,10 +359,9 @@
*
* @return an AccessibleJToggleButton that serves as the
* AccessibleContext of this JToggleButton
- * @beaninfo
- * expert: true
- * description: The AccessibleContext associated with this ToggleButton.
*/
+ @BeanProperty(bound = false, expert = true, description
+ = "The AccessibleContext associated with this ToggleButton.")
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJToggleButton();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JToolBar.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JToolBar.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,31 +22,26 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
-import java.awt.Color;
import java.awt.Component;
-import java.awt.ComponentOrientation;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.LayoutManager2;
-import java.awt.event.*;
-import java.beans.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
-import javax.swing.border.Border;
import javax.swing.plaf.*;
import javax.accessibility.*;
import java.io.Serializable;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
-import java.util.Hashtable;
-
/**
* <code>JToolBar</code> provides a component that is useful for
@@ -78,15 +73,13 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer true
- * description: A component which displays commonly used controls or Actions.
- *
* @author Georges Saab
* @author Jeff Shapiro
* @see Action
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A component which displays commonly used controls or Actions.")
+@SwingContainer
@SuppressWarnings("serial") // Same-version serialization only
public class JToolBar extends JComponent implements SwingConstants, Accessible
{
@@ -175,12 +168,9 @@
*
* @param ui the <code>ToolBarUI</code> L&F object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(ToolBarUI ui) {
super.setUI(ui);
}
@@ -212,6 +202,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -266,11 +257,9 @@
* @param m an <code>Insets</code> object that defines the space
* between the border and the buttons
* @see Insets
- * @beaninfo
- * description: The margin between the tool bar's border and contents
- * bound: true
- * expert: true
*/
+ @BeanProperty(expert = true, description
+ = "The margin between the tool bar's border and contents")
public void setMargin(Insets m)
{
Insets old = margin;
@@ -317,11 +306,9 @@
*
* @param b if true, the border is painted
* @see #isBorderPainted
- * @beaninfo
- * description: Does the tool bar paint its borders?
- * bound: true
- * expert: true
*/
+ @BeanProperty(expert = true, description
+ = "Does the tool bar paint its borders?")
public void setBorderPainted(boolean b)
{
if ( paintBorder != b )
@@ -376,11 +363,9 @@
* @param b if <code>true</code>, the tool bar can be moved;
* <code>false</code> otherwise
* @see #isFloatable
- * @beaninfo
- * description: Can the tool bar be made to float by the user?
- * bound: true
- * preferred: true
*/
+ @BeanProperty(preferred = true, description
+ = "Can the tool bar be made to float by the user?")
public void setFloatable( boolean b )
{
if ( floatable != b )
@@ -418,13 +403,11 @@
* @exception IllegalArgumentException if orientation is neither
* <code>HORIZONTAL</code> nor <code>VERTICAL</code>
* @see #getOrientation
- * @beaninfo
- * description: The current orientation of the tool bar
- * bound: true
- * preferred: true
- * enum: HORIZONTAL SwingConstants.HORIZONTAL
- * VERTICAL SwingConstants.VERTICAL
*/
+ @BeanProperty(preferred = true, enumerationValues = {
+ "SwingConstants.HORIZONTAL",
+ "SwingConstants.VERTICAL"}, description
+ = "The current orientation of the tool bar")
public void setOrientation( int o )
{
checkOrientation( o );
@@ -451,12 +434,9 @@
*
* @param rollover true for rollover toolbar buttons; otherwise false
* @since 1.4
- * @beaninfo
- * bound: true
- * preferred: true
- * attribute: visualUpdate true
- * description: Will draw rollover button borders in the toolbar.
*/
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "Will draw rollover button borders in the toolbar.")
public void setRollover(boolean rollover) {
putClientProperty("JToolBar.isRollover",
rollover ? Boolean.TRUE : Boolean.FALSE);
@@ -836,6 +816,7 @@
* @return an AccessibleJToolBar that serves as the
* AccessibleContext of this JToolBar
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJToolBar();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JToolTip.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JToolTip.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,9 +25,11 @@
package javax.swing;
+
import javax.swing.plaf.*;
import javax.accessibility.*;
+import java.beans.BeanProperty;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
@@ -121,11 +123,9 @@
* The string <code>tipText</code> may be <code>null</code>.
*
* @param tipText the <code>String</code> to display
- * @beaninfo
- * preferred: true
- * bound: true
- * description: Sets the text of the tooltip
*/
+ @BeanProperty(preferred = true, description
+ = "Sets the text of the tooltip")
public void setTipText(String tipText) {
String oldValue = this.tipText;
this.tipText = tipText;
@@ -156,10 +156,9 @@
*
* @param c the <code>JComponent</code> being described
* @see JComponent#createToolTip
- * @beaninfo
- * bound: true
- * description: Sets the component that the tooltip describes.
*/
+ @BeanProperty(description
+ = "Sets the component that the tooltip describes.")
public void setComponent(JComponent c) {
JComponent oldValue = this.component;
--- a/jdk/src/java.desktop/share/classes/javax/swing/JTree.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JTree.java Thu Oct 22 11:14:00 2015 -0700
@@ -22,12 +22,15 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing;
import java.awt.*;
import java.awt.event.*;
-import java.beans.*;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
+import java.beans.ConstructorProperties;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
import java.io.*;
import java.util.*;
import javax.swing.event.*;
@@ -35,11 +38,11 @@
import javax.swing.tree.*;
import javax.swing.text.Position;
import javax.accessibility.*;
+
import sun.swing.SwingUtilities2;
import sun.swing.SwingUtilities2.Section;
import static sun.swing.SwingUtilities2.Section.*;
-
/**
* <a name="jtree_description"></a>
* A control that displays a set of hierarchical data as an outline.
@@ -134,15 +137,14 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*</p>
- * @beaninfo
- * attribute: isContainer false
- * description: A component that displays a set of hierarchical data as an outline.
*
* @author Rob Davis
* @author Ray Ryan
* @author Scott Violet
* @since 1.2
*/
+@JavaBean(defaultProperty = "UI", description = "A component that displays a set of hierarchical data as an outline.")
+@SwingContainer(false)
@SuppressWarnings("serial")
public class JTree extends JComponent implements Scrollable, Accessible
{
@@ -687,12 +689,9 @@
*
* @param ui the <code>TreeUI</code> L&F object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(TreeUI ui) {
if (this.ui != ui) {
settingUI = true;
@@ -728,6 +727,7 @@
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
*/
+ @BeanProperty(bound = false)
public String getUIClassID() {
return uiClassID;
}
@@ -750,11 +750,9 @@
* This is a bound property.
*
* @param x the <code>TreeCellRenderer</code> that is to render each cell
- * @beaninfo
- * bound: true
- * description: The TreeCellRenderer that will be used to draw
- * each cell.
*/
+ @BeanProperty(description
+ = "The TreeCellRenderer that will be used to draw each cell.")
public void setCellRenderer(TreeCellRenderer x) {
TreeCellRenderer oldValue = cellRenderer;
@@ -771,10 +769,9 @@
* This is a bound property.
*
* @param flag a boolean value, true if the tree is editable
- * @beaninfo
- * bound: true
- * description: Whether the tree is editable.
*/
+ @BeanProperty(description
+ = "Whether the tree is editable.")
public void setEditable(boolean flag) {
boolean oldValue = this.editable;
@@ -806,11 +803,9 @@
* This is a bound property.
*
* @param cellEditor the <code>TreeCellEditor</code> to use
- * @beaninfo
- * bound: true
- * description: The cell editor. A null value implies the tree
- * cannot be edited.
*/
+ @BeanProperty(description
+ = "The cell editor. A null value implies the tree cannot be edited.")
public void setCellEditor(TreeCellEditor cellEditor) {
TreeCellEditor oldEditor = this.cellEditor;
@@ -844,10 +839,9 @@
* This is a bound property.
*
* @param newModel the <code>TreeModel</code> that is to provide the data
- * @beaninfo
- * bound: true
- * description: The TreeModel that will provide the data.
*/
+ @BeanProperty(description
+ = "The TreeModel that will provide the data.")
public void setModel(TreeModel newModel) {
clearSelection();
@@ -903,11 +897,9 @@
*
* @param rootVisible true if the root node of the tree is to be displayed
* @see #rootVisible
- * @beaninfo
- * bound: true
- * description: Whether or not the root node
- * from the TreeModel is visible.
*/
+ @BeanProperty(description
+ = "Whether or not the root node from the TreeModel is visible.")
public void setRootVisible(boolean rootVisible) {
boolean oldValue = this.rootVisible;
@@ -932,11 +924,9 @@
* otherwise, <code>false</code>
* @see #showsRootHandles
* @see #getShowsRootHandles
- * @beaninfo
- * bound: true
- * description: Whether the node handles are to be
- * displayed.
*/
+ @BeanProperty(description
+ = "Whether the node handles are to be displayed.")
public void setShowsRootHandles(boolean newValue) {
boolean oldValue = showsRootHandles;
TreeModel model = getModel();
@@ -970,10 +960,9 @@
* This is a bound property.
*
* @param rowHeight the height of each cell, in pixels
- * @beaninfo
- * bound: true
- * description: The height of each cell.
*/
+ @BeanProperty(description
+ = "The height of each cell.")
public void setRowHeight(int rowHeight)
{
int oldValue = this.rowHeight;
@@ -1001,6 +990,7 @@
*
* @return true if the height of each row is a fixed size
*/
+ @BeanProperty(bound = false)
public boolean isFixedRowHeight()
{
return (rowHeight > 0);
@@ -1015,11 +1005,9 @@
*
* @param newValue true to suggest a large model to the UI
* @see #largeModel
- * @beaninfo
- * bound: true
- * description: Whether the UI should use a
- * large model.
*/
+ @BeanProperty(description
+ = "Whether the UI should use a large model.")
public void setLargeModel(boolean newValue) {
boolean oldValue = largeModel;
@@ -1048,12 +1036,10 @@
* @param newValue true means that <code>stopCellEditing</code> is invoked
* when editing is interrupted, and data is saved; false means that
* <code>cancelCellEditing</code> is invoked, and changes are lost
- * @beaninfo
- * bound: true
- * description: Determines what happens when editing is interrupted,
- * selecting another node in the tree, a change in the
- * tree's data, or some other means.
*/
+ @BeanProperty(description
+ = "Determines what happens when editing is interrupted, selecting another node in the tree, "
+ + "a change in the tree's data, or some other means.")
public void setInvokesStopCellEditing(boolean newValue) {
boolean oldValue = invokesStopCellEditing;
@@ -1090,11 +1076,9 @@
* @param newValue <code>false</code> to disable scrolling on expansion;
* <code>true</code> to enable it
* @see #getScrollsOnExpand
- *
- * @beaninfo
- * bound: true
- * description: Indicates if a node descendant should be scrolled when expanded.
*/
+ @BeanProperty(description
+ = "Indicates if a node descendant should be scrolled when expanded.")
public void setScrollsOnExpand(boolean newValue) {
boolean oldValue = scrollsOnExpand;
@@ -1121,10 +1105,9 @@
*
* @param clickCount the number of mouse clicks to get a node expanded or closed
* @since 1.3
- * @beaninfo
- * bound: true
- * description: Number of clicks before a node will expand/collapse.
*/
+ @BeanProperty(description
+ = "Number of clicks before a node will expand/collapse.")
public void setToggleClickCount(int clickCount) {
int oldCount = toggleClickCount;
@@ -1160,11 +1143,9 @@
* @param newValue the new value for <code>expandsSelectedPaths</code>
*
* @since 1.3
- * @beaninfo
- * bound: true
- * description: Indicates whether changes to the selection should make
- * the parent of the path visible.
*/
+ @BeanProperty(description
+ = "Indicates whether changes to the selection should make the parent of the path visible.")
public void setExpandsSelectedPaths(boolean newValue) {
boolean oldValue = expandsSelectedPaths;
@@ -1212,11 +1193,9 @@
* @see #setTransferHandler
* @see TransferHandler
* @since 1.4
- *
- * @beaninfo
- * description: determines whether automatic drag handling is enabled
- * bound: false
*/
+ @BeanProperty(bound = false, description
+ = "determines whether automatic drag handling is enabled")
public void setDragEnabled(boolean b) {
checkDragEnabled(b);
dragEnabled = b;
@@ -1505,6 +1484,7 @@
* @see TransferHandler#canImport(TransferHandler.TransferSupport)
* @since 1.6
*/
+ @BeanProperty(bound = false)
public final DropLocation getDropLocation() {
return dropLocation;
}
@@ -1635,6 +1615,7 @@
*
* @return the number of viewable nodes
*/
+ @BeanProperty(bound = false)
public int getRowCount() {
TreeUI tree = getUI();
@@ -1677,10 +1658,9 @@
*
* @param newPath the new lead path
* @since 1.3
- * @beaninfo
- * bound: true
- * description: Lead selection path
*/
+ @BeanProperty(description
+ = "Lead selection path")
public void setLeadSelectionPath(TreePath newPath) {
TreePath oldValue = leadPath;
@@ -1705,10 +1685,9 @@
*
* @param newPath the new anchor path
* @since 1.3
- * @beaninfo
- * bound: true
- * description: Anchor selection path
*/
+ @BeanProperty(description
+ = "Anchor selection path")
public void setAnchorSelectionPath(TreePath newPath) {
TreePath oldValue = anchorPath;
@@ -1828,6 +1807,7 @@
* <code>null</code> if nothing is selected
* @see TreePath#getLastPathComponent
*/
+ @BeanProperty(bound = false)
public Object getLastSelectedPathComponent() {
TreePath selPath = getSelectionModel().getSelectionPath();
@@ -1894,6 +1874,7 @@
*
* @return the number of nodes selected
*/
+ @BeanProperty(bound = false)
public int getSelectionCount() {
return selectionModel.getSelectionCount();
}
@@ -1904,6 +1885,7 @@
*
* @return the smallest selected row
*/
+ @BeanProperty(bound = false)
public int getMinSelectionRow() {
return getSelectionModel().getMinSelectionRow();
}
@@ -1914,6 +1896,7 @@
*
* @return the largest selected row
*/
+ @BeanProperty(bound = false)
public int getMaxSelectionRow() {
return getSelectionModel().getMaxSelectionRow();
}
@@ -1925,6 +1908,7 @@
* where 0 is the first row in the display; or -1
* if <code>leadPath</code> is <code>null</code>
*/
+ @BeanProperty(bound = false)
public int getLeadSelectionRow() {
TreePath leadPath = getLeadSelectionPath();
@@ -2198,6 +2182,7 @@
* <code>null</code> if <code>row < 0</code>
* or <code>row >= getRowCount()</code>
*/
+ @BeanProperty(bound = false)
public TreePath getPathForRow(int row) {
TreeUI tree = getUI();
@@ -2368,6 +2353,7 @@
* @return true if the user is currently editing a node
* @see #getSelectionPath
*/
+ @BeanProperty(bound = false)
public boolean isEditing() {
TreeUI tree = getUI();
@@ -2430,6 +2416,7 @@
*
* @return the <code>TreePath</code> for the node being edited
*/
+ @BeanProperty(bound = false)
public TreePath getEditingPath() {
TreeUI tree = getUI();
@@ -2457,10 +2444,9 @@
* @param selectionModel the <code>TreeSelectionModel</code> to use,
* or <code>null</code> to disable selections
* @see TreeSelectionModel
- * @beaninfo
- * bound: true
- * description: The tree's selection model.
*/
+ @BeanProperty(description
+ = "The tree's selection model.")
public void setSelectionModel(TreeSelectionModel selectionModel) {
if(selectionModel == null)
selectionModel = EmptySelectionModel.sharedInstance();
@@ -2700,6 +2686,7 @@
*
* @return true if the selection is currently empty
*/
+ @BeanProperty(bound = false)
public boolean isSelectionEmpty() {
return getSelectionModel().isSelectionEmpty();
}
@@ -2738,6 +2725,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public TreeExpansionListener[] getTreeExpansionListeners() {
return listenerList.getListeners(TreeExpansionListener.class);
}
@@ -2770,6 +2758,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public TreeWillExpandListener[] getTreeWillExpandListeners() {
return listenerList.getListeners(TreeWillExpandListener.class);
}
@@ -2929,6 +2918,7 @@
* array if no listeners have been added
* @since 1.4
*/
+ @BeanProperty(bound = false)
public TreeSelectionListener[] getTreeSelectionListeners() {
return listenerList.getListeners(TreeSelectionListener.class);
}
@@ -2980,10 +2970,9 @@
* This is a bound property.
*
* @param newCount the number of rows to display
- * @beaninfo
- * bound: true
- * description: The number of rows that are to be displayed.
*/
+ @BeanProperty(description
+ = "The number of rows that are to be displayed.")
public void setVisibleRowCount(int newCount) {
int oldCount = visibleRowCount;
@@ -3459,6 +3448,7 @@
*
* @return a <code>Dimension</code> object containing the preferred size
*/
+ @BeanProperty(bound = false)
public Dimension getPreferredScrollableViewportSize() {
int width = getPreferredSize().width;
int visRows = getVisibleRowCount();
@@ -3565,6 +3555,7 @@
* @return whether the tree should track the width of the viewport
* @see Scrollable#getScrollableTracksViewportWidth
*/
+ @BeanProperty(bound = false)
public boolean getScrollableTracksViewportWidth() {
Container parent = SwingUtilities.getUnwrappedParent(this);
if (parent instanceof JViewport) {
@@ -3582,6 +3573,7 @@
* @return whether the tree should track the height of the viewport
* @see Scrollable#getScrollableTracksViewportHeight
*/
+ @BeanProperty(bound = false)
public boolean getScrollableTracksViewportHeight() {
Container parent = SwingUtilities.getUnwrappedParent(this);
if (parent instanceof JViewport) {
@@ -4160,6 +4152,7 @@
* @return an AccessibleJTree that serves as the
* AccessibleContext of this JTree
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJTree();
--- a/jdk/src/java.desktop/share/classes/javax/swing/JViewport.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JViewport.java Thu Oct 22 11:14:00 2015 -0700
@@ -28,6 +28,7 @@
import java.awt.*;
import java.awt.event.*;
import java.awt.peer.ComponentPeer;
+import java.beans.BeanProperty;
import java.beans.Transient;
import javax.swing.plaf.ViewportUI;
@@ -300,13 +301,10 @@
*
* @param ui the <code>ViewportUI</code> L&F object
* @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
* @since 1.3
*/
+ @BeanProperty(hidden = true, visualUpdate = true, description
+ = "The UI object that implements the Component's LookAndFeel.")
public void setUI(ViewportUI ui) {
super.setUI(ui);
}
@@ -588,9 +586,8 @@
* @param insets the <code>Insets</code> object which can be reused
* @return this viewports inset values
* @see #getInsets
- * @beaninfo
- * expert: true
*/
+ @BeanProperty(expert = true)
public final Insets getInsets(Insets insets) {
insets.left = insets.top = insets.right = insets.bottom = 0;
return insets;
@@ -861,15 +858,13 @@
* @see #BACKINGSTORE_SCROLL_MODE
* @see #SIMPLE_SCROLL_MODE
*
- * @beaninfo
- * bound: false
- * description: Method of moving contents for incremental scrolls.
- * enum: BLIT_SCROLL_MODE JViewport.BLIT_SCROLL_MODE
- * BACKINGSTORE_SCROLL_MODE JViewport.BACKINGSTORE_SCROLL_MODE
- * SIMPLE_SCROLL_MODE JViewport.SIMPLE_SCROLL_MODE
- *
* @since 1.3
*/
+ @BeanProperty(bound = false, enumerationValues = {
+ "JViewport.BLIT_SCROLL_MODE",
+ "JViewport.BACKINGSTORE_SCROLL_MODE",
+ "JViewport.SIMPLE_SCROLL_MODE"}, description
+ = "Method of moving contents for incremental scrolls.")
public void setScrollMode(int mode) {
scrollMode = mode;
backingStore = mode == BACKINGSTORE_SCROLL_MODE;
--- a/jdk/src/java.desktop/share/classes/javax/swing/JWindow.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JWindow.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -26,10 +26,8 @@
import java.awt.*;
import java.awt.event.*;
-import java.beans.PropertyChangeListener;
-import java.util.Locale;
-import java.util.Vector;
-import java.io.Serializable;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import javax.accessibility.*;
@@ -83,14 +81,11 @@
*
* @see JRootPane
*
- * @beaninfo
- * attribute: isContainer true
- * attribute: containerDelegate getContentPane
- * description: A toplevel window which has no system border or controls.
- *
* @author David Kloba
* @since 1.2
*/
+@JavaBean(defaultProperty = "accessibleContext", description = "A toplevel window which has no system border or controls.")
+@SwingContainer(delegate = "getContentPane")
@SuppressWarnings("serial")
public class JWindow extends Window implements Accessible,
RootPaneContainer,
@@ -328,12 +323,9 @@
* @see #getTransferHandler
* @see java.awt.Component#setDropTarget
* @since 1.6
- *
- * @beaninfo
- * bound: true
- * hidden: true
- * description: Mechanism for transfer of data into the component
*/
+ @BeanProperty(hidden = true, description
+ = "Mechanism for transfer of data into the component")
public void setTransferHandler(TransferHandler newHandler) {
TransferHandler oldHandler = transferHandler;
transferHandler = newHandler;
@@ -376,10 +368,9 @@
* @see #setLayout
* @see #isRootPaneCheckingEnabled
* @see javax.swing.RootPaneContainer
- * @beaninfo
- * hidden: true
- * description: Whether the add and setLayout methods are forwarded
*/
+ @BeanProperty(hidden = true, description
+ = "Whether the add and setLayout methods are forwarded")
protected void setRootPaneCheckingEnabled(boolean enabled) {
rootPaneCheckingEnabled = enabled;
}
@@ -463,6 +454,8 @@
* @see #setRootPane
* @see RootPaneContainer#getRootPane
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "the RootPane object for this window.")
public JRootPane getRootPane() {
return rootPane;
}
@@ -474,10 +467,6 @@
*
* @param root the new <code>rootPane</code> property
* @see #getRootPane
- *
- * @beaninfo
- * hidden: true
- * description: the RootPane object for this window.
*/
protected void setRootPane(JRootPane root) {
if(rootPane != null) {
@@ -519,12 +508,9 @@
* exception) if the content pane parameter is <code>null</code>
* @see #getContentPane
* @see RootPaneContainer#setContentPane
- *
- * @beaninfo
- * hidden: true
- * description: The client area of the window where child
- * components are normally inserted.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "The client area of the window where child components are normally inserted.")
public void setContentPane(Container contentPane) {
getRootPane().setContentPane(contentPane);
}
@@ -550,11 +536,9 @@
* exception) if the content pane parameter is <code>null</code>
* @see #getLayeredPane
* @see RootPaneContainer#setLayeredPane
- *
- * @beaninfo
- * hidden: true
- * description: The pane which holds the various window layers.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "The pane which holds the various window layers.")
public void setLayeredPane(JLayeredPane layeredPane) {
getRootPane().setLayeredPane(layeredPane);
}
@@ -577,11 +561,9 @@
*
* @see #getGlassPane
* @see RootPaneContainer#setGlassPane
- *
- * @beaninfo
- * hidden: true
- * description: A transparent pane used for menu rendering.
*/
+ @BeanProperty(bound = false, hidden = true, description
+ = "A transparent pane used for menu rendering.")
public void setGlassPane(Component glassPane) {
getRootPane().setGlassPane(glassPane);
}
@@ -591,6 +573,7 @@
*
* @since 1.6
*/
+ @BeanProperty(bound = false)
public Graphics getGraphics() {
JComponent.getGraphicsInvoked(this);
return super.getGraphics();
--- a/jdk/src/java.desktop/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
package javax.swing.colorchooser;
import java.awt.*;
+import java.beans.BeanProperty;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.*;
@@ -222,13 +223,10 @@
* <p>The default value is {@code true}.
*
* @param b true if the transparency of a color can be selected
- *
- * @beaninfo
- * bound: true
- * description: Sets the transparency of a color selection on or off.
- *
* @see #isColorTransparencySelectionEnabled()
*/
+ @BeanProperty(description
+ = "Sets the transparency of a color selection on or off.")
public void setColorTransparencySelectionEnabled(boolean b){
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/table/JTableHeader.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/table/JTableHeader.java Thu Oct 22 11:14:00 2015 -0700
@@ -22,7 +22,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing.table;
import sun.swing.table.DefaultTableCellHeaderRenderer;
@@ -36,14 +35,13 @@
import javax.swing.plaf.*;
import javax.accessibility.*;
+import java.beans.BeanProperty;
import java.beans.PropertyChangeListener;
import java.beans.Transient;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
-
/**
* This is the object which manages the header of the <code>JTable</code>.
* <p>
@@ -167,10 +165,9 @@
/**
* Sets the table associated with this header.
* @param table the new table
- * @beaninfo
- * bound: true
- * description: The table associated with this header.
*/
+ @BeanProperty(description
+ = "The table associated with this header.")
public void setTable(JTable table) {
JTable old = this.table;
this.table = table;
@@ -191,10 +188,9 @@
* @param reorderingAllowed true if the table view should allow
* reordering; otherwise false
* @see #getReorderingAllowed
- * @beaninfo
- * bound: true
- * description: Whether the user can drag column headers to reorder columns.
*/
+ @BeanProperty(description
+ = "Whether the user can drag column headers to reorder columns.")
public void setReorderingAllowed(boolean reorderingAllowed) {
boolean old = this.reorderingAllowed;
this.reorderingAllowed = reorderingAllowed;
@@ -219,10 +215,9 @@
* @param resizingAllowed true if table view should allow
* resizing
* @see #getResizingAllowed
- * @beaninfo
- * bound: true
- * description: Whether the user can resize columns by dragging between headers.
*/
+ @BeanProperty(description
+ = "Whether the user can resize columns by dragging between headers.")
public void setResizingAllowed(boolean resizingAllowed) {
boolean old = this.resizingAllowed;
this.resizingAllowed = resizingAllowed;
@@ -516,10 +511,9 @@
* @exception IllegalArgumentException
* if <code>newModel</code> is <code>null</code>
* @see #getColumnModel
- * @beaninfo
- * bound: true
- * description: The object governing the way columns appear in the view.
*/
+ @BeanProperty(description
+ = "The object governing the way columns appear in the view.")
public void setColumnModel(TableColumnModel columnModel) {
if (columnModel == null) {
throw new IllegalArgumentException("Cannot set a null ColumnModel");
--- a/jdk/src/java.desktop/share/classes/javax/swing/table/TableColumn.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/table/TableColumn.java Thu Oct 22 11:14:00 2015 -0700
@@ -26,6 +26,7 @@
package javax.swing.table;
import java.awt.Component;
+import java.beans.BeanProperty;
import java.beans.PropertyChangeListener;
import java.io.Serializable;
@@ -308,10 +309,9 @@
* <code>TableColumn</code>. As the <code>TableColumn</code>
* is moved around in the view the model index remains constant.
* @param modelIndex the new modelIndex
- * @beaninfo
- * bound: true
- * description: The model index.
*/
+ @BeanProperty(description
+ = "The model index.")
public void setModelIndex(int modelIndex) {
int old = this.modelIndex;
this.modelIndex = modelIndex;
@@ -335,10 +335,9 @@
*
* @param identifier an identifier for this column
* @see #getIdentifier
- * @beaninfo
- * bound: true
- * description: A unique identifier for this column.
*/
+ @BeanProperty(description
+ = "A unique identifier for this column.")
public void setIdentifier(Object identifier) {
Object old = this.identifier;
this.identifier = identifier;
@@ -369,10 +368,9 @@
* is <code>null</code>.
* @param headerValue the new headerValue
* @see #getHeaderValue
- * @beaninfo
- * bound: true
- * description: The text to be used by the header renderer.
*/
+ @BeanProperty(description
+ = "The text to be used by the header renderer.")
public void setHeaderValue(Object headerValue) {
Object old = this.headerValue;
this.headerValue = headerValue;
@@ -405,10 +403,9 @@
* @param headerRenderer the new headerRenderer
*
* @see #getHeaderRenderer
- * @beaninfo
- * bound: true
- * description: The header renderer.
*/
+ @BeanProperty(description
+ = "The header renderer.")
public void setHeaderRenderer(TableCellRenderer headerRenderer) {
TableCellRenderer old = this.headerRenderer;
this.headerRenderer = headerRenderer;
@@ -437,10 +434,9 @@
*
* @param cellRenderer the new cellRenderer
* @see #getCellRenderer
- * @beaninfo
- * bound: true
- * description: The renderer to use for cell values.
*/
+ @BeanProperty(description
+ = "The renderer to use for cell values.")
public void setCellRenderer(TableCellRenderer cellRenderer) {
TableCellRenderer old = this.cellRenderer;
this.cellRenderer = cellRenderer;
@@ -471,10 +467,9 @@
*
* @param cellEditor the new cellEditor
* @see #getCellEditor
- * @beaninfo
- * bound: true
- * description: The editor to use for cell values.
*/
+ @BeanProperty(description
+ = "The editor to use for cell values.")
public void setCellEditor(TableCellEditor cellEditor){
TableCellEditor old = this.cellEditor;
this.cellEditor = cellEditor;
@@ -515,10 +510,9 @@
* @see #setMaxWidth
* @see #setPreferredWidth
* @see JTable#doLayout()
- * @beaninfo
- * bound: true
- * description: The width of the column.
*/
+ @BeanProperty(description
+ = "The width of the column.")
public void setWidth(int width) {
int old = this.width;
this.width = Math.min(Math.max(width, minWidth), maxWidth);
@@ -549,10 +543,9 @@
* @param preferredWidth the new preferred width
* @see #getPreferredWidth
* @see JTable#doLayout()
- * @beaninfo
- * bound: true
- * description: The preferred width of the column.
*/
+ @BeanProperty(description
+ = "The preferred width of the column.")
public void setPreferredWidth(int preferredWidth) {
int old = this.preferredWidth;
this.preferredWidth = Math.min(Math.max(preferredWidth, minWidth), maxWidth);
@@ -588,10 +581,9 @@
* @see #getMinWidth
* @see #setPreferredWidth
* @see #setMaxWidth
- * @beaninfo
- * bound: true
- * description: The minimum width of the column.
*/
+ @BeanProperty(description
+ = "The minimum width of the column.")
public void setMinWidth(int minWidth) {
int old = this.minWidth;
this.minWidth = Math.max(Math.min(minWidth, maxWidth), 0);
@@ -633,10 +625,9 @@
* @see #getMaxWidth
* @see #setPreferredWidth
* @see #setMinWidth
- * @beaninfo
- * bound: true
- * description: The maximum width of the column.
*/
+ @BeanProperty(description
+ = "The maximum width of the column.")
public void setMaxWidth(int maxWidth) {
int old = this.maxWidth;
this.maxWidth = Math.max(minWidth, maxWidth);
@@ -667,10 +658,9 @@
*
* @param isResizable if true, resizing is allowed; otherwise false
* @see #getResizable
- * @beaninfo
- * bound: true
- * description: Whether or not this column can be resized.
*/
+ @BeanProperty(description
+ = "Whether or not this column can be resized.")
public void setResizable(boolean isResizable) {
boolean old = this.isResizable;
this.isResizable = isResizable;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java Thu Oct 22 11:14:00 2015 -0700
@@ -29,6 +29,8 @@
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.beans.JavaBean;
+import java.beans.BeanProperty;
import java.beans.Transient;
import java.util.HashMap;
import java.util.Hashtable;
@@ -276,9 +278,6 @@
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
- * @beaninfo
- * attribute: isContainer false
- *
* @author Timothy Prinzing
* @author Igor Kushnirskiy (printing support)
* @see Document
@@ -291,6 +290,8 @@
* @see View
* @see ViewFactory
*/
+@JavaBean(defaultProperty = "UI")
+@SwingContainer(false)
@SuppressWarnings("serial") // Same-version serialization only
public abstract class JTextComponent extends JComponent implements Scrollable, Accessible
{
@@ -375,6 +376,7 @@
*
* @since 1.4
*/
+ @BeanProperty(bound = false)
public CaretListener[] getCaretListeners() {
return listenerList.getListeners(CaretListener.class);
}
@@ -409,11 +411,9 @@
*
* @param doc the document to display/edit
* @see #getDocument
- * @beaninfo
- * description: the text document model
- * bound: true
- * expert: true
*/
+ @BeanProperty(expert = true, description
+ = "the text document model")
public void setDocument(Document doc) {
Document old = model;
@@ -496,6 +496,7 @@
*
* @return the command list
*/
+ @BeanProperty(bound = false)
public Action[] getActions() {
return getUI().getEditorKit(this).getActions();
}
@@ -511,10 +512,9 @@
* A PropertyChange event ("margin") is sent to all listeners.
*
* @param m the space between the border and the text
- * @beaninfo
- * description: desired space between the border and text area
- * bound: true
*/
+ @BeanProperty(description
+ = "desired space between the border and text area")
public void setMargin(Insets m) {
Insets old = margin;
margin = m;
@@ -576,11 +576,9 @@
*
* @param c the caret
* @see #getCaret
- * @beaninfo
- * description: the caret used to select/navigate
- * bound: true
- * expert: true
*/
+ @BeanProperty(expert = true, description
+ = "the caret used to select/navigate")
public void setCaret(Caret c) {
if (caret != null) {
caret.removeChangeListener(caretEvent);
@@ -614,11 +612,9 @@
*
* @param h the highlighter
* @see #getHighlighter
- * @beaninfo
- * description: object responsible for background highlights
- * bound: true
- * expert: true
*/
+ @BeanProperty(expert = true, description
+ = "object responsible for background highlights")
public void setHighlighter(Highlighter h) {
if (highlighter != null) {
highlighter.deinstall(this);
@@ -640,10 +636,9 @@
*
* @param map the keymap
* @see #getKeymap
- * @beaninfo
- * description: set of key event to action bindings to use
- * bound: true
*/
+ @BeanProperty(description
+ = "set of key event to action bindings to use")
public void setKeymap(Keymap map) {
Keymap old = keymap;
keymap = map;
@@ -679,11 +674,9 @@
* @see #setTransferHandler
* @see TransferHandler
* @since 1.4
- *
- * @beaninfo
- * description: determines whether automatic drag handling is enabled
- * bound: false
*/
+ @BeanProperty(bound = false, description
+ = "determines whether automatic drag handling is enabled")
public void setDragEnabled(boolean b) {
checkDragEnabled(b);
dragEnabled = b;
@@ -955,6 +948,7 @@
* @see TransferHandler#canImport(TransferHandler.TransferSupport)
* @since 1.6
*/
+ @BeanProperty(bound = false)
public final DropLocation getDropLocation() {
return dropLocation;
}
@@ -1220,11 +1214,9 @@
*
* @param c the color
* @see #getCaretColor
- * @beaninfo
- * description: the color used to render the caret
- * bound: true
- * preferred: true
*/
+ @BeanProperty(preferred = true, description
+ = "the color used to render the caret")
public void setCaretColor(Color c) {
Color old = caretColor;
caretColor = c;
@@ -1249,11 +1241,9 @@
*
* @param c the color
* @see #getSelectionColor
- * @beaninfo
- * description: color used to render selection background
- * bound: true
- * preferred: true
*/
+ @BeanProperty(preferred = true, description
+ = "color used to render selection background")
public void setSelectionColor(Color c) {
Color old = selectionColor;
selectionColor = c;
@@ -1278,11 +1268,9 @@
*
* @param c the color
* @see #getSelectedTextColor
- * @beaninfo
- * description: color used to render selected text
- * bound: true
- * preferred: true
*/
+ @BeanProperty(preferred = true, description
+ = "color used to render selected text")
public void setSelectedTextColor(Color c) {
Color old = selectedTextColor;
selectedTextColor = c;
@@ -1306,11 +1294,9 @@
*
* @param c the color
* @see #getDisabledTextColor
- * @beaninfo
- * description: color used to render disabled text
- * bound: true
- * preferred: true
*/
+ @BeanProperty(preferred = true, description
+ = "color used to render disabled text")
public void setDisabledTextColor(Color c) {
Color old = disabledTextColor;
disabledTextColor = c;
@@ -1535,10 +1521,9 @@
*
* @param aKey the key
* @see #getFocusAccelerator
- * @beaninfo
- * description: accelerator character used to grab focus
- * bound: true
*/
+ @BeanProperty(description
+ = "accelerator character used to grab focus")
public void setFocusAccelerator(char aKey) {
aKey = Character.toUpperCase(aKey);
char old = focusAccelerator;
@@ -1632,9 +1617,9 @@
* @exception IllegalArgumentException if the value supplied
* for <code>position</code> is less than zero or greater
* than the component's text length
- * @beaninfo
- * description: the caret position
*/
+ @BeanProperty(bound = false, description
+ = "the caret position")
public void setCaretPosition(int position) {
Document doc = getDocument();
if (doc != null) {
@@ -1672,9 +1657,9 @@
* @param t the new text to be set
* @see #getText
* @see DefaultCaret
- * @beaninfo
- * description: the text of this component
*/
+ @BeanProperty(bound = false, description
+ = "the text of this component")
public void setText(String t) {
try {
Document doc = getDocument();
@@ -1724,6 +1709,7 @@
* have a valid mapping into the document for some reason
* @see #setText
*/
+ @BeanProperty(bound = false)
public String getSelectedText() {
String txt = null;
int p0 = Math.min(caret.getDot(), caret.getMark());
@@ -1758,10 +1744,9 @@
*
* @param b the boolean to be set
* @see #isEditable
- * @beaninfo
- * description: specifies if the text can be edited
- * bound: true
*/
+ @BeanProperty(description
+ = "specifies if the text can be edited")
public void setEditable(boolean b) {
if (b != editable) {
boolean oldVal = editable;
@@ -1795,9 +1780,9 @@
* implementation which is where the actual selection is maintained.
*
* @param selectionStart the start position of the text ≥ 0
- * @beaninfo
- * description: starting location of the selection.
*/
+ @BeanProperty(bound = false, description
+ = "starting location of the selection.")
public void setSelectionStart(int selectionStart) {
/* Route through select method to enforce consistent policy
* between selectionStart and selectionEnd.
@@ -1828,9 +1813,9 @@
* implementation which is where the actual selection is maintained.
*
* @param selectionEnd the end position of the text ≥ 0
- * @beaninfo
- * description: ending location of the selection.
*/
+ @BeanProperty(bound = false, description
+ = "ending location of the selection.")
public void setSelectionEnd(int selectionEnd) {
/* Route through select method to enforce consistent policy
* between selectionStart and selectionEnd.
@@ -1946,6 +1931,7 @@
* @return the <code>preferredSize</code> of a <code>JViewport</code>
* whose view is this <code>Scrollable</code>
*/
+ @BeanProperty(bound = false)
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
@@ -2029,6 +2015,7 @@
* @return true if a viewport should force the <code>Scrollable</code>s
* width to match its own
*/
+ @BeanProperty(bound = false)
public boolean getScrollableTracksViewportWidth() {
Container parent = SwingUtilities.getUnwrappedParent(this);
if (parent instanceof JViewport) {
@@ -2050,6 +2037,7 @@
* @return true if a viewport should force the Scrollables height
* to match its own
*/
+ @BeanProperty(bound = false)
public boolean getScrollableTracksViewportHeight() {
Container parent = SwingUtilities.getUnwrappedParent(this);
if (parent instanceof JViewport) {
@@ -2484,6 +2472,7 @@
* <code>AccessibleContext</code> of this
* <code>JTextComponent</code>
*/
+ @BeanProperty(bound = false)
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleJTextComponent();
@@ -4539,6 +4528,7 @@
//
// Overrides this method to become an active input method client.
//
+ @BeanProperty(bound = false)
public InputMethodRequests getInputMethodRequests() {
if (inputMethodRequestsHandler == null) {
inputMethodRequestsHandler = new InputMethodRequestsHandler();
--- a/jdk/src/java.desktop/share/classes/javax/swing/tree/AbstractLayoutCache.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/tree/AbstractLayoutCache.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,12 +22,11 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing.tree;
import javax.swing.event.TreeModelEvent;
-import java.awt.Dimension;
import java.awt.Rectangle;
+import java.beans.BeanProperty;
import java.util.Enumeration;
/**
@@ -112,11 +111,9 @@
*
* @param rootVisible true if the root node of the tree is to be displayed
* @see #rootVisible
- * @beaninfo
- * bound: true
- * description: Whether or not the root node
- * from the TreeModel is visible.
*/
+ @BeanProperty(description
+ = "Whether or not the root node from the TreeModel is visible.")
public void setRootVisible(boolean rootVisible) {
this.rootVisible = rootVisible;
}
@@ -137,10 +134,9 @@
* queried for each row's height.
*
* @param rowHeight the height of each cell, in pixels
- * @beaninfo
- * bound: true
- * description: The height of each cell.
*/
+ @BeanProperty(description
+ = "The height of each cell.")
public void setRowHeight(int rowHeight) {
this.rowHeight = rowHeight;
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/tree/DefaultTreeCellEditor.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/tree/DefaultTreeCellEditor.java Thu Oct 22 11:14:00 2015 -0700
@@ -22,7 +22,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing.tree;
import javax.swing.*;
@@ -31,6 +30,7 @@
import javax.swing.plaf.FontUIResource;
import java.awt.*;
import java.awt.event.*;
+import java.beans.BeanProperty;
import java.util.EventObject;
/**
@@ -592,12 +592,9 @@
* @param border the border to be rendered for this component
* @see Border
* @see CompoundBorder
- * @beaninfo
- * bound: true
- * preferred: true
- * attribute: visualUpdate true
- * description: The component's border.
*/
+ @BeanProperty(preferred = true, visualUpdate = true, description
+ = "The component's border.")
public void setBorder(Border border) {
super.setBorder(border);
this.border = border;
--- a/jdk/src/java.desktop/share/classes/javax/swing/tree/VariableHeightLayoutCache.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/tree/VariableHeightLayoutCache.java Thu Oct 22 11:14:00 2015 -0700
@@ -22,11 +22,11 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package javax.swing.tree;
import javax.swing.event.TreeModelEvent;
import java.awt.Rectangle;
+import java.beans.BeanProperty;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.NoSuchElementException;
@@ -103,10 +103,9 @@
* Sets the <code>TreeModel</code> that will provide the data.
*
* @param newModel the <code>TreeModel</code> that is to provide the data
- * @beaninfo
- * bound: true
- * description: The TreeModel that will provide the data.
*/
+ @BeanProperty(description
+ = "The TreeModel that will provide the data.")
public void setModel(TreeModel newModel) {
super.setModel(newModel);
rebuild(false);
@@ -118,11 +117,9 @@
*
* @param rootVisible true if the root node of the tree is to be displayed
* @see #rootVisible
- * @beaninfo
- * bound: true
- * description: Whether or not the root node
- * from the TreeModel is visible.
*/
+ @BeanProperty(description
+ = "Whether or not the root node from the TreeModel is visible.")
public void setRootVisible(boolean rootVisible) {
if(isRootVisible() != rootVisible && root != null) {
if(rootVisible) {
@@ -151,10 +148,9 @@
* queried for each row's height.
*
* @param rowHeight the height of each cell, in pixels
- * @beaninfo
- * bound: true
- * description: The height of each cell.
*/
+ @BeanProperty(description
+ = "The height of each cell.")
public void setRowHeight(int rowHeight) {
if(rowHeight != getRowHeight()) {
super.setRowHeight(rowHeight);
--- a/jdk/src/java.desktop/share/classes/sun/awt/AppContext.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/AppContext.java Thu Oct 22 11:14:00 2015 -0700
@@ -525,7 +525,10 @@
}
// Then, we stop any remaining Threads
- this.threadGroup.stop();
+ AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
+ threadGroup.stop();
+ return null;
+ });
// Next, we sleep 10ms at a time, waiting for all of the active
// Threads in the ThreadGroup to die.
--- a/jdk/src/java.desktop/share/classes/sun/awt/OSInfo.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/OSInfo.java Thu Oct 22 11:14:00 2015 -0700
@@ -56,6 +56,7 @@
public static final WindowsVersion WINDOWS_XP = new WindowsVersion(5, 1);
public static final WindowsVersion WINDOWS_2003 = new WindowsVersion(5, 2);
public static final WindowsVersion WINDOWS_VISTA = new WindowsVersion(6, 0);
+ public static final WindowsVersion WINDOWS_7 = new WindowsVersion(6, 1);
private static final String OS_NAME = "os.name";
private static final String OS_VERSION = "os.version";
@@ -70,6 +71,7 @@
windowsVersionMap.put(WINDOWS_XP.toString(), WINDOWS_XP);
windowsVersionMap.put(WINDOWS_2003.toString(), WINDOWS_2003);
windowsVersionMap.put(WINDOWS_VISTA.toString(), WINDOWS_VISTA);
+ windowsVersionMap.put(WINDOWS_VISTA.toString(), WINDOWS_7);
}
private static final PrivilegedAction<OSType> osTypeAction = new PrivilegedAction<OSType>() {
--- a/jdk/src/java.desktop/share/classes/sun/awt/SunToolkit.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/SunToolkit.java Thu Oct 22 11:14:00 2015 -0700
@@ -651,16 +651,20 @@
@SuppressWarnings("deprecation")
- static final SoftCache imgCache = new SoftCache();
+ static final SoftCache fileImgCache = new SoftCache();
+
+ @SuppressWarnings("deprecation")
+ static final SoftCache urlImgCache = new SoftCache();
static Image getImageFromHash(Toolkit tk, URL url) {
checkPermissions(url);
- synchronized (imgCache) {
- Image img = (Image)imgCache.get(url);
+ synchronized (urlImgCache) {
+ String key = url.toString();
+ Image img = (Image)urlImgCache.get(key);
if (img == null) {
try {
img = tk.createImage(new URLImageSource(url));
- imgCache.put(url, img);
+ urlImgCache.put(key, img);
} catch (Exception e) {
}
}
@@ -671,12 +675,12 @@
static Image getImageFromHash(Toolkit tk,
String filename) {
checkPermissions(filename);
- synchronized (imgCache) {
- Image img = (Image)imgCache.get(filename);
+ synchronized (fileImgCache) {
+ Image img = (Image)fileImgCache.get(filename);
if (img == null) {
try {
img = tk.createImage(new FileImageSource(filename));
- imgCache.put(filename, img);
+ fileImgCache.put(filename, img);
} catch (Exception e) {
}
}
@@ -696,28 +700,29 @@
protected Image getImageWithResolutionVariant(String fileName,
String resolutionVariantName) {
- synchronized (imgCache) {
+ synchronized (fileImgCache) {
Image image = getImageFromHash(this, fileName);
if (image instanceof MultiResolutionImage) {
return image;
}
Image resolutionVariant = getImageFromHash(this, resolutionVariantName);
image = createImageWithResolutionVariant(image, resolutionVariant);
- imgCache.put(fileName, image);
+ fileImgCache.put(fileName, image);
return image;
}
}
protected Image getImageWithResolutionVariant(URL url,
URL resolutionVariantURL) {
- synchronized (imgCache) {
+ synchronized (urlImgCache) {
Image image = getImageFromHash(this, url);
if (image instanceof MultiResolutionImage) {
return image;
}
Image resolutionVariant = getImageFromHash(this, resolutionVariantURL);
image = createImageWithResolutionVariant(image, resolutionVariant);
- imgCache.put(url, image);
+ String key = url.toString();
+ urlImgCache.put(key, image);
return image;
}
}
@@ -828,8 +833,13 @@
return null;
}
- protected static boolean imageCached(Object key) {
- return imgCache.containsKey(key);
+ protected static boolean imageCached(String fileName) {
+ return fileImgCache.containsKey(fileName);
+ }
+
+ protected static boolean imageCached(URL url) {
+ String key = url.toString();
+ return urlImgCache.containsKey(key);
}
protected static boolean imageExists(String filename) {
--- a/jdk/src/java.desktop/share/classes/sun/awt/image/BufferedImageGraphicsConfig.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/image/BufferedImageGraphicsConfig.java Thu Oct 22 11:14:00 2015 -0700
@@ -67,7 +67,6 @@
GraphicsDevice gd;
ColorModel model;
Raster raster;
- int width, height;
public BufferedImageGraphicsConfig(BufferedImage bufImg, Component comp) {
if (comp == null) {
@@ -78,8 +77,6 @@
}
this.model = bufImg.getColorModel();
this.raster = bufImg.getRaster().createCompatibleWritableRaster(1, 1);
- this.width = bufImg.getWidth();
- this.height = bufImg.getHeight();
}
/**
@@ -168,6 +165,6 @@
}
public Rectangle getBounds() {
- return new Rectangle(0, 0, width, height);
+ return new Rectangle(0, 0, Integer.MAX_VALUE, Integer.MAX_VALUE);
}
}
--- a/jdk/src/java.desktop/share/native/libfontmanager/freetypeScaler.c Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/freetypeScaler.c Thu Oct 22 11:14:00 2015 -0700
@@ -60,6 +60,7 @@
JNIEnv* env;
FT_Library library;
FT_Face face;
+ FT_Stream faceStream;
jobject font2D;
jobject directBuffer;
@@ -107,16 +108,10 @@
if (scalerInfo == NULL)
return;
- //apparently Done_Face will only close the stream
- // but will not relase the memory of stream structure.
- // We need to free it explicitly to avoid leak.
- //Direct access to the stream field might be not ideal solution as
- // it is considred to be "private".
- //Alternatively we could have stored pointer to the structure
- // in the scalerInfo but this will increase size of the structure
- // for no good reason
- stream = scalerInfo->face->stream;
-
+ // FT_Done_Face always closes the stream, but only frees the memory
+ // of the data structure if it was internally allocated by FT.
+ // We hold on to a pointer to the stream structure if we provide it
+ // ourselves, so that we can free it here.
FT_Done_Face(scalerInfo->face);
FT_Done_FreeType(scalerInfo->library);
@@ -128,10 +123,9 @@
free(scalerInfo->fontData);
}
- if (stream != NULL) {
- free(stream);
- }
-
+ if (scalerInfo->faceStream != NULL) {
+ free(scalerInfo->faceStream);
+ }
free(scalerInfo);
}
@@ -302,6 +296,9 @@
&ft_open_args,
indexInCollection,
&scalerInfo->face);
+ if (!error) {
+ scalerInfo->faceStream = ftstream;
+ }
}
if (error || scalerInfo->directBuffer == NULL) {
free(ftstream);
--- a/jdk/src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -76,14 +76,14 @@
}
if (flags & irfMarkFirst) {
- firstGlyph = currGlyph;
+ firstGlyph = (le_uint32)currGlyph;
}
if (flags & irfMarkLast) {
- lastGlyph = currGlyph;
+ lastGlyph = (le_uint32)currGlyph;
}
- doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask));
+ doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask), success);
if (!(flags & irfDontAdvance)) {
// XXX: Should handle reverse too...
@@ -97,18 +97,29 @@
{
}
-void IndicRearrangementProcessor::doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb) const
+void IndicRearrangementProcessor::doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb, LEErrorCode &success) const
{
LEGlyphID a, b, c, d;
le_int32 ia, ib, ic, id, ix, x;
- LEErrorCode success = LE_NO_ERROR;
+
+ if (LE_FAILURE(success)) return;
+
+ if (verb == irvNoAction) {
+ return;
+ }
+ if (firstGlyph > lastGlyph) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ return;
+ }
switch(verb)
{
- case irvNoAction:
+ case irvxA:
+ if (firstGlyph == lastGlyph) break;
+ if (firstGlyph + 1 < firstGlyph) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
break;
-
- case irvxA:
+ }
a = glyphStorage[firstGlyph];
ia = glyphStorage.getCharIndex(firstGlyph, success);
x = firstGlyph + 1;
@@ -125,6 +136,11 @@
break;
case irvDx:
+ if (firstGlyph == lastGlyph) break;
+ if (lastGlyph - 1 > lastGlyph) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
d = glyphStorage[lastGlyph];
id = glyphStorage.getCharIndex(lastGlyph, success);
x = lastGlyph - 1;
@@ -153,6 +169,11 @@
break;
case irvxAB:
+ if ((firstGlyph + 2 < firstGlyph) ||
+ (lastGlyph - firstGlyph < 1)) { // difference == 1 is a no-op, < 1 is an error.
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
ia = glyphStorage.getCharIndex(firstGlyph, success);
@@ -174,6 +195,11 @@
break;
case irvxBA:
+ if ((firstGlyph + 2 < firstGlyph) ||
+ (lastGlyph - firstGlyph < 1)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
ia = glyphStorage.getCharIndex(firstGlyph, success);
@@ -195,6 +221,11 @@
break;
case irvCDx:
+ if ((lastGlyph - 2 > lastGlyph) ||
+ (lastGlyph - firstGlyph < 1)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
c = glyphStorage[lastGlyph - 1];
d = glyphStorage[lastGlyph];
ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
@@ -216,6 +247,11 @@
break;
case irvDCx:
+ if ((lastGlyph - 2 > lastGlyph) ||
+ (lastGlyph - firstGlyph < 1)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
c = glyphStorage[lastGlyph - 1];
d = glyphStorage[lastGlyph];
ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
@@ -237,6 +273,11 @@
break;
case irvCDxA:
+ if ((lastGlyph - 2 > lastGlyph) ||
+ (lastGlyph - firstGlyph < 2)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
c = glyphStorage[lastGlyph - 1];
d = glyphStorage[lastGlyph];
@@ -262,6 +303,11 @@
break;
case irvDCxA:
+ if ((lastGlyph - 2 > lastGlyph) ||
+ (lastGlyph - firstGlyph < 2)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
c = glyphStorage[lastGlyph - 1];
d = glyphStorage[lastGlyph];
@@ -287,6 +333,11 @@
break;
case irvDxAB:
+ if ((firstGlyph + 2 < firstGlyph) ||
+ (lastGlyph - firstGlyph < 2)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
d = glyphStorage[lastGlyph];
@@ -312,6 +363,11 @@
break;
case irvDxBA:
+ if ((firstGlyph + 2 < firstGlyph) ||
+ (lastGlyph - firstGlyph < 2)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
d = glyphStorage[lastGlyph];
@@ -337,6 +393,10 @@
break;
case irvCDxAB:
+ if (lastGlyph - firstGlyph < 3) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
@@ -359,6 +419,10 @@
break;
case irvCDxBA:
+ if (lastGlyph - firstGlyph < 3) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
@@ -381,6 +445,10 @@
break;
case irvDCxAB:
+ if (lastGlyph - firstGlyph < 3) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
@@ -403,6 +471,10 @@
break;
case irvDCxBA:
+ if (lastGlyph - firstGlyph < 3) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
--- a/jdk/src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor.h Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor.h Thu Oct 22 11:14:00 2015 -0700
@@ -56,7 +56,7 @@
virtual void endStateTable();
- void doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb) const;
+ void doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb, LEErrorCode &success) const;
IndicRearrangementProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
virtual ~IndicRearrangementProcessor();
@@ -76,8 +76,8 @@
static UClassID getStaticClassID();
protected:
- le_int32 firstGlyph;
- le_int32 lastGlyph;
+ le_uint32 firstGlyph;
+ le_uint32 lastGlyph;
LEReferenceTo<IndicRearrangementSubtableHeader> indicRearrangementSubtableHeader;
LEReferenceToArrayOf<IndicRearrangementStateEntry> entryTable;
--- a/jdk/src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor2.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor2.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -74,14 +74,14 @@
}
if (flags & irfMarkFirst) {
- firstGlyph = currGlyph;
+ firstGlyph = (le_uint32)currGlyph;
}
if (flags & irfMarkLast) {
- lastGlyph = currGlyph;
+ lastGlyph = (le_uint32)currGlyph;
}
- doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask));
+ doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask), success);
if (!(flags & irfDontAdvance)) {
currGlyph += dir;
@@ -94,18 +94,29 @@
{
}
-void IndicRearrangementProcessor2::doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb) const
+void IndicRearrangementProcessor2::doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb, LEErrorCode &success) const
{
LEGlyphID a, b, c, d;
le_int32 ia, ib, ic, id, ix, x;
- LEErrorCode success = LE_NO_ERROR;
+
+ if (LE_FAILURE(success)) return;
+
+ if (verb == irvNoAction) {
+ return;
+ }
+ if (firstGlyph > lastGlyph) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ return;
+ }
switch(verb)
{
- case irvNoAction:
+ case irvxA:
+ if (firstGlyph == lastGlyph) break;
+ if (firstGlyph + 1 < firstGlyph) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
break;
-
- case irvxA:
+ }
a = glyphStorage[firstGlyph];
ia = glyphStorage.getCharIndex(firstGlyph, success);
x = firstGlyph + 1;
@@ -122,6 +133,11 @@
break;
case irvDx:
+ if (firstGlyph == lastGlyph) break;
+ if (lastGlyph - 1 > lastGlyph) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
d = glyphStorage[lastGlyph];
id = glyphStorage.getCharIndex(lastGlyph, success);
x = lastGlyph - 1;
@@ -150,6 +166,11 @@
break;
case irvxAB:
+ if ((firstGlyph + 2 < firstGlyph) ||
+ (lastGlyph - firstGlyph < 1)) { // difference == 1 is a no-op, < 1 is an error.
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
ia = glyphStorage.getCharIndex(firstGlyph, success);
@@ -171,6 +192,11 @@
break;
case irvxBA:
+ if ((firstGlyph + 2 < firstGlyph) ||
+ (lastGlyph - firstGlyph < 1)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
ia = glyphStorage.getCharIndex(firstGlyph, success);
@@ -192,6 +218,11 @@
break;
case irvCDx:
+ if ((lastGlyph - 2 > lastGlyph) ||
+ (lastGlyph - firstGlyph < 1)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
c = glyphStorage[lastGlyph - 1];
d = glyphStorage[lastGlyph];
ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
@@ -213,6 +244,11 @@
break;
case irvDCx:
+ if ((lastGlyph - 2 > lastGlyph) ||
+ (lastGlyph - firstGlyph < 1)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
c = glyphStorage[lastGlyph - 1];
d = glyphStorage[lastGlyph];
ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
@@ -234,6 +270,11 @@
break;
case irvCDxA:
+ if ((lastGlyph - 2 > lastGlyph) ||
+ (lastGlyph - firstGlyph < 2)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
c = glyphStorage[lastGlyph - 1];
d = glyphStorage[lastGlyph];
@@ -259,6 +300,11 @@
break;
case irvDCxA:
+ if ((lastGlyph - 2 > lastGlyph) ||
+ (lastGlyph - firstGlyph < 2)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
c = glyphStorage[lastGlyph - 1];
d = glyphStorage[lastGlyph];
@@ -284,6 +330,11 @@
break;
case irvDxAB:
+ if ((firstGlyph + 2 < firstGlyph) ||
+ (lastGlyph - firstGlyph < 2)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
d = glyphStorage[lastGlyph];
@@ -309,6 +360,11 @@
break;
case irvDxBA:
+ if ((firstGlyph + 2 < firstGlyph) ||
+ (lastGlyph - firstGlyph < 2)) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
d = glyphStorage[lastGlyph];
@@ -334,6 +390,10 @@
break;
case irvCDxAB:
+ if (lastGlyph - firstGlyph < 3) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
@@ -356,6 +416,10 @@
break;
case irvCDxBA:
+ if (lastGlyph - firstGlyph < 3) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
@@ -378,6 +442,10 @@
break;
case irvDCxAB:
+ if (lastGlyph - firstGlyph < 3) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
@@ -400,6 +468,10 @@
break;
case irvDCxBA:
+ if (lastGlyph - firstGlyph < 3) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ break;
+ }
a = glyphStorage[firstGlyph];
b = glyphStorage[firstGlyph + 1];
--- a/jdk/src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor2.h Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor2.h Thu Oct 22 11:14:00 2015 -0700
@@ -56,7 +56,7 @@
virtual void endStateTable();
- void doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb) const;
+ void doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb, LEErrorCode &success) const;
IndicRearrangementProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
virtual ~IndicRearrangementProcessor2();
@@ -76,8 +76,8 @@
static UClassID getStaticClassID();
protected:
- le_int32 firstGlyph;
- le_int32 lastGlyph;
+ le_uint32 firstGlyph;
+ le_uint32 lastGlyph;
LEReferenceToArrayOf<IndicRearrangementStateEntry2> entryTable;
LEReferenceTo<IndicRearrangementSubtableHeader2> indicRearrangementSubtableHeader;
--- a/jdk/src/java.desktop/share/native/libfontmanager/layout/LookupTables.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/LookupTables.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -91,6 +91,10 @@
LEReferenceTo<LookupSingle> entry(base, success, entries);
LEReferenceTo<LookupSingle> trial(entry, success, extra);
+ if (!LE_SUCCESS(success)) {
+ return NULL;
+ }
+
if (SWAPW(trial->glyph) <= ttGlyph) {
entry = trial;
}
--- a/jdk/src/java.desktop/share/native/libfontmanager/layout/MorphTables.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/MorphTables.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -75,6 +75,7 @@
return;
}
subtableHeader.addOffset(length, success);
+ if (LE_FAILURE(success)) break;
}
SubtableCoverage coverage = SWAPW(subtableHeader->coverage);
FeatureFlags subtableFeatures = SWAPL(subtableHeader->subtableFeatures);
@@ -91,6 +92,8 @@
{
SubtableProcessor *processor = NULL;
+ if (LE_FAILURE(success)) return;
+
switch (SWAPW(coverage) & scfTypeMask)
{
case mstIndicRearrangement:
--- a/jdk/src/java.desktop/share/native/libfontmanager/layout/MorphTables2.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/MorphTables2.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -197,6 +197,7 @@
return;
}
subtableHeader.addOffset(length, success); // Don't addOffset for the last entry.
+ if (LE_FAILURE(success)) break;
}
le_uint32 coverage = SWAPL(subtableHeader->coverage);
FeatureFlags subtableFeatures = SWAPL(subtableHeader->subtableFeatures);
@@ -212,6 +213,8 @@
{
SubtableProcessor2 *processor = NULL;
+ if (LE_FAILURE(success)) return;
+
switch (SWAPL(coverage) & scfTypeMask2)
{
case mstIndicRearrangement:
--- a/jdk/src/java.desktop/share/native/libfontmanager/layout/SegmentArrayProcessor.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/SegmentArrayProcessor.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -63,6 +63,8 @@
le_int32 glyphCount = glyphStorage.getGlyphCount();
le_int32 glyph;
+ if (LE_FAILURE(success)) return;
+
for (glyph = 0; glyph < glyphCount; glyph += 1) {
LEGlyphID thisGlyph = glyphStorage[glyph];
const LookupSegment *lookupSegment = segmentArrayLookupTable->lookupSegment(segmentArrayLookupTable, segments, thisGlyph, success);
--- a/jdk/src/java.desktop/share/native/libfontmanager/layout/SegmentArrayProcessor2.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/SegmentArrayProcessor2.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -63,6 +63,8 @@
le_int32 glyphCount = glyphStorage.getGlyphCount();
le_int32 glyph;
+ if (LE_FAILURE(success)) return;
+
for (glyph = 0; glyph < glyphCount; glyph += 1) {
LEGlyphID thisGlyph = glyphStorage[glyph];
// lookupSegment already range checked by lookupSegment() function.
--- a/jdk/src/java.desktop/share/native/libfontmanager/layout/SegmentSingleProcessor2.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/SegmentSingleProcessor2.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -64,6 +64,8 @@
le_int32 glyphCount = glyphStorage.getGlyphCount();
le_int32 glyph;
+ if (LE_FAILURE(success)) return;
+
for (glyph = 0; glyph < glyphCount; glyph += 1) {
LEGlyphID thisGlyph = glyphStorage[glyph];
const LookupSegment *lookupSegment = segmentSingleLookupTable->lookupSegment(segmentSingleLookupTable, segments, thisGlyph, success);
--- a/jdk/src/java.desktop/share/native/libfontmanager/layout/SimpleArrayProcessor2.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/SimpleArrayProcessor2.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -61,10 +61,11 @@
void SimpleArrayProcessor2::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
{
- if (LE_FAILURE(success)) return;
le_int32 glyphCount = glyphStorage.getGlyphCount();
le_int32 glyph;
+ if (LE_FAILURE(success)) return;
+
for (glyph = 0; glyph < glyphCount; glyph += 1) {
LEGlyphID thisGlyph = glyphStorage[glyph];
if (LE_GET_GLYPH(thisGlyph) < 0xFFFF) {
--- a/jdk/src/java.desktop/share/native/libfontmanager/layout/SingleTableProcessor.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/SingleTableProcessor.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -63,6 +63,8 @@
le_int32 glyph;
le_int32 glyphCount = glyphStorage.getGlyphCount();
+ if (LE_FAILURE(success)) return;
+
for (glyph = 0; glyph < glyphCount; glyph += 1) {
const LookupSingle *lookupSingle = singleTableLookupTable->lookupSingle(singleTableLookupTable, entries, glyphStorage[glyph], success);
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java Thu Oct 22 11:14:00 2015 -0700
@@ -792,8 +792,8 @@
XToolkit.awtLock();
try {
updateSizeHints(rec.x, rec.y, rec.width, rec.height);
- XlibWrapper.XResizeWindow(XToolkit.getDisplay(), getShell(), rec.width, rec.height);
- XlibWrapper.XMoveWindow(XToolkit.getDisplay(), getShell(), rec.x, rec.y);
+ XlibWrapper.XMoveResizeWindow(XToolkit.getDisplay(), getShell(),
+ rec.x, rec.y, rec.width, rec.height);
}
finally {
XToolkit.awtUnlock();
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -4058,14 +4058,19 @@
return (HWND)NULL;
}
-/* Call DefWindowProc for the focus proxy, if any */
+/* Redirects message to the focus proxy, if any */
void AwtComponent::CallProxyDefWindowProc(UINT message, WPARAM wParam,
LPARAM lParam, LRESULT &retVal, MsgRouting &mr)
{
if (mr != mrConsume) {
HWND proxy = GetProxyFocusOwner();
if (proxy != NULL && ::IsWindowEnabled(proxy)) {
- retVal = ComCtl32Util::GetInstance().DefWindowProc(NULL, proxy, message, wParam, lParam);
+ if (proxy != GetHWnd()) {
+ retVal = ::SendMessage(proxy, message, wParam, lParam);
+ } else {
+ retVal = ComCtl32Util::GetInstance().DefWindowProc(NULL,
+ proxy, message, wParam, lParam);
+ }
mr = mrConsume;
}
}
--- a/jdk/src/java.management/share/classes/javax/management/openmbean/OpenMBeanAttributeInfoSupport.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.management/share/classes/javax/management/openmbean/OpenMBeanAttributeInfoSupport.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -45,7 +45,6 @@
import javax.management.ImmutableDescriptor;
import javax.management.MBeanAttributeInfo;
import com.sun.jmx.remote.util.EnvHelp;
-import sun.reflect.misc.ConstructorUtil;
import sun.reflect.misc.MethodUtil;
import sun.reflect.misc.ReflectUtil;
@@ -692,8 +691,9 @@
private static <T> T convertFromString(String s, OpenType<T> openType) {
Class<T> c;
try {
- ReflectUtil.checkPackageAccess(openType.safeGetClassName());
- c = cast(Class.forName(openType.safeGetClassName()));
+ String className = openType.safeGetClassName();
+ ReflectUtil.checkPackageAccess(className);
+ c = cast(Class.forName(className));
} catch (ClassNotFoundException e) {
throw new NoClassDefFoundError(e.toString()); // can't happen
}
@@ -761,11 +761,15 @@
Class<?> stringArrayClass;
Class<?> targetArrayClass;
try {
+ String baseClassName = baseType.safeGetClassName();
+
+ // check access to the provided base type class name and bail out early
+ ReflectUtil.checkPackageAccess(baseClassName);
+
stringArrayClass =
Class.forName(squareBrackets + "Ljava.lang.String;");
targetArrayClass =
- Class.forName(squareBrackets + "L" + baseType.safeGetClassName() +
- ";");
+ Class.forName(squareBrackets + "L" + baseClassName + ";");
} catch (ClassNotFoundException e) {
throw new NoClassDefFoundError(e.toString()); // can't happen
}
--- a/jdk/src/java.management/share/classes/sun/management/Agent.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.management/share/classes/sun/management/Agent.java Thu Oct 22 11:14:00 2015 -0700
@@ -102,7 +102,10 @@
private void addConfigProperties() {
appendConfigPropsHeader();
boolean[] first = new boolean[] {true};
- configProps.entrySet().stream().forEach((e) -> {
+ Properties props = configProps != null ?
+ configProps : getManagementProperties();
+
+ props.entrySet().stream().forEach((e) -> {
String key = (String)e.getKey();
if (key.startsWith("com.sun.management.")) {
addConfigProp(key, e.getValue(), first[0]);
--- a/jdk/src/java.management/share/classes/sun/management/CompilerThreadStat.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.management/share/classes/sun/management/CompilerThreadStat.java Thu Oct 22 11:14:00 2015 -0700
@@ -27,6 +27,7 @@
/**
*/
+@Deprecated
public class CompilerThreadStat implements java.io.Serializable {
private String name;
private long taskCount;
--- a/jdk/src/java.management/share/classes/sun/management/HotspotCompilation.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.management/share/classes/sun/management/HotspotCompilation.java Thu Oct 22 11:14:00 2015 -0700
@@ -90,6 +90,7 @@
this.time = (LongCounter) lookup(basename + "time");
}
+ @SuppressWarnings("deprecation")
CompilerThreadStat getCompilerThreadStat() {
MethodInfo minfo = new MethodInfo(method.stringValue(),
(int) type.longValue(),
@@ -182,6 +183,7 @@
return nmethodSize.longValue();
}
+ @Deprecated
public List<CompilerThreadStat> getCompilerThreadStats() {
List<CompilerThreadStat> list = new ArrayList<>(threads.size());
for (CompilerThreadInfo info : threads) {
--- a/jdk/src/java.management/share/classes/sun/management/HotspotCompilationMBean.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.management/share/classes/sun/management/HotspotCompilationMBean.java Thu Oct 22 11:14:00 2015 -0700
@@ -46,6 +46,7 @@
* the statistic of a compiler thread.
*
*/
+ @Deprecated
public java.util.List<CompilerThreadStat> getCompilerThreadStats();
/**
--- a/jdk/src/java.management/share/classes/sun/management/LazyCompositeData.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.management/share/classes/sun/management/LazyCompositeData.java Thu Oct 22 11:14:00 2015 -0700
@@ -27,6 +27,7 @@
import java.io.Serializable;
import java.util.*;
+import javax.management.openmbean.ArrayType;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeType;
import javax.management.openmbean.OpenType;
@@ -48,39 +49,48 @@
private CompositeData compositeData;
// Implementation of the CompositeData interface
+ @Override
public boolean containsKey(String key) {
return compositeData().containsKey(key);
}
+ @Override
public boolean containsValue(Object value) {
return compositeData().containsValue(value);
}
+ @Override
public boolean equals(Object obj) {
return compositeData().equals(obj);
}
+ @Override
public Object get(String key) {
return compositeData().get(key);
}
+ @Override
public Object[] getAll(String[] keys) {
return compositeData().getAll(keys);
}
+ @Override
public CompositeType getCompositeType() {
return compositeData().getCompositeType();
}
+ @Override
public int hashCode() {
return compositeData().hashCode();
}
+ @Override
public String toString() {
/** FIXME: What should this be?? */
return compositeData().toString();
}
+ @Override
public Collection<?> values() {
return compositeData().values();
}
@@ -126,27 +136,31 @@
if (cd == null)
throw new IllegalArgumentException("Null CompositeData");
- return ((Boolean) cd.get(itemName)).booleanValue();
+ return ((Boolean) cd.get(itemName));
}
public static long getLong(CompositeData cd, String itemName) {
if (cd == null)
throw new IllegalArgumentException("Null CompositeData");
- return ((Long) cd.get(itemName)).longValue();
+ return ((Long) cd.get(itemName));
}
public static int getInt(CompositeData cd, String itemName) {
if (cd == null)
throw new IllegalArgumentException("Null CompositeData");
- return ((Integer) cd.get(itemName)).intValue();
+ return ((Integer) cd.get(itemName));
}
/**
* Compares two CompositeTypes and returns true if
* all items in type1 exist in type2 and their item types
* are the same.
+ * @param type1 the base composite type
+ * @param type2 the checked composite type
+ * @return {@code true} if all items in type1 exist in type2 and their item
+ * types are the same.
*/
protected static boolean isTypeMatched(CompositeType type1, CompositeType type2) {
if (type1 == type2) return true;
@@ -159,24 +173,9 @@
if (!type2.keySet().containsAll(allItems))
return false;
- for (String item: allItems) {
- OpenType<?> ot1 = type1.getType(item);
- OpenType<?> ot2 = type2.getType(item);
- if (ot1 instanceof CompositeType) {
- if (! (ot2 instanceof CompositeType))
- return false;
- if (!isTypeMatched((CompositeType) ot1, (CompositeType) ot2))
- return false;
- } else if (ot1 instanceof TabularType) {
- if (! (ot2 instanceof TabularType))
- return false;
- if (!isTypeMatched((TabularType) ot1, (TabularType) ot2))
- return false;
- } else if (!ot1.equals(ot2)) {
- return false;
- }
- }
- return true;
+ return allItems.stream().allMatch(
+ item -> isTypeMatched(type1.getType(item), type2.getType(item))
+ );
}
protected static boolean isTypeMatched(TabularType type1, TabularType type2) {
@@ -192,5 +191,41 @@
return isTypeMatched(type1.getRowType(), type2.getRowType());
}
+ protected static boolean isTypeMatched(ArrayType<?> type1, ArrayType<?> type2) {
+ if (type1 == type2) return true;
+
+ int dim1 = type1.getDimension();
+ int dim2 = type2.getDimension();
+
+ // check if the array dimensions are the same
+ if (dim1 != dim2)
+ return false;
+
+ return isTypeMatched(type1.getElementOpenType(), type2.getElementOpenType());
+ }
+
+ private static boolean isTypeMatched(OpenType<?> ot1, OpenType<?> ot2) {
+ if (ot1 instanceof CompositeType) {
+ if (! (ot2 instanceof CompositeType))
+ return false;
+ if (!isTypeMatched((CompositeType) ot1, (CompositeType) ot2))
+ return false;
+ } else if (ot1 instanceof TabularType) {
+ if (! (ot2 instanceof TabularType))
+ return false;
+ if (!isTypeMatched((TabularType) ot1, (TabularType) ot2))
+ return false;
+ } else if (ot1 instanceof ArrayType) {
+ if (! (ot2 instanceof ArrayType))
+ return false;
+ if (!isTypeMatched((ArrayType<?>) ot1, (ArrayType<?>) ot2)) {
+ return false;
+ }
+ } else if (!ot1.equals(ot2)) {
+ return false;
+ }
+ return true;
+ }
+
private static final long serialVersionUID = -2190411934472666714L;
}
--- a/jdk/src/java.naming/share/classes/javax/naming/spi/package.html Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.naming/share/classes/javax/naming/spi/package.html Thu Oct 22 11:14:00 2015 -0700
@@ -2,7 +2,7 @@
<html>
<head>
<!--
-Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
@@ -88,5 +88,3 @@
</body>
</html>
-<body>
-</body>
--- a/jdk/src/java.rmi/share/classes/java/rmi/server/RemoteObjectInvocationHandler.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.rmi/share/classes/java/rmi/server/RemoteObjectInvocationHandler.java Thu Oct 22 11:14:00 2015 -0700
@@ -145,6 +145,14 @@
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
+ if (! Proxy.isProxyClass(proxy.getClass())) {
+ throw new IllegalArgumentException("not a proxy");
+ }
+
+ if (Proxy.getInvocationHandler(proxy) != this) {
+ throw new IllegalArgumentException("handler mismatch");
+ }
+
if (method.getDeclaringClass() == Object.class) {
return invokeObjectMethod(proxy, method, args);
} else if ("finalize".equals(method.getName()) && method.getParameterCount() == 0) {
@@ -168,11 +176,13 @@
} else if (name.equals("equals")) {
Object obj = args[0];
+ InvocationHandler hdlr;
return
proxy == obj ||
(obj != null &&
Proxy.isProxyClass(obj.getClass()) &&
- equals(Proxy.getInvocationHandler(obj)));
+ (hdlr = Proxy.getInvocationHandler(obj)) instanceof RemoteObjectInvocationHandler &&
+ this.equals(hdlr));
} else if (name.equals("toString")) {
return proxyToString(proxy);
--- a/jdk/src/java.rmi/share/classes/sun/rmi/transport/DGCClient.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.rmi/share/classes/sun/rmi/transport/DGCClient.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
+import java.net.SocketPermission;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.HashMap;
@@ -45,6 +46,10 @@
import sun.rmi.server.UnicastRef;
import sun.rmi.server.Util;
+import java.security.AccessControlContext;
+import java.security.Permissions;
+import java.security.ProtectionDomain;
+
/**
* DGCClient implements the client-side of the RMI distributed garbage
* collection system.
@@ -109,6 +114,18 @@
/** ObjID for server-side DGC object */
private static final ObjID dgcID = new ObjID(ObjID.DGC_ID);
+ /**
+ * An AccessControlContext with only socket permissions,
+ * suitable for an RMIClientSocketFactory.
+ */
+ private static final AccessControlContext SOCKET_ACC;
+ static {
+ Permissions perms = new Permissions();
+ perms.add(new SocketPermission("*", "connect,resolve"));
+ ProtectionDomain[] pd = { new ProtectionDomain(null, perms) };
+ SOCKET_ACC = new AccessControlContext(pd);
+ }
+
/*
* Disallow anyone from creating one of these.
*/
@@ -566,13 +583,19 @@
}
}
- if (needRenewal) {
- makeDirtyCall(refsToDirty, sequenceNum);
- }
+ boolean needRenewal_ = needRenewal;
+ Set<RefEntry> refsToDirty_ = refsToDirty;
+ long sequenceNum_ = sequenceNum;
+ AccessController.doPrivileged((PrivilegedAction<Void>)() -> {
+ if (needRenewal_) {
+ makeDirtyCall(refsToDirty_, sequenceNum_);
+ }
- if (!pendingCleans.isEmpty()) {
- makeCleanCalls();
- }
+ if (!pendingCleans.isEmpty()) {
+ makeCleanCalls();
+ }
+ return null;
+ }, SOCKET_ACC);
} while (!removed || !pendingCleans.isEmpty());
}
}
--- a/jdk/src/java.rmi/share/classes/sun/rmi/transport/DGCImpl.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.rmi/share/classes/sun/rmi/transport/DGCImpl.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,7 @@
*/
package sun.rmi.transport;
+import java.net.SocketPermission;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.dgc.DGC;
@@ -33,8 +34,11 @@
import java.rmi.server.ObjID;
import java.rmi.server.RemoteServer;
import java.rmi.server.ServerNotActiveException;
+import java.security.AccessControlContext;
import java.security.AccessController;
+import java.security.Permissions;
import java.security.PrivilegedAction;
+import java.security.ProtectionDomain;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.HashMap;
@@ -294,8 +298,19 @@
Util.createProxy(DGCImpl.class,
new UnicastRef(ref), true);
disp.setSkeleton(dgc);
- Target target =
- new Target(dgc, disp, stub, dgcID, true);
+
+ Permissions perms = new Permissions();
+ perms.add(new SocketPermission("*", "accept,resolve"));
+ ProtectionDomain[] pd = { new ProtectionDomain(null, perms) };
+ AccessControlContext acceptAcc = new AccessControlContext(pd);
+
+ Target target = AccessController.doPrivileged(
+ new PrivilegedAction<Target>() {
+ public Target run() {
+ return new Target(dgc, disp, stub, dgcID, true);
+ }
+ }, acceptAcc);
+
ObjectTable.putTarget(target);
} catch (RemoteException e) {
throw new Error(
--- a/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosPrincipal.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosPrincipal.java Thu Oct 22 11:14:00 2015 -0700
@@ -100,9 +100,16 @@
* <p>If the input name does not contain a realm, the default realm
* is used. The default realm can be specified either in a Kerberos
* configuration file or via the java.security.krb5.realm
- * system property. For more information,
+ * system property. For more information, see
* <a href="../../../../../technotes/guides/security/jgss/tutorials/index.html">
- * Kerberos Requirements </a>
+ * Kerberos Requirements</a>. Additionally, if a security manager is
+ * installed, a {@link ServicePermission} must be granted and the service
+ * principal of the permission must minimally be inside the
+ * {@code KerberosPrincipal}'s realm. For example, if the result of
+ * {@code new KerberosPrincipal("user")} is {@code user@EXAMPLE.COM},
+ * then a {@code ServicePermission} with service principal
+ * {@code host/www.example.com@EXAMPLE.COM} (and any action)
+ * must be granted.
*
* @param name the principal name
* @throws IllegalArgumentException if name is improperly
@@ -110,20 +117,12 @@
* the realm to use and the default realm is not specified
* in either a Kerberos configuration file or via the
* java.security.krb5.realm system property.
+ * @throws SecurityException if a security manager is installed and
+ * {@code name} does not contain the realm to use, and a proper
+ * {@link ServicePermission} as described above is not granted.
*/
public KerberosPrincipal(String name) {
-
- PrincipalName krb5Principal = null;
-
- try {
- // Appends the default realm if it is missing
- krb5Principal = new PrincipalName(name, KRB_NT_PRINCIPAL);
- } catch (KrbException e) {
- throw new IllegalArgumentException(e.getMessage());
- }
- nameType = KRB_NT_PRINCIPAL; // default name type
- fullName = krb5Principal.toString();
- realm = krb5Principal.getRealmString();
+ this(name, KRB_NT_PRINCIPAL);
}
/**
@@ -138,12 +137,19 @@
* name type, KRB_NT_PRINCIPAL where <i>duke</i>
* represents a principal, and <i>FOO.COM</i> represents a realm).
*
- * <p> If the input name does not contain a realm, the default realm
+ * <p>If the input name does not contain a realm, the default realm
* is used. The default realm can be specified either in a Kerberos
* configuration file or via the java.security.krb5.realm
* system property. For more information, see
* <a href="../../../../../technotes/guides/security/jgss/tutorials/index.html">
- * Kerberos Requirements</a>.
+ * Kerberos Requirements</a>. Additionally, if a security manager is
+ * installed, a {@link ServicePermission} must be granted and the service
+ * principal of the permission must minimally be inside the
+ * {@code KerberosPrincipal}'s realm. For example, if the result of
+ * {@code new KerberosPrincipal("user")} is {@code user@EXAMPLE.COM},
+ * then a {@code ServicePermission} with service principal
+ * {@code host/www.example.com@EXAMPLE.COM} (and any action)
+ * must be granted.
*
* @param name the principal name
* @param nameType the name type of the principal
@@ -152,6 +158,9 @@
* or if name does not contain the realm to use and the default
* realm is not specified in either a Kerberos configuration
* file or via the java.security.krb5.realm system property.
+ * @throws SecurityException if a security manager is installed and
+ * {@code name} does not contain the realm to use, and a proper
+ * {@link ServicePermission} as described above is not granted.
*/
public KerberosPrincipal(String name, int nameType) {
@@ -165,6 +174,18 @@
throw new IllegalArgumentException(e.getMessage());
}
+ if (krb5Principal.isRealmDeduced() && !Realm.AUTODEDUCEREALM) {
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null) {
+ try {
+ sm.checkPermission(new ServicePermission(
+ "@" + krb5Principal.getRealmAsString(), "-"));
+ } catch (SecurityException se) {
+ // Swallow the actual exception to hide info
+ throw new SecurityException("Cannot read realm info");
+ }
+ }
+ }
this.nameType = nameType;
fullName = krb5Principal.toString();
realm = krb5Principal.getRealmString();
--- a/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/ServicePermission.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/ServicePermission.java Thu Oct 22 11:14:00 2015 -0700
@@ -51,7 +51,7 @@
* used within.
* <p>
* The service principal name is the canonical name of the
- * {@code KereberosPrincipal} supplying the service, that is
+ * {@code KerberosPrincipal} supplying the service, that is
* the KerberosPrincipal represents a Kerberos service
* principal. This name is treated in a case sensitive manner.
* An asterisk may appear by itself, to signify any service principal.
@@ -62,6 +62,10 @@
* permission also implies that the TGT can be obtained by an
* Authentication Service exchange.
* <p>
+ * Granting this permission also implies creating {@link KerberosPrincipal}
+ * or {@link org.ietf.jgss.GSSName GSSName} without providing a Kerberos
+ * realm, as long as the permission's service principal is in this realm.
+ * <p>
* The possible actions are:
*
* <pre>
@@ -146,6 +150,9 @@
* @param action the action string
*/
public ServicePermission(String servicePrincipal, String action) {
+ // Note: servicePrincipal can be "@REALM" which means any principal in
+ // this realm implies it. action can be "-" which means any
+ // action implies it.
super(servicePrincipal);
init(servicePrincipal, getMask(action));
}
@@ -208,7 +215,9 @@
boolean impliesIgnoreMask(ServicePermission p) {
return ((this.getName().equals("*")) ||
- this.getName().equals(p.getName()));
+ this.getName().equals(p.getName()) ||
+ (p.getName().startsWith("@") &&
+ this.getName().endsWith(p.getName())));
}
/**
@@ -318,7 +327,10 @@
/**
* Convert an action string to an integer actions mask.
*
- * @param action the action string
+ * Note: if action is "-", action will be NONE, which means any
+ * action implies it.
+ *
+ * @param action the action string.
* @return the action mask
*/
private static int getMask(String action) {
@@ -335,9 +347,11 @@
char[] a = action.toCharArray();
+ if (a.length == 1 && a[0] == '-') {
+ return mask;
+ }
+
int i = a.length - 1;
- if (i < 0)
- return mask;
while (i != -1) {
char c;
@@ -501,6 +515,17 @@
ServicePermission np = (ServicePermission) permission;
int desired = np.getMask();
+ if (desired == 0) {
+ for (Permission p: perms.values()) {
+ ServicePermission sp = (ServicePermission)p;
+ if (sp.impliesIgnoreMask(np)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+
// first, check for wildcard principal
ServicePermission x = (ServicePermission)perms.get("*");
if (x != null) {
--- a/jdk/src/java.security.jgss/share/classes/org/ietf/jgss/GSSName.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.security.jgss/share/classes/org/ietf/jgss/GSSName.java Thu Oct 22 11:14:00 2015 -0700
@@ -81,6 +81,18 @@
* GSSName.NT_EXPORT_NAME);
*
* </pre>
+ * If a security manager is installed, in order to create a {@code GSSName}
+ * that contains a Kerberos name element without providing its realm,
+ * a {@link javax.security.auth.kerberos.ServicePermission ServicePermission}
+ * must be granted and the service principal of the permission must minimally
+ * be inside the Kerberos name element's realm. For example, if the result of
+ * {@link GSSManager#createName(String, Oid) createName("user", NT_USER_NAME)}
+ * contains a Kerberos name element {@code user@EXAMPLE.COM}, then
+ * a {@code ServicePermission} with service principal
+ * {@code host/www.example.com@EXAMPLE.COM} (and any action) must be granted.
+ * Otherwise, the creation will throw a {@link GSSException} containing the
+ * {@code GSSException.FAILURE} error code.
+ *
* @see #export()
* @see #equals(GSSName)
* @see GSSManager#createName(String, Oid)
--- a/jdk/src/java.security.jgss/share/classes/sun/security/jgss/krb5/Krb5NameElement.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/jgss/krb5/Krb5NameElement.java Thu Oct 22 11:14:00 2015 -0700
@@ -28,7 +28,10 @@
import org.ietf.jgss.*;
import sun.security.jgss.spi.*;
import sun.security.krb5.PrincipalName;
+import sun.security.krb5.Realm;
import sun.security.krb5.KrbException;
+
+import javax.security.auth.kerberos.ServicePermission;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -126,6 +129,18 @@
throw new GSSException(GSSException.BAD_NAME, -1, e.getMessage());
}
+ if (principalName.isRealmDeduced() && !Realm.AUTODEDUCEREALM) {
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null) {
+ try {
+ sm.checkPermission(new ServicePermission(
+ "@" + principalName.getRealmAsString(), "-"));
+ } catch (SecurityException se) {
+ // Do not chain the actual exception to hide info
+ throw new GSSException(GSSException.FAILURE);
+ }
+ }
+ }
return new Krb5NameElement(principalName, gssNameStr, gssNameType);
}
--- a/jdk/src/java.security.jgss/share/classes/sun/security/jgss/wrapper/GSSNameElement.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/jgss/wrapper/GSSNameElement.java Thu Oct 22 11:14:00 2015 -0700
@@ -30,6 +30,7 @@
import java.security.Security;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
+import sun.security.krb5.Realm;
import sun.security.jgss.GSSUtil;
import sun.security.util.ObjectIdentifier;
import sun.security.util.DerInputStream;
@@ -38,6 +39,8 @@
import sun.security.jgss.GSSExceptionImpl;
import sun.security.jgss.spi.GSSNameSpi;
+import javax.security.auth.kerberos.ServicePermission;
+
/**
* This class is essentially a wrapper class for the gss_name_t
* structure of the native GSS library.
@@ -150,6 +153,26 @@
pName = cStub.importName(name, nameType);
setPrintables();
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null && !Realm.AUTODEDUCEREALM) {
+ String krbName = getKrbName();
+ int atPos = krbName.lastIndexOf('@');
+ if (atPos != -1) {
+ String atRealm = krbName.substring(atPos);
+ if (nameType.equals(GSSUtil.NT_GSS_KRB5_PRINCIPAL)
+ && new String(nameBytes).endsWith(atRealm)) {
+ // Created from Kerberos name with realm, no need to check
+ } else {
+ try {
+ sm.checkPermission(new ServicePermission(atRealm, "-"));
+ } catch (SecurityException se) {
+ // Do not chain the actual exception to hide info
+ throw new GSSException(GSSException.FAILURE);
+ }
+ }
+ }
+ }
+
SunNativeProvider.debug("Imported " + printableName + " w/ type " +
printableType);
}
--- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbServiceLocator.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbServiceLocator.java Thu Oct 22 11:14:00 2015 -0700
@@ -25,6 +25,11 @@
package sun.security.krb5;
+import sun.security.krb5.internal.Krb5;
+
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Random;
@@ -52,6 +57,8 @@
private static final Random random = new Random();
+ private static final boolean DEBUG = Krb5.DEBUG;
+
private KrbServiceLocator() {
}
@@ -62,8 +69,7 @@
* Information on the mapping of DNS hostnames and domain names
* to Kerberos realms is stored using DNS TXT records
*
- * @param domainName A string domain name.
- * @param environment The possibly null environment of the context.
+ * @param realmName A string realm name.
* @return An ordered list of hostports for the Kerberos service or null if
* the service has not been located.
*/
@@ -81,8 +87,18 @@
if (!(ctx instanceof DirContext)) {
return null; // cannot create a DNS context
}
- Attributes attrs =
- ((DirContext)ctx).getAttributes(dnsUrl, SRV_TXT_ATTR);
+ Attributes attrs = null;
+ try {
+ // both connect and accept are needed since DNS is thru UDP
+ attrs = AccessController.doPrivileged(
+ (PrivilegedExceptionAction<Attributes>)
+ () -> ((DirContext)ctx).getAttributes(
+ dnsUrl, SRV_TXT_ATTR),
+ null,
+ new java.net.SocketPermission("*", "connect,accept"));
+ } catch (PrivilegedActionException e) {
+ throw (NamingException)e.getCause();
+ }
Attribute attr;
if (attrs != null && ((attr = attrs.get(SRV_TXT)) != null)) {
@@ -124,7 +140,8 @@
* Queries DNS for a list of KERBEROS Service Location Records (SRV) for a
* given domain name.
*
- * @param domainName A string domain name.
+ * @param realmName A string realm name.
+ * @param protocol the protocol string, can be "_udp" or "_tcp"
* @return An ordered list of hostports for the Kerberos service or null if
* the service has not been located.
*/
@@ -142,8 +159,20 @@
if (!(ctx instanceof DirContext)) {
return null; // cannot create a DNS context
}
- Attributes attrs =
- ((DirContext)ctx).getAttributes(dnsUrl, SRV_RR_ATTR);
+
+ Attributes attrs = null;
+ try {
+ // both connect and accept are needed since DNS is thru UDP
+ attrs = AccessController.doPrivileged(
+ (PrivilegedExceptionAction<Attributes>)
+ () -> ((DirContext)ctx).getAttributes(
+ dnsUrl, SRV_RR_ATTR),
+ null,
+ new java.net.SocketPermission("*", "connect,accept"));
+ } catch (PrivilegedActionException e) {
+ throw (NamingException)e.getCause();
+ }
+
Attribute attr;
if (attrs != null && ((attr = attrs.get(SRV_RR)) != null)) {
--- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/PrincipalName.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/PrincipalName.java Thu Oct 22 11:14:00 2015 -0700
@@ -123,6 +123,13 @@
*/
private final Realm nameRealm; // not null
+
+ /**
+ * When constructing a PrincipalName, whether the realm is included in
+ * the input, or deduced from default realm or domain-realm mapping.
+ */
+ private final boolean realmDeduced;
+
// cached default salt, not used in clone
private transient String salt = null;
@@ -143,6 +150,7 @@
this.nameType = nameType;
this.nameStrings = nameStrings.clone();
this.nameRealm = nameRealm;
+ this.realmDeduced = false;
}
// This method is called by Windows NativeCred.c
@@ -150,11 +158,6 @@
this(KRB_NT_UNKNOWN, nameParts, new Realm(realm));
}
- public PrincipalName(String[] nameParts, int type)
- throws IllegalArgumentException, RealmException {
- this(type, nameParts, Realm.getDefault());
- }
-
// Validate a nameStrings argument
private static void validateNameStrings(String[] ns) {
if (ns == null) {
@@ -226,7 +229,7 @@
* <a href="http://www.ietf.org/rfc/rfc4120.txt">
* http://www.ietf.org/rfc/rfc4120.txt</a>.
*
- * @param encoding a Der-encoded data.
+ * @param encoding DER-encoded PrincipalName (without Realm)
* @param realm the realm for this name
* @exception Asn1Exception if an error occurs while decoding
* an ASN1 encoded data.
@@ -240,6 +243,7 @@
if (realm == null) {
throw new IllegalArgumentException("Null realm not allowed");
}
+ realmDeduced = false;
nameRealm = realm;
DerValue der;
if (encoding == null) {
@@ -394,6 +398,10 @@
if (realm == null) {
realm = Realm.parseRealmAtSeparator(name);
}
+
+ // No realm info from parameter and string, must deduce later
+ realmDeduced = realm == null;
+
switch (type) {
case KRB_NT_SRV_HST:
if (nameParts.length >= 2) {
@@ -413,8 +421,8 @@
hostName.toLowerCase(Locale.ENGLISH)+".")) {
hostName = canonicalized;
}
- } catch (UnknownHostException e) {
- // no canonicalization, use old
+ } catch (UnknownHostException | SecurityException e) {
+ // not canonicalized or no permission to do so, use old
}
nameParts[1] = hostName.toLowerCase(Locale.ENGLISH);
}
@@ -681,4 +689,7 @@
return result;
}
+ public boolean isRealmDeduced() {
+ return realmDeduced;
+ }
}
--- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/Realm.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/Realm.java Thu Oct 22 11:14:00 2015 -0700
@@ -46,6 +46,12 @@
* This class is immutable.
*/
public class Realm implements Cloneable {
+
+ public static final boolean AUTODEDUCEREALM =
+ java.security.AccessController.doPrivileged(
+ new sun.security.action.GetBooleanAction(
+ "sun.security.krb5.autodeducerealm"));
+
private final String realm; // not null nor empty
public Realm(String name) throws RealmException {
--- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java Thu Oct 22 11:14:00 2015 -0700
@@ -146,8 +146,9 @@
}
try {
return new PrincipalName(
+ type,
result.toArray(new String[result.size()]),
- type);
+ Realm.getDefault());
} catch (RealmException re) {
return null;
}
--- a/jdk/src/java.security.sasl/share/classes/javax/security/sasl/Sasl.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.security.sasl/share/classes/javax/security/sasl/Sasl.java Thu Oct 22 11:14:00 2015 -0700
@@ -310,6 +310,13 @@
* for information about how to install and configure security service
* providers.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param mechanisms The non-null list of mechanism names to try. Each is the
* IANA-registered name of a SASL mechanism. (e.g. "GSSAPI", "CRAM-MD5").
* @param authorizationId The possibly null protocol-dependent
@@ -452,6 +459,13 @@
* for information about how to install and configure security
* service providers.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param mechanism The non-null mechanism name. It must be an
* IANA-registered name of a SASL mechanism. (e.g. "GSSAPI", "CRAM-MD5").
* @param protocol The non-null string name of the protocol for which
--- a/jdk/src/java.smartcardio/share/classes/javax/smartcardio/TerminalFactory.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.smartcardio/share/classes/javax/smartcardio/TerminalFactory.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -229,6 +229,13 @@
* specified parameters Object. The type of parameters
* needed may vary between different types of <code>TerminalFactory</code>s.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param type the type of the requested TerminalFactory
* @param params the parameters to pass to the TerminalFactorySpi
* implementation, or null if no parameters are needed
--- a/jdk/src/java.sql/share/classes/java/sql/Statement.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.sql/share/classes/java/sql/Statement.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,9 @@
package java.sql;
+import java.util.regex.Pattern;
+import static java.util.stream.Collectors.joining;
+
/**
* <P>The object used for executing a static SQL statement
* and returning the results it produces.
@@ -1367,4 +1370,154 @@
throws SQLException {
throw new SQLFeatureNotSupportedException("executeLargeUpdate not implemented");
}
+
+ // JDBC 4.3
+
+ /**
+ * Returns a {@code String} enclosed in single quotes. Any occurrence of a
+ * single quote within the string will be replaced by two single quotes.
+ *
+ * <blockquote>
+ * <table border = 1 cellspacing=0 cellpadding=5 >
+ * <caption>Examples of the conversion:</caption>
+ * <tr><th>Value</th><th>Result</th></tr>
+ * <tr> <td align='center'>Hello</td> <td align='center'>'Hello'</td> </tr>
+ * <tr> <td align='center'>G'Day</td> <td align='center'>'G''Day'</td> </tr>
+ * <tr> <td align='center'>'G''Day'</td>
+ * <td align='center'>'''G''''Day'''</td> </tr>
+ * <tr> <td align='center'>I'''M</td> <td align='center'>'I''''''M'</td>
+ * </tr>
+ *
+ * </table>
+ * </blockquote>
+ * @implNote
+ * JDBC driver implementations may need to provide their own implementation
+ * of this method in order to meet the requirements of the underlying
+ * datasource.
+ * @param val a character string
+ * @return A string enclosed by single quotes with every single quote
+ * converted to two single quotes
+ * @throws NullPointerException if val is null
+ */
+ default String enquoteLiteral(String val) {
+ return "'" + val.replace("'", "''") + "'";
+ }
+
+
+ /**
+ * Returns a SQL identifier. If {@code identifier} is a simple SQL identifier:
+ * <ul>
+ * <li>Return the original value if {@code alwaysQuote} is
+ * {@code false}</li>
+ * <li>Return a delimited identifier if {@code alwaysQuote} is
+ * {@code true}</li>
+ * </ul>
+ *
+ * If {@code identifier} is not a simple SQL identifier, {@code identifier} will be
+ * enclosed in double quotes if not already present. If the datasource does
+ * not support double quotes for delimited identifiers, the
+ * identifier should be enclosed by the string returned from
+ * {@link DatabaseMetaData#getIdentifierQuoteString}. If the datasource
+ * does not support delimited identifiers, a
+ * {@code SQLFeatureNotSupportedException} should be thrown.
+ * <p>
+ * A {@code SQLException} will be thrown if {@code identifier} contains any
+ * characters invalid in a delimited identifier or the identifier length is
+ * invalid for the datasource.
+ *
+ * @implSpec
+ * The default implementation uses the following criteria to
+ * determine a valid simple SQL identifier:
+ * <ul>
+ * <li>The string is not enclosed in double quotes</li>
+ * <li>The first character is an alphabetic character from a through z, or
+ * from A through Z</li>
+ * <li>The name only contains alphanumeric characters or the character "_"</li>
+ * </ul>
+ *
+ * The default implementation will throw a {@code SQLException} if:
+ * <ul>
+ * <li>{@code identifier} contains a null character or double quote, and is not
+ * a simple SQL identifier.</li>
+ * <li>The length of {@code identifier} is less than 1 or greater than 128 characters
+ * </ul>
+ * <blockquote>
+ * <table border = 1 cellspacing=0 cellpadding=5 >
+ * <caption>Examples of the conversion:</caption>
+ * <tr>
+ * <th>identifier</th>
+ * <th>alwaysQuote</th>
+ * <th>Result</th></tr>
+ * <tr>
+ * <td align='center'>Hello</td>
+ * <td align='center'>false</td>
+ * <td align='center'>Hello</td>
+ * </tr>
+ * <tr>
+ * <td align='center'>Hello</td>
+ * <td align='center'>true</td>
+ * <td align='center'>"Hello"</td>
+ * </tr>
+ * <tr>
+ * <td align='center'>G'Day</td>
+ * <td align='center'>false</td>
+ * <td align='center'>"G'Day"</td>
+ * </tr>
+ * <tr>
+ * <td align='center'>"Bruce Wayne"</td>
+ * <td align='center'>false</td>
+ * <td align='center'>"Bruce Wayne"</td>
+ * </tr>
+ * <tr>
+ * <td align='center'>"Bruce Wayne"</td>
+ * <td align='center'>true</td>
+ * <td align='center'>"Bruce Wayne"</td>
+ * </tr>
+ * <tr>
+ * <td align='center'>GoodDay$</td>
+ * <td align='center'>false</td>
+ * <td align='center'>"GoodDay$"</td>
+ * </tr>
+ * <tr>
+ * <td align='center'>Hello"World</td>
+ * <td align='center'>false</td>
+ * <td align='center'>SQLException</td>
+ * </tr>
+ * <tr>
+ * <td align='center'>"Hello"World"</td>
+ * <td align='center'>false</td>
+ * <td align='center'>SQLException</td>
+ * </tr>
+ * </table>
+ * </blockquote>
+ * @implNote
+ * JDBC driver implementations may need to provide their own implementation
+ * of this method in order to meet the requirements of the underlying
+ * datasource.
+ * @param identifier a SQL identifier
+ * @param alwaysQuote indicates if a simple SQL identifier should be
+ * returned as a quoted identifier
+ * @return A simple SQL identifier or a delimited identifier
+ * @throws SQLException if identifier is not a valid identifier
+ * @throws SQLFeatureNotSupportedException if the datasource does not support
+ * delimited identifiers
+ * @throws NullPointerException if identifier is null
+ */
+ default String enquoteIdentifier(String identifier, boolean alwaysQuote) throws SQLException {
+ int len = identifier.length();
+ if (len < 1 || len > 128) {
+ throw new SQLException("Invalid name");
+ }
+ if (Pattern.compile("[\\p{Alpha}][\\p{Alnum}_]+").matcher(identifier).matches()) {
+ return alwaysQuote ? "\"" + identifier + "\"" : identifier;
+ }
+ if (identifier.matches("^\".+\"$")) {
+ identifier = identifier.substring(1, len - 1);
+ }
+ if (Pattern.compile("[^\u0000\"]+").matcher(identifier).matches()) {
+ return "\"" + identifier + "\"";
+ } else {
+ throw new SQLException("Invalid name");
+ }
+ }
}
--- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/TransformService.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/TransformService.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -136,6 +136,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param algorithm the URI of the algorithm
* @param mechanismType the type of the XML processing mechanism and
* representation
--- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/XMLSignatureFactory.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/XMLSignatureFactory.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -173,6 +173,13 @@
* <p>Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param mechanismType the type of the XML processing mechanism and
* representation. See the <a
* href="../../../../../technotes/guides/security/xmldsig/overview.html#Service%20Provider">
--- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/KeyInfoFactory.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/KeyInfoFactory.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -129,6 +129,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @param mechanismType the type of the XML processing mechanism and
* representation. See the <a
* href="../../../../../../technotes/guides/security/xmldsig/overview.html#Service%20Provider">
@@ -263,6 +270,13 @@
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
* @return a new <code>KeyInfoFactory</code>
* @throws NoSuchMechanismException if no <code>Provider</code> supports a
* <code>KeyInfoFactory</code> implementation for the DOM mechanism
--- a/jdk/src/jdk.accessibility/windows/native/common/AccessBridgeDebug.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/jdk.accessibility/windows/native/common/AccessBridgeDebug.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -36,39 +36,6 @@
extern "C" {
#endif
-/**
- * print a GetLastError message
- */
-char *printError(char *msg) {
- LPVOID lpMsgBuf = NULL;
- static char retbuf[256];
-
- if (msg != NULL) {
- strncpy((char *)retbuf, msg, sizeof(retbuf));
- }
- if (!FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- GetLastError(),
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
- (LPTSTR) &lpMsgBuf,
- 0,
- NULL ))
- {
- PrintDebugString(" %s: FormatMessage failed", msg);
- } else {
- PrintDebugString(" %s: %s", msg, (char *)lpMsgBuf);
- }
- if (lpMsgBuf != NULL) {
- strncat((char *)retbuf, ": ", sizeof(retbuf) - strlen(retbuf) - 1);
- strncat((char *)retbuf, (char *)lpMsgBuf, sizeof(retbuf) - strlen(retbuf) - 1);
- }
- return (char *)retbuf;
-}
-
-
/**
* Send debugging info to the appropriate place
*/
--- a/jdk/src/jdk.accessibility/windows/native/common/AccessBridgeDebug.h Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/jdk.accessibility/windows/native/common/AccessBridgeDebug.h Thu Oct 22 11:14:00 2015 -0700
@@ -49,7 +49,6 @@
extern "C" {
#endif
- char *printError(char *msg);
void PrintDebugString(char *msg, ...);
void PrintJavaDebugString(char *msg, ...);
void wPrintJavaDebugString(wchar_t *msg, ...);
--- a/jdk/src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -184,8 +184,8 @@
int modify(bool enable) {
errno_t error = 0;
- char path[512];
- char tempPath[512];
+ char path[_MAX_PATH];
+ char tempPath[_MAX_PATH];
// Get the path for %USERPROFILE%
char *profilePath;
size_t len;
@@ -195,11 +195,27 @@
perror("Error");
return error;
}
- strcpy_s(path, profilePath);
- strcat_s(path, "\\.accessibility.properties");
- strcpy_s(tempPath, profilePath);
- strcat_s(tempPath, "\\.acce$$ibility.properties");
+ const char acc_props1[] = "\\.accessibility.properties";
+ const char acc_props2[] = "\\.acce$$ibility.properties";
+ // len must be 234 or less (233 characters)
+ // sizeof(path) is 260 (room for 259 characters)
+ // sizeof(acc_props1) is 27 (26 characters)
+ // path will hold 233 path characters plus 26 file characters plus 1 null character)
+ // if len - 1 > 233 then error
+ if ( len - 1 > sizeof(path) - sizeof(acc_props1) ||
+ len - 1 > sizeof(tempPath) - sizeof(acc_props2) ) {
+ printf("The USERPROFILE environment variable is too long.\n");
+ printf("It must be no longer than 233 characters.\n");
+ return 123;
+ }
+ path[0] = 0;
+ strcat_s(path, _MAX_PATH, profilePath);
+ strcat_s(path, acc_props1);
+ tempPath[0] = 0;
+ strcat_s(tempPath, _MAX_PATH, profilePath);
+ strcat_s(tempPath, acc_props2);
free(profilePath);
+ profilePath = 0;
// Open the original file. If it doesn't exist and this is an enable request then create it.
error = fopen_s(&origFile, path, "r");
if (error) {
@@ -471,5 +487,9 @@
} else {
printf("disabled.\n");
}
+ // Use exit so test case can sense for error.
+ if (error != 0) {
+ exit(error);
+ }
}
}
--- a/jdk/src/jdk.accessibility/windows/native/libwindowsaccessbridge/WinAccessBridge.cpp Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/src/jdk.accessibility/windows/native/libwindowsaccessbridge/WinAccessBridge.cpp Thu Oct 22 11:14:00 2015 -0700
@@ -262,34 +262,6 @@
theWindowsAccessBridge = this;
isVMInstanceChainInUse = false;
-
- // notify the user if new JVMs are found
- /*
- newJVMs = (char **)malloc(MAX_NEW_JVMS_FOUND);
- for (int i = 0; i < MAX_NEW_JVMS_FOUND; i++) {
- newJVMs[i] = (char *)malloc(SHORT_STRING_SIZE);
- newJVMs[i][0] = 0;
- }
-
- BOOL newJ2SEFound = findNewJVMs(J2SE_REG_PATH, newJVMs);
- BOOL newJ2REFound = TRUE; // findNewJVMs(J2RE_REG_PATH, newJVMs);
-
- if (newJ2SEFound || newJ2REFound) {
-
- int result = DialogBox(windowsInstance,
- "FOUNDNEWJVMDIALOG",
- NULL,
- (DLGPROC)newJVMFoundDialogProc);
- if (result < 0) {
- printError("DialogBox failed");
- }
-
- PrintDebugString(" FOUNDNEWJVMDIALOG: result = %d", result);
-
- ShowWindow((HWND)result, SW_SHOW);
- }
- */
-
ShowWindow(theDialogWindow, SW_SHOW);
}
--- a/jdk/test/ProblemList.txt Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/ProblemList.txt Thu Oct 22 11:14:00 2015 -0700
@@ -133,6 +133,9 @@
# 8029891
java/lang/ClassLoader/deadlock/GetResource.java generic-all
+# 8131129
+java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java windows-all
+
############################################################################
# jdk_instrument
@@ -297,6 +300,9 @@
# 8074580
sun/security/pkcs11/rsa/TestKeyPairGenerator.java generic-all
+# 8139860
+com/oracle/security/ucrypto/TestRSA.java solaris-all
+
############################################################################
# jdk_sound
@@ -386,7 +392,4 @@
# 8057732
sun/jvmstat/monitor/MonitoredVm/MonitorVmStartTerminate.java generic-all
-# 8132648
-sun/tools/jhsdb/BasicLauncherTest.java generic-all
-
############################################################################
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/AppContext/ApplicationThreadsStop/ApplicationThreadsStop.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.AWTException;
+import java.awt.Frame;
+import java.awt.Robot;
+
+import sun.awt.AppContext;
+import sun.awt.SunToolkit;
+
+/**
+ * @test
+ * @bug 8136858
+ * @modules java.desktop/sun.awt
+ * @run main/othervm/java.security.policy=java.policy -Djava.security.manager ApplicationThreadsStop
+ */
+public final class ApplicationThreadsStop implements Runnable {
+
+ private static AppContext contextToDispose;
+ private static Thread thread;
+
+ public static void main(final String[] args) throws Exception {
+ ThreadGroup tg = new ThreadGroup("TestThreadGroup");
+ Thread t = new Thread(tg, new ApplicationThreadsStop());
+ t.start();
+ t.join();
+ contextToDispose.dispose();
+ // wait for appcontext to be destroyed
+ Thread.sleep(10000);
+ if(thread.isAlive()){
+ throw new RuntimeException("Thread is alive");
+ }
+ }
+
+ @Override
+ public void run() {
+ contextToDispose = SunToolkit.createNewAppContext();
+ Frame f = new Frame();
+ f.setSize(300, 300);
+ f.setLocationRelativeTo(null);
+ f.setVisible(true);
+ thread = new Thread(() -> {
+ while(true);
+ });
+ thread.start();
+ sync();
+ }
+
+ private static void sync() {
+ try {
+ new Robot().waitForIdle();
+ } catch (AWTException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/AppContext/ApplicationThreadsStop/java.policy Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,5 @@
+grant {
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.awt";
+ permission java.awt.AWTPermission "createRobot";
+ permission java.util.PropertyPermission "AWT.EventQueueClass", "read";
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/FontDisposer/FontDisposeTest.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.font.FontRenderContext;
+import java.awt.image.BufferedImage;
+import java.io.FileInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import sun.font.Font2DHandle;
+import sun.font.Font2D;
+import sun.font.FontScaler;
+import sun.font.Type1Font;
+
+/**
+ * @bug 8132985
+ * @summary Tests to verify Type1 Font scaler dispose crashes
+ * @modules java.desktop/sun.font
+ */
+public class FontDisposeTest
+{
+ public static void main(String[] args) throws Exception
+ {
+ // The bug only happens with Type 1 fonts. The Ghostscript font files
+ // should be commonly available. From distro pacakge or
+ // ftp://ftp.gnu.org/gnu/ghostscript/gnu-gs-fonts-other-6.0.tar.gz
+ // Pass pfa/pfb font file as argument
+ String path = args[0];
+
+ // Load
+ InputStream stream = new FileInputStream(path);
+ Font font = Font.createFont(Font.TYPE1_FONT,stream);
+
+ // Ensure native bits have been generated
+ BufferedImage img = new BufferedImage(100,100,
+ BufferedImage.TYPE_INT_ARGB);
+ Graphics2D g2d = img.createGraphics();
+ FontRenderContext frc = g2d.getFontRenderContext();
+
+ font.getLineMetrics("derp",frc);
+
+ // Force disposal -
+ // System.gc() is not sufficient.
+ Field font2DHandleField = Font.class.getDeclaredField("font2DHandle");
+ font2DHandleField.setAccessible(true);
+ sun.font.Font2DHandle font2DHandle =
+ (sun.font.Font2DHandle)font2DHandleField.get(font);
+
+ sun.font.Font2D font2D = font2DHandle.font2D;
+ sun.font.Type1Font type1Font = (sun.font.Type1Font)font2D;
+
+ Method getScalerMethod =
+ sun.font.Type1Font.class.getDeclaredMethod("getScaler");
+ getScalerMethod.setAccessible(true);
+ sun.font.FontScaler scaler =
+ (sun.font.FontScaler)getScalerMethod.invoke(type1Font);
+
+ // dispose should not crash due to double free
+ scaler.dispose();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Frame/FrameResize/ShowChildWhileResizingTest.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ @bug 8079595
+ @summary Resizing dialog which is JWindow parent makes JVM crash
+ @author Semyon Sadetsky
+ */
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
+
+public class ShowChildWhileResizingTest {
+
+ private static Window dialog;
+ private static Timer timer;
+ private static Point point;
+
+ public static void main(String[] args) throws Exception {
+ dialog = new Frame();
+ dialog.add(new JPanel());
+ dialog.setVisible(true);
+ dialog.setBounds(100, 100, 200, 200);
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ final Window dependentWindow = new JWindow(dialog);
+ JPanel panel = new JPanel();
+ panel.add(new JButton("button"));
+ dependentWindow.add(panel);
+ dependentWindow.setVisible(true);
+ dependentWindow.setBounds(0, 0, 50, 50);
+ timer = new Timer(100, new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ dependentWindow
+ .setVisible(!dependentWindow.isVisible());
+ }
+ });
+ timer.start();
+ }
+
+ });
+
+ Robot robot = new Robot();
+ robot.setAutoDelay(5);
+ robot.delay(300);
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ point = dialog.getLocationOnScreen();
+ }
+ });
+ robot.mouseMove(point.x + 200 - dialog.getInsets().right/2,
+ point.y + 200 - dialog.getInsets().bottom/2);
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ for(int i = 0; i < 100; i++) {
+ robot.mouseMove(point.x + 200 + i, point.y + 200 + i);
+ }
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+ timer.stop();
+ dialog.dispose();
+ System.out.println("ok");
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Graphics2D/DeviceBounds.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+/**
+ * @test
+ * @bug 8072682
+ * @summary Graphics.getDeviceConfiguration().getBounds returns wrong width/height
+ * @run main DeviceBounds
+ */
+public class DeviceBounds {
+ public static void main(String[] args) {
+ // NB: all images have the same type
+ BufferedImage[] images = new BufferedImage[] {
+ new BufferedImage(200, 200, BufferedImage.TYPE_3BYTE_BGR),
+ new BufferedImage(400, 400, BufferedImage.TYPE_3BYTE_BGR),
+ new BufferedImage(100, 100, BufferedImage.TYPE_3BYTE_BGR)
+ };
+ int count = 0;
+ for (BufferedImage i : images) {
+ Graphics2D g = i.createGraphics();
+ Rectangle bounds[] = new Rectangle[images.length];
+ bounds[count] = g.getDeviceConfiguration().getBounds();
+ System.out.println(bounds[count]);
+
+ g.dispose();
+ if (bounds[count].width != Integer.MAX_VALUE) {
+ throw new RuntimeException("Wrong getBounds");
+ }
+ count++;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/TextArea/TextAreaEditing/TextAreaEditing.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ @test
+ @bug 8040322
+ @summary Test TextArea APIs replaceRange, insert, append & setText
+ @run main TextAreaEditing
+ */
+
+import java.awt.Frame;
+import java.awt.TextArea;
+
+public class TextAreaEditing {
+
+ private int testFailCount;
+ private boolean isTestFail;
+ private StringBuilder testFailMessage;
+
+ private Frame mainFrame;
+ private TextArea textArea;
+
+ private TextAreaEditing() {
+ testFailMessage = new StringBuilder();
+ mainFrame = new Frame();
+ mainFrame.setSize(200, 200);
+
+ textArea = new TextArea();
+ mainFrame.add(textArea);
+ mainFrame.setVisible(true);
+ }
+
+ private void dispose() {
+ if (mainFrame != null) {
+ mainFrame.dispose();
+ }
+ }
+
+ public static void main(String[] s) {
+ TextAreaEditing textArea = new TextAreaEditing();
+ textArea.testReplaceRange();
+ textArea.testInsert();
+ textArea.testAppend();
+ textArea.checkFailures();
+ textArea.dispose();
+ }
+
+ private void testReplaceRange() {
+ textArea.setText(null);
+ textArea.replaceRange("Replace", 0, 0);
+ textArea.setText(null);
+ checkTest("");
+
+ textArea.setText("SetText");
+ textArea.replaceRange("Replace", 0, 3);
+ checkTest("ReplaceText");
+
+ textArea.replaceRange("String", textArea.getText().length(),
+ textArea.getText().length());
+ checkTest("ReplaceTextString");
+
+ textArea.replaceRange("String", 0, 0);
+ checkTest("StringReplaceTextString");
+
+ textArea.replaceRange("replaceRange", 0, textArea.getText().length());
+ checkTest("replaceRange");
+ }
+
+ private void testInsert() {
+ textArea.setText(null);
+ textArea.insert("Insert", 0);
+ textArea.setText("");
+ checkTest("");
+
+ textArea.setText("SetText");
+ textArea.insert("Insert", 3);
+ checkTest("SetInsertText");
+
+ textArea.insert("Insert", 0);
+ checkTest("InsertSetInsertText");
+
+ textArea.insert("Insert", textArea.getText().length());
+ checkTest("InsertSetInsertTextInsert");
+ }
+
+ private void testAppend() {
+ textArea.setText(null);
+ textArea.append("Append");
+ textArea.setText(null);
+ checkTest("");
+
+ textArea.setText("SetText");
+ textArea.append("Append");
+ checkTest("SetTextAppend");
+
+ textArea.append("");
+ checkTest("SetTextAppend");
+ textArea.setText("");
+ checkTest("");
+ }
+
+ private void checkTest(String str) {
+ if (str != null && !str.equals(textArea.getText())) {
+ testFailMessage.append("TestFail line : ");
+ testFailMessage.append(Thread.currentThread().getStackTrace()[2].
+ getLineNumber());
+ testFailMessage.append(" TextArea string : \"");
+ testFailMessage.append(textArea.getText());
+ testFailMessage.append("\" does not match expected string : \"");
+ testFailMessage.append(str).append("\"");
+ testFailMessage.append(System.getProperty("line.separator"));
+ testFailCount++;
+ isTestFail = true;
+ }
+ }
+
+ private void checkFailures() {
+ if (isTestFail) {
+ testFailMessage.insert(0, "Test Fail count : " + testFailCount
+ + System.getProperty("line.separator"));
+ dispose();
+ throw new RuntimeException(testFailMessage.toString());
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/ObjectInputStream/TestObjectStreamClass.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8135043
+ * @summary ObjectStreamClass.getField(String) too restrictive
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+import java.io.Serializable;
+
+public class TestObjectStreamClass {
+
+ public static void main(String[] args) throws Exception {
+ ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
+ ObjectOutputStream output = new ObjectOutputStream(byteOutput);
+ output.writeObject(new TestClass());
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(byteOutput.toByteArray());
+ TestObjectInputStream input = new TestObjectInputStream(bais);
+ input.readObject();
+
+ ObjectStreamClass osc = input.getDescriptor();
+
+ // All OSC public API methods should complete without throwing.
+ osc.getName();
+ osc.forClass();
+ osc.getField("str");
+ osc.getFields();
+ osc.getSerialVersionUID();
+ osc.toString();
+ }
+
+ static class TestClass implements Serializable {
+ String str = "hello world";
+ }
+
+ static class TestObjectInputStream extends ObjectInputStream {
+ private ObjectStreamClass objectStreamClass;
+
+ public TestObjectInputStream(InputStream in) throws IOException {
+ super(in);
+ }
+
+ public ObjectStreamClass getDescriptor()
+ throws IOException, ClassNotFoundException
+ {
+ return objectStreamClass;
+ }
+
+ public ObjectStreamClass readClassDescriptor()
+ throws IOException, ClassNotFoundException
+ {
+ objectStreamClass = super.readClassDescriptor();
+ return objectStreamClass;
+ }
+ }
+}
--- a/jdk/test/java/lang/Character/CheckProp.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/java/lang/Character/CheckProp.java Thu Oct 22 11:14:00 2015 -0700
@@ -24,7 +24,7 @@
/**
* @test
- * @bug 7037261 7070436 7198195 8032446
+ * @bug 7037261 7070436 7198195 8032446 8072600
* @summary Check j.l.Character.isLowerCase/isUppercase/isAlphabetic/isIdeographic
*/
--- a/jdk/test/java/lang/Character/CheckScript.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/java/lang/Character/CheckScript.java Thu Oct 22 11:14:00 2015 -0700
@@ -23,7 +23,7 @@
/**
* @test
- * @bug 6945564 6959267 7033561 7070436 7198195 8032446
+ * @bug 6945564 6959267 7033561 7070436 7198195 8032446 8072600
* @summary Check that the j.l.Character.UnicodeScript
*/
--- a/jdk/test/java/lang/Character/PropList.txt Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/java/lang/Character/PropList.txt Thu Oct 22 11:14:00 2015 -0700
@@ -1,8 +1,8 @@
-# PropList-7.0.0.txt
-# Date: 2014-02-19, 15:51:26 GMT [MD]
+# PropList-8.0.0.txt
+# Date: 2015-05-16, 17:50:38 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2014 Unicode, Inc.
+# Copyright (c) 1991-2015 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see http://www.unicode.org/reports/tr44/
@@ -189,18 +189,22 @@
11141..11143 ; Terminal_Punctuation # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
111C5..111C6 ; Terminal_Punctuation # Po [2] SHARADA DANDA..SHARADA DOUBLE DANDA
111CD ; Terminal_Punctuation # Po SHARADA SUTRA MARK
+111DE..111DF ; Terminal_Punctuation # Po [2] SHARADA SECTION MARK-1..SHARADA SECTION MARK-2
11238..1123C ; Terminal_Punctuation # Po [5] KHOJKI DANDA..KHOJKI DOUBLE SECTION MARK
+112A9 ; Terminal_Punctuation # Po MULTANI SECTION MARK
115C2..115C5 ; Terminal_Punctuation # Po [4] SIDDHAM DANDA..SIDDHAM SEPARATOR BAR
-115C9 ; Terminal_Punctuation # Po SIDDHAM END OF TEXT MARK
+115C9..115D7 ; Terminal_Punctuation # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
11641..11642 ; Terminal_Punctuation # Po [2] MODI DANDA..MODI DOUBLE DANDA
+1173C..1173E ; Terminal_Punctuation # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
12470..12474 ; Terminal_Punctuation # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
16A6E..16A6F ; Terminal_Punctuation # Po [2] MRO DANDA..MRO DOUBLE DANDA
16AF5 ; Terminal_Punctuation # Po BASSA VAH FULL STOP
16B37..16B39 ; Terminal_Punctuation # Po [3] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN CIM CHEEM
16B44 ; Terminal_Punctuation # Po PAHAWH HMONG SIGN XAUS
1BC9F ; Terminal_Punctuation # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+1DA87..1DA8A ; Terminal_Punctuation # Po [4] SIGNWRITING COMMA..SIGNWRITING COLON
-# Total code points: 214
+# Total code points: 238
# ================================================
@@ -425,7 +429,7 @@
081B..0823 ; Other_Alphabetic # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
0825..0827 ; Other_Alphabetic # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
0829..082C ; Other_Alphabetic # Mn [4] SAMARITAN VOWEL SIGN LONG I..SAMARITAN VOWEL SIGN SUKUN
-08E4..08E9 ; Other_Alphabetic # Mn [6] ARABIC CURLY FATHA..ARABIC CURLY KASRATAN
+08E3..08E9 ; Other_Alphabetic # Mn [7] ARABIC TURNED DAMMA BELOW..ARABIC CURLY KASRATAN
08F0..0902 ; Other_Alphabetic # Mn [19] ARABIC OPEN FATHATAN..DEVANAGARI SIGN ANUSVARA
0903 ; Other_Alphabetic # Mc DEVANAGARI SIGN VISARGA
093A ; Other_Alphabetic # Mn DEVANAGARI VOWEL SIGN OE
@@ -560,8 +564,6 @@
1930..1931 ; Other_Alphabetic # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
1932 ; Other_Alphabetic # Mn LIMBU SMALL LETTER ANUSVARA
1933..1938 ; Other_Alphabetic # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
-19B0..19C0 ; Other_Alphabetic # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
-19C8..19C9 ; Other_Alphabetic # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
1A17..1A18 ; Other_Alphabetic # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
1A19..1A1A ; Other_Alphabetic # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
1A1B ; Other_Alphabetic # Mn BUGINESE VOWEL SIGN AE
@@ -605,7 +607,7 @@
24B6..24E9 ; Other_Alphabetic # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
2DE0..2DFF ; Other_Alphabetic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
A674..A67B ; Other_Alphabetic # Mn [8] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC LETTER OMEGA
-A69F ; Other_Alphabetic # Mn COMBINING CYRILLIC LETTER IOTIFIED E
+A69E..A69F ; Other_Alphabetic # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
A823..A824 ; Other_Alphabetic # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
A825..A826 ; Other_Alphabetic # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
A827 ; Other_Alphabetic # Mc SYLOTI NAGRI VOWEL SIGN OO
@@ -672,7 +674,7 @@
112DF ; Other_Alphabetic # Mn KHUDAWADI SIGN ANUSVARA
112E0..112E2 ; Other_Alphabetic # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
112E3..112E8 ; Other_Alphabetic # Mn [6] KHUDAWADI VOWEL SIGN U..KHUDAWADI VOWEL SIGN AU
-11301 ; Other_Alphabetic # Mn GRANTHA SIGN CANDRABINDU
+11300..11301 ; Other_Alphabetic # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
11302..11303 ; Other_Alphabetic # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
1133E..1133F ; Other_Alphabetic # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
11340 ; Other_Alphabetic # Mn GRANTHA VOWEL SIGN II
@@ -693,6 +695,7 @@
115B8..115BB ; Other_Alphabetic # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
115BC..115BD ; Other_Alphabetic # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
115BE ; Other_Alphabetic # Mc SIDDHAM SIGN VISARGA
+115DC..115DD ; Other_Alphabetic # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
11630..11632 ; Other_Alphabetic # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
11633..1163A ; Other_Alphabetic # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
1163B..1163C ; Other_Alphabetic # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
@@ -704,6 +707,11 @@
116AD ; Other_Alphabetic # Mn TAKRI VOWEL SIGN AA
116AE..116AF ; Other_Alphabetic # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
116B0..116B5 ; Other_Alphabetic # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+1171D..1171F ; Other_Alphabetic # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11720..11721 ; Other_Alphabetic # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+11722..11725 ; Other_Alphabetic # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11726 ; Other_Alphabetic # Mc AHOM VOWEL SIGN E
+11727..1172A ; Other_Alphabetic # Mn [4] AHOM VOWEL SIGN AW..AHOM VOWEL SIGN AM
16B30..16B36 ; Other_Alphabetic # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
16F51..16F7E ; Other_Alphabetic # Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG
1BC9E ; Other_Alphabetic # Mn DUPLOYAN DOUBLE MARK
@@ -720,15 +728,16 @@
3021..3029 ; Ideographic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
3038..303A ; Ideographic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
3400..4DB5 ; Ideographic # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FCC ; Ideographic # Lo [20941] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCC
+4E00..9FD5 ; Ideographic # Lo [20950] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FD5
F900..FA6D ; Ideographic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
20000..2A6D6 ; Ideographic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
2A700..2B734 ; Ideographic # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Ideographic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; Ideographic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 75633
+# Total code points: 81404
# ================================================
@@ -773,7 +782,7 @@
07EB..07F3 ; Diacritic # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
07F4..07F5 ; Diacritic # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
0818..0819 ; Diacritic # Mn [2] SAMARITAN MARK OCCLUSION..SAMARITAN MARK DAGESH
-08E4..08FE ; Diacritic # Mn [27] ARABIC CURLY FATHA..ARABIC DAMMA WITH DOT
+08E3..08FE ; Diacritic # Mn [28] ARABIC TURNED DAMMA BELOW..ARABIC DAMMA WITH DOT
093C ; Diacritic # Mn DEVANAGARI SIGN NUKTA
094D ; Diacritic # Mn DEVANAGARI SIGN VIRAMA
0951..0954 ; Diacritic # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
@@ -877,7 +886,7 @@
ABEC ; Diacritic # Mc MEETEI MAYEK LUM IYEK
ABED ; Diacritic # Mn MEETEI MAYEK APUN IYEK
FB1E ; Diacritic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
-FE20..FE2D ; Diacritic # Mn [14] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON BELOW
+FE20..FE2F ; Diacritic # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
FF3E ; Diacritic # Sk FULLWIDTH CIRCUMFLEX ACCENT
FF40 ; Diacritic # Sk FULLWIDTH GRAVE ACCENT
FF70 ; Diacritic # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
@@ -889,6 +898,7 @@
11133..11134 ; Diacritic # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA
11173 ; Diacritic # Mn MAHAJANI SIGN NUKTA
111C0 ; Diacritic # Mc SHARADA SIGN VIRAMA
+111CA..111CC ; Diacritic # Mn [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK
11235 ; Diacritic # Mc KHOJKI SIGN VIRAMA
11236 ; Diacritic # Mn KHOJKI SIGN NUKTA
112E9..112EA ; Diacritic # Mn [2] KHUDAWADI SIGN NUKTA..KHUDAWADI SIGN VIRAMA
@@ -901,6 +911,7 @@
1163F ; Diacritic # Mn MODI SIGN VIRAMA
116B6 ; Diacritic # Mc TAKRI SIGN VIRAMA
116B7 ; Diacritic # Mn TAKRI SIGN NUKTA
+1172B ; Diacritic # Mn AHOM SIGN KILLER
16AF0..16AF4 ; Diacritic # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
16F8F..16F92 ; Diacritic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
16F93..16F9F ; Diacritic # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
@@ -911,7 +922,7 @@
1D1AA..1D1AD ; Diacritic # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
1E8D0..1E8D6 ; Diacritic # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
-# Total code points: 766
+# Total code points: 773
# ================================================
@@ -1053,7 +1064,7 @@
# ================================================
3400..4DB5 ; Unified_Ideograph # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FCC ; Unified_Ideograph # Lo [20941] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCC
+4E00..9FD5 ; Unified_Ideograph # Lo [20950] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FD5
FA0E..FA0F ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F
FA11 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA11
FA13..FA14 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14
@@ -1064,8 +1075,9 @@
20000..2A6D6 ; Unified_Ideograph # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
2A700..2B734 ; Unified_Ideograph # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Unified_Ideograph # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; Unified_Ideograph # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
-# Total code points: 74617
+# Total code points: 80388
# ================================================
@@ -1094,9 +1106,9 @@
2329 ; Deprecated # Ps LEFT-POINTING ANGLE BRACKET
232A ; Deprecated # Pe RIGHT-POINTING ANGLE BRACKET
E0001 ; Deprecated # Cf LANGUAGE TAG
-E0020..E007F ; Deprecated # Cf [96] TAG SPACE..CANCEL TAG
+E007F ; Deprecated # Cf CANCEL TAG
-# Total code points: 111
+# Total code points: 16
# ================================================
@@ -1138,11 +1150,13 @@
0E40..0E44 ; Logical_Order_Exception # Lo [5] THAI CHARACTER SARA E..THAI CHARACTER SARA AI MAIMALAI
0EC0..0EC4 ; Logical_Order_Exception # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+19B5..19B7 ; Logical_Order_Exception # Lo [3] NEW TAI LUE VOWEL SIGN E..NEW TAI LUE VOWEL SIGN O
+19BA ; Logical_Order_Exception # Lo NEW TAI LUE VOWEL SIGN AY
AAB5..AAB6 ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O
AAB9 ; Logical_Order_Exception # Lo TAI VIET VOWEL UEA
AABB..AABC ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL AUE..TAI VIET VOWEL AY
-# Total code points: 15
+# Total code points: 19
# ================================================
@@ -1213,18 +1227,22 @@
11141..11143 ; STerm # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
111C5..111C6 ; STerm # Po [2] SHARADA DANDA..SHARADA DOUBLE DANDA
111CD ; STerm # Po SHARADA SUTRA MARK
+111DE..111DF ; STerm # Po [2] SHARADA SECTION MARK-1..SHARADA SECTION MARK-2
11238..11239 ; STerm # Po [2] KHOJKI DANDA..KHOJKI DOUBLE DANDA
1123B..1123C ; STerm # Po [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK
+112A9 ; STerm # Po MULTANI SECTION MARK
115C2..115C3 ; STerm # Po [2] SIDDHAM DANDA..SIDDHAM DOUBLE DANDA
-115C9 ; STerm # Po SIDDHAM END OF TEXT MARK
+115C9..115D7 ; STerm # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
11641..11642 ; STerm # Po [2] MODI DANDA..MODI DOUBLE DANDA
+1173C..1173E ; STerm # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
16A6E..16A6F ; STerm # Po [2] MRO DANDA..MRO DOUBLE DANDA
16AF5 ; STerm # Po BASSA VAH FULL STOP
16B37..16B38 ; STerm # Po [2] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS TSHAB CEEB
16B44 ; STerm # Po PAHAWH HMONG SIGN XAUS
1BC9F ; STerm # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+1DA88 ; STerm # Po SIGNWRITING FULL STOP
-# Total code points: 99
+# Total code points: 120
# ================================================
@@ -1432,7 +1450,9 @@
2BBD..2BC8 ; Pattern_Syntax # So [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
2BC9 ; Pattern_Syntax # Cn <reserved-2BC9>
2BCA..2BD1 ; Pattern_Syntax # So [8] TOP HALF BLACK CIRCLE..UNCERTAINTY SIGN
-2BD2..2BFF ; Pattern_Syntax # Cn [46] <reserved-2BD2>..<reserved-2BFF>
+2BD2..2BEB ; Pattern_Syntax # Cn [26] <reserved-2BD2>..<reserved-2BEB>
+2BEC..2BEF ; Pattern_Syntax # So [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+2BF0..2BFF ; Pattern_Syntax # Cn [16] <reserved-2BF0>..<reserved-2BFF>
2E00..2E01 ; Pattern_Syntax # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
2E02 ; Pattern_Syntax # Pi LEFT SUBSTITUTION BRACKET
2E03 ; Pattern_Syntax # Pf RIGHT SUBSTITUTION BRACKET
--- a/jdk/test/java/lang/Character/PropertyValueAliases.txt Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/java/lang/Character/PropertyValueAliases.txt Thu Oct 22 11:14:00 2015 -0700
@@ -1,8 +1,8 @@
-# PropertyValueAliases-7.0.0.txt
-# Date: 2014-05-14, 23:55:16 GMT [MD]
+# PropertyValueAliases-8.0.0.txt
+# Date: 2015-03-11, 22:29:33 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2014 Unicode, Inc.
+# Copyright (c) 1991-2015 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see http://www.unicode.org/reports/tr44/
#
@@ -77,6 +77,7 @@
age; 6.2 ; V6_2
age; 6.3 ; V6_3
age; 7.0 ; V7_0
+age; 8.0 ; V8_0
age; NA ; Unassigned
# Alphabetic (Alpha)
@@ -138,8 +139,10 @@
# Block (blk)
blk; Aegean_Numbers ; Aegean_Numbers
+blk; Ahom ; Ahom
blk; Alchemical ; Alchemical_Symbols
blk; Alphabetic_PF ; Alphabetic_Presentation_Forms
+blk; Anatolian_Hieroglyphs ; Anatolian_Hieroglyphs
blk; Ancient_Greek_Music ; Ancient_Greek_Musical_Notation
blk; Ancient_Greek_Numbers ; Ancient_Greek_Numbers
blk; Ancient_Symbols ; Ancient_Symbols
@@ -173,6 +176,7 @@
blk; Chakma ; Chakma
blk; Cham ; Cham
blk; Cherokee ; Cherokee
+blk; Cherokee_Sup ; Cherokee_Supplement
blk; CJK ; CJK_Unified_Ideographs
blk; CJK_Compat ; CJK_Compatibility
blk; CJK_Compat_Forms ; CJK_Compatibility_Forms
@@ -182,6 +186,7 @@
blk; CJK_Ext_B ; CJK_Unified_Ideographs_Extension_B
blk; CJK_Ext_C ; CJK_Unified_Ideographs_Extension_C
blk; CJK_Ext_D ; CJK_Unified_Ideographs_Extension_D
+blk; CJK_Ext_E ; CJK_Unified_Ideographs_Extension_E
blk; CJK_Radicals_Sup ; CJK_Radicals_Supplement
blk; CJK_Strokes ; CJK_Strokes
blk; CJK_Symbols ; CJK_Symbols_And_Punctuation
@@ -208,6 +213,7 @@
blk; Dingbats ; Dingbats
blk; Domino ; Domino_Tiles
blk; Duployan ; Duployan
+blk; Early_Dynastic_Cuneiform ; Early_Dynastic_Cuneiform
blk; Egyptian_Hieroglyphs ; Egyptian_Hieroglyphs
blk; Elbasan ; Elbasan
blk; Emoticons ; Emoticons
@@ -234,6 +240,7 @@
blk; Half_Marks ; Combining_Half_Marks
blk; Hangul ; Hangul_Syllables
blk; Hanunoo ; Hanunoo
+blk; Hatran ; Hatran
blk; Hebrew ; Hebrew
blk; High_PU_Surrogates ; High_Private_Use_Surrogates
blk; High_Surrogates ; High_Surrogates
@@ -303,6 +310,7 @@
blk; Modifier_Tone_Letters ; Modifier_Tone_Letters
blk; Mongolian ; Mongolian
blk; Mro ; Mro
+blk; Multani ; Multani
blk; Music ; Musical_Symbols
blk; Myanmar ; Myanmar
blk; Myanmar_Ext_A ; Myanmar_Extended_A
@@ -315,6 +323,7 @@
blk; OCR ; Optical_Character_Recognition
blk; Ogham ; Ogham
blk; Ol_Chiki ; Ol_Chiki
+blk; Old_Hungarian ; Old_Hungarian
blk; Old_Italic ; Old_Italic
blk; Old_North_Arabian ; Old_North_Arabian
blk; Old_Permic ; Old_Permic
@@ -359,7 +368,9 @@
blk; Sup_PUA_A ; Supplementary_Private_Use_Area_A
blk; Sup_PUA_B ; Supplementary_Private_Use_Area_B
blk; Sup_Punctuation ; Supplemental_Punctuation
+blk; Sup_Symbols_And_Pictographs ; Supplemental_Symbols_And_Pictographs
blk; Super_And_Sub ; Superscripts_And_Subscripts
+blk; Sutton_SignWriting ; Sutton_SignWriting
blk; Syloti_Nagri ; Syloti_Nagri
blk; Syriac ; Syriac
blk; Tagalog ; Tagalog
@@ -709,22 +720,22 @@
Ideo; N ; No ; F ; False
Ideo; Y ; Yes ; T ; True
-# Indic_Matra_Category (InMC)
+# Indic_Positional_Category (InPC)
-InMC; Bottom ; Bottom
-InMC; Bottom_And_Right ; Bottom_And_Right
-InMC; Left ; Left
-InMC; Left_And_Right ; Left_And_Right
-InMC; NA ; NA
-InMC; Overstruck ; Overstruck
-InMC; Right ; Right
-InMC; Top ; Top
-InMC; Top_And_Bottom ; Top_And_Bottom
-InMC; Top_And_Bottom_And_Right ; Top_And_Bottom_And_Right
-InMC; Top_And_Left ; Top_And_Left
-InMC; Top_And_Left_And_Right ; Top_And_Left_And_Right
-InMC; Top_And_Right ; Top_And_Right
-InMC; Visual_Order_Left ; Visual_Order_Left
+InPC; Bottom ; Bottom
+InPC; Bottom_And_Right ; Bottom_And_Right
+InPC; Left ; Left
+InPC; Left_And_Right ; Left_And_Right
+InPC; NA ; NA
+InPC; Overstruck ; Overstruck
+InPC; Right ; Right
+InPC; Top ; Top
+InPC; Top_And_Bottom ; Top_And_Bottom
+InPC; Top_And_Bottom_And_Right ; Top_And_Bottom_And_Right
+InPC; Top_And_Left ; Top_And_Left
+InPC; Top_And_Left_And_Right ; Top_And_Left_And_Right
+InPC; Top_And_Right ; Top_And_Right
+InPC; Visual_Order_Left ; Visual_Order_Left
# Indic_Syllabic_Category (InSC)
@@ -736,11 +747,14 @@
InSC; Consonant_Dead ; Consonant_Dead
InSC; Consonant_Final ; Consonant_Final
InSC; Consonant_Head_Letter ; Consonant_Head_Letter
+InSC; Consonant_Killer ; Consonant_Killer
InSC; Consonant_Medial ; Consonant_Medial
InSC; Consonant_Placeholder ; Consonant_Placeholder
InSC; Consonant_Preceding_Repha ; Consonant_Preceding_Repha
+InSC; Consonant_Prefixed ; Consonant_Prefixed
InSC; Consonant_Subjoined ; Consonant_Subjoined
InSC; Consonant_Succeeding_Repha ; Consonant_Succeeding_Repha
+InSC; Consonant_With_Stacker ; Consonant_With_Stacker
InSC; Gemination_Mark ; Gemination_Mark
InSC; Invisible_Stacker ; Invisible_Stacker
InSC; Joiner ; Joiner
@@ -752,6 +766,7 @@
InSC; Other ; Other
InSC; Pure_Killer ; Pure_Killer
InSC; Register_Shifter ; Register_Shifter
+InSC; Syllable_Modifier ; Syllable_Modifier
InSC; Tone_Letter ; Tone_Letter
InSC; Tone_Mark ; Tone_Mark
InSC; Virama ; Virama
@@ -1099,6 +1114,7 @@
# Script (sc)
sc ; Aghb ; Caucasian_Albanian
+sc ; Ahom ; Ahom
sc ; Arab ; Arabic
sc ; Armi ; Imperial_Aramaic
sc ; Armn ; Armenian
@@ -1137,10 +1153,13 @@
sc ; Hang ; Hangul
sc ; Hani ; Han
sc ; Hano ; Hanunoo
+sc ; Hatr ; Hatran
sc ; Hebr ; Hebrew
sc ; Hira ; Hiragana
+sc ; Hluw ; Anatolian_Hieroglyphs
sc ; Hmng ; Pahawh_Hmong
sc ; Hrkt ; Katakana_Or_Hiragana
+sc ; Hung ; Old_Hungarian
sc ; Ital ; Old_Italic
sc ; Java ; Javanese
sc ; Kali ; Kayah_Li
@@ -1171,6 +1190,7 @@
sc ; Mong ; Mongolian
sc ; Mroo ; Mro
sc ; Mtei ; Meetei_Mayek
+sc ; Mult ; Multani
sc ; Mymr ; Myanmar
sc ; Narb ; Old_North_Arabian
sc ; Nbat ; Nabataean
@@ -1194,6 +1214,7 @@
sc ; Samr ; Samaritan
sc ; Sarb ; Old_South_Arabian
sc ; Saur ; Saurashtra
+sc ; Sgnw ; SignWriting
sc ; Shaw ; Shavian
sc ; Shrd ; Sharada
sc ; Sidd ; Siddham
--- a/jdk/test/java/lang/Character/Scripts.txt Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/java/lang/Character/Scripts.txt Thu Oct 22 11:14:00 2015 -0700
@@ -1,10 +1,16 @@
-# Scripts-7.0.0.txt
-# Date: 2014-05-15, 00:11:35 GMT [MD]
+# Scripts-8.0.0.txt
+# Date: 2015-03-11, 22:29:42 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2014 Unicode, Inc.
+# Copyright (c) 1991-2015 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see http://www.unicode.org/reports/tr44/
+# For more information, see:
+# UAX #24, Unicode Script Property: http://www.unicode.org/reports/tr24/
+# Especially the sections:
+# http://www.unicode.org/reports/tr24/#Assignment_Script_Values
+# http://www.unicode.org/reports/tr24/#Assignment_ScriptX_Values
+#
# ================================================
@@ -89,7 +95,6 @@
061C ; Common # Cf ARABIC LETTER MARK
061F ; Common # Po ARABIC QUESTION MARK
0640 ; Common # Lm ARABIC TATWEEL
-0660..0669 ; Common # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
06DD ; Common # Cf ARABIC END OF AYAH
0964..0965 ; Common # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
0E3F ; Common # Sc THAI CURRENCY SYMBOL BAHT
@@ -148,7 +153,7 @@
208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS
208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS
-20A0..20BD ; Common # Sc [30] EURO-CURRENCY SIGN..RUBLE SIGN
+20A0..20BE ; Common # Sc [31] EURO-CURRENCY SIGN..LARI SIGN
2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
2102 ; Common # L& DOUBLE-STRUCK CAPITAL C
2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA
@@ -182,6 +187,7 @@
214F ; Common # So SYMBOL FOR SAMARITAN SOURCE
2150..215F ; Common # No [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE
2189 ; Common # No VULGAR FRACTION ZERO THIRDS
+218A..218B ; Common # So [2] TURNED DIGIT TWO..TURNED DIGIT THREE
2190..2194 ; Common # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
2195..2199 ; Common # So [5] UP DOWN ARROW..SOUTH WEST ARROW
219A..219B ; Common # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
@@ -304,6 +310,7 @@
2B98..2BB9 ; Common # So [34] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX
2BBD..2BC8 ; Common # So [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
2BCA..2BD1 ; Common # So [8] TOP HALF BLACK CIRCLE..UNCERTAINTY SIGN
+2BEC..2BEF ; Common # So [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
2E00..2E01 ; Common # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
2E02 ; Common # Pi LEFT SUBSTITUTION BRACKET
2E03 ; Common # Pf RIGHT SUBSTITUTION BRACKET
@@ -512,7 +519,7 @@
1D173..1D17A ; Common # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
1D183..1D184 ; Common # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
1D18C..1D1A9 ; Common # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
-1D1AE..1D1DD ; Common # So [48] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL PES SUBPUNCTIS
+1D1AE..1D1E8 ; Common # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN
1D300..1D356 ; Common # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
1D360..1D371 ; Common # No [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE
1D400..1D454 ; Common # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
@@ -571,16 +578,11 @@
1F210..1F23A ; Common # So [43] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-55B6
1F240..1F248 ; Common # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F250..1F251 ; Common # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
-1F300..1F32C ; Common # So [45] CYCLONE..WIND BLOWING FACE
-1F330..1F37D ; Common # So [78] CHESTNUT..FORK AND KNIFE WITH PLATE
-1F380..1F3CE ; Common # So [79] RIBBON..RACING CAR
-1F3D4..1F3F7 ; Common # So [36] SNOW CAPPED MOUNTAIN..LABEL
-1F400..1F4FE ; Common # So [255] RAT..PORTABLE STEREO
-1F500..1F54A ; Common # So [75] TWISTED RIGHTWARDS ARROWS..DOVE OF PEACE
-1F550..1F579 ; Common # So [42] CLOCK FACE ONE OCLOCK..JOYSTICK
+1F300..1F3FA ; Common # So [251] CYCLONE..AMPHORA
+1F3FB..1F3FF ; Common # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
+1F400..1F579 ; Common # So [378] RAT..JOYSTICK
1F57B..1F5A3 ; Common # So [41] LEFT HAND TELEPHONE RECEIVER..BLACK DOWN POINTING BACKHAND INDEX
-1F5A5..1F642 ; Common # So [158] DESKTOP COMPUTER..SLIGHTLY SMILING FACE
-1F645..1F6CF ; Common # So [139] FACE WITH NO GOOD GESTURE..BED
+1F5A5..1F6D0 ; Common # So [300] DESKTOP COMPUTER..PLACE OF WORSHIP
1F6E0..1F6EC ; Common # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
1F6F0..1F6F3 ; Common # So [4] SATELLITE..PASSENGER SHIP
1F700..1F773 ; Common # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
@@ -590,10 +592,13 @@
1F850..1F859 ; Common # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
1F860..1F887 ; Common # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
1F890..1F8AD ; Common # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
+1F910..1F918 ; Common # So [9] ZIPPER-MOUTH FACE..SIGN OF THE HORNS
+1F980..1F984 ; Common # So [5] CRAB..UNICORN FACE
+1F9C0 ; Common # So CHEESE WEDGE
E0001 ; Common # Cf LANGUAGE TAG
E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
-# Total code points: 7129
+# Total code points: 7179
# ================================================
@@ -635,20 +640,21 @@
A770 ; Latin # Lm MODIFIER LETTER US
A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
A78B..A78E ; Latin # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A78F ; Latin # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7AD ; Latin # L& [30] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER L WITH BELT
-A7B0..A7B1 ; Latin # L& [2] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER TURNED T
+A7B0..A7B7 ; Latin # L& [8] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER OMEGA
A7F7 ; Latin # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; Latin # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; Latin # L& LATIN LETTER SMALL CAPITAL TURNED M
A7FB..A7FF ; Latin # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
AB30..AB5A ; Latin # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5C..AB5F ; Latin # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB64 ; Latin # L& LATIN SMALL LETTER INVERTED ALPHA
+AB60..AB64 ; Latin # L& [5] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER INVERTED ALPHA
FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
-# Total code points: 1338
+# Total code points: 1349
# ================================================
@@ -731,9 +737,10 @@
A67F ; Cyrillic # Lm CYRILLIC PAYEROK
A680..A69B ; Cyrillic # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
A69C..A69D ; Cyrillic # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
-A69F ; Cyrillic # Mn COMBINING CYRILLIC LETTER IOTIFIED E
-
-# Total code points: 431
+A69E..A69F ; Cyrillic # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+FE2E..FE2F ; Cyrillic # Mn [2] COMBINING CYRILLIC TITLO LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+
+# Total code points: 434
# ================================================
@@ -788,6 +795,7 @@
0620..063F ; Arabic # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
0641..064A ; Arabic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
0656..065F ; Arabic # Mn [10] ARABIC SUBSCRIPT ALEF..ARABIC WAVY HAMZA BELOW
+0660..0669 ; Arabic # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
066A..066D ; Arabic # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
066E..066F ; Arabic # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
0671..06D3 ; Arabic # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
@@ -806,8 +814,8 @@
06FD..06FE ; Arabic # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V
0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
-08A0..08B2 ; Arabic # Lo [19] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER ZAIN WITH INVERTED V ABOVE
-08E4..08FF ; Arabic # Mn [28] ARABIC CURLY FATHA..ARABIC MARK SIDEWAYS NOON GHUNNA
+08A0..08B4 ; Arabic # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
+08E3..08FF ; Arabic # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
FBB2..FBC1 ; Arabic # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
@@ -854,7 +862,7 @@
1EEAB..1EEBB ; Arabic # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
1EEF0..1EEF1 ; Arabic # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
-# Total code points: 1244
+# Total code points: 1257
# ================================================
@@ -902,8 +910,10 @@
A8F2..A8F7 ; Devanagari # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
A8F8..A8FA ; Devanagari # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
-
-# Total code points: 152
+A8FC ; Devanagari # Po DEVANAGARI SIGN SIDDHAM
+A8FD ; Devanagari # Lo DEVANAGARI JAIN OM
+
+# Total code points: 154
# ================================================
@@ -987,8 +997,9 @@
0AE6..0AEF ; Gujarati # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
0AF0 ; Gujarati # Po GUJARATI ABBREVIATION SIGN
0AF1 ; Gujarati # Sc GUJARATI RUPEE SIGN
-
-# Total code points: 84
+0AF9 ; Gujarati # Lo GUJARATI LETTER ZHA
+
+# Total code points: 85
# ================================================
@@ -1064,14 +1075,14 @@
0C46..0C48 ; Telugu # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
0C4A..0C4D ; Telugu # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
0C55..0C56 ; Telugu # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
-0C58..0C59 ; Telugu # Lo [2] TELUGU LETTER TSA..TELUGU LETTER DZA
+0C58..0C5A ; Telugu # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
0C60..0C61 ; Telugu # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
0C62..0C63 ; Telugu # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
0C66..0C6F ; Telugu # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
0C78..0C7E ; Telugu # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
0C7F ; Telugu # So TELUGU SIGN TUUMU
-# Total code points: 95
+# Total code points: 96
# ================================================
@@ -1115,14 +1126,14 @@
0D4D ; Malayalam # Mn MALAYALAM SIGN VIRAMA
0D4E ; Malayalam # Lo MALAYALAM LETTER DOT REPH
0D57 ; Malayalam # Mc MALAYALAM AU LENGTH MARK
-0D60..0D61 ; Malayalam # Lo [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
+0D5F..0D61 ; Malayalam # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
0D62..0D63 ; Malayalam # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
0D66..0D6F ; Malayalam # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
0D70..0D75 ; Malayalam # No [6] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE QUARTERS
0D79 ; Malayalam # So MALAYALAM DATE MARK
0D7A..0D7F ; Malayalam # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
-# Total code points: 99
+# Total code points: 100
# ================================================
@@ -1358,9 +1369,11 @@
# ================================================
-13A0..13F4 ; Cherokee # Lo [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
-
-# Total code points: 85
+13A0..13F5 ; Cherokee # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+13F8..13FD ; Cherokee # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+AB70..ABBF ; Cherokee # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+
+# Total code points: 172
# ================================================
@@ -1472,15 +1485,16 @@
3038..303A ; Han # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
303B ; Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
3400..4DB5 ; Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FCC ; Han # Lo [20941] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCC
+4E00..9FD5 ; Han # Lo [20950] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FD5
F900..FA6D ; Han # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
2A700..2B734 ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Han # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; Han # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 75963
+# Total code points: 81734
# ================================================
@@ -1680,9 +1694,7 @@
# ================================================
1980..19AB ; New_Tai_Lue # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
-19B0..19C0 ; New_Tai_Lue # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
-19C1..19C7 ; New_Tai_Lue # Lo [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
-19C8..19C9 ; New_Tai_Lue # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
+19B0..19C9 ; New_Tai_Lue # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
19D0..19D9 ; New_Tai_Lue # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
19DA ; New_Tai_Lue # No NEW TAI LUE THAM DIGIT ONE
19DE..19DF ; New_Tai_Lue # So [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
@@ -1770,11 +1782,12 @@
# ================================================
-12000..12398 ; Cuneiform # Lo [921] CUNEIFORM SIGN A..CUNEIFORM SIGN UM TIMES ME
+12000..12399 ; Cuneiform # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
12400..1246E ; Cuneiform # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
12470..12474 ; Cuneiform # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
-
-# Total code points: 1037
+12480..12543 ; Cuneiform # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+
+# Total code points: 1234
# ================================================
@@ -2151,9 +2164,12 @@
# ================================================
109A0..109B7 ; Meroitic_Cursive # Lo [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA
+109BC..109BD ; Meroitic_Cursive # No [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF
109BE..109BF ; Meroitic_Cursive # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
-
-# Total code points: 26
+109C0..109CF ; Meroitic_Cursive # No [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY
+109D2..109FF ; Meroitic_Cursive # No [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS
+
+# Total code points: 90
# ================================================
@@ -2180,12 +2196,16 @@
111B6..111BE ; Sharada # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111BF..111C0 ; Sharada # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
111C1..111C4 ; Sharada # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
-111C5..111C8 ; Sharada # Po [4] SHARADA DANDA..SHARADA SEPARATOR
+111C5..111C9 ; Sharada # Po [5] SHARADA DANDA..SHARADA SANDHI MARK
+111CA..111CC ; Sharada # Mn [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK
111CD ; Sharada # Po SHARADA SUTRA MARK
111D0..111D9 ; Sharada # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
111DA ; Sharada # Lo SHARADA EKAM
-
-# Total code points: 85
+111DB ; Sharada # Po SHARADA SIGN SIDDHAM
+111DC ; Sharada # Lo SHARADA HEADSTROKE
+111DD..111DF ; Sharada # Po [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2
+
+# Total code points: 94
# ================================================
@@ -2243,7 +2263,7 @@
# ================================================
-11301 ; Grantha # Mn GRANTHA SIGN CANDRABINDU
+11300..11301 ; Grantha # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
11302..11303 ; Grantha # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
11305..1130C ; Grantha # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
1130F..11310 ; Grantha # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI
@@ -2258,13 +2278,14 @@
11341..11344 ; Grantha # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
11347..11348 ; Grantha # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
1134B..1134D ; Grantha # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
+11350 ; Grantha # Lo GRANTHA OM
11357 ; Grantha # Mc GRANTHA AU LENGTH MARK
1135D..11361 ; Grantha # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
11362..11363 ; Grantha # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
11366..1136C ; Grantha # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
11370..11374 ; Grantha # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
-# Total code points: 83
+# Total code points: 85
# ================================================
@@ -2407,9 +2428,11 @@
115BC..115BD ; Siddham # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
115BE ; Siddham # Mc SIDDHAM SIGN VISARGA
115BF..115C0 ; Siddham # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
-115C1..115C9 ; Siddham # Po [9] SIDDHAM SIGN SIDDHAM..SIDDHAM END OF TEXT MARK
-
-# Total code points: 72
+115C1..115D7 ; Siddham # Po [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
+115D8..115DB ; Siddham # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
+115DC..115DD ; Siddham # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+
+# Total code points: 92
# ================================================
@@ -2448,4 +2471,69 @@
# Total code points: 84
+# ================================================
+
+11700..11719 ; Ahom # Lo [26] AHOM LETTER KA..AHOM LETTER JHA
+1171D..1171F ; Ahom # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11720..11721 ; Ahom # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+11722..11725 ; Ahom # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11726 ; Ahom # Mc AHOM VOWEL SIGN E
+11727..1172B ; Ahom # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+11730..11739 ; Ahom # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
+1173A..1173B ; Ahom # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
+1173C..1173E ; Ahom # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+1173F ; Ahom # So AHOM SYMBOL VI
+
+# Total code points: 57
+
+# ================================================
+
+14400..14646 ; Anatolian_Hieroglyphs # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
+
+# Total code points: 583
+
+# ================================================
+
+108E0..108F2 ; Hatran # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+108F4..108F5 ; Hatran # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+108FB..108FF ; Hatran # No [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED
+
+# Total code points: 26
+
+# ================================================
+
+11280..11286 ; Multani # Lo [7] MULTANI LETTER A..MULTANI LETTER GA
+11288 ; Multani # Lo MULTANI LETTER GHA
+1128A..1128D ; Multani # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA
+1128F..1129D ; Multani # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA
+1129F..112A8 ; Multani # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+112A9 ; Multani # Po MULTANI SECTION MARK
+
+# Total code points: 38
+
+# ================================================
+
+10C80..10CB2 ; Old_Hungarian # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2 ; Old_Hungarian # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+10CFA..10CFF ; Old_Hungarian # No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
+
+# Total code points: 108
+
+# ================================================
+
+1D800..1D9FF ; SignWriting # So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD
+1DA00..1DA36 ; SignWriting # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
+1DA37..1DA3A ; SignWriting # So [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE
+1DA3B..1DA6C ; SignWriting # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
+1DA6D..1DA74 ; SignWriting # So [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING
+1DA75 ; SignWriting # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+1DA76..1DA83 ; SignWriting # So [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH
+1DA84 ; SignWriting # Mn SIGNWRITING LOCATION HEAD NECK
+1DA85..1DA86 ; SignWriting # So [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS
+1DA87..1DA8B ; SignWriting # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS
+1DA9B..1DA9F ; SignWriting # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
+1DAA1..1DAAF ; SignWriting # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+
+# Total code points: 672
+
# EOF
--- a/jdk/test/java/lang/SecurityManager/CheckPackageAccess.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/java/lang/SecurityManager/CheckPackageAccess.java Thu Oct 22 11:14:00 2015 -0700
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 6741606 7146431 8000450 8019830 8022945 8027144 8041633
+ * @bug 6741606 7146431 8000450 8019830 8022945 8027144 8041633 8078427
* @summary Make sure all restricted packages listed in the package.access
* property in the java.security file are blocked
* @run main/othervm CheckPackageAccess
--- a/jdk/test/java/lang/SecurityManager/RestrictedPackages.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/java/lang/SecurityManager/RestrictedPackages.java Thu Oct 22 11:14:00 2015 -0700
@@ -66,6 +66,7 @@
"com.sun.org.apache.xalan.internal.xsltc.util.",
"com.sun.org.apache.xml.internal.res.",
"com.sun.org.apache.xml.internal.security.",
+ "com.sun.org.apache.xml.internal.serializer.dom3.",
"com.sun.org.apache.xml.internal.serializer.utils.",
"com.sun.org.apache.xml.internal.utils.",
"com.sun.org.glassfish.",
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/InetAddress/getOriginalHostName.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8133196
+ * @summary test functionality of getOriginalHostName(InetAddress)
+ * @modules java.base/jdk.internal.misc
+ */
+
+import java.io.*;
+import java.net.InetAddress;
+
+import jdk.internal.misc.JavaNetInetAddressAccess;
+import jdk.internal.misc.SharedSecrets;
+
+public class getOriginalHostName {
+
+ private static final JavaNetInetAddressAccess jna =
+ SharedSecrets.getJavaNetInetAddressAccess();
+
+ public static void main(String[] args) throws Exception {
+ final String HOST = "dummyserver.java.net";
+ InetAddress ia = null;
+ ia = InetAddress.getByName(HOST);
+ testInetAddress(ia, HOST);
+ ia = InetAddress.getByName("255.255.255.0");
+ testInetAddress(ia, null);
+ ia = InetAddress.getByAddress(new byte[]{1,1,1,1});
+ testInetAddress(ia, null);
+ ia = InetAddress.getLocalHost();
+ testInetAddress(ia, ia.getHostName());
+ ia = InetAddress.getLoopbackAddress();
+ testInetAddress(ia, ia.getHostName());
+ }
+
+
+ private static void testInetAddress(InetAddress ia, String expected)
+ throws Exception {
+
+ System.out.println("Testing InetAddress: " + ia);
+ System.out.println("Expecting original hostname of : " + expected);
+ String origHostName = jna.getOriginalHostName(ia);
+ System.out.println("via JavaNetAccess: " + origHostName);
+ if (origHostName == null && expected != null) {
+ throw new RuntimeException("Unexpected null. Testing:" + expected);
+ } else if (expected != null && !origHostName.equals(expected)) {
+ throw new RuntimeException("Unexpected hostname :" + origHostName);
+ } else if (expected == null && origHostName != null) {
+ throw new RuntimeException("Unexpected origHostName: " + origHostName);
+ }
+ }
+}
--- a/jdk/test/java/net/MulticastSocket/MultiDead.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/java/net/MulticastSocket/MultiDead.java Thu Oct 22 11:14:00 2015 -0700
@@ -35,11 +35,17 @@
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.CountDownLatch;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
import jdk.testlibrary.JDKToolLauncher;
+import jdk.testlibrary.Utils;
public class MultiDead {
private static final int THREAD_PAIR_COUNT = 4;
private static final int CHILDREN_COUNT = 20;
+ // at least 2.5 seconds for a child to complete
+ private static final long CHILD_TIMEOUT = 2500;
+ private static final long TIMEOUT =
+ Utils.adjustTimeout(CHILDREN_COUNT * CHILD_TIMEOUT * 2);
public static void main(String[] args) throws Throwable {
if (args.length == 0 || args[0].equals("parent")) {
@@ -65,6 +71,7 @@
for (int i = 0; i < CHILDREN_COUNT; ++i) {
System.out.println("child #" + (i + 1) + " of " +
CHILDREN_COUNT);
+ long start = System.nanoTime();
try {
child.set(pb.start());
child.get().waitFor();
@@ -74,11 +81,18 @@
} catch (Exception e) {
throw new RuntimeException(e);
}
+ if (System.nanoTime() - start >
+ MILLISECONDS.toNanos(CHILD_TIMEOUT)) {
+ System.err.println("Machine is too slow, " +
+ "skipping the test...");
+ break;
+ }
}
});
th.start();
- th.join(CHILDREN_COUNT * 1000); // 1 sec for a child to complete
+ th.join(TIMEOUT);
+
stopFlag.set(true);
if (th.isAlive()) {
if (child.get() != null) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/sql/testng/test/sql/CallableStatementTests.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package test.sql;
+
+import org.testng.annotations.BeforeMethod;
+import util.StubCallableStatement;
+
+public class CallableStatementTests extends PreparedStatementTests {
+
+ @BeforeMethod
+ public void setUpMethod() throws Exception {
+ stmt = new StubCallableStatement();
+ }
+
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/sql/testng/test/sql/PreparedStatementTests.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package test.sql;
+
+import org.testng.annotations.BeforeMethod;
+import util.StubPreparedStatement;
+
+public class PreparedStatementTests extends StatementTests {
+
+ @BeforeMethod
+ public void setUpMethod() throws Exception {
+ stmt = new StubPreparedStatement();
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/sql/testng/test/sql/StatementTests.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package test.sql;
+
+import java.sql.SQLException;
+import static org.testng.Assert.assertEquals;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import util.BaseTest;
+import util.StubStatement;
+
+public class StatementTests extends BaseTest {
+
+ protected StubStatement stmt;
+
+ @BeforeMethod
+ public void setUpMethod() throws Exception {
+ stmt = new StubStatement();
+ }
+
+ /*
+ * Verify that enquoteLiteral creates a valid literal and converts every
+ * single quote to two single quotes
+ */
+ @Test(dataProvider = "validEnquotedLiteralValues")
+ public void test00(String s, String expected) {
+ assertEquals(stmt.enquoteLiteral(s), expected);
+ }
+
+ /*
+ * Validate a NullPointerException is thrown if the string passed to
+ * enquoteLiteral is null
+ */
+ @Test(expectedExceptions = NullPointerException.class)
+ public void test01() {
+ stmt.enquoteLiteral(null);
+
+ }
+
+ /*
+ * Validate that enquoteIdentifier returns the expected value
+ */
+ @Test(dataProvider = "validIdentifierValues")
+ public void test02(String s, boolean alwaysQuote, String expected) throws SQLException {
+ assertEquals(stmt.enquoteIdentifier(s, alwaysQuote), expected);
+
+ }
+
+ /*
+ * Validate that a SQLException is thrown for values that are not valid
+ * for a SQL identifier
+ */
+ @Test(dataProvider = "invalidIdentifierValues",
+ expectedExceptions = SQLException.class)
+ public void test03(String s, boolean alwaysQuote) throws SQLException {
+ stmt.enquoteIdentifier(s, alwaysQuote);
+
+ }
+
+ /*
+ * Validate a NullPointerException is thrown is the string passed to
+ * enquoteIdentiifer is null
+ */
+ @Test(dataProvider = "trueFalse",
+ expectedExceptions = NullPointerException.class)
+ public void test04(boolean alwaysQuote) throws SQLException {
+ stmt.enquoteIdentifier(null, alwaysQuote);
+
+ }
+
+ /*
+ * DataProvider used to provide strings that will be used to validate
+ * that enquoteLiteral converts a string to a literal and every instance of
+ * a single quote will be converted into two single quotes in the literal.
+ */
+ @DataProvider(name = "validEnquotedLiteralValues")
+ protected Object[][] validEnquotedLiteralValues() {
+ return new Object[][]{
+ {"Hello", "'Hello'"},
+ {"G'Day", "'G''Day'"},
+ {"'G''Day'", "'''G''''Day'''"},
+ {"I'''M", "'I''''''M'"},
+ {"The Dark Knight", "'The Dark Knight'"}
+
+ };
+ }
+
+ /*
+ * DataProvider used to provide strings that will be used to validate
+ * that enqouteIdentifier returns a simple SQL Identifier or a double
+ * quoted identifier
+ */
+ @DataProvider(name = "validIdentifierValues")
+ protected Object[][] validEnquotedIdentifierValues() {
+ return new Object[][]{
+ {"Hello", false, "Hello"},
+ {"Hello", true, "\"Hello\""},
+ {"G'Day", false, "\"G'Day\""},
+ {"G'Day", true, "\"G'Day\""},
+ {"Bruce Wayne", false, "\"Bruce Wayne\""},
+ {"Bruce Wayne", true, "\"Bruce Wayne\""},
+ {"GoodDay$", false, "\"GoodDay$\""},
+ {"GoodDay$", true, "\"GoodDay$\""},};
+ }
+
+ /*
+ * DataProvider used to provide strings are invalid for enquoteIdentifier
+ * resulting in a SQLException being thrown
+ */
+ @DataProvider(name = "invalidIdentifierValues")
+ protected Object[][] invalidEnquotedIdentifierValues() {
+ int invalidLen = 129;
+ StringBuilder s = new StringBuilder(invalidLen);
+ for (int i = 0; i < invalidLen; i++) {
+ s.append('a');
+ }
+ return new Object[][]{
+ {"Hel\"lo", false},
+ {"\"Hel\"lo\"", true},
+ {"Hello" + '\0', false},
+ {"", false},
+ {s.toString(), false},};
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/sql/testng/util/StubCallableStatement.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,612 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package util;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.CallableStatement;
+import java.sql.Clob;
+import java.sql.Date;
+import java.sql.NClob;
+import java.sql.Ref;
+import java.sql.RowId;
+import java.sql.SQLException;
+import java.sql.SQLXML;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.Map;
+
+public class StubCallableStatement extends StubPreparedStatement
+implements CallableStatement{
+
+ @Override
+ public void registerOutParameter(int parameterIndex, int sqlType) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void registerOutParameter(int parameterIndex, int sqlType, int scale) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean wasNull() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public String getString(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean getBoolean(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public byte getByte(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public short getShort(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int getInt(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public long getLong(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public float getFloat(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public double getDouble(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public BigDecimal getBigDecimal(int parameterIndex, int scale) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public byte[] getBytes(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Date getDate(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Time getTime(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Timestamp getTimestamp(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Object getObject(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public BigDecimal getBigDecimal(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Object getObject(int parameterIndex, Map<String, Class<?>> map) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Ref getRef(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Blob getBlob(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Clob getClob(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Array getArray(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Date getDate(int parameterIndex, Calendar cal) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Time getTime(int parameterIndex, Calendar cal) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Timestamp getTimestamp(int parameterIndex, Calendar cal) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void registerOutParameter(int parameterIndex, int sqlType, String typeName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void registerOutParameter(String parameterName, int sqlType) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void registerOutParameter(String parameterName, int sqlType, int scale) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void registerOutParameter(String parameterName, int sqlType, String typeName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public URL getURL(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setURL(String parameterName, URL val) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNull(String parameterName, int sqlType) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBoolean(String parameterName, boolean x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setByte(String parameterName, byte x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setShort(String parameterName, short x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setInt(String parameterName, int x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setLong(String parameterName, long x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setFloat(String parameterName, float x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setDouble(String parameterName, double x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBigDecimal(String parameterName, BigDecimal x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setString(String parameterName, String x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBytes(String parameterName, byte[] x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setDate(String parameterName, Date x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setTime(String parameterName, Time x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setTimestamp(String parameterName, Timestamp x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setAsciiStream(String parameterName, InputStream x, int length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBinaryStream(String parameterName, InputStream x, int length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setObject(String parameterName, Object x, int targetSqlType, int scale) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setObject(String parameterName, Object x, int targetSqlType) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setObject(String parameterName, Object x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setCharacterStream(String parameterName, Reader reader, int length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setDate(String parameterName, Date x, Calendar cal) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setTime(String parameterName, Time x, Calendar cal) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setTimestamp(String parameterName, Timestamp x, Calendar cal) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNull(String parameterName, int sqlType, String typeName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public String getString(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean getBoolean(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public byte getByte(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public short getShort(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int getInt(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public long getLong(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public float getFloat(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public double getDouble(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public byte[] getBytes(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Date getDate(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Time getTime(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Timestamp getTimestamp(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Object getObject(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public BigDecimal getBigDecimal(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Object getObject(String parameterName, Map<String, Class<?>> map) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Ref getRef(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Blob getBlob(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Clob getClob(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Array getArray(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Date getDate(String parameterName, Calendar cal) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Time getTime(String parameterName, Calendar cal) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Timestamp getTimestamp(String parameterName, Calendar cal) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public URL getURL(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public RowId getRowId(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public RowId getRowId(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setRowId(String parameterName, RowId x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNString(String parameterName, String value) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNCharacterStream(String parameterName, Reader value, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNClob(String parameterName, NClob value) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setClob(String parameterName, Reader reader, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBlob(String parameterName, InputStream inputStream, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNClob(String parameterName, Reader reader, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public NClob getNClob(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public NClob getNClob(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setSQLXML(String parameterName, SQLXML xmlObject) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public SQLXML getSQLXML(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public SQLXML getSQLXML(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public String getNString(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public String getNString(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Reader getNCharacterStream(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Reader getNCharacterStream(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Reader getCharacterStream(int parameterIndex) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Reader getCharacterStream(String parameterName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBlob(String parameterName, Blob x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setClob(String parameterName, Clob x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setAsciiStream(String parameterName, InputStream x, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBinaryStream(String parameterName, InputStream x, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setCharacterStream(String parameterName, Reader reader, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setAsciiStream(String parameterName, InputStream x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBinaryStream(String parameterName, InputStream x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setCharacterStream(String parameterName, Reader reader) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNCharacterStream(String parameterName, Reader value) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setClob(String parameterName, Reader reader) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBlob(String parameterName, InputStream inputStream) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNClob(String parameterName, Reader reader) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public <T> T getObject(int parameterIndex, Class<T> type) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public <T> T getObject(String parameterName, Class<T> type) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/sql/testng/util/StubPreparedStatement.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,323 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package util;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.Clob;
+import java.sql.Date;
+import java.sql.NClob;
+import java.sql.ParameterMetaData;
+import java.sql.PreparedStatement;
+import java.sql.Ref;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.RowId;
+import java.sql.SQLException;
+import java.sql.SQLXML;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Calendar;
+
+public class StubPreparedStatement extends StubStatement implements PreparedStatement{
+
+ @Override
+ public ResultSet executeQuery() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int executeUpdate() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNull(int parameterIndex, int sqlType) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBoolean(int parameterIndex, boolean x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setByte(int parameterIndex, byte x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setShort(int parameterIndex, short x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setInt(int parameterIndex, int x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setLong(int parameterIndex, long x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setFloat(int parameterIndex, float x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setDouble(int parameterIndex, double x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setString(int parameterIndex, String x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBytes(int parameterIndex, byte[] x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setDate(int parameterIndex, Date x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setTime(int parameterIndex, Time x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setTimestamp(int parameterIndex, Timestamp x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setAsciiStream(int parameterIndex, InputStream x, int length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setUnicodeStream(int parameterIndex, InputStream x, int length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBinaryStream(int parameterIndex, InputStream x, int length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void clearParameters() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setObject(int parameterIndex, Object x, int targetSqlType) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setObject(int parameterIndex, Object x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean execute() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void addBatch() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setCharacterStream(int parameterIndex, Reader reader, int length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setRef(int parameterIndex, Ref x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBlob(int parameterIndex, Blob x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setClob(int parameterIndex, Clob x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setArray(int parameterIndex, Array x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public ResultSetMetaData getMetaData() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setDate(int parameterIndex, Date x, Calendar cal) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setTime(int parameterIndex, Time x, Calendar cal) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setTimestamp(int parameterIndex, Timestamp x, Calendar cal) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNull(int parameterIndex, int sqlType, String typeName) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setURL(int parameterIndex, URL x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public ParameterMetaData getParameterMetaData() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setRowId(int parameterIndex, RowId x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNString(int parameterIndex, String value) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNClob(int parameterIndex, NClob value) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setClob(int parameterIndex, Reader reader, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBlob(int parameterIndex, InputStream inputStream, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNClob(int parameterIndex, Reader reader, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setObject(int parameterIndex, Object x, int targetSqlType, int scaleOrLength) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setAsciiStream(int parameterIndex, InputStream x, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBinaryStream(int parameterIndex, InputStream x, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setCharacterStream(int parameterIndex, Reader reader, long length) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setAsciiStream(int parameterIndex, InputStream x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBinaryStream(int parameterIndex, InputStream x) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setCharacterStream(int parameterIndex, Reader reader) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setClob(int parameterIndex, Reader reader) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setBlob(int parameterIndex, InputStream inputStream) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setNClob(int parameterIndex, Reader reader) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/sql/testng/util/StubStatement.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,257 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package util;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.Statement;
+import java.util.regex.Pattern;
+import static java.util.stream.Collectors.joining;
+
+public class StubStatement implements Statement {
+
+ @Override
+ public ResultSet executeQuery(String sql) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int executeUpdate(String sql) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void close() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int getMaxFieldSize() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setMaxFieldSize(int max) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int getMaxRows() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setMaxRows(int max) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setEscapeProcessing(boolean enable) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int getQueryTimeout() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setQueryTimeout(int seconds) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void cancel() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public SQLWarning getWarnings() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void clearWarnings() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setCursorName(String name) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean execute(String sql) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public ResultSet getResultSet() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int getUpdateCount() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean getMoreResults() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setFetchDirection(int direction) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int getFetchDirection() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setFetchSize(int rows) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int getFetchSize() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int getResultSetConcurrency() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int getResultSetType() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void addBatch(String sql) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void clearBatch() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int[] executeBatch() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Connection getConnection() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean getMoreResults(int current) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public ResultSet getGeneratedKeys() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int executeUpdate(String sql, int[] columnIndexes) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int executeUpdate(String sql, String[] columnNames) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean execute(String sql, int autoGeneratedKeys) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean execute(String sql, int[] columnIndexes) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean execute(String sql, String[] columnNames) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int getResultSetHoldability() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean isClosed() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setPoolable(boolean poolable) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean isPoolable() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void closeOnCompletion() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean isCloseOnCompletion() throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public <T> T unwrap(Class<T> iface) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean isWrapperFor(Class<?> iface) throws SQLException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+
+
+}
--- a/jdk/test/java/time/tck/java/time/TCKInstant.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/java/time/tck/java/time/TCKInstant.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -638,6 +638,12 @@
{Instant.ofEpochSecond(86400 + 3600 + 60 + 1, 123_456_789), NINETY_MINS, Instant.ofEpochSecond(86400 + 0, 0)},
{Instant.ofEpochSecond(86400 + 7200 + 60 + 1, 123_456_789), NINETY_MINS, Instant.ofEpochSecond(86400 + 5400, 0)},
{Instant.ofEpochSecond(86400 + 10800 + 60 + 1, 123_456_789), NINETY_MINS, Instant.ofEpochSecond(86400 + 10800, 0)},
+
+ {Instant.ofEpochSecond(-86400 - 3600 - 60 - 1, 123_456_789), MINUTES, Instant.ofEpochSecond(-86400 - 3600 - 120, 0 )},
+ {Instant.ofEpochSecond(-86400 - 3600 - 60 - 1, 123_456_789), MICROS, Instant.ofEpochSecond(-86400 - 3600 - 60 - 1, 123_456_000)},
+
+ {Instant.ofEpochSecond(86400 + 3600 + 60 + 1, 0), SECONDS, Instant.ofEpochSecond(86400 + 3600 + 60 + 1, 0)},
+ {Instant.ofEpochSecond(-86400 - 3600 - 120, 0), MINUTES, Instant.ofEpochSecond(-86400 - 3600 - 120, 0)},
};
}
@Test(dataProvider="truncatedToValid")
--- a/jdk/test/java/util/Objects/BasicObjectsTest.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/java/util/Objects/BasicObjectsTest.java Thu Oct 22 11:14:00 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -44,6 +44,7 @@
errors += testRequireNonNull();
errors += testIsNull();
errors += testNonNull();
+ errors += testNonNullOf();
if (errors > 0 )
throw new RuntimeException();
}
@@ -232,4 +233,46 @@
return errors;
}
+
+ private static int testNonNullOf() {
+ int errors = 0;
+ String defString = new String("default");
+ String nullString = null;
+ String nonNullString = "non-null";
+
+ // Confirm the compile time return type matches
+ String result = Objects.nonNullElse(nullString, defString);
+ errors += (result == defString) ? 0 : 1;
+ errors += (Objects.nonNullElse(nonNullString, defString) == nonNullString) ? 0 : 1;
+ errors += (Objects.nonNullElse(nonNullString, null) == nonNullString) ? 0 : 1;
+ try {
+ Objects.nonNullElse(null, null);
+ errors += 1;
+ } catch (NullPointerException npe) {
+ // expected
+ errors += npe.getMessage().equals("defaultObj") ? 0 : 1;
+ }
+
+
+ // Test nonNullElseGet with a supplier
+ errors += (Objects.nonNullElseGet(nullString, () -> defString) == defString) ? 0 : 1;
+ errors += (Objects.nonNullElseGet(nonNullString, () -> defString) == nonNullString) ? 0 : 1;
+ errors += (Objects.nonNullElseGet(nonNullString, () -> null) == nonNullString) ? 0 : 1;
+
+ try {
+ Objects.nonNullElseGet(null, () -> null);
+ errors += 1;
+ } catch (NullPointerException npe) {
+ // expected
+ errors += npe.getMessage().equals("supplier.get()") ? 0 : 1;
+ }
+ try { // supplier is null
+ Objects.nonNullElseGet(null, null);
+ errors += 1;
+ } catch (NullPointerException npe) {
+ // expected
+ errors += npe.getMessage().equals("supplier") ? 0 : 1;
+ }
+ return errors;
+ }
}
--- a/jdk/test/java/util/Optional/Basic.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/java/util/Optional/Basic.java Thu Oct 22 11:14:00 2015 -0700
@@ -294,6 +294,46 @@
}
@Test(groups = "unit")
+ public void testOr() {
+ Optional<String> empty = Optional.empty();
+ Optional<String> duke = Optional.of("Duke");
+
+ // Null supplier
+ try {
+ Optional<String> b = empty.or(null);
+ fail("Should throw NPE on null supplier");
+ } catch (NullPointerException npe) {
+ // expected
+ }
+
+ // Supply null
+ try {
+ Optional<String> b = empty.or(() -> null);
+ fail("Should throw NPE when supplier returns null");
+ } catch (NullPointerException npe) {
+ // expected
+ }
+
+ // Non-empty won't invoke supplier
+ try {
+ Optional<String> b = duke.or(() -> null);
+ assertTrue(b.isPresent());
+ } catch (NullPointerException npe) {
+ fail("Supplier should not be invoked");
+ }
+
+ // Supply for empty
+ Optional<String> suppliedDuke = empty.or(() -> duke);
+ assertTrue(suppliedDuke.isPresent());
+ assertSame(suppliedDuke, duke);
+
+ // Supply for non-empty
+ Optional<String> actualDuke = duke.or(() -> Optional.of("Other Duke"));
+ assertTrue(actualDuke.isPresent());
+ assertSame(actualDuke, duke);
+ }
+
+ @Test(groups = "unit")
public void testStream() {
{
Stream<String> s = Optional.<String>empty().stream();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/imageio/plugins/bmp/Bug8066904.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8066904
+ * @summary Test verifies whether Bits per Pixel in BMP
+ * Header is corrupted or not
+ * @run main Bug8066904
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import javax.imageio.ImageIO;
+
+public class Bug8066904 {
+
+ public static void main(String[] args) throws IOException {
+ // corrupted byte array with improper Bits per pixel in header
+ byte[] corruptedBmp = { (byte) 0x42, (byte) 0x4d, (byte) 0x7e,
+ (byte) 0x06, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x3e, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x28, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x64, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x64,
+ (byte) 0x00, (byte) 0x40, (byte) 0x06, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x00, (byte) 0xff,
+ (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
+ (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
+ (byte) 0xff };
+
+ /** if IOException is caught then test will
+ * pass otherwise throws a different exception.
+ */
+ try {
+ ImageIO.read(new ByteArrayInputStream(corruptedBmp));
+ } catch(Exception ex) {
+ if (!(ex instanceof IOException))
+ throw ex;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JMenu/8067346/bug8067346.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ @bug 8067346
+ @summary Submenu has a changed offset on Windows7 with Windows look and feel
+ @requires (os.family == "windows")
+ @run main bug8067346
+ */
+import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
+import java.awt.Insets;
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+
+
+public class bug8067346 {
+
+ private JMenuBar menuBar;
+ private JFrame frame;
+ private String[] menuClasses = {"MenuItem", "Menu",
+ "CheckBoxMenuItem", "RadioButtonMenuItem"};
+ private String MARGIN = ".margin";
+ private String CHECKICONOFFSET = ".checkIconOffset";
+ private static boolean runTest = true;
+
+ public static void main(String[] args) throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+
+ @Override
+ public void run() {
+ bug8067346 test = new bug8067346();
+ try {
+ // set windows look and feel
+ UIManager.setLookAndFeel(new WindowsLookAndFeel());
+ } catch (UnsupportedLookAndFeelException e) {
+ runTest = false;
+ }
+ if(runTest) {
+ test.createUI();
+ test.performTest();
+ test.dispose();
+ }
+ }
+ });
+ }
+
+ public void createUI() {
+
+ frame = new JFrame();
+ menuBar = new JMenuBar();
+ frame.setJMenuBar(menuBar);
+ JMenu menu, submenu;
+ JMenuItem menuItem;
+
+ menu = new JMenu("A Menu");
+ menuBar.add(menu);
+ menu.addSeparator();
+
+ submenu = new JMenu("A submenu");
+
+ menuItem = new JMenuItem("An item in the submenu");
+ submenu.add(menuItem);
+ menu.add(submenu);
+ }
+
+ public void performTest() {
+ try {
+ String errorMessage = "Incorrect value for ";
+ StringBuilder errorMessageBuilder = new StringBuilder(errorMessage);
+ boolean error = false;
+ int retVal = testMargin();
+ if (retVal != 0) {
+ errorMessageBuilder.append(menuClasses[retVal])
+ .append(MARGIN).append("\n");
+ error = true;
+ }
+ retVal = testCheckIconOffset();
+ if (retVal != 0) {
+ errorMessageBuilder.append(errorMessage)
+ .append(menuClasses[retVal]).append(CHECKICONOFFSET);
+ }
+ if (error || retVal != 0) {
+ throw new RuntimeException(errorMessageBuilder.toString());
+ }
+ } finally {
+ dispose();
+ }
+ }
+
+ private int testMargin() {
+
+ for (int inx = 0; inx < menuClasses.length; inx++) {
+ Insets margin = (Insets) UIManager.get(menuClasses[inx] + MARGIN);
+ if (margin != null && margin.bottom == 0 && margin.left == 0
+ && margin.right == 0 && margin.top == 0) {
+ return inx + 1;
+ }
+ }
+ return 0;
+ }
+
+ private int testCheckIconOffset() {
+
+ for (int inx = 0; inx < menuClasses.length; inx++) {
+ Object checkIconOffset = UIManager.get(menuClasses[inx]
+ + CHECKICONOFFSET);
+ if (checkIconOffset != null && ((Integer) checkIconOffset) == 0) {
+ return inx + 1;
+ }
+ }
+ return 0;
+ }
+
+ public void dispose() {
+ frame.dispose();
+ }
+}
--- a/jdk/test/lib/testlibrary/jdk/testlibrary/Utils.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/lib/testlibrary/jdk/testlibrary/Utils.java Thu Oct 22 11:14:00 2015 -0700
@@ -66,7 +66,7 @@
public static final double TIMEOUT_FACTOR;
static {
String toFactor = System.getProperty("test.timeout.factor", "1.0");
- TIMEOUT_FACTOR = Double.parseDouble(toFactor);
+ TIMEOUT_FACTOR = Double.parseDouble(toFactor);
}
/**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/java2d/loops/CopyAreaSpeed.html Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<!--
+ Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+<html>
+ <head>
+ <title>CopyAreaSpeed</title>
+ </head>
+
+ <body>
+ <h1>CopyAreaSpeed</h1>
+ <hr>
+ <address><a href="mailto:thanh@eng.sun.com">Thanh Nguyen</a></address>
+<!-- Created: Mon Jan 11 16:13:29 PST 1999 -->
+<!-- hhmts start -->
+Last modified: Tue Jan 19 16:18:37 PST 1999
+<!-- hhmts end -->
+ <APPLET CODE="CopyAreaSpeed.class" WIDTH=200 HEIGHT=300></APPLET>
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/java2d/loops/CopyAreaSpeed.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,268 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/*
+ * @test
+ * @bug 4189070
+ * @summary This test prints out the time it takes for a certain amount of
+ * copyArea calls to be completed. Because the performance measurement is
+ * relative, this code only provides a benchmark to run with different releases
+ * to compare the outcomes.
+ * @run applet/manual=done CopyAreaSpeed.html
+ */
+
+import java.applet.Applet;
+import java.awt.*;
+import java.awt.event.*;
+import java.util.*;
+
+public class CopyAreaSpeed extends Applet implements Runnable {
+ int top = 0;
+
+ public void init() {
+ }
+
+ public CopyAreaSpeed()
+ {
+ super();
+ String[] instructions =
+ {
+ "This test prints out the time it takes for a certain amount ",
+ "of copyArea calls to be completed. Because the performance ",
+ "measurement is relative, this code only provides a benchmark ",
+ "to run with different releases to compare the outcomes."
+ };
+ Sysout.createDialogWithInstructions( instructions );
+ (new Thread(this)).start();
+ Button bt = new Button("Hello");
+ bt.setBounds(50, 10, 50, 22);
+ bt.setVisible(false);
+ add(bt);
+ }
+
+ public void update(Graphics g)
+ {
+ paint(g);
+ }
+
+ public void paint(Graphics g)
+ {
+ synchronized(this) {
+ Rectangle rct = g.getClipBounds();
+ g.setColor(Color.white);
+ g.fillRect(rct.x, rct.y, rct.width, rct.height);
+ g.setFont(getFont());
+ g.setColor(Color.black);
+
+ Dimension dm = getSize();
+ for (int y = 0; y <= (dm.height + 10); y += 20) {
+ if (y > rct.y) {
+ int z = y / 20 + top;
+ g.drawString("" + z, 10, y);
+ } /* endif */
+ } // endfor
+ }
+ }
+
+ static long millsec(Date s, Date e) {
+ long ts = s.getTime();
+ long te = e.getTime();
+ return te-ts;
+ }
+
+ public void run()
+ {
+ int count = 1000;
+ int loops = count;
+ Date start;
+ Date end;
+
+ start = new Date();
+ while (count-- > 0) {
+ Dimension dm = getSize();
+ if (dm != null && dm.width != 0 && dm.height != 0) {
+ synchronized(this) {
+ top++;
+ Graphics g = getGraphics();
+ g.copyArea(0, 20, dm.width, dm.height - 20, 0, -20);
+ g.setClip(0, dm.height - 20, dm.width, 20);
+ paint(g);
+ g.dispose();
+ }
+ }
+ try {
+ Thread.sleep(1);
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ end = new Date();
+ Sysout.println("copyArea X "+loops+" = "+ millsec(start, end) + " msec");
+ }
+
+ public static void main(String args[]) {
+ Frame frm = new Frame("CopyAreaSpeed");
+ frm.add(new CopyAreaSpeed());
+ frm.addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent ev) {
+ System.exit(0);
+ }
+ });
+ frm.setSize(500, 500);
+ frm.show();
+ }
+}
+/****************************************************
+ Standard Test Machinery
+ DO NOT modify anything below -- it's a standard
+ chunk of code whose purpose is to make user
+ interaction uniform, and thereby make it simpler
+ to read and understand someone else's test.
+ ****************************************************/
+
+/**
+ This is part of the standard test machinery.
+ It creates a dialog (with the instructions), and is the interface
+ for sending text messages to the user.
+ To print the instructions, send an array of strings to Sysout.createDialog
+ WithInstructions method. Put one line of instructions per array entry.
+ To display a message for the tester to see, simply call Sysout.println
+ with the string to be displayed.
+ This mimics System.out.println but works within the test harness as well
+ as standalone.
+ */
+class Sysout
+{
+ private static TestDialog dialog;
+
+ public static void createDialogWithInstructions( String[] instructions )
+ {
+ dialog = new TestDialog( new Frame(), "Instructions" );
+ dialog.printInstructions( instructions );
+ dialog.show();
+ println( "Any messages for the tester will display here." );
+ }
+
+ public static void createDialog( )
+ {
+ dialog = new TestDialog( new Frame(), "Instructions" );
+ String[] defInstr = { "Instructions will appear here. ", "" } ;
+ dialog.printInstructions( defInstr );
+ dialog.show();
+ println( "Any messages for the tester will display here." );
+ }
+
+
+ public static void printInstructions( String[] instructions )
+ {
+ dialog.printInstructions( instructions );
+ }
+
+
+ public static void println( String messageIn )
+ {
+ dialog.displayMessage( messageIn );
+ }
+
+}// Sysout class
+
+/**
+ This is part of the standard test machinery. It provides a place for the
+ test instructions to be displayed, and a place for interactive messages
+ to the user to be displayed.
+ To have the test instructions displayed, see Sysout.
+ To have a message to the user be displayed, see Sysout.
+ Do not call anything in this dialog directly.
+ */
+class TestDialog extends Dialog
+{
+
+ TextArea instructionsText;
+ TextArea messageText;
+ int maxStringLength = 80;
+
+ //DO NOT call this directly, go through Sysout
+ public TestDialog( Frame frame, String name )
+ {
+ super( frame, name );
+ int scrollBoth = TextArea.SCROLLBARS_BOTH;
+ instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
+ add( "North", instructionsText );
+
+ messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
+ add("South", messageText);
+
+ pack();
+
+ show();
+ }// TestDialog()
+
+ //DO NOT call this directly, go through Sysout
+ public void printInstructions( String[] instructions )
+ {
+ //Clear out any current instructions
+ instructionsText.setText( "" );
+
+ //Go down array of instruction strings
+
+ String printStr, remainingStr;
+ for( int i=0; i < instructions.length; i++ )
+ {
+ //chop up each into pieces maxSringLength long
+ remainingStr = instructions[ i ];
+ while( remainingStr.length() > 0 )
+ {
+ //if longer than max then chop off first max chars to print
+ if( remainingStr.length() >= maxStringLength )
+ {
+ //Try to chop on a word boundary
+ int posOfSpace = remainingStr.
+ lastIndexOf( ' ', maxStringLength - 1 );
+
+ if( posOfSpace <= 0 ) {
+ posOfSpace = maxStringLength - 1;
+ }
+
+ printStr = remainingStr.substring( 0, posOfSpace + 1 );
+ remainingStr = remainingStr.substring( posOfSpace + 1 );
+ }
+ else //else just print
+ {
+ printStr = remainingStr;
+ remainingStr = "";
+ }
+
+ instructionsText.append( printStr + "\n" );
+
+ }// while
+
+ }// for
+
+ }//printInstructions()
+
+ //DO NOT call this directly, go through Sysout
+ public void displayMessage( String messageIn )
+ {
+ messageText.append( messageIn + "\n" );
+ }
+
+}// TestDialog class
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/management/LazyCompositeDataTest.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.management.openmbean.ArrayType;
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.CompositeDataSupport;
+import javax.management.openmbean.CompositeType;
+import javax.management.openmbean.OpenDataException;
+import javax.management.openmbean.OpenType;
+import javax.management.openmbean.SimpleType;
+import sun.management.LazyCompositeData;
+
+/**
+ * @test
+ * @bug 8139870
+ * @summary sun.management.LazyCompositeData.isTypeMatched() fails for composite types with items of ArrayType
+ * @modules java.management/sun.management
+ * @author Jaroslav Bachorik
+ */
+
+public class LazyCompositeDataTest {
+ private final static CompositeData dataV1, dataV2;
+
+ static {
+ try {
+ // ***
+ // prepare the composite types
+
+ // composite type stored in an array; V1
+ CompositeType subtypeV1 = new CompositeType(
+ "Subtype1",
+ "Version 1",
+ new String[]{"item1"},
+ new String[]{"Item 1"},
+ new OpenType<?>[]{
+ SimpleType.STRING
+ }
+ );
+
+ // composite type stored in an array; V2
+ CompositeType subtypeV2 = new CompositeType(
+ "Subtype2",
+ "Version 2",
+ new String[]{"item1", "item2"},
+ new String[]{"Item 1", "Item 2"},
+ new OpenType<?>[]{
+ SimpleType.STRING,
+ SimpleType.INTEGER
+ }
+ );
+
+
+ // main composite type; V1
+ // one of the items is array of 'subtypeV1' instances
+ CompositeType typeV1 = new CompositeType(
+ "MyDataV1",
+ "Version 1",
+ new String[]{"item1", "item2"},
+ new String[]{"Item 1", "Item 2"},
+ new OpenType<?>[]{
+ SimpleType.STRING,
+ ArrayType.getArrayType(subtypeV1)
+ }
+ );
+
+ // main composite type; V2
+ // one of the items is array of 'subtypeV2' instances
+ CompositeType typeV2 = new CompositeType(
+ "MyDataV2",
+ "Version 2",
+ new String[]{"item1", "item2"},
+ new String[]{"Item 1", "Item 2"},
+ new OpenType<?>[]{
+ SimpleType.STRING,
+ ArrayType.getArrayType(subtypeV2)
+ }
+ );
+ // ***
+
+ // ***
+ // construct the data
+ Map<String, Object> subitemsV1 = new HashMap<>();
+ Map<String, Object> subitemsV2 = new HashMap<>();
+
+ Map<String, Object> itemsV1 = new HashMap<>();
+ Map<String, Object> itemsV2 = new HashMap<>();
+
+ subitemsV1.put("item1", "item1");
+ subitemsV2.put("item1", "item1");
+ subitemsV2.put("item2", 42);
+
+ itemsV1.put("item1", "item1");
+ itemsV1.put("item2", new CompositeData[]{new CompositeDataSupport(subtypeV1, subitemsV1)});
+
+ itemsV2.put("item1", "item1");
+ itemsV2.put("item2", new CompositeData[]{new CompositeDataSupport(subtypeV2, subitemsV2)});
+
+ dataV1 = new CompositeDataSupport(typeV1, itemsV1);
+ dataV2 = new CompositeDataSupport(typeV2, itemsV2);
+ // ***
+ } catch (OpenDataException e) {
+ throw new Error(e);
+ }
+ }
+
+ private static class MyDataV1 extends LazyCompositeData {
+ @Override
+ protected CompositeData getCompositeData() {
+ return dataV1;
+ }
+
+ public boolean isTypeMached(CompositeType type) {
+ return isTypeMatched(this.getCompositeType(), type);
+ }
+ }
+
+ private static class MyDataV2 extends LazyCompositeData {
+ @Override
+ protected CompositeData getCompositeData() {
+ return dataV2;
+ }
+
+ }
+
+ public static void main(String[] args) throws Exception {
+ System.out.println("Checking LazyCompositeData.isTypeMatched()");
+ MyDataV1 v1 = new MyDataV1();
+ MyDataV2 v2 = new MyDataV2();
+
+ if (!v1.isTypeMached(v2.getCompositeType())) {
+ System.err.println("=== FAILED");
+ System.err.println("V1 should be matched by V2");
+ System.err.println("\n=== V1");
+ System.err.println(v1.getCompositeType());
+ System.err.println("\n=== V2");
+ System.err.println(v2.getCompositeType());
+ throw new Error();
+ }
+ System.out.println("=== PASSED");
+ }
+}
\ No newline at end of file
--- a/jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.java Thu Oct 22 11:14:00 2015 -0700
@@ -255,8 +255,7 @@
// and set the executable flag
Path localLauncherPath = FS.getPath(WORK_DIR, "launcher");
Files.copy(launcherPath, localLauncherPath,
- StandardCopyOption.REPLACE_EXISTING,
- StandardCopyOption.COPY_ATTRIBUTES);
+ StandardCopyOption.REPLACE_EXISTING);
if (!Files.isExecutable(localLauncherPath)) {
Set<PosixFilePermission> perms = new HashSet<>(
Files.getPosixFilePermissions(
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/management/jmxremote/startstop/JMXStatus1Test.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.util.Collections;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * A flavor of {@linkplain JMXStatusTest} test where the test application
+ * is started without the management agent initialized.
+ */
+public class JMXStatus1Test extends JMXStatusTest {
+ @Override
+ protected List<String> getCustomVmArgs() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ protected Pattern getDefaultPattern() {
+ return JMXStatusTest.DISABLED_AGENT_STATUS;
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/management/jmxremote/startstop/JMXStatus2Test.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * A flavor of {@linkplain JMXStatusTest} test where the test application
+ * is started with the management agent initialized.
+ */
+public class JMXStatus2Test extends JMXStatusTest {
+ @Override
+ protected List<String> getCustomVmArgs() {
+ // not specifying the jmxremote.port > only local agent started
+ return Arrays.asList(
+ "-Dcom.sun.management.jmxremote"
+ );
+ }
+
+ @Override
+ protected Pattern getDefaultPattern() {
+ return JMXStatusTest.LOCAL_AGENT_STATUS;
+ }
+}
\ No newline at end of file
--- a/jdk/test/sun/management/jmxremote/startstop/JMXStatusTest.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/sun/management/jmxremote/startstop/JMXStatusTest.java Thu Oct 22 11:14:00 2015 -0700
@@ -22,6 +22,8 @@
*/
import java.net.BindException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import org.testng.annotations.*;
@@ -31,23 +33,25 @@
/**
* @test
- * @bug 8023093
+ * @bug 8023093 8138748
* @summary Performs a sanity test for the ManagementAgent.status diagnostic command.
- * Management agent may be disable, started (only local connections) and started.
+ * Management agent may be disabled, started (only local connections) and started.
* The test asserts that the expected text is being printed.
* @library /lib/testlibrary
* @modules java.management/sun.management
* @build jdk.testlibrary.* PortAllocator TestApp ManagementAgentJcmd
- * @run testng/othervm -XX:+UsePerfData JMXStatusTest
+ * JMXStatusTest JMXStatus1Test JMXStatus2Test
+ * @run testng/othervm -XX:+UsePerfData JMXStatus1Test
+ * @run testng/othervm -XX:+UsePerfData JMXStatus2Test
*/
-public class JMXStatusTest {
+abstract public class JMXStatusTest {
private final static String TEST_APP_NAME = "TestApp";
- private final static Pattern DISABLE_AGENT_STATUS = Pattern.compile(
+ protected final static Pattern DISABLED_AGENT_STATUS = Pattern.compile(
"Agent\\s*\\: disabled$"
);
- private final static Pattern LOCAL_AGENT_STATUS = Pattern.compile(
+ protected final static Pattern LOCAL_AGENT_STATUS = Pattern.compile(
"Agent\\s*\\:\\s*enabled\\n+" +
"Connection Type\\s*\\:\\s*local\\n+" +
"Protocol\\s*\\:\\s*[a-z]+\\n+" +
@@ -56,14 +60,15 @@
Pattern.MULTILINE
);
- private final static Pattern REMOTE_AGENT_STATUS = Pattern.compile(
+ protected final static Pattern REMOTE_AGENT_STATUS = Pattern.compile(
"Agent\\s*\\: enabled\\n+" +
+ ".*" +
"Connection Type\\s*\\: remote\\n+" +
"Protocol\\s*\\: [a-z]+\\n+" +
"Host\\s*\\: .+\\n+" +
"URL\\s*\\: service\\:jmx\\:.+\\n+" +
"Properties\\s*\\:\\n+(\\s*\\S+\\s*=\\s*\\S+\\n*)+",
- Pattern.MULTILINE
+ Pattern.MULTILINE | Pattern.DOTALL
);
private static ProcessBuilder testAppPb;
@@ -71,22 +76,24 @@
private ManagementAgentJcmd jcmd;
- @BeforeClass
- public static void setupClass() throws Exception {
- testAppPb = ProcessTools.createJavaProcessBuilder(
- "-cp", System.getProperty("test.class.path"),
- "-XX:+UsePerfData",
- TEST_APP_NAME
- );
- }
+ abstract protected List<String> getCustomVmArgs();
+ abstract protected Pattern getDefaultPattern();
@BeforeTest
- public void setup() {
+ public final void setup() throws Exception {
+ List<String> args = new ArrayList<>();
+ args.add("-cp");
+ args.add(System.getProperty("test.class.path"));
+ args.add("-XX:+UsePerfData");
+ args.addAll(getCustomVmArgs());
+ args.add(TEST_APP_NAME);
+ testAppPb = ProcessTools.createJavaProcessBuilder(args.toArray(new String[args.size()]));
+
jcmd = new ManagementAgentJcmd(TEST_APP_NAME, false);
}
@BeforeMethod
- public void startTestApp() throws Exception {
+ public final void startTestApp() throws Exception {
testApp = ProcessTools.startProcess(
TEST_APP_NAME, testAppPb,
(Predicate<String>)l->l.trim().equals("main enter")
@@ -94,7 +101,7 @@
}
@AfterMethod
- public void stopTestApp() throws Exception {
+ public final void stopTestApp() throws Exception {
testApp.getOutputStream().write(1);
testApp.getOutputStream().flush();
testApp.waitFor();
@@ -102,13 +109,7 @@
}
@Test
- public void testAgentDisabled() throws Exception {
- String status = jcmd.status();
- assertStatusMatches(DISABLE_AGENT_STATUS, status);
- }
-
- @Test
- public void testAgentLocal() throws Exception {
+ public final void testAgentLocal() throws Exception {
jcmd.startLocal();
String status = jcmd.status();
@@ -116,7 +117,7 @@
}
@Test
- public void testAgentRemote() throws Exception {
+ public final void testAgentRemote() throws Exception {
while (true) {
try {
int[] ports = PortAllocator.allocatePorts(1);
@@ -135,11 +136,17 @@
}
}
- private void assertStatusMatches(Pattern expected, String value) {
+ @Test
+ public final void testAgentDefault() throws Exception {
+ String status = jcmd.status();
+ assertStatusMatches(getDefaultPattern(), status);
+ }
+
+ protected void assertStatusMatches(Pattern expected, String value) {
assertStatusMatches(expected, value, "");
}
- private void assertStatusMatches(Pattern expected, String value, String msg) {
+ protected void assertStatusMatches(Pattern expected, String value, String msg) {
int idx = value.indexOf('\n');
if (idx > -1) {
value = value.substring(idx + 1).trim();
--- a/jdk/test/sun/security/krb5/auto/KDC.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/sun/security/krb5/auto/KDC.java Thu Oct 22 11:14:00 2015 -0700
@@ -889,8 +889,9 @@
PrincipalName service = asReq.reqBody.sname;
if (options.containsKey(KDC.Option.RESP_NT)) {
- service = new PrincipalName(service.getNameStrings(),
- (int)options.get(KDC.Option.RESP_NT));
+ service = new PrincipalName((int)options.get(KDC.Option.RESP_NT),
+ service.getNameStrings(),
+ Realm.getDefault());
}
try {
System.out.println(realm + "> " + asReq.reqBody.cname +
--- a/jdk/test/sun/security/krb5/auto/SSL.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/sun/security/krb5/auto/SSL.java Thu Oct 22 11:14:00 2015 -0700
@@ -76,7 +76,10 @@
return;
}
ServicePermission p = (ServicePermission)perm;
- permChecks = permChecks + p.getActions().toUpperCase().charAt(0);
+ // ServicePermissions required to create GSSName are ignored
+ if (!p.getActions().isEmpty()) {
+ permChecks = permChecks + p.getActions().toUpperCase().charAt(0);
+ }
}
public static void main(String[] args) throws Exception {
--- a/jdk/test/sun/security/krb5/name/Constructors.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/sun/security/krb5/name/Constructors.java Thu Oct 22 11:14:00 2015 -0700
@@ -41,22 +41,22 @@
// Good ones
type = PrincipalName.KRB_NT_UNKNOWN;
- checkName("a", type, "R", "R", "a");
- checkName("a@R2", type, "R", "R", "a");
- checkName("a/b", type, "R", "R", "a", "b");
- checkName("a/b@R2", type, "R", "R", "a", "b");
- checkName("a/b/c", type, "R", "R", "a", "b", "c");
- checkName("a/b/c@R2", type, "R", "R", "a", "b", "c");
+ checkName("a", type, "R", "R", false, "a");
+ checkName("a@R2", type, "R", "R", false, "a");
+ checkName("a/b", type, "R", "R", false, "a", "b");
+ checkName("a/b@R2", type, "R", "R", false, "a", "b");
+ checkName("a/b/c", type, "R", "R", false, "a", "b", "c");
+ checkName("a/b/c@R2", type, "R", "R", false, "a", "b", "c");
// Weird ones
- checkName("a\\/b", type, "R", "R", "a/b");
- checkName("a\\/b\\/c", type, "R", "R", "a/b/c");
- checkName("a\\/b\\@R2", type, "R", "R", "a/b@R2");
+ checkName("a\\/b", type, "R", "R", false, "a/b");
+ checkName("a\\/b\\/c", type, "R", "R", false, "a/b/c");
+ checkName("a\\/b\\@R2", type, "R", "R", false, "a/b@R2");
// Bad ones
- checkName("a", type, "", null);
- checkName("a/", type, "R", null);
- checkName("/a", type, "R", null);
- checkName("a//b", type, "R", null);
- checkName("a@", type, null, null);
+ checkName("a", type, "", null, false);
+ checkName("a/", type, "R", null, false);
+ checkName("/a", type, "R", null, false);
+ checkName("a//b", type, "R", null, false);
+ checkName("a@", type, null, null, false);
type = PrincipalName.KRB_NT_SRV_HST;
// Part 2: on realm choices
@@ -78,17 +78,17 @@
if (testNoDefaultDomain) {
type = PrincipalName.KRB_NT_UNKNOWN;
- checkName("a", type, "R1", "R1", "a"); // arg
- checkName("a@R1", type, null, "R1", "a"); // or r in name
- checkName("a@R2", type, "R1", "R1", "a"); // arg over r
- checkName("a", type, null, null); // fail if none
- checkName("a/b@R1", type, null, "R1", "a", "b");
+ checkName("a", type, "R1", "R1", false, "a"); // arg
+ checkName("a@R1", type, null, "R1", false, "a"); // or r in name
+ checkName("a@R2", type, "R1", "R1", false, "a"); // arg over r
+ checkName("a", type, null, null, false); // fail if none
+ checkName("a/b@R1", type, null, "R1", false, "a", "b");
type = PrincipalName.KRB_NT_SRV_HST;
// Let's pray "b.h" won't be canonicalized
- checkName("a/b.h", type, "R1", "R1", "a", "b.h"); // arg
- checkName("a/b.h@R1", type, null, "R1", "a", "b.h"); // or r in name
- checkName("a/b.h@R1", type, "R2", "R2", "a", "b.h"); // arg over r
- checkName("a/b.h", type, null, null); // fail if none
+ checkName("a/b.h", type, "R1", "R1", false, "a", "b.h"); // arg
+ checkName("a/b.h@R1", type, null, "R1", false, "a", "b.h"); // or r in name
+ checkName("a/b.h@R1", type, "R2", "R2", false, "a", "b.h"); // arg over r
+ checkName("a/b.h", type, null, null, false); // fail if none
}
// When there is default realm
@@ -97,25 +97,25 @@
Config.refresh();
type = PrincipalName.KRB_NT_UNKNOWN;
- checkName("a", type, "R1", "R1", "a"); // arg
- checkName("a@R1", type, null, "R1", "a"); // or r in name
- checkName("a@R2", type, "R1", "R1", "a"); // arg over r
- checkName("a", type, null, "R", "a"); // default
- checkName("a/b", type, null, "R", "a", "b");
+ checkName("a", type, "R1", "R1", false, "a"); // arg
+ checkName("a@R1", type, null, "R1", false, "a"); // or r in name
+ checkName("a@R2", type, "R1", "R1", false, "a"); // arg over r
+ checkName("a", type, null, "R", true, "a"); // default
+ checkName("a/b", type, null, "R", true, "a", "b");
type = PrincipalName.KRB_NT_SRV_HST;
- checkName("a/b.h3", type, "R1", "R1", "a", "b.h3"); // arg
- checkName("a/b.h@R1", type, null, "R1", "a", "b.h"); // or r in name
- checkName("a/b.h3@R2", type, "R1", "R1", "a", "b.h3"); // arg over r
- checkName("a/b.h2", type, "R1", "R1", "a", "b.h2"); // arg over map
- checkName("a/b.h2@R1", type, null, "R1", "a", "b.h2"); // r over map
- checkName("a/b.h2", type, null, "R2", "a", "b.h2"); // map
- checkName("a/b.h", type, null, "R", "a", "b.h"); // default
+ checkName("a/b.h3", type, "R1", "R1", false, "a", "b.h3"); // arg
+ checkName("a/b.h@R1", type, null, "R1", false, "a", "b.h"); // or r in name
+ checkName("a/b.h3@R2", type, "R1", "R1", false, "a", "b.h3"); // arg over r
+ checkName("a/b.h2", type, "R1", "R1", false, "a", "b.h2"); // arg over map
+ checkName("a/b.h2@R1", type, null, "R1", false, "a", "b.h2"); // r over map
+ checkName("a/b.h2", type, null, "R2", true, "a", "b.h2"); // map
+ checkName("a/b.h", type, null, "R", true, "a", "b.h"); // default
}
// Check if the creation matches the expected output.
// Note: realm == null means creation failure
static void checkName(String n, int t, String s,
- String realm, String... parts)
+ String realm, boolean deduced, String... parts)
throws Exception {
PrincipalName pn = null;
try {
@@ -132,5 +132,8 @@
throw new Exception(pn.toString() + " vs "
+ Arrays.toString(parts) + "@" + realm);
}
+ if (deduced != pn.isRealmDeduced()) {
+ throw new Exception("pn.realmDeduced is " + pn.isRealmDeduced());
+ }
}
}
--- a/jdk/test/sun/security/ssl/DHKeyExchange/DHEKeySizing.java Thu Oct 22 08:47:48 2015 -0700
+++ b/jdk/test/sun/security/ssl/DHKeyExchange/DHEKeySizing.java Thu Oct 22 11:14:00 2015 -0700
@@ -31,34 +31,34 @@
* @bug 6956398
* @summary make ephemeral DH key match the length of the certificate key
* @run main/othervm
- * DHEKeySizing SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA true 1318 75
+ * DHEKeySizing SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA true 1255 75
* @run main/othervm -Djdk.tls.ephemeralDHKeySize=matched
- * DHEKeySizing SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA true 1318 75
+ * DHEKeySizing SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA true 1255 75
* @run main/othervm -Djdk.tls.ephemeralDHKeySize=legacy
- * DHEKeySizing SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA true 1318 75
+ * DHEKeySizing SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA true 1255 75
* @run main/othervm -Djdk.tls.ephemeralDHKeySize=1024
- * DHEKeySizing SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA true 1318 75
+ * DHEKeySizing SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA true 1255 75
*
* @run main/othervm
- * DHEKeySizing SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA true 292 75
+ * DHEKeySizing SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA true 229 75
*
* @run main/othervm
- * DHEKeySizing TLS_DHE_RSA_WITH_AES_128_CBC_SHA false 1510 139
+ * DHEKeySizing TLS_DHE_RSA_WITH_AES_128_CBC_SHA false 1383 139
* @run main/othervm -Djdk.tls.ephemeralDHKeySize=legacy
- * DHEKeySizing TLS_DHE_RSA_WITH_AES_128_CBC_SHA false 1414 107
+ * DHEKeySizing TLS_DHE_RSA_WITH_AES_128_CBC_SHA false 1319 107
* @run main/othervm -Djdk.tls.ephemeralDHKeySize=matched
- * DHEKeySizing TLS_DHE_RSA_WITH_AES_128_CBC_SHA false 1894 267
+ * DHEKeySizing TLS_DHE_RSA_WITH_AES_128_CBC_SHA false 1639 267
* @run main/othervm -Djdk.tls.ephemeralDHKeySize=1024
- * DHEKeySizing TLS_DHE_RSA_WITH_AES_128_CBC_SHA false 1510 139
+ * DHEKeySizing TLS_DHE_RSA_WITH_AES_128_CBC_SHA false 1383 139
*
* @run main/othervm
- * DHEKeySizing SSL_DH_anon_WITH_RC4_128_MD5 false 484 139
+ * DHEKeySizing SSL_DH_anon_WITH_RC4_128_MD5 false 357 139
* @run main/othervm -Djdk.tls.ephemeralDHKeySize=legacy
- * DHEKeySizing SSL_DH_anon_WITH_RC4_128_MD5 false 388 107
+ * DHEKeySizing SSL_DH_anon_WITH_RC4_128_MD5 false 293 107
* @run main/othervm -Djdk.tls.ephemeralDHKeySize=matched
- * DHEKeySizing SSL_DH_anon_WITH_RC4_128_MD5 false 484 139
+ * DHEKeySizing SSL_DH_anon_WITH_RC4_128_MD5 false 357 139
* @run main/othervm -Djdk.tls.ephemeralDHKeySize=1024
- * DHEKeySizing SSL_DH_anon_WITH_RC4_128_MD5 false 484 139
+ * DHEKeySizing SSL_DH_anon_WITH_RC4_128_MD5 false 357 139
*/
/*
@@ -90,10 +90,10 @@
* Here is a summary of the record length in the test case.
*
* | ServerHello Series | ClientKeyExchange | ServerHello Anon
- * 512-bit | 1318 bytes | 75 bytes | 292 bytes
- * 768-bit | 1414 bytes | 107 bytes | 388 bytes
- * 1024-bit | 1510 bytes | 139 bytes | 484 bytes
- * 2048-bit | 1894 bytes | 267 bytes | 484 bytes
+ * 512-bit | 1255 bytes | 75 bytes | 229 bytes
+ * 768-bit | 1319 bytes | 107 bytes | 293 bytes
+ * 1024-bit | 1383 bytes | 139 bytes | 357 bytes
+ * 2048-bit | 1639 bytes | 267 bytes | 357 bytes
*/
import javax.net.ssl.*;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/tools/jstack/DeadlockDetectionTest.java Thu Oct 22 11:14:00 2015 -0700
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jdk.test.lib.apps.LingeredApp;
+import jdk.test.lib.apps.LingeredAppWithDeadlock;
+
+import jdk.testlibrary.Utils;
+import jdk.testlibrary.Platform;
+import jdk.testlibrary.JDKToolLauncher;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.ProcessTools;
+
+/*
+ * @test
+ * @summary Test deadlock detection
+ * @library /../../test/lib/share/classes
+ * @library /lib/testlibrary
+ * @modules java.management
+ * @build jdk.testlibrary.*
+ * @build jdk.test.lib.apps.*
+ * @build DeadlockDetectionTest
+ * @run main DeadlockDetectionTest
+ */
+public class DeadlockDetectionTest {
+
+ private static LingeredAppWithDeadlock theApp = null;
+ private static ProcessBuilder processBuilder = new ProcessBuilder();
+
+ private static OutputAnalyzer jstack(String... toolArgs) throws Exception {
+ JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("jstack");
+ launcher.addVMArg("-XX:+UsePerfData");
+ if (toolArgs != null) {
+ for (String toolArg : toolArgs) {
+ launcher.addToolArg(toolArg);
+ }
+ }
+
+ processBuilder.command(launcher.getCommand());
+ System.out.println(processBuilder.command().stream().collect(Collectors.joining(" ")));
+ OutputAnalyzer output = ProcessTools.executeProcess(processBuilder);
+ System.out.println(output.getOutput());
+
+ return output;
+ }
+
+ public static void main(String[] args) throws Exception {
+ System.out.println("Starting DeadlockDetectionTest");
+
+ if (!Platform.shouldSAAttach()) {
+ // Silently skip the test if we don't have enough permissions to attach
+ System.err.println("Error! Insufficient permissions to attach.");
+ return;
+ }
+
+ if (!LingeredApp.isLastModifiedWorking()) {
+ // Exact behaviour of the test depends on operating system and the test nature,
+ // so just print the warning and continue
+ System.err.println("Warning! Last modified time doesn't work.");
+ }
+
+ try {
+ List<String> vmArgs = new ArrayList<String>();
+ vmArgs.add("-XX:+UsePerfData");
+ vmArgs.addAll(Utils.getVmOptions());
+
+ theApp = new LingeredAppWithDeadlock();
+ LingeredApp.startApp(vmArgs, theApp);
+ OutputAnalyzer output = jstack(Long.toString(theApp.getPid()));
+ System.out.println(output.getOutput());
+
+ if (output.getExitValue() == 3) {
+ System.out.println("Test can't run for some reason. Skipping");
+ }
+ else {
+ output.shouldHaveExitValue(0);
+ output.shouldContain("Found 1 deadlock.");
+ }
+
+ } finally {
+ LingeredApp.stopApp(theApp);
+ }
+ }
+}