OpenJDK / amber / amber
changeset 31670:d35897628a99
Merge
author | kvn |
---|---|
date | Thu, 02 Jul 2015 17:50:25 -0700 |
parents | 40e686692ec4 d1e837c96aba |
children | 362e0c0acece |
files | hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForSupportedSparcCPU.java hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHAIntrinsicsSpecificTestCaseForUnsupportedSparcCPU.java hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHASpecificTestCaseForSupportedSparcCPU.java hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHASpecificTestCaseForUnsupportedSparcCPU.java jaxws/src/java.xml.ws/share/classes/javax/xml/ws/wsaddressing/package.html jdk/src/java.desktop/windows/native/libawt/windows/hand.cur jdk/src/jdk.accessibility/windows/conf/accessibility.properties jdk/test/javax/xml/ws/8046817/GenerateEnumSchema.java jdk/test/javax/xml/ws/8046817/TestClassType.java jdk/test/javax/xml/ws/8046817/TestEnumType.java |
diffstat | 890 files changed, 6866 insertions(+), 3594 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags Thu Jul 02 17:15:55 2015 -0700 +++ b/.hgtags Thu Jul 02 17:50:25 2015 -0700 @@ -312,3 +312,4 @@ 56166ce66037952fa21e9f680b31bf8eb47312c0 jdk9-b67 5b500c93ce4822d47061cd518ff3f72d9d8cb5b5 jdk9-b68 d69c968463f0ae5d0b45de3fc14fe65171b23948 jdk9-b69 +43d0179ee9de3bfffae3417f09e07eb6d8efc963 jdk9-b70
--- a/.hgtags-top-repo Thu Jul 02 17:15:55 2015 -0700 +++ b/.hgtags-top-repo Thu Jul 02 17:50:25 2015 -0700 @@ -312,3 +312,4 @@ f546760134eb861fcfecd4ce611b0040b0d25a6a jdk9-b67 70e4272790b6199e9ca89df2758ff9cb58ec4125 jdk9-b68 1bcfd6b8726582cff5a42dbfc75903e36f9dd4fe jdk9-b69 +eed77fcd77711fcdba05f18fc22f37d86efb243c jdk9-b70
--- a/corba/.hgtags Thu Jul 02 17:15:55 2015 -0700 +++ b/corba/.hgtags Thu Jul 02 17:50:25 2015 -0700 @@ -312,3 +312,4 @@ 4418697e56f1f43597f55c7cb6573549c6117868 jdk9-b67 8efad64f40eb8cd4df376c0a5275892eeb396bbd jdk9-b68 de8acedcb5b5870f1dc54cba575aaa5d33897ea2 jdk9-b69 +e7cf01990ed366bd493080663259281e91ce223b jdk9-b70
--- a/hotspot/.hgtags Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/.hgtags Thu Jul 02 17:50:25 2015 -0700 @@ -472,3 +472,4 @@ d47dfabd16d48eb96a451edd1b61194a39ee0eb5 jdk9-b67 11af3990d56c97b40318bc1f20608e86f051a3f7 jdk9-b68 ff0929a59ced0e144201aa05819ae2e47d6f2c61 jdk9-b69 +8672e9264db30c21504063932dbc374eabc287a1 jdk9-b70
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java Thu Jul 02 17:50:25 2015 -0700 @@ -121,6 +121,8 @@ private Flag[] commandLineFlags; private Map flagsMap; + private static Type intType; + private static Type uintType; private static Type intxType; private static Type uintxType; private static Type sizetType; @@ -170,6 +172,28 @@ return addr.getCIntegerAt(0, boolType.getSize(), boolType.isUnsigned()) != 0; } + public boolean isInt() { + return type.equals("int"); + } + + public long getInt() { + if (Assert.ASSERTS_ENABLED) { + Assert.that(isInt(), "not an int flag!"); + } + return addr.getCIntegerAt(0, intType.getSize(), false); + } + + public boolean isUInt() { + return type.equals("uint"); + } + + public long getUInt() { + if (Assert.ASSERTS_ENABLED) { + Assert.that(isUInt(), "not a uint flag!"); + } + return addr.getCIntegerAt(0, uintType.getSize(), false); + } + public boolean isIntx() { return type.equals("intx"); } @@ -206,6 +230,10 @@ public String getValue() { if (isBool()) { return new Boolean(getBool()).toString(); + } else if (isInt()) { + return new Long(getInt()).toString(); + } else if (isUInt()) { + return new Long(getUInt()).toString(); } else if (isIntx()) { return new Long(getIntx()).toString(); } else if (isUIntx()) { @@ -334,6 +362,8 @@ heapWordSize = db.lookupIntConstant("HeapWordSize").intValue(); oopSize = db.lookupIntConstant("oopSize").intValue(); + intType = db.lookupType("int"); + uintType = db.lookupType("uint"); intxType = db.lookupType("intx"); uintxType = db.lookupType("uintx"); sizetType = db.lookupType("size_t");
--- a/hotspot/src/cpu/aarch64/vm/aarch64.ad Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/cpu/aarch64/vm/aarch64.ad Thu Jul 02 17:50:25 2015 -0700 @@ -13276,7 +13276,7 @@ ins_cost(INSN_COST); format %{ "movi $dst, $con\t# vector(16B)" %} ins_encode %{ - __ mov(as_FloatRegister($dst$$reg), __ T16B, $con$$constant); + __ mov(as_FloatRegister($dst$$reg), __ T16B, $con$$constant & 0xff); %} ins_pipe(pipe_class_default); %} @@ -13298,7 +13298,7 @@ ins_cost(INSN_COST); format %{ "movi $dst, $con\t# vector(8H)" %} ins_encode %{ - __ mov(as_FloatRegister($dst$$reg), __ T8H, $con$$constant); + __ mov(as_FloatRegister($dst$$reg), __ T8H, $con$$constant & 0xffff); %} ins_pipe(pipe_class_default); %}
--- a/hotspot/src/cpu/aarch64/vm/assembler_aarch64.hpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/cpu/aarch64/vm/assembler_aarch64.hpp Thu Jul 02 17:50:25 2015 -0700 @@ -491,6 +491,11 @@ i->rf(_index, 16); i->f(_ext.option(), 15, 13); unsigned size = i->get(31, 30); + if (i->get(26, 26) && i->get(23, 23)) { + // SIMD Q Type - Size = 128 bits + assert(size == 0, "bad size"); + size = 0b100; + } if (size == 0) // It's a byte i->f(_ext.shift() >= 0, 12); else {
--- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -1408,6 +1408,52 @@ movk(r, imm64 & 0xffff, 32); } +// Macro to mov replicated immediate to vector register. +// Vd will get the following values for different arrangements in T +// imm32 == hex 000000gh T8B: Vd = ghghghghghghghgh +// imm32 == hex 000000gh T16B: Vd = ghghghghghghghghghghghghghghghgh +// imm32 == hex 0000efgh T4H: Vd = efghefghefghefgh +// imm32 == hex 0000efgh T8H: Vd = efghefghefghefghefghefghefghefgh +// imm32 == hex abcdefgh T2S: Vd = abcdefghabcdefgh +// imm32 == hex abcdefgh T4S: Vd = abcdefghabcdefghabcdefghabcdefgh +// T1D/T2D: invalid +void MacroAssembler::mov(FloatRegister Vd, SIMD_Arrangement T, u_int32_t imm32) { + assert(T != T1D && T != T2D, "invalid arrangement"); + if (T == T8B || T == T16B) { + assert((imm32 & ~0xff) == 0, "extraneous bits in unsigned imm32 (T8B/T16B)"); + movi(Vd, T, imm32 & 0xff, 0); + return; + } + u_int32_t nimm32 = ~imm32; + if (T == T4H || T == T8H) { + assert((imm32 & ~0xffff) == 0, "extraneous bits in unsigned imm32 (T4H/T8H)"); + imm32 &= 0xffff; + nimm32 &= 0xffff; + } + u_int32_t x = imm32; + int movi_cnt = 0; + int movn_cnt = 0; + while (x) { if (x & 0xff) movi_cnt++; x >>= 8; } + x = nimm32; + while (x) { if (x & 0xff) movn_cnt++; x >>= 8; } + if (movn_cnt < movi_cnt) imm32 = nimm32; + unsigned lsl = 0; + while (imm32 && (imm32 & 0xff) == 0) { lsl += 8; imm32 >>= 8; } + if (movn_cnt < movi_cnt) + mvni(Vd, T, imm32 & 0xff, lsl); + else + movi(Vd, T, imm32 & 0xff, lsl); + imm32 >>= 8; lsl += 8; + while (imm32) { + while ((imm32 & 0xff) == 0) { lsl += 8; imm32 >>= 8; } + if (movn_cnt < movi_cnt) + bici(Vd, T, imm32 & 0xff, lsl); + else + orri(Vd, T, imm32 & 0xff, lsl); + lsl += 8; imm32 >>= 8; + } +} + void MacroAssembler::mov_immediate64(Register dst, u_int64_t imm64) { #ifndef PRODUCT
--- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp Thu Jul 02 17:50:25 2015 -0700 @@ -465,44 +465,7 @@ void movptr(Register r, uintptr_t imm64); - // Macro to mov replicated immediate to vector register. - // Where imm32 == hex abcdefgh, Vd will get the following values - // for different arrangements in T - // T8B: Vd = ghghghghghghghgh - // T16B: Vd = ghghghghghghghghghghghghghghghgh - // T4H: Vd = efghefghefghefgh - // T8H: Vd = efghefghefghefghefghefghefghefgh - // T2S: Vd = abcdefghabcdefgh - // T4S: Vd = abcdefghabcdefghabcdefghabcdefgh - // T1D/T2D: invalid - void mov(FloatRegister Vd, SIMD_Arrangement T, u_int32_t imm32) { - assert(T != T1D && T != T2D, "invalid arrangement"); - u_int32_t nimm32 = ~imm32; - if (T == T8B || T == T16B) { imm32 &= 0xff; nimm32 &= 0xff; } - if (T == T4H || T == T8H) { imm32 &= 0xffff; nimm32 &= 0xffff; } - u_int32_t x = imm32; - int movi_cnt = 0; - int movn_cnt = 0; - while (x) { if (x & 0xff) movi_cnt++; x >>= 8; } - x = nimm32; - while (x) { if (x & 0xff) movn_cnt++; x >>= 8; } - if (movn_cnt < movi_cnt) imm32 = nimm32; - unsigned lsl = 0; - while (imm32 && (imm32 & 0xff) == 0) { lsl += 8; imm32 >>= 8; } - if (movn_cnt < movi_cnt) - mvni(Vd, T, imm32 & 0xff, lsl); - else - movi(Vd, T, imm32 & 0xff, lsl); - imm32 >>= 8; lsl += 8; - while (imm32) { - while ((imm32 & 0xff) == 0) { lsl += 8; imm32 >>= 8; } - if (movn_cnt < movi_cnt) - bici(Vd, T, imm32 & 0xff, lsl); - else - orri(Vd, T, imm32 & 0xff, lsl); - lsl += 8; imm32 >>= 8; - } - } + void mov(FloatRegister Vd, SIMD_Arrangement T, u_int32_t imm32); // macro instructions for accessing and updating floating point // status register
--- a/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -228,6 +228,9 @@ warning("SHA512 instruction (for SHA-384 and SHA-512) is not available on this CPU."); FLAG_SET_DEFAULT(UseSHA512Intrinsics, false); } + if (!(UseSHA1Intrinsics || UseSHA256Intrinsics || UseSHA512Intrinsics)) { + FLAG_SET_DEFAULT(UseSHA, false); + } } // This machine allows unaligned memory accesses
--- a/hotspot/src/share/vm/ci/ciMethod.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/ci/ciMethod.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -71,8 +71,7 @@ // Loaded method. ciMethod::ciMethod(methodHandle h_m, ciInstanceKlass* holder) : ciMetadata(h_m()), - _holder(holder), - _has_injected_profile(false) + _holder(holder) { assert(h_m() != NULL, "no null method"); @@ -170,8 +169,7 @@ _liveness( NULL), _can_be_statically_bound(false), _method_blocks( NULL), - _method_data( NULL), - _has_injected_profile( false) + _method_data( NULL) #if defined(COMPILER2) || defined(SHARK) , _flow( NULL),
--- a/hotspot/src/share/vm/ci/ciMethod.hpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/ci/ciMethod.hpp Thu Jul 02 17:50:25 2015 -0700 @@ -81,7 +81,6 @@ bool _is_c1_compilable; bool _is_c2_compilable; bool _can_be_statically_bound; - bool _has_injected_profile; // Lazy fields, filled in on demand address _code; @@ -179,9 +178,9 @@ // Code size for inlining decisions. int code_size_for_inlining(); - bool caller_sensitive() { return get_Method()->caller_sensitive(); } - bool force_inline() { return get_Method()->force_inline(); } - bool dont_inline() { return get_Method()->dont_inline(); } + bool caller_sensitive() const { return get_Method()->caller_sensitive(); } + bool force_inline() const { return get_Method()->force_inline(); } + bool dont_inline() const { return get_Method()->dont_inline(); } int comp_level(); int highest_osr_comp_level(); @@ -289,9 +288,6 @@ int instructions_size(); int scale_count(int count, float prof_factor = 1.); // make MDO count commensurate with IIC - bool has_injected_profile() const { return _has_injected_profile; } - void set_injected_profile(bool x) { _has_injected_profile = x; } - // Stack walking support bool is_ignored_by_security_stack_walk() const;
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -1742,6 +1742,10 @@ if (_location != _in_method) break; // only allow for methods if (!privileged) break; // only allow in privileged code return _method_DontInline; + case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_InjectedProfile_signature): + if (_location != _in_method) break; // only allow for methods + if (!privileged) break; // only allow in privileged code + return _method_InjectedProfile; case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_LambdaForm_Compiled_signature): if (_location != _in_method) break; // only allow for methods if (!privileged) break; // only allow in privileged code @@ -1783,6 +1787,8 @@ m->set_force_inline(true); if (has_annotation(_method_DontInline)) m->set_dont_inline(true); + if (has_annotation(_method_InjectedProfile)) + m->set_has_injected_profile(true); if (has_annotation(_method_LambdaForm_Compiled) && m->intrinsic_id() == vmIntrinsics::_none) m->set_intrinsic_id(vmIntrinsics::_compiledLambdaForm); if (has_annotation(_method_LambdaForm_Hidden))
--- a/hotspot/src/share/vm/classfile/classFileParser.hpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/classfile/classFileParser.hpp Thu Jul 02 17:50:25 2015 -0700 @@ -127,6 +127,7 @@ _method_CallerSensitive, _method_ForceInline, _method_DontInline, + _method_InjectedProfile, _method_LambdaForm_Compiled, _method_LambdaForm_Hidden, _sun_misc_Contended,
--- a/hotspot/src/share/vm/classfile/vmSymbols.hpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp Thu Jul 02 17:50:25 2015 -0700 @@ -278,6 +278,7 @@ template(java_lang_invoke_LambdaForm, "java/lang/invoke/LambdaForm") \ template(java_lang_invoke_ForceInline_signature, "Ljava/lang/invoke/ForceInline;") \ template(java_lang_invoke_DontInline_signature, "Ljava/lang/invoke/DontInline;") \ + template(java_lang_invoke_InjectedProfile_signature, "Ljava/lang/invoke/InjectedProfile;") \ template(java_lang_invoke_Stable_signature, "Ljava/lang/invoke/Stable;") \ template(java_lang_invoke_LambdaForm_Compiled_signature, "Ljava/lang/invoke/LambdaForm$Compiled;") \ template(java_lang_invoke_LambdaForm_Hidden_signature, "Ljava/lang/invoke/LambdaForm$Hidden;") \
--- a/hotspot/src/share/vm/gc/parallel/psMarkSweep.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/gc/parallel/psMarkSweep.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -96,7 +96,7 @@ heap->collector_policy()->should_clear_all_soft_refs(); uint count = maximum_heap_compaction ? 1 : MarkSweepAlwaysCompactCount; - UIntFlagSetting flag_setting(MarkSweepAlwaysCompactCount, count); + UIntXFlagSetting flag_setting(MarkSweepAlwaysCompactCount, count); PSMarkSweep::invoke_no_policy(clear_all_soft_refs || maximum_heap_compaction); }
--- a/hotspot/src/share/vm/gc/shared/collectorPolicy.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/gc/shared/collectorPolicy.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -785,7 +785,7 @@ // free memory should be here, especially if they are expensive. If this // attempt fails, an OOM exception will be thrown. { - UIntFlagSetting flag_change(MarkSweepAlwaysCompactCount, 1); // Make sure the heap is fully compacted + UIntXFlagSetting flag_change(MarkSweepAlwaysCompactCount, 1); // Make sure the heap is fully compacted gch->do_collection(true /* full */, true /* clear_all_soft_refs */,
--- a/hotspot/src/share/vm/oops/method.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/oops/method.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -93,6 +93,7 @@ set_force_inline(false); set_hidden(false); set_dont_inline(false); + set_has_injected_profile(false); set_method_data(NULL); clear_method_counters(); set_vtable_index(Method::garbage_vtable_index);
--- a/hotspot/src/share/vm/oops/method.hpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/oops/method.hpp Thu Jul 02 17:50:25 2015 -0700 @@ -76,12 +76,13 @@ // Flags enum Flags { - _jfr_towrite = 1 << 0, - _caller_sensitive = 1 << 1, - _force_inline = 1 << 2, - _dont_inline = 1 << 3, - _hidden = 1 << 4, - _running_emcp = 1 << 5 + _jfr_towrite = 1 << 0, + _caller_sensitive = 1 << 1, + _force_inline = 1 << 2, + _dont_inline = 1 << 3, + _hidden = 1 << 4, + _has_injected_profile = 1 << 5, + _running_emcp = 1 << 6 }; u1 _flags; @@ -814,6 +815,13 @@ _flags = x ? (_flags | _hidden) : (_flags & ~_hidden); } + bool has_injected_profile() { + return (_flags & _has_injected_profile) != 0; + } + void set_has_injected_profile(bool x) { + _flags = x ? (_flags | _has_injected_profile) : (_flags & ~_has_injected_profile); + } + ConstMethod::MethodType method_type() const { return _constMethod->method_type(); }
--- a/hotspot/src/share/vm/opto/arraycopynode.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/opto/arraycopynode.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -438,11 +438,17 @@ // replace fallthrough projections of the ArrayCopyNode by the // new memory, control and the input IO. CallProjections callprojs; - extract_projections(&callprojs, true); + extract_projections(&callprojs, true, false); - igvn->replace_node(callprojs.fallthrough_ioproj, in(TypeFunc::I_O)); - igvn->replace_node(callprojs.fallthrough_memproj, mem); - igvn->replace_node(callprojs.fallthrough_catchproj, ctl); + if (callprojs.fallthrough_ioproj != NULL) { + igvn->replace_node(callprojs.fallthrough_ioproj, in(TypeFunc::I_O)); + } + if (callprojs.fallthrough_memproj != NULL) { + igvn->replace_node(callprojs.fallthrough_memproj, mem); + } + if (callprojs.fallthrough_catchproj != NULL) { + igvn->replace_node(callprojs.fallthrough_catchproj, ctl); + } // The ArrayCopyNode is not disconnected. It still has the // projections for the exception case. Replace current
--- a/hotspot/src/share/vm/opto/callnode.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/opto/callnode.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -724,6 +724,26 @@ // bool CallNode::may_modify(const TypeOopPtr *t_oop, PhaseTransform *phase) { assert((t_oop != NULL), "sanity"); + if (is_call_to_arraycopystub()) { + const TypeTuple* args = _tf->domain(); + Node* dest = NULL; + // Stubs that can be called once an ArrayCopyNode is expanded have + // different signatures. Look for the second pointer argument, + // that is the destination of the copy. + for (uint i = TypeFunc::Parms, j = 0; i < args->cnt(); i++) { + if (args->field_at(i)->isa_ptr()) { + j++; + if (j == 2) { + dest = in(i); + break; + } + } + } + if (!dest->is_top() && may_modify_arraycopy_helper(phase->type(dest)->is_oopptr(), t_oop, phase)) { + return true; + } + return false; + } if (t_oop->is_known_instance()) { // The instance_id is set only for scalar-replaceable allocations which // are not passed as arguments according to Escape Analysis. @@ -810,7 +830,7 @@ } -void CallNode::extract_projections(CallProjections* projs, bool separate_io_proj) { +void CallNode::extract_projections(CallProjections* projs, bool separate_io_proj, bool do_asserts) { projs->fallthrough_proj = NULL; projs->fallthrough_catchproj = NULL; projs->fallthrough_ioproj = NULL; @@ -873,17 +893,18 @@ } } - // The resproj may not exist because the result couuld be ignored + // The resproj may not exist because the result could be ignored // and the exception object may not exist if an exception handler // swallows the exception but all the other must exist and be found. assert(projs->fallthrough_proj != NULL, "must be found"); - assert(Compile::current()->inlining_incrementally() || projs->fallthrough_catchproj != NULL, "must be found"); - assert(Compile::current()->inlining_incrementally() || projs->fallthrough_memproj != NULL, "must be found"); - assert(Compile::current()->inlining_incrementally() || projs->fallthrough_ioproj != NULL, "must be found"); - assert(Compile::current()->inlining_incrementally() || projs->catchall_catchproj != NULL, "must be found"); + do_asserts = do_asserts && !Compile::current()->inlining_incrementally(); + assert(!do_asserts || projs->fallthrough_catchproj != NULL, "must be found"); + assert(!do_asserts || projs->fallthrough_memproj != NULL, "must be found"); + assert(!do_asserts || projs->fallthrough_ioproj != NULL, "must be found"); + assert(!do_asserts || projs->catchall_catchproj != NULL, "must be found"); if (separate_io_proj) { - assert(Compile::current()->inlining_incrementally() || projs->catchall_memproj != NULL, "must be found"); - assert(Compile::current()->inlining_incrementally() || projs->catchall_ioproj != NULL, "must be found"); + assert(!do_asserts || projs->catchall_memproj != NULL, "must be found"); + assert(!do_asserts || projs->catchall_ioproj != NULL, "must be found"); } } @@ -909,6 +930,12 @@ return SafePointNode::Ideal(phase, can_reshape); } +bool CallNode::is_call_to_arraycopystub() const { + if (_name != NULL && strstr(_name, "arraycopy") != 0) { + return true; + } + return false; +} //============================================================================= uint CallJavaNode::size_of() const { return sizeof(*this); } @@ -1007,14 +1034,6 @@ //============================================================================= -bool CallLeafNode::is_call_to_arraycopystub() const { - if (_name != NULL && strstr(_name, "arraycopy") != 0) { - return true; - } - return false; -} - - #ifndef PRODUCT void CallLeafNode::dump_spec(outputStream *st) const { st->print("# "); @@ -1930,26 +1949,3 @@ return true; } -bool CallLeafNode::may_modify(const TypeOopPtr *t_oop, PhaseTransform *phase) { - if (is_call_to_arraycopystub()) { - const TypeTuple* args = _tf->domain(); - Node* dest = NULL; - // Stubs that can be called once an ArrayCopyNode is expanded have - // different signatures. Look for the second pointer argument, - // that is the destination of the copy. - for (uint i = TypeFunc::Parms, j = 0; i < args->cnt(); i++) { - if (args->field_at(i)->isa_ptr()) { - j++; - if (j == 2) { - dest = in(i); - break; - } - } - } - if (!dest->is_top() && may_modify_arraycopy_helper(phase->type(dest)->is_oopptr(), t_oop, phase)) { - return true; - } - return false; - } - return CallNode::may_modify(t_oop, phase); -}
--- a/hotspot/src/share/vm/opto/callnode.hpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/opto/callnode.hpp Thu Jul 02 17:50:25 2015 -0700 @@ -565,13 +565,15 @@ address _entry_point; // Address of method being called float _cnt; // Estimate of number of times called CallGenerator* _generator; // corresponding CallGenerator for some late inline calls + const char *_name; // Printable name, if _method is NULL CallNode(const TypeFunc* tf, address addr, const TypePtr* adr_type) : SafePointNode(tf->domain()->cnt(), NULL, adr_type), _tf(tf), _entry_point(addr), _cnt(COUNT_UNKNOWN), - _generator(NULL) + _generator(NULL), + _name(NULL) { init_class_id(Class_Call); } @@ -626,10 +628,12 @@ // Collect all the interesting edges from a call for use in // replacing the call by something else. Used by macro expansion // and the late inlining support. - void extract_projections(CallProjections* projs, bool separate_io_proj); + void extract_projections(CallProjections* projs, bool separate_io_proj, bool do_asserts = true); virtual uint match_edge(uint idx) const; + bool is_call_to_arraycopystub() const; + #ifndef PRODUCT virtual void dump_req(outputStream *st = tty) const; virtual void dump_spec(outputStream *st) const; @@ -683,7 +687,7 @@ virtual uint size_of() const; // Size is bigger public: CallStaticJavaNode(Compile* C, const TypeFunc* tf, address addr, ciMethod* method, int bci) - : CallJavaNode(tf, addr, method, bci), _name(NULL) { + : CallJavaNode(tf, addr, method, bci) { init_class_id(Class_CallStaticJava); if (C->eliminate_boxing() && (method != NULL) && method->is_boxing_method()) { init_flags(Flag_is_macro); @@ -694,14 +698,14 @@ } CallStaticJavaNode(const TypeFunc* tf, address addr, const char* name, int bci, const TypePtr* adr_type) - : CallJavaNode(tf, addr, NULL, bci), _name(name) { + : CallJavaNode(tf, addr, NULL, bci) { init_class_id(Class_CallStaticJava); // This node calls a runtime stub, which often has narrow memory effects. _adr_type = adr_type; _is_scalar_replaceable = false; _is_non_escaping = false; + _name = name; } - const char *_name; // Runtime wrapper name // Result of Escape Analysis bool _is_scalar_replaceable; @@ -754,13 +758,12 @@ public: CallRuntimeNode(const TypeFunc* tf, address addr, const char* name, const TypePtr* adr_type) - : CallNode(tf, addr, adr_type), - _name(name) + : CallNode(tf, addr, adr_type) { init_class_id(Class_CallRuntime); + _name = name; } - const char *_name; // Printable name, if _method is NULL virtual int Opcode() const; virtual void calling_convention( BasicType* sig_bt, VMRegPair *parm_regs, uint argcnt ) const; @@ -785,8 +788,6 @@ #ifndef PRODUCT virtual void dump_spec(outputStream *st) const; #endif - bool is_call_to_arraycopystub() const; - virtual bool may_modify(const TypeOopPtr *t_oop, PhaseTransform *phase); }; //------------------------------CallLeafNoFPNode-------------------------------
--- a/hotspot/src/share/vm/opto/compile.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/opto/compile.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -3390,9 +3390,6 @@ bool Compile::too_many_traps(ciMethod* method, int bci, Deoptimization::DeoptReason reason) { - if (method->has_injected_profile()) { - return false; - } ciMethodData* md = method->method_data(); if (md->is_empty()) { // Assume the trap has not occurred, or that it occurred only @@ -3442,9 +3439,6 @@ bool Compile::too_many_recompiles(ciMethod* method, int bci, Deoptimization::DeoptReason reason) { - if (method->has_injected_profile()) { - return false; - } ciMethodData* md = method->method_data(); if (md->is_empty()) { // Assume the trap has not occurred, or that it occurred only
--- a/hotspot/src/share/vm/opto/library_call.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/opto/library_call.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -6125,8 +6125,6 @@ jint false_cnt = aobj->element_value(0).as_int(); jint true_cnt = aobj->element_value(1).as_int(); - method()->set_injected_profile(true); - if (C->log() != NULL) { C->log()->elem("observe source='profileBoolean' false='%d' true='%d'", false_cnt, true_cnt);
--- a/hotspot/src/share/vm/opto/memnode.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/opto/memnode.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -108,11 +108,10 @@ #endif -static bool membar_for_arraycopy_helper(const TypeOopPtr *t_oop, MergeMemNode* mm, PhaseTransform *phase) { - if (mm->memory_at(Compile::AliasIdxRaw)->is_Proj()) { - Node* n = mm->memory_at(Compile::AliasIdxRaw)->in(0); - if ((n->is_ArrayCopy() && n->as_ArrayCopy()->may_modify(t_oop, phase)) || - (n->is_CallLeaf() && n->as_CallLeaf()->may_modify(t_oop, phase))) { +static bool membar_for_arraycopy_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase) { + if (n->is_Proj()) { + n = n->in(0); + if (n->is_Call() && n->as_Call()->may_modify(t_oop, phase)) { return true; } } @@ -121,16 +120,22 @@ static bool membar_for_arraycopy(const TypeOopPtr *t_oop, MemBarNode* mb, PhaseTransform *phase) { Node* mem = mb->in(TypeFunc::Memory); + if (mem->is_MergeMem()) { - return membar_for_arraycopy_helper(t_oop, mem->as_MergeMem(), phase); - } else if (mem->is_Phi()) { - // after macro expansion of an ArrayCopyNode we may have a Phi - for (uint i = 1; i < mem->req(); i++) { - if (mem->in(i) != NULL && mem->in(i)->is_MergeMem() && membar_for_arraycopy_helper(t_oop, mem->in(i)->as_MergeMem(), phase)) { - return true; + Node* n = mem->as_MergeMem()->memory_at(Compile::AliasIdxRaw); + if (membar_for_arraycopy_helper(t_oop, n, phase)) { + return true; + } else if (n->is_Phi()) { + for (uint i = 1; i < n->req(); i++) { + if (n->in(i) != NULL) { + if (membar_for_arraycopy_helper(t_oop, n->in(i), phase)) { + return true; + } + } } } } + return false; }
--- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -43,6 +43,7 @@ #include "runtime/deoptimization.hpp" #include "runtime/relocator.hpp" #include "utilities/bitMap.inline.hpp" +#include "utilities/events.hpp" PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC @@ -174,6 +175,9 @@ // Free os::malloc allocated memory. os::free(_scratch_classes); + // Reset the_class_oop to null for error printing. + _the_class_oop = NULL; + if (RC_TRACE_ENABLED(0x00000004)) { // Used to have separate timers for "doit" and "all", but the timer // overhead skewed the measurements. @@ -4105,6 +4109,13 @@ java_lang_Class::classRedefinedCount(the_class_mirror), os::available_memory() >> 10)); + { + ResourceMark rm(THREAD); + Events::log_redefinition(THREAD, "redefined class name=%s, count=%d", + the_class->external_name(), + java_lang_Class::classRedefinedCount(the_class_mirror)); + + } RC_TIMER_STOP(_timer_rsc_phase2); } // end redefine_single_class() @@ -4249,3 +4260,11 @@ tty->cr(); } } + +void VM_RedefineClasses::print_on_error(outputStream* st) const { + VM_Operation::print_on_error(st); + if (_the_class_oop != NULL) { + ResourceMark rm; + st->print_cr(", redefining class %s", _the_class_oop->external_name()); + } +}
--- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.hpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.hpp Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 @@ -539,5 +539,8 @@ static unsigned char * get_cached_class_file_bytes(JvmtiCachedClassFileData *cache) { return cache == NULL ? NULL : cache->data; } + + // Error printing + void print_on_error(outputStream* st) const; }; #endif // SHARE_VM_PRIMS_JVMTIREDEFINECLASSES_HPP
--- a/hotspot/src/share/vm/prims/whitebox.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/prims/whitebox.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -710,6 +710,24 @@ return NULL; WB_END +WB_ENTRY(jobject, WB_GetIntVMFlag(JNIEnv* env, jobject o, jstring name)) + int result; + if (GetVMFlag <int> (thread, env, name, &result, &CommandLineFlags::intAt)) { + ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI + return longBox(thread, env, result); + } + return NULL; +WB_END + +WB_ENTRY(jobject, WB_GetUintVMFlag(JNIEnv* env, jobject o, jstring name)) + uint result; + if (GetVMFlag <uint> (thread, env, name, &result, &CommandLineFlags::uintAt)) { + ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI + return longBox(thread, env, result); + } + return NULL; +WB_END + WB_ENTRY(jobject, WB_GetIntxVMFlag(JNIEnv* env, jobject o, jstring name)) intx result; if (GetVMFlag <intx> (thread, env, name, &result, &CommandLineFlags::intxAt)) { @@ -771,6 +789,16 @@ SetVMFlag <bool> (thread, env, name, &result, &CommandLineFlags::boolAtPut); WB_END +WB_ENTRY(void, WB_SetIntVMFlag(JNIEnv* env, jobject o, jstring name, jlong value)) + int result = value; + SetVMFlag <int> (thread, env, name, &result, &CommandLineFlags::intAtPut); +WB_END + +WB_ENTRY(void, WB_SetUintVMFlag(JNIEnv* env, jobject o, jstring name, jlong value)) + uint result = value; + SetVMFlag <uint> (thread, env, name, &result, &CommandLineFlags::uintAtPut); +WB_END + WB_ENTRY(void, WB_SetIntxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value)) intx result = value; SetVMFlag <intx> (thread, env, name, &result, &CommandLineFlags::intxAtPut); @@ -1336,6 +1364,8 @@ {CC"isConstantVMFlag", CC"(Ljava/lang/String;)Z", (void*)&WB_IsConstantVMFlag}, {CC"isLockedVMFlag", CC"(Ljava/lang/String;)Z", (void*)&WB_IsLockedVMFlag}, {CC"setBooleanVMFlag", CC"(Ljava/lang/String;Z)V",(void*)&WB_SetBooleanVMFlag}, + {CC"setIntVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetIntVMFlag}, + {CC"setUintVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetUintVMFlag}, {CC"setIntxVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetIntxVMFlag}, {CC"setUintxVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetUintxVMFlag}, {CC"setUint64VMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetUint64VMFlag}, @@ -1345,6 +1375,10 @@ (void*)&WB_SetStringVMFlag}, {CC"getBooleanVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Boolean;", (void*)&WB_GetBooleanVMFlag}, + {CC"getIntVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;", + (void*)&WB_GetIntVMFlag}, + {CC"getUintVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;", + (void*)&WB_GetUintVMFlag}, {CC"getIntxVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;", (void*)&WB_GetIntxVMFlag}, {CC"getUintxVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;",
--- a/hotspot/src/share/vm/runtime/arguments.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/runtime/arguments.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -586,11 +586,12 @@ static bool set_numeric_flag(char* name, char* value, Flag::Flags origin) { julong v; + int int_v; intx intx_v; bool is_neg = false; // Check the sign first since atomull() parses only unsigned values. if (*value == '-') { - if (!CommandLineFlags::intxAt(name, &intx_v)) { + if (!CommandLineFlags::intxAt(name, &intx_v) && !CommandLineFlags::intAt(name, &int_v)) { return false; } value++; @@ -599,6 +600,17 @@ if (!atomull(value, &v)) { return false; } + int_v = (int) v; + if (is_neg) { + int_v = -int_v; + } + if (CommandLineFlags::intAtPut(name, &int_v, origin)) { + return true; + } + uint uint_v = (uint) v; + if (!is_neg && CommandLineFlags::uintAtPut(name, &uint_v, origin)) { + return true; + } intx_v = (intx) v; if (is_neg) { intx_v = -intx_v;
--- a/hotspot/src/share/vm/runtime/deoptimization.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/runtime/deoptimization.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -1460,7 +1460,11 @@ // // The other actions cause immediate removal of the present code. - bool update_trap_state = (reason != Reason_tenured); + // Traps caused by injected profile shouldn't pollute trap counts. + bool injected_profile_trap = trap_method->has_injected_profile() && + (reason == Reason_intrinsic || reason == Reason_unreached); + + bool update_trap_state = (reason != Reason_tenured) && !injected_profile_trap; bool make_not_entrant = false; bool make_not_compilable = false; bool reprofile = false;
--- a/hotspot/src/share/vm/runtime/globals.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/runtime/globals.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -93,6 +93,32 @@ *((bool*) _addr) = value; } +bool Flag::is_int() const { + return strcmp(_type, "int") == 0; +} + +int Flag::get_int() const { + return *((int*) _addr); +} + +void Flag::set_int(int value) { + check_writable(); + *((int*) _addr) = value; +} + +bool Flag::is_uint() const { + return strcmp(_type, "uint") == 0; +} + +uint Flag::get_uint() const { + return *((uint*) _addr); +} + +void Flag::set_uint(uint value) { + check_writable(); + *((uint*) _addr) = value; +} + bool Flag::is_intx() const { return strcmp(_type, "intx") == 0; } @@ -316,6 +342,12 @@ if (is_bool()) { st->print("%-16s", get_bool() ? "true" : "false"); } + if (is_int()) { + st->print("%-16d", get_int()); + } + if (is_uint()) { + st->print("%-16u", get_uint()); + } if (is_intx()) { st->print("%-16ld", get_intx()); } @@ -411,6 +443,10 @@ void Flag::print_as_flag(outputStream* st) { if (is_bool()) { st->print("-XX:%s%s", get_bool() ? "+" : "-", _name); + } else if (is_int()) { + st->print("-XX:%s=%d", _name, get_int()); + } else if (is_uint()) { + st->print("-XX:%s=%u", _name, get_uint()); } else if (is_intx()) { st->print("-XX:%s=" INTX_FORMAT, _name, get_intx()); } else if (is_uintx()) { @@ -663,6 +699,62 @@ faddr->set_origin(origin); } +bool CommandLineFlags::intAt(const char* name, size_t len, int* value, bool allow_locked, bool return_flag) { + Flag* result = Flag::find_flag(name, len, allow_locked, return_flag); + if (result == NULL) return false; + if (!result->is_int()) return false; + *value = result->get_int(); + return true; +} + +bool CommandLineFlags::intAtPut(const char* name, size_t len, int* value, Flag::Flags origin) { + Flag* result = Flag::find_flag(name, len); + if (result == NULL) return false; + if (!result->is_int()) return false; + int old_value = result->get_int(); + trace_flag_changed<EventIntFlagChanged, s4>(name, old_value, *value, origin); + result->set_int(*value); + *value = old_value; + result->set_origin(origin); + return true; +} + +void CommandLineFlagsEx::intAtPut(CommandLineFlagWithType flag, int value, Flag::Flags origin) { + Flag* faddr = address_of_flag(flag); + guarantee(faddr != NULL && faddr->is_int(), "wrong flag type"); + trace_flag_changed<EventIntFlagChanged, s4>(faddr->_name, faddr->get_int(), value, origin); + faddr->set_int(value); + faddr->set_origin(origin); +} + +bool CommandLineFlags::uintAt(const char* name, size_t len, uint* value, bool allow_locked, bool return_flag) { + Flag* result = Flag::find_flag(name, len, allow_locked, return_flag); + if (result == NULL) return false; + if (!result->is_uint()) return false; + *value = result->get_uint(); + return true; +} + +bool CommandLineFlags::uintAtPut(const char* name, size_t len, uint* value, Flag::Flags origin) { + Flag* result = Flag::find_flag(name, len); + if (result == NULL) return false; + if (!result->is_uint()) return false; + uint old_value = result->get_uint(); + trace_flag_changed<EventUnsignedIntFlagChanged, u4>(name, old_value, *value, origin); + result->set_uint(*value); + *value = old_value; + result->set_origin(origin); + return true; +} + +void CommandLineFlagsEx::uintAtPut(CommandLineFlagWithType flag, uint value, Flag::Flags origin) { + Flag* faddr = address_of_flag(flag); + guarantee(faddr != NULL && faddr->is_uint(), "wrong flag type"); + trace_flag_changed<EventUnsignedIntFlagChanged, u4>(faddr->_name, faddr->get_uint(), value, origin); + faddr->set_uint(value); + faddr->set_origin(origin); +} + bool CommandLineFlags::intxAt(const char* name, size_t len, intx* value, bool allow_locked, bool return_flag) { Flag* result = Flag::find_flag(name, len, allow_locked, return_flag); if (result == NULL) return false;
--- a/hotspot/src/share/vm/runtime/globals.hpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/runtime/globals.hpp Thu Jul 02 17:50:25 2015 -0700 @@ -279,6 +279,14 @@ bool get_bool() const; void set_bool(bool value); + bool is_int() const; + int get_int() const; + void set_int(int value); + + bool is_uint() const; + uint get_uint() const; + void set_uint(uint value); + bool is_intx() const; intx get_intx() const; void set_intx(intx value); @@ -363,13 +371,28 @@ ~CounterSetting() { (*counter)--; } }; +class IntFlagSetting { + int val; + int* flag; + public: + IntFlagSetting(int& fl, int newValue) { flag = &fl; val = fl; fl = newValue; } + ~IntFlagSetting() { *flag = val; } +}; class UIntFlagSetting { + uint val; + uint* flag; + public: + UIntFlagSetting(uint& fl, uint newValue) { flag = &fl; val = fl; fl = newValue; } + ~UIntFlagSetting() { *flag = val; } +}; + +class UIntXFlagSetting { uintx val; uintx* flag; public: - UIntFlagSetting(uintx& fl, uintx newValue) { flag = &fl; val = fl; fl = newValue; } - ~UIntFlagSetting() { *flag = val; } + UIntXFlagSetting(uintx& fl, uintx newValue) { flag = &fl; val = fl; fl = newValue; } + ~UIntXFlagSetting() { *flag = val; } }; class DoubleFlagSetting { @@ -396,6 +419,16 @@ static bool boolAtPut(const char* name, size_t len, bool* value, Flag::Flags origin); static bool boolAtPut(const char* name, bool* value, Flag::Flags origin) { return boolAtPut(name, strlen(name), value, origin); } + static bool intAt(const char* name, size_t len, int* value, bool allow_locked = false, bool return_flag = false); + static bool intAt(const char* name, int* value, bool allow_locked = false, bool return_flag = false) { return intAt(name, strlen(name), value, allow_locked, return_flag); } + static bool intAtPut(const char* name, size_t len, int* value, Flag::Flags origin); + static bool intAtPut(const char* name, int* value, Flag::Flags origin) { return intAtPut(name, strlen(name), value, origin); } + + static bool uintAt(const char* name, size_t len, uint* value, bool allow_locked = false, bool return_flag = false); + static bool uintAt(const char* name, uint* value, bool allow_locked = false, bool return_flag = false) { return uintAt(name, strlen(name), value, allow_locked, return_flag); } + static bool uintAtPut(const char* name, size_t len, uint* value, Flag::Flags origin); + static bool uintAtPut(const char* name, uint* value, Flag::Flags origin) { return uintAtPut(name, strlen(name), value, origin); } + static bool intxAt(const char* name, size_t len, intx* value, bool allow_locked = false, bool return_flag = false); static bool intxAt(const char* name, intx* value, bool allow_locked = false, bool return_flag = false) { return intxAt(name, strlen(name), value, allow_locked, return_flag); } static bool intxAtPut(const char* name, size_t len, intx* value, Flag::Flags origin);
--- a/hotspot/src/share/vm/runtime/globals_extension.hpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/runtime/globals_extension.hpp Thu Jul 02 17:50:25 2015 -0700 @@ -197,6 +197,8 @@ class CommandLineFlagsEx : CommandLineFlags { public: static void boolAtPut(CommandLineFlagWithType flag, bool value, Flag::Flags origin); + static void intAtPut(CommandLineFlagWithType flag, int value, Flag::Flags origin); + static void uintAtPut(CommandLineFlagWithType flag, uint value, Flag::Flags origin); static void intxAtPut(CommandLineFlagWithType flag, intx value, Flag::Flags origin); static void uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin); static void uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin);
--- a/hotspot/src/share/vm/runtime/vm_operations.hpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/runtime/vm_operations.hpp Thu Jul 02 17:50:25 2015 -0700 @@ -192,7 +192,7 @@ static const char* mode_to_string(Mode mode); // Debugging - void print_on_error(outputStream* st) const; + virtual void print_on_error(outputStream* st) const; const char* name() const { return _names[type()]; } static const char* name(int type) { assert(type >= 0 && type < VMOp_Terminating, "invalid VM operation type");
--- a/hotspot/src/share/vm/services/management.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/services/management.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -1558,6 +1558,12 @@ if (flag->is_bool()) { global->value.z = flag->get_bool() ? JNI_TRUE : JNI_FALSE; global->type = JMM_VMGLOBAL_TYPE_JBOOLEAN; + } else if (flag->is_int()) { + global->value.j = (jlong)flag->get_int(); + global->type = JMM_VMGLOBAL_TYPE_JLONG; + } else if (flag->is_uint()) { + global->value.j = (jlong)flag->get_uint(); + global->type = JMM_VMGLOBAL_TYPE_JLONG; } else if (flag->is_intx()) { global->value.j = (jlong)flag->get_intx(); global->type = JMM_VMGLOBAL_TYPE_JLONG;
--- a/hotspot/src/share/vm/services/writeableFlags.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/services/writeableFlags.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -44,6 +44,36 @@ return CommandLineFlags::boolAtPut((char*)name, &value, origin) ? SUCCESS : ERR_OTHER; } +// set a int global flag +int WriteableFlags::set_int_flag(const char* name, const char* arg, Flag::Flags origin, FormatBuffer<80>& err_msg) { + int value; + + if (sscanf(arg, "%d", &value)) { + return set_int_flag(name, value, origin, err_msg); + } + err_msg.print("flag value must be an integer"); + return WRONG_FORMAT; +} + +int WriteableFlags::set_int_flag(const char* name, int value, Flag::Flags origin, FormatBuffer<80>& err_msg) { + return CommandLineFlags::intAtPut((char*)name, &value, origin) ? SUCCESS : ERR_OTHER; +} + +// set a uint global flag +int WriteableFlags::set_uint_flag(const char* name, const char* arg, Flag::Flags origin, FormatBuffer<80>& err_msg) { + uint value; + + if (sscanf(arg, "%u", &value)) { + return set_uint_flag(name, value, origin, err_msg); + } + err_msg.print("flag value must be an unsigned integer"); + return WRONG_FORMAT; +} + +int WriteableFlags::set_uint_flag(const char* name, uint value, Flag::Flags origin, FormatBuffer<80>& err_msg) { + return CommandLineFlags::uintAtPut((char*)name, &value, origin) ? SUCCESS : ERR_OTHER; +} + // set a intx global flag int WriteableFlags::set_intx_flag(const char* name, const char* arg, Flag::Flags origin, FormatBuffer<80>& err_msg) { intx value; @@ -173,6 +203,10 @@ } if (f->is_bool()) { return set_bool_flag(f->_name, flag_value, origin, err_msg); + } else if (f->is_int()) { + return set_int_flag(f->_name, flag_value, origin, err_msg); + } else if (f->is_uint()) { + return set_uint_flag(f->_name, flag_value, origin, err_msg); } else if (f->is_intx()) { return set_intx_flag(f->_name, flag_value, origin, err_msg); } else if (f->is_uintx()) { @@ -195,6 +229,12 @@ if (f->is_bool()) { bool bvalue = (new_value.z == JNI_TRUE ? true : false); return set_bool_flag(f->_name, bvalue, origin, err_msg); + } else if (f->is_int()) { + int ivalue = (int)new_value.j; + return set_int_flag(f->_name, ivalue, origin, err_msg); + } else if (f->is_uint()) { + uint uvalue = (uint)new_value.j; + return set_uint_flag(f->_name, uvalue, origin, err_msg); } else if (f->is_intx()) { intx ivalue = (intx)new_value.j; return set_intx_flag(f->_name, ivalue, origin, err_msg);
--- a/hotspot/src/share/vm/services/writeableFlags.hpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/services/writeableFlags.hpp Thu Jul 02 17:50:25 2015 -0700 @@ -56,6 +56,10 @@ // set a boolean global flag static int set_bool_flag(const char* name, const char* value, Flag::Flags origin, FormatBuffer<80>& err_msg); + // set a int global flag + static int set_int_flag(const char* name, const char* value, Flag::Flags origin, FormatBuffer<80>& err_msg); + // set a uint global flag + static int set_uint_flag(const char* name, const char* value, Flag::Flags origin, FormatBuffer<80>& err_msg); // set a intx global flag static int set_intx_flag(const char* name, const char* value, Flag::Flags origin, FormatBuffer<80>& err_msg); // set a uintx global flag @@ -66,6 +70,10 @@ static int set_size_t_flag(const char* name, const char* value, Flag::Flags origin, FormatBuffer<80>& err_msg); // set a boolean global flag static int set_bool_flag(const char* name, bool value, Flag::Flags origin, FormatBuffer<80>& err_msg); + // set a int global flag + static int set_int_flag(const char* name, int value, Flag::Flags origin, FormatBuffer<80>& err_msg); + // set a uint global flag + static int set_uint_flag(const char* name, uint value, Flag::Flags origin, FormatBuffer<80>& err_msg); // set a intx global flag static int set_intx_flag(const char* name, intx value, Flag::Flags origin, FormatBuffer<80>& err_msg); // set a uintx global flag
--- a/hotspot/src/share/vm/trace/trace.xml Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/trace/trace.xml Thu Jul 02 17:50:25 2015 -0700 @@ -122,6 +122,22 @@ <value type="CLASS" field="definingClassLoader" label="Defining Class Loader"/> </event> + <event id="IntFlagChanged" path="vm/flag/int_changed" label="Int Flag Changed" + is_instant="true"> + <value type="UTF8" field="name" label="Name" /> + <value type="INTEGER" field="old_value" label="Old Value" /> + <value type="INTEGER" field="new_value" label="New Value" /> + <value type="FLAGVALUEORIGIN" field="origin" label="Origin" /> + </event> + + <event id="UnsignedIntFlagChanged" path="vm/flag/uint_changed" label="Unsigned Int Flag Changed" + is_instant="true"> + <value type="UTF8" field="name" label="Name" /> + <value type="UINT" field="old_value" label="Old Value" /> + <value type="UINT" field="new_value" label="New Value" /> + <value type="FLAGVALUEORIGIN" field="origin" label="Origin" /> + </event> + <event id="LongFlagChanged" path="vm/flag/long_changed" label="Long Flag Changed" is_instant="true"> <value type="UTF8" field="name" label="Name" />
--- a/hotspot/src/share/vm/utilities/events.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/utilities/events.cpp Thu Jul 02 17:50:25 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 @@ -37,6 +37,7 @@ EventLog* Events::_logs = NULL; StringEventLog* Events::_messages = NULL; StringEventLog* Events::_exceptions = NULL; +StringEventLog* Events::_redefinitions = NULL; StringEventLog* Events::_deopt_messages = NULL; EventLog::EventLog() { @@ -66,6 +67,7 @@ if (LogEvents) { _messages = new StringEventLog("Events"); _exceptions = new StringEventLog("Internal exceptions"); + _redefinitions = new StringEventLog("Classes redefined"); _deopt_messages = new StringEventLog("Deoptimization events"); } }
--- a/hotspot/src/share/vm/utilities/events.hpp Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/src/share/vm/utilities/events.hpp Thu Jul 02 17:50:25 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 @@ -186,6 +186,9 @@ // Deoptization related messages static StringEventLog* _deopt_messages; + // Redefinition related messages + static StringEventLog* _redefinitions; + public: static void print_all(outputStream* out); @@ -198,6 +201,8 @@ // Log exception related message static void log_exception(Thread* thread, const char* format, ...) ATTRIBUTE_PRINTF(2, 3); + static void log_redefinition(Thread* thread, const char* format, ...) ATTRIBUTE_PRINTF(2, 3); + static void log_deopt_message(Thread* thread, const char* format, ...) ATTRIBUTE_PRINTF(2, 3); // Register default loggers @@ -222,6 +227,15 @@ } } +inline void Events::log_redefinition(Thread* thread, const char* format, ...) { + if (LogEvents) { + va_list ap; + va_start(ap, format); + _redefinitions->logv(thread, format, ap); + va_end(ap); + } +} + inline void Events::log_deopt_message(Thread* thread, const char* format, ...) { if (LogEvents) { va_list ap;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/arraycopy/TestLoadBypassArrayCopy.java Thu Jul 02 17:50:25 2015 -0700 @@ -0,0 +1,71 @@ +/* + * 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 8086046 + * @summary load bypasses arraycopy that sets the value after the ArrayCopyNode is expanded + * @run main/othervm -XX:-BackgroundCompilation -XX:-UseOnStackReplacement -XX:CompileCommand=dontinline,TestLoadBypassArrayCopy::test_helper -XX:-TieredCompilation TestLoadBypassArrayCopy + * + */ + +public class TestLoadBypassArrayCopy { + + static long i; + static boolean test_helper() { + i++; + if ((i%10) == 0) { + return false; + } + return true; + } + + static int test(int[] src, int len, boolean flag) { + int[] dest = new int[10]; + int res = 0; + while (test_helper()) { + System.arraycopy(src, 0, dest, 0, len); + // predicate moved out of loop so control of following + // load is not the ArrayCopyNode. Otherwise, if the memory + // of the load is changed and the control is set to the + // ArrayCopyNode the graph is unschedulable and the test + // doesn't fail. + if (flag) { + } + // The memory of this load shouldn't bypass the arraycopy + res = dest[0]; + } + return res; + } + + static public void main(String[] args) { + int[] src = new int[10]; + src[0] = 0x42; + for (int i = 0; i < 20000; i++) { + int res = test(src, 10, false); + if (res != src[0]) { + throw new RuntimeException("test failed"); + } + } + } +}
--- a/hotspot/test/compiler/intrinsics/sha/cli/SHAOptionsBase.java Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/test/compiler/intrinsics/sha/cli/SHAOptionsBase.java Thu Jul 02 17:50:25 2015 -0700 @@ -71,7 +71,7 @@ * instructions required by the option are not supported. */ protected static String getWarningForUnsupportedCPU(String optionName) { - if (Platform.isSparc()) { + if (Platform.isSparc() || Platform.isAArch64()) { switch (optionName) { case SHAOptionsBase.USE_SHA_OPTION: return SHAOptionsBase.SHA_INSTRUCTIONS_ARE_NOT_AVAILABLE;
--- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA1IntrinsicsOptionOnSupportedCPU.java Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA1IntrinsicsOptionOnSupportedCPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -36,7 +36,7 @@ */ public class TestUseSHA1IntrinsicsOptionOnSupportedCPU { public static void main(String args[]) throws Throwable { - new SHAOptionsBase(new GenericTestCaseForSupportedSparcCPU( + new SHAOptionsBase(new GenericTestCaseForSupportedCPU( SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION)).test(); } }
--- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA1IntrinsicsOptionOnUnsupportedCPU.java Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA1IntrinsicsOptionOnUnsupportedCPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -40,9 +40,11 @@ new SHAOptionsBase( new GenericTestCaseForUnsupportedSparcCPU( SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION), - new UseSHAIntrinsicsSpecificTestCaseForUnsupportedSparcCPU( + new GenericTestCaseForUnsupportedX86CPU( SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION), - new GenericTestCaseForUnsupportedX86CPU( + new GenericTestCaseForUnsupportedAArch64CPU( + SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION), + new UseSHAIntrinsicsSpecificTestCaseForUnsupportedCPU( SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION), new GenericTestCaseForOtherCPU( SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION)).test();
--- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA256IntrinsicsOptionOnSupportedCPU.java Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA256IntrinsicsOptionOnSupportedCPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -37,7 +37,7 @@ */ public class TestUseSHA256IntrinsicsOptionOnSupportedCPU { public static void main(String args[]) throws Throwable { - new SHAOptionsBase(new GenericTestCaseForSupportedSparcCPU( + new SHAOptionsBase(new GenericTestCaseForSupportedCPU( SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION)).test(); } }
--- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA256IntrinsicsOptionOnUnsupportedCPU.java Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA256IntrinsicsOptionOnUnsupportedCPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -40,9 +40,11 @@ new SHAOptionsBase( new GenericTestCaseForUnsupportedSparcCPU( SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION), - new UseSHAIntrinsicsSpecificTestCaseForUnsupportedSparcCPU( + new GenericTestCaseForUnsupportedX86CPU( SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION), - new GenericTestCaseForUnsupportedX86CPU( + new GenericTestCaseForUnsupportedAArch64CPU( + SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION), + new UseSHAIntrinsicsSpecificTestCaseForUnsupportedCPU( SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION), new GenericTestCaseForOtherCPU( SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION)).test();
--- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA512IntrinsicsOptionOnSupportedCPU.java Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA512IntrinsicsOptionOnSupportedCPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -37,7 +37,7 @@ */ public class TestUseSHA512IntrinsicsOptionOnSupportedCPU { public static void main(String args[]) throws Throwable { - new SHAOptionsBase(new GenericTestCaseForSupportedSparcCPU( + new SHAOptionsBase(new GenericTestCaseForSupportedCPU( SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION)).test(); } }
--- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA512IntrinsicsOptionOnUnsupportedCPU.java Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA512IntrinsicsOptionOnUnsupportedCPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -40,9 +40,11 @@ new SHAOptionsBase( new GenericTestCaseForUnsupportedSparcCPU( SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION), - new UseSHAIntrinsicsSpecificTestCaseForUnsupportedSparcCPU( + new GenericTestCaseForUnsupportedX86CPU( SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION), - new GenericTestCaseForUnsupportedX86CPU( + new GenericTestCaseForUnsupportedAArch64CPU( + SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION), + new UseSHAIntrinsicsSpecificTestCaseForUnsupportedCPU( SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION), new GenericTestCaseForOtherCPU( SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION)).test();
--- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHAOptionOnSupportedCPU.java Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHAOptionOnSupportedCPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -37,9 +37,9 @@ public class TestUseSHAOptionOnSupportedCPU { public static void main(String args[]) throws Throwable { new SHAOptionsBase( - new GenericTestCaseForSupportedSparcCPU( + new GenericTestCaseForSupportedCPU( SHAOptionsBase.USE_SHA_OPTION), - new UseSHASpecificTestCaseForSupportedSparcCPU( + new UseSHASpecificTestCaseForSupportedCPU( SHAOptionsBase.USE_SHA_OPTION)).test(); } }
--- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHAOptionOnUnsupportedCPU.java Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHAOptionOnUnsupportedCPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -39,9 +39,11 @@ new SHAOptionsBase( new GenericTestCaseForUnsupportedSparcCPU( SHAOptionsBase.USE_SHA_OPTION), - new UseSHASpecificTestCaseForUnsupportedSparcCPU( + new GenericTestCaseForUnsupportedX86CPU( SHAOptionsBase.USE_SHA_OPTION), - new GenericTestCaseForUnsupportedX86CPU( + new GenericTestCaseForUnsupportedAArch64CPU( + SHAOptionsBase.USE_SHA_OPTION), + new UseSHASpecificTestCaseForUnsupportedCPU( SHAOptionsBase.USE_SHA_OPTION), new GenericTestCaseForOtherCPU( SHAOptionsBase.USE_SHA_OPTION)).test();
--- a/hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForOtherCPU.java Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForOtherCPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -35,16 +35,18 @@ SHAOptionsBase.TestCase { public GenericTestCaseForOtherCPU(String optionName) { // Execute the test case on any CPU except SPARC and X86 - super(optionName, new NotPredicate(new OrPredicate(Platform::isSparc, - new OrPredicate(Platform::isX64, Platform::isX86)))); + super(optionName, new NotPredicate( + new OrPredicate( + new OrPredicate(Platform::isSparc, Platform::isAArch64), + new OrPredicate(Platform::isX64, Platform::isX86)))); } @Override protected void verifyWarnings() throws Throwable { String shouldPassMessage = String.format("JVM should start with " + "option '%s' without any warnings", optionName); - // Verify that on non-x86 and non-SPARC CPU usage of SHA-related - // options will not cause any warnings. + // Verify that on non-x86, non-SPARC and non-AArch64 CPU usage of + // SHA-related options will not cause any warnings. CommandLineOptionTest.verifySameJVMStartup(null, new String[] { ".*" + optionName + ".*" }, shouldPassMessage, shouldPassMessage, ExitCode.OK,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForSupportedCPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2014, 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 jdk.test.lib.ExitCode; +import jdk.test.lib.Platform; +import jdk.test.lib.cli.CommandLineOptionTest; +import jdk.test.lib.cli.predicate.AndPredicate; +import jdk.test.lib.cli.predicate.OrPredicate; + +/** + * Generic test case for SHA-related options targeted to CPUs which + * support instructions required by the tested option. + */ +public class GenericTestCaseForSupportedCPU extends + SHAOptionsBase.TestCase { + public GenericTestCaseForSupportedCPU(String optionName) { + super(optionName, + new AndPredicate( + new OrPredicate(Platform::isSparc, Platform::isAArch64), + SHAOptionsBase.getPredicateForOption(optionName))); + } + + @Override + protected void verifyWarnings() throws Throwable { + + String shouldPassMessage = String.format("JVM should start with option" + + " '%s' without any warnings", optionName); + // Verify that there are no warning when option is explicitly enabled. + CommandLineOptionTest.verifySameJVMStartup(null, new String[] { + SHAOptionsBase.getWarningForUnsupportedCPU(optionName) + }, shouldPassMessage, shouldPassMessage, ExitCode.OK, + CommandLineOptionTest.prepareBooleanFlag(optionName, true)); + + // Verify that option could be disabled even if +UseSHA was passed to + // JVM. + CommandLineOptionTest.verifySameJVMStartup(null, new String[] { + SHAOptionsBase.getWarningForUnsupportedCPU(optionName) + }, shouldPassMessage, String.format("It should be able to " + + "disable option '%s' even if %s was passed to JVM", + optionName, CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true)), + ExitCode.OK, + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true), + CommandLineOptionTest.prepareBooleanFlag(optionName, false)); + + // Verify that it is possible to enable the tested option and disable + // all SHA intrinsics via -UseSHA without any warnings. + CommandLineOptionTest.verifySameJVMStartup(null, new String[] { + SHAOptionsBase.getWarningForUnsupportedCPU(optionName) + }, shouldPassMessage, String.format("It should be able to " + + "enable option '%s' even if %s was passed to JVM", + optionName, CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, false)), + ExitCode.OK, + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, false), + CommandLineOptionTest.prepareBooleanFlag(optionName, true)); + } + + @Override + protected void verifyOptionValues() throws Throwable { + // Verify that "It should be able to disable option " + + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true", + String.format("Option '%s' should be enabled by default", + optionName)); + + // Verify that it is possible to explicitly enable the option. + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true", + String.format("Option '%s' was set to have value 'true'", + optionName), + CommandLineOptionTest.prepareBooleanFlag(optionName, true)); + + // Verify that it is possible to explicitly disable the option. + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' was set to have value 'false'", + optionName), + CommandLineOptionTest.prepareBooleanFlag(optionName, false)); + + // verify that option is disabled when -UseSHA was passed to JVM. + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should have value 'false' when %s" + + " flag set to JVM", optionName, + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, false)), + CommandLineOptionTest.prepareBooleanFlag(optionName, true), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, false)); + + // Verify that it is possible to explicitly disable the tested option + // even if +UseSHA was passed to JVM. + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should have value 'false' if set so" + + " even if %s flag set to JVM", optionName, + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true)), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true), + CommandLineOptionTest.prepareBooleanFlag(optionName, false)); + } +}
--- a/hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForSupportedSparcCPU.java Thu Jul 02 17:15:55 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2014, 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 jdk.test.lib.ExitCode; -import jdk.test.lib.Platform; -import jdk.test.lib.cli.CommandLineOptionTest; -import jdk.test.lib.cli.predicate.AndPredicate; - -/** - * Generic test case for SHA-related options targeted to SPARC CPUs which - * support instructions required by the tested option. - */ -public class GenericTestCaseForSupportedSparcCPU extends - SHAOptionsBase.TestCase { - public GenericTestCaseForSupportedSparcCPU(String optionName) { - super(optionName, new AndPredicate(Platform::isSparc, - SHAOptionsBase.getPredicateForOption(optionName))); - } - - @Override - protected void verifyWarnings() throws Throwable { - - String shouldPassMessage = String.format("JVM should start with option" - + " '%s' without any warnings", optionName); - // Verify that there are no warning when option is explicitly enabled. - CommandLineOptionTest.verifySameJVMStartup(null, new String[] { - SHAOptionsBase.getWarningForUnsupportedCPU(optionName) - }, shouldPassMessage, shouldPassMessage, ExitCode.OK, - CommandLineOptionTest.prepareBooleanFlag(optionName, true)); - - // Verify that option could be disabled even if +UseSHA was passed to - // JVM. - CommandLineOptionTest.verifySameJVMStartup(null, new String[] { - SHAOptionsBase.getWarningForUnsupportedCPU(optionName) - }, shouldPassMessage, String.format("It should be able to " - + "disable option '%s' even if %s was passed to JVM", - optionName, CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, true)), - ExitCode.OK, - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, true), - CommandLineOptionTest.prepareBooleanFlag(optionName, false)); - - // Verify that it is possible to enable the tested option and disable - // all SHA intrinsics via -UseSHA without any warnings. - CommandLineOptionTest.verifySameJVMStartup(null, new String[] { - SHAOptionsBase.getWarningForUnsupportedCPU(optionName) - }, shouldPassMessage, String.format("It should be able to " - + "enable option '%s' even if %s was passed to JVM", - optionName, CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, false)), - ExitCode.OK, - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, false), - CommandLineOptionTest.prepareBooleanFlag(optionName, true)); - } - - @Override - protected void verifyOptionValues() throws Throwable { - // Verify that "It should be able to disable option " - - CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true", - String.format("Option '%s' should be enabled by default", - optionName)); - - // Verify that it is possible to explicitly enable the option. - CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true", - String.format("Option '%s' was set to have value 'true'", - optionName), - CommandLineOptionTest.prepareBooleanFlag(optionName, true)); - - // Verify that it is possible to explicitly disable the option. - CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", - String.format("Option '%s' was set to have value 'false'", - optionName), - CommandLineOptionTest.prepareBooleanFlag(optionName, false)); - - // verify that option is disabled when -UseSHA was passed to JVM. - CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", - String.format("Option '%s' should have value 'false' when %s" - + " flag set to JVM", optionName, - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, false)), - CommandLineOptionTest.prepareBooleanFlag(optionName, true), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, false)); - - // Verify that it is possible to explicitly disable the tested option - // even if +UseSHA was passed to JVM. - CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", - String.format("Option '%s' should have value 'false' if set so" - + " even if %s flag set to JVM", optionName, - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, true)), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, true), - CommandLineOptionTest.prepareBooleanFlag(optionName, false)); - } -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForUnsupportedAArch64CPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014, 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 jdk.test.lib.ExitCode; +import jdk.test.lib.Platform; +import jdk.test.lib.cli.CommandLineOptionTest; +import jdk.test.lib.cli.predicate.AndPredicate; +import jdk.test.lib.cli.predicate.NotPredicate; + +/** + * Generic test case for SHA-related options targeted to AArch64 CPUs + * which don't support instruction required by the tested option. + */ +public class GenericTestCaseForUnsupportedAArch64CPU extends + SHAOptionsBase.TestCase { + public GenericTestCaseForUnsupportedAArch64CPU(String optionName) { + super(optionName, new AndPredicate(Platform::isAArch64, + new NotPredicate(SHAOptionsBase.getPredicateForOption( + optionName)))); + } + + @Override + protected void verifyWarnings() throws Throwable { + String shouldPassMessage = String.format("JVM startup should pass with" + + "option '-XX:-%s' without any warnings", optionName); + //Verify that option could be disabled without any warnings. + CommandLineOptionTest.verifySameJVMStartup(null, new String[] { + SHAOptionsBase.getWarningForUnsupportedCPU(optionName) + }, shouldPassMessage, shouldPassMessage, ExitCode.OK, + CommandLineOptionTest.prepareBooleanFlag(optionName, false)); + + shouldPassMessage = String.format("JVM should start with '-XX:+" + + "%s' flag, but output should contain warning.", optionName); + // Verify that when the tested option is explicitly enabled, then + // a warning will occur in VM output. + CommandLineOptionTest.verifySameJVMStartup(new String[] { + SHAOptionsBase.getWarningForUnsupportedCPU(optionName) + }, null, shouldPassMessage, shouldPassMessage, ExitCode.OK, + CommandLineOptionTest.prepareBooleanFlag(optionName, true)); + } + + @Override + protected void verifyOptionValues() throws Throwable { + // Verify that option is disabled by default. + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should be disabled by default", + optionName)); + + // Verify that option is disabled even if it was explicitly enabled + // using CLI options. + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should be off on unsupported " + + "AArch64CPU even if set to true directly", optionName), + CommandLineOptionTest.prepareBooleanFlag(optionName, true)); + + // Verify that option is disabled when +UseSHA was passed to JVM. + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should be off on unsupported " + + "AArch64CPU even if %s flag set to JVM", + optionName, CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true)), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true)); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHAIntrinsicsSpecificTestCaseForUnsupportedCPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2014, 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 jdk.test.lib.ExitCode; +import jdk.test.lib.Platform; +import jdk.test.lib.cli.CommandLineOptionTest; +import jdk.test.lib.cli.predicate.AndPredicate; +import jdk.test.lib.cli.predicate.OrPredicate; +import jdk.test.lib.cli.predicate.NotPredicate; +import sha.predicate.IntrinsicPredicates; + +/** + * Test case specific to UseSHA*Intrinsics options targeted to SPARC and AArch64 + * CPUs which don't support required instruction, but support other SHA-related + * instructions. + * + * For example, CPU support sha1 instruction, but don't support sha256 or + * sha512. + */ +public class UseSHAIntrinsicsSpecificTestCaseForUnsupportedCPU + extends SHAOptionsBase.TestCase { + public UseSHAIntrinsicsSpecificTestCaseForUnsupportedCPU( + String optionName) { + // execute test case on SPARC CPU that support any sha* instructions, + // but does not support sha* instruction required by the tested option. + super(optionName, new AndPredicate( + new OrPredicate(Platform::isSparc, Platform::isAArch64), + new AndPredicate( + IntrinsicPredicates.ANY_SHA_INSTRUCTION_AVAILABLE, + new NotPredicate(SHAOptionsBase.getPredicateForOption( + optionName))))); + } + @Override + protected void verifyWarnings() throws Throwable { + String shouldPassMessage = String.format("JVM should start with " + + "'-XX:+%s' flag, but output should contain warning.", + optionName); + // Verify that attempt to enable the tested option will cause a warning + CommandLineOptionTest.verifySameJVMStartup(new String[] { + SHAOptionsBase.getWarningForUnsupportedCPU(optionName) + }, null, shouldPassMessage, shouldPassMessage, ExitCode.OK, + CommandLineOptionTest.prepareBooleanFlag(optionName, true)); + } +}
--- a/hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHAIntrinsicsSpecificTestCaseForUnsupportedSparcCPU.java Thu Jul 02 17:15:55 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2014, 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 jdk.test.lib.ExitCode; -import jdk.test.lib.Platform; -import jdk.test.lib.cli.CommandLineOptionTest; -import jdk.test.lib.cli.predicate.AndPredicate; -import jdk.test.lib.cli.predicate.NotPredicate; -import sha.predicate.IntrinsicPredicates; - -/** - * Test case specific to UseSHA*Intrinsics options targeted to SPARC CPUs which - * don't support required instruction, but support other SHA-related - * instructions. - * - * For example, CPU support sha1 instruction, but don't support sha256 or - * sha512. - */ -public class UseSHAIntrinsicsSpecificTestCaseForUnsupportedSparcCPU - extends SHAOptionsBase.TestCase { - public UseSHAIntrinsicsSpecificTestCaseForUnsupportedSparcCPU( - String optionName) { - // execute test case on SPARC CPU that support any sha* instructions, - // but does not support sha* instruction required by the tested option. - super(optionName, new AndPredicate(Platform::isSparc, - new AndPredicate( - IntrinsicPredicates.ANY_SHA_INSTRUCTION_AVAILABLE, - new NotPredicate(SHAOptionsBase.getPredicateForOption( - optionName))))); - } - @Override - protected void verifyWarnings() throws Throwable { - String shouldPassMessage = String.format("JVM should start with " - + "'-XX:+%s' flag, but output should contain warning.", - optionName); - // Verify that attempt to enable the tested option will cause a warning - CommandLineOptionTest.verifySameJVMStartup(new String[] { - SHAOptionsBase.getWarningForUnsupportedCPU(optionName) - }, null, shouldPassMessage, shouldPassMessage, ExitCode.OK, - CommandLineOptionTest.prepareBooleanFlag(optionName, true)); - } -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHASpecificTestCaseForSupportedCPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2014, 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 jdk.test.lib.Asserts; +import jdk.test.lib.ExitCode; +import jdk.test.lib.Platform; +import jdk.test.lib.cli.CommandLineOptionTest; +import jdk.test.lib.cli.predicate.AndPredicate; +import jdk.test.lib.cli.predicate.OrPredicate; +import sha.predicate.IntrinsicPredicates; + +/** + * UseSHA specific test case targeted to SPARC and AArch64 CPUs which + * support any sha* instruction. + */ +public class UseSHASpecificTestCaseForSupportedCPU + extends SHAOptionsBase.TestCase { + public UseSHASpecificTestCaseForSupportedCPU(String optionName) { + super(SHAOptionsBase.USE_SHA_OPTION, new AndPredicate( + new OrPredicate(Platform::isSparc, Platform::isAArch64), + IntrinsicPredicates.ANY_SHA_INSTRUCTION_AVAILABLE)); + + Asserts.assertEQ(optionName, SHAOptionsBase.USE_SHA_OPTION, + String.format("Test case should be used for '%s' option only.", + SHAOptionsBase.USE_SHA_OPTION)); + } + + @Override + protected void verifyWarnings() throws Throwable { + String shouldPassMessage = String.format("JVM startup should pass when" + + " %s was passed and all UseSHA*Intrinsics options " + + "were disabled", + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true)); + // Verify that there will be no warnings when +UseSHA was passed and + // all UseSHA*Intrinsics options were disabled. + CommandLineOptionTest.verifySameJVMStartup( + null, new String[] { ".*UseSHA.*" }, shouldPassMessage, + shouldPassMessage, ExitCode.OK, + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, false), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, false), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, false)); + } + + @Override + protected void verifyOptionValues() throws Throwable { + // Verify that UseSHA is disabled when all UseSHA*Intrinsics are + // disabled. + CommandLineOptionTest.verifyOptionValueForSameVM( + SHAOptionsBase.USE_SHA_OPTION, "false", String.format( + "'%s' option should be disabled when all UseSHA*Intrinsics are" + + " disabled", SHAOptionsBase.USE_SHA_OPTION), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, false), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, false), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, false)); + + CommandLineOptionTest.verifyOptionValueForSameVM( + // Verify that UseSHA is disabled when all UseSHA*Intrinsics are + // disabled even if it was explicitly enabled. + SHAOptionsBase.USE_SHA_OPTION, "false", + String.format("'%s' option should be disabled when all " + + "UseSHA*Intrinsics are disabled even if %s flag set " + + "to JVM", SHAOptionsBase.USE_SHA_OPTION, + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true)), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, false), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, false), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, false)); + + // Verify that explicitly disabled UseSHA option remains disabled even + // if all UseSHA*Intrinsics options were enabled. + CommandLineOptionTest.verifyOptionValueForSameVM( + SHAOptionsBase.USE_SHA_OPTION, "false", + String.format("'%s' option should be disabled if %s flag " + + "set even if all UseSHA*Intrinsics were enabled", + SHAOptionsBase.USE_SHA_OPTION, + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, false)), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, false), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, true), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, true), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, true)); + } +}
--- a/hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHASpecificTestCaseForSupportedSparcCPU.java Thu Jul 02 17:15:55 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2014, 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 jdk.test.lib.Asserts; -import jdk.test.lib.ExitCode; -import jdk.test.lib.Platform; -import jdk.test.lib.cli.CommandLineOptionTest; -import jdk.test.lib.cli.predicate.AndPredicate; -import sha.predicate.IntrinsicPredicates; - -/** - * UseSHA specific test case targeted to SPARC CPUs which support any sha* - * instruction. - */ -public class UseSHASpecificTestCaseForSupportedSparcCPU - extends SHAOptionsBase.TestCase { - public UseSHASpecificTestCaseForSupportedSparcCPU(String optionName) { - super(SHAOptionsBase.USE_SHA_OPTION, new AndPredicate(Platform::isSparc, - IntrinsicPredicates.ANY_SHA_INSTRUCTION_AVAILABLE)); - - Asserts.assertEQ(optionName, SHAOptionsBase.USE_SHA_OPTION, - String.format("Test case should be used for '%s' option only.", - SHAOptionsBase.USE_SHA_OPTION)); - } - - @Override - protected void verifyWarnings() throws Throwable { - String shouldPassMessage = String.format("JVM startup should pass when" - + " %s was passed and all UseSHA*Intrinsics options " - + "were disabled", - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, true)); - // Verify that there will be no warnings when +UseSHA was passed and - // all UseSHA*Intrinsics options were disabled. - CommandLineOptionTest.verifySameJVMStartup( - null, new String[] { ".*UseSHA.*" }, shouldPassMessage, - shouldPassMessage, ExitCode.OK, - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, true), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, false), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, false), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, false)); - } - - @Override - protected void verifyOptionValues() throws Throwable { - // Verify that UseSHA is disabled when all UseSHA*Intrinsics are - // disabled. - CommandLineOptionTest.verifyOptionValueForSameVM( - SHAOptionsBase.USE_SHA_OPTION, "false", String.format( - "'%s' option should be disabled when all UseSHA*Intrinsics are" - + " disabled", SHAOptionsBase.USE_SHA_OPTION), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, false), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, false), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, false)); - - CommandLineOptionTest.verifyOptionValueForSameVM( - // Verify that UseSHA is disabled when all UseSHA*Intrinsics are - // disabled even if it was explicitly enabled. - SHAOptionsBase.USE_SHA_OPTION, "false", - String.format("'%s' option should be disabled when all " - + "UseSHA*Intrinsics are disabled even if %s flag set " - + "to JVM", SHAOptionsBase.USE_SHA_OPTION, - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, true)), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, true), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, false), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, false), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, false)); - - // Verify that explicitly disabled UseSHA option remains disabled even - // if all UseSHA*Intrinsics options were enabled. - CommandLineOptionTest.verifyOptionValueForSameVM( - SHAOptionsBase.USE_SHA_OPTION, "false", - String.format("'%s' option should be disabled if %s flag " - + "set even if all UseSHA*Intrinsics were enabled", - SHAOptionsBase.USE_SHA_OPTION, - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, false)), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, false), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, true), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, true), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, true)); - } -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHASpecificTestCaseForUnsupportedCPU.java Thu Jul 02 17:50:25 2015 -0700 @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2014, 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 jdk.test.lib.Asserts; +import jdk.test.lib.ExitCode; +import jdk.test.lib.Platform; +import jdk.test.lib.cli.CommandLineOptionTest; +import jdk.test.lib.cli.predicate.AndPredicate; +import jdk.test.lib.cli.predicate.OrPredicate; +import jdk.test.lib.cli.predicate.NotPredicate; +import sha.predicate.IntrinsicPredicates; + +/** + * UseSHA specific test case targeted to SPARC and AArch64 CPUs which don't + * support all sha* instructions./ + */ +public class UseSHASpecificTestCaseForUnsupportedCPU + extends SHAOptionsBase.TestCase { + public UseSHASpecificTestCaseForUnsupportedCPU(String optionName) { + super(SHAOptionsBase.USE_SHA_OPTION, new AndPredicate( + new OrPredicate(Platform::isSparc, Platform::isAArch64), + new NotPredicate( + IntrinsicPredicates.ANY_SHA_INSTRUCTION_AVAILABLE))); + + Asserts.assertEQ(optionName, SHAOptionsBase.USE_SHA_OPTION, + "Test case should be used for " + SHAOptionsBase.USE_SHA_OPTION + + " option only."); + } + + @Override + protected void verifyWarnings() throws Throwable { + // Verify that attempt to use UseSHA option will cause a warning. + String shouldPassMessage = String.format("JVM startup should pass with" + + " '%s' option on unsupported CPU, but there should be" + + "the message shown.", optionName); + CommandLineOptionTest.verifySameJVMStartup(new String[] { + SHAOptionsBase.getWarningForUnsupportedCPU(optionName) + }, null, shouldPassMessage, shouldPassMessage, ExitCode.OK, + CommandLineOptionTest.prepareBooleanFlag(optionName, true)); + } + + @Override + protected void verifyOptionValues() throws Throwable { + // Verify that UseSHA option remains disabled even if all + // UseSHA*Intrinsics were enabled. + CommandLineOptionTest.verifyOptionValueForSameVM( + SHAOptionsBase.USE_SHA_OPTION, "false", String.format( + "%s option should be disabled on unsupported CPU" + + " even if all UseSHA*Intrinsics options were enabled.", + SHAOptionsBase.USE_SHA_OPTION), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, true), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, true), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, true)); + + // Verify that UseSHA option remains disabled even if all + // UseSHA*Intrinsics options were enabled and UseSHA was enabled as well. + CommandLineOptionTest.verifyOptionValueForSameVM( + SHAOptionsBase.USE_SHA_OPTION, "false", String.format( + "%s option should be disabled on unsupported CPU" + + " even if all UseSHA*Intrinsics options were enabled" + + " and %s was enabled as well", + SHAOptionsBase.USE_SHA_OPTION, + SHAOptionsBase.USE_SHA_OPTION), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, true), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, true), + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, true)); + } +}
--- a/hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHASpecificTestCaseForUnsupportedSparcCPU.java Thu Jul 02 17:15:55 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2014, 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 jdk.test.lib.Asserts; -import jdk.test.lib.ExitCode; -import jdk.test.lib.Platform; -import jdk.test.lib.cli.CommandLineOptionTest; -import jdk.test.lib.cli.predicate.AndPredicate; -import jdk.test.lib.cli.predicate.NotPredicate; -import sha.predicate.IntrinsicPredicates; - -/** - * UseSHA specific test case targeted to SPARC CPUs which don't support all sha* - * instructions. - */ -public class UseSHASpecificTestCaseForUnsupportedSparcCPU - extends SHAOptionsBase.TestCase { - public UseSHASpecificTestCaseForUnsupportedSparcCPU(String optionName) { - super(SHAOptionsBase.USE_SHA_OPTION, new AndPredicate(Platform::isSparc, - new NotPredicate( - IntrinsicPredicates.ANY_SHA_INSTRUCTION_AVAILABLE))); - - Asserts.assertEQ(optionName, SHAOptionsBase.USE_SHA_OPTION, - "Test case should be used for " + SHAOptionsBase.USE_SHA_OPTION - + " option only."); - } - - @Override - protected void verifyWarnings() throws Throwable { - // Verify that attempt to use UseSHA option will cause a warning. - String shouldPassMessage = String.format("JVM startup should pass with" - + " '%s' option on unsupported SparcCPU, but there should be" - + "the message shown.", optionName); - CommandLineOptionTest.verifySameJVMStartup(new String[] { - SHAOptionsBase.getWarningForUnsupportedCPU(optionName) - }, null, shouldPassMessage, shouldPassMessage, ExitCode.OK, - CommandLineOptionTest.prepareBooleanFlag(optionName, true)); - } - - @Override - protected void verifyOptionValues() throws Throwable { - // Verify that UseSHA option remains disabled even if all - // UseSHA*Intrinsics were enabled. - CommandLineOptionTest.verifyOptionValueForSameVM( - SHAOptionsBase.USE_SHA_OPTION, "false", String.format( - "%s option should be disabled on unsupported SparcCPU" - + " even if all UseSHA*Intrinsics options were enabled.", - SHAOptionsBase.USE_SHA_OPTION), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, true), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, true), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, true)); - - // Verify that UseSHA option remains disabled even if all - // UseSHA*Intrinsics options were enabled and UseSHA was enabled as well. - CommandLineOptionTest.verifyOptionValueForSameVM( - SHAOptionsBase.USE_SHA_OPTION, "false", String.format( - "%s option should be disabled on unsupported SparcCPU" - + " even if all UseSHA*Intrinsics options were enabled" - + " and %s was enabled as well", - SHAOptionsBase.USE_SHA_OPTION, - SHAOptionsBase.USE_SHA_OPTION), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA_OPTION, true), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, true), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, true), - CommandLineOptionTest.prepareBooleanFlag( - SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, true)); - } -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/jsr292/PollutedTrapCounts.java Thu Jul 02 17:50:25 2015 -0700 @@ -0,0 +1,109 @@ +/* + * 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 8074551 + * @library /testlibrary + * @run main PollutedTrapCounts + */ +import java.lang.invoke.*; +import jdk.test.lib.*; + +public class PollutedTrapCounts { + public static void main(String[] args) throws Exception { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + "-XX:+IgnoreUnrecognizedVMOptions", + "-XX:-TieredCompilation", "-Xbatch", + "-XX:PerBytecodeRecompilationCutoff=10", "-XX:PerMethodRecompilationCutoff=10", + "-XX:+PrintCompilation", "-XX:+UnlockDiagnosticVMOptions", "-XX:+PrintInlining", + "PollutedTrapCounts$Test"); + + OutputAnalyzer analyzer = new OutputAnalyzer(pb.start()); + + analyzer.shouldHaveExitValue(0); + + analyzer.shouldNotContain("not compilable (disabled)"); + } + + static class Test { + public static final MethodHandle test1; + public static final MethodHandle test2; + public static final MethodHandle empty; + + static { + try { + Class<?> THIS_CLASS = Test.class; + MethodHandles.Lookup LOOKUP = MethodHandles.lookup(); + test1 = LOOKUP.findStatic(THIS_CLASS, "test1", MethodType.methodType(boolean.class, boolean.class)); + test2 = LOOKUP.findStatic(THIS_CLASS, "test2", MethodType.methodType(boolean.class, boolean.class)); + empty = LOOKUP.findStatic(THIS_CLASS, "empty", MethodType.methodType(void.class, boolean.class)); + } catch(Throwable e) { + throw new Error(e); + } + } + + static boolean test1(boolean b) { + return b; + } + static boolean test2(boolean b) { + return true; + } + static void empty(boolean b) {} + + static void test(boolean freqValue, boolean removeInlineBlocker) throws Throwable { + MethodHandle innerGWT = MethodHandles.guardWithTest(test1, empty, empty); + MethodHandle outerGWT = MethodHandles.guardWithTest(test2, innerGWT, innerGWT); + + // Trigger compilation + for (int i = 0; i < 20_000; i++) { + outerGWT.invokeExact(freqValue); + } + + // Trigger deopt & nmethod invalidation + outerGWT.invokeExact(!freqValue); + + // Force inline blocker removal on rare-taken path + if (removeInlineBlocker) { + for (int i = 0; i < 100; i++) { + outerGWT.invokeExact(!freqValue); + } + } + + // Trigger recompilation + for (int i = 0; i < 20_000; i++) { + outerGWT.invokeExact(freqValue); + } + } + + public static void main(String[] args) throws Throwable { + boolean freqValue = true; + boolean removeInlineBlocker = false; + for (int i = 0; i < 20; i++) { + test(freqValue, removeInlineBlocker); + freqValue = !freqValue; + removeInlineBlocker = !removeInlineBlocker; + } + } + } +}
--- a/hotspot/test/compiler/testlibrary/sha/predicate/IntrinsicPredicates.java Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/test/compiler/testlibrary/sha/predicate/IntrinsicPredicates.java Thu Jul 02 17:50:25 2015 -0700 @@ -59,16 +59,19 @@ }; public static final BooleanSupplier SHA1_INSTRUCTION_AVAILABLE - = new CPUSpecificPredicate("sparc.*", new String[] { "sha1" }, - null); + = new OrPredicate( + new CPUSpecificPredicate("sparc.*", new String[] { "sha1" },null), + new CPUSpecificPredicate("aarch64.*", new String[] { "sha1" },null)); public static final BooleanSupplier SHA256_INSTRUCTION_AVAILABLE - = new CPUSpecificPredicate("sparc.*", new String[] { "sha256" }, - null); + = new OrPredicate( + new CPUSpecificPredicate("sparc.*", new String[] { "sha256" },null), + new CPUSpecificPredicate("aarch64.*", new String[] { "sha256" },null)); public static final BooleanSupplier SHA512_INSTRUCTION_AVAILABLE - = new CPUSpecificPredicate("sparc.*", new String[] { "sha512" }, - null); + = new OrPredicate( + new CPUSpecificPredicate("sparc.*", new String[] { "sha512" },null), + new CPUSpecificPredicate("aarch64.*", new String[] { "sha512" },null)); public static final BooleanSupplier ANY_SHA_INSTRUCTION_AVAILABLE = new OrPredicate(IntrinsicPredicates.SHA1_INSTRUCTION_AVAILABLE,
--- a/hotspot/test/testlibrary_tests/RandomGeneratorTest.java Thu Jul 02 17:15:55 2015 -0700 +++ b/hotspot/test/testlibrary_tests/RandomGeneratorTest.java Thu Jul 02 17:50:25 2015 -0700 @@ -32,11 +32,15 @@ * @run driver RandomGeneratorTest DIFFERENT_SEED */ -import jdk.test.lib.ProcessTools; -import jdk.test.lib.Utils; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Random; +import jdk.test.lib.OutputAnalyzer; +import jdk.test.lib.ProcessTools; +import jdk.test.lib.Utils; /** * The test verifies correctness of work {@link jdk.test.lib.Utils#getRandomInstance()}. @@ -59,8 +63,13 @@ jvmArgs.add(optStr); } jvmArgs.add(RandomRunner.class.getName()); + String origFileName = seedOpt.name() + "_orig"; + jvmArgs.add(origFileName); + int fileNameIndex = jvmArgs.size() - 1; String[] cmdLineArgs = jvmArgs.toArray(new String[jvmArgs.size()]); - String etalon = ProcessTools.executeTestJvm(cmdLineArgs).getStdout().trim(); + ProcessTools.executeTestJvm(cmdLineArgs).shouldHaveExitValue(0); + String etalon = Utils.fileAsString(origFileName).trim(); + cmdLineArgs[fileNameIndex] = seedOpt.name(); seedOpt.verify(etalon, cmdLineArgs); } @@ -121,26 +130,31 @@ * @throws Throwable - Throws an exception in case test failure. */ public void verify(String orig, String[] cmdLine) { - String lastLineOrig = getLastLine(orig); - String lastLine; + String output; + OutputAnalyzer oa; try { - lastLine = getLastLine(ProcessTools.executeTestJvm(cmdLine).getStdout().trim()); + oa = ProcessTools.executeTestJvm(cmdLine); } catch (Throwable t) { throw new Error("TESTBUG: Unexpedted exception during jvm execution.", t); } - if (!isOutputExpected(lastLineOrig, lastLine)) { - throw new AssertionError("Unexpected random number sequence for mode: " + this.name()); + oa.shouldHaveExitValue(0); + try { + output = Utils.fileAsString(name()).trim(); + } catch (IOException ioe) { + throw new Error("TESTBUG: Problem during IO operation with file: " + name(), ioe); } - } - - private static String getLastLine(String output) { - return output.substring(output.lastIndexOf(Utils.NEW_LINE)).trim(); + if (!isOutputExpected(orig, output)) { + System.err.println("Initial output: " + orig); + System.err.println("Second run output: " + output); + throw new AssertionError("Unexpected random number sequence for mode: " + this.name()); + } } } /** * The helper class generates several random numbers - * and prints them out. + * and put results to a file. The file name came as first + * command line argument. */ public static class RandomRunner { private static final int COUNT = 10; @@ -150,7 +164,11 @@ for (int i = 0; i < COUNT; i++) { sb.append(rng.nextLong()).append(' '); } - System.out.println(sb.toString()); + try (PrintWriter pw = new PrintWriter(new FileWriter(args[0]))) { + pw.write(sb.toString()); + } catch (IOException ioe) { + throw new Error("TESTBUG: Problem during IO operation with file: " + args[0], ioe); + } } } }
--- a/jaxp/.hgtags Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/.hgtags Thu Jul 02 17:50:25 2015 -0700 @@ -312,3 +312,4 @@ 78c2685daabafae827c686ca2d1bb2e451faed2b jdk9-b67 82aae947938ec9b0119fdd78a616d0b7263072ee jdk9-b68 f844a908d3308f47d73cf64e87c98d37d5d76ce8 jdk9-b69 +42180703e0a362c1de7cdbf61d2cbc6609e678c4 jdk9-b70
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/SecuritySupport.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/SecuritySupport.java Thu Jul 02 17:50:25 2015 -0700 @@ -24,7 +24,6 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FilenameFilter; -import java.io.InputStream; import java.lang.ClassLoader; import java.security.AccessController; import java.security.PrivilegedAction; @@ -116,33 +115,6 @@ } /** - * Return resource using the same classloader for the ObjectFactory by - * default or bootclassloader when Security Manager is in place - */ - public static InputStream getResourceAsStream(final String name) { - if (System.getSecurityManager() != null) { - return getResourceAsStream(null, name); - } else { - return getResourceAsStream(findClassLoader(), name); - } - } - - public static InputStream getResourceAsStream(final ClassLoader cl, - final String name) { - return (InputStream) AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - InputStream ris; - if (cl == null) { - ris = Object.class.getResourceAsStream("/" + name); - } else { - ris = cl.getResourceAsStream(name); - } - return ris; - } - }); - } - - /** * Gets a resource bundle using the specified base name, the default locale, * and the caller's class loader. *
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/utils/SecuritySupport.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/utils/SecuritySupport.java Thu Jul 02 17:50:25 2015 -0700 @@ -128,29 +128,10 @@ } } - /** - * Return resource using the same classloader for the ObjectFactory by - * default or bootclassloader when Security Manager is in place - */ public static InputStream getResourceAsStream(final String name) { - if (System.getSecurityManager()!=null) { - return getResourceAsStream(null, name); - } else { - return getResourceAsStream(ObjectFactory.findClassLoader(), name); - } - } - - public static InputStream getResourceAsStream(final ClassLoader cl, - final String name) { return (InputStream) AccessController.doPrivileged(new PrivilegedAction() { public Object run() { - InputStream ris; - if (cl == null) { - ris = Object.class.getResourceAsStream("/"+name); - } else { - ris = cl.getResourceAsStream(name); - } - return ris; + return SecuritySupport.class.getResourceAsStream("/"+name); } }); }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDOMImplementationImpl.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDOMImplementationImpl.java Thu Jul 02 17:50:25 2015 -0700 @@ -343,10 +343,7 @@ */ public LSSerializer createLSSerializer() { try { - Class serializerClass = ObjectFactory.findProviderClass( - "com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl", - ObjectFactory.findClassLoader(), true); - return (LSSerializer) serializerClass.newInstance(); + return new com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl(); } catch (Exception e) {} // Fall back to Xerces' deprecated serializer if
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/SecuritySupport.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/SecuritySupport.java Thu Jul 02 17:50:25 2015 -0700 @@ -118,34 +118,6 @@ throw (FileNotFoundException)e.getException(); } } - /** - * Return resource using the same classloader for the ObjectFactory by default - * or bootclassloader when Security Manager is in place - */ - public static InputStream getResourceAsStream(final String name) { - if (System.getSecurityManager()!=null) { - return getResourceAsStream(null, name); - } else { - return getResourceAsStream(ObjectFactory.findClassLoader(), name); - } - } - - public static InputStream getResourceAsStream(final ClassLoader cl, - final String name) - { - return (InputStream) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - InputStream ris; - if (cl == null) { - ris = Object.class.getResourceAsStream("/"+name); - } else { - ris = cl.getResourceAsStream(name); - } - return ris; - } - }); - } /** * Gets a resource bundle using the specified base name, the default locale, and the caller's class loader.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xinclude/SecuritySupport.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xinclude/SecuritySupport.java Thu Jul 02 17:50:25 2015 -0700 @@ -23,7 +23,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.InputStream; import java.security.AccessController; import java.security.PrivilegedAction; @@ -113,23 +112,6 @@ } } - InputStream getResourceAsStream(final ClassLoader cl, - final String name) - { - return (InputStream) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - InputStream ris; - if (cl == null) { - ris = ClassLoader.getSystemResourceAsStream(name); - } else { - ris = cl.getResourceAsStream(name); - } - return ris; - } - }); - } - boolean getFileExists(final File f) { return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() {
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SecuritySupport.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SecuritySupport.java Thu Jul 02 17:50:25 2015 -0700 @@ -23,7 +23,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.InputStream; import java.security.AccessController; import java.security.PrivilegedAction; @@ -113,23 +112,6 @@ } } - InputStream getResourceAsStream(final ClassLoader cl, - final String name) - { - return (InputStream) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - InputStream ris; - if (cl == null) { - ris = ClassLoader.getSystemResourceAsStream(name); - } else { - ris = cl.getResourceAsStream(name); - } - return ris; - } - }); - } - boolean getFileExists(final File f) { return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() {
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/dom3/LSSerializerImpl.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/dom3/LSSerializerImpl.java Thu Jul 02 17:50:25 2015 -0700 @@ -36,6 +36,7 @@ import com.sun.org.apache.xml.internal.serializer.DOM3Serializer; import com.sun.org.apache.xml.internal.serializer.Encodings; import com.sun.org.apache.xml.internal.serializer.Serializer; +import com.sun.org.apache.xml.internal.serializer.ToXMLStream; import com.sun.org.apache.xml.internal.serializer.OutputPropertiesFactory; import com.sun.org.apache.xml.internal.serializer.SerializerFactory; import com.sun.org.apache.xml.internal.serializer.utils.MsgKey; @@ -218,7 +219,8 @@ // Get a serializer that seriailizes according to the properties, // which in this case is to xml - fXMLSerializer = SerializerFactory.getSerializer(configProps); + fXMLSerializer = new ToXMLStream(); + fXMLSerializer.setOutputFormat(configProps); // Initialize Serializer fXMLSerializer.setOutputFormat(fDOMConfigProperties); @@ -262,9 +264,6 @@ // entities fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_DEFAULT_TRUE); - // preserve entities - fDOMConfigProperties.setProperty( - OutputPropertiesFactory.S_KEY_ENTITIES, DOMConstants.S_XSL_VALUE_ENTITIES); // error-handler // Should we set our default ErrorHandler @@ -290,9 +289,6 @@ + DOMConstants.DOM_WELLFORMED, DOMConstants.DOM3_DEFAULT_TRUE); fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_DEFAULT_FALSE); - // preserve entities - fDOMConfigProperties.setProperty( - OutputPropertiesFactory.S_KEY_ENTITIES, ""); fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + DOMConstants.DOM_CDATA_SECTIONS, DOMConstants.DOM3_DEFAULT_FALSE); @@ -531,8 +527,6 @@ if (state) { fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_EXPLICIT_TRUE); - fDOMConfigProperties.setProperty( - OutputPropertiesFactory.S_KEY_ENTITIES, DOMConstants.S_XSL_VALUE_ENTITIES); } else { fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_EXPLICIT_FALSE); @@ -679,31 +673,29 @@ fFeatures |= WELLFORMED; fFeatures |= ELEM_CONTENT_WHITESPACE; fFeatures |= COMMENTS; + + // infoset + fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + + DOMConstants.DOM_NAMESPACES, DOMConstants.DOM3_EXPLICIT_TRUE); + fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + + DOMConstants.DOM_NAMESPACE_DECLARATIONS, DOMConstants.DOM3_EXPLICIT_TRUE); + fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + + DOMConstants.DOM_COMMENTS, DOMConstants.DOM3_EXPLICIT_TRUE); + fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + + DOMConstants.DOM_ELEMENT_CONTENT_WHITESPACE, DOMConstants.DOM3_EXPLICIT_TRUE); + fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + + DOMConstants.DOM_WELLFORMED, DOMConstants.DOM3_EXPLICIT_TRUE); + + fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_EXPLICIT_FALSE); + + fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + + DOMConstants.DOM_CDATA_SECTIONS, DOMConstants.DOM3_EXPLICIT_FALSE); + fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + + DOMConstants.DOM_VALIDATE_IF_SCHEMA, DOMConstants.DOM3_EXPLICIT_FALSE); + fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS + + DOMConstants.DOM_DATATYPE_NORMALIZATION, DOMConstants.DOM3_EXPLICIT_FALSE); } - - // infoset - fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS - + DOMConstants.DOM_NAMESPACES, DOMConstants.DOM3_EXPLICIT_TRUE); - fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS - + DOMConstants.DOM_NAMESPACE_DECLARATIONS, DOMConstants.DOM3_EXPLICIT_TRUE); - fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS - + DOMConstants.DOM_COMMENTS, DOMConstants.DOM3_EXPLICIT_TRUE); - fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS - + DOMConstants.DOM_ELEMENT_CONTENT_WHITESPACE, DOMConstants.DOM3_EXPLICIT_TRUE); - fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS - + DOMConstants.DOM_WELLFORMED, DOMConstants.DOM3_EXPLICIT_TRUE); - - fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS - + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_EXPLICIT_FALSE); - fDOMConfigProperties.setProperty( - OutputPropertiesFactory.S_KEY_ENTITIES, ""); - - fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS - + DOMConstants.DOM_CDATA_SECTIONS, DOMConstants.DOM3_EXPLICIT_FALSE); - fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS - + DOMConstants.DOM_VALIDATE_IF_SCHEMA, DOMConstants.DOM3_EXPLICIT_FALSE); - fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS - + DOMConstants.DOM_DATATYPE_NORMALIZATION, DOMConstants.DOM3_EXPLICIT_FALSE); } else if (name.equalsIgnoreCase(DOMConstants.DOM_NORMALIZE_CHARACTERS)) { String msg = Utils.messages.createMessage( MsgKey.ER_FEATURE_NOT_SUPPORTED,
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/functions/FuncSystemProperty.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/functions/FuncSystemProperty.java Thu Jul 02 17:50:25 2015 -0700 @@ -27,11 +27,9 @@ import java.util.Properties; import com.sun.org.apache.xpath.internal.XPathContext; -import com.sun.org.apache.xpath.internal.objects.XNumber; import com.sun.org.apache.xpath.internal.objects.XObject; import com.sun.org.apache.xpath.internal.objects.XString; import com.sun.org.apache.xpath.internal.res.XPATHErrorResources; -import com.sun.org.apache.xalan.internal.utils.ObjectFactory; import com.sun.org.apache.xalan.internal.utils.SecuritySupport; /** @@ -69,7 +67,7 @@ // property argument is to be looked for. Properties xsltInfo = new Properties(); - loadPropertyFile(XSLT_PROPERTIES, xsltInfo); + loadPropertyFile(xsltInfo); if (indexOfNSSep > 0) { @@ -159,25 +157,21 @@ } /** - * Retrieve a propery bundle from a specified file + * Retrieve a property bundle from XSLT_PROPERTIES * - * @param file The string name of the property file. The name - * should already be fully qualified as path/filename * @param target The target property bag the file will be placed into. */ - public void loadPropertyFile(String file, Properties target) + private void loadPropertyFile(Properties target) { try { - // Use SecuritySupport class to provide priveleged access to property file - InputStream is = SecuritySupport.getResourceAsStream(ObjectFactory.findClassLoader(), - file); + // Use SecuritySupport class to provide privileged access to property file + InputStream is = SecuritySupport.getResourceAsStream(XSLT_PROPERTIES); // get a buffered version - BufferedInputStream bis = new BufferedInputStream(is); - - target.load(bis); // and load up the property bag from this - bis.close(); // close out after reading + try (BufferedInputStream bis = new BufferedInputStream(is)) { + target.load(bis); // and load up the property bag from this + } } catch (Exception ex) {
--- a/jaxp/src/java.xml/share/classes/javax/xml/datatype/SecuritySupport.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/javax/xml/datatype/SecuritySupport.java Thu Jul 02 17:50:25 2015 -0700 @@ -26,9 +26,7 @@ package javax.xml.datatype; import java.security.*; -import java.net.*; import java.io.*; -import java.util.*; /** * This class is duplicated for each JAXP subpackage so keep it in sync. @@ -77,23 +75,6 @@ } } - InputStream getResourceAsStream(final ClassLoader cl, - final String name) - { - return (InputStream) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - InputStream ris; - if (cl == null) { - ris = Object.class.getResourceAsStream(name); - } else { - ris = cl.getResourceAsStream(name); - } - return ris; - } - }); - } - boolean doesFileExist(final File f) { return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() {
--- a/jaxp/src/java.xml/share/classes/javax/xml/parsers/SecuritySupport.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/javax/xml/parsers/SecuritySupport.java Thu Jul 02 17:50:25 2015 -0700 @@ -26,9 +26,7 @@ package javax.xml.parsers; import java.security.*; -import java.net.*; import java.io.*; -import java.util.*; /** * This class is duplicated for each JAXP subpackage so keep it in sync. @@ -81,23 +79,6 @@ } } - InputStream getResourceAsStream(final ClassLoader cl, - final String name) - { - return (InputStream) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - InputStream ris; - if (cl == null) { - ris = Object.class.getResourceAsStream(name); - } else { - ris = cl.getResourceAsStream(name); - } - return ris; - } - }); - } - boolean doesFileExist(final File f) { return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() {
--- a/jaxp/src/java.xml/share/classes/javax/xml/stream/SecuritySupport.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/SecuritySupport.java Thu Jul 02 17:50:25 2015 -0700 @@ -26,9 +26,7 @@ package javax.xml.stream; import java.security.*; -import java.net.*; import java.io.*; -import java.util.*; /** * This class is duplicated for each JAXP subpackage so keep it in sync. @@ -81,23 +79,6 @@ } } - InputStream getResourceAsStream(final ClassLoader cl, - final String name) - { - return (InputStream) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - InputStream ris; - if (cl == null) { - ris = Object.class.getResourceAsStream(name); - } else { - ris = cl.getResourceAsStream(name); - } - return ris; - } - }); - } - boolean doesFileExist(final File f) { return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() {
--- a/jaxp/src/java.xml/share/classes/javax/xml/transform/SecuritySupport.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/javax/xml/transform/SecuritySupport.java Thu Jul 02 17:50:25 2015 -0700 @@ -26,9 +26,7 @@ package javax.xml.transform; import java.security.*; -import java.net.*; import java.io.*; -import java.util.*; /** * This class is duplicated for each JAXP subpackage so keep it in sync. @@ -79,23 +77,6 @@ } } - InputStream getResourceAsStream(final ClassLoader cl, - final String name) - { - return (InputStream) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - InputStream ris; - if (cl == null) { - ris = Object.class.getResourceAsStream(name); - } else { - ris = cl.getResourceAsStream(name); - } - return ris; - } - }); - } - boolean doesFileExist(final File f) { return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() {
--- a/jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactoryFinder.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactoryFinder.java Thu Jul 02 17:50:25 2015 -0700 @@ -418,30 +418,8 @@ private static final Class<SchemaFactory> SERVICE_CLASS = SchemaFactory.class; + // Used for debugging purposes private static String which( Class<?> clazz ) { - return which( clazz.getName(), clazz.getClassLoader() ); - } - - /** - * <p>Search the specified classloader for the given classname.</p> - * - * @param classname the fully qualified name of the class to search for - * @param loader the classloader to search - * - * @return the source location of the resource, or null if it wasn't found - */ - private static String which(String classname, ClassLoader loader) { - - String classnameAsResource = classname.replace('.', '/') + ".class"; - - if( loader==null ) loader = ClassLoader.getSystemClassLoader(); - - //URL it = loader.getResource(classnameAsResource); - URL it = ss.getResourceAsURL(loader, classnameAsResource); - if (it != null) { - return it.toString(); - } else { - return null; - } + return ss.getClassSource(clazz); } }
--- a/jaxp/src/java.xml/share/classes/javax/xml/validation/SecuritySupport.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/javax/xml/validation/SecuritySupport.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, 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 @@ -25,12 +25,9 @@ package javax.xml.validation; -import java.io.IOException; import java.net.URL; import java.security.*; -import java.net.*; import java.io.*; -import java.util.*; /** * This class is duplicated for each JAXP subpackage so keep it in sync. @@ -43,9 +40,10 @@ ClassLoader getContextClassLoader() { - return (ClassLoader) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { + return + AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() { + @Override + public ClassLoader run() { ClassLoader cl = null; //try { cl = Thread.currentThread().getContextClassLoader(); @@ -58,9 +56,9 @@ } String getSystemProperty(final String propName) { - return (String) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { + return AccessController.doPrivileged(new PrivilegedAction<String>() { + @Override + public String run() { return System.getProperty(propName); } }); @@ -70,9 +68,10 @@ throws FileNotFoundException { try { - return (FileInputStream) - AccessController.doPrivileged(new PrivilegedExceptionAction() { - public Object run() throws FileNotFoundException { + return AccessController.doPrivileged( + new PrivilegedExceptionAction<FileInputStream>() { + @Override + public FileInputStream run() throws FileNotFoundException { return new FileInputStream(file); } }); @@ -81,83 +80,29 @@ } } - InputStream getURLInputStream(final URL url) - throws IOException - { - try { - return (InputStream) - AccessController.doPrivileged(new PrivilegedExceptionAction() { - public Object run() throws IOException { - return url.openStream(); - } - }); - } catch (PrivilegedActionException e) { - throw (IOException)e.getException(); - } - } - - URL getResourceAsURL(final ClassLoader cl, - final String name) - { - return (URL) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - URL url; - if (cl == null) { - url = Object.class.getResource(name); - } else { - url = cl.getResource(name); - } - return url; + // Used for debugging purposes + String getClassSource(Class<?> cls) { + return AccessController.doPrivileged(new PrivilegedAction<String>() { + @Override + public String run() { + CodeSource cs = cls.getProtectionDomain().getCodeSource(); + if (cs != null) { + URL loc = cs.getLocation(); + return loc != null ? loc.toString() : "(no location)"; + } else { + return "(no code source)"; } - }); - } - - Enumeration getResources(final ClassLoader cl, - final String name) throws IOException - { - try{ - return (Enumeration) - AccessController.doPrivileged(new PrivilegedExceptionAction() { - public Object run() throws IOException{ - Enumeration enumeration; - if (cl == null) { - enumeration = ClassLoader.getSystemResources(name); - } else { - enumeration = cl.getResources(name); - } - return enumeration; - } - }); - }catch(PrivilegedActionException e){ - throw (IOException)e.getException(); - } - } - - InputStream getResourceAsStream(final ClassLoader cl, - final String name) - { - return (InputStream) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - InputStream ris; - if (cl == null) { - ris = Object.class.getResourceAsStream(name); - } else { - ris = cl.getResourceAsStream(name); - } - return ris; - } - }); + } + }); } boolean doesFileExist(final File f) { - return ((Boolean) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - return new Boolean(f.exists()); - } - })).booleanValue(); + return AccessController.doPrivileged(new PrivilegedAction<Boolean>() { + @Override + public Boolean run() { + return f.exists(); + } + }); } }
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/SecuritySupport.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/SecuritySupport.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 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 @@ -27,9 +27,7 @@ import java.net.URL; import java.security.*; -import java.net.*; import java.io.*; -import java.util.*; /** * This class is duplicated for each JAXP subpackage so keep it in sync. @@ -42,9 +40,9 @@ ClassLoader getContextClassLoader() { - return (ClassLoader) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { + return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() { + @Override + public ClassLoader run() { ClassLoader cl = null; try { cl = Thread.currentThread().getContextClassLoader(); @@ -55,21 +53,22 @@ } String getSystemProperty(final String propName) { - return (String) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - return System.getProperty(propName); - } - }); + return AccessController.doPrivileged(new PrivilegedAction<String>() { + @Override + public String run() { + return System.getProperty(propName); + } + }); } FileInputStream getFileInputStream(final File file) throws FileNotFoundException { try { - return (FileInputStream) - AccessController.doPrivileged(new PrivilegedExceptionAction() { - public Object run() throws FileNotFoundException { + return AccessController.doPrivileged( + new PrivilegedExceptionAction<FileInputStream>() { + @Override + public FileInputStream run() throws FileNotFoundException { return new FileInputStream(file); } }); @@ -78,83 +77,29 @@ } } - InputStream getURLInputStream(final URL url) - throws IOException - { - try { - return (InputStream) - AccessController.doPrivileged(new PrivilegedExceptionAction() { - public Object run() throws IOException { - return url.openStream(); - } - }); - } catch (PrivilegedActionException e) { - throw (IOException)e.getException(); - } - } - - URL getResourceAsURL(final ClassLoader cl, - final String name) - { - return (URL) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - URL url; - if (cl == null) { - url = Object.class.getResource(name); - } else { - url = cl.getResource(name); - } - return url; + // Used for debugging purposes + String getClassSource(Class<?> cls) { + return AccessController.doPrivileged(new PrivilegedAction<String>() { + @Override + public String run() { + CodeSource cs = cls.getProtectionDomain().getCodeSource(); + if (cs != null) { + URL loc = cs.getLocation(); + return loc != null ? loc.toString() : "(no location)"; + } else { + return "(no code source)"; } - }); - } - - Enumeration getResources(final ClassLoader cl, - final String name) throws IOException - { - try{ - return (Enumeration) - AccessController.doPrivileged(new PrivilegedExceptionAction() { - public Object run() throws IOException{ - Enumeration enumeration; - if (cl == null) { - enumeration = ClassLoader.getSystemResources(name); - } else { - enumeration = cl.getResources(name); - } - return enumeration; - } - }); - }catch(PrivilegedActionException e){ - throw (IOException)e.getException(); - } - } - - InputStream getResourceAsStream(final ClassLoader cl, - final String name) - { - return (InputStream) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - InputStream ris; - if (cl == null) { - ris = Object.class.getResourceAsStream(name); - } else { - ris = cl.getResourceAsStream(name); - } - return ris; - } - }); + } + }); } boolean doesFileExist(final File f) { - return ((Boolean) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - return new Boolean(f.exists()); - } - })).booleanValue(); + return AccessController.doPrivileged(new PrivilegedAction<Boolean>() { + @Override + public Boolean run() { + return f.exists(); + } + }); } }
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathFactoryFinder.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathFactoryFinder.java Thu Jul 02 17:50:25 2015 -0700 @@ -414,30 +414,9 @@ private static final Class<XPathFactory> SERVICE_CLASS = XPathFactory.class; - private static String which( Class clazz ) { - return which( clazz.getName(), clazz.getClassLoader() ); + // Used for debugging purposes + private static String which( Class<?> clazz ) { + return ss.getClassSource(clazz); } - /** - * <p>Search the specified classloader for the given classname.</p> - * - * @param classname the fully qualified name of the class to search for - * @param loader the classloader to search - * - * @return the source location of the resource, or null if it wasn't found - */ - private static String which(String classname, ClassLoader loader) { - - String classnameAsResource = classname.replace('.', '/') + ".class"; - - if( loader==null ) loader = ClassLoader.getSystemClassLoader(); - - //URL it = loader.getResource(classnameAsResource); - URL it = ss.getResourceAsURL(loader, classnameAsResource); - if (it != null) { - return it.toString(); - } else { - return null; - } - } }
--- a/jaxp/src/java.xml/share/classes/org/xml/sax/helpers/SecuritySupport.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/src/java.xml/share/classes/org/xml/sax/helpers/SecuritySupport.java Thu Jul 02 17:50:25 2015 -0700 @@ -87,7 +87,7 @@ public Object run() { InputStream ris; if (cl == null) { - ris = Object.class.getResourceAsStream(name); + ris = SecuritySupport.class.getResourceAsStream(name); } else { ris = cl.getResourceAsStream(name); }
--- a/jaxp/test/TEST.groups Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/test/TEST.groups Thu Jul 02 17:50:25 2015 -0700 @@ -29,5 +29,8 @@ tier2 = \ :jaxp_all +# No tier 3 tests. +tier3 = + jaxp_all = \ javax/xml/jaxp
--- a/jaxp/test/javax/xml/jaxp/unittest/org/w3c/dom/ls/LSSerializerTest.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxp/test/javax/xml/jaxp/unittest/org/w3c/dom/ls/LSSerializerTest.java Thu Jul 02 17:50:25 2015 -0700 @@ -101,7 +101,6 @@ /* * @bug 8080906 - * It will fail in a Jigsaw build until JDK-8080266 is fixed. */ @Test public void testDefaultLSSerializer() throws Exception { @@ -134,6 +133,9 @@ DOMImplementation impl = doc.getImplementation(); DOMImplementationLS implLS = (DOMImplementationLS) impl.getFeature("LS", "3.0"); LSSerializer writer = implLS.createLSSerializer(); + + System.out.println("Serializer is: " + implLS.getClass().getName() + " " + implLS); + DOMErrorHandlerImpl eh = new DOMErrorHandlerImpl(); writer.getDomConfig().setParameter("error-handler", eh); @@ -200,6 +202,8 @@ DOMImplementationLS domImplementationLS = (DOMImplementationLS) domImplementation; LSSerializer lsSerializer = domImplementationLS.createLSSerializer(); + System.out.println("Serializer is: " + lsSerializer.getClass().getName() + " " + lsSerializer); + // get configuration DOMConfiguration domConfiguration = lsSerializer.getDomConfig(); @@ -294,6 +298,8 @@ DOMImplementationLS domImplementationLS = (DOMImplementationLS) domImplementation; LSSerializer lsSerializer = domImplementationLS.createLSSerializer(); + System.out.println("Serializer is: " + lsSerializer.getClass().getName() + " " + lsSerializer); + // get default serialization String defaultSerialization = lsSerializer.writeToString(document);
--- a/jaxws/.hgtags Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxws/.hgtags Thu Jul 02 17:50:25 2015 -0700 @@ -315,3 +315,4 @@ c9785bc8ade98a16a050d7520b70c68363857e00 jdk9-b67 b5878b03d1b2e105917d959fbfa3c57c22495803 jdk9-b68 f5911c6155c29ac24b6f9068273207e5ebd3a3df jdk9-b69 +94084caa27a3c8a09a7510aef596ebd64e97c569 jdk9-b70
--- a/jaxws/src/java.xml.ws/share/classes/javax/xml/ws/wsaddressing/package-info.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jaxws/src/java.xml.ws/share/classes/javax/xml/ws/wsaddressing/package-info.java Thu Jul 02 17:50:25 2015 -0700 @@ -23,6 +23,9 @@ * questions. */ +/** + * This package defines APIs related to WS-Addressing. + */ @javax.xml.bind.annotation.XmlSchema(namespace=W3CEndpointReference.NS, location="http://www.w3.org/2006/03/addressing/ws-addr.xsd") package javax.xml.ws.wsaddressing;
--- a/jaxws/src/java.xml.ws/share/classes/javax/xml/ws/wsaddressing/package.html Thu Jul 02 17:15:55 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -<!-- - Copyright (c) 2005, 2012, 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. ---> - -<html> -<body> -This package defines APIs related to WS-Addressing. -</body> -</html>
--- a/jdk/.hgtags Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/.hgtags Thu Jul 02 17:50:25 2015 -0700 @@ -312,3 +312,4 @@ 1abd45df5480a04bff98fba1851d66a5230e67d4 jdk9-b67 046fd17bb9a0cdf6681124866df9626d17b0516a jdk9-b68 551323004d0ce2f1d4b0e99552f7e0cdcebc6fca jdk9-b69 +a7f731125b7fb0e4b0186172f85a21e2d5139f7e jdk9-b70
--- a/jdk/make/CopySamples.gmk Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/make/CopySamples.gmk Thu Jul 02 17:50:25 2015 -0700 @@ -28,7 +28,7 @@ include $(SPEC) include MakeBase.gmk -SAMPLE_TARGET_DIR := $(SUPPORT_OUTPUTDIR)/sample +SAMPLE_TARGET_DIR := $(SUPPORT_OUTPUTDIR)/sample/image SAMPLE_SOURCE_DIR := $(JDK_TOPDIR)/src/sample/share SAMPLE_CLOSED_SOURCE_DIR := $(JDK_TOPDIR)/src/closed/sample/share SAMPLE_SOLARIS_SOURCE_DIR := $(JDK_TOPDIR)/src/sample/solaris
--- a/jdk/make/copy/Copy-jdk.accessibility.gmk Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/make/copy/Copy-jdk.accessibility.gmk Thu Jul 02 17:50:25 2015 -0700 @@ -31,17 +31,12 @@ TARGETS += $(INCLUDE_DST_OS_DIR)/bridge/AccessBridgeCallbacks.h \ $(INCLUDE_DST_OS_DIR)/bridge/AccessBridgeCalls.h \ $(INCLUDE_DST_OS_DIR)/bridge/AccessBridgePackages.h \ - $(INCLUDE_DST_OS_DIR)/bridge/AccessBridgeCalls.c \ - $(CONF_DST_DIR)/accessibility.properties + $(INCLUDE_DST_OS_DIR)/bridge/AccessBridgeCalls.c $(INCLUDE_DST_OS_DIR)/bridge/%: \ $(JDK_TOPDIR)/src/jdk.accessibility/windows/native/include/bridge/% $(install-file) - $(CONF_DST_DIR)/accessibility.properties: \ - $(JDK_TOPDIR)/src/jdk.accessibility/windows/conf/accessibility.properties - $(install-file) - endif ################################################################################
--- a/jdk/make/data/tzdata/VERSION Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/make/data/tzdata/VERSION Thu Jul 02 17:50:25 2015 -0700 @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2015d +tzdata2015e
--- a/jdk/make/data/tzdata/africa Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/make/data/tzdata/africa Thu Jul 02 17:50:25 2015 -0700 @@ -361,9 +361,10 @@ # time this summer, and carry out studies on the possibility of canceling the # practice altogether in future years." # -# From Paul Eggert (2015-04-20): -# For now, assume DST will be canceled. Any resumption would likely -# use different rules anyway. +# From Paul Eggert (2015-04-24): +# Yesterday the office of Egyptian President El-Sisi announced his +# decision to abandon DST permanently. See Ahram Online 2015-04-24. +# http://english.ahram.org.eg/NewsContent/1/64/128509/Egypt/Politics-/Sisi-cancels-daylight-saving-time-in-Egypt.aspx Rule Egypt 2008 only - Aug lastThu 24:00 0 - Rule Egypt 2009 only - Aug 20 24:00 0 - @@ -810,20 +811,41 @@ # will resume again at 02:00 on Saturday, August 2, 2014.... # http://www.mmsp.gov.ma/fr/actualites.aspx?id=586 -# From Paul Eggert (2014-06-05): -# For now, guess that later spring and fall transitions will use 2014's rules, +# From Milamber (2015-06-08): +# (Google Translation) The hour will thus be delayed 60 minutes +# Sunday, June 14 at 3:00, the ministry said in a statement, adding +# that the time will be advanced again 60 minutes Sunday, July 19, +# 2015 at 2:00. The move comes under 2.12.126 Decree of 26 Jumada I +# 1433 (18 April 2012) and the decision of the Head of Government of +# 16 N. 3-29-15 Chaaban 1435 (4 June 2015). +# Source (french): +# http://lnt.ma/le-maroc-reculera-dune-heure-le-dimanche-14-juin/ +# +# From Milamber (2015-06-09): +# http://www.mmsp.gov.ma/fr/actualites.aspx?id=863 +# +# From Michael Deckers (2015-06-09): +# [The gov.ma announcement] would (probably) make the switch on 2015-07-19 go +# from 03:00 to 04:00 rather than from 02:00 to 03:00, as in the patch.... +# I think the patch is correct and the quoted text is wrong; the text in +# <http://lnt.ma/le-maroc-reculera-dune-heure-le-dimanche-14-juin/> agrees +# with the patch. + +# From Paul Eggert (2015-06-08): +# For now, guess that later spring and fall transitions will use 2015's rules, # and guess that Morocco will switch to standard time at 03:00 the last -# Saturday before Ramadan, and back to DST at 02:00 the first Saturday after -# Ramadan. To implement this, transition dates for 2015 through 2037 were +# Sunday before Ramadan, and back to DST at 02:00 the first Sunday after +# Ramadan. To implement this, transition dates for 2016 through 2037 were # determined by running the following program under GNU Emacs 24.3, with the # results integrated by hand into the table below. -# (let ((islamic-year 1436)) +# (let ((islamic-year 1437)) +# (require 'cal-islam) # (while (< islamic-year 1460) # (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year))) # (b (calendar-islamic-to-absolute (list 10 1 islamic-year))) -# (saturday 6)) -# (while (/= saturday (mod (setq a (1- a)) 7))) -# (while (/= saturday (mod b 7)) +# (sunday 0)) +# (while (/= sunday (mod (setq a (1- a)) 7))) +# (while (/= sunday (mod b 7)) # (setq b (1+ b))) # (setq a (calendar-gregorian-from-absolute a)) # (setq b (calendar-gregorian-from-absolute b)) @@ -867,32 +889,30 @@ Rule Morocco 2013 only - Jul 7 3:00 0 - Rule Morocco 2013 only - Aug 10 2:00 1:00 S Rule Morocco 2013 max - Oct lastSun 3:00 0 - -Rule Morocco 2014 2022 - Mar lastSun 2:00 1:00 S +Rule Morocco 2014 2021 - Mar lastSun 2:00 1:00 S Rule Morocco 2014 only - Jun 28 3:00 0 - Rule Morocco 2014 only - Aug 2 2:00 1:00 S -Rule Morocco 2015 only - Jun 13 3:00 0 - -Rule Morocco 2015 only - Jul 18 2:00 1:00 S -Rule Morocco 2016 only - Jun 4 3:00 0 - -Rule Morocco 2016 only - Jul 9 2:00 1:00 S -Rule Morocco 2017 only - May 20 3:00 0 - -Rule Morocco 2017 only - Jul 1 2:00 1:00 S -Rule Morocco 2018 only - May 12 3:00 0 - -Rule Morocco 2018 only - Jun 16 2:00 1:00 S -Rule Morocco 2019 only - May 4 3:00 0 - -Rule Morocco 2019 only - Jun 8 2:00 1:00 S -Rule Morocco 2020 only - Apr 18 3:00 0 - -Rule Morocco 2020 only - May 30 2:00 1:00 S -Rule Morocco 2021 only - Apr 10 3:00 0 - -Rule Morocco 2021 only - May 15 2:00 1:00 S -Rule Morocco 2022 only - Apr 2 3:00 0 - -Rule Morocco 2022 only - May 7 2:00 1:00 S -Rule Morocco 2023 only - Apr 22 2:00 1:00 S -Rule Morocco 2024 only - Apr 13 2:00 1:00 S -Rule Morocco 2025 only - Apr 5 2:00 1:00 S +Rule Morocco 2015 only - Jun 14 3:00 0 - +Rule Morocco 2015 only - Jul 19 2:00 1:00 S +Rule Morocco 2016 only - Jun 5 3:00 0 - +Rule Morocco 2016 only - Jul 10 2:00 1:00 S +Rule Morocco 2017 only - May 21 3:00 0 - +Rule Morocco 2017 only - Jul 2 2:00 1:00 S +Rule Morocco 2018 only - May 13 3:00 0 - +Rule Morocco 2018 only - Jun 17 2:00 1:00 S +Rule Morocco 2019 only - May 5 3:00 0 - +Rule Morocco 2019 only - Jun 9 2:00 1:00 S +Rule Morocco 2020 only - Apr 19 3:00 0 - +Rule Morocco 2020 only - May 24 2:00 1:00 S +Rule Morocco 2021 only - Apr 11 3:00 0 - +Rule Morocco 2021 only - May 16 2:00 1:00 S +Rule Morocco 2022 only - May 8 2:00 1:00 S +Rule Morocco 2023 only - Apr 23 2:00 1:00 S +Rule Morocco 2024 only - Apr 14 2:00 1:00 S +Rule Morocco 2025 only - Apr 6 2:00 1:00 S Rule Morocco 2026 max - Mar lastSun 2:00 1:00 S -Rule Morocco 2035 only - Oct 27 3:00 0 - -Rule Morocco 2036 only - Oct 18 3:00 0 - -Rule Morocco 2037 only - Oct 10 3:00 0 - +Rule Morocco 2036 only - Oct 19 3:00 0 - +Rule Morocco 2037 only - Oct 4 3:00 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
--- a/jdk/make/data/tzdata/iso3166.tab Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/make/data/tzdata/iso3166.tab Thu Jul 02 17:50:25 2015 -0700 @@ -26,11 +26,10 @@ # This file is in the public domain, so clarified as of # 2009-05-17 by Arthur David Olson. # -# From Paul Eggert (2014-07-18): +# From Paul Eggert (2015-05-02): # This file contains a table of two-letter country codes. Columns are # separated by a single tab. Lines beginning with '#' are comments. -# Although all text currently uses ASCII encoding, this is planned to -# change to UTF-8 soon. The columns of the table are as follows: +# All text uses UTF-8 encoding. The columns of the table are as follows: # # 1. ISO 3166-1 alpha-2 country code, current as of # ISO 3166-1 Newsletter VI-16 (2013-07-11). See: Updates on ISO 3166 @@ -61,7 +60,7 @@ AT Austria AU Australia AW Aruba -AX Aaland Islands +AX Åland Islands AZ Azerbaijan BA Bosnia & Herzegovina BB Barbados @@ -90,7 +89,7 @@ CF Central African Rep. CG Congo (Rep.) CH Switzerland -CI Cote d'Ivoire +CI Côte d'Ivoire CK Cook Islands CL Chile CM Cameroon @@ -234,7 +233,7 @@ PW Palau PY Paraguay QA Qatar -RE Reunion +RE Réunion RO Romania RS Serbia RU Russia
--- a/jdk/make/data/tzdata/northamerica Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/make/data/tzdata/northamerica Thu Jul 02 17:50:25 2015 -0700 @@ -2684,7 +2684,17 @@ -4:00 US A%sT # Cayman Is -# See America/Panama. + +# From Paul Eggert (2015-05-15): +# The Cayman government has decided to introduce DST in 2016, the idea being +# to keep in sync with New York. The legislation hasn't passed but the change +# seems quite likely. See: Meade B. Cayman 27. +# http://www.cayman27.com.ky/2015/05/15/clock-ticks-toward-daylight-saving-time-in-cayman + +Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown + -5:07:11 - KMT 1912 Feb # Kingston Mean Time + -5:00 - EST 2016 + -5:00 US E%sT # Costa Rica @@ -3207,7 +3217,6 @@ Zone America/Panama -5:18:08 - LMT 1890 -5:19:36 - CMT 1908 Apr 22 # Colón Mean Time -5:00 - EST -Link America/Panama America/Cayman # Puerto Rico # There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'.
--- a/jdk/make/data/tzdata/southamerica Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/make/data/tzdata/southamerica Thu Jul 02 17:50:25 2015 -0700 @@ -53,7 +53,7 @@ # I suggest the use of _Summer time_ instead of the more cumbersome # _daylight-saving time_. _Summer time_ seems to be in general use # in Europe and South America. -# -- E O Cutler, _New York Times_ (1937-02-14), quoted in +# -- E O Cutler, _New York Times_ (1937-02-14), quoted in # H L Mencken, _The American Language: Supplement I_ (1960), p 466 # # Earlier editions of these tables also used the North American style
--- a/jdk/make/gensrc/GensrcCLDR.gmk Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/make/gensrc/GensrcCLDR.gmk Thu Jul 02 17:50:25 2015 -0700 @@ -29,7 +29,7 @@ GENSRC_BASEDIR := $(SUPPORT_OUTPUTDIR)/gensrc/java.base GENSRC_DIR := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.localedata -CLDR_BASEMETAINFO_FILE := $(GENSRC_DIR)/sun/util/cldr/CLDRBaseLocaleDataMetaInfo.java +CLDR_BASEMETAINFO_FILE := $(GENSRC_BASEDIR)/sun/util/cldr/CLDRBaseLocaleDataMetaInfo.java CLDR_METAINFO_FILE := $(GENSRC_DIR)/sun/util/resources/cldr/provider/CLDRLocaleDataMetaInfo_jdk_localedata.java CLDR_BASE_LOCALES := "en-US"
--- a/jdk/make/lib/LibCommon.gmk Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/make/lib/LibCommon.gmk Thu Jul 02 17:50:25 2015 -0700 @@ -60,17 +60,6 @@ $(JDK_TOPDIR)/src/$(strip $1)/share/native/lib$(strip $2))) ################################################################################ -# Find lib dir for module -# Param 1 - module name -ifeq ($(OPENJDK_TARGET_OS_TYPE), unix) - FindLibDirForModule = \ - $(SUPPORT_OUTPUTDIR)/modules_libs/$(strip $1)$(OPENJDK_TARGET_CPU_LIBDIR) -else - FindLibDirForModule = \ - $(SUPPORT_OUTPUTDIR)/modules_libs/$(strip $1) -endif - -################################################################################ # Find a library # Param 1 - module name # Param 2 - library name
--- a/jdk/make/lib/NioLibraries.gmk Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/make/lib/NioLibraries.gmk Thu Jul 02 17:50:25 2015 -0700 @@ -81,7 +81,8 @@ LDFLAGS_SUFFIX_windows := jvm.lib ws2_32.lib $(WIN_JAVA_LIB) \ $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libnet/net.lib \ advapi32.lib, \ - LDFLAGS_SUFFIX_macosx := -ljava -lnet -pthread -framework CoreFoundation, \ + LDFLAGS_SUFFIX_macosx := -ljava -lnet -pthread \ + -framework CoreFoundation -framework CoreServices, \ LDFLAGS_SUFFIX :=, \ VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \ RC_FLAGS := $(RC_FLAGS) \
--- a/jdk/make/src/classes/build/tools/module/ModuleArchive.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/make/src/classes/build/tools/module/ModuleArchive.java Thu Jul 02 17:50:25 2015 -0700 @@ -228,7 +228,8 @@ private static String nativeDir(String filename) { if (System.getProperty("os.name").startsWith("Windows")) { if (filename.endsWith(".dll") || filename.endsWith(".diz") - || filename.endsWith(".pdb") || filename.endsWith(".map")) { + || filename.endsWith(".pdb") || filename.endsWith(".map") + || filename.endsWith(".cpl")) { return "bin"; } else { return "lib";
--- a/jdk/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystemProvider.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystemProvider.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 @@ -49,6 +49,8 @@ FileTypeDetector getFileTypeDetector() { Path userMimeTypes = Paths.get(AccessController.doPrivileged( new GetPropertyAction("user.home")), ".mime.types"); - return new MimeTypesFileTypeDetector(userMimeTypes); + + return chain(new MimeTypesFileTypeDetector(userMimeTypes), + new UTIFileTypeDetector()); } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.base/macosx/classes/sun/nio/fs/UTIFileTypeDetector.java Thu Jul 02 17:50:25 2015 -0700 @@ -0,0 +1,66 @@ +/* + * 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. 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. + */ + +package sun.nio.fs; + +import java.io.IOException; +import java.nio.file.Path; +import java.security.AccessController; +import java.security.PrivilegedAction; + +/** + * File type detector that uses a file extension to look up its MIME type + * via the Apple Uniform Type Identifier interfaces. + */ +class UTIFileTypeDetector extends AbstractFileTypeDetector { + UTIFileTypeDetector() { + super(); + } + + private native String probe0(String fileExtension) throws IOException; + + @Override + protected String implProbeContentType(Path path) throws IOException { + Path fn = path.getFileName(); + if (fn == null) + return null; // no file name + + String ext = getExtension(fn.toString()); + if (ext.isEmpty()) + return null; // no extension + + return probe0(ext); + } + + static { + AccessController.doPrivileged(new PrivilegedAction<>() { + @Override + public Void run() { + System.loadLibrary("nio"); + return null; + } + }); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.base/macosx/native/libnio/fs/UTIFileTypeDetector.c Thu Jul 02 17:50:25 2015 -0700 @@ -0,0 +1,127 @@ +/* + * 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. 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 "jni.h" +#include "jni_util.h" + +#include <CoreFoundation/CoreFoundation.h> +#include <CoreServices/CoreServices.h> + +/** + * Creates a CF string from the given Java string. + * If javaString is NULL, NULL is returned. + * If a memory error occurs, and OutOfMemoryError is thrown and + * NULL is returned. + */ +static CFStringRef toCFString(JNIEnv *env, jstring javaString) +{ + if (javaString == NULL) { + return NULL; + } else { + CFStringRef result = NULL; + jsize length = (*env)->GetStringLength(env, javaString); + const jchar *chars = (*env)->GetStringChars(env, javaString, NULL); + if (chars == NULL) { + JNU_ThrowOutOfMemoryError(env, "toCFString failed"); + return NULL; + } + result = CFStringCreateWithCharacters(NULL, (const UniChar *)chars, + length); + (*env)->ReleaseStringChars(env, javaString, chars); + if (result == NULL) { + JNU_ThrowOutOfMemoryError(env, "toCFString failed"); + return NULL; + } + return result; + } +} + +/** + * Creates a Java string from the given CF string. + * If cfString is NULL, NULL is returned. + * If a memory error occurs, and OutOfMemoryError is thrown and + * NULL is returned. + */ +static jstring toJavaString(JNIEnv *env, CFStringRef cfString) +{ + if (cfString == NULL) { + return NULL; + } else { + jstring javaString = NULL; + + CFIndex length = CFStringGetLength(cfString); + const UniChar *constchars = CFStringGetCharactersPtr(cfString); + if (constchars) { + javaString = (*env)->NewString(env, constchars, length); + } else { + UniChar *chars = malloc(length * sizeof(UniChar)); + if (chars == NULL) { + JNU_ThrowOutOfMemoryError(env, "toJavaString failed"); + return NULL; + } + CFStringGetCharacters(cfString, CFRangeMake(0, length), chars); + javaString = (*env)->NewString(env, chars, length); + free(chars); + } + return javaString; + } +} + +/** + * Returns the content type corresponding to the supplied file extension. + * The mapping is determined using Uniform Type Identifiers (UTIs). If + * the file extension parameter is NULL, a CFString cannot be created + * from the file extension parameter, there is no UTI corresponding to + * the file extension, the UTI cannot supply a MIME type for the file + * extension, or a Java string cannot be created, then NULL is returned; + * otherwise the MIME type string is returned. + */ +JNIEXPORT jstring JNICALL +Java_sun_nio_fs_UTIFileTypeDetector_probe0(JNIEnv* env, jobject ftd, + jstring ext) +{ + jstring result = NULL; + + CFStringRef extension = toCFString(env, ext); + if (extension != NULL) { + CFStringRef uti = + UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, + extension, NULL); + CFRelease(extension); + + if (uti != NULL) { + CFStringRef mimeType = + UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType); + CFRelease(uti); + + if (mimeType != NULL) { + result = toJavaString(env, mimeType); + CFRelease(mimeType); + } + } + } + + return result; +}
--- a/jdk/src/java.base/share/classes/com/sun/crypto/provider/OAEPParameters.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/com/sun/crypto/provider/OAEPParameters.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 @@ -121,7 +121,7 @@ } else if (data.isContextSpecific((byte) 0x01)) { // mgf algid AlgorithmId val = AlgorithmId.parse(data.data.getDerValue()); - if (!val.getOID().equals((Object) OID_MGF1)) { + if (!val.getOID().equals(OID_MGF1)) { throw new IOException("Only MGF1 mgf is supported"); } AlgorithmId params = AlgorithmId.parse( @@ -144,7 +144,7 @@ } else if (data.isContextSpecific((byte) 0x02)) { // pSource algid AlgorithmId val = AlgorithmId.parse(data.data.getDerValue()); - if (!val.getOID().equals((Object) OID_PSpecified)) { + if (!val.getOID().equals(OID_PSpecified)) { throw new IOException("Wrong OID for pSpecified"); } DerInputStream dis = new DerInputStream(val.getEncodedParams());
--- a/jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/Attribute.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/Attribute.java Thu Jul 02 17:50:25 2015 -0700 @@ -1235,7 +1235,7 @@ int sofar = 0; // how far have we processed the layout? for (;;) { // for each dash, collect everything up to the dash - result.append(layout.substring(sofar, dash)); + result.append(layout, sofar, dash); sofar = dash+1; // skip the dash // then collect intermediate values int value0 = parseIntBefore(layout, dash); @@ -1249,7 +1249,7 @@ dash = findCaseDash(layout, sofar); if (dash < 0) break; } - result.append(layout.substring(sofar)); // collect the rest + result.append(layout, sofar, layout.length()); // collect the rest return result.toString(); } static {
--- a/jdk/src/java.base/share/classes/java/io/BufferedOutputStream.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/io/BufferedOutputStream.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 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,8 +34,7 @@ * @author Arthur van Hoff * @since 1.0 */ -public -class BufferedOutputStream extends FilterOutputStream { +public class BufferedOutputStream extends FilterOutputStream { /** * The internal buffer where data is stored. */ @@ -90,6 +89,7 @@ * @param b the byte to be written. * @exception IOException if an I/O error occurs. */ + @Override public synchronized void write(int b) throws IOException { if (count >= buf.length) { flushBuffer(); @@ -113,6 +113,7 @@ * @param len the number of bytes to write. * @exception IOException if an I/O error occurs. */ + @Override public synchronized void write(byte b[], int off, int len) throws IOException { if (len >= buf.length) { /* If the request length exceeds the size of the output buffer, @@ -136,6 +137,7 @@ * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out */ + @Override public synchronized void flush() throws IOException { flushBuffer(); out.flush();
--- a/jdk/src/java.base/share/classes/java/io/FilterOutputStream.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/io/FilterOutputStream.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 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 @@ -41,13 +41,15 @@ * @author Jonathan Payne * @since 1.0 */ -public -class FilterOutputStream extends OutputStream { +public class FilterOutputStream extends OutputStream { /** * The underlying output stream to be filtered. */ protected OutputStream out; + /** + * Whether the stream is closed; implicitly initialized to false. + */ private boolean closed; /** @@ -75,6 +77,7 @@ * @param b the <code>byte</code>. * @exception IOException if an I/O error occurs. */ + @Override public void write(int b) throws IOException { out.write(b); } @@ -95,6 +98,7 @@ * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#write(byte[], int, int) */ + @Override public void write(byte b[]) throws IOException { write(b, 0, b.length); } @@ -119,6 +123,7 @@ * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#write(int) */ + @Override public void write(byte b[], int off, int len) throws IOException { if ((off | len | (b.length - (len + off)) | (off + len)) < 0) throw new IndexOutOfBoundsException(); @@ -138,6 +143,7 @@ * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out */ + @Override public void flush() throws IOException { out.flush(); } @@ -154,13 +160,40 @@ * @see java.io.FilterOutputStream#flush() * @see java.io.FilterOutputStream#out */ - @SuppressWarnings("try") + @Override public void close() throws IOException { - if (closed) + if (closed) { return; + } closed = true; - try (OutputStream ostream = out) { + + Throwable flushException = null; + try { flush(); + } catch (Throwable e) { + flushException = e; + throw e; + } finally { + if (flushException == null) { + out.close(); + } else { + try { + out.close(); + } catch (Throwable closeException) { + // evaluate possible precedence of flushException over closeException + if ((flushException instanceof ThreadDeath) && + !(closeException instanceof ThreadDeath)) { + flushException.addSuppressed(closeException); + throw (ThreadDeath) flushException; + } + + if (flushException != closeException) { + closeException.addSuppressed(flushException); + } + + throw closeException; + } + } } } }
--- a/jdk/src/java.base/share/classes/java/io/StringWriter.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/io/StringWriter.java Thu Jul 02 17:50:25 2015 -0700 @@ -109,7 +109,7 @@ * @param len Number of characters to write */ public void write(String str, int off, int len) { - buf.append(str.substring(off, off + len)); + buf.append(str, off, off + len); } /**
--- a/jdk/src/java.base/share/classes/java/lang/AbstractStringBuilder.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/lang/AbstractStringBuilder.java Thu Jul 02 17:50:25 2015 -0700 @@ -515,8 +515,12 @@ + s.length()); int len = end - start; ensureCapacityInternal(count + len); - for (int i = start, j = count; i < end; i++, j++) - value[j] = s.charAt(i); + if (s instanceof String) { + ((String)s).getChars(start, end, value, count); + } else { + for (int i = start, j = count; i < end; i++, j++) + value[j] = s.charAt(i); + } count += len; return this; }
--- a/jdk/src/java.base/share/classes/java/net/NetworkInterface.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/net/NetworkInterface.java Thu Jul 02 17:50:25 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 @@ -25,10 +25,14 @@ package java.net; +import java.util.Arrays; import java.util.Enumeration; import java.util.NoSuchElementException; -import sun.security.action.*; import java.security.AccessController; +import java.util.Spliterator; +import java.util.Spliterators; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; /** * This class represents a Network Interface made up of a name, @@ -95,8 +99,8 @@ } /** - * Convenience method to return an Enumeration with all or a - * subset of the InetAddresses bound to this network interface. + * Get an Enumeration with all or a subset of the InetAddresses bound to + * this network interface. * <p> * If there is a security manager, its {@code checkConnect} * method is called for each InetAddress. Only InetAddresses where @@ -104,53 +108,56 @@ * will be returned in the Enumeration. However, if the caller has the * {@link NetPermission}("getNetworkInformation") permission, then all * InetAddresses are returned. + * * @return an Enumeration object with all or a subset of the InetAddresses * bound to this network interface + * @see #inetAddresses() */ public Enumeration<InetAddress> getInetAddresses() { + return enumerationFromArray(getCheckedInetAddresses()); + } - class checkedAddresses implements Enumeration<InetAddress> { + /** + * Get a Stream of all or a subset of the InetAddresses bound to this + * network interface. + * <p> + * If there is a security manager, its {@code checkConnect} + * method is called for each InetAddress. Only InetAddresses where + * the {@code checkConnect} doesn't throw a SecurityException will be + * returned in the Stream. However, if the caller has the + * {@link NetPermission}("getNetworkInformation") permission, then all + * InetAddresses are returned. + * + * @return a Stream object with all or a subset of the InetAddresses + * bound to this network interface + * @since 1.9 + */ + public Stream<InetAddress> inetAddresses() { + return streamFromArray(getCheckedInetAddresses()); + } - private int i=0, count=0; - private InetAddress local_addrs[]; + private InetAddress[] getCheckedInetAddresses() { + InetAddress[] local_addrs = new InetAddress[addrs.length]; + boolean trusted = true; - checkedAddresses() { - local_addrs = new InetAddress[addrs.length]; - boolean trusted = true; - - SecurityManager sec = System.getSecurityManager(); - if (sec != null) { - try { - sec.checkPermission(new NetPermission("getNetworkInformation")); - } catch (SecurityException e) { - trusted = false; - } - } - for (int j=0; j<addrs.length; j++) { - try { - if (sec != null && !trusted) { - sec.checkConnect(addrs[j].getHostAddress(), -1); - } - local_addrs[count++] = addrs[j]; - } catch (SecurityException e) { } - } - - } - - public InetAddress nextElement() { - if (i < count) { - return local_addrs[i++]; - } else { - throw new NoSuchElementException(); - } - } - - public boolean hasMoreElements() { - return (i < count); + SecurityManager sec = System.getSecurityManager(); + if (sec != null) { + try { + sec.checkPermission(new NetPermission("getNetworkInformation")); + } catch (SecurityException e) { + trusted = false; } } - return new checkedAddresses(); - + int i = 0; + for (int j = 0; j < addrs.length; j++) { + try { + if (!trusted) { + sec.checkConnect(addrs[j].getHostAddress(), -1); + } + local_addrs[i++] = addrs[j]; + } catch (SecurityException e) { } + } + return Arrays.copyOf(local_addrs, i); } /** @@ -188,30 +195,23 @@ * * @return an Enumeration object with all of the subinterfaces * of this network interface + * @see #subInterfaces() * @since 1.6 */ public Enumeration<NetworkInterface> getSubInterfaces() { - class subIFs implements Enumeration<NetworkInterface> { + return enumerationFromArray(childs); + } - private int i=0; - - subIFs() { - } - - public NetworkInterface nextElement() { - if (i < childs.length) { - return childs[i++]; - } else { - throw new NoSuchElementException(); - } - } - - public boolean hasMoreElements() { - return (i < childs.length); - } - } - return new subIFs(); - + /** + * Get a Stream of all subinterfaces (also known as virtual + * interfaces) attached to this network interface. + * + * @return a Stream object with all of the subinterfaces + * of this network interface + * @since 1.9 + */ + public Stream<NetworkInterface> subInterfaces() { + return streamFromArray(childs); } /** @@ -326,43 +326,80 @@ } /** - * Returns all the interfaces on this machine. The {@code Enumeration} - * contains at least one element, possibly representing a loopback - * interface that only supports communication between entities on + * Returns an {@code Enumeration} of all the interfaces on this machine. The + * {@code Enumeration} contains at least one element, possibly representing + * a loopback interface that only supports communication between entities on * this machine. * - * NOTE: can use getNetworkInterfaces()+getInetAddresses() - * to obtain all IP addresses for this node + * @apiNote this method can be used in combination with + * {@link #getInetAddresses()} to obtain all IP addresses for this node * * @return an Enumeration of NetworkInterfaces found on this machine * @exception SocketException if an I/O error occurs. + * @see #networkInterfaces() */ - public static Enumeration<NetworkInterface> getNetworkInterfaces() throws SocketException { - final NetworkInterface[] netifs = getAll(); + NetworkInterface[] netifs = getAll(); + assert netifs != null && netifs.length > 0; - // specified to return null if no network interfaces - if (netifs == null) - return null; + return enumerationFromArray(netifs); + } + /** + * Returns a {@code Stream} of all the interfaces on this machine. The + * {@code Stream} contains at least one interface, possibly representing a + * loopback interface that only supports communication between entities on + * this machine. + * + * @apiNote this method can be used in combination with + * {@link #inetAddresses()}} to obtain a stream of all IP addresses for + * this node, for example: + * <pre> {@code + * Stream<InetAddress> addrs = NetworkInterface.networkInterfaces() + * .flatMap(NetworkInterface::inetAddresses); + * }</pre> + * + * @return a Stream of NetworkInterfaces found on this machine + * @exception SocketException if an I/O error occurs. + * @since 1.9 + */ + public static Stream<NetworkInterface> networkInterfaces() + throws SocketException { + NetworkInterface[] netifs = getAll(); + assert netifs != null && netifs.length > 0; + + return streamFromArray(netifs); + } + + private static <T> Enumeration<T> enumerationFromArray(T[] a) { return new Enumeration<>() { - private int i = 0; - public NetworkInterface nextElement() { - if (netifs != null && i < netifs.length) { - NetworkInterface netif = netifs[i++]; - return netif; + int i = 0; + + @Override + public T nextElement() { + if (i < a.length) { + return a[i++]; } else { throw new NoSuchElementException(); } } + @Override public boolean hasMoreElements() { - return (netifs != null && i < netifs.length); + return i < a.length; } }; } + private static <T> Stream<T> streamFromArray(T[] a) { + return StreamSupport.stream( + Spliterators.spliterator( + a, + Spliterator.DISTINCT | Spliterator.IMMUTABLE | Spliterator.NONNULL), + false); + } + private native static NetworkInterface[] getAll() throws SocketException;
--- a/jdk/src/java.base/share/classes/java/net/URI.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/net/URI.java Thu Jul 02 17:50:25 2015 -0700 @@ -2018,7 +2018,7 @@ StringBuilder sb = new StringBuilder(base.length() + cn); // 5.2 (6a) if (i >= 0) - sb.append(base.substring(0, i + 1)); + sb.append(base, 0, i + 1); // 5.2 (6b) sb.append(child); path = sb.toString(); @@ -2686,7 +2686,7 @@ if (!match(c, lowMask, highMask)) { if (sb == null) { sb = new StringBuffer(); - sb.append(s.substring(0, i)); + sb.append(s, 0, i); } appendEscape(sb, (byte)c); } else { @@ -2698,7 +2698,7 @@ || Character.isISOControl(c))) { if (sb == null) { sb = new StringBuffer(); - sb.append(s.substring(0, i)); + sb.append(s, 0, i); } appendEncoded(sb, c); } else {
--- a/jdk/src/java.base/share/classes/java/security/PermissionCollection.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/security/PermissionCollection.java Thu Jul 02 17:50:25 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,6 +26,8 @@ package java.security; import java.util.*; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; /** * Abstract class representing a collection of Permission objects. @@ -126,10 +128,35 @@ * Returns an enumeration of all the Permission objects in the collection. * * @return an enumeration of all the Permissions. + * @see #elementsAsStream() */ public abstract Enumeration<Permission> elements(); /** + * Returns a stream of all the Permission objects in the collection. + * + * <p> The collection should not be modified (see {@link #add}) during the + * execution of the terminal stream operation. Otherwise, the result of the + * terminal stream operation is undefined. + * + * @implSpec + * The default implementation creates a stream whose source is derived from + * the enumeration returned from a call to {@link #elements()}. + * + * @return a stream of all the Permissions. + * @since 1.9 + */ + public Stream<Permission> elementsAsStream() { + int characteristics = isReadOnly() + ? Spliterator.NONNULL | Spliterator.IMMUTABLE + : Spliterator.NONNULL; + return StreamSupport.stream( + Spliterators.spliteratorUnknownSize( + elements().asIterator(), characteristics), + false); + } + + /** * Marks this PermissionCollection object as "readonly". After * a PermissionCollection object * is marked as readonly, no new Permission objects can be added to it
--- a/jdk/src/java.base/share/classes/java/security/cert/X509CertSelector.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/security/cert/X509CertSelector.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2014, 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 @@ -2238,7 +2238,7 @@ + subjectPublicKeyAlgID + ", xcert subjectPublicKeyAlgID = " + algID.getOID()); } - if (!subjectPublicKeyAlgID.equals((Object)algID.getOID())) { + if (!subjectPublicKeyAlgID.equals(algID.getOID())) { if (debug != null) { debug.println("X509CertSelector.match: " + "subject public key alg IDs don't match");
--- a/jdk/src/java.base/share/classes/java/text/MergeCollation.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/text/MergeCollation.java Thu Jul 02 17:50:25 2015 -0700 @@ -329,8 +329,8 @@ PatternEntry e = patterns.get(i); if (e.chars.regionMatches(0,entry.chars,0, e.chars.length())) { - excessChars.append(entry.chars.substring(e.chars.length(), - entry.chars.length())); + excessChars.append(entry.chars, e.chars.length(), + entry.chars.length()); break; } }
--- a/jdk/src/java.base/share/classes/java/text/MessageFormat.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/text/MessageFormat.java Thu Jul 02 17:50:25 2015 -0700 @@ -1239,7 +1239,7 @@ int lastOffset = 0; int last = result.length(); for (int i = 0; i <= maxOffset; ++i) { - result.append(pattern.substring(lastOffset, offsets[i])); + result.append(pattern, lastOffset, offsets[i]); lastOffset = offsets[i]; int argumentNumber = argumentNumbers[i]; if (arguments == null || argumentNumber >= arguments.length) { @@ -1332,7 +1332,7 @@ } } } - result.append(pattern.substring(lastOffset, pattern.length())); + result.append(pattern, lastOffset, pattern.length()); if (characterIterators != null && last != result.length()) { characterIterators.add(createAttributedCharacterIterator( result.substring(last)));
--- a/jdk/src/java.base/share/classes/java/util/Collections.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/util/Collections.java Thu Jul 02 17:50:25 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 @@ -4268,6 +4268,7 @@ public boolean hasMoreElements() { return false; } public E nextElement() { throw new NoSuchElementException(); } + public Iterator<E> asIterator() { return emptyIterator(); } } /** @@ -5199,6 +5200,11 @@ * interoperability with legacy APIs that require an enumeration * as input. * + * <p>The iterator returned from a call to {@link Enumeration#asIterator()} + * does not support removal of elements from the specified collection. This + * is necessary to avoid unintentionally increasing the capabilities of the + * returned enumeration. + * * @param <T> the class of the objects in the collection * @param c the collection for which an enumeration is to be returned. * @return an enumeration over the specified collection.
--- a/jdk/src/java.base/share/classes/java/util/LinkedList.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/util/LinkedList.java Thu Jul 02 17:50:25 2015 -0700 @@ -88,18 +88,22 @@ /** * Pointer to first node. - * Invariant: (first == null && last == null) || - * (first.prev == null && first.item != null) */ transient Node<E> first; /** * Pointer to last node. - * Invariant: (first == null && last == null) || - * (last.next == null && last.item != null) */ transient Node<E> last; + /* + void dataStructureInvariants() { + assert (size == 0) + ? (first == null && last == null) + : (first.prev == null && last.next == null); + } + */ + /** * Constructs an empty list. */
--- a/jdk/src/java.base/share/classes/java/util/jar/JarFile.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/util/jar/JarFile.java Thu Jul 02 17:50:25 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 @@ -265,6 +265,10 @@ public JarEntry nextElement() { return next(); } + + public Iterator<JarEntry> asIterator() { + return this; + } } /**
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java Thu Jul 02 17:50:25 2015 -0700 @@ -526,6 +526,10 @@ return ze; } } + + public Iterator<ZipEntry> asIterator() { + return this; + } } /**
--- a/jdk/src/java.base/share/classes/sun/invoke/util/BytecodeName.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/invoke/util/BytecodeName.java Thu Jul 02 17:50:25 2015 -0700 @@ -511,7 +511,7 @@ if (s.charAt(0) != ESCAPE_C && i > 0) sb.append(NULL_ESCAPE); // append the string so far, which is unremarkable: - sb.append(s.substring(0, i)); + sb.append(s, 0, i); } // rewrite \ to \-, / to \|, etc. @@ -544,7 +544,7 @@ if (sb == null) { sb = new StringBuilder(s.length()); // append the string so far, which is unremarkable: - sb.append(s.substring(stringStart, i)); + sb.append(s, stringStart, i); } ++i; // skip both characters c = oc;
--- a/jdk/src/java.base/share/classes/sun/net/www/ParseUtil.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/net/www/ParseUtil.java Thu Jul 02 17:50:25 2015 -0700 @@ -451,7 +451,7 @@ if (!match(c, lowMask, highMask) && !isEscaped(s, i)) { if (sb == null) { sb = new StringBuffer(); - sb.append(s.substring(0, i)); + sb.append(s, 0, i); } appendEscape(sb, (byte)c); } else { @@ -463,7 +463,7 @@ || Character.isISOControl(c))) { if (sb == null) { sb = new StringBuffer(); - sb.append(s.substring(0, i)); + sb.append(s, 0, i); } appendEncoded(sb, c); } else {
--- a/jdk/src/java.base/share/classes/sun/nio/fs/AbstractFileTypeDetector.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/nio/fs/AbstractFileTypeDetector.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 @@ -42,6 +42,27 @@ } /** + * Returns the extension of a file name, specifically the portion of the + * parameter string after the first dot. If the parameter is {@code null}, + * empty, does not contain a dot, or the dot is the last character, then an + * empty string is returned, otherwise the characters after the dot are + * returned. + * + * @param name A file name + * @return The characters after the first dot or an empty string. + */ + protected final String getExtension(String name) { + String ext = ""; + if (name != null && !name.isEmpty()) { + int dot = name.indexOf('.'); + if ((dot >= 0) && (dot < name.length() - 1)) { + ext = name.substring(dot + 1); + } + } + return ext; + } + + /** * Invokes the appropriate probe method to guess a file's content type, * and checks that the content type's syntax is valid. */
--- a/jdk/src/java.base/share/classes/sun/security/pkcs/ContentInfo.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/pkcs/ContentInfo.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, 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 @@ -163,9 +163,9 @@ } public byte[] getData() throws IOException { - if (contentType.equals((Object)DATA_OID) || - contentType.equals((Object)OLD_DATA_OID) || - contentType.equals((Object)TIMESTAMP_TOKEN_INFO_OID)) { + if (contentType.equals(DATA_OID) || + contentType.equals(OLD_DATA_OID) || + contentType.equals(TIMESTAMP_TOKEN_INFO_OID)) { if (content == null) return null; else
--- a/jdk/src/java.base/share/classes/sun/security/pkcs/PKCS7.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/pkcs/PKCS7.java Thu Jul 02 17:50:25 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 @@ -182,13 +182,12 @@ contentType = contentInfo.contentType; DerValue content = contentInfo.getContent(); - if (contentType.equals((Object)ContentInfo.SIGNED_DATA_OID)) { + if (contentType.equals(ContentInfo.SIGNED_DATA_OID)) { parseSignedData(content); - } else if (contentType.equals((Object)ContentInfo.OLD_SIGNED_DATA_OID)) { + } else if (contentType.equals(ContentInfo.OLD_SIGNED_DATA_OID)) { // This is for backwards compatibility with JDK 1.1.x parseOldSignedData(content); - } else if (contentType.equals((Object) - ContentInfo.NETSCAPE_CERT_SEQUENCE_OID)){ + } else if (contentType.equals(ContentInfo.NETSCAPE_CERT_SEQUENCE_OID)){ parseNetscapeCertChain(content); } else { throw new ParsingException("content type " + contentType +
--- a/jdk/src/java.base/share/classes/sun/security/pkcs/SignerInfo.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/pkcs/SignerInfo.java Thu Jul 02 17:50:25 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 @@ -307,7 +307,7 @@ authenticatedAttributes.getAttributeValue( PKCS9Attribute.CONTENT_TYPE_OID); if (contentType == null || - !contentType.equals((Object)content.contentType)) + !contentType.equals(content.contentType)) return null; // contentType does not match, bad SignerInfo // now, check message digest
--- a/jdk/src/java.base/share/classes/sun/security/pkcs12/PKCS12KeyStore.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/pkcs12/PKCS12KeyStore.java Thu Jul 02 17:50:25 2015 -0700 @@ -789,7 +789,7 @@ } } if (params != null) { - if (algorithm.equals((Object)pbes2_OID)) { + if (algorithm.equals(pbes2_OID)) { algParams = AlgorithmParameters.getInstance("PBES2"); } else { algParams = AlgorithmParameters.getInstance("PBE"); @@ -926,7 +926,7 @@ private static String mapPBEParamsToAlgorithm(ObjectIdentifier algorithm, AlgorithmParameters algParams) throws NoSuchAlgorithmException { // Check for PBES2 algorithms - if (algorithm.equals((Object)pbes2_OID) && algParams != null) { + if (algorithm.equals(pbes2_OID) && algParams != null) { return algParams.toString(); } return algorithm.toString(); @@ -1937,7 +1937,7 @@ ContentInfo authSafe = new ContentInfo(s); ObjectIdentifier contentType = authSafe.getContentType(); - if (contentType.equals((Object)ContentInfo.DATA_OID)) { + if (contentType.equals(ContentInfo.DATA_OID)) { authSafeData = authSafe.getData(); } else /* signed data */ { throw new IOException("public key protected PKCS12 not supported"); @@ -1965,14 +1965,14 @@ safeContents = new ContentInfo(sci); contentType = safeContents.getContentType(); safeContentsData = null; - if (contentType.equals((Object)ContentInfo.DATA_OID)) { + if (contentType.equals(ContentInfo.DATA_OID)) { if (debug != null) { debug.println("Loading PKCS#7 data content-type"); } safeContentsData = safeContents.getData(); - } else if (contentType.equals((Object)ContentInfo.ENCRYPTED_DATA_OID)) { + } else if (contentType.equals(ContentInfo.ENCRYPTED_DATA_OID)) { if (password == null) { if (debug != null) { @@ -2178,12 +2178,12 @@ + bagValue.tag); } bagValue = bagValue.data.getDerValue(); - if (bagId.equals((Object)PKCS8ShroudedKeyBag_OID)) { + if (bagId.equals(PKCS8ShroudedKeyBag_OID)) { PrivateKeyEntry kEntry = new PrivateKeyEntry(); kEntry.protectedPrivKey = bagValue.toByteArray(); bagItem = kEntry; privateKeyCount++; - } else if (bagId.equals((Object)CertBag_OID)) { + } else if (bagId.equals(CertBag_OID)) { DerInputStream cs = new DerInputStream(bagValue.toByteArray()); DerValue[] certValues = cs.getSequence(2); ObjectIdentifier certId = certValues[0].getOID(); @@ -2198,7 +2198,7 @@ (new ByteArrayInputStream(certValue.getOctetString())); bagItem = cert; certificateCount++; - } else if (bagId.equals((Object)SecretBag_OID)) { + } else if (bagId.equals(SecretBag_OID)) { DerInputStream ss = new DerInputStream(bagValue.toByteArray()); DerValue[] secretValues = ss.getSequence(2); ObjectIdentifier secretId = secretValues[0].getOID(); @@ -2249,12 +2249,12 @@ throw new IOException("Attribute " + attrId + " should have a value " + e.getMessage()); } - if (attrId.equals((Object)PKCS9FriendlyName_OID)) { + if (attrId.equals(PKCS9FriendlyName_OID)) { alias = valSet[0].getBMPString(); - } else if (attrId.equals((Object)PKCS9LocalKeyId_OID)) { + } else if (attrId.equals(PKCS9LocalKeyId_OID)) { keyId = valSet[0].getOctetString(); } else if - (attrId.equals((Object)TrustedKeyUsage_OID)) { + (attrId.equals(TrustedKeyUsage_OID)) { trustedKeyUsage = new ObjectIdentifier[valSet.length]; for (int k = 0; k < valSet.length; k++) { trustedKeyUsage[k] = valSet[k].getOID();
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/OCSP.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/OCSP.java Thu Jul 02 17:50:25 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 @@ -322,7 +322,7 @@ List<AccessDescription> descriptions = aia.getAccessDescriptions(); for (AccessDescription description : descriptions) { - if (description.getAccessMethod().equals((Object) + if (description.getAccessMethod().equals( AccessDescription.Ad_OCSP_Id)) { GeneralName generalName = description.getAccessLocation();
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/OCSPResponse.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/OCSPResponse.java Thu Jul 02 17:50:25 2015 -0700 @@ -239,7 +239,7 @@ // responseType derIn = tmp.data; ObjectIdentifier responseType = derIn.getOID(); - if (responseType.equals((Object)OCSP_BASIC_RESPONSE_OID)) { + if (responseType.equals(OCSP_BASIC_RESPONSE_OID)) { if (debug != null) { debug.println("OCSP response type: basic"); } @@ -338,8 +338,7 @@ debug.println("OCSP extension: " + ext); } // Only the NONCE extension is recognized - if (ext.getExtensionId().equals((Object) - OCSP.NONCE_EXTENSION_OID)) + if (ext.getExtensionId().equals(OCSP.NONCE_EXTENSION_OID)) { nonce = ext.getExtensionValue(); } else if (ext.isCritical()) {
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/URICertStore.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/URICertStore.java Thu Jul 02 17:50:25 2015 -0700 @@ -202,7 +202,7 @@ * object of a certificate's Authority Information Access Extension. */ static CertStore getInstance(AccessDescription ad) { - if (!ad.getAccessMethod().equals((Object) + if (!ad.getAccessMethod().equals( AccessDescription.Ad_CAISSUERS_Id)) { return null; }
--- a/jdk/src/java.base/share/classes/sun/security/rsa/RSASignature.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/rsa/RSASignature.java Thu Jul 02 17:50:25 2015 -0700 @@ -232,7 +232,7 @@ throw new IOException("SEQUENCE length error"); } AlgorithmId algId = AlgorithmId.parse(values[0]); - if (algId.getOID().equals((Object)oid) == false) { + if (algId.getOID().equals(oid) == false) { throw new IOException("ObjectIdentifier mismatch: " + algId.getOID()); }
--- a/jdk/src/java.base/share/classes/sun/security/tools/keytool/Main.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/tools/keytool/Main.java Thu Jul 02 17:50:25 2015 -0700 @@ -1280,7 +1280,7 @@ Iterator<PKCS10Attribute> attrs = req.getAttributes().getAttributes().iterator(); while (attrs.hasNext()) { PKCS10Attribute attr = attrs.next(); - if (attr.getAttributeId().equals((Object)PKCS9Attribute.EXTENSION_REQUEST_OID)) { + if (attr.getAttributeId().equals(PKCS9Attribute.EXTENSION_REQUEST_OID)) { reqex = (CertificateExtensions)attr.getAttributeValue(); } } @@ -2338,7 +2338,7 @@ req.getSubjectName(), pkey.getFormat(), pkey.getAlgorithm()); for (PKCS10Attribute attr: req.getAttributes().getAttributes()) { ObjectIdentifier oid = attr.getAttributeId(); - if (oid.equals((Object)PKCS9Attribute.EXTENSION_REQUEST_OID)) { + if (oid.equals(PKCS9Attribute.EXTENSION_REQUEST_OID)) { CertificateExtensions exts = (CertificateExtensions)attr.getAttributeValue(); if (exts != null) { printExtensions(rb.getString("Extension.Request."), exts, out);
--- a/jdk/src/java.base/share/classes/sun/security/util/ObjectIdentifier.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/util/ObjectIdentifier.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, 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 @@ -319,14 +319,6 @@ } /** - * @deprecated Use equals((Object)oid) - */ - @Deprecated - public boolean equals(ObjectIdentifier other) { - return equals((Object)other); - } - - /** * Compares this identifier with another, for equality. * * @return true iff the names are identical.
--- a/jdk/src/java.base/share/classes/sun/security/x509/AVA.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/x509/AVA.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, 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 @@ -364,8 +364,8 @@ // encode as PrintableString unless value contains // non-PrintableString chars - if (this.oid.equals((Object)PKCS9Attribute.EMAIL_ADDRESS_OID) || - (this.oid.equals((Object)X500Name.DOMAIN_COMPONENT_OID) && + if (this.oid.equals(PKCS9Attribute.EMAIL_ADDRESS_OID) || + (this.oid.equals(X500Name.DOMAIN_COMPONENT_OID) && PRESERVE_OLD_DC_ENCODING == false)) { // EmailAddress and DomainComponent must be IA5String return new DerValue(DerValue.tag_IA5String, @@ -495,8 +495,8 @@ // encode as PrintableString unless value contains // non-PrintableString chars - if (this.oid.equals((Object)PKCS9Attribute.EMAIL_ADDRESS_OID) || - (this.oid.equals((Object)X500Name.DOMAIN_COMPONENT_OID) && + if (this.oid.equals(PKCS9Attribute.EMAIL_ADDRESS_OID) || + (this.oid.equals(X500Name.DOMAIN_COMPONENT_OID) && PRESERVE_OLD_DC_ENCODING == false)) { // EmailAddress and DomainComponent must be IA5String return new DerValue(DerValue.tag_IA5String, temp.toString());
--- a/jdk/src/java.base/share/classes/sun/security/x509/AccessDescription.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/x509/AccessDescription.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 @@ -95,19 +95,19 @@ if (this == that) { return true; } - return (accessMethod.equals((Object)that.getAccessMethod()) && + return (accessMethod.equals(that.getAccessMethod()) && accessLocation.equals(that.getAccessLocation())); } public String toString() { String method = null; - if (accessMethod.equals((Object)Ad_CAISSUERS_Id)) { + if (accessMethod.equals(Ad_CAISSUERS_Id)) { method = "caIssuers"; - } else if (accessMethod.equals((Object)Ad_CAREPOSITORY_Id)) { + } else if (accessMethod.equals(Ad_CAREPOSITORY_Id)) { method = "caRepository"; - } else if (accessMethod.equals((Object)Ad_TIMESTAMPING_Id)) { + } else if (accessMethod.equals(Ad_TIMESTAMPING_Id)) { method = "timeStamping"; - } else if (accessMethod.equals((Object)Ad_OCSP_Id)) { + } else if (accessMethod.equals(Ad_OCSP_Id)) { method = "ocsp"; } else { method = accessMethod.toString();
--- a/jdk/src/java.base/share/classes/sun/security/x509/CertificateExtensions.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/x509/CertificateExtensions.java Thu Jul 02 17:50:25 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 @@ -241,7 +241,7 @@ public String getNameByOid(ObjectIdentifier oid) throws IOException { for (String name: map.keySet()) { - if (map.get(name).getExtensionId().equals((Object)oid)) { + if (map.get(name).getExtensionId().equals(oid)) { return name; } }
--- a/jdk/src/java.base/share/classes/sun/security/x509/CertificatePolicyId.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/x509/CertificatePolicyId.java Thu Jul 02 17:50:25 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 @@ -93,8 +93,7 @@ */ public boolean equals(Object other) { if (other instanceof CertificatePolicyId) - return id.equals((Object) - ((CertificatePolicyId) other).getIdentifier()); + return id.equals(((CertificatePolicyId) other).getIdentifier()); else return false; }
--- a/jdk/src/java.base/share/classes/sun/security/x509/Extension.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/x509/Extension.java Thu Jul 02 17:50:25 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 @@ -264,7 +264,7 @@ Extension otherExt = (Extension) other; if (critical != otherExt.critical) return false; - if (!extensionId.equals((Object)otherExt.extensionId)) + if (!extensionId.equals(otherExt.extensionId)) return false; return Arrays.equals(extensionValue, otherExt.extensionValue); }
--- a/jdk/src/java.base/share/classes/sun/security/x509/NameConstraintsExtension.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/x509/NameConstraintsExtension.java Thu Jul 02 17:50:25 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 @@ -579,7 +579,7 @@ public boolean verifyRFC822SpecialCase(X500Name subject) throws IOException { for (AVA ava : subject.allAvas()) { ObjectIdentifier attrOID = ava.getObjectIdentifier(); - if (attrOID.equals((Object)PKCS9Attribute.EMAIL_ADDRESS_OID)) { + if (attrOID.equals(PKCS9Attribute.EMAIL_ADDRESS_OID)) { String attrValue = ava.getValueString(); if (attrValue != null) { RFC822Name emailName;
--- a/jdk/src/java.base/share/classes/sun/security/x509/OIDName.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/x509/OIDName.java Thu Jul 02 17:50:25 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 @@ -120,7 +120,7 @@ OIDName other = (OIDName)obj; - return oid.equals((Object)other.oid); + return oid.equals(other.oid); } /**
--- a/jdk/src/java.base/share/classes/sun/security/x509/OtherName.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/x509/OtherName.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * 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 @@ -176,7 +176,7 @@ return false; } OtherName otherOther = (OtherName)other; - if (!(otherOther.oid.equals((Object)oid))) { + if (!(otherOther.oid.equals(oid))) { return false; } GeneralNameInterface otherGNI = null;
--- a/jdk/src/java.base/share/classes/sun/security/x509/RDN.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/x509/RDN.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 @@ -321,7 +321,7 @@ */ DerValue findAttribute(ObjectIdentifier oid) { for (int i = 0; i < assertion.length; i++) { - if (assertion[i].oid.equals((Object)oid)) { + if (assertion[i].oid.equals(oid)) { return assertion[i].value; } }
--- a/jdk/src/java.base/share/classes/sun/security/x509/X509CRLEntryImpl.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/x509/X509CRLEntryImpl.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, 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 @@ -414,7 +414,7 @@ e.hasMoreElements();) { ex = e.nextElement(); inCertOID = ex.getExtensionId(); - if (inCertOID.equals((Object)findOID)) { + if (inCertOID.equals(findOID)) { crlExt = ex; break; }
--- a/jdk/src/java.base/share/classes/sun/security/x509/X509CRLImpl.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/x509/X509CRLImpl.java Thu Jul 02 17:50:25 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 @@ -1039,7 +1039,7 @@ e.hasMoreElements();) { ex = e.nextElement(); inCertOID = ex.getExtensionId(); - if (inCertOID.equals((Object)findOID)) { + if (inCertOID.equals(findOID)) { crlExt = ex; break; }
--- a/jdk/src/java.base/share/classes/sun/security/x509/X509CertImpl.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/x509/X509CertImpl.java Thu Jul 02 17:50:25 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 @@ -1339,7 +1339,7 @@ return ex; } for (Extension ex2: extensions.getAllExtensions()) { - if (ex2.getExtensionId().equals((Object)oid)) { + if (ex2.getExtensionId().equals(oid)) { //XXXX May want to consider cloning this return ex2; } @@ -1395,7 +1395,7 @@ for (Extension ex : exts.getAllExtensions()) { ObjectIdentifier inCertOID = ex.getExtensionId(); - if (inCertOID.equals((Object)findOID)) { + if (inCertOID.equals(findOID)) { certExt = ex; break; }
--- a/jdk/src/java.base/share/classes/sun/text/normalizer/UnicodeSet.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/text/normalizer/UnicodeSet.java Thu Jul 02 17:50:25 2015 -0700 @@ -1850,7 +1850,7 @@ syntaxError(chars, "Invalid property pattern"); } chars.jumpahead(pos.getIndex()); - rebuiltPat.append(patStr.substring(0, pos.getIndex())); + rebuiltPat.append(patStr, 0, pos.getIndex()); } //----------------------------------------------------------------
--- a/jdk/src/java.base/share/classes/sun/util/BuddhistCalendar.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/util/BuddhistCalendar.java Thu Jul 02 17:50:25 2015 -0700 @@ -242,12 +242,13 @@ return s; } p += yearField.length(); - StringBuilder sb = new StringBuilder(s.substring(0, p)); + StringBuilder sb = new StringBuilder(s.length() + 10); + sb.append(s, 0, p); // Skip the year number while (Character.isDigit(s.charAt(p++))) ; int year = internalGet(YEAR) + BUDDHIST_YEAR_OFFSET; - sb.append(year).append(s.substring(p - 1)); + sb.append(year).append(s, p - 1, s.length()); return sb.toString(); }
--- a/jdk/src/java.base/share/native/libjli/java.c Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/share/native/libjli/java.c Thu Jul 02 17:50:25 2015 -0700 @@ -145,7 +145,7 @@ static int knownVMsCount = 0; static int knownVMsLimit = 0; -static void GrowKnownVMs(); +static void GrowKnownVMs(int minimum); static int KnownVMIndex(const char* name); static void FreeKnownVMs(); static jboolean IsWildCardEnabled();
--- a/jdk/src/java.base/unix/classes/java/io/UnixFileSystem.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/unix/classes/java/io/UnixFileSystem.java Thu Jul 02 17:50:25 2015 -0700 @@ -65,8 +65,8 @@ int n = len; while ((n > 0) && (pathname.charAt(n - 1) == '/')) n--; if (n == 0) return "/"; - StringBuffer sb = new StringBuffer(pathname.length()); - if (off > 0) sb.append(pathname.substring(0, off)); + StringBuilder sb = new StringBuilder(pathname.length()); + if (off > 0) sb.append(pathname, 0, off); char prevChar = 0; for (int i = off; i < n; i++) { char c = pathname.charAt(i);
--- a/jdk/src/java.base/unix/classes/sun/nio/fs/MimeTypesFileTypeDetector.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/unix/classes/sun/nio/fs/MimeTypesFileTypeDetector.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -83,18 +83,6 @@ return mimeType; } - // Get the extension of a file name. - private static String getExtension(String name) { - String ext = ""; - if (name != null && !name.isEmpty()) { - int dot = name.indexOf('.'); - if ((dot >= 0) && (dot < name.length() - 1)) { - ext = name.substring(dot + 1); - } - } - return ext; - } - /** * Parse the mime types file, and store the type-extension mappings into * mimeTypeMap. The mime types file is not loaded until the first probe
--- a/jdk/src/java.base/windows/classes/java/io/WinNTFileSystem.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.base/windows/classes/java/io/WinNTFileSystem.java Thu Jul 02 17:50:25 2015 -0700 @@ -104,7 +104,7 @@ if (off < 3) off = 0; /* Avoid fencepost cases with UNC pathnames */ int src; char slash = this.slash; - StringBuffer sb = new StringBuffer(len); + StringBuilder sb = new StringBuilder(len); if (off == 0) { /* Complete normalization, including prefix */ @@ -112,7 +112,7 @@ } else { /* Partial normalization */ src = off; - sb.append(path.substring(0, off)); + sb.append(path, 0, off); } /* Remove redundant slashes from the remainder of the path, forcing all @@ -156,8 +156,7 @@ } } - String rv = sb.toString(); - return rv; + return sb.toString(); } /* A normal Win32 pathname contains no duplicate slashes, except possibly @@ -172,7 +171,7 @@ else directory-relative (has form "z:foo") 3 absolute local pathname (begins with "z:\\") */ - private int normalizePrefix(String path, int len, StringBuffer sb) { + private int normalizePrefix(String path, int len, StringBuilder sb) { int src = 0; while ((src < len) && isSlash(path.charAt(src))) src++; char c;
--- a/jdk/src/java.desktop/macosx/classes/apple/laf/JRSUIControl.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.desktop/macosx/classes/apple/laf/JRSUIControl.java Thu Jul 02 17:50:25 2015 -0700 @@ -275,7 +275,7 @@ } - Hit getHitForPoint(final double x, final double y, final double w, final double h, final double hitX, final double hitY) { + Hit getHitForPoint(final int x, final int y, final int w, final int h, final int hitX, final int hitY) { sync(); // reflect hitY about the midline of the control before sending to native final Hit hit = JRSUIConstants.getHit(getNativeHitPart(cfDictionaryPtr, priorEncodedProperties, currentEncodedProperties, x, y, w, h, hitX, 2 * y + h - hitY)); @@ -283,7 +283,7 @@ return hit; } - void getPartBounds(final double[] rect, final double x, final double y, final double w, final double h, final int part) { + void getPartBounds(final double[] rect, final int x, final int y, final int w, final int h, final int part) { if (rect == null) throw new NullPointerException("Cannot load null rect"); if (rect.length != 4) throw new IllegalArgumentException("Rect must have four elements"); @@ -292,7 +292,7 @@ priorEncodedProperties = currentEncodedProperties; } - double getScrollBarOffsetChange(final double x, final double y, final double w, final double h, final int offset, final int visibleAmount, final int extent) { + double getScrollBarOffsetChange(final int x, final int y, final int w, final int h, final int offset, final int visibleAmount, final int extent) { sync(); final double offsetChange = getNativeScrollBarOffsetChange(cfDictionaryPtr, priorEncodedProperties, currentEncodedProperties, x, y, w, h, offset, visibleAmount, extent); priorEncodedProperties = currentEncodedProperties;
--- a/jdk/src/java.desktop/macosx/classes/apple/laf/JRSUIUtils.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.desktop/macosx/classes/apple/laf/JRSUIUtils.java Thu Jul 02 17:50:25 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -25,14 +25,15 @@ package apple.laf; +import java.security.AccessController; + +import apple.laf.JRSUIConstants.Hit; +import apple.laf.JRSUIConstants.ScrollBarPart; import com.apple.laf.AquaImageFactory.NineSliceMetrics; - -import apple.laf.JRSUIConstants.*; import sun.security.action.GetPropertyAction; -import java.security.AccessController; +public final class JRSUIUtils { -public class JRSUIUtils { static boolean isLeopard = isMacOSXLeopard(); static boolean isSnowLeopardOrBelow = isMacOSXSnowLeopardOrBelow(); @@ -48,7 +49,9 @@ return currentMacOSXVersionMatchesGivenVersionRange(version, true, false, false); } - static boolean currentMacOSXVersionMatchesGivenVersionRange(final int version, final boolean inclusive, final boolean matchBelow, final boolean matchAbove) { + static boolean currentMacOSXVersionMatchesGivenVersionRange( + final int version, final boolean inclusive, + final boolean matchBelow, final boolean matchAbove) { // split the "10.x.y" version number String osVersion = AccessController.doPrivileged(new GetPropertyAction("os.version")); String[] fragments = osVersion.split("\\."); @@ -99,12 +102,22 @@ return shouldUseScrollToClick(); } - public static void getPartBounds(final double[] rect, final JRSUIControl control, final double x, final double y, final double w, final double h, final ScrollBarPart part) { + public static void getPartBounds(final double[] rect, + final JRSUIControl control, + final int x, final int y, final int w, + final int h, + final ScrollBarPart part) { control.getPartBounds(rect, x, y, w, h, part.ordinal); } - public static double getNativeOffsetChange(final JRSUIControl control, final double x, final double y, final double w, final double h, final int offset, final int visibleAmount, final int extent) { - return control.getScrollBarOffsetChange(x, y, w, h, offset, visibleAmount, extent); + public static double getNativeOffsetChange(final JRSUIControl control, + final int x, final int y, + final int w, final int h, + final int offset, + final int visibleAmount, + final int extent) { + return control.getScrollBarOffsetChange(x, y, w, h, offset, + visibleAmount, extent); } } @@ -115,7 +128,10 @@ } public static class HitDetection { - public static Hit getHitForPoint(final JRSUIControl control, final double x, final double y, final double w, final double h, final double hitX, final double hitY) { + public static Hit getHitForPoint(final JRSUIControl control, + final int x, final int y, final int w, + final int h, final int hitX, + final int hitY) { return control.getHitForPoint(x, y, w, h, hitX, hitY); } }
--- a/jdk/src/java.desktop/share/classes/java/awt/Cursor.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.desktop/share/classes/java/awt/Cursor.java Thu Jul 02 17:50:25 2015 -0700 @@ -26,8 +26,8 @@ import java.beans.ConstructorProperties; import java.io.InputStream; -import java.net.URL; import java.security.AccessController; +import java.security.PrivilegedAction; import java.security.PrivilegedExceptionAction; import java.util.Hashtable; import java.util.Properties; @@ -261,7 +261,7 @@ * @throws IllegalArgumentException if the specified cursor type is * invalid */ - static public Cursor getPredefinedCursor(int type) { + public static Cursor getPredefinedCursor(int type) { if (type < Cursor.DEFAULT_CURSOR || type > Cursor.MOVE_CURSOR) { throw new IllegalArgumentException("illegal cursor type"); } @@ -286,7 +286,7 @@ * <code>GraphicsEnvironment.isHeadless</code> returns true * @exception AWTException in case of erroneous retrieving of the cursor */ - static public Cursor getSystemCustomCursor(final String name) + public static Cursor getSystemCustomCursor(final String name) throws AWTException, HeadlessException { GraphicsEnvironment.checkHeadless(); Cursor cursor = systemCustomCursors.get(name); @@ -330,18 +330,15 @@ } catch (NumberFormatException nfe) { throw new AWTException("failed to parse hotspot property for cursor: " + name); } - - try { - final Toolkit toolkit = Toolkit.getDefaultToolkit(); - final String file = RESOURCE_PREFIX + fileName; - - cursor = AccessController.doPrivileged( - (PrivilegedExceptionAction<Cursor>) () -> { - URL url = Cursor.class.getResource(file); - Image image = toolkit.getImage(url); - return toolkit.createCustomCursor(image, hotPoint, - localized); - }); + final Toolkit toolkit = Toolkit.getDefaultToolkit(); + final String file = RESOURCE_PREFIX + fileName; + final InputStream in = AccessController.doPrivileged( + (PrivilegedAction<InputStream>) () -> { + return Cursor.class.getResourceAsStream(file); + }); + try (in) { + Image image = toolkit.createImage(in.readAllBytes()); + cursor = toolkit.createCustomCursor(image, hotPoint, localized); } catch (Exception e) { throw new AWTException( "Exception: " + e.getClass() + " " + e.getMessage() + @@ -365,7 +362,7 @@ * * @return the default cursor */ - static public Cursor getDefaultCursor() { + public static Cursor getDefaultCursor() { return getPredefinedCursor(Cursor.DEFAULT_CURSOR); }
--- a/jdk/src/java.desktop/share/classes/java/awt/Toolkit.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.desktop/share/classes/java/awt/Toolkit.java Thu Jul 02 17:50:25 2015 -0700 @@ -58,6 +58,14 @@ import sun.awt.SunToolkit; import sun.util.CoreResourceBundleControl; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.Arrays; +import java.util.ServiceLoader; +import java.util.Set; +import java.util.stream.Collectors; +import javax.accessibility.AccessibilityProvider; + /** * This class is the abstract superclass of all actual * implementations of the Abstract Window Toolkit. Subclasses of @@ -420,7 +428,7 @@ } } - // Get the names of any assistive technolgies to load. First + // Get the names of any assistive technologies to load. First // check the system property and then check the properties // file. String classNames = System.getProperty("javax.accessibility.assistive_technologies"); @@ -436,85 +444,125 @@ } /** - * Loads additional classes into the VM, using the property - * 'assistive_technologies' specified in the Sun reference - * implementation by a line in the 'accessibility.properties' - * file. The form is "assistive_technologies=..." where - * the "..." is a comma-separated list of assistive technology - * classes to load. Each class is loaded in the order given - * and a single instance of each is created using - * Class.forName(class).newInstance(). All errors are handled - * via an AWTError exception. + * Rethrow the AWTError but include the cause. * - * <p>The assumption is made that assistive technology classes are supplied - * as part of INSTALLED (as opposed to: BUNDLED) extensions or specified - * on the class path - * (and therefore can be loaded using the class loader returned by - * a call to <code>ClassLoader.getSystemClassLoader</code>, whose - * delegation parent is the extension class loader for installed - * extensions). + * @param s the error message + * @param e the original exception + * @throw the new AWTError including the cause (the original exception) + */ + private static void newAWTError(Throwable e, String s) { + AWTError newAWTError = new AWTError(s); + newAWTError.initCause(e); + throw newAWTError; + } + + /** + * When a service provider for Assistive Technology is not found look for a + * supporting class on the class path and instantiate it. + * + * @param atName the name of the class to be loaded + */ + private static void fallbackToLoadClassForAT(String atName) { + try { + Class.forName(atName, false, ClassLoader.getSystemClassLoader()).newInstance(); + } catch (ClassNotFoundException e) { + newAWTError(e, "Assistive Technology not found: " + atName); + } catch (InstantiationException e) { + newAWTError(e, "Could not instantiate Assistive Technology: " + atName); + } catch (IllegalAccessException e) { + newAWTError(e, "Could not access Assistive Technology: " + atName); + } catch (Exception e) { + newAWTError(e, "Error trying to install Assistive Technology: " + atName); + } + } + + /** + * Loads accessibility support using the property assistive_technologies. + * The form is assistive_technologies= followed by a comma-separated list of + * assistive technology providers to load. The order in which providers are + * loaded is determined by the order in which the ServiceLoader discovers + * implementations of the AccessibilityProvider interface, not by the order + * of provider names in the property list. When a provider is found its + * accessibility implementation will be started by calling the provider's + * activate method. All errors are handled via an AWTError exception. */ private static void loadAssistiveTechnologies() { // Load any assistive technologies if (atNames != null) { ClassLoader cl = ClassLoader.getSystemClassLoader(); - StringTokenizer parser = new StringTokenizer(atNames," ,"); - String atName; - while (parser.hasMoreTokens()) { - atName = parser.nextToken(); + Set<String> names = Arrays.stream(atNames.split(",")) + .map(String::trim) + .collect(Collectors.toSet()); + final Map<String, AccessibilityProvider> providers = new HashMap<>(); + AccessController.doPrivileged((PrivilegedAction<Void>) () -> { try { - Class<?> clazz; - if (cl != null) { - clazz = cl.loadClass(atName); - } else { - clazz = Class.forName(atName); + for (AccessibilityProvider p : ServiceLoader.load(AccessibilityProvider.class, cl)) { + String name = p.getName(); + if (names.contains(name) && !providers.containsKey(name)) { + p.activate(); + providers.put(name, p); + } } - clazz.newInstance(); - } catch (ClassNotFoundException e) { - throw new AWTError("Assistive Technology not found: " - + atName); - } catch (InstantiationException e) { - throw new AWTError("Could not instantiate Assistive" - + " Technology: " + atName); - } catch (IllegalAccessException e) { - throw new AWTError("Could not access Assistive" - + " Technology: " + atName); - } catch (Exception e) { - throw new AWTError("Error trying to install Assistive" - + " Technology: " + atName + " " + e); + } catch (java.util.ServiceConfigurationError | Exception e) { + newAWTError(e, "Could not load or activate service provider"); } - } + return null; + }); + names.stream() + .filter(n -> !providers.containsKey(n)) + .forEach(Toolkit::fallbackToLoadClassForAT); } } /** * Gets the default toolkit. * <p> - * If a system property named <code>"java.awt.headless"</code> is set - * to <code>true</code> then the headless implementation - * of <code>Toolkit</code> is used. + * If a system property named {@code "java.awt.headless"} is set + * to {@code true} then the headless implementation + * of {@code Toolkit} is used. * <p> - * If there is no <code>"java.awt.headless"</code> or it is set to - * <code>false</code> and there is a system property named - * <code>"awt.toolkit"</code>, + * If there is no {@code "java.awt.headless"} or it is set to + * {@code false} and there is a system property named + * {@code "awt.toolkit"}, * that property is treated as the name of a class that is a subclass - * of <code>Toolkit</code>; + * of {@code Toolkit}; * otherwise the default platform-specific implementation of - * <code>Toolkit</code> is used. + * {@code Toolkit} is used. * <p> - * Also loads additional classes into the VM, using the property - * 'assistive_technologies' specified in the Sun reference - * implementation by a line in the 'accessibility.properties' - * file. The form is "assistive_technologies=..." where - * the "..." is a comma-separated list of assistive technology - * classes to load. Each class is loaded in the order given - * and a single instance of each is created using - * Class.forName(class).newInstance(). This is done just after - * the AWT toolkit is created. All errors are handled via an - * AWTError exception. - * @return the default toolkit. + * If this Toolkit is not a headless implementation and if they exist, service + * providers of {@link javax.accessibility.AccessibilityProvider} will be loaded + * if specified by the system property + * {@code javax.accessibility.assistive_technologies}. + * <p> + * An example of setting this property is to invoke Java with + * {@code -Djavax.accessibility.assistive_technologies=MyServiceProvider}. + * In addition to MyServiceProvider other service providers can be specified + * using a comma separated list. Service providers are loaded after the AWT + * toolkit is created. All errors are handled via an AWTError exception. + * <p> + * The names specified in the assistive_technologies property are used to query + * each service provider implementation. If the requested name matches the + * {@linkplain AccessibilityProvider#getName name} of the service provider, the + * {@link AccessibilityProvider#activate} method will be invoked to activate the + * matching service provider. + * + * @implSpec + * If assistive technology service providers are not specified with a system + * property this implementation will look in a properties file located as follows: + * <ul> + * <li> {@code ${user.home}/.accessibility.properties} + * <li> {@code ${java.home}/conf/accessibility.properties} + * </ul> + * Only the first of these files to be located will be consulted. The requested + * service providers are specified by setting the {@code assistive_technologies=} + * property. A single provider or a comma separated list of providers can be + * specified. + * + * @return the default toolkit. * @exception AWTError if a toolkit could not be found, or * if one could not be accessed or instantiated. + * @see java.util.ServiceLoader + * @see javax.accessibility.AccessibilityProvider */ public static synchronized Toolkit getDefaultToolkit() { if (toolkit == null) { @@ -550,7 +598,9 @@ return null; } }); - loadAssistiveTechnologies(); + if (!GraphicsEnvironment.isHeadless()) { + loadAssistiveTechnologies(); + } } return toolkit; }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.desktop/share/classes/javax/accessibility/AccessibilityProvider.java Thu Jul 02 17:50:25 2015 -0700 @@ -0,0 +1,93 @@ +/* + * 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. 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. + */ +package javax.accessibility; + +/** + * Service Provider Interface (SPI) for Assistive Technology. + * <p> + * This service provider class provides mappings from the platform + * specific accessibility APIs to the Java Accessibility API. + * <p> + * Each service provider implementation is named and can be activated via the + * {@link #activate} method. Service providers can be loaded when the default + * {@link java.awt.Toolkit toolkit} is initialized. + * + * @apiNote There will typically be one provider per platform, such as Windows + * or Linux, to support accessibility for screen readers and magnifiers. However, + * more than one service provider can be activated. For example, a test tool + * which provides visual results obtained by interrogating the Java Accessibility + * API can be activated along with the activation of the support for screen readers + * and screen magnifiers. + * + * @see java.awt.Toolkit#getDefaultToolkit + * @see java.util.ServiceLoader + * @since 1.9 + */ +public abstract class AccessibilityProvider { + + /** + * Initializes a new accessibility provider. + * + * @throws SecurityException + * If a security manager has been installed and it denies + * {@link RuntimePermission} {@code "accessibilityProvider"} + */ + protected AccessibilityProvider() { + // Use a permission check when calling a private constructor to check that + // the proper security permission has been granted before the Object superclass + // is called. If an exception is thrown before the Object superclass is + // constructed a finalizer in a subclass of this class will not be run. + // This protects against a finalizer vulnerability. + this(checkPermission()); + } + + private AccessibilityProvider(Void ignore) { } + + /** + * If this code is running with a security manager and if the permission + * "accessibilityProvider" has not been granted SecurityException will be thrown. + * + */ + private static Void checkPermission() { + SecurityManager sm = System.getSecurityManager(); + if (sm != null) + sm.checkPermission(new RuntimePermission("accessibilityProvider")); + return null; + } + + /** + * Returns the name of this service provider. This name is used to locate a + * requested service provider. + * + * @return the name of this service provider + */ + public abstract String getName(); + + /** + * Activates the support provided by this service provider. + */ + public abstract void activate(); + +}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/metal/MetalTabbedPaneUI.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/metal/MetalTabbedPaneUI.java Thu Jul 02 17:50:25 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 @@ -896,11 +896,12 @@ // Paint the background for the tab area if ( tabPane.isOpaque() ) { - if (!c.isBackgroundSet() && (tabAreaBackground != null)) { + Color background = c.getBackground(); + if (background instanceof UIResource && tabAreaBackground != null) { g.setColor(tabAreaBackground); } else { - g.setColor( c.getBackground() ); + g.setColor(background); } switch ( tabPlacement ) { case LEFT:
--- a/jdk/src/java.desktop/share/classes/sun/awt/SunToolkit.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.desktop/share/classes/sun/awt/SunToolkit.java Thu Jul 02 17:50:25 2015 -0700 @@ -291,7 +291,7 @@ // Maps from non-Component/MenuComponent to AppContext. // WeakHashMap<Component,AppContext> private static final Map<Object, AppContext> appContextMap = - Collections.synchronizedMap(new WeakHashMap<Object, AppContext>()); + Collections.synchronizedMap(new WeakIdentityHashMap<Object, AppContext>()); /** * Sets the appContext field of target. If target is not a Component or
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.desktop/share/classes/sun/awt/WeakIdentityHashMap.java Thu Jul 02 17:50:25 2015 -0700 @@ -0,0 +1,195 @@ +package sun.awt; + +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.lang.ref.WeakReference; +import java.util.*; + +// A weak key reference hash map that uses System.identityHashCode() and "==" +// instead of hashCode() and equals(Object) +class WeakIdentityHashMap<K, V> implements Map<K, V> { + private final Map<WeakKey<K>, V> map; + private final transient ReferenceQueue<K> queue = new ReferenceQueue<K>(); + + /** + * Constructs a new, empty identity hash map with a default initial + * size (16). + */ + public WeakIdentityHashMap() { + map = new HashMap<>(16); + } + + /** + * Constructs a new, empty identity map with the specified initial size. + */ + public WeakIdentityHashMap(int initialSize) { + map = new HashMap<>(initialSize); + } + + private Map<WeakKey<K>, V> getMap() { + for(Reference<? extends K> ref; (ref = this.queue.poll()) != null;) { + map.remove(ref); + } + return map; + } + + @Override + public int size() { + return getMap().size(); + } + + @Override + public boolean isEmpty() { + return getMap().isEmpty(); + } + + @Override + public boolean containsKey(Object key) { + return getMap().containsKey(new WeakKey<>(key, null)); + } + + @Override + public boolean containsValue(Object value) { + return getMap().containsValue(value); + } + + @Override + public V get(Object key) { + return getMap().get(new WeakKey<>(key, null)); + } + + @Override + public V put(K key, V value) { + return getMap().put(new WeakKey<K>(key, queue), value); + } + + @Override + public V remove(Object key) { + return getMap().remove(new WeakKey<>(key, null)); + } + + @Override + public void putAll(Map<? extends K, ? extends V> m) { + for (Entry<? extends K, ? extends V> entry : m.entrySet()) { + put(entry.getKey(), entry.getValue()); + } + } + + @Override + public void clear() { + getMap().clear(); + } + + @Override + public Set<K> keySet() { + return new AbstractSet<K>() { + @Override + public Iterator<K> iterator() { + return new Iterator<K>() { + private K next; + Iterator<WeakKey<K>> iterator = getMap().keySet().iterator(); + + @Override + public boolean hasNext() { + while (iterator.hasNext()) { + if ((next = iterator.next().get()) != null) { + return true; + } + } + return false; + } + + @Override + public K next() { + if(next == null && !hasNext()) { + throw new NoSuchElementException(); + } + K ret = next; + next = null; + return ret; + } + }; + } + + @Override + public int size() { + return getMap().keySet().size(); + } + }; + } + + @Override + public Collection<V> values() { + return getMap().values(); + } + + @Override + public Set<Entry<K, V>> entrySet() { + return new AbstractSet<Entry<K, V>>() { + @Override + public Iterator<Entry<K, V>> iterator() { + final Iterator<Entry<WeakKey<K>, V>> iterator = getMap().entrySet().iterator(); + return new Iterator<Entry<K, V>>() { + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public Entry<K, V> next() { + return new Entry<K, V>() { + Entry<WeakKey<K>, V> entry = iterator.next(); + + @Override + public K getKey() { + return entry.getKey().get(); + } + + @Override + public V getValue() { + return entry.getValue(); + } + + @Override + public V setValue(V value) { + return null; + } + }; + } + }; + } + + @Override + public int size() { + return getMap().entrySet().size(); + } + }; + } + + private static class WeakKey<K> extends WeakReference<K> { + private final int hash; + + WeakKey(K key, ReferenceQueue <K> q) { + super(key, q); + hash = System.identityHashCode(key); + } + + @Override + public boolean equals(Object o) { + if(this == o) { + return true; + } else if( o instanceof WeakKey ) { + return get() == ((WeakKey)o).get(); + } else { + return false; + } + } + + @Override + public int hashCode() { + return hash; + } + } + + +}
--- a/jdk/src/java.desktop/share/native/libfontmanager/layout/LookupProcessor.cpp Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/LookupProcessor.cpp Thu Jul 02 17:50:25 2015 -0700 @@ -175,7 +175,7 @@ LEReferenceTo<LangSysTable> langSysTable; le_uint16 featureCount = 0; le_uint16 lookupListCount = 0; - le_uint16 requiredFeatureIndex; + le_uint16 requiredFeatureIndex = 0xFFFF; if (LE_FAILURE(success)) { return;
--- a/jdk/src/java.desktop/share/native/liblcms/cmsopt.c Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.desktop/share/native/liblcms/cmsopt.c Thu Jul 02 17:50:25 2015 -0700 @@ -260,7 +260,9 @@ cmsStage* Multmat = cmsStageAllocMatrix(Lut->ContextID, 3, 3, (const cmsFloat64Number*) &res, NULL); // Recover the chain - Multmat->Next = chain; + if (Multmat != NULL) { + Multmat->Next = chain; + } *pt1 = Multmat; }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java Thu Jul 02 17:50:25 2015 -0700 @@ -2466,7 +2466,7 @@ private static XEventDispatcher oops_waiter; private static boolean oops_updated; - private static boolean oops_move; + private static int oops_position = 0; /** * @inheritDoc @@ -2495,9 +2495,12 @@ oops_updated = false; long event_number = getEventNumber(); // Generate OOPS ConfigureNotify event - XlibWrapper.XMoveWindow(getDisplay(), win.getWindow(), oops_move ? 0 : 1, 0); + XlibWrapper.XMoveWindow(getDisplay(), win.getWindow(), ++oops_position, 0); // Change win position each time to avoid system optimization - oops_move = !oops_move; + if (oops_position > 50) { + oops_position = 0; + } + XSync(); eventLog.finer("Generated OOPS ConfigureNotify event");
--- a/jdk/src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolder2.java Thu Jul 02 17:15:55 2015 -0700 +++ b/jdk/src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolder2.java Thu Jul 02 17:50:25 2015 -0700 @@ -29,6 +29,7 @@ import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; import java.util.*; import java.util.concurrent.*; @@ -233,6 +234,7 @@ private Image smallIcon = null; private Image largeIcon = null; private Boolean isDir = null; + private final boolean isLib; /* * The following is to identify the My Documents folder as being special @@ -254,6 +256,7 @@ // Desktop is parent of DRIVES and NETWORK, not necessarily // other special shell folders. super(null, composePathForCsidl(csidl)); + isLib = false; invoke(new Callable<Void>() { public Void call() throws InterruptedException { @@ -279,7 +282,7 @@ // Now we know that parent isn't immediate to 'this' because it // has a continued ID list. Create a shell folder for this child // pidl and make it the new 'parent'. - parent = new Win32ShellFolder2((Win32ShellFolder2) parent, childPIDL); + parent = createShellFolder((Win32ShellFolder2) parent, childPIDL); } else { // No grandchildren means we have arrived at the parent of 'this', // and childPIDL is directly relative to parent. @@ -301,8 +304,9 @@ /** * Create a system shell folder */ - Win32ShellFolder2(Win32ShellFolder2 parent, long pIShellFolder, long relativePIDL, String path) { + Win32ShellFolder2(Win32ShellFolder2 parent, long pIShellFolder, long relativePIDL, String path, boolean isLib) { super(parent, (path != null) ? path : "ShellFolder: "); + this.isLib = isLib; this.disposer.pIShellFolder = pIShellFolder; this.disposer.relativePIDL = relativePIDL; sun.java2d.Disposer.addRecord(this, disposer); @@ -312,16 +316,19 @@ /** * Creates a shell folder with a parent and relative PIDL */ - Win32ShellFolder2(final Win32ShellFolder2 parent, final long relativePIDL) throws InterruptedException { - super(parent, - invoke(new Callable<String>() { - public String call() { - return getFileSystemPath(parent.getIShellFolder(), relativePIDL); - } - }, RuntimeException.class) - ); - this.disposer.relativePIDL = relativePIDL; - sun.java2d.Disposer.addRecord(this, disposer); + static Win32ShellFolder2 createShellFolder(Win32ShellFolder2 parent, long pIDL) + throws InterruptedException { + String path = invoke(new Callable<String>() { + public String call() { + return getFileSystemPath(parent.getIShellFolder(), pIDL); + } + }, RuntimeException.class); + String libPath = resolveLibrary(path); + if (libPath == null) { + return new Win32ShellFolder2(parent, 0, pIDL, path, false); + } else { + return new Win32ShellFolder2(parent, 0, pIDL, libPath, true); + } } // Initializes the desktop shell folder @@ -601,20 +608,24 @@ } String path = getDisplayNameOf(parentIShellFolder, relativePIDL, SHGDN_FORPARSING); + return path; + } + + private static String resolveLibrary(String path) { // if this is a library its default save location is taken as a path // this is a temp fix until java.io starts support Libraries if( path != null && path.startsWith("::{") && path.toLowerCase().endsWith(".library-ms")) { for (KnownFolderDefinition kf : KnownFolderDefinition.libraries) { - if( path.toLowerCase().endsWith( - kf.relativePath.toLowerCase()) && - path.toUpperCase().startsWith( - kf.parsingName.substring(0, 40).toUpperCase()) ) { + if (path.toLowerCase().endsWith( + "\\" + kf.relativePath.toLowerCase()) && + path.toUpperCase().startsWith( + kf.parsingName.substring(0, 40).toUpperCase())) { return kf.saveLocation; } } } - return path; + return null; } // Needs to be accessible to Win32ShellFolderManager2 @@ -750,7 +761,7 @@ && pidlsEqual(pIShellFolder, childPIDL, personal.disposer.relativePIDL)) { childFolder = personal; } else { - childFolder = new Win32ShellFolder2(Win32ShellFolder2.this, childPIDL); + childFolder = createShellFolder(Win32ShellFolder2.this, childPIDL); releasePIDL = false; } list.add(childFolder); @@ -790,10 +801,11 @@ while ((childPIDL = getNextChild(pEnumObjects)) != 0) { if (getAttributes0(pIShellFolder, childPIDL, ATTRIB_FILESYSTEM) != 0) { String path = getFileSystemPath(pIShellFolder, childPIDL); + if(isLib) path = resolveLibrary( path ); if (path != null && path.equalsIgnoreCase(filePath)) { long childIShellFolder = bindToObject(pIShellFolder, childPIDL); child = new Win32ShellFolder2(Win32ShellFolder2.this, - childIShellFolder, childPIDL, path); + childIShellFolder, childPIDL, path, isLib); break; } } @@ -839,14 +851,14 @@ return getLinkLocation(true); } - private ShellFolder getLinkLocation(final boolean resolve) { - return invoke(new Callable<ShellFolder>() { - public ShellFolder call() { + private Win32ShellFolder2 getLinkLocation(final boolean resolve) { + return invoke(new Callable<Win32ShellFolder2>() { + public Win32ShellFolder2 call() { if (!isLink()) { return null; } - ShellFolder location = null; + Win32ShellFolder2 location = null; long linkLocationPIDL = getLinkLocation(getParentIShellFolder(), getRelativePIDL(), resolve); if (linkLocationPIDL != 0) { @@ -956,7 +968,7 @@ // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private static native long extractIcon(long parentIShellFolder, long relativePIDL, - boolean getLargeIcon); + boolean getLargeIcon, boolean getDefaultIcon); // Returns an icon from the Windows system icon list in the form of an HICON private static native long getSystemIcon(int iconID); @@ -1007,7 +1019,13 @@ invoke(new Callable<Image>() { public Image call() { Image newIcon = null; - if (isFileSystem()) { + if (isLink()) { + Win32ShellFolder2 folder = getLinkLocation(false); + if (folder != null && folder.isLibrary()) { + return folder.getIcon(getLargeIcon); + } + } + if (isFileSystem() || isLibrary()) { long parentIShellIcon = (parent != null) ? ((Win32ShellFolder2) parent).getIShellIcon() : 0L; @@ -1037,7 +1055,19 @@ if (newIcon == null) { // These are only cached per object long hIcon = extractIcon(getParentIShellFolder(), - getRelativePIDL(), getLargeIcon); + getRelativePIDL(), getLargeIcon, false); + // E_PENDING: loading can take time so get the default + if(hIcon <= 0) { + hIcon = extractIcon(getParentIShellFolder(), + getRelativePIDL(), getLargeIcon, true); + if(hIcon <= 0) { + if (isDirectory()) { + return getShell32Icon(4, getLargeIcon); + } else { + return getShell32Icon(1, getLargeIcon); + } + } + } newIcon = makeIcon(hIcon, getLargeIcon); disposeIcon(hIcon); } @@ -1129,6 +1159,8 @@