OpenJDK / loom / loom
changeset 19135:194016a764d6
Merge
author | duke |
---|---|
date | Wed, 05 Jul 2017 19:06:33 +0200 |
parents | 8de709d0c375 642bb4c26585 |
children | bbe43d712fe0 |
files | jdk/src/share/classes/java/net/package.html nashorn/src/jdk/internal/dynalink/beans/SafeUnreflector.java nashorn/src/jdk/internal/dynalink/beans/SafeUnreflectorImpl.java nashorn/src/jdk/internal/dynalink/beans/SandboxClassLoader.java nashorn/src/jdk/internal/dynalink/beans/sandbox/Unreflector.java nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterGeneratorBase.java nashorn/test/script/representations/NASHORN-592a.js |
diffstat | 516 files changed, 27603 insertions(+), 7536 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags-top-repo Tue Aug 06 10:03:25 2013 -0700 +++ b/.hgtags-top-repo Wed Jul 05 19:06:33 2017 +0200 @@ -222,3 +222,4 @@ 0d0c983a817bbe8518a5ff201306334a8de267f2 jdk8-b98 59dc9da813794c924a0383c2a6241af94defdfed jdk8-b99 d2dcb110e9dbaf9903c05b211df800e78e4b394e jdk8-b100 +9f74a220677dc265a724515d8e2617548cef62f1 jdk8-b101
--- a/corba/.hgtags Tue Aug 06 10:03:25 2013 -0700 +++ b/corba/.hgtags Wed Jul 05 19:06:33 2017 +0200 @@ -222,3 +222,4 @@ 3370fb6146e47a6cc05a213fc213e12fc0a38d07 jdk8-b98 3f67804ab61303782df57e54989ef5e0e4629beb jdk8-b99 8d492f1dfd1b131a4c7886ee6b59528609f7e4fe jdk8-b100 +a013024b07475782f1fa8e196e950b34b4077663 jdk8-b101
--- a/hotspot/.hgtags Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/.hgtags Wed Jul 05 19:06:33 2017 +0200 @@ -363,3 +363,5 @@ 9f71e36a471ae4a668e08827d33035963ed10c08 hs25-b42 5787fac72e760c6a5fd9efa113b0c75caf554136 jdk8-b100 46487ba40ff225654d0c51787ed3839bafcbd9f3 hs25-b43 +f6921c876db192bba389cec062855a66372da01c jdk8-b101 +530fe88b3b2c710f42810b3580d86a0d83ad6c1c hs25-b44
--- a/hotspot/make/bsd/makefiles/minimal1.make Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/make/bsd/makefiles/minimal1.make Wed Jul 05 19:06:33 2017 +0200 @@ -24,16 +24,20 @@ TYPE=MINIMAL1 -INCLUDE_JVMTI ?= false -INCLUDE_FPROF ?= false -INCLUDE_VM_STRUCTS ?= false -INCLUDE_JNI_CHECK ?= false -INCLUDE_SERVICES ?= false -INCLUDE_MANAGEMENT ?= false -INCLUDE_ALL_GCS ?= false -INCLUDE_NMT ?= false -INCLUDE_TRACE ?= false -INCLUDE_CDS ?= false +# Force all variables to false, overriding any other +# setting that may have occurred in the makefiles. These +# can still be overridden by passing the variable as an +# argument to 'make' +INCLUDE_JVMTI := false +INCLUDE_FPROF := false +INCLUDE_VM_STRUCTS := false +INCLUDE_JNI_CHECK := false +INCLUDE_SERVICES := false +INCLUDE_MANAGEMENT := false +INCLUDE_ALL_GCS := false +INCLUDE_NMT := false +INCLUDE_TRACE := false +INCLUDE_CDS := false CXXFLAGS += -DMINIMAL_JVM -DCOMPILER1 -DVMTYPE=\"Minimal\" CFLAGS += -DMINIMAL_JVM -DCOMPILER1 -DVMTYPE=\"Minimal\"
--- a/hotspot/make/hotspot_version Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/make/hotspot_version Wed Jul 05 19:06:33 2017 +0200 @@ -35,7 +35,7 @@ HS_MAJOR_VER=25 HS_MINOR_VER=0 -HS_BUILD_NUMBER=43 +HS_BUILD_NUMBER=44 JDK_MAJOR_VER=1 JDK_MINOR_VER=8
--- a/hotspot/make/linux/makefiles/minimal1.make Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/make/linux/makefiles/minimal1.make Wed Jul 05 19:06:33 2017 +0200 @@ -24,16 +24,20 @@ TYPE=MINIMAL1 -INCLUDE_JVMTI ?= false -INCLUDE_FPROF ?= false -INCLUDE_VM_STRUCTS ?= false -INCLUDE_JNI_CHECK ?= false -INCLUDE_SERVICES ?= false -INCLUDE_MANAGEMENT ?= false -INCLUDE_ALL_GCS ?= false -INCLUDE_NMT ?= false -INCLUDE_TRACE ?= false -INCLUDE_CDS ?= false +# Force all variables to false, overriding any other +# setting that may have occurred in the makefiles. These +# can still be overridden by passing the variable as an +# argument to 'make' +INCLUDE_JVMTI := false +INCLUDE_FPROF := false +INCLUDE_VM_STRUCTS := false +INCLUDE_JNI_CHECK := false +INCLUDE_SERVICES := false +INCLUDE_MANAGEMENT := false +INCLUDE_ALL_GCS := false +INCLUDE_NMT := false +INCLUDE_TRACE := false +INCLUDE_CDS := false CXXFLAGS += -DMINIMAL_JVM -DCOMPILER1 -DVMTYPE=\"Minimal\" CFLAGS += -DMINIMAL_JVM -DCOMPILER1 -DVMTYPE=\"Minimal\"
--- a/hotspot/src/cpu/sparc/vm/c2_globals_sparc.hpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/cpu/sparc/vm/c2_globals_sparc.hpp Wed Jul 05 19:06:33 2017 +0200 @@ -42,7 +42,7 @@ #else define_pd_global(bool, ProfileInterpreter, true); #endif // CC_INTERP -define_pd_global(bool, TieredCompilation, false); +define_pd_global(bool, TieredCompilation, trueInTiered); define_pd_global(intx, CompileThreshold, 10000); define_pd_global(intx, BackEdgeThreshold, 140000);
--- a/hotspot/src/cpu/x86/vm/c2_globals_x86.hpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/cpu/x86/vm/c2_globals_x86.hpp Wed Jul 05 19:06:33 2017 +0200 @@ -44,7 +44,7 @@ #else define_pd_global(bool, ProfileInterpreter, true); #endif // CC_INTERP -define_pd_global(bool, TieredCompilation, false); +define_pd_global(bool, TieredCompilation, trueInTiered); define_pd_global(intx, CompileThreshold, 10000); define_pd_global(intx, BackEdgeThreshold, 100000);
--- a/hotspot/src/share/vm/ci/ciReplay.cpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/share/vm/ci/ciReplay.cpp Wed Jul 05 19:06:33 2017 +0200 @@ -299,7 +299,7 @@ Symbol* method_signature = parse_symbol(CHECK_NULL); Method* m = k->find_method(method_name, method_signature); if (m == NULL) { - report_error("can't find method"); + report_error("Can't find method"); } return m; } @@ -398,8 +398,8 @@ // compile <klass> <name> <signature> <entry_bci> <comp_level> void process_compile(TRAPS) { - // methodHandle method; Method* method = parse_method(CHECK); + if (had_error()) return; int entry_bci = parse_int("entry_bci"); const char* comp_level_label = "comp_level"; int comp_level = parse_int(comp_level_label); @@ -440,6 +440,7 @@ // void process_ciMethod(TRAPS) { Method* method = parse_method(CHECK); + if (had_error()) return; ciMethodRecord* rec = new_ciMethod(method); rec->invocation_counter = parse_int("invocation_counter"); rec->backedge_counter = parse_int("backedge_counter"); @@ -451,6 +452,7 @@ // ciMethodData <klass> <name> <signature> <state> <current mileage> orig <length> # # ... data <length> # # ... oops <length> void process_ciMethodData(TRAPS) { Method* method = parse_method(CHECK); + if (had_error()) return; /* jsut copied from Method, to build interpret data*/ if (InstanceRefKlass::owns_pending_list_lock((JavaThread*)THREAD)) { return;
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp Wed Jul 05 19:06:33 2017 +0200 @@ -122,6 +122,22 @@ } }; +class Par_MarkRefsIntoClosure: public CMSOopsInGenClosure { + private: + const MemRegion _span; + CMSBitMap* _bitMap; + protected: + DO_OOP_WORK_DEFN + public: + Par_MarkRefsIntoClosure(MemRegion span, CMSBitMap* bitMap); + virtual void do_oop(oop* p); + virtual void do_oop(narrowOop* p); + + Prefetch::style prefetch_style() { + return Prefetch::do_read; + } +}; + // A variant of the above used in certain kinds of CMS // marking verification. class MarkRefsIntoVerifyClosure: public CMSOopsInGenClosure {
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Wed Jul 05 19:06:33 2017 +0200 @@ -569,6 +569,7 @@ _restart_addr(NULL), _overflow_list(NULL), _stats(cmsGen), + _eden_chunk_lock(new Mutex(Mutex::leaf + 1, "CMS_eden_chunk_lock", true)), _eden_chunk_array(NULL), // may be set in ctor body _eden_chunk_capacity(0), // -- ditto -- _eden_chunk_index(0), // -- ditto -- @@ -732,7 +733,7 @@ assert(_eden_chunk_array != NULL || _eden_chunk_capacity == 0, "Error"); // Support for parallelizing survivor space rescan - if (CMSParallelRemarkEnabled && CMSParallelSurvivorRemarkEnabled) { + if ((CMSParallelRemarkEnabled && CMSParallelSurvivorRemarkEnabled) || CMSParallelInitialMarkEnabled) { const size_t max_plab_samples = ((DefNewGeneration*)_young_gen)->max_survivor_size()/MinTLABSize; @@ -2137,6 +2138,39 @@ } +void CMSCollector::print_eden_and_survivor_chunk_arrays() { + DefNewGeneration* dng = _young_gen->as_DefNewGeneration(); + EdenSpace* eden_space = dng->eden(); + ContiguousSpace* from_space = dng->from(); + ContiguousSpace* to_space = dng->to(); + // Eden + if (_eden_chunk_array != NULL) { + gclog_or_tty->print_cr("eden " PTR_FORMAT "-" PTR_FORMAT "-" PTR_FORMAT "(" SIZE_FORMAT ")", + eden_space->bottom(), eden_space->top(), + eden_space->end(), eden_space->capacity()); + gclog_or_tty->print_cr("_eden_chunk_index=" SIZE_FORMAT ", " + "_eden_chunk_capacity=" SIZE_FORMAT, + _eden_chunk_index, _eden_chunk_capacity); + for (size_t i = 0; i < _eden_chunk_index; i++) { + gclog_or_tty->print_cr("_eden_chunk_array[" SIZE_FORMAT "]=" PTR_FORMAT, + i, _eden_chunk_array[i]); + } + } + // Survivor + if (_survivor_chunk_array != NULL) { + gclog_or_tty->print_cr("survivor " PTR_FORMAT "-" PTR_FORMAT "-" PTR_FORMAT "(" SIZE_FORMAT ")", + from_space->bottom(), from_space->top(), + from_space->end(), from_space->capacity()); + gclog_or_tty->print_cr("_survivor_chunk_index=" SIZE_FORMAT ", " + "_survivor_chunk_capacity=" SIZE_FORMAT, + _survivor_chunk_index, _survivor_chunk_capacity); + for (size_t i = 0; i < _survivor_chunk_index; i++) { + gclog_or_tty->print_cr("_survivor_chunk_array[" SIZE_FORMAT "]=" PTR_FORMAT, + i, _survivor_chunk_array[i]); + } + } +} + void CMSCollector::getFreelistLocks() const { // Get locks for all free lists in all generations that this // collector is responsible for @@ -3549,6 +3583,31 @@ // CMS work +// The common parts of CMSParInitialMarkTask and CMSParRemarkTask. +class CMSParMarkTask : public AbstractGangTask { + protected: + CMSCollector* _collector; + int _n_workers; + CMSParMarkTask(const char* name, CMSCollector* collector, int n_workers) : + AbstractGangTask(name), + _collector(collector), + _n_workers(n_workers) {} + // Work method in support of parallel rescan ... of young gen spaces + void do_young_space_rescan(uint worker_id, OopsInGenClosure* cl, + ContiguousSpace* space, + HeapWord** chunk_array, size_t chunk_top); + void work_on_young_gen_roots(uint worker_id, OopsInGenClosure* cl); +}; + +// Parallel initial mark task +class CMSParInitialMarkTask: public CMSParMarkTask { + public: + CMSParInitialMarkTask(CMSCollector* collector, int n_workers) : + CMSParMarkTask("Scan roots and young gen for initial mark in parallel", + collector, n_workers) {} + void work(uint worker_id); +}; + // Checkpoint the roots into this generation from outside // this generation. [Note this initial checkpoint need only // be approximate -- we'll do a catch up phase subsequently.] @@ -3646,19 +3705,42 @@ // the klasses. The claimed marks need to be cleared before marking starts. ClassLoaderDataGraph::clear_claimed_marks(); - CMKlassClosure klass_closure(¬Older); + if (CMSPrintEdenSurvivorChunks) { + print_eden_and_survivor_chunk_arrays(); + } + { COMPILER2_PRESENT(DerivedPointerTableDeactivate dpt_deact;) - gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel. - gch->gen_process_strong_roots(_cmsGen->level(), - true, // younger gens are roots - true, // activate StrongRootsScope - false, // not scavenging - SharedHeap::ScanningOption(roots_scanning_options()), - ¬Older, - true, // walk all of code cache if (so & SO_CodeCache) - NULL, - &klass_closure); + if (CMSParallelInitialMarkEnabled && CollectedHeap::use_parallel_gc_threads()) { + // The parallel version. + FlexibleWorkGang* workers = gch->workers(); + assert(workers != NULL, "Need parallel worker threads."); + int n_workers = workers->active_workers(); + CMSParInitialMarkTask tsk(this, n_workers); + gch->set_par_threads(n_workers); + initialize_sequential_subtasks_for_young_gen_rescan(n_workers); + if (n_workers > 1) { + GenCollectedHeap::StrongRootsScope srs(gch); + workers->run_task(&tsk); + } else { + GenCollectedHeap::StrongRootsScope srs(gch); + tsk.work(0); + } + gch->set_par_threads(0); + } else { + // The serial version. + CMKlassClosure klass_closure(¬Older); + gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel. + gch->gen_process_strong_roots(_cmsGen->level(), + true, // younger gens are roots + true, // activate StrongRootsScope + false, // not scavenging + SharedHeap::ScanningOption(roots_scanning_options()), + ¬Older, + true, // walk all of code cache if (so & SO_CodeCache) + NULL, + &klass_closure); + } } // Clear mod-union table; it will be dirtied in the prologue of @@ -4417,7 +4499,9 @@ verify_overflow_empty(); _abort_preclean = false; if (CMSPrecleaningEnabled) { - _eden_chunk_index = 0; + if (!CMSEdenChunksRecordAlways) { + _eden_chunk_index = 0; + } size_t used = get_eden_used(); size_t capacity = get_eden_capacity(); // Don't start sampling unless we will get sufficiently @@ -4526,7 +4610,9 @@ if (!_start_sampling) { return; } - if (_eden_chunk_array) { + // When CMSEdenChunksRecordAlways is true, the eden chunk array + // is populated by the young generation. + if (_eden_chunk_array != NULL && !CMSEdenChunksRecordAlways) { if (_eden_chunk_index < _eden_chunk_capacity) { _eden_chunk_array[_eden_chunk_index] = *_top_addr; // take sample assert(_eden_chunk_array[_eden_chunk_index] <= *_end_addr, @@ -5010,6 +5096,10 @@ // Update the saved marks which may affect the root scans. gch->save_marks(); + if (CMSPrintEdenSurvivorChunks) { + print_eden_and_survivor_chunk_arrays(); + } + { COMPILER2_PRESENT(DerivedPointerTableDeactivate dpt_deact;) @@ -5116,10 +5206,53 @@ } } +void CMSParInitialMarkTask::work(uint worker_id) { + elapsedTimer _timer; + ResourceMark rm; + HandleMark hm; + + // ---------- scan from roots -------------- + _timer.start(); + GenCollectedHeap* gch = GenCollectedHeap::heap(); + Par_MarkRefsIntoClosure par_mri_cl(_collector->_span, &(_collector->_markBitMap)); + CMKlassClosure klass_closure(&par_mri_cl); + + // ---------- young gen roots -------------- + { + work_on_young_gen_roots(worker_id, &par_mri_cl); + _timer.stop(); + if (PrintCMSStatistics != 0) { + gclog_or_tty->print_cr( + "Finished young gen initial mark scan work in %dth thread: %3.3f sec", + worker_id, _timer.seconds()); + } + } + + // ---------- remaining roots -------------- + _timer.reset(); + _timer.start(); + gch->gen_process_strong_roots(_collector->_cmsGen->level(), + false, // yg was scanned above + false, // this is parallel code + false, // not scavenging + SharedHeap::ScanningOption(_collector->CMSCollector::roots_scanning_options()), + &par_mri_cl, + true, // walk all of code cache if (so & SO_CodeCache) + NULL, + &klass_closure); + assert(_collector->should_unload_classes() + || (_collector->CMSCollector::roots_scanning_options() & SharedHeap::SO_CodeCache), + "if we didn't scan the code cache, we have to be ready to drop nmethods with expired weak oops"); + _timer.stop(); + if (PrintCMSStatistics != 0) { + gclog_or_tty->print_cr( + "Finished remaining root initial mark scan work in %dth thread: %3.3f sec", + worker_id, _timer.seconds()); + } +} + // Parallel remark task -class CMSParRemarkTask: public AbstractGangTask { - CMSCollector* _collector; - int _n_workers; +class CMSParRemarkTask: public CMSParMarkTask { CompactibleFreeListSpace* _cms_space; // The per-thread work queues, available here for stealing. @@ -5133,10 +5266,9 @@ CompactibleFreeListSpace* cms_space, int n_workers, FlexibleWorkGang* workers, OopTaskQueueSet* task_queues): - AbstractGangTask("Rescan roots and grey objects in parallel"), - _collector(collector), + CMSParMarkTask("Rescan roots and grey objects in parallel", + collector, n_workers), _cms_space(cms_space), - _n_workers(n_workers), _task_queues(task_queues), _term(n_workers, task_queues) { } @@ -5150,11 +5282,6 @@ void work(uint worker_id); private: - // Work method in support of parallel rescan ... of young gen spaces - void do_young_space_rescan(int i, Par_MarkRefsIntoAndScanClosure* cl, - ContiguousSpace* space, - HeapWord** chunk_array, size_t chunk_top); - // ... of dirty cards in old space void do_dirty_card_rescan_tasks(CompactibleFreeListSpace* sp, int i, Par_MarkRefsIntoAndScanClosure* cl); @@ -5186,6 +5313,25 @@ } }; +void CMSParMarkTask::work_on_young_gen_roots(uint worker_id, OopsInGenClosure* cl) { + DefNewGeneration* dng = _collector->_young_gen->as_DefNewGeneration(); + EdenSpace* eden_space = dng->eden(); + ContiguousSpace* from_space = dng->from(); + ContiguousSpace* to_space = dng->to(); + + HeapWord** eca = _collector->_eden_chunk_array; + size_t ect = _collector->_eden_chunk_index; + HeapWord** sca = _collector->_survivor_chunk_array; + size_t sct = _collector->_survivor_chunk_index; + + assert(ect <= _collector->_eden_chunk_capacity, "out of bounds"); + assert(sct <= _collector->_survivor_chunk_capacity, "out of bounds"); + + do_young_space_rescan(worker_id, cl, to_space, NULL, 0); + do_young_space_rescan(worker_id, cl, from_space, sca, sct); + do_young_space_rescan(worker_id, cl, eden_space, eca, ect); +} + // work_queue(i) is passed to the closure // Par_MarkRefsIntoAndScanClosure. The "i" parameter // also is passed to do_dirty_card_rescan_tasks() and to @@ -5210,23 +5356,7 @@ // work first. // ---------- young gen roots -------------- { - DefNewGeneration* dng = _collector->_young_gen->as_DefNewGeneration(); - EdenSpace* eden_space = dng->eden(); - ContiguousSpace* from_space = dng->from(); - ContiguousSpace* to_space = dng->to(); - - HeapWord** eca = _collector->_eden_chunk_array; - size_t ect = _collector->_eden_chunk_index; - HeapWord** sca = _collector->_survivor_chunk_array; - size_t sct = _collector->_survivor_chunk_index; - - assert(ect <= _collector->_eden_chunk_capacity, "out of bounds"); - assert(sct <= _collector->_survivor_chunk_capacity, "out of bounds"); - - do_young_space_rescan(worker_id, &par_mrias_cl, to_space, NULL, 0); - do_young_space_rescan(worker_id, &par_mrias_cl, from_space, sca, sct); - do_young_space_rescan(worker_id, &par_mrias_cl, eden_space, eca, ect); - + work_on_young_gen_roots(worker_id, &par_mrias_cl); _timer.stop(); if (PrintCMSStatistics != 0) { gclog_or_tty->print_cr( @@ -5334,8 +5464,8 @@ // Note that parameter "i" is not used. void -CMSParRemarkTask::do_young_space_rescan(int i, - Par_MarkRefsIntoAndScanClosure* cl, ContiguousSpace* space, +CMSParMarkTask::do_young_space_rescan(uint worker_id, + OopsInGenClosure* cl, ContiguousSpace* space, HeapWord** chunk_array, size_t chunk_top) { // Until all tasks completed: // . claim an unclaimed task @@ -5530,6 +5660,32 @@ "Else our work is not yet done"); } +// Record object boundaries in _eden_chunk_array by sampling the eden +// top in the slow-path eden object allocation code path and record +// the boundaries, if CMSEdenChunksRecordAlways is true. If +// CMSEdenChunksRecordAlways is false, we use the other asynchronous +// sampling in sample_eden() that activates during the part of the +// preclean phase. +void CMSCollector::sample_eden_chunk() { + if (CMSEdenChunksRecordAlways && _eden_chunk_array != NULL) { + if (_eden_chunk_lock->try_lock()) { + // Record a sample. This is the critical section. The contents + // of the _eden_chunk_array have to be non-decreasing in the + // address order. + _eden_chunk_array[_eden_chunk_index] = *_top_addr; + assert(_eden_chunk_array[_eden_chunk_index] <= *_end_addr, + "Unexpected state of Eden"); + if (_eden_chunk_index == 0 || + ((_eden_chunk_array[_eden_chunk_index] > _eden_chunk_array[_eden_chunk_index-1]) && + (pointer_delta(_eden_chunk_array[_eden_chunk_index], + _eden_chunk_array[_eden_chunk_index-1]) >= CMSSamplingGrain))) { + _eden_chunk_index++; // commit sample + } + _eden_chunk_lock->unlock(); + } + } +} + // Return a thread-local PLAB recording array, as appropriate. void* CMSCollector::get_data_recorder(int thr_num) { if (_survivor_plab_array != NULL && @@ -5553,12 +5709,13 @@ // Merge the per-thread plab arrays into the global survivor chunk // array which will provide the partitioning of the survivor space -// for CMS rescan. +// for CMS initial scan and rescan. void CMSCollector::merge_survivor_plab_arrays(ContiguousSpace* surv, int no_of_gc_threads) { assert(_survivor_plab_array != NULL, "Error"); assert(_survivor_chunk_array != NULL, "Error"); - assert(_collectorState == FinalMarking, "Error"); + assert(_collectorState == FinalMarking || + (CMSParallelInitialMarkEnabled && _collectorState == InitialMarking), "Error"); for (int j = 0; j < no_of_gc_threads; j++) { _cursor[j] = 0; } @@ -5621,7 +5778,7 @@ } // Set up the space's par_seq_tasks structure for work claiming -// for parallel rescan of young gen. +// for parallel initial scan and rescan of young gen. // See ParRescanTask where this is currently used. void CMSCollector:: @@ -6748,6 +6905,28 @@ void MarkRefsIntoClosure::do_oop(oop* p) { MarkRefsIntoClosure::do_oop_work(p); } void MarkRefsIntoClosure::do_oop(narrowOop* p) { MarkRefsIntoClosure::do_oop_work(p); } +Par_MarkRefsIntoClosure::Par_MarkRefsIntoClosure( + MemRegion span, CMSBitMap* bitMap): + _span(span), + _bitMap(bitMap) +{ + assert(_ref_processor == NULL, "deliberately left NULL"); + assert(_bitMap->covers(_span), "_bitMap/_span mismatch"); +} + +void Par_MarkRefsIntoClosure::do_oop(oop obj) { + // if p points into _span, then mark corresponding bit in _markBitMap + assert(obj->is_oop(), "expected an oop"); + HeapWord* addr = (HeapWord*)obj; + if (_span.contains(addr)) { + // this should be made more efficient + _bitMap->par_mark(addr); + } +} + +void Par_MarkRefsIntoClosure::do_oop(oop* p) { Par_MarkRefsIntoClosure::do_oop_work(p); } +void Par_MarkRefsIntoClosure::do_oop(narrowOop* p) { Par_MarkRefsIntoClosure::do_oop_work(p); } + // A variant of the above, used for CMS marking verification. MarkRefsIntoVerifyClosure::MarkRefsIntoVerifyClosure( MemRegion span, CMSBitMap* verification_bm, CMSBitMap* cms_bm): @@ -9305,7 +9484,6 @@ return; } } - // Transfer some number of overflown objects to usual marking // stack. Return true if some objects were transferred. bool MarkRefsIntoAndScanClosure::take_from_overflow_list() { @@ -9377,4 +9555,3 @@ ShouldNotReachHere(); } } -
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Wed Jul 05 19:06:33 2017 +0200 @@ -515,6 +515,8 @@ friend class ConcurrentMarkSweepThread; friend class ConcurrentMarkSweepGeneration; friend class CompactibleFreeListSpace; + friend class CMSParMarkTask; + friend class CMSParInitialMarkTask; friend class CMSParRemarkTask; friend class CMSConcMarkingTask; friend class CMSRefProcTaskProxy; @@ -749,6 +751,7 @@ Generation* _young_gen; // the younger gen HeapWord** _top_addr; // ... Top of Eden HeapWord** _end_addr; // ... End of Eden + Mutex* _eden_chunk_lock; HeapWord** _eden_chunk_array; // ... Eden partitioning array size_t _eden_chunk_index; // ... top (exclusive) of array size_t _eden_chunk_capacity; // ... max entries in array @@ -950,6 +953,7 @@ // Support for parallel remark of survivor space void* get_data_recorder(int thr_num); + void sample_eden_chunk(); CMSBitMap* markBitMap() { return &_markBitMap; } void directAllocated(HeapWord* start, size_t size); @@ -1027,6 +1031,8 @@ // Initialization errors bool completed_initialization() { return _completed_initialization; } + + void print_eden_and_survivor_chunk_arrays(); }; class CMSExpansionCause : public AllStatic { @@ -1317,6 +1323,10 @@ //Delegate to collector return collector()->get_data_recorder(thr_num); } + void sample_eden_chunk() { + //Delegate to collector + return collector()->sample_eden_chunk(); + } // Printing const char* name() const;
--- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp Wed Jul 05 19:06:33 2017 +0200 @@ -96,11 +96,6 @@ "the buffer will be enqueued for processing. A value of 0 " \ "specifies that mutator threads should not do such filtering.") \ \ - develop(intx, G1ExtraRegionSurvRate, 33, \ - "If the young survival rate is S, and there's room left in " \ - "to-space, we will allow regions whose survival rate is up to " \ - "S + (1 - S)*X, where X is this parameter (as a fraction.)") \ - \ develop(bool, G1SATBPrintStubs, false, \ "If true, print generated stubs for the SATB barrier") \ \ @@ -110,9 +105,6 @@ develop(bool, G1RSBarrierRegionFilter, true, \ "If true, generate region filtering code in RS barrier") \ \ - develop(bool, G1RSBarrierNullFilter, true, \ - "If true, generate null-pointer filtering code in RS barrier") \ - \ develop(bool, G1DeferredRSUpdate, true, \ "If true, use deferred RS updates") \ \ @@ -120,9 +112,6 @@ "If true, verify that no dirty cards remain after RS log " \ "processing.") \ \ - develop(bool, G1RSCountHisto, false, \ - "If true, print a histogram of RS occupancies after each pause") \ - \ diagnostic(bool, G1PrintRegionLivenessInfo, false, \ "Prints the liveness information for all regions in the heap " \ "at the end of a marking cycle.") \ @@ -169,9 +158,6 @@ product(uintx, G1ConcRSHotCardLimit, 4, \ "The threshold that defines (>=) a hot card.") \ \ - develop(bool, G1PrintOopAppls, false, \ - "When true, print applications of closures to external locs.") \ - \ develop(intx, G1RSetRegionEntriesBase, 256, \ "Max number of regions in a fine-grain table per MB.") \ \
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Wed Jul 05 19:06:33 2017 +0200 @@ -314,6 +314,11 @@ region_size = MAX_REGION_SIZE; } + if (region_size != G1HeapRegionSize) { + // Update the flag to make sure that PrintFlagsFinal logs the correct value + FLAG_SET_ERGO(uintx, G1HeapRegionSize, region_size); + } + // And recalculate the log. region_size_log = log2_long((jlong) region_size);
--- a/hotspot/src/share/vm/memory/defNewGeneration.cpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/share/vm/memory/defNewGeneration.cpp Wed Jul 05 19:06:33 2017 +0200 @@ -1033,6 +1033,9 @@ // have to use it here, as well. HeapWord* result = eden()->par_allocate(word_size); if (result != NULL) { + if (CMSEdenChunksRecordAlways && _next_gen != NULL) { + _next_gen->sample_eden_chunk(); + } return result; } do { @@ -1063,13 +1066,19 @@ // circular dependency at compile time. if (result == NULL) { result = allocate_from_space(word_size); + } else if (CMSEdenChunksRecordAlways && _next_gen != NULL) { + _next_gen->sample_eden_chunk(); } return result; } HeapWord* DefNewGeneration::par_allocate(size_t word_size, bool is_tlab) { - return eden()->par_allocate(word_size); + HeapWord* res = eden()->par_allocate(word_size); + if (CMSEdenChunksRecordAlways && _next_gen != NULL) { + _next_gen->sample_eden_chunk(); + } + return res; } void DefNewGeneration::gc_prologue(bool full) {
--- a/hotspot/src/share/vm/memory/generation.hpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/share/vm/memory/generation.hpp Wed Jul 05 19:06:33 2017 +0200 @@ -455,6 +455,7 @@ // expected to be GC worker thread-local, with the worker index // indicated by "thr_num". virtual void* get_data_recorder(int thr_num) { return NULL; } + virtual void sample_eden_chunk() {} // Some generations may require some cleanup actions before allowing // a verification.
--- a/hotspot/src/share/vm/memory/metaspace.cpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/share/vm/memory/metaspace.cpp Wed Jul 05 19:06:33 2017 +0200 @@ -2254,10 +2254,11 @@ void SpaceManager::deallocate(MetaWord* p, size_t word_size) { assert_lock_strong(_lock); + size_t raw_word_size = get_raw_word_size(word_size); size_t min_size = TreeChunk<Metablock, FreeList>::min_size(); - assert(word_size >= min_size, + assert(raw_word_size >= min_size, err_msg("Should not deallocate dark matter " SIZE_FORMAT, word_size)); - block_freelists()->return_block(p, word_size); + block_freelists()->return_block(p, raw_word_size); } // Adds a chunk to the list of chunks in use.
--- a/hotspot/src/share/vm/memory/sharedHeap.cpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/share/vm/memory/sharedHeap.cpp Wed Jul 05 19:06:33 2017 +0200 @@ -65,7 +65,8 @@ } _sh = this; // ch is static, should be set only once. if ((UseParNewGC || - (UseConcMarkSweepGC && CMSParallelRemarkEnabled) || + (UseConcMarkSweepGC && (CMSParallelInitialMarkEnabled || + CMSParallelRemarkEnabled)) || UseG1GC) && ParallelGCThreads > 0) { _workers = new FlexibleWorkGang("Parallel GC Threads", ParallelGCThreads,
--- a/hotspot/src/share/vm/runtime/arguments.cpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/share/vm/runtime/arguments.cpp Wed Jul 05 19:06:33 2017 +0200 @@ -1891,6 +1891,10 @@ warning("Using MaxGCMinorPauseMillis as minor pause goal is deprecated" "and will likely be removed in future release"); } + if (FLAG_IS_CMDLINE(DefaultMaxRAMFraction)) { + warning("DefaultMaxRAMFraction is deprecated and will likely be removed in a future release. " + "Use MaxRAMFraction instead."); + } } // Check stack pages settings
--- a/hotspot/src/share/vm/runtime/globals.hpp Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/src/share/vm/runtime/globals.hpp Wed Jul 05 19:06:33 2017 +0200 @@ -1689,6 +1689,9 @@ product(bool, CMSAbortSemantics, false, \ "Whether abort-on-overflow semantics is implemented") \ \ + product(bool, CMSParallelInitialMarkEnabled, true, \ + "Use the parallel initial mark.") \ + \ product(bool, CMSParallelRemarkEnabled, true, \ "Whether parallel remark enabled (only if ParNewGC)") \ \ @@ -1700,6 +1703,14 @@ "Whether to always record survivor space PLAB bdries" \ " (effective only if CMSParallelSurvivorRemarkEnabled)") \ \ + product(bool, CMSEdenChunksRecordAlways, true, \ + "Whether to always record eden chunks used for " \ + "the parallel initial mark or remark of eden" ) \ + \ + product(bool, CMSPrintEdenSurvivorChunks, false, \ + "Print the eden and the survivor chunks used for the parallel " \ + "initial mark or remark of the eden/survivor spaces") \ + \ product(bool, CMSConcurrentMTEnabled, true, \ "Whether multi-threaded concurrent work enabled (if ParNewGC)") \ \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/gc/arguments/TestG1HeapRegionSize.java Wed Jul 05 19:06:33 2017 +0200 @@ -0,0 +1,64 @@ +/* +* Copyright (c) 2013, 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 TestG1HeapRegionSize + * @key gc + * @bug 8021879 + * @summary Verify that the flag G1HeapRegionSize is updated properly + * @run main/othervm -Xmx64m TestG1HeapRegionSize 1048576 + * @run main/othervm -XX:G1HeapRegionSize=2m -Xmx64m TestG1HeapRegionSize 2097152 + * @run main/othervm -XX:G1HeapRegionSize=3m -Xmx64m TestG1HeapRegionSize 2097152 + * @run main/othervm -XX:G1HeapRegionSize=64m -Xmx256m TestG1HeapRegionSize 33554432 + */ + +import sun.management.ManagementFactoryHelper; +import com.sun.management.HotSpotDiagnosticMXBean; +import com.sun.management.VMOption; + +public class TestG1HeapRegionSize { + + public static void main(String[] args) { + HotSpotDiagnosticMXBean diagnostic = ManagementFactoryHelper.getDiagnosticMXBean(); + + VMOption option = diagnostic.getVMOption("UseG1GC"); + if (option.getValue().equals("false")) { + System.out.println("Skipping this test. It is only a G1 test."); + return; + } + + String expectedValue = getExpectedValue(args); + option = diagnostic.getVMOption("G1HeapRegionSize"); + if (!expectedValue.equals(option.getValue())) { + throw new RuntimeException("Wrong value for G1HeapRegionSize. Expected " + expectedValue + " but got " + option.getValue()); + } + } + + private static String getExpectedValue(String[] args) { + if (args.length != 1) { + throw new RuntimeException("Wrong number of arguments. Expected 1 but got " + args.length); + } + return args[0]; + } + +}
--- a/hotspot/test/gc/g1/TestPrintRegionRememberedSetInfo.java Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/test/gc/g1/TestPrintRegionRememberedSetInfo.java Wed Jul 05 19:06:33 2017 +0200 @@ -27,7 +27,7 @@ * @bug 8014240 * @summary Test output of G1PrintRegionRememberedSetInfo * @library /testlibrary - * @build TestPrintRegionRememberedSetInfo + * @run main TestPrintRegionRememberedSetInfo * @author thomas.schatzl@oracle.com */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/gc/startup_warnings/TestDefaultMaxRAMFraction.java Wed Jul 05 19:06:33 2017 +0200 @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2013, 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 TestDefaultMaxRAMFraction +* @key gc +* @bug 8021967 +* @summary Test that the deprecated TestDefaultMaxRAMFraction flag print a warning message +* @library /testlibrary +*/ + +import com.oracle.java.testlibrary.OutputAnalyzer; +import com.oracle.java.testlibrary.ProcessTools; + +public class TestDefaultMaxRAMFraction { + public static void main(String[] args) throws Exception { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:DefaultMaxRAMFraction=4", "-version"); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldContain("warning: DefaultMaxRAMFraction is deprecated and will likely be removed in a future release. Use MaxRAMFraction instead."); + output.shouldNotContain("error"); + output.shouldHaveExitValue(0); + } + +}
--- a/hotspot/test/runtime/6929067/Test6929067.sh Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/test/runtime/6929067/Test6929067.sh Wed Jul 05 19:06:33 2017 +0200 @@ -3,6 +3,7 @@ ## ## @test Test6929067.sh ## @bug 6929067 +## @bug 8021296 ## @summary Stack guard pages should be removed when thread is detached ## @compile T.java ## @run shell Test6929067.sh @@ -21,6 +22,11 @@ OS=`uname -s` case "$OS" in Linux) + gcc_cmd=`which gcc` + if [ "x$gcc_cmd" == "x" ]; then + echo "WARNING: gcc not found. Cannot execute test." 2>&1 + exit 0; + fi NULL=/dev/null PS=":" FS="/" @@ -119,10 +125,10 @@ # Check to ensure you have a /usr/lib/libpthread.so if you don't please look # for /usr/lib/`uname -m`-linux-gnu version ensure to add that path to below compilation. -gcc -DLINUX ${COMP_FLAG} -o invoke \ - -I${COMPILEJAVA}/include -I${COMPILEJAVA}/include/linux \ - -L${COMPILEJAVA}/jre/lib/${ARCH}/${VMTYPE} \ - -ljvm -lpthread invoke.c +$gcc_cmd -DLINUX ${COMP_FLAG} -o invoke \ + -I${COMPILEJAVA}/include -I${COMPILEJAVA}/include/linux \ + -L${COMPILEJAVA}/jre/lib/${ARCH}/${VMTYPE} \ + -ljvm -lpthread invoke.c ./invoke exit $?
--- a/hotspot/test/runtime/7107135/Test7107135.sh Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/test/runtime/7107135/Test7107135.sh Wed Jul 05 19:06:33 2017 +0200 @@ -27,6 +27,7 @@ ## ## @test Test7107135.sh ## @bug 7107135 +## @bug 8021296 ## @summary Stack guard pages lost after loading library with executable stack. ## @run shell Test7107135.sh ## @@ -45,6 +46,11 @@ case "$OS" in Linux) echo "Testing on Linux" + gcc_cmd=`which gcc` + if [ "x$gcc_cmd" == "x" ]; then + echo "WARNING: gcc not found. Cannot execute test." 2>&1 + exit 0; + fi ;; *) NULL=NUL @@ -62,7 +68,10 @@ cp ${TESTSRC}${FS}*.java ${THIS_DIR} ${TESTJAVA}${FS}bin${FS}javac *.java -gcc -fPIC -shared -c -o test.o -I${TESTJAVA}${FS}include -I${TESTJAVA}${FS}include${FS}linux ${TESTSRC}${FS}test.c +$gcc_cmd -fPIC -shared -c -o test.o \ + -I${TESTJAVA}${FS}include -I${TESTJAVA}${FS}include${FS}linux \ + ${TESTSRC}${FS}test.c + ld -shared -z execstack -o libtest-rwx.so test.o ld -shared -z noexecstack -o libtest-rw.so test.o
--- a/hotspot/test/runtime/jsig/Test8017498.sh Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/test/runtime/jsig/Test8017498.sh Wed Jul 05 19:06:33 2017 +0200 @@ -27,6 +27,7 @@ ## @test Test8017498.sh ## @bug 8017498 ## @bug 8020791 +## @bug 8021296 ## @summary sigaction(sig) results in process hang/timed-out if sig is much greater than SIGRTMAX ## @run shell/timeout=30 Test8017498.sh ## @@ -45,6 +46,11 @@ case "$OS" in Linux) echo "Testing on Linux" + gcc_cmd=`which gcc` + if [ "x$gcc_cmd" == "x" ]; then + echo "WARNING: gcc not found. Cannot execute test." 2>&1 + exit 0; + fi if [ "$VM_BITS" = "64" ] then MY_LD_PRELOAD=${TESTJAVA}${FS}jre${FS}lib${FS}amd64${FS}libjsig.so @@ -64,15 +70,11 @@ cp ${TESTSRC}${FS}*.java ${THIS_DIR} ${TESTJAVA}${FS}bin${FS}javac *.java -gcc -DLINUX -fPIC -shared \ +$gcc_cmd -DLINUX -fPIC -shared \ -o ${TESTSRC}${FS}libTestJNI.so \ -I${TESTJAVA}${FS}include \ -I${TESTJAVA}${FS}include${FS}linux \ ${TESTSRC}${FS}TestJNI.c -if [ $? != 0 ] -then - echo "WARNING: the gcc command failed." 2>&1 -fi # run the java test in the background cmd="LD_PRELOAD=$MY_LD_PRELOAD \
--- a/hotspot/test/runtime/jsig/TestJNI.c Tue Aug 06 10:03:25 2013 -0700 +++ b/hotspot/test/runtime/jsig/TestJNI.c Wed Jul 05 19:06:33 2017 +0200 @@ -21,7 +21,6 @@ * questions. */ -#define _GNU_SOURCE // for the definition of REG_RIP in ucontext.h #include <stdio.h> #include <jni.h> #include <signal.h> @@ -32,11 +31,8 @@ #endif void sig_handler(int sig, siginfo_t *info, ucontext_t *context) { - int thrNum; printf( " HANDLER (1) " ); - // Move forward RIP to skip failing instruction - context->uc_mcontext.gregs[REG_RIP] += 6; } JNIEXPORT void JNICALL Java_TestJNI_doSomething(JNIEnv *env, jclass klass, jint val) {
--- a/jaxp/.hgtags Tue Aug 06 10:03:25 2013 -0700 +++ b/jaxp/.hgtags Wed Jul 05 19:06:33 2017 +0200 @@ -222,3 +222,4 @@ 15e5bb51bc0cd89304dc2f7f29b4c8002e632353 jdk8-b98 adf49c3ef83c160d53ece623049b2cdccaf78fc7 jdk8-b99 5d1974c1d7b9a86431bc253dc5a6a52d4586622e jdk8-b100 +0a7432f898e579ea35e8c51e3edab37f949168e4 jdk8-b101
--- a/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java Wed Jul 05 19:06:33 2017 +0200 @@ -112,7 +112,7 @@ /** Initial EntityResolver */ private final EntityResolver fInitEntityResolver; - private XMLSecurityPropertyManager fSecurityPropertyMgr; + private final XMLSecurityPropertyManager fSecurityPropertyMgr; /** * Create a SAX parser with the associated features @@ -130,8 +130,10 @@ SAXParserImpl(SAXParserFactoryImpl spf, Hashtable features, boolean secureProcessing) throws SAXException { + fSecurityPropertyMgr = new XMLSecurityPropertyManager(); + // Instantiate a SAXParser directly and not through SAX so that we use the right ClassLoader - xmlReader = new JAXPSAXParser(this); + xmlReader = new JAXPSAXParser(this, fSecurityPropertyMgr); // JAXP "namespaceAware" == SAX Namespaces feature // Note: there is a compatibility problem here with default values: @@ -150,7 +152,6 @@ xmlReader.setFeature0(XINCLUDE_FEATURE, true); } - fSecurityPropertyMgr = new XMLSecurityPropertyManager(); xmlReader.setProperty0(XML_SECURITY_PROPERTY_MANAGER, fSecurityPropertyMgr); // If the secure processing feature is on set a security manager. @@ -397,14 +398,30 @@ private final HashMap fInitFeatures = new HashMap(); private final HashMap fInitProperties = new HashMap(); private final SAXParserImpl fSAXParser; + private XMLSecurityPropertyManager fSecurityPropertyMgr; + public JAXPSAXParser() { - this(null); + this(null, null); } - JAXPSAXParser(SAXParserImpl saxParser) { + JAXPSAXParser(SAXParserImpl saxParser, XMLSecurityPropertyManager spm) { super(); fSAXParser = saxParser; + fSecurityPropertyMgr = spm; + + /** + * This class may be used directly. So initialize the security manager if + * it is null. + */ + if (fSecurityPropertyMgr == null) { + fSecurityPropertyMgr = new XMLSecurityPropertyManager(); + try { + super.setProperty(XML_SECURITY_PROPERTY_MANAGER, fSecurityPropertyMgr); + } catch (Exception ex) { + //shall not happen + } + } } /** @@ -542,9 +559,9 @@ setSchemaValidatorProperty(name, value); } /** Check to see if the property is managed by the property manager **/ - int index = fSAXParser.fSecurityPropertyMgr.getIndex(name); + int index = (fSecurityPropertyMgr != null) ? fSecurityPropertyMgr.getIndex(name) : -1; if (index > -1) { - fSAXParser.fSecurityPropertyMgr.setValue(index, + fSecurityPropertyMgr.setValue(index, XMLSecurityPropertyManager.State.APIPROPERTY, (String)value); } else { if (!fInitProperties.containsKey(name)) { @@ -564,9 +581,9 @@ // JAXP 1.2 support return fSAXParser.schemaLanguage; } - int index = fSAXParser.fSecurityPropertyMgr.getIndex(name); + int index = (fSecurityPropertyMgr != null) ? fSecurityPropertyMgr.getIndex(name) : -1; if (index > -1) { - return fSAXParser.fSecurityPropertyMgr.getValueByIndex(index); + return fSecurityPropertyMgr.getValueByIndex(index); } return super.getProperty(name);
--- a/jaxws/.hgtags Tue Aug 06 10:03:25 2013 -0700 +++ b/jaxws/.hgtags Wed Jul 05 19:06:33 2017 +0200 @@ -222,3 +222,4 @@ b1fb4612a2caea52b5661b87509e560fa044b194 jdk8-b98 8ef83d4b23c933935e28f59b282cea920b1b1f5f jdk8-b99 4fd722afae5c02f00bbd44c3a34425ee474afb1c jdk8-b100 +60b623a361642a0f5aef5f06dad9e5f279b9d9a9 jdk8-b101
--- a/jdk/.hgtags Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/.hgtags Wed Jul 05 19:06:33 2017 +0200 @@ -222,3 +222,4 @@ c4908732fef5235f1b98cafe0ce507771ef7892c jdk8-b98 6a099a36589bd933957272ba63e5263bede29971 jdk8-b99 5be9c5bfcfe9b2a40412b4fb364377d49de014eb jdk8-b100 +6901612328239fbd471d20823113c1cf3fdaebee jdk8-b101
--- a/jdk/src/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java Wed Jul 05 19:06:33 2017 +0200 @@ -31,6 +31,7 @@ import javax.swing.*; import javax.swing.plaf.MenuBarUI; +import com.apple.laf.ScreenMenuBar; import sun.lwawt.macosx.CMenuBar; import com.apple.laf.AquaMenuBarUI; @@ -72,12 +73,15 @@ // scan the current frames, and see if any are foreground final Frame[] frames = Frame.getFrames(); for (final Frame frame : frames) { - if (frame.isVisible() && !isFrameMinimized(frame)) return; + if (frame.isVisible() && !isFrameMinimized(frame)) { + return; + } } // if we have no foreground frames, then we have to "kick" the menubar final JFrame pingFrame = new JFrame(); pingFrame.getRootPane().putClientProperty("Window.alpha", new Float(0.0f)); + pingFrame.setUndecorated(true); pingFrame.setVisible(true); pingFrame.toFront(); pingFrame.setVisible(false); @@ -101,7 +105,6 @@ // Aqua was not installed throw new IllegalStateException("Application.setDefaultMenuBar() only works with the Aqua Look and Feel"); } -/* TODO: disabled until ScreenMenuBar is working final AquaMenuBarUI aquaUI = (AquaMenuBarUI)ui; final ScreenMenuBar screenMenuBar = aquaUI.getScreenMenuBar(); @@ -118,8 +121,7 @@ } // grab the pointer to the CMenuBar, and retain it in native - nativeSetDefaultMenuBar(((CMenuBar)peer).getNativeMenuBarPeer()); -*/ + nativeSetDefaultMenuBar(((CMenuBar)peer).getModel()); } void setAboutMenuItemVisible(final boolean present) {
--- a/jdk/src/macosx/classes/sun/font/CStrike.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/macosx/classes/sun/font/CStrike.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2013, 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 @@ -31,7 +31,7 @@ import sun.awt.SunHints; -public class CStrike extends FontStrike { +public final class CStrike extends FontStrike { // Creates the native strike private static native long createNativeStrikePtr(long nativeFontPtr, @@ -68,10 +68,10 @@ Rectangle2D.Float result, double x, double y); - private CFont nativeFont; + private final CFont nativeFont; private AffineTransform invDevTx; - private GlyphInfoCache glyphInfoCache; - private GlyphAdvanceCache glyphAdvanceCache; + private final GlyphInfoCache glyphInfoCache; + private final GlyphAdvanceCache glyphAdvanceCache; private long nativeStrikePtr; CStrike(final CFont font, final FontStrikeDesc inDesc) { @@ -84,11 +84,11 @@ // Normally the device transform should be the identity transform // for screen operations. The device transform only becomes // interesting when we are outputting between different dpi surfaces, - // like when we are printing to postscript. + // like when we are printing to postscript or use retina. if (inDesc.devTx != null && !inDesc.devTx.isIdentity()) { try { invDevTx = inDesc.devTx.createInverse(); - } catch (NoninvertibleTransformException e) { + } catch (NoninvertibleTransformException ignored) { // ignored, since device transforms should not be that // complicated, and if they are - there is nothing we can do, // so we won't worry about it. @@ -134,15 +134,13 @@ nativeStrikePtr = 0; } - // the fractional metrics default on our platform is OFF - private boolean useFractionalMetrics() { - return desc.fmHint == SunHints.INTVAL_FRACTIONALMETRICS_ON; - } + @Override public int getNumGlyphs() { return nativeFont.getNumGlyphs(); } + @Override StrikeMetrics getFontMetrics() { if (strikeMetrics == null) { StrikeMetrics metrics = getFontMetrics(getNativeStrikePtr()); @@ -155,74 +153,24 @@ return strikeMetrics; } - float getGlyphAdvance(int glyphCode) { - return getScaledAdvanceForAdvance(getCachedNativeGlyphAdvance(glyphCode)); + @Override + float getGlyphAdvance(final int glyphCode) { + return getCachedNativeGlyphAdvance(glyphCode); } - float getCodePointAdvance(int cp) { - float advance = getCachedNativeGlyphAdvance(nativeFont.getMapper().charToGlyph(cp)); - - double glyphScaleX = desc.glyphTx.getScaleX(); - double devScaleX = desc.devTx.getScaleX(); - - if (devScaleX == 0) { - glyphScaleX = Math.sqrt(desc.glyphTx.getDeterminant()); - devScaleX = Math.sqrt(desc.devTx.getDeterminant()); - } - - if (devScaleX == 0) { - devScaleX = Double.NaN; // this an undefined graphics state - } - advance = (float) (advance * glyphScaleX / devScaleX); - return useFractionalMetrics() ? advance : Math.round(advance); + @Override + float getCodePointAdvance(final int cp) { + return getGlyphAdvance(nativeFont.getMapper().charToGlyph(cp)); } - // calculate an advance, and round if not using fractional metrics - private float getScaledAdvanceForAdvance(float advance) { - if (invDevTx != null) { - advance *= invDevTx.getScaleX(); - } - advance *= desc.glyphTx.getScaleX(); - return useFractionalMetrics() ? advance : Math.round(advance); + @Override + Point2D.Float getCharMetrics(final char ch) { + return getGlyphMetrics(nativeFont.getMapper().charToGlyph(ch)); } - Point2D.Float getCharMetrics(char ch) { - return getScaledPointForAdvance(getCachedNativeGlyphAdvance(nativeFont.getMapper().charToGlyph(ch))); - } - - Point2D.Float getGlyphMetrics(int glyphCode) { - return getScaledPointForAdvance(getCachedNativeGlyphAdvance(glyphCode)); - } - - // calculate an advance point, and round if not using fractional metrics - private Point2D.Float getScaledPointForAdvance(float advance) { - Point2D.Float pt = new Point2D.Float(advance, 0); - - if (!desc.glyphTx.isIdentity()) { - return scalePoint(pt); - } - - if (!useFractionalMetrics()) { - pt.x = Math.round(pt.x); - } - return pt; - } - - private Point2D.Float scalePoint(Point2D.Float pt) { - if (invDevTx != null) { - // transform the point out of the device space first - invDevTx.transform(pt, pt); - } - desc.glyphTx.transform(pt, pt); - pt.x -= desc.glyphTx.getTranslateX(); - pt.y -= desc.glyphTx.getTranslateY(); - - if (!useFractionalMetrics()) { - pt.x = Math.round(pt.x); - pt.y = Math.round(pt.y); - } - - return pt; + @Override + Point2D.Float getGlyphMetrics(final int glyphCode) { + return new Point2D.Float(getGlyphAdvance(glyphCode), 0.0f); } Rectangle2D.Float getGlyphOutlineBounds(int glyphCode) { @@ -414,9 +362,7 @@ private SparseBitShiftingTwoLayerArray secondLayerCache; private HashMap<Integer, Long> generalCache; - public GlyphInfoCache(final Font2D nativeFont, - final FontStrikeDesc desc) - { + GlyphInfoCache(final Font2D nativeFont, final FontStrikeDesc desc) { super(nativeFont, desc); firstLayerCache = new long[FIRST_LAYER_SIZE]; } @@ -527,7 +473,7 @@ final int shift; final int secondLayerLength; - public SparseBitShiftingTwoLayerArray(final int size, final int shift) { + SparseBitShiftingTwoLayerArray(final int size, final int shift) { this.shift = shift; this.cache = new long[1 << shift][]; this.secondLayerLength = size >> shift; @@ -559,6 +505,12 @@ private SparseBitShiftingTwoLayerArray secondLayerCache; private HashMap<Integer, Float> generalCache; + // Empty non private constructor was added because access to this + // class shouldn't be emulated by a synthetic accessor method. + GlyphAdvanceCache() { + super(); + } + public synchronized float get(final int index) { if (index < 0) { if (-index < SECOND_LAYER_SIZE) { @@ -609,9 +561,7 @@ final int shift; final int secondLayerLength; - public SparseBitShiftingTwoLayerArray(final int size, - final int shift) - { + SparseBitShiftingTwoLayerArray(final int size, final int shift) { this.shift = shift; this.cache = new float[1 << shift][]; this.secondLayerLength = size >> shift;
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java Wed Jul 05 19:06:33 2017 +0200 @@ -182,7 +182,11 @@ Long format = predefinedClipboardNameMap.get(str); if (format == null) { - format = new Long(registerFormatWithPasteboard(str)); + if (java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadlessInstance()) { + // Do not try to access native system for the unknown format + return -1L; + } + format = registerFormatWithPasteboard(str); predefinedClipboardNameMap.put(str, format); predefinedClipboardFormatMap.put(format, str); }
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CMenuComponent.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CMenuComponent.java Wed Jul 05 19:06:33 2017 +0200 @@ -43,7 +43,7 @@ return target; } - long getModel() { + public long getModel() { return modelPtr; }
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Wed Jul 05 19:06:33 2017 +0200 @@ -47,7 +47,7 @@ import com.sun.awt.AWTUtilities; public class CPlatformWindow extends CFRetainedResource implements PlatformWindow { - private native long nativeCreateNSWindow(long nsViewPtr, long styleBits, double x, double y, double w, double h); + private native long nativeCreateNSWindow(long nsViewPtr,long ownerPtr, long styleBits, double x, double y, double w, double h); private static native void nativeSetNSWindowStyleBits(long nsWindowPtr, int mask, int data); private static native void nativeSetNSWindowMenuBar(long nsWindowPtr, long menuBarPtr); private static native Insets nativeGetNSWindowInsets(long nsWindowPtr); @@ -230,7 +230,8 @@ contentView = createContentView(); contentView.initialize(peer, responder); - final long nativeWindowPtr = nativeCreateNSWindow(contentView.getAWTView(), styleBits, 0, 0, 0, 0); + final long ownerPtr = owner != null ? owner.getNSWindowPtr() : 0L; + final long nativeWindowPtr = nativeCreateNSWindow(contentView.getAWTView(), ownerPtr, styleBits, 0, 0, 0, 0); setPtr(nativeWindowPtr); if (target instanceof javax.swing.RootPaneContainer) {
--- a/jdk/src/macosx/native/sun/awt/AWTWindow.h Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/macosx/native/sun/awt/AWTWindow.h Wed Jul 05 19:06:33 2017 +0200 @@ -44,6 +44,7 @@ jint styleBits; BOOL isEnabled; NSWindow *nsWindow; + AWTWindow *ownerWindow; } // An instance of either AWTWindow_Normal or AWTWindow_Panel @@ -51,12 +52,15 @@ @property (nonatomic, retain) JNFWeakJObjectWrapper *javaPlatformWindow; @property (nonatomic, retain) CMenuBar *javaMenuBar; +@property (nonatomic, retain) AWTWindow *ownerWindow; @property (nonatomic) NSSize javaMinSize; @property (nonatomic) NSSize javaMaxSize; @property (nonatomic) jint styleBits; @property (nonatomic) BOOL isEnabled; + - (id) initWithPlatformWindow:(JNFWeakJObjectWrapper *)javaPlatformWindow + ownerWindow:owner styleBits:(jint)styleBits frameRect:(NSRect)frameRect contentView:(NSView *)contentView;
--- a/jdk/src/macosx/native/sun/awt/AWTWindow.m Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/macosx/native/sun/awt/AWTWindow.m Wed Jul 05 19:06:33 2017 +0200 @@ -30,6 +30,7 @@ #import "sun_lwawt_macosx_CPlatformWindow.h" #import "com_apple_eawt_event_GestureHandler.h" #import "com_apple_eawt_FullScreenHandler.h" +#import "ApplicationDelegate.h" #import "AWTWindow.h" #import "AWTView.h" @@ -55,7 +56,7 @@ // doesn't provide information about "opposite" window, so we // have to do a bit of tracking. This variable points to a window // which had been the key window just before a new key window -// was set. It would be nil if the new key window isn't an AWT +// was set. It would be nil if the new key window isn't an AWT // window or the app currently has no key window. static AWTWindow* lastKeyWindow = nil; @@ -120,6 +121,7 @@ @synthesize javaMaxSize; @synthesize styleBits; @synthesize isEnabled; +@synthesize ownerWindow; - (void) updateMinMaxSize:(BOOL)resizable { if (resizable) { @@ -201,6 +203,7 @@ } - (id) initWithPlatformWindow:(JNFWeakJObjectWrapper *)platformWindow + ownerWindow:owner styleBits:(jint)bits frameRect:(NSRect)rect contentView:(NSView *)view @@ -245,6 +248,7 @@ self.isEnabled = YES; self.javaPlatformWindow = platformWindow; self.styleBits = bits; + self.ownerWindow = owner; [self setPropertiesForStyleBits:styleBits mask:MASK(_METHOD_PROP_BITMASK)]; return self; @@ -350,7 +354,7 @@ [self.javaPlatformWindow setJObject:nil withEnv:env]; self.nsWindow = nil; - + self.ownerWindow = nil; [super dealloc]; } @@ -539,11 +543,27 @@ AWT_ASSERT_APPKIT_THREAD; [AWTToolkit eventCountPlusPlus]; AWTWindow *opposite = [AWTWindow lastKeyWindow]; - if (!IS(self.styleBits, IS_DIALOG)) { - [CMenuBar activate:self.javaMenuBar modallyDisabled:NO]; - } else if ((opposite != NULL) && IS(self.styleBits, IS_MODAL)) { - [CMenuBar activate:opposite->javaMenuBar modallyDisabled:YES]; + + // Finds appropriate menubar in our hierarchy, + AWTWindow *awtWindow = self; + while (awtWindow.ownerWindow != nil) { + awtWindow = awtWindow.ownerWindow; } + + CMenuBar *menuBar = nil; + BOOL isDisabled = NO; + if ([awtWindow.nsWindow isVisible]){ + menuBar = awtWindow.javaMenuBar; + isDisabled = !awtWindow.isEnabled; + } + + if (menuBar == nil) { + menuBar = [[ApplicationDelegate sharedDelegate] defaultMenuBar]; + isDisabled = NO; + } + + [CMenuBar activate:menuBar modallyDisabled:isDisabled]; + [AWTWindow setLastKeyWindow:nil]; [self _deliverWindowFocusEvent:YES oppositeWindow: opposite]; @@ -555,6 +575,14 @@ [AWTToolkit eventCountPlusPlus]; [self.javaMenuBar deactivate]; + // In theory, this might cause flickering if the window gaining focus + // has its own menu. However, I couldn't reproduce it on practice, so + // perhaps this is a non issue. + CMenuBar* defaultMenu = [[ApplicationDelegate sharedDelegate] defaultMenuBar]; + if (defaultMenu != nil) { + [CMenuBar activate:defaultMenu modallyDisabled:NO]; + } + // the new key window NSWindow *keyWindow = [NSApp keyWindow]; AWTWindow *opposite = nil; @@ -741,7 +769,7 @@ * Signature: (JJIIII)J */ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeCreateNSWindow -(JNIEnv *env, jobject obj, jlong contentViewPtr, jlong styleBits, jdouble x, jdouble y, jdouble w, jdouble h) +(JNIEnv *env, jobject obj, jlong contentViewPtr, jlong ownerPtr, jlong styleBits, jdouble x, jdouble y, jdouble w, jdouble h) { __block AWTWindow *window = nil; @@ -750,13 +778,14 @@ JNFWeakJObjectWrapper *platformWindow = [JNFWeakJObjectWrapper wrapperWithJObject:obj withEnv:env]; NSView *contentView = OBJC(contentViewPtr); NSRect frameRect = NSMakeRect(x, y, w, h); - + AWTWindow *owner = [OBJC(ownerPtr) delegate]; [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ window = [[AWTWindow alloc] initWithPlatformWindow:platformWindow - styleBits:styleBits - frameRect:frameRect - contentView:contentView]; + ownerWindow:owner + styleBits:styleBits + frameRect:frameRect + contentView:contentView]; // the window is released is CPlatformWindow.nativeDispose() if (window) CFRetain(window.nsWindow); @@ -818,11 +847,19 @@ AWTWindow *window = (AWTWindow*)[nsWindow delegate]; - if ([nsWindow isKeyWindow]) [window.javaMenuBar deactivate]; + if ([nsWindow isKeyWindow]) { + [window.javaMenuBar deactivate]; + } + window.javaMenuBar = menuBar; + CMenuBar* actualMenuBar = menuBar; + if (actualMenuBar == nil) { + actualMenuBar = [[ApplicationDelegate sharedDelegate] defaultMenuBar]; + } + if ([nsWindow isKeyWindow]) { - [CMenuBar activate:window.javaMenuBar modallyDisabled:NO]; + [CMenuBar activate:actualMenuBar modallyDisabled:NO]; } }];
--- a/jdk/src/macosx/native/sun/awt/CMenuBar.m Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/macosx/native/sun/awt/CMenuBar.m Wed Jul 05 19:06:33 2017 +0200 @@ -63,7 +63,7 @@ if (excludingAppleMenu && ![currMenu isJavaMenu]) { continue; } - + [currItem setSubmenu:nil]; [theMainMenu removeItemAtIndex:index]; } @@ -154,7 +154,10 @@ // Clean up extra items NSUInteger removedIndex, removedCount = [removedMenuArray count]; for (removedIndex=removedCount; removedIndex > 0; removedIndex--) { - [theMainMenu removeItemAtIndex:[[removedMenuArray objectAtIndex:(removedIndex-1)] integerValue]]; + NSUInteger index = [[removedMenuArray objectAtIndex:(removedIndex-1)] integerValue]; + NSMenuItem *currItem = [theMainMenu itemAtIndex:index]; + [currItem setSubmenu:nil]; + [theMainMenu removeItemAtIndex:index]; } i = cmenuIndex;
--- a/jdk/src/macosx/native/sun/awt/CMenuItem.m Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/macosx/native/sun/awt/CMenuItem.m Wed Jul 05 19:06:33 2017 +0200 @@ -70,9 +70,15 @@ JNIEnv *env = [ThreadUtilities getJNIEnv]; JNF_COCOA_ENTER(env); - // If we are called as a result of user pressing a shorcut, do nothing, + // If we are called as a result of user pressing a shortcut, do nothing, // because AVTView has already sent corresponding key event to the Java - // layer from performKeyEquivalent + // layer from performKeyEquivalent. + // There is an exception from the rule above, though: if a window with + // a menu gets minimized by user and there are no other windows to take + // focus, the window's menu won't be removed from the global menu bar. + // However, the Java layer won't handle invocation by a shortcut coming + // from this "frameless" menu, because there are no active windows. This + // means we have to handle it here. NSEvent *currEvent = [[NSApplication sharedApplication] currentEvent]; if ([currEvent type] == NSKeyDown) { NSString *menuKey = [sender keyEquivalent]; @@ -91,7 +97,8 @@ eventKey = [NSString stringWithCharacters: &newChar length: 1]; } - if ([menuKey isEqualToString:eventKey]) { + NSWindow *keyWindow = [NSApp keyWindow]; + if ([menuKey isEqualToString:eventKey] && keyWindow != nil) { return; } }
--- a/jdk/src/macosx/native/sun/font/AWTStrike.h Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/macosx/native/sun/font/AWTStrike.h Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2013, 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 @@ -31,11 +31,12 @@ @interface AWTStrike : NSObject { @public AWTFont * fAWTFont; - CGFloat fSize; + CGFloat fSize; JRSFontRenderingStyle fStyle; - jint fAAStyle; + jint fAAStyle; CGAffineTransform fTx; + CGAffineTransform fDevTx; CGAffineTransform fAltTx; // alternate strike tx used for Sun2D CGAffineTransform fFontTx; }
--- a/jdk/src/macosx/native/sun/font/AWTStrike.m Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/macosx/native/sun/font/AWTStrike.m Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2013, 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 @@ -65,6 +65,7 @@ invDevTx.b *= -1; invDevTx.c *= -1; fFontTx = CGAffineTransformConcat(CGAffineTransformConcat(tx, invDevTx), sInverseTX); + fDevTx = CGAffineTransformInvert(invDevTx); // the "font size" is the square root of the determinant of the matrix fSize = sqrt(abs(fFontTx.a * fFontTx.d - fFontTx.b * fFontTx.c)); @@ -148,7 +149,8 @@ { CGSize advance; JNF_COCOA_ENTER(env); - AWTFont *awtFont = ((AWTStrike *)jlong_to_ptr(awtStrikePtr))->fAWTFont; + AWTStrike *awtStrike = (AWTStrike *)jlong_to_ptr(awtStrikePtr); + AWTFont *awtFont = awtStrike->fAWTFont; // negative glyph codes are really unicodes, which were placed there by the mapper // to indicate we should use CoreText to substitute the character @@ -156,6 +158,10 @@ const CTFontRef fallback = CTS_CopyCTFallbackFontAndGlyphForJavaGlyphCode(awtFont, glyphCode, &glyph); CTFontGetAdvancesForGlyphs(fallback, kCTFontDefaultOrientation, &glyph, &advance, 1); CFRelease(fallback); + advance = CGSizeApplyAffineTransform(advance, awtStrike->fFontTx); + if (!JRSFontStyleUsesFractionalMetrics(awtStrike->fStyle)) { + advance.width = round(advance.width); + } JNF_COCOA_EXIT(env); return advance.width;
--- a/jdk/src/macosx/native/sun/font/CGGlyphImages.m Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/macosx/native/sun/font/CGGlyphImages.m Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2013, 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 @@ -455,6 +455,7 @@ #define CGGI_GLYPH_BBOX_PADDING 2.0f static inline GlyphInfo * CGGI_CreateNewGlyphInfoFrom(CGSize advance, CGRect bbox, + const AWTStrike *strike, const CGGI_RenderingMode *mode) { size_t pixelSize = mode->glyphDescriptor->pixelSize; @@ -477,6 +478,12 @@ width = 1; height = 1; } + advance = CGSizeApplyAffineTransform(advance, strike->fFontTx); + if (!JRSFontStyleUsesFractionalMetrics(strike->fStyle)) { + advance.width = round(advance.width); + advance.height = round(advance.height); + } + advance = CGSizeApplyAffineTransform(advance, strike->fDevTx); #ifdef USE_IMAGE_ALIGNED_MEMORY // create separate memory @@ -564,10 +571,10 @@ JRSFontGetBoundingBoxesForGlyphsAndStyle(fallback, &tx, style, &glyph, 1, &bbox); CGSize advance; - JRSFontGetAdvancesForGlyphsAndStyle(fallback, &tx, strike->fStyle, &glyph, 1, &advance); + CTFontGetAdvancesForGlyphs(fallback, kCTFontDefaultOrientation, &glyph, &advance, 1); // create the Sun2D GlyphInfo we are going to strike into - GlyphInfo *info = CGGI_CreateNewGlyphInfoFrom(advance, bbox, mode); + GlyphInfo *info = CGGI_CreateNewGlyphInfoFrom(advance, bbox, strike, mode); // fix the context size, just in case the substituted character is unexpectedly large CGGI_SizeCanvas(canvas, info->width, info->height, mode->cgFontMode); @@ -715,7 +722,7 @@ JRSFontRenderingStyle bboxCGMode = JRSFontAlignStyleForFractionalMeasurement(strike->fStyle); JRSFontGetBoundingBoxesForGlyphsAndStyle((CTFontRef)font->fFont, &tx, bboxCGMode, glyphs, len, bboxes); - JRSFontGetAdvancesForGlyphsAndStyle((CTFontRef)font->fFont, &tx, strike->fStyle, glyphs, len, advances); + CTFontGetAdvancesForGlyphs((CTFontRef)font->fFont, kCTFontDefaultOrientation, glyphs, advances, len); size_t maxWidth = 1; size_t maxHeight = 1; @@ -732,7 +739,7 @@ CGSize advance = advances[i]; CGRect bbox = bboxes[i]; - GlyphInfo *glyphInfo = CGGI_CreateNewGlyphInfoFrom(advance, bbox, mode); + GlyphInfo *glyphInfo = CGGI_CreateNewGlyphInfoFrom(advance, bbox, strike, mode); if (maxWidth < glyphInfo->width) maxWidth = glyphInfo->width; if (maxHeight < glyphInfo->height) maxHeight = glyphInfo->height;
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk.properties Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk.properties Wed Jul 05 19:06:33 2017 +0200 @@ -1,54 +1,54 @@ -# Refer to the note in basic.properties for a description as to what -# the mnemonics correspond to and how to calculate them. - - - -# GTK specific properties - -# GTK color chooser properties: -GTKColorChooserPanel.textAndMnemonic=>K Color Chooser -# mnemonic as a VK_ constant - -GTKColorChooserPanel.hue.textAndMnemonic=&Hue: - -GTKColorChooserPanel.red.textAndMnemonic=R&ed: - -GTKColorChooserPanel.saturation.textAndMnemonic=&Saturation: - -GTKColorChooserPanel.green.textAndMnemonic=&Green: - -GTKColorChooserPanel.value.textAndMnemonic=&Value: - -GTKColorChooserPanel.blue.textAndMnemonic=&Blue: - -GTKColorChooserPanel.color.textAndMnemonic=Color &Name: - - - -############ FILE CHOOSER STRINGS ############# - -FileChooser.acceptAllFileFilter.textAndMnemonic=All Files -FileChooser.newFolderButton.textAndMnemonic=&New Folder -FileChooser.newFolderDialog.textAndMnemonic=Folder name: -FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=Error -FileChooser.newFolderNoDirectoryError.textAndMnemonic=Error creating directory "{0}": No such file or directory -FileChooser.deleteFileButton.textAndMnemonic=De&lete File -FileChooser.renameFileButton.textAndMnemonic=&Rename File -FileChooser.cancelButton.textAndMnemonic=&Cancel -FileChooser.saveButton.textAndMnemonic=&OK -FileChooser.openButton.textAndMnemonic=&OK -FileChooser.saveDialogTitle.textAndMnemonic=Save -FileChooser.openDialogTitle.textAndMnemonic=Open -FileChooser.pathLabel.textAndMnemonic=&Selection: -FileChooser.filterLabel.textAndMnemonic=Filter: -FileChooser.foldersLabel.textAndMnemonic=Fol&ders -FileChooser.filesLabel.textAndMnemonic=&Files - -FileChooser.cancelButtonToolTip.textAndMnemonic=Abort file chooser dialog. -FileChooser.saveButtonToolTip.textAndMnemonic=Save selected file. -FileChooser.openButtonToolTip.textAndMnemonic=Open selected file. - -FileChooser.renameFileDialog.textAndMnemonic=Rename file "{0}" to -FileChooser.renameFileError.titleAndMnemonic=Error -FileChooser.renameFileError.textAndMnemonic=Error renaming file "{0}" to "{1}" - +# Refer to the note in basic.properties for a description as to what +# the mnemonics correspond to and how to calculate them. + + + +# GTK specific properties + +# GTK color chooser properties: +GTKColorChooserPanel.textAndMnemonic=>K Color Chooser +# mnemonic as a VK_ constant + +GTKColorChooserPanel.hue.textAndMnemonic=&Hue: + +GTKColorChooserPanel.red.textAndMnemonic=R&ed: + +GTKColorChooserPanel.saturation.textAndMnemonic=&Saturation: + +GTKColorChooserPanel.green.textAndMnemonic=&Green: + +GTKColorChooserPanel.value.textAndMnemonic=&Value: + +GTKColorChooserPanel.blue.textAndMnemonic=&Blue: + +GTKColorChooserPanel.color.textAndMnemonic=Color &Name: + + + +############ FILE CHOOSER STRINGS ############# + +FileChooser.acceptAllFileFilter.textAndMnemonic=All Files +FileChooser.newFolderButton.textAndMnemonic=&New Folder +FileChooser.newFolderDialog.textAndMnemonic=Folder name: +FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=Error +FileChooser.newFolderNoDirectoryError.textAndMnemonic=Error creating directory "{0}": No such file or directory +FileChooser.deleteFileButton.textAndMnemonic=De&lete File +FileChooser.renameFileButton.textAndMnemonic=&Rename File +FileChooser.cancelButton.textAndMnemonic=&Cancel +FileChooser.saveButton.textAndMnemonic=&OK +FileChooser.openButton.textAndMnemonic=&OK +FileChooser.saveDialogTitle.textAndMnemonic=Save +FileChooser.openDialogTitle.textAndMnemonic=Open +FileChooser.pathLabel.textAndMnemonic=&Selection: +FileChooser.filterLabel.textAndMnemonic=Filter: +FileChooser.foldersLabel.textAndMnemonic=Fol&ders +FileChooser.filesLabel.textAndMnemonic=&Files + +FileChooser.cancelButtonToolTip.textAndMnemonic=Abort file chooser dialog. +FileChooser.saveButtonToolTip.textAndMnemonic=Save selected file. +FileChooser.openButtonToolTip.textAndMnemonic=Open selected file. + +FileChooser.renameFileDialog.textAndMnemonic=Rename file "{0}" to +FileChooser.renameFileError.titleAndMnemonic=Error +FileChooser.renameFileError.textAndMnemonic=Error renaming file "{0}" to "{1}" +
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java Wed Jul 05 19:06:33 2017 +0200 @@ -499,7 +499,8 @@ public void setItem(Object item) { super.setItem(item); - if (editor.hasFocus()) { + Object focus = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); + if ((focus == editor) || (focus == editor.getParent())) { editor.selectAll(); } }
--- a/jdk/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth.properties Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth.properties Wed Jul 05 19:06:33 2017 +0200 @@ -1,45 +1,45 @@ -# This properties file is used to create a PropertyResourceBundle -# It contains Locale specific strings used be the Synth Look and Feel. -# Currently, the following components need this for support: -# -# FileChooser -# -# When this file is read in, the strings are put into the -# defaults table. This is an implementation detail of the current -# workings of Swing. DO NOT DEPEND ON THIS. -# This may change in future versions of Swing as we improve localization -# support. -# -# Refer to the note in basic.properties for a description as to what -# the mnemonics correspond to and how to calculate them. -# -# @author Steve Wilson - - -############ FILE CHOOSER STRINGS ############# - -FileChooser.lookInLabel.textAndMnemonic=Look &In: -FileChooser.saveInLabel.textAndMnemonic=Save In: -FileChooser.fileNameLabel.textAndMnemonic=File &Name: -FileChooser.folderNameLabel.textAndMnemonic=Folder &Name: -FileChooser.filesOfTypeLabel.textAndMnemonic=Files of &Type: -FileChooser.upFolderToolTip.textAndMnemonic=Up One Level -FileChooser.upFolderAccessibleName=Up -FileChooser.homeFolderToolTip.textAndMnemonic=Home -FileChooser.homeFolderAccessibleName=Home -FileChooser.newFolderToolTip.textAndMnemonic=Create New Folder -FileChooser.newFolderAccessibleName=New Folder -FileChooser.newFolderActionLabel.textAndMnemonic=New Folder -FileChooser.listViewButtonToolTip.textAndMnemonic=List -FileChooser.listViewButtonAccessibleName=List -FileChooser.listViewActionLabel.textAndMnemonic=List -FileChooser.detailsViewButtonToolTip.textAndMnemonic=Details -FileChooser.detailsViewButtonAccessibleName=Details -FileChooser.detailsViewActionLabel.textAndMnemonic=Details -FileChooser.refreshActionLabel.textAndMnemonic=Refresh -FileChooser.viewMenuLabel.textAndMnemonic=View -FileChooser.fileNameHeader.textAndMnemonic=Name -FileChooser.fileSizeHeader.textAndMnemonic=Size -FileChooser.fileTypeHeader.textAndMnemonic=Type -FileChooser.fileDateHeader.textAndMnemonic=Modified -FileChooser.fileAttrHeader.textAndMnemonic=Attributes +# This properties file is used to create a PropertyResourceBundle +# It contains Locale specific strings used be the Synth Look and Feel. +# Currently, the following components need this for support: +# +# FileChooser +# +# When this file is read in, the strings are put into the +# defaults table. This is an implementation detail of the current +# workings of Swing. DO NOT DEPEND ON THIS. +# This may change in future versions of Swing as we improve localization +# support. +# +# Refer to the note in basic.properties for a description as to what +# the mnemonics correspond to and how to calculate them. +# +# @author Steve Wilson + + +############ FILE CHOOSER STRINGS ############# + +FileChooser.lookInLabel.textAndMnemonic=Look &In: +FileChooser.saveInLabel.textAndMnemonic=Save In: +FileChooser.fileNameLabel.textAndMnemonic=File &Name: +FileChooser.folderNameLabel.textAndMnemonic=Folder &Name: +FileChooser.filesOfTypeLabel.textAndMnemonic=Files of &Type: +FileChooser.upFolderToolTip.textAndMnemonic=Up One Level +FileChooser.upFolderAccessibleName=Up +FileChooser.homeFolderToolTip.textAndMnemonic=Home +FileChooser.homeFolderAccessibleName=Home +FileChooser.newFolderToolTip.textAndMnemonic=Create New Folder +FileChooser.newFolderAccessibleName=New Folder +FileChooser.newFolderActionLabel.textAndMnemonic=New Folder +FileChooser.listViewButtonToolTip.textAndMnemonic=List +FileChooser.listViewButtonAccessibleName=List +FileChooser.listViewActionLabel.textAndMnemonic=List +FileChooser.detailsViewButtonToolTip.textAndMnemonic=Details +FileChooser.detailsViewButtonAccessibleName=Details +FileChooser.detailsViewActionLabel.textAndMnemonic=Details +FileChooser.refreshActionLabel.textAndMnemonic=Refresh +FileChooser.viewMenuLabel.textAndMnemonic=View +FileChooser.fileNameHeader.textAndMnemonic=Name +FileChooser.fileSizeHeader.textAndMnemonic=Size +FileChooser.fileTypeHeader.textAndMnemonic=Type +FileChooser.fileDateHeader.textAndMnemonic=Modified +FileChooser.fileAttrHeader.textAndMnemonic=Attributes
--- a/jdk/src/share/classes/com/sun/tools/script/shell/init.js Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/com/sun/tools/script/shell/init.js Wed Jul 05 19:06:33 2017 +0200 @@ -332,7 +332,7 @@ * @param str input from which script is loaded and evaluated */ if (typeof(load) == 'undefined') { - var load = function(str) { + this.load = function(str) { var stream = inStream(str); var bstream = new BufferedInputStream(stream); var reader = new BufferedReader(new InputStreamReader(bstream)); @@ -712,7 +712,7 @@ * @param exitCode integer code returned to OS shell. * optional, defaults to 0 */ - var exit = function (code) { + this.exit = function (code) { if (code) { java.lang.System.exit(code + 0); } else { @@ -725,7 +725,7 @@ /** * synonym for exit */ - var quit = function (code) { + this.quit = function (code) { exit(code); } } @@ -881,7 +881,7 @@ * @param format string to format the rest of the print items * @param args variadic argument list */ - var printf = function (format, args/*, more args*/) { + this.printf = function (format, args/*, more args*/) { var array = java.lang.reflect.Array.newInstance(java.lang.Object, arguments.length - 1); for (var i = 0; i < array.length; i++) { @@ -921,25 +921,7 @@ } if (typeof(println) == 'undefined') { - var print = function(str, newline) { - if (typeof(str) == 'undefined') { - str = 'undefined'; - } else if (str == null) { - str = 'null'; - } + // just synonym to print + this.println = print; +} - if (!(out instanceof java.io.PrintWriter)) { - out = new java.io.PrintWriter(out); - } - - out.print(String(str)); - if (newline) { - out.print('\n'); - } - out.flush(); - } - - var println = function(str) { - print(str, true); - }; -}
--- a/jdk/src/share/classes/java/awt/AWTException.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/awt/AWTException.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 1997, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, 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,7 +26,7 @@ /** - * Signals that an Absract Window Toolkit exception has occurred. + * Signals that an Abstract Window Toolkit exception has occurred. * * @author Arthur van Hoff */
--- a/jdk/src/share/classes/java/io/DataInput.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/io/DataInput.java Wed Jul 05 19:06:33 2017 +0200 @@ -48,132 +48,87 @@ * may be thrown if the input stream has been * closed. * - * <h4><a name="modified-utf-8">Modified UTF-8</a></h4> + * <h3><a name="modified-utf-8">Modified UTF-8</a></h3> * <p> * Implementations of the DataInput and DataOutput interfaces represent * Unicode strings in a format that is a slight modification of UTF-8. * (For information regarding the standard UTF-8 format, see section * <i>3.9 Unicode Encoding Forms</i> of <i>The Unicode Standard, Version * 4.0</i>). - * Note that in the following tables, the most significant bit appears in the + * Note that in the following table, the most significant bit appears in the * far left-hand column. - * <p> - * All characters in the range {@code '\u005Cu0001'} to - * {@code '\u005Cu007F'} are represented by a single byte: * * <blockquote> - * <table border="1" cellspacing="0" cellpadding="8" width="50%" + * <table border="1" cellspacing="0" cellpadding="8" * summary="Bit values and bytes"> * <tr> + * <th colspan="9"><span style="font-weight:normal"> + * All characters in the range {@code '\u005Cu0001'} to + * {@code '\u005Cu007F'} are represented by a single byte:</span></th> + * </tr> + * <tr> * <td></td> - * <th id="bit_a">Bit Values</th> + * <th colspan="8" id="bit_a">Bit Values</th> * </tr> * <tr> * <th id="byte1_a">Byte 1</th> - * <td> - * <table border="1" cellspacing="0" width="100%"> - * <tr> - * <td width="12%"><center>0</center> - * <td colspan="7"><center>bits 6-0</center> - * </tr> - * </table> - * </td> + * <td><center>0</center> + * <td colspan="7"><center>bits 6-0</center> + * </tr> + * <tr> + * <th colspan="9"><span style="font-weight:normal"> + * The null character {@code '\u005Cu0000'} and characters + * in the range {@code '\u005Cu0080'} to {@code '\u005Cu07FF'} are + * represented by a pair of bytes:</span></th> + * </tr> + * <tr> + * <td></td> + * <th colspan="8" id="bit_b">Bit Values</th> + * </tr> + * <tr> + * <th id="byte1_b">Byte 1</th> + * <td><center>1</center> + * <td><center>1</center> + * <td><center>0</center> + * <td colspan="5"><center>bits 10-6</center> + * </tr> + * <tr> + * <th id="byte2_a">Byte 2</th> + * <td><center>1</center> + * <td><center>0</center> + * <td colspan="6"><center>bits 5-0</center> + * </tr> + * <tr> + * <th colspan="9"><span style="font-weight:normal"> + * {@code char} values in the range {@code '\u005Cu0800'} + * to {@code '\u005CuFFFF'} are represented by three bytes:</span></th> + * </tr> + * <tr> + * <td></td> + * <th colspan="8"id="bit_c">Bit Values</th> + * </tr> + * <tr> + * <th id="byte1_c">Byte 1</th> + * <td><center>1</center> + * <td><center>1</center> + * <td><center>1</center> + * <td><center>0</center> + * <td colspan="4"><center>bits 15-12</center> + * </tr> + * <tr> + * <th id="byte2_b">Byte 2</th> + * <td><center>1</center> + * <td><center>0</center> + * <td colspan="6"><center>bits 11-6</center> + * </tr> + * <tr> + * <th id="byte3">Byte 3</th> + * <td><center>1</center> + * <td><center>0</center> + * <td colspan="6"><center>bits 5-0</center> * </tr> * </table> * </blockquote> - * - * <p> - * The null character {@code '\u005Cu0000'} and characters in the - * range {@code '\u005Cu0080'} to {@code '\u005Cu07FF'} are - * represented by a pair of bytes: - * - * <blockquote> - * <table border="1" cellspacing="0" cellpadding="8" width="50%" - * summary="Bit values and bytes"> - * <tr> - * <td></td> - * <th id="bit_b">Bit Values</th> - * </tr> - * <tr> - * <th id="byte1_b">Byte 1</th> - * <td> - * <table border="1" cellspacing="0" width="100%"> - * <tr> - * <td width="12%"><center>1</center> - * <td width="13%"><center>1</center> - * <td width="12%"><center>0</center> - * <td colspan="5"><center>bits 10-6</center> - * </tr> - * </table> - * </td> - * </tr> - * <tr> - * <th id="byte2_a">Byte 2</th> - * <td> - * <table border="1" cellspacing="0" width="100%"> - * <tr> - * <td width="12%"><center>1</center> - * <td width="13%"><center>0</center> - * <td colspan="6"><center>bits 5-0</center> - * </tr> - * </table> - * </td> - * </tr> - * </table> - * </blockquote> - * - * <br> - * {@code char} values in the range {@code '\u005Cu0800'} to - * {@code '\u005CuFFFF'} are represented by three bytes: - * - * <blockquote> - * <table border="1" cellspacing="0" cellpadding="8" width="50%" - * summary="Bit values and bytes"> - * <tr> - * <td></td> - * <th id="bit_c">Bit Values</th> - * </tr> - * <tr> - * <th id="byte1_c">Byte 1</th> - * <td> - * <table border="1" cellspacing="0" width="100%"> - * <tr> - * <td width="12%"><center>1</center> - * <td width="13%"><center>1</center> - * <td width="12%"><center>1</center> - * <td width="13%"><center>0</center> - * <td colspan="4"><center>bits 15-12</center> - * </tr> - * </table> - * </td> - * </tr> - * <tr> - * <th id="byte2_b">Byte 2</th> - * <td> - * <table border="1" cellspacing="0" width="100%"> - * <tr> - * <td width="12%"><center>1</center> - * <td width="13%"><center>0</center> - * <td colspan="6"><center>bits 11-6</center> - * </tr> - * </table> - * </td> - * </tr> - * <tr> - * <th id="byte3">Byte 3</th> - * <td> - * <table border="1" cellspacing="0" width="100%"> - * <tr> - * <td width="12%"><center>1</center> - * <td width="13%"><center>0</center> - * <td colspan="6"><center>bits 5-0</center> - * </tr> - * </table> - * </td> - * </tr> - * </table> - * </blockquote> - * * <p> * The differences between this format and the * standard UTF-8 format are the following:
--- a/jdk/src/share/classes/java/io/File.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/io/File.java Wed Jul 05 19:06:33 2017 +0200 @@ -129,7 +129,7 @@ * created, the abstract pathname represented by a <code>File</code> object * will never change. * - * <h4>Interoperability with {@code java.nio.file} package</h4> + * <h3>Interoperability with {@code java.nio.file} package</h3> * * <p> The <a href="../../java/nio/file/package-summary.html">{@code java.nio.file}</a> * package defines interfaces and classes for the Java virtual machine to access
--- a/jdk/src/share/classes/java/io/ObjectInputStream.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/io/ObjectInputStream.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, 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 @@ -313,6 +313,7 @@ * @throws SecurityException if a security manager exists and its * <code>checkPermission</code> method denies enabling * subclassing. + * @throws IOException if an I/O error occurs while creating this stream * @see SecurityManager#checkPermission * @see java.io.SerializablePermission */
--- a/jdk/src/share/classes/java/io/ObjectOutputStream.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/io/ObjectOutputStream.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, 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,7 @@ * @throws SecurityException if a security manager exists and its * <code>checkPermission</code> method denies enabling * subclassing. + * @throws IOException if an I/O error occurs while creating this stream * @see SecurityManager#checkPermission * @see java.io.SerializablePermission */
--- a/jdk/src/share/classes/java/io/ObjectStreamField.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/io/ObjectStreamField.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, 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 @@ -240,6 +240,8 @@ * Returns boolean value indicating whether or not the serializable field * represented by this ObjectStreamField instance is unshared. * + * @return {@code true} if this field is unshared + * * @since 1.4 */ public boolean isUnshared() {
--- a/jdk/src/share/classes/java/io/RandomAccessFile.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/io/RandomAccessFile.java Wed Jul 05 19:06:33 2017 +0200 @@ -128,7 +128,7 @@ * meanings are: * * <table summary="Access mode permitted values and meanings"> - * <tr><th><p align="left">Value</p></th><th><p align="left">Meaning</p></th></tr> + * <tr><th align="left">Value</th><th align="left">Meaning</th></tr> * <tr><td valign="top"><tt>"r"</tt></td> * <td> Open for reading only. Invoking any of the <tt>write</tt> * methods of the resulting object will cause an {@link
--- a/jdk/src/share/classes/java/lang/Class.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/lang/Class.java Wed Jul 05 19:06:33 2017 +0200 @@ -157,10 +157,10 @@ * * The string is formatted as a list of type modifiers, if any, * followed by the kind of type (empty string for primitive types - * and {@code class}, {@code enum}, {@code interface}, or {@code - * @interface}, as appropriate), followed by the type's name, - * followed by an angle-bracketed comma-separated list of the - * type's type parameters, if any. + * and {@code class}, {@code enum}, {@code interface}, or + * <code>@</code>{@code interface}, as appropriate), followed + * by the type's name, followed by an angle-bracketed + * comma-separated list of the type's type parameters, if any. * * A space is used to separate modifiers from one another and to * separate any modifiers from the kind of type. The modifiers
--- a/jdk/src/share/classes/java/lang/invoke/LambdaConversionException.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/lang/invoke/LambdaConversionException.java Wed Jul 05 19:06:33 2017 +0200 @@ -29,6 +29,8 @@ * LambdaConversionException */ public class LambdaConversionException extends Exception { + private static final long serialVersionUID = 292L + 8L; + /** * Constructs a {@code LambdaConversionException}. */
--- a/jdk/src/share/classes/java/lang/ref/FinalReference.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/lang/ref/FinalReference.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,13 +25,12 @@ package java.lang.ref; - -/* Final references, used to implement finalization */ - +/** + * Final references, used to implement finalization + */ class FinalReference<T> extends Reference<T> { public FinalReference(T referent, ReferenceQueue<? super T> q) { super(referent, q); } - }
--- a/jdk/src/share/classes/java/lang/ref/Finalizer.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/lang/ref/Finalizer.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,16 +29,16 @@ import java.security.AccessController; -final class Finalizer extends FinalReference { /* Package-private; must be in - same package as the Reference - class */ +final class Finalizer extends FinalReference<Object> { /* Package-private; must be in + same package as the Reference + class */ /* A native method that invokes an arbitrary object's finalize method is required since the finalize method is protected */ static native void invokeFinalizeMethod(Object o) throws Throwable; - private static ReferenceQueue queue = new ReferenceQueue(); + private static ReferenceQueue<Object> queue = new ReferenceQueue<>(); private static Finalizer unfinalized = null; private static final Object lock = new Object();
--- a/jdk/src/share/classes/java/lang/ref/Reference.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/lang/ref/Reference.java Wed Jul 05 19:06:33 2017 +0200 @@ -96,6 +96,7 @@ * Enqueued: next reference in queue (or this if last) * Inactive: this */ + @SuppressWarnings("rawtypes") Reference next; /* When active: next element in a discovered reference list maintained by GC (or this if last) @@ -119,7 +120,7 @@ * them. This list is protected by the above lock object. The * list uses the discovered field to link its elements. */ - private static Reference pending = null; + private static Reference<Object> pending = null; /* High-priority thread to enqueue pending References */ @@ -131,7 +132,7 @@ public void run() { for (;;) { - Reference r; + Reference<Object> r; synchronized (lock) { if (pending != null) { r = pending; @@ -166,7 +167,7 @@ continue; } - ReferenceQueue q = r.queue; + ReferenceQueue<Object> q = r.queue; if (q != ReferenceQueue.NULL) q.enqueue(r); } }
--- a/jdk/src/share/classes/java/lang/ref/ReferenceQueue.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/lang/ref/ReferenceQueue.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, 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 @@ -40,14 +40,14 @@ */ public ReferenceQueue() { } - private static class Null extends ReferenceQueue { - boolean enqueue(Reference r) { + private static class Null<S> extends ReferenceQueue<S> { + boolean enqueue(Reference<? extends S> r) { return false; } } - static ReferenceQueue NULL = new Null(); - static ReferenceQueue ENQUEUED = new Null(); + static ReferenceQueue<Object> NULL = new Null<>(); + static ReferenceQueue<Object> ENQUEUED = new Null<>(); static private class Lock { }; private Lock lock = new Lock(); @@ -58,7 +58,7 @@ synchronized (lock) { // Check that since getting the lock this reference hasn't already been // enqueued (and even then removed) - ReferenceQueue queue = r.queue; + ReferenceQueue<?> queue = r.queue; if ((queue == NULL) || (queue == ENQUEUED)) { return false; } @@ -75,10 +75,13 @@ } } + @SuppressWarnings("unchecked") private Reference<? extends T> reallyPoll() { /* Must hold lock */ Reference<? extends T> r = head; if (r != null) { - head = (r.next == r) ? null : r.next; + head = (r.next == r) ? + null : + r.next; // Unchecked due to the next field having a raw type in Reference r.queue = NULL; r.next = r; queueLength--;
--- a/jdk/src/share/classes/java/lang/reflect/Parameter.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/lang/reflect/Parameter.java Wed Jul 05 19:06:33 2017 +0200 @@ -162,7 +162,7 @@ /** * Returns the name of the parameter. If the parameter's name is - * {@linkplain isNamePresent() present}, then this method returns + * {@linkplain #isNamePresent() present}, then this method returns * the name provided by the class file. Otherwise, this method * synthesizes a name of the form argN, where N is the index of * the parameter in the descriptor of the method which declares
--- a/jdk/src/share/classes/java/math/BigInteger.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/math/BigInteger.java Wed Jul 05 19:06:33 2017 +0200 @@ -33,7 +33,6 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.ObjectStreamField; -import java.util.ArrayList; import java.util.Arrays; import java.util.Random; import sun.misc.DoubleConsts; @@ -101,6 +100,7 @@ * @author Josh Bloch * @author Michael McCloskey * @author Alan Eliasen + * @author Timothy Buktu * @since JDK1.1 */ @@ -215,6 +215,14 @@ private static final int TOOM_COOK_SQUARE_THRESHOLD = 140; /** + * The threshold value for using Burnikel-Ziegler division. If the number + * of ints in the number are larger than this value, + * Burnikel-Ziegler division will be used. This value is found + * experimentally to work well. + */ + static final int BURNIKEL_ZIEGLER_THRESHOLD = 50; + + /** * The threshold value for using Schoenhage recursive base conversion. If * the number of ints in the number are larger than this value, * the Schoenhage algorithm will be used. In practice, it appears that the @@ -290,7 +298,7 @@ if (signum < -1 || signum > 1) throw(new NumberFormatException("Invalid signum value")); - if (this.mag.length==0) { + if (this.mag.length == 0) { this.signum = 0; } else { if (signum == 0) @@ -311,7 +319,7 @@ if (signum < -1 || signum > 1) throw(new NumberFormatException("Invalid signum value")); - if (this.mag.length==0) { + if (this.mag.length == 0) { this.signum = 0; } else { if (signum == 0) @@ -364,8 +372,10 @@ // Skip leading zeros and compute number of digits in magnitude while (cursor < len && - Character.digit(val.charAt(cursor), radix) == 0) + Character.digit(val.charAt(cursor), radix) == 0) { cursor++; + } + if (cursor == len) { signum = 0; mag = ZERO.mag; @@ -455,7 +465,7 @@ if (result == -1) throw new NumberFormatException(new String(source)); - for (int index = start; index<end; index++) { + for (int index = start; index < end; index++) { int nextVal = Character.digit(source[index], 10); if (nextVal == -1) throw new NumberFormatException(new String(source)); @@ -622,9 +632,9 @@ int highBit = 1 << ((bitLength+31) & 0x1f); // High bit of high int int highMask = (highBit << 1) - 1; // Bits to keep in high int - while(true) { + while (true) { // Construct a candidate - for (int i=0; i<magLen; i++) + for (int i=0; i < magLen; i++) temp[i] = rnd.nextInt(); temp[0] = (temp[0] & highMask) | highBit; // Ensure exact length if (bitLength > 2) @@ -710,7 +720,7 @@ if (!result.testBit(0)) result = result.add(ONE); - while(true) { + while (true) { // Do cheap "pre-test" if applicable if (result.bitLength() > 6) { long r = result.remainder(SMALL_PRIME_PRODUCT).longValue(); @@ -741,7 +751,7 @@ // Looking for the next large prime int searchLen = (result.bitLength() / 20) * 64; - while(true) { + while (true) { BitSieve searchSieve = new BitSieve(result, searchLen); BigInteger candidate = searchSieve.retrieve(result, DEFAULT_PRIME_CERTAINTY, null); @@ -808,7 +818,7 @@ int d = 5; while (jacobiSymbol(d, this) != -1) { // 5, -7, 9, -11, ... - d = (d<0) ? Math.abs(d)+2 : -(d+2); + d = (d < 0) ? Math.abs(d)+2 : -(d+2); } // Step 2 @@ -881,7 +891,7 @@ BigInteger u = ONE; BigInteger u2; BigInteger v = ONE; BigInteger v2; - for (int i=k.bitLength()-2; i>=0; i--) { + for (int i=k.bitLength()-2; i >= 0; i--) { u2 = u.multiply(v).mod(n); v2 = v.square().add(d.multiply(u.square())).mod(n); @@ -937,7 +947,7 @@ if (rnd == null) { rnd = getSecureRandom(); } - for (int i=0; i<iterations; i++) { + for (int i=0; i < iterations; i++) { // Generate a uniform random on (1, this) BigInteger b; do { @@ -946,8 +956,8 @@ int j = 0; BigInteger z = b.modPow(m, this); - while(!((j==0 && z.equals(ONE)) || z.equals(thisMinusOne))) { - if (j>0 && z.equals(ONE) || ++j==a) + while (!((j == 0 && z.equals(ONE)) || z.equals(thisMinusOne))) { + if (j > 0 && z.equals(ONE) || ++j == a) return false; z = z.modPow(TWO, this); } @@ -961,7 +971,7 @@ * arguments are correct, and it doesn't copy the magnitude array. */ BigInteger(int[] magnitude, int signum) { - this.signum = (magnitude.length==0 ? 0 : signum); + this.signum = (magnitude.length == 0 ? 0 : signum); this.mag = magnitude; } @@ -970,7 +980,7 @@ * arguments are correct. */ private BigInteger(byte[] magnitude, int signum) { - this.signum = (magnitude.length==0 ? 0 : signum); + this.signum = (magnitude.length == 0 ? 0 : signum); this.mag = stripLeadingZeroBytes(magnitude); } @@ -1009,7 +1019,7 @@ } int highWord = (int)(val >>> 32); - if (highWord==0) { + if (highWord == 0) { mag = new int[1]; mag[0] = (int)val; } else { @@ -1025,7 +1035,7 @@ * BigInteger will reference the input array if feasible). */ private static BigInteger valueOf(int val[]) { - return (val[0]>0 ? new BigInteger(val, 1) : new BigInteger(val)); + return (val[0] > 0 ? new BigInteger(val, 1) : new BigInteger(val)); } // Constants @@ -1066,8 +1076,7 @@ powerCache = new BigInteger[Character.MAX_RADIX+1][]; logCache = new double[Character.MAX_RADIX+1]; - for (int i=Character.MIN_RADIX; i<=Character.MAX_RADIX; i++) - { + for (int i=Character.MIN_RADIX; i <= Character.MAX_RADIX; i++) { powerCache[i] = new BigInteger[] { BigInteger.valueOf(i) }; logCache[i] = Math.log(i); } @@ -1161,7 +1170,7 @@ int xIndex = x.length; int[] result; int highWord = (int)(val >>> 32); - if (highWord==0) { + if (highWord == 0) { result = new int[xIndex]; sum = (x[--xIndex] & LONG_MASK) + val; result[xIndex] = (int)sum; @@ -1214,12 +1223,12 @@ int yIndex = y.length; int result[] = new int[xIndex]; long sum = 0; - if(yIndex==1) { + if (yIndex == 1) { sum = (x[--xIndex] & LONG_MASK) + (y[0] & LONG_MASK) ; result[xIndex] = (int)sum; } else { // Add common parts of both numbers - while(yIndex > 0) { + while (yIndex > 0) { sum = (x[--xIndex] & LONG_MASK) + (y[--yIndex] & LONG_MASK) + (sum >>> 32); result[xIndex] = (int)sum; @@ -1246,24 +1255,24 @@ private static int[] subtract(long val, int[] little) { int highWord = (int)(val >>> 32); - if (highWord==0) { + if (highWord == 0) { int result[] = new int[1]; result[0] = (int)(val - (little[0] & LONG_MASK)); return result; } else { int result[] = new int[2]; - if(little.length==1) { + if (little.length == 1) { long difference = ((int)val & LONG_MASK) - (little[0] & LONG_MASK); result[1] = (int)difference; // Subtract remainder of longer number while borrow propagates boolean borrow = (difference >> 32 != 0); - if(borrow) { + if (borrow) { result[0] = highWord - 1; } else { // Copy remainder of longer number result[0] = highWord; } return result; - } else { // little.length==2 + } else { // little.length == 2 long difference = ((int)val & LONG_MASK) - (little[1] & LONG_MASK); result[1] = (int)difference; difference = (highWord & LONG_MASK) - (little[0] & LONG_MASK) + (difference >> 32); @@ -1286,7 +1295,7 @@ int result[] = new int[bigIndex]; long difference = 0; - if (highWord==0) { + if (highWord == 0) { difference = (big[--bigIndex] & LONG_MASK) - val; result[bigIndex] = (int)difference; } else { @@ -1296,7 +1305,6 @@ result[bigIndex] = (int)difference; } - // Subtract remainder of longer number while borrow propagates boolean borrow = (difference >> 32 != 0); while (bigIndex > 0 && borrow) @@ -1345,7 +1353,7 @@ long difference = 0; // Subtract common parts of both numbers - while(littleIndex > 0) { + while (littleIndex > 0) { difference = (big[--bigIndex] & LONG_MASK) - (little[--littleIndex] & LONG_MASK) + (difference >> 32); @@ -1377,29 +1385,29 @@ int xlen = mag.length; int ylen = val.mag.length; - if ((xlen < KARATSUBA_THRESHOLD) || (ylen < KARATSUBA_THRESHOLD)) - { + if ((xlen < KARATSUBA_THRESHOLD) || (ylen < KARATSUBA_THRESHOLD)) { int resultSign = signum == val.signum ? 1 : -1; if (val.mag.length == 1) { return multiplyByInt(mag,val.mag[0], resultSign); } - if(mag.length == 1) { + if (mag.length == 1) { return multiplyByInt(val.mag,mag[0], resultSign); } int[] result = multiplyToLen(mag, xlen, val.mag, ylen, null); result = trustedStripLeadingZeroInts(result); return new BigInteger(result, resultSign); + } else { + if ((xlen < TOOM_COOK_THRESHOLD) && (ylen < TOOM_COOK_THRESHOLD)) { + return multiplyKaratsuba(this, val); + } else { + return multiplyToomCook3(this, val); + } } - else - if ((xlen < TOOM_COOK_THRESHOLD) && (ylen < TOOM_COOK_THRESHOLD)) - return multiplyKaratsuba(this, val); - else - return multiplyToomCook3(this, val); } private static BigInteger multiplyByInt(int[] x, int y, int sign) { - if(Integer.bitCount(y)==1) { + if (Integer.bitCount(y) == 1) { return new BigInteger(shiftLeft(x,Integer.numberOfTrailingZeros(y)), sign); } int xlen = x.length; @@ -1474,7 +1482,7 @@ z = new int[xlen+ylen]; long carry = 0; - for (int j=ystart, k=ystart+1+xstart; j>=0; j--, k--) { + for (int j=ystart, k=ystart+1+xstart; j >= 0; j--, k--) { long product = (y[j] & LONG_MASK) * (x[xstart] & LONG_MASK) + carry; z[k] = (int)product; @@ -1484,7 +1492,7 @@ for (int i = xstart-1; i >= 0; i--) { carry = 0; - for (int j=ystart, k=ystart+1+i; j>=0; j--, k--) { + for (int j=ystart, k=ystart+1+i; j >= 0; j--, k--) { long product = (y[j] & LONG_MASK) * (x[i] & LONG_MASK) + (z[k] & LONG_MASK) + carry; @@ -1511,8 +1519,7 @@ * * See: http://en.wikipedia.org/wiki/Karatsuba_algorithm */ - private static BigInteger multiplyKaratsuba(BigInteger x, BigInteger y) - { + private static BigInteger multiplyKaratsuba(BigInteger x, BigInteger y) { int xlen = x.mag.length; int ylen = y.mag.length; @@ -1535,10 +1542,11 @@ // result = p1 * 2^(32*2*half) + (p3 - p1 - p2) * 2^(32*half) + p2 BigInteger result = p1.shiftLeft(32*half).add(p3.subtract(p1).subtract(p2)).shiftLeft(32*half).add(p2); - if (x.signum != y.signum) + if (x.signum != y.signum) { return result.negate(); - else + } else { return result; + } } /** @@ -1569,8 +1577,7 @@ * LNCS #4547. Springer, Madrid, Spain, June 21-22, 2007. * */ - private static BigInteger multiplyToomCook3(BigInteger a, BigInteger b) - { + private static BigInteger multiplyToomCook3(BigInteger a, BigInteger b) { int alen = a.mag.length; int blen = b.mag.length; @@ -1605,12 +1612,12 @@ db1.add(b2).shiftLeft(1).subtract(b0)); vinf = a2.multiply(b2); - /* The algorithm requires two divisions by 2 and one by 3. - All divisions are known to be exact, that is, they do not produce - remainders, and all results are positive. The divisions by 2 are - implemented as right shifts which are relatively efficient, leaving - only an exact division by 3, which is done by a specialized - linear-time algorithm. */ + // The algorithm requires two divisions by 2 and one by 3. + // All divisions are known to be exact, that is, they do not produce + // remainders, and all results are positive. The divisions by 2 are + // implemented as right shifts which are relatively efficient, leaving + // only an exact division by 3, which is done by a specialized + // linear-time algorithm. t2 = v2.subtract(vm1).exactDivideBy3(); tm1 = v1.subtract(vm1).shiftRight(1); t1 = v1.subtract(v0); @@ -1624,10 +1631,11 @@ BigInteger result = vinf.shiftLeft(ss).add(t2).shiftLeft(ss).add(t1).shiftLeft(ss).add(tm1).shiftLeft(ss).add(v0); - if (a.signum != b.signum) + if (a.signum != b.signum) { return result.negate(); - else + } else { return result; + } } @@ -1645,38 +1653,38 @@ * numbers. */ private BigInteger getToomSlice(int lowerSize, int upperSize, int slice, - int fullsize) - { + int fullsize) { int start, end, sliceSize, len, offset; len = mag.length; offset = fullsize - len; - if (slice == 0) - { + if (slice == 0) { start = 0 - offset; end = upperSize - 1 - offset; - } - else - { + } else { start = upperSize + (slice-1)*lowerSize - offset; end = start + lowerSize - 1; } - if (start < 0) + if (start < 0) { start = 0; - if (end < 0) + } + if (end < 0) { return ZERO; + } sliceSize = (end-start) + 1; - if (sliceSize <= 0) + if (sliceSize <= 0) { return ZERO; + } // While performing Toom-Cook, all slices are positive and // the sign is adjusted when the final number is composed. - if (start==0 && sliceSize >= len) + if (start == 0 && sliceSize >= len) { return this.abs(); + } int intSlice[] = new int[sliceSize]; System.arraycopy(mag, start, intSlice, 0, sliceSize); @@ -1692,20 +1700,19 @@ * undefined. Note that this is expected to be called with positive * arguments only. */ - private BigInteger exactDivideBy3() - { + private BigInteger exactDivideBy3() { int len = mag.length; int[] result = new int[len]; long x, w, q, borrow; borrow = 0L; - for (int i=len-1; i>=0; i--) - { + for (int i=len-1; i >= 0; i--) { x = (mag[i] & LONG_MASK); w = x - borrow; - if (borrow > x) // Did we make the number go negative? + if (borrow > x) { // Did we make the number go negative? borrow = 1L; - else + } else { borrow = 0L; + } // 0xAAAAAAAB is the modular inverse of 3 (mod 2^32). Thus, // the effect of this is to divide by 3 (mod 2^32). @@ -1715,8 +1722,7 @@ // Now check the borrow. The second check can of course be // eliminated if the first fails. - if (q >= 0x55555556L) - { + if (q >= 0x55555556L) { borrow++; if (q >= 0xAAAAAAABL) borrow++; @@ -1733,8 +1739,9 @@ private BigInteger getLower(int n) { int len = mag.length; - if (len <= n) + if (len <= n) { return this; + } int lowerInts[] = new int[n]; System.arraycopy(mag, len-n, lowerInts, 0, n); @@ -1750,8 +1757,9 @@ private BigInteger getUpper(int n) { int len = mag.length; - if (len <= n) + if (len <= n) { return ZERO; + } int upperLen = len - n; int upperInts[] = new int[upperLen]; @@ -1768,20 +1776,21 @@ * @return {@code this<sup>2</sup>} */ private BigInteger square() { - if (signum == 0) + if (signum == 0) { return ZERO; + } int len = mag.length; - if (len < KARATSUBA_SQUARE_THRESHOLD) - { + if (len < KARATSUBA_SQUARE_THRESHOLD) { int[] z = squareToLen(mag, len, null); return new BigInteger(trustedStripLeadingZeroInts(z), 1); + } else { + if (len < TOOM_COOK_SQUARE_THRESHOLD) { + return squareKaratsuba(); + } else { + return squareToomCook3(); + } } - else - if (len < TOOM_COOK_SQUARE_THRESHOLD) - return squareKaratsuba(); - else - return squareToomCook3(); } /** @@ -1829,7 +1838,7 @@ // Store the squares, right shifted one bit (i.e., divided by 2) int lastProductLowWord = 0; - for (int j=0, i=0; j<len; j++) { + for (int j=0, i=0; j < len; j++) { long piece = (x[j] & LONG_MASK); long product = piece * piece; z[i++] = (lastProductLowWord << 31) | (int)(product >>> 33); @@ -1838,7 +1847,7 @@ } // Add in off-diagonal sums - for (int i=len, offset=1; i>0; i--, offset+=2) { + for (int i=len, offset=1; i > 0; i--, offset+=2) { int t = x[i-1]; t = mulAdd(z, x, offset, i-1, t); addOne(z, offset-1, i, t); @@ -1858,8 +1867,7 @@ * has better asymptotic performance than the algorithm used in * squareToLen. */ - private BigInteger squareKaratsuba() - { + private BigInteger squareKaratsuba() { int half = (mag.length+1) / 2; BigInteger xl = getLower(half); @@ -1879,8 +1887,7 @@ * that has better asymptotic performance than the algorithm used in * squareToLen or squareKaratsuba. */ - private BigInteger squareToomCook3() - { + private BigInteger squareToomCook3() { int len = mag.length; // k is the size (in ints) of the lower-order slices. @@ -1905,13 +1912,12 @@ vinf = a2.square(); v2 = da1.add(a2).shiftLeft(1).subtract(a0).square(); - /* The algorithm requires two divisions by 2 and one by 3. - All divisions are known to be exact, that is, they do not produce - remainders, and all results are positive. The divisions by 2 are - implemented as right shifts which are relatively efficient, leaving - only a division by 3. - The division by 3 is done by an optimized algorithm for this case. - */ + // The algorithm requires two divisions by 2 and one by 3. + // All divisions are known to be exact, that is, they do not produce + // remainders, and all results are positive. The divisions by 2 are + // implemented as right shifts which are relatively efficient, leaving + // only a division by 3. + // The division by 3 is done by an optimized algorithm for this case. t2 = v2.subtract(vm1).exactDivideBy3(); tm1 = v1.subtract(vm1).shiftRight(1); t1 = v1.subtract(v0); @@ -1936,11 +1942,28 @@ * @throws ArithmeticException if {@code val} is zero. */ public BigInteger divide(BigInteger val) { + if (mag.length < BURNIKEL_ZIEGLER_THRESHOLD || + val.mag.length < BURNIKEL_ZIEGLER_THRESHOLD) { + return divideKnuth(val); + } else { + return divideBurnikelZiegler(val); + } + } + + /** + * Returns a BigInteger whose value is {@code (this / val)} using an O(n^2) algorithm from Knuth. + * + * @param val value by which this BigInteger is to be divided. + * @return {@code this / val} + * @throws ArithmeticException if {@code val} is zero. + * @see MutableBigInteger#divideKnuth(MutableBigInteger, MutableBigInteger, boolean) + */ + private BigInteger divideKnuth(BigInteger val) { MutableBigInteger q = new MutableBigInteger(), a = new MutableBigInteger(this.mag), b = new MutableBigInteger(val.mag); - a.divide(b, q, false); + a.divideKnuth(b, q, false); return q.toBigInteger(this.signum * val.signum); } @@ -1956,11 +1979,21 @@ * @throws ArithmeticException if {@code val} is zero. */ public BigInteger[] divideAndRemainder(BigInteger val) { + if (mag.length < BURNIKEL_ZIEGLER_THRESHOLD || + val.mag.length < BURNIKEL_ZIEGLER_THRESHOLD) { + return divideAndRemainderKnuth(val); + } else { + return divideAndRemainderBurnikelZiegler(val); + } + } + + /** Long division */ + private BigInteger[] divideAndRemainderKnuth(BigInteger val) { BigInteger[] result = new BigInteger[2]; MutableBigInteger q = new MutableBigInteger(), a = new MutableBigInteger(this.mag), b = new MutableBigInteger(val.mag); - MutableBigInteger r = a.divide(b, q); + MutableBigInteger r = a.divideKnuth(b, q); result[0] = q.toBigInteger(this.signum == val.signum ? 1 : -1); result[1] = r.toBigInteger(this.signum); return result; @@ -1975,11 +2008,53 @@ * @throws ArithmeticException if {@code val} is zero. */ public BigInteger remainder(BigInteger val) { + if (mag.length < BURNIKEL_ZIEGLER_THRESHOLD || + val.mag.length < BURNIKEL_ZIEGLER_THRESHOLD) { + return remainderKnuth(val); + } else { + return remainderBurnikelZiegler(val); + } + } + + /** Long division */ + private BigInteger remainderKnuth(BigInteger val) { MutableBigInteger q = new MutableBigInteger(), a = new MutableBigInteger(this.mag), b = new MutableBigInteger(val.mag); - return a.divide(b, q).toBigInteger(this.signum); + return a.divideKnuth(b, q).toBigInteger(this.signum); + } + + /** + * Calculates {@code this / val} using the Burnikel-Ziegler algorithm. + * @param val the divisor + * @return {@code this / val} + */ + private BigInteger divideBurnikelZiegler(BigInteger val) { + return divideAndRemainderBurnikelZiegler(val)[0]; + } + + /** + * Calculates {@code this % val} using the Burnikel-Ziegler algorithm. + * @param val the divisor + * @return {@code this % val} + */ + private BigInteger remainderBurnikelZiegler(BigInteger val) { + return divideAndRemainderBurnikelZiegler(val)[1]; + } + + /** + * Computes {@code this / val} and {@code this % val} using the + * Burnikel-Ziegler algorithm. + * @param val the divisor + * @return an array containing the quotient and remainder + */ + private BigInteger[] divideAndRemainderBurnikelZiegler(BigInteger val) { + MutableBigInteger q = new MutableBigInteger(); + MutableBigInteger r = new MutableBigInteger(this).divideAndRemainderBurnikelZiegler(new MutableBigInteger(val), q); + BigInteger qBigInt = q.isZero() ? ZERO : q.toBigInteger(signum*val.signum); + BigInteger rBigInt = r.isZero() ? ZERO : r.toBigInteger(signum); + return new BigInteger[] {qBigInt, rBigInt}; } /** @@ -1992,10 +2067,12 @@ * cause the operation to yield a non-integer value.) */ public BigInteger pow(int exponent) { - if (exponent < 0) + if (exponent < 0) { throw new ArithmeticException("Negative exponent"); - if (signum==0) - return (exponent==0 ? ONE : this); + } + if (signum == 0) { + return (exponent == 0 ? ONE : this); + } BigInteger partToSquare = this.abs(); @@ -2008,24 +2085,25 @@ int remainingBits; // Factor the powers of two out quickly by shifting right, if needed. - if (powersOfTwo > 0) - { + if (powersOfTwo > 0) { partToSquare = partToSquare.shiftRight(powersOfTwo); remainingBits = partToSquare.bitLength(); - if (remainingBits == 1) // Nothing left but +/- 1? - if (signum<0 && (exponent&1)==1) + if (remainingBits == 1) { // Nothing left but +/- 1? + if (signum < 0 && (exponent&1) == 1) { return NEGATIVE_ONE.shiftLeft(powersOfTwo*exponent); - else + } else { return ONE.shiftLeft(powersOfTwo*exponent); - } - else - { + } + } + } else { remainingBits = partToSquare.bitLength(); - if (remainingBits == 1) // Nothing left but +/- 1? - if (signum<0 && (exponent&1)==1) + if (remainingBits == 1) { // Nothing left but +/- 1? + if (signum < 0 && (exponent&1) == 1) { return NEGATIVE_ONE; - else + } else { return ONE; + } + } } // This is a quick way to approximate the size of the result, @@ -2035,10 +2113,9 @@ // Use slightly different algorithms for small and large operands. // See if the result will safely fit into a long. (Largest 2^63-1) - if (partToSquare.mag.length==1 && scaleFactor <= 62) - { + if (partToSquare.mag.length == 1 && scaleFactor <= 62) { // Small number algorithm. Everything fits into a long. - int newSign = (signum<0 && (exponent&1)==1 ? -1 : 1); + int newSign = (signum <0 && (exponent&1) == 1 ? -1 : 1); long result = 1; long baseToPow2 = partToSquare.mag[0] & LONG_MASK; @@ -2046,27 +2123,28 @@ // Perform exponentiation using repeated squaring trick while (workingExponent != 0) { - if ((workingExponent & 1)==1) + if ((workingExponent & 1) == 1) { result = result * baseToPow2; - - if ((workingExponent >>>= 1) != 0) + } + + if ((workingExponent >>>= 1) != 0) { baseToPow2 = baseToPow2 * baseToPow2; + } } // Multiply back the powers of two (quickly, by shifting left) - if (powersOfTwo > 0) - { + if (powersOfTwo > 0) { int bitsToShift = powersOfTwo*exponent; - if (bitsToShift + scaleFactor <= 62) // Fits in long? + if (bitsToShift + scaleFactor <= 62) { // Fits in long? return valueOf((result << bitsToShift) * newSign); - else + } else { return valueOf(result*newSign).shiftLeft(bitsToShift); + } } - else + else { return valueOf(result*newSign); - } - else - { + } + } else { // Large number algorithm. This is basically identical to // the algorithm above, but calls multiply() and square() // which may use more efficient algorithms for large numbers. @@ -2075,28 +2153,32 @@ int workingExponent = exponent; // Perform exponentiation using repeated squaring trick while (workingExponent != 0) { - if ((workingExponent & 1)==1) + if ((workingExponent & 1) == 1) { answer = answer.multiply(partToSquare); - - if ((workingExponent >>>= 1) != 0) + } + + if ((workingExponent >>>= 1) != 0) { partToSquare = partToSquare.square(); + } } // Multiply back the (exponentiated) powers of two (quickly, // by shifting left) - if (powersOfTwo > 0) + if (powersOfTwo > 0) { answer = answer.shiftLeft(powersOfTwo*exponent); - - if (signum<0 && (exponent&1)==1) + } + + if (signum < 0 && (exponent&1) == 1) { return answer.negate(); - else + } else { return answer; + } } } /** * Returns a BigInteger whose value is the greatest common divisor of * {@code abs(this)} and {@code abs(val)}. Returns 0 if - * {@code this==0 && val==0}. + * {@code this == 0 && val == 0}. * * @param val value with which the GCD is to be computed. * @return {@code GCD(abs(this), abs(val))} @@ -2153,7 +2235,7 @@ // shifts a up to len right n bits assumes no leading zeros, 0<n<32 static void primitiveRightShift(int[] a, int len, int n) { int n2 = 32 - n; - for (int i=len-1, c=a[i]; i>0; i--) { + for (int i=len-1, c=a[i]; i > 0; i--) { int b = c; c = a[i-1]; a[i] = (c << n2) | (b >>> n); @@ -2167,7 +2249,7 @@ return; int n2 = 32 - n; - for (int i=0, c=a[i], m=i+len-1; i<m; i++) { + for (int i=0, c=a[i], m=i+len-1; i < m; i++) { int b = c; c = a[i+1]; a[i] = (b << n) | (c >>> n2); @@ -2378,7 +2460,7 @@ return this; // Special case for base of zero - if (signum==0) + if (signum == 0) return ZERO; int[] base = mag.clone(); @@ -2401,7 +2483,7 @@ // Allocate table for precomputed odd powers of base in Montgomery form int[][] table = new int[tblmask][]; - for (int i=0; i<tblmask; i++) + for (int i=0; i < tblmask; i++) table[i] = new int[modLen]; // Compute the modular inverse @@ -2421,7 +2503,7 @@ if (table[0].length < modLen) { int offset = modLen - table[0].length; int[] t2 = new int[modLen]; - for (int i=0; i<table[0].length; i++) + for (int i=0; i < table[0].length; i++) t2[i+offset] = table[0][i]; table[0] = t2; } @@ -2434,7 +2516,7 @@ int[] t = Arrays.copyOf(b, modLen); // Fill in the table with odd powers of the base - for (int i=1; i<tblmask; i++) { + for (int i=1; i < tblmask; i++) { int[] prod = multiplyToLen(t, modLen, table[i-1], modLen, null); table[i] = montReduce(prod, mod, modLen, inv); } @@ -2474,7 +2556,7 @@ isone = false; // The main loop - while(true) { + while (true) { ebits--; // Advance the window buf <<= 1; @@ -2551,9 +2633,9 @@ int carry = mulAdd(n, mod, offset, mlen, inv * nEnd); c += addOne(n, offset, mlen, carry); offset++; - } while(--len > 0); - - while(c>0) + } while (--len > 0); + + while (c > 0) c += subN(n, mod, mlen); while (intArrayCmpToLen(n, mod, mlen) >= 0) @@ -2568,7 +2650,7 @@ * equal to, or greater than arg2 up to length len. */ private static int intArrayCmpToLen(int[] arg1, int[] arg2, int len) { - for (int i=0; i<len; i++) { + for (int i=0; i < len; i++) { long b1 = arg1[i] & LONG_MASK; long b2 = arg2[i] & LONG_MASK; if (b1 < b2) @@ -2585,7 +2667,7 @@ private static int subN(int[] a, int[] b, int len) { long sum = 0; - while(--len >= 0) { + while (--len >= 0) { sum = (a[len] & LONG_MASK) - (b[len] & LONG_MASK) + (sum >> 32); a[len] = (int)sum; @@ -2679,7 +2761,7 @@ int excessBits = (numInts << 5) - p; mag[0] &= (1L << (32-excessBits)) - 1; - return (mag[0]==0 ? new BigInteger(1, mag) : new BigInteger(mag, 1)); + return (mag[0] == 0 ? new BigInteger(1, mag) : new BigInteger(mag, 1)); } /** @@ -2730,9 +2812,9 @@ public BigInteger shiftLeft(int n) { if (signum == 0) return ZERO; - if (n==0) + if (n == 0) return this; - if (n<0) { + if (n < 0) { if (n == Integer.MIN_VALUE) { throw new ArithmeticException("Shift distance of Integer.MIN_VALUE not supported."); } else { @@ -2784,9 +2866,9 @@ * @see #shiftLeft */ public BigInteger shiftRight(int n) { - if (n==0) + if (n == 0) return this; - if (n<0) { + if (n < 0) { if (n == Integer.MIN_VALUE) { throw new ArithmeticException("Shift distance of Integer.MIN_VALUE not supported."); } else { @@ -2825,7 +2907,7 @@ if (signum < 0) { // Find out whether any one-bits were shifted off the end. boolean onesLost = false; - for (int i=magLen-1, j=magLen-nInts; i>=j && !onesLost; i--) + for (int i=magLen-1, j=magLen-nInts; i >= j && !onesLost; i--) onesLost = (mag[i] != 0); if (!onesLost && nBits != 0) onesLost = (mag[magLen - nInts - 1] << (32 - nBits) != 0); @@ -2860,7 +2942,7 @@ */ public BigInteger and(BigInteger val) { int[] result = new int[Math.max(intLength(), val.intLength())]; - for (int i=0; i<result.length; i++) + for (int i=0; i < result.length; i++) result[i] = (getInt(result.length-i-1) & val.getInt(result.length-i-1)); @@ -2877,7 +2959,7 @@ */ public BigInteger or(BigInteger val) { int[] result = new int[Math.max(intLength(), val.intLength())]; - for (int i=0; i<result.length; i++) + for (int i=0; i < result.length; i++) result[i] = (getInt(result.length-i-1) | val.getInt(result.length-i-1)); @@ -2894,7 +2976,7 @@ */ public BigInteger xor(BigInteger val) { int[] result = new int[Math.max(intLength(), val.intLength())]; - for (int i=0; i<result.length; i++) + for (int i=0; i < result.length; i++) result[i] = (getInt(result.length-i-1) ^ val.getInt(result.length-i-1)); @@ -2910,7 +2992,7 @@ */ public BigInteger not() { int[] result = new int[intLength()]; - for (int i=0; i<result.length; i++) + for (int i=0; i < result.length; i++) result[i] = ~getInt(result.length-i-1); return valueOf(result); @@ -2928,7 +3010,7 @@ */ public BigInteger andNot(BigInteger val) { int[] result = new int[Math.max(intLength(), val.intLength())]; - for (int i=0; i<result.length; i++) + for (int i=0; i < result.length; i++) result[i] = (getInt(result.length-i-1) & ~val.getInt(result.length-i-1)); @@ -2947,7 +3029,7 @@ * @throws ArithmeticException {@code n} is negative. */ public boolean testBit(int n) { - if (n<0) + if (n < 0) throw new ArithmeticException("Negative bit address"); return (getInt(n >>> 5) & (1 << (n & 31))) != 0; @@ -2962,13 +3044,13 @@ * @throws ArithmeticException {@code n} is negative. */ public BigInteger setBit(int n) { - if (n<0) + if (n < 0) throw new ArithmeticException("Negative bit address"); int intNum = n >>> 5; int[] result = new int[Math.max(intLength(), intNum+2)]; - for (int i=0; i<result.length; i++) + for (int i=0; i < result.length; i++) result[result.length-i-1] = getInt(i); result[result.length-intNum-1] |= (1 << (n & 31)); @@ -2986,13 +3068,13 @@ * @throws ArithmeticException {@code n} is negative. */ public BigInteger clearBit(int n) { - if (n<0) + if (n < 0) throw new ArithmeticException("Negative bit address"); int intNum = n >>> 5; int[] result = new int[Math.max(intLength(), ((n + 1) >>> 5) + 1)]; - for (int i=0; i<result.length; i++) + for (int i=0; i < result.length; i++) result[result.length-i-1] = getInt(i); result[result.length-intNum-1] &= ~(1 << (n & 31)); @@ -3010,13 +3092,13 @@ * @throws ArithmeticException {@code n} is negative. */ public BigInteger flipBit(int n) { - if (n<0) + if (n < 0) throw new ArithmeticException("Negative bit address"); int intNum = n >>> 5; int[] result = new int[Math.max(intLength(), intNum+2)]; - for (int i=0; i<result.length; i++) + for (int i=0; i < result.length; i++) result[result.length-i-1] = getInt(i); result[result.length-intNum-1] ^= (1 << (n & 31)); @@ -3028,7 +3110,7 @@ * Returns the index of the rightmost (lowest-order) one bit in this * BigInteger (the number of zero bits to the right of the rightmost * one bit). Returns -1 if this BigInteger contains no one bits. - * (Computes {@code (this==0? -1 : log2(this & -this))}.) + * (Computes {@code (this == 0? -1 : log2(this & -this))}.) * * @return index of the rightmost one bit in this BigInteger. */ @@ -3041,7 +3123,7 @@ } else { // Search for lowest order nonzero int int i,b; - for (i=0; (b = getInt(i))==0; i++) + for (i=0; (b = getInt(i)) == 0; i++) ; lsb += (i << 5) + Integer.numberOfTrailingZeros(b); } @@ -3102,12 +3184,12 @@ if (bc == -1) { // bitCount not initialized yet bc = 0; // offset by one to initialize // Count the bits in the magnitude - for (int i=0; i<mag.length; i++) + for (int i=0; i < mag.length; i++) bc += Integer.bitCount(mag[i]); if (signum < 0) { // Count the trailing zeros in the magnitude int magTrailingZeroCount = 0, j; - for (j=mag.length-1; mag[j]==0; j--) + for (j=mag.length-1; mag[j] == 0; j--) magTrailingZeroCount += 32; magTrailingZeroCount += Integer.numberOfTrailingZeros(mag[j]); bc += magTrailingZeroCount - 1; @@ -3208,14 +3290,14 @@ assert val != Long.MIN_VALUE; int[] m1 = mag; int len = m1.length; - if(len > 2) { + if (len > 2) { return 1; } if (val < 0) { val = -val; } int highWord = (int)(val >>> 32); - if (highWord==0) { + if (highWord == 0) { if (len < 1) return -1; if (len > 1) @@ -3283,7 +3365,7 @@ * {@code val}. If they are equal, either may be returned. */ public BigInteger min(BigInteger val) { - return (compareTo(val)<0 ? this : val); + return (compareTo(val) < 0 ? this : val); } /** @@ -3294,7 +3376,7 @@ * {@code val}. If they are equal, either may be returned. */ public BigInteger max(BigInteger val) { - return (compareTo(val)>0 ? this : val); + return (compareTo(val) > 0 ? this : val); } @@ -3308,7 +3390,7 @@ public int hashCode() { int hashCode = 0; - for (int i=0; i<mag.length; i++) + for (int i=0; i < mag.length; i++) hashCode = (int)(31*hashCode + (mag[i] & LONG_MASK)); return hashCode * signum; @@ -3356,8 +3438,9 @@ /** This method is used to perform toString when arguments are small. */ private String smallToString(int radix) { - if (signum == 0) + if (signum == 0) { return "0"; + } // Compute upper bound on number of digit groups and allocate space int maxNumDigitGroups = (4*mag.length + 6)/7; @@ -3382,16 +3465,18 @@ // Put sign (if any) and first digit group into result buffer StringBuilder buf = new StringBuilder(numGroups*digitsPerLong[radix]+1); - if (signum<0) + if (signum < 0) { buf.append('-'); + } buf.append(digitGroup[numGroups-1]); // Append remaining digit groups padded with leading zeros - for (int i=numGroups-2; i>=0; i--) { + for (int i=numGroups-2; i >= 0; i--) { // Prepend (any) leading zeros for this digit group int numLeadingZeros = digitsPerLong[radix]-digitGroup[i].length(); - if (numLeadingZeros != 0) + if (numLeadingZeros != 0) { buf.append(zeros[numLeadingZeros]); + } buf.append(digitGroup[i]); } return buf.toString(); @@ -3399,7 +3484,7 @@ /** * Converts the specified BigInteger to a string and appends to - * <code>sb</code>. This implements the recursive Schoenhage algorithm + * {@code sb}. This implements the recursive Schoenhage algorithm * for base conversions. * <p/> * See Knuth, Donald, _The Art of Computer Programming_, Vol. 2, @@ -3419,9 +3504,11 @@ // Pad with internal zeros if necessary. // Don't pad if we're at the beginning of the string. - if ((s.length() < digits) && (sb.length() > 0)) - for (int i=s.length(); i<digits; i++) // May be a faster way to + if ((s.length() < digits) && (sb.length() > 0)) { + for (int i=s.length(); i < digits; i++) { // May be a faster way to sb.append('0'); // do this? + } + } sb.append(s); return; @@ -3450,7 +3537,7 @@ * If this value doesn't already exist in the cache, it is added. * <p/> * This could be changed to a more complicated caching method using - * <code>Future</code>. + * {@code Future}. */ private static BigInteger getRadixConversionCache(int radix, int exponent) { BigInteger[] cacheLine = powerCache[radix]; // volatile read @@ -3478,7 +3565,7 @@ static { zeros[63] = "000000000000000000000000000000000000000000000000000000000000000"; - for (int i=0; i<63; i++) + for (int i=0; i < 63; i++) zeros[i] = zeros[63].substring(0, i); } @@ -3516,7 +3603,7 @@ int byteLen = bitLength()/8 + 1; byte[] byteArray = new byte[byteLen]; - for (int i=byteLen-1, bytesCopied=4, nextInt=0, intIndex=0; i>=0; i--) { + for (int i=byteLen-1, bytesCopied=4, nextInt=0, intIndex=0; i >= 0; i--) { if (bytesCopied == 4) { nextInt = getInt(intIndex++); bytesCopied = 1; @@ -3568,7 +3655,7 @@ public long longValue() { long result = 0; - for (int i=1; i>=0; i--) + for (int i=1; i >= 0; i--) result = (result << 32) + (getInt(i) & LONG_MASK); return result; } @@ -3784,7 +3871,7 @@ int keep; // Find first nonzero byte - for (keep = 0; keep < byteLength && a[keep]==0; keep++) + for (keep = 0; keep < byteLength && a[keep] == 0; keep++) ; // Allocate new array and copy relevant part of input array @@ -3810,16 +3897,16 @@ int byteLength = a.length; // Find first non-sign (0xff) byte of input - for (keep=0; keep<byteLength && a[keep]==-1; keep++) + for (keep=0; keep < byteLength && a[keep] == -1; keep++) ; /* Allocate output array. If all non-sign bytes are 0x00, we must * allocate space for one extra output byte. */ - for (k=keep; k<byteLength && a[k]==0; k++) + for (k=keep; k < byteLength && a[k] == 0; k++) ; - int extraByte = (k==byteLength) ? 1 : 0; + int extraByte = (k == byteLength) ? 1 : 0; int intLength = ((byteLength - keep + extraByte) + 3)/4; int result[] = new int[intLength]; @@ -3840,7 +3927,7 @@ } // Add one to one's complement to generate two's complement - for (int i=result.length-1; i>=0; i--) { + for (int i=result.length-1; i >= 0; i--) { result[i] = (int)((result[i] & LONG_MASK) + 1); if (result[i] != 0) break; @@ -3857,23 +3944,23 @@ int keep, j; // Find first non-sign (0xffffffff) int of input - for (keep=0; keep<a.length && a[keep]==-1; keep++) + for (keep=0; keep < a.length && a[keep] == -1; keep++) ; /* Allocate output array. If all non-sign ints are 0x00, we must * allocate space for one extra output int. */ - for (j=keep; j<a.length && a[j]==0; j++) + for (j=keep; j < a.length && a[j] == 0; j++) ; - int extraInt = (j==a.length ? 1 : 0); + int extraInt = (j == a.length ? 1 : 0); int result[] = new int[a.length - keep + extraInt]; /* Copy one's complement of input into output, leaving extra * int (if it exists) == 0x00 */ - for (int i = keep; i<a.length; i++) + for (int i = keep; i < a.length; i++) result[i - keep + extraInt] = ~a[i]; // Add one to one's complement to generate two's complement - for (int i=result.length-1; ++result[i]==0; i--) + for (int i=result.length-1; ++result[i] == 0; i--) ; return result; @@ -4131,7 +4218,7 @@ byte[] result = new byte[byteLen]; for (int i = byteLen - 1, bytesCopied = 4, intIndex = len - 1, nextInt = 0; - i>=0; i--) { + i >= 0; i--) { if (bytesCopied == 4) { nextInt = mag[intIndex--]; bytesCopied = 1;
--- a/jdk/src/share/classes/java/math/MutableBigInteger.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/math/MutableBigInteger.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, 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 @@ -38,14 +38,14 @@ * * @see BigInteger * @author Michael McCloskey + * @author Timothy Buktu * @since 1.3 */ +import static java.math.BigDecimal.INFLATED; +import static java.math.BigInteger.LONG_MASK; import java.util.Arrays; -import static java.math.BigInteger.LONG_MASK; -import static java.math.BigDecimal.INFLATED; - class MutableBigInteger { /** * Holds the magnitude of this MutableBigInteger in big endian order. @@ -75,6 +75,24 @@ */ static final MutableBigInteger ONE = new MutableBigInteger(1); + /** + * The minimum {@code intLen} for cancelling powers of two before + * dividing. + * If the number of ints is less than this threshold, + * {@code divideKnuth} does not eliminate common powers of two from + * the dividend and divisor. + */ + static final int KNUTH_POW2_THRESH_LEN = 6; + + /** + * The minimum number of trailing zero ints for cancelling powers of two + * before dividing. + * If the dividend and divisor don't share at least this many zero ints + * at the end, {@code divideKnuth} does not eliminate common powers + * of two from the dividend and divisor. + */ + static final int KNUTH_POW2_THRESH_ZEROS = 3; + // Constructors /** @@ -124,6 +142,20 @@ } /** + * Makes this number an {@code n}-int number all of whose bits are ones. + * Used by Burnikel-Ziegler division. + * @param n number of ints in the {@code value} array + * @return a number equal to {@code ((1<<(32*n)))-1} + */ + private void ones(int n) { + if (n > value.length) + value = new int[n]; + Arrays.fill(value, -1); + offset = 0; + intLen = n; + } + + /** * Internal helper method to return the magnitude array. The caller is not * supposed to modify the returned array. */ @@ -155,6 +187,14 @@ } /** + * Converts this number to a nonnegative {@code BigInteger}. + */ + BigInteger toBigInteger() { + normalize(); + return toBigInteger(isZero() ? 0 : 1); + } + + /** * Convert this MutableBigInteger to BigDecimal object with the specified sign * and scale. */ @@ -238,6 +278,32 @@ } /** + * Returns a value equal to what {@code b.leftShift(32*ints); return compare(b);} + * would return, but doesn't change the value of {@code b}. + */ + private int compareShifted(MutableBigInteger b, int ints) { + int blen = b.intLen; + int alen = intLen - ints; + if (alen < blen) + return -1; + if (alen > blen) + return 1; + + // Add Integer.MIN_VALUE to make the comparison act as unsigned integer + // comparison. + int[] bval = b.value; + for (int i = offset, j = b.offset; i < alen + offset; i++, j++) { + int b1 = value[i] + 0x80000000; + int b2 = bval[j] + 0x80000000; + if (b1 < b2) + return -1; + if (b1 > b2) + return 1; + } + return 0; + } + + /** * Compare this against half of a MutableBigInteger object (Needed for * remainder tests). * Assumes no leading unnecessary zeros, which holds for results @@ -247,7 +313,7 @@ int blen = b.intLen; int len = intLen; if (len <= 0) - return blen <=0 ? 0 : -1; + return blen <= 0 ? 0 : -1; if (len > blen) return 1; if (len < blen - 1) @@ -274,7 +340,7 @@ return v < hb ? -1 : 1; carry = (bv & 1) << 31; // carray will be either 0x80000000 or 0 } - return carry == 0? 0 : -1; + return carry == 0 ? 0 : -1; } /** @@ -285,10 +351,10 @@ if (intLen == 0) return -1; int j, b; - for (j=intLen-1; (j>0) && (value[j+offset]==0); j--) + for (j=intLen-1; (j > 0) && (value[j+offset] == 0); j--) ; b = value[j+offset]; - if (b==0) + if (b == 0) return -1; return ((intLen-1-j)<<5) + Integer.numberOfTrailingZeros(b); } @@ -329,11 +395,11 @@ int indexBound = index+intLen; do { index++; - } while(index < indexBound && value[index]==0); + } while(index < indexBound && value[index] == 0); int numZeros = index - offset; intLen -= numZeros; - offset = (intLen==0 ? 0 : offset+numZeros); + offset = (intLen == 0 ? 0 : offset+numZeros); } /** @@ -354,7 +420,7 @@ */ int[] toIntArray() { int[] result = new int[intLen]; - for(int i=0; i<intLen; i++) + for(int i=0; i < intLen; i++) result[i] = value[offset+i]; return result; } @@ -440,7 +506,7 @@ boolean isNormal() { if (intLen + offset > value.length) return false; - if (intLen ==0) + if (intLen == 0) return true; return (value[offset] != 0); } @@ -454,6 +520,17 @@ } /** + * Like {@link #rightShift(int)} but {@code n} can be greater than the length of the number. + */ + void safeRightShift(int n) { + if (n/32 >= intLen) { + reset(); + } else { + rightShift(n); + } + } + + /** * Right shift this MutableBigInteger n bits. The MutableBigInteger is left * in normal form. */ @@ -475,6 +552,15 @@ } /** + * Like {@link #leftShift(int)} but {@code n} can be zero. + */ + void safeLeftShift(int n) { + if (n > 0) { + leftShift(n); + } + } + + /** * Left shift this MutableBigInteger n bits. */ void leftShift(int n) { @@ -502,18 +588,18 @@ if (value.length < newLen) { // The array must grow int[] result = new int[newLen]; - for (int i=0; i<intLen; i++) + for (int i=0; i < intLen; i++) result[i] = value[offset+i]; setValue(result, newLen); } else if (value.length - offset >= newLen) { // Use space on right - for(int i=0; i<newLen - intLen; i++) + for(int i=0; i < newLen - intLen; i++) value[offset+intLen+i] = 0; } else { // Must use space on left - for (int i=0; i<intLen; i++) + for (int i=0; i < intLen; i++) value[i] = value[offset+i]; - for (int i=intLen; i<newLen; i++) + for (int i=intLen; i < newLen; i++) value[i] = 0; offset = 0; } @@ -590,7 +676,7 @@ private final void primitiveRightShift(int n) { int[] val = value; int n2 = 32 - n; - for (int i=offset+intLen-1, c=val[i]; i>offset; i--) { + for (int i=offset+intLen-1, c=val[i]; i > offset; i--) { int b = c; c = val[i-1]; val[i] = (c << n2) | (b >>> n); @@ -606,7 +692,7 @@ private final void primitiveLeftShift(int n) { int[] val = value; int n2 = 32 - n; - for (int i=offset, c=val[i], m=i+intLen-1; i<m; i++) { + for (int i=offset, c=val[i], m=i+intLen-1; i < m; i++) { int b = c; c = val[i+1]; val[i] = (b << n) | (c >>> n2); @@ -615,6 +701,35 @@ } /** + * Returns a {@code BigInteger} equal to the {@code n} + * low ints of this number. + */ + private BigInteger getLower(int n) { + if (isZero()) { + return BigInteger.ZERO; + } else if (intLen < n) { + return toBigInteger(1); + } else { + // strip zeros + int len = n; + while (len > 0 && value[offset+intLen-len] == 0) + len--; + int sign = len > 0 ? 1 : 0; + return new BigInteger(Arrays.copyOfRange(value, offset+intLen-len, offset+intLen), sign); + } + } + + /** + * Discards all ints whose index is greater than {@code n}. + */ + private void keepLower(int n) { + if (intLen >= n) { + offset += intLen - n; + intLen = n; + } + } + + /** * Adds the contents of two MutableBigInteger objects.The result * is placed within this MutableBigInteger. * The contents of the addend are not changed. @@ -630,7 +745,7 @@ long carry = 0; // Add common parts of both numbers - while(x>0 && y>0) { + while(x > 0 && y > 0) { x--; y--; sum = (value[x+offset] & LONG_MASK) + (addend.value[y+addend.offset] & LONG_MASK) + carry; @@ -639,7 +754,7 @@ } // Add remainder of the longer number - while(x>0) { + while(x > 0) { x--; if (carry == 0 && result == value && rstart == (x + offset)) return; @@ -647,7 +762,7 @@ result[rstart--] = (int)sum; carry = sum >>> 32; } - while(y>0) { + while(y > 0) { y--; sum = (addend.value[y+addend.offset] & LONG_MASK) + carry; result[rstart--] = (int)sum; @@ -673,6 +788,123 @@ offset = result.length - resultLen; } + /** + * Adds the value of {@code addend} shifted {@code n} ints to the left. + * Has the same effect as {@code addend.leftShift(32*ints); add(addend);} + * but doesn't change the value of {@code addend}. + */ + void addShifted(MutableBigInteger addend, int n) { + if (addend.isZero()) { + return; + } + + int x = intLen; + int y = addend.intLen + n; + int resultLen = (intLen > y ? intLen : y); + int[] result = (value.length < resultLen ? new int[resultLen] : value); + + int rstart = result.length-1; + long sum; + long carry = 0; + + // Add common parts of both numbers + while (x > 0 && y > 0) { + x--; y--; + int bval = y+addend.offset < addend.value.length ? addend.value[y+addend.offset] : 0; + sum = (value[x+offset] & LONG_MASK) + + (bval & LONG_MASK) + carry; + result[rstart--] = (int)sum; + carry = sum >>> 32; + } + + // Add remainder of the longer number + while (x > 0) { + x--; + if (carry == 0 && result == value && rstart == (x + offset)) { + return; + } + sum = (value[x+offset] & LONG_MASK) + carry; + result[rstart--] = (int)sum; + carry = sum >>> 32; + } + while (y > 0) { + y--; + int bval = y+addend.offset < addend.value.length ? addend.value[y+addend.offset] : 0; + sum = (bval & LONG_MASK) + carry; + result[rstart--] = (int)sum; + carry = sum >>> 32; + } + + if (carry > 0) { // Result must grow in length + resultLen++; + if (result.length < resultLen) { + int temp[] = new int[resultLen]; + // Result one word longer from carry-out; copy low-order + // bits into new result. + System.arraycopy(result, 0, temp, 1, result.length); + temp[0] = 1; + result = temp; + } else { + result[rstart--] = 1; + } + } + + value = result; + intLen = resultLen; + offset = result.length - resultLen; + } + + /** + * Like {@link #addShifted(MutableBigInteger, int)} but {@code this.intLen} must + * not be greater than {@code n}. In other words, concatenates {@code this} + * and {@code addend}. + */ + void addDisjoint(MutableBigInteger addend, int n) { + if (addend.isZero()) + return; + + int x = intLen; + int y = addend.intLen + n; + int resultLen = (intLen > y ? intLen : y); + int[] result; + if (value.length < resultLen) + result = new int[resultLen]; + else { + result = value; + Arrays.fill(value, offset+intLen, value.length, 0); + } + + int rstart = result.length-1; + + // copy from this if needed + System.arraycopy(value, offset, result, rstart+1-x, x); + y -= x; + rstart -= x; + + int len = Math.min(y, addend.value.length-addend.offset); + System.arraycopy(addend.value, addend.offset, result, rstart+1-y, len); + + // zero the gap + for (int i=rstart+1-y+len; i < rstart+1; i++) + result[i] = 0; + + value = result; + intLen = resultLen; + offset = result.length - resultLen; + } + + /** + * Adds the low {@code n} ints of {@code addend}. + */ + void addLower(MutableBigInteger addend, int n) { + MutableBigInteger a = new MutableBigInteger(addend); + if (a.offset + a.intLen >= n) { + a.offset = a.offset + a.intLen - n; + a.intLen = n; + } + a.normalize(); + add(a); + } /** * Subtracts the smaller of this and b from the larger and places the @@ -704,7 +936,7 @@ int rstart = result.length - 1; // Subtract common parts of both numbers - while (y>0) { + while (y > 0) { x--; y--; diff = (a.value[x+a.offset] & LONG_MASK) - @@ -712,7 +944,7 @@ result[rstart--] = (int)diff; } // Subtract remainder of longer number - while (x>0) { + while (x > 0) { x--; diff = (a.value[x+a.offset] & LONG_MASK) - ((int)-(diff>>32)); result[rstart--] = (int)diff; @@ -733,7 +965,7 @@ private int difference(MutableBigInteger b) { MutableBigInteger a = this; int sign = a.compare(b); - if (sign ==0) + if (sign == 0) return 0; if (sign < 0) { MutableBigInteger tmp = a; @@ -746,14 +978,14 @@ int y = b.intLen; // Subtract common parts of both numbers - while (y>0) { + while (y > 0) { x--; y--; diff = (a.value[a.offset+ x] & LONG_MASK) - (b.value[b.offset+ y] & LONG_MASK) - ((int)-(diff>>32)); a.value[a.offset+x] = (int)diff; } // Subtract remainder of longer number - while (x>0) { + while (x > 0) { x--; diff = (a.value[a.offset+ x] & LONG_MASK) - ((int)-(diff>>32)); a.value[a.offset+x] = (int)diff; @@ -822,7 +1054,7 @@ // Perform the multiplication word by word long ylong = y & LONG_MASK; - int[] zval = (z.value.length<intLen+1 ? new int[intLen + 1] + int[] zval = (z.value.length < intLen+1 ? new int[intLen + 1] : z.value); long carry = 0; for (int i = intLen-1; i >= 0; i--) { @@ -910,6 +1142,31 @@ * Calculates the quotient of this div b and places the quotient in the * provided MutableBigInteger objects and the remainder object is returned. * + */ + MutableBigInteger divide(MutableBigInteger b, MutableBigInteger quotient) { + return divide(b,quotient,true); + } + + MutableBigInteger divide(MutableBigInteger b, MutableBigInteger quotient, boolean needRemainder) { + if (intLen < BigInteger.BURNIKEL_ZIEGLER_THRESHOLD || + b.intLen < BigInteger.BURNIKEL_ZIEGLER_THRESHOLD) { + return divideKnuth(b, quotient, needRemainder); + } else { + return divideAndRemainderBurnikelZiegler(b, quotient); + } + } + + /** + * @see #divideKnuth(MutableBigInteger, MutableBigInteger, boolean) + */ + MutableBigInteger divideKnuth(MutableBigInteger b, MutableBigInteger quotient) { + return divideKnuth(b,quotient,true); + } + + /** + * Calculates the quotient of this div b and places the quotient in the + * provided MutableBigInteger objects and the remainder object is returned. + * * Uses Algorithm D in Knuth section 4.3.1. * Many optimizations to that algorithm have been adapted from the Colin * Plumb C library. @@ -917,38 +1174,34 @@ * changed. * */ - MutableBigInteger divide(MutableBigInteger b, MutableBigInteger quotient) { - return divide(b,quotient,true); - } - - MutableBigInteger divide(MutableBigInteger b, MutableBigInteger quotient, boolean needReminder) { + MutableBigInteger divideKnuth(MutableBigInteger b, MutableBigInteger quotient, boolean needRemainder) { if (b.intLen == 0) throw new ArithmeticException("BigInteger divide by zero"); // Dividend is zero if (intLen == 0) { - quotient.intLen = quotient.offset; - return needReminder ? new MutableBigInteger() : null; + quotient.intLen = quotient.offset = 0; + return needRemainder ? new MutableBigInteger() : null; } int cmp = compare(b); // Dividend less than divisor if (cmp < 0) { quotient.intLen = quotient.offset = 0; - return needReminder ? new MutableBigInteger(this) : null; + return needRemainder ? new MutableBigInteger(this) : null; } // Dividend equal to divisor if (cmp == 0) { quotient.value[0] = quotient.intLen = 1; quotient.offset = 0; - return needReminder ? new MutableBigInteger() : null; + return needRemainder ? new MutableBigInteger() : null; } quotient.clear(); // Special case one word divisor if (b.intLen == 1) { int r = divideOneWord(b.value[b.offset], quotient); - if(needReminder) { + if(needRemainder) { if (r == 0) return new MutableBigInteger(); return new MutableBigInteger(r); @@ -956,7 +1209,220 @@ return null; } } - return divideMagnitude(b, quotient, needReminder); + + // Cancel common powers of two if we're above the KNUTH_POW2_* thresholds + if (intLen >= KNUTH_POW2_THRESH_LEN) { + int trailingZeroBits = Math.min(getLowestSetBit(), b.getLowestSetBit()); + if (trailingZeroBits >= KNUTH_POW2_THRESH_ZEROS*32) { + MutableBigInteger a = new MutableBigInteger(this); + b = new MutableBigInteger(b); + a.rightShift(trailingZeroBits); + b.rightShift(trailingZeroBits); + MutableBigInteger r = a.divideKnuth(b, quotient); + r.leftShift(trailingZeroBits); + return r; + } + } + + return divideMagnitude(b, quotient, needRemainder); + } + + /** + * Computes {@code this/b} and {@code this%b} using the + * <a href="http://cr.yp.to/bib/1998/burnikel.ps"> Burnikel-Ziegler algorithm</a>. + * This method implements algorithm 3 from pg. 9 of the Burnikel-Ziegler paper. + * The parameter beta was chosen to b 2<sup>32</sup> so almost all shifts are + * multiples of 32 bits.<br/> + * {@code this} and {@code b} must be nonnegative. + * @param b the divisor + * @param quotient output parameter for {@code this/b} + * @return the remainder + */ + MutableBigInteger divideAndRemainderBurnikelZiegler(MutableBigInteger b, MutableBigInteger quotient) { + int r = intLen; + int s = b.intLen; + + if (r < s) { + return this; + } else { + // Unlike Knuth division, we don't check for common powers of two here because + // BZ already runs faster if both numbers contain powers of two and cancelling them has no + // additional benefit. + + // step 1: let m = min{2^k | (2^k)*BURNIKEL_ZIEGLER_THRESHOLD > s} + int m = 1 << (32-Integer.numberOfLeadingZeros(s/BigInteger.BURNIKEL_ZIEGLER_THRESHOLD)); + + int j = (s+m-1) / m; // step 2a: j = ceil(s/m) + int n = j * m; // step 2b: block length in 32-bit units + int n32 = 32 * n; // block length in bits + int sigma = Math.max(0, n32 - b.bitLength()); // step 3: sigma = max{T | (2^T)*B < beta^n} + MutableBigInteger bShifted = new MutableBigInteger(b); + bShifted.safeLeftShift(sigma); // step 4a: shift b so its length is a multiple of n + safeLeftShift(sigma); // step 4b: shift this by the same amount + + // step 5: t is the number of blocks needed to accommodate this plus one additional bit + int t = (bitLength()+n32) / n32; + if (t < 2) { + t = 2; + } + + // step 6: conceptually split this into blocks a[t-1], ..., a[0] + MutableBigInteger a1 = getBlock(t-1, t, n); // the most significant block of this + + // step 7: z[t-2] = [a[t-1], a[t-2]] + MutableBigInteger z = getBlock(t-2, t, n); // the second to most significant block + z.addDisjoint(a1, n); // z[t-2] + + // do schoolbook division on blocks, dividing 2-block numbers by 1-block numbers + MutableBigInteger qi = new MutableBigInteger(); + MutableBigInteger ri; + quotient.offset = quotient.intLen = 0; + for (int i=t-2; i > 0; i--) { + // step 8a: compute (qi,ri) such that z=b*qi+ri + ri = z.divide2n1n(bShifted, qi); + + // step 8b: z = [ri, a[i-1]] + z = getBlock(i-1, t, n); // a[i-1] + z.addDisjoint(ri, n); + quotient.addShifted(qi, i*n); // update q (part of step 9) + } + // final iteration of step 8: do the loop one more time for i=0 but leave z unchanged + ri = z.divide2n1n(bShifted, qi); + quotient.add(qi); + + ri.rightShift(sigma); // step 9: this and b were shifted, so shift back + return ri; + } + } + + /** + * This method implements algorithm 1 from pg. 4 of the Burnikel-Ziegler paper. + * It divides a 2n-digit number by a n-digit number.<br/> + * The parameter beta is 2<sup>32</sup> so all shifts are multiples of 32 bits. + * <br/> + * {@code this} must be a nonnegative number such that {@code this.bitLength() <= 2*b.bitLength()} + * @param b a positive number such that {@code b.bitLength()} is even + * @param quotient output parameter for {@code this/b} + * @return {@code this%b} + */ + private MutableBigInteger divide2n1n(MutableBigInteger b, MutableBigInteger quotient) { + int n = b.intLen; + + // step 1: base case + if (n%2 != 0 || n < BigInteger.BURNIKEL_ZIEGLER_THRESHOLD) { + return divideKnuth(b, quotient); + } + + // step 2: view this as [a1,a2,a3,a4] where each ai is n/2 ints or less + MutableBigInteger aUpper = new MutableBigInteger(this); + aUpper.safeRightShift(32*(n/2)); // aUpper = [a1,a2,a3] + keepLower(n/2); // this = a4 + + // step 3: q1=aUpper/b, r1=aUpper%b + MutableBigInteger q1 = new MutableBigInteger(); + MutableBigInteger r1 = aUpper.divide3n2n(b, q1); + + // step 4: quotient=[r1,this]/b, r2=[r1,this]%b + addDisjoint(r1, n/2); // this = [r1,this] + MutableBigInteger r2 = divide3n2n(b, quotient); + + // step 5: let quotient=[q1,quotient] and return r2 + quotient.addDisjoint(q1, n/2); + return r2; + } + + /** + * This method implements algorithm 2 from pg. 5 of the Burnikel-Ziegler paper. + * It divides a 3n-digit number by a 2n-digit number.<br/> + * The parameter beta is 2<sup>32</sup> so all shifts are multiples of 32 bits.<br/> + * <br/> + * {@code this} must be a nonnegative number such that {@code 2*this.bitLength() <= 3*b.bitLength()} + * @param quotient output parameter for {@code this/b} + * @return {@code this%b} + */ + private MutableBigInteger divide3n2n(MutableBigInteger b, MutableBigInteger quotient) { + int n = b.intLen / 2; // half the length of b in ints + + // step 1: view this as [a1,a2,a3] where each ai is n ints or less; let a12=[a1,a2] + MutableBigInteger a12 = new MutableBigInteger(this); + a12.safeRightShift(32*n); + + // step 2: view b as [b1,b2] where each bi is n ints or less + MutableBigInteger b1 = new MutableBigInteger(b); + b1.safeRightShift(n * 32); + BigInteger b2 = b.getLower(n); + + MutableBigInteger r; + MutableBigInteger d; + if (compareShifted(b, n) < 0) { + // step 3a: if a1<b1, let quotient=a12/b1 and r=a12%b1 + r = a12.divide2n1n(b1, quotient); + + // step 4: d=quotient*b2 + d = new MutableBigInteger(quotient.toBigInteger().multiply(b2)); + } else { + // step 3b: if a1>=b1, let quotient=beta^n-1 and r=a12-b1*2^n+b1 + quotient.ones(n); + a12.add(b1); + b1.leftShift(32*n); + a12.subtract(b1); + r = a12; + + // step 4: d=quotient*b2=(b2 << 32*n) - b2 + d = new MutableBigInteger(b2); + d.leftShift(32 * n); + d.subtract(new MutableBigInteger(b2)); + } + + // step 5: r = r*beta^n + a3 - d (paper says a4) + // However, don't subtract d until after the while loop so r doesn't become negative + r.leftShift(32 * n); + r.addLower(this, n); + + // step 6: add b until r>=d + while (r.compare(d) < 0) { + r.add(b); + quotient.subtract(MutableBigInteger.ONE); + } + r.subtract(d); + + return r; + } + + /** + * Returns a {@code MutableBigInteger} containing {@code blockLength} ints from + * {@code this} number, starting at {@code index*blockLength}.<br/> + * Used by Burnikel-Ziegler division. + * @param index the block index + * @param numBlocks the total number of blocks in {@code this} number + * @param blockLength length of one block in units of 32 bits + * @return + */ + private MutableBigInteger getBlock(int index, int numBlocks, int blockLength) { + int blockStart = index * blockLength; + if (blockStart >= intLen) { + return new MutableBigInteger(); + } + + int blockEnd; + if (index == numBlocks-1) { + blockEnd = intLen; + } else { + blockEnd = (index+1) * blockLength; + } + if (blockEnd > intLen) { + return new MutableBigInteger(); + } + + int[] newVal = Arrays.copyOfRange(value, offset+intLen-blockEnd, offset+intLen-blockStart); + return new MutableBigInteger(newVal); + } + + /** @see BigInteger#bitLength() */ + int bitLength() { + if (intLen == 0) + return 0; + return intLen*32 - Integer.numberOfLeadingZeros(value[offset]); } /** @@ -1006,7 +1472,7 @@ */ private MutableBigInteger divideMagnitude(MutableBigInteger div, MutableBigInteger quotient, - boolean needReminder ) { + boolean needRemainder ) { // assert div.intLen > 1 // D1 normalize the divisor int shift = Integer.numberOfLeadingZeros(div.value[div.offset]); @@ -1017,7 +1483,7 @@ if (shift > 0) { divisor = new int[dlen]; copyAndShift(div.value,div.offset,dlen,divisor,0,shift); - if(Integer.numberOfLeadingZeros(value[offset])>=shift) { + if (Integer.numberOfLeadingZeros(value[offset]) >= shift) { int[] remarr = new int[intLen + 1]; rem = new MutableBigInteger(remarr); rem.intLen = intLen; @@ -1070,7 +1536,7 @@ int dl = divisor[1]; // D2 Initialize j - for(int j=0; j<limit-1; j++) { + for (int j=0; j < limit-1; j++) { // D3 Calculate qhat // estimate qhat int qhat = 0; @@ -1176,7 +1642,7 @@ // D4 Multiply and subtract int borrow; rem.value[limit - 1 + rem.offset] = 0; - if(needReminder) + if(needRemainder) borrow = mulsub(rem.value, divisor, qhat, dlen, limit - 1 + rem.offset); else borrow = mulsubBorrow(rem.value, divisor, qhat, dlen, limit - 1 + rem.offset); @@ -1184,7 +1650,7 @@ // D5 Test remainder if (borrow + 0x80000000 > nh2) { // D6 Add back - if(needReminder) + if(needRemainder) divadd(divisor, rem.value, limit - 1 + 1 + rem.offset); qhat--; } @@ -1194,14 +1660,14 @@ } - if(needReminder) { + if (needRemainder) { // D8 Unnormalize if (shift > 0) rem.rightShift(shift); rem.normalize(); } quotient.normalize(); - return needReminder ? rem : null; + return needRemainder ? rem : null; } /** @@ -1367,7 +1833,7 @@ * This method divides a long quantity by an int to estimate * qhat for two multi precision numbers. It is used when * the signed value of n is less than zero. - * Returns long value where high 32 bits contain reminder value and + * Returns long value where high 32 bits contain remainder value and * low 32 bits contain quotient value. */ static long divWord(long n, int d) { @@ -1436,7 +1902,7 @@ } // step B2 - boolean uOdd = (k==s1); + boolean uOdd = (k == s1); MutableBigInteger t = uOdd ? v: u; int tsign = uOdd ? -1 : 1; @@ -1478,9 +1944,9 @@ * Calculate GCD of a and b interpreted as unsigned integers. */ static int binaryGcd(int a, int b) { - if (b==0) + if (b == 0) return a; - if (a==0) + if (a == 0) return b; // Right shift a & b till their last bits equal to 1. @@ -1582,7 +2048,7 @@ return result; } - /* + /** * Returns the multiplicative inverse of val mod 2^32. Assumes val is odd. */ static int inverseMod32(int val) { @@ -1595,7 +2061,7 @@ return t; } - /* + /** * Calculate the multiplicative inverse of 2^k mod mod, where mod is odd. */ static MutableBigInteger modInverseBP2(MutableBigInteger mod, int k) { @@ -1631,7 +2097,7 @@ } // The Almost Inverse Algorithm - while(!f.isOne()) { + while (!f.isOne()) { // If gcd(f, g) != 1, number is not invertible modulo mod if (f.isZero()) throw new ArithmeticException("BigInteger not invertible."); @@ -1665,7 +2131,7 @@ return fixup(c, p, k); } - /* + /** * The Fixup Algorithm * Calculates X such that X = C * 2^(-k) (mod P) * Assumes C<P and P is odd. @@ -1676,7 +2142,7 @@ // Set r to the multiplicative inverse of p mod 2^32 int r = -inverseMod32(p.value[p.offset+p.intLen-1]); - for(int i=0, numWords = k >> 5; i<numWords; i++) { + for (int i=0, numWords = k >> 5; i < numWords; i++) { // V = R * c (mod 2^j) int v = r * c.value[c.offset + c.intLen-1]; // c = c + (v * p)
--- a/jdk/src/share/classes/java/net/Authenticator.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/Authenticator.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, 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 @@ -103,17 +103,17 @@ * Sets the authenticator that will be used by the networking code * when a proxy or an HTTP server asks for authentication. * <p> - * First, if there is a security manager, its <code>checkPermission</code> + * First, if there is a security manager, its {@code checkPermission} * method is called with a - * <code>NetPermission("setDefaultAuthenticator")</code> permission. + * {@code NetPermission("setDefaultAuthenticator")} permission. * This may result in a java.lang.SecurityException. * - * @param a The authenticator to be set. If a is <code>null</code> then + * @param a The authenticator to be set. If a is {@code null} then * any previously set authenticator is removed. * * @throws SecurityException * if a security manager exists and its - * <code>checkPermission</code> method doesn't allow + * {@code checkPermission} method doesn't allow * setting the default authenticator. * * @see SecurityManager#checkPermission @@ -134,9 +134,9 @@ * Ask the authenticator that has been registered with the system * for a password. * <p> - * First, if there is a security manager, its <code>checkPermission</code> + * First, if there is a security manager, its {@code checkPermission} * method is called with a - * <code>NetPermission("requestPasswordAuthentication")</code> permission. + * {@code NetPermission("requestPasswordAuthentication")} permission. * This may result in a java.lang.SecurityException. * * @param addr The InetAddress of the site requesting authorization, @@ -151,7 +151,7 @@ * * @throws SecurityException * if a security manager exists and its - * <code>checkPermission</code> method doesn't allow + * {@code checkPermission} method doesn't allow * the password authentication request. * * @see SecurityManager#checkPermission @@ -193,9 +193,9 @@ * because the hostname can be provided in cases where the InetAddress * is not available. * <p> - * First, if there is a security manager, its <code>checkPermission</code> + * First, if there is a security manager, its {@code checkPermission} * method is called with a - * <code>NetPermission("requestPasswordAuthentication")</code> permission. + * {@code NetPermission("requestPasswordAuthentication")} permission. * This may result in a java.lang.SecurityException. * * @param host The hostname of the site requesting authentication. @@ -211,7 +211,7 @@ * * @throws SecurityException * if a security manager exists and its - * <code>checkPermission</code> method doesn't allow + * {@code checkPermission} method doesn't allow * the password authentication request. * * @see SecurityManager#checkPermission @@ -254,9 +254,9 @@ * Ask the authenticator that has been registered with the system * for a password. * <p> - * First, if there is a security manager, its <code>checkPermission</code> + * First, if there is a security manager, its {@code checkPermission} * method is called with a - * <code>NetPermission("requestPasswordAuthentication")</code> permission. + * {@code NetPermission("requestPasswordAuthentication")} permission. * This may result in a java.lang.SecurityException. * * @param host The hostname of the site requesting authentication. @@ -275,7 +275,7 @@ * * @throws SecurityException * if a security manager exists and its - * <code>checkPermission</code> method doesn't allow + * {@code checkPermission} method doesn't allow * the password authentication request. * * @see SecurityManager#checkPermission @@ -320,8 +320,8 @@ } /** - * Gets the <code>hostname</code> of the - * site or proxy requesting authentication, or <code>null</code> + * Gets the {@code hostname} of the + * site or proxy requesting authentication, or {@code null} * if not available. * * @return the hostname of the connection requiring authentication, or null @@ -333,8 +333,8 @@ } /** - * Gets the <code>InetAddress</code> of the - * site requesting authorization, or <code>null</code> + * Gets the {@code InetAddress} of the + * site requesting authorization, or {@code null} * if not available. * * @return the InetAddress of the site requesting authorization, or null @@ -346,7 +346,7 @@ /** * Gets the port number for the requested connection. - * @return an <code>int</code> indicating the + * @return an {@code int} indicating the * port for the requested connection. */ protected final int getRequestingPort() {
--- a/jdk/src/share/classes/java/net/ContentHandler.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/ContentHandler.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, 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 @@ -28,21 +28,21 @@ import java.io.IOException; /** - * The abstract class <code>ContentHandler</code> is the superclass - * of all classes that read an <code>Object</code> from a - * <code>URLConnection</code>. + * The abstract class {@code ContentHandler} is the superclass + * of all classes that read an {@code Object} from a + * {@code URLConnection}. * <p> * An application does not generally call the - * <code>getContent</code> method in this class directly. Instead, an - * application calls the <code>getContent</code> method in class - * <code>URL</code> or in <code>URLConnection</code>. + * {@code getContent} method in this class directly. Instead, an + * application calls the {@code getContent} method in class + * {@code URL} or in {@code URLConnection}. * The application's content handler factory (an instance of a class that - * implements the interface <code>ContentHandlerFactory</code> set - * up by a call to <code>setContentHandler</code>) is - * called with a <code>String</code> giving the MIME type of the + * implements the interface {@code ContentHandlerFactory} set + * up by a call to {@code setContentHandler}) is + * called with a {@code String} giving the MIME type of the * object being received on the socket. The factory returns an - * instance of a subclass of <code>ContentHandler</code>, and its - * <code>getContent</code> method is called to create the object. + * instance of a subclass of {@code ContentHandler}, and its + * {@code getContent} method is called to create the object. * <p> * If no content handler could be found, URLConnection will * look for a content handler in a user-defineable set of places. @@ -75,7 +75,7 @@ * creates an object from it. * * @param urlc a URL connection. - * @return the object read by the <code>ContentHandler</code>. + * @return the object read by the {@code ContentHandler}. * @exception IOException if an I/O error occurs while reading the object. */ abstract public Object getContent(URLConnection urlc) throws IOException; @@ -90,7 +90,7 @@ * * @param urlc a URL connection. * @param classes an array of types requested - * @return the object read by the <code>ContentHandler</code> that is + * @return the object read by the {@code ContentHandler} that is * the first match of the suggested types. * null if none of the requested are supported. * @exception IOException if an I/O error occurs while reading the object.
--- a/jdk/src/share/classes/java/net/ContentHandlerFactory.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/ContentHandlerFactory.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 1997, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, 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 @@ -28,10 +28,10 @@ /** * This interface defines a factory for content handlers. An * implementation of this interface should map a MIME type into an - * instance of <code>ContentHandler</code>. + * instance of {@code ContentHandler}. * <p> - * This interface is used by the <code>URLStreamHandler</code> class - * to create a <code>ContentHandler</code> for a MIME type. + * This interface is used by the {@code URLStreamHandler} class + * to create a {@code ContentHandler} for a MIME type. * * @author James Gosling * @see java.net.ContentHandler @@ -40,13 +40,13 @@ */ public interface ContentHandlerFactory { /** - * Creates a new <code>ContentHandler</code> to read an object from - * a <code>URLStreamHandler</code>. + * Creates a new {@code ContentHandler} to read an object from + * a {@code URLStreamHandler}. * * @param mimetype the MIME type for which a content handler is desired. - * @return a new <code>ContentHandler</code> to read an object from a - * <code>URLStreamHandler</code>. + * @return a new {@code ContentHandler} to read an object from a + * {@code URLStreamHandler}. * @see java.net.ContentHandler * @see java.net.URLStreamHandler */
--- a/jdk/src/share/classes/java/net/CookieHandler.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/CookieHandler.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, 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 @@ -66,7 +66,7 @@ * there is no system-wide cookie handler currently set. * @throws SecurityException * If a security manager has been installed and it denies - * {@link NetPermission}<tt>("getCookieHandler")</tt> + * {@link NetPermission}{@code ("getCookieHandler")} * @see #setDefault(CookieHandler) */ public synchronized static CookieHandler getDefault() { @@ -83,10 +83,10 @@ * Note: non-standard http protocol handlers may ignore this setting. * * @param cHandler The HTTP cookie handler, or - * <code>null</code> to unset. + * {@code null} to unset. * @throws SecurityException * If a security manager has been installed and it denies - * {@link NetPermission}<tt>("setCookieHandler")</tt> + * {@link NetPermission}{@code ("setCookieHandler")} * @see #getDefault() */ public synchronized static void setDefault(CookieHandler cHandler) { @@ -114,7 +114,7 @@ * called after all request headers related to choosing cookies * are added, and before the request is sent.</P> * - * @param uri a <code>URI</code> representing the intended use for the + * @param uri a {@code URI} representing the intended use for the * cookies * @param requestHeaders - a Map from request header * field names to lists of field values representing @@ -136,7 +136,7 @@ * fields that are named Set-Cookie2, present in the response * headers into a cookie cache. * - * @param uri a <code>URI</code> where the cookies come from + * @param uri a {@code URI} where the cookies come from * @param responseHeaders an immutable map from field names to * lists of field values representing the response * header fields returned
--- a/jdk/src/share/classes/java/net/CookieManager.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/CookieManager.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, 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 @@ -131,7 +131,7 @@ * * <p>This constructor will create new cookie manager with default * cookie store and accept policy. The effect is same as - * <tt>CookieManager(null, null)</tt>. + * {@code CookieManager(null, null)}. */ public CookieManager() { this(null, null); @@ -141,12 +141,12 @@ /** * Create a new cookie manager with specified cookie store and cookie policy. * - * @param store a <tt>CookieStore</tt> to be used by cookie manager. - * if <tt>null</tt>, cookie manager will use a default one, + * @param store a {@code CookieStore} to be used by cookie manager. + * if {@code null}, cookie manager will use a default one, * which is an in-memory CookieStore implmentation. - * @param cookiePolicy a <tt>CookiePolicy</tt> instance + * @param cookiePolicy a {@code CookiePolicy} instance * to be used by cookie manager as policy callback. - * if <tt>null</tt>, ACCEPT_ORIGINAL_SERVER will + * if {@code null}, ACCEPT_ORIGINAL_SERVER will * be used. */ public CookieManager(CookieStore store, @@ -170,11 +170,11 @@ /** * To set the cookie policy of this cookie manager. * - * <p> A instance of <tt>CookieManager</tt> will have + * <p> A instance of {@code CookieManager} will have * cookie policy ACCEPT_ORIGINAL_SERVER by default. Users always * can call this method to set another cookie policy. * - * @param cookiePolicy the cookie policy. Can be <tt>null</tt>, which + * @param cookiePolicy the cookie policy. Can be {@code null}, which * has no effects on current cookie policy. */ public void setCookiePolicy(CookiePolicy cookiePolicy) {
--- a/jdk/src/share/classes/java/net/CookiePolicy.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/CookiePolicy.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, 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 @@ -71,8 +71,8 @@ * * @param uri the URI to consult accept policy with * @param cookie the HttpCookie object in question - * @return <tt>true</tt> if this cookie should be accepted; - * otherwise, <tt>false</tt> + * @return {@code true} if this cookie should be accepted; + * otherwise, {@code false} */ public boolean shouldAccept(URI uri, HttpCookie cookie); }
--- a/jdk/src/share/classes/java/net/CookieStore.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/CookieStore.java Wed Jul 05 19:06:33 2017 +0200 @@ -32,8 +32,8 @@ * A CookieStore object represents a storage for cookie. Can store and retrieve * cookies. * - * <p>{@link CookieManager} will call <tt>CookieStore.add</tt> to save cookies - * for every incoming HTTP response, and call <tt>CookieStore.get</tt> to + * <p>{@link CookieManager} will call {@code CookieStore.add} to save cookies + * for every incoming HTTP response, and call {@code CookieStore.get} to * retrieve cookie for every outgoing HTTP request. A CookieStore * is responsible for removing HttpCookie instances which have expired. * @@ -55,11 +55,11 @@ * then it is replaced with the new one. * * @param uri the uri this cookie associated with. - * if <tt>null</tt>, this cookie will not be associated + * if {@code null}, this cookie will not be associated * with an URI * @param cookie the cookie to store * - * @throws NullPointerException if <tt>cookie</tt> is <tt>null</tt> + * @throws NullPointerException if {@code cookie} is {@code null} * * @see #get * @@ -77,7 +77,7 @@ * * @param uri the uri associated with the cookies to be returned * - * @throws NullPointerException if <tt>uri</tt> is <tt>null</tt> + * @throws NullPointerException if {@code uri} is {@code null} * * @see #add * @@ -108,14 +108,14 @@ * Remove a cookie from store. * * @param uri the uri this cookie associated with. - * if <tt>null</tt>, the cookie to be removed is not associated - * with an URI when added; if not <tt>null</tt>, the cookie + * if {@code null}, the cookie to be removed is not associated + * with an URI when added; if not {@code null}, the cookie * to be removed is associated with the given URI when added. * @param cookie the cookie to remove * - * @return <tt>true</tt> if this store contained the specified cookie + * @return {@code true} if this store contained the specified cookie * - * @throws NullPointerException if <tt>cookie</tt> is <tt>null</tt> + * @throws NullPointerException if {@code cookie} is {@code null} */ public boolean remove(URI uri, HttpCookie cookie); @@ -123,7 +123,7 @@ /** * Remove all cookies in this cookie store. * - * @return <tt>true</tt> if this store changed as a result of the call + * @return {@code true} if this store changed as a result of the call */ public boolean removeAll(); }
--- a/jdk/src/share/classes/java/net/DatagramPacket.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/DatagramPacket.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, 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 @@ -68,11 +68,11 @@ int port; /** - * Constructs a <code>DatagramPacket</code> for receiving packets of - * length <code>length</code>, specifying an offset into the buffer. + * Constructs a {@code DatagramPacket} for receiving packets of + * length {@code length}, specifying an offset into the buffer. * <p> - * The <code>length</code> argument must be less than or equal to - * <code>buf.length</code>. + * The {@code length} argument must be less than or equal to + * {@code buf.length}. * * @param buf buffer for holding the incoming datagram. * @param offset the offset for the buffer @@ -87,11 +87,11 @@ } /** - * Constructs a <code>DatagramPacket</code> for receiving packets of - * length <code>length</code>. + * Constructs a {@code DatagramPacket} for receiving packets of + * length {@code length}. * <p> - * The <code>length</code> argument must be less than or equal to - * <code>buf.length</code>. + * The {@code length} argument must be less than or equal to + * {@code buf.length}. * * @param buf buffer for holding the incoming datagram. * @param length the number of bytes to read. @@ -102,10 +102,10 @@ /** * Constructs a datagram packet for sending packets of length - * <code>length</code> with offset <code>ioffset</code>to the + * {@code length} with offset {@code ioffset}to the * specified port number on the specified host. The - * <code>length</code> argument must be less than or equal to - * <code>buf.length</code>. + * {@code length} argument must be less than or equal to + * {@code buf.length}. * * @param buf the packet data. * @param offset the packet data offset. @@ -125,10 +125,10 @@ /** * Constructs a datagram packet for sending packets of length - * <code>length</code> with offset <code>ioffset</code>to the + * {@code length} with offset {@code ioffset}to the * specified port number on the specified host. The - * <code>length</code> argument must be less than or equal to - * <code>buf.length</code>. + * {@code length} argument must be less than or equal to + * {@code buf.length}. * * @param buf the packet data. * @param offset the packet data offset. @@ -147,9 +147,9 @@ /** * Constructs a datagram packet for sending packets of length - * <code>length</code> to the specified port number on the specified - * host. The <code>length</code> argument must be less than or equal - * to <code>buf.length</code>. + * {@code length} to the specified port number on the specified + * host. The {@code length} argument must be less than or equal + * to {@code buf.length}. * * @param buf the packet data. * @param length the packet length. @@ -164,9 +164,9 @@ /** * Constructs a datagram packet for sending packets of length - * <code>length</code> to the specified port number on the specified - * host. The <code>length</code> argument must be less than or equal - * to <code>buf.length</code>. + * {@code length} to the specified port number on the specified + * host. The {@code length} argument must be less than or equal + * to {@code buf.length}. * * @param buf the packet data. * @param length the packet length. @@ -207,8 +207,8 @@ /** * Returns the data buffer. The data received or the data to be sent - * starts from the <code>offset</code> in the buffer, - * and runs for <code>length</code> long. + * starts from the {@code offset} in the buffer, + * and runs for {@code length} long. * * @return the buffer used to receive or send data * @see #setData(byte[], int, int) @@ -277,7 +277,7 @@ /** * Sets the IP address of the machine to which this datagram * is being sent. - * @param iaddr the <code>InetAddress</code> + * @param iaddr the {@code InetAddress} * @since JDK1.1 * @see #getAddress() */ @@ -303,7 +303,7 @@ * Sets the SocketAddress (usually IP address + port number) of the remote * host to which this datagram is being sent. * - * @param address the <code>SocketAddress</code> + * @param address the {@code SocketAddress} * @throws IllegalArgumentException if address is null or is a * SocketAddress subclass not supported by this socket * @@ -324,7 +324,7 @@ * Gets the SocketAddress (usually IP address + port number) of the remote * host that this packet is being sent to or is coming from. * - * @return the <code>SocketAddress</code> + * @return the {@code SocketAddress} * @since 1.4 * @see #setSocketAddress */ @@ -335,7 +335,7 @@ /** * Set the data buffer for this packet. With the offset of * this DatagramPacket set to 0, and the length set to - * the length of <code>buf</code>. + * the length of {@code buf}. * * @param buf the buffer to set for this packet. *
--- a/jdk/src/share/classes/java/net/DatagramSocket.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/DatagramSocket.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, 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 @@ -47,14 +47,14 @@ * a DatagramSocket is bound to a more specific address. * <p> * Example: - * <code> + * {@code * DatagramSocket s = new DatagramSocket(null); * s.bind(new InetSocketAddress(8888)); - * </code> + * } * Which is equivalent to: - * <code> + * {@code * DatagramSocket s = new DatagramSocket(8888); - * </code> + * } * Both cases will create a DatagramSocket able to receive broadcasts on * UDP port 8888. * @@ -161,14 +161,14 @@ * an IP address chosen by the kernel. * * <p>If there is a security manager, - * its <code>checkListen</code> method is first called + * its {@code checkListen} method is first called * with 0 as its argument to ensure the operation is allowed. * This could result in a SecurityException. * * @exception SocketException if the socket could not be opened, * or the socket could not bind to the specified local port. * @exception SecurityException if a security manager exists and its - * <code>checkListen</code> method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * * @see SecurityManager#checkListen */ @@ -195,21 +195,21 @@ * Creates a datagram socket, bound to the specified local * socket address. * <p> - * If, if the address is <code>null</code>, creates an unbound socket. + * If, if the address is {@code null}, creates an unbound socket. * <p> * <p>If there is a security manager, - * its <code>checkListen</code> method is first called + * its {@code checkListen} method is first called * with the port from the socket address * as its argument to ensure the operation is allowed. * This could result in a SecurityException. * - * @param bindaddr local socket address to bind, or <code>null</code> + * @param bindaddr local socket address to bind, or {@code null} * for an unbound socket. * * @exception SocketException if the socket could not be opened, * or the socket could not bind to the specified local port. * @exception SecurityException if a security manager exists and its - * <code>checkListen</code> method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * * @see SecurityManager#checkListen * @since 1.4 @@ -234,8 +234,8 @@ * an IP address chosen by the kernel. * * <p>If there is a security manager, - * its <code>checkListen</code> method is first called - * with the <code>port</code> argument + * its {@code checkListen} method is first called + * with the {@code port} argument * as its argument to ensure the operation is allowed. * This could result in a SecurityException. * @@ -243,7 +243,7 @@ * @exception SocketException if the socket could not be opened, * or the socket could not bind to the specified local port. * @exception SecurityException if a security manager exists and its - * <code>checkListen</code> method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * * @see SecurityManager#checkListen */ @@ -259,8 +259,8 @@ * an IP address chosen by the kernel. * * <p>If there is a security manager, - * its <code>checkListen</code> method is first called - * with the <code>port</code> argument + * its {@code checkListen} method is first called + * with the {@code port} argument * as its argument to ensure the operation is allowed. * This could result in a SecurityException. * @@ -270,7 +270,7 @@ * @exception SocketException if the socket could not be opened, * or the socket could not bind to the specified local port. * @exception SecurityException if a security manager exists and its - * <code>checkListen</code> method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * * @see SecurityManager#checkListen * @since JDK1.1 @@ -319,10 +319,10 @@ } /** - * Get the <code>DatagramSocketImpl</code> attached to this socket, + * Get the {@code DatagramSocketImpl} attached to this socket, * creating it if necessary. * - * @return the <code>DatagramSocketImpl</code> attached to that + * @return the {@code DatagramSocketImpl} attached to that * DatagramSocket * @throws SocketException if creation fails. * @since 1.4 @@ -336,14 +336,14 @@ /** * Binds this DatagramSocket to a specific address and port. * <p> - * If the address is <code>null</code>, then the system will pick up + * If the address is {@code null}, then the system will pick up * an ephemeral port and a valid local address to bind the socket. *<p> * @param addr The address and port to bind to. * @throws SocketException if any error happens during the bind, or if the * socket is already bound. * @throws SecurityException if a security manager exists and its - * <code>checkListen</code> method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * @throws IllegalArgumentException if addr is a SocketAddress subclass * not supported by this socket. * @since 1.4 @@ -496,7 +496,7 @@ * Returns the binding state of the socket. * <p> * If the socket was bound prior to being {@link #close closed}, - * then this method will continue to return <code>true</code> + * then this method will continue to return {@code true} * after the socket is closed. * * @return true if the socket successfully bound to an address @@ -510,7 +510,7 @@ * Returns the connection state of the socket. * <p> * If the socket was connected prior to being {@link #close closed}, - * then this method will continue to return <code>true</code> + * then this method will continue to return {@code true} * after the socket is closed. * * @return true if the socket successfully connected to a server @@ -522,7 +522,7 @@ /** * Returns the address to which this socket is connected. Returns - * <code>null</code> if the socket is not connected. + * {@code null} if the socket is not connected. * <p> * If the socket was connected prior to being {@link #close closed}, * then this method will continue to return the connected address @@ -536,7 +536,7 @@ /** * Returns the port number to which this socket is connected. - * Returns <code>-1</code> if the socket is not connected. + * Returns {@code -1} if the socket is not connected. * <p> * If the socket was connected prior to being {@link #close closed}, * then this method will continue to return the connected port number @@ -550,14 +550,14 @@ /** * Returns the address of the endpoint this socket is connected to, or - * <code>null</code> if it is unconnected. + * {@code null} if it is unconnected. * <p> * If the socket was connected prior to being {@link #close closed}, * then this method will continue to return the connected address * after the socket is closed. * - * @return a <code>SocketAddress</code> representing the remote - * endpoint of this socket, or <code>null</code> if it is + * @return a {@code SocketAddress} representing the remote + * endpoint of this socket, or {@code null} if it is * not connected yet. * @see #getInetAddress() * @see #getPort() @@ -573,8 +573,8 @@ /** * Returns the address of the endpoint this socket is bound to. * - * @return a <code>SocketAddress</code> representing the local endpoint of this - * socket, or <code>null</code> if it is closed or not bound yet. + * @return a {@code SocketAddress} representing the local endpoint of this + * socket, or {@code null} if it is closed or not bound yet. * @see #getLocalAddress() * @see #getLocalPort() * @see #bind(SocketAddress) @@ -591,28 +591,28 @@ /** * Sends a datagram packet from this socket. The - * <code>DatagramPacket</code> includes information indicating the + * {@code DatagramPacket} includes information indicating the * data to be sent, its length, the IP address of the remote host, * and the port number on the remote host. * * <p>If there is a security manager, and the socket is not currently * connected to a remote address, this method first performs some - * security checks. First, if <code>p.getAddress().isMulticastAddress()</code> + * security checks. First, if {@code p.getAddress().isMulticastAddress()} * is true, this method calls the - * security manager's <code>checkMulticast</code> method - * with <code>p.getAddress()</code> as its argument. + * security manager's {@code checkMulticast} method + * with {@code p.getAddress()} as its argument. * If the evaluation of that expression is false, * this method instead calls the security manager's - * <code>checkConnect</code> method with arguments - * <code>p.getAddress().getHostAddress()</code> and - * <code>p.getPort()</code>. Each call to a security manager method + * {@code checkConnect} method with arguments + * {@code p.getAddress().getHostAddress()} and + * {@code p.getPort()}. Each call to a security manager method * could result in a SecurityException if the operation is not allowed. * - * @param p the <code>DatagramPacket</code> to be sent. + * @param p the {@code DatagramPacket} to be sent. * * @exception IOException if an I/O error occurs. * @exception SecurityException if a security manager exists and its - * <code>checkMulticast</code> or <code>checkConnect</code> + * {@code checkMulticast} or {@code checkConnect} * method doesn't allow the send. * @exception PortUnreachableException may be thrown if the socket is connected * to a currently unreachable destination. Note, there is no @@ -674,20 +674,20 @@ /** * Receives a datagram packet from this socket. When this method - * returns, the <code>DatagramPacket</code>'s buffer is filled with + * returns, the {@code DatagramPacket}'s buffer is filled with * the data received. The datagram packet also contains the sender's * IP address, and the port number on the sender's machine. * <p> * This method blocks until a datagram is received. The - * <code>length</code> field of the datagram packet object contains + * {@code length} field of the datagram packet object contains * the length of the received message. If the message is longer than * the packet's length, the message is truncated. * <p> * If there is a security manager, a packet cannot be received if the - * security manager's <code>checkAccept</code> method + * security manager's {@code checkAccept} method * does not allow it. * - * @param p the <code>DatagramPacket</code> into which to place + * @param p the {@code DatagramPacket} into which to place * the incoming data. * @exception IOException if an I/O error occurs. * @exception SocketTimeoutException if setSoTimeout was previously called @@ -786,17 +786,17 @@ * Gets the local address to which the socket is bound. * * <p>If there is a security manager, its - * <code>checkConnect</code> method is first called - * with the host address and <code>-1</code> + * {@code checkConnect} method is first called + * with the host address and {@code -1} * as its arguments to see if the operation is allowed. * * @see SecurityManager#checkConnect * @return the local address to which the socket is bound, - * <code>null</code> if the socket is closed, or - * an <code>InetAddress</code> representing + * {@code null} if the socket is closed, or + * an {@code InetAddress} representing * {@link InetAddress#isAnyLocalAddress wildcard} * address if either the socket is not bound, or - * the security manager <code>checkConnect</code> + * the security manager {@code checkConnect} * method does not allow the operation * @since 1.1 */ @@ -824,8 +824,8 @@ * is bound. * * @return the port number on the local host to which this socket is bound, - <code>-1</code> if the socket is closed, or - <code>0</code> if it is not bound yet. + {@code -1} if the socket is closed, or + {@code 0} if it is not bound yet. */ public int getLocalPort() { if (isClosed()) @@ -883,7 +883,7 @@ /** * Sets the SO_SNDBUF option to the specified value for this - * <tt>DatagramSocket</tt>. The SO_SNDBUF option is used by the + * {@code DatagramSocket}. The SO_SNDBUF option is used by the * network implementation as a hint to size the underlying * network I/O buffers. The SO_SNDBUF setting may also be used * by the network implementation to determine the maximum size @@ -897,7 +897,7 @@ * is high. * <p> * Note: If {@link #send(DatagramPacket)} is used to send a - * <code>DatagramPacket</code> that is larger than the setting + * {@code DatagramPacket} that is larger than the setting * of SO_SNDBUF then it is implementation specific if the * packet is sent or discarded. * @@ -921,10 +921,10 @@ } /** - * Get value of the SO_SNDBUF option for this <tt>DatagramSocket</tt>, that is the - * buffer size used by the platform for output on this <tt>DatagramSocket</tt>. + * Get value of the SO_SNDBUF option for this {@code DatagramSocket}, that is the + * buffer size used by the platform for output on this {@code DatagramSocket}. * - * @return the value of the SO_SNDBUF option for this <tt>DatagramSocket</tt> + * @return the value of the SO_SNDBUF option for this {@code DatagramSocket} * @exception SocketException if there is an error in * the underlying protocol, such as an UDP error. * @see #setSendBufferSize @@ -942,7 +942,7 @@ /** * Sets the SO_RCVBUF option to the specified value for this - * <tt>DatagramSocket</tt>. The SO_RCVBUF option is used by the + * {@code DatagramSocket}. The SO_RCVBUF option is used by the * the network implementation as a hint to size the underlying * network I/O buffers. The SO_RCVBUF setting may also be used * by the network implementation to determine the maximum size @@ -979,10 +979,10 @@ } /** - * Get value of the SO_RCVBUF option for this <tt>DatagramSocket</tt>, that is the - * buffer size used by the platform for input on this <tt>DatagramSocket</tt>. + * Get value of the SO_RCVBUF option for this {@code DatagramSocket}, that is the + * buffer size used by the platform for input on this {@code DatagramSocket}. * - * @return the value of the SO_RCVBUF option for this <tt>DatagramSocket</tt> + * @return the value of the SO_RCVBUF option for this {@code DatagramSocket} * @exception SocketException if there is an error in the underlying protocol, such as an UDP error. * @see #setReceiveBufferSize(int) */ @@ -1005,26 +1005,26 @@ * socket to the same socket address. This is typically for the * purpose of receiving multicast packets * (See {@link java.net.MulticastSocket}). The - * <tt>SO_REUSEADDR</tt> socket option allows multiple + * {@code SO_REUSEADDR} socket option allows multiple * sockets to be bound to the same socket address if the - * <tt>SO_REUSEADDR</tt> socket option is enabled prior + * {@code SO_REUSEADDR} socket option is enabled prior * to binding the socket using {@link #bind(SocketAddress)}. * <p> * Note: This functionality is not supported by all existing platforms, * so it is implementation specific whether this option will be ignored * or not. However, if it is not supported then - * {@link #getReuseAddress()} will always return <code>false</code>. + * {@link #getReuseAddress()} will always return {@code false}. * <p> - * When a <tt>DatagramSocket</tt> is created the initial setting - * of <tt>SO_REUSEADDR</tt> is disabled. + * When a {@code DatagramSocket} is created the initial setting + * of {@code SO_REUSEADDR} is disabled. * <p> - * The behaviour when <tt>SO_REUSEADDR</tt> is enabled or + * The behaviour when {@code SO_REUSEADDR} is enabled or * disabled after a socket is bound (See {@link #isBound()}) * is not defined. * * @param on whether to enable or disable the * @exception SocketException if an error occurs enabling or - * disabling the <tt>SO_RESUEADDR</tt> socket option, + * disabling the {@code SO_RESUEADDR} socket option, * or the socket is closed. * @since 1.4 * @see #getReuseAddress() @@ -1045,7 +1045,7 @@ /** * Tests if SO_REUSEADDR is enabled. * - * @return a <code>boolean</code> indicating whether or not SO_REUSEADDR is enabled. + * @return a {@code boolean} indicating whether or not SO_REUSEADDR is enabled. * @exception SocketException if there is an error * in the underlying protocol, such as an UDP error. * @since 1.4 @@ -1083,7 +1083,7 @@ /** * Tests if SO_BROADCAST is enabled. - * @return a <code>boolean</code> indicating whether or not SO_BROADCAST is enabled. + * @return a {@code boolean} indicating whether or not SO_BROADCAST is enabled. * @exception SocketException if there is an error * in the underlying protocol, such as an UDP error. * @since 1.4 @@ -1105,7 +1105,7 @@ * 255} or an IllegalArgumentException will be thrown. * <p>Notes: * <p>For Internet Protocol v4 the value consists of an - * <code>integer</code>, the least significant 8 bits of which + * {@code integer}, the least significant 8 bits of which * represent the value of the TOS octet in IP packets sent by * the socket. * RFC 1349 defines the TOS values as follows: @@ -1123,10 +1123,10 @@ * SocketException indicating that the operation is not * permitted. * <p> - * for Internet Protocol v6 <code>tc</code> is the value that + * for Internet Protocol v6 {@code tc} is the value that * would be placed into the sin6_flowinfo field of the IP header. * - * @param tc an <code>int</code> value for the bitset. + * @param tc an {@code int} value for the bitset. * @throws SocketException if there is an error setting the * traffic class or type-of-service * @since 1.4 @@ -1205,7 +1205,7 @@ * DatagramChannel.open} method. * * @return the datagram channel associated with this datagram socket, - * or <tt>null</tt> if this socket was not created for a channel + * or {@code null} if this socket was not created for a channel * * @since 1.4 * @spec JSR-51 @@ -1224,14 +1224,14 @@ * application. The factory can be specified only once. * <p> * When an application creates a new datagram socket, the socket - * implementation factory's <code>createDatagramSocketImpl</code> method is + * implementation factory's {@code createDatagramSocketImpl} method is * called to create the actual datagram socket implementation. * <p> - * Passing <code>null</code> to the method is a no-op unless the factory + * Passing {@code null} to the method is a no-op unless the factory * was already set. * * <p>If there is a security manager, this method first calls - * the security manager's <code>checkSetFactory</code> method + * the security manager's {@code checkSetFactory} method * to ensure the operation is allowed. * This could result in a SecurityException. * @@ -1240,7 +1240,7 @@ * datagram socket factory. * @exception SocketException if the factory is already defined. * @exception SecurityException if a security manager exists and its - * <code>checkSetFactory</code> method doesn't allow the + * {@code checkSetFactory} method doesn't allow the operation. * @see java.net.DatagramSocketImplFactory#createDatagramSocketImpl()
--- a/jdk/src/share/classes/java/net/DatagramSocketImpl.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/DatagramSocketImpl.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, 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 @@ -101,7 +101,7 @@ protected void disconnect() {} /** - * Peek at the packet to see who it is from. Updates the specified <code>InetAddress</code> + * Peek at the packet to see who it is from. Updates the specified {@code InetAddress} * to the address which the packet came from. * @param i an InetAddress object * @return the port number which the packet came from. @@ -114,7 +114,7 @@ /** * Peek at the packet to see who it is from. The data is copied into the specified - * <code>DatagramPacket</code>. The data is returned, + * {@code DatagramPacket}. The data is returned, * but not consumed, so that a subsequent peekData/receive operation * will see the same data. * @param p the Packet Received. @@ -163,7 +163,7 @@ /** * Set the TTL (time-to-live) option. - * @param ttl an <tt>int</tt> specifying the time-to-live value + * @param ttl an {@code int} specifying the time-to-live value * @exception IOException if an I/O exception occurs * while setting the time-to-live option. * @see #getTimeToLive() @@ -174,7 +174,7 @@ * Retrieve the TTL (time-to-live) option. * @exception IOException if an I/O exception occurs * while retrieving the time-to-live option - * @return an <tt>int</tt> representing the time-to-live value + * @return an {@code int} representing the time-to-live value * @see #setTimeToLive(int) */ protected abstract int getTimeToLive() throws IOException; @@ -227,7 +227,7 @@ /** * Gets the local port. - * @return an <tt>int</tt> representing the local port value + * @return an {@code int} representing the local port value */ protected int getLocalPort() { return localPort; @@ -235,7 +235,7 @@ /** * Gets the datagram socket file descriptor. - * @return a <tt>FileDescriptor</tt> object representing the datagram socket + * @return a {@code FileDescriptor} object representing the datagram socket * file descriptor */ protected FileDescriptor getFileDescriptor() {
--- a/jdk/src/share/classes/java/net/DatagramSocketImplFactory.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/DatagramSocketImplFactory.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, 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,7 +27,7 @@ /** * This interface defines a factory for datagram socket implementations. It - * is used by the classes <code>DatagramSocket</code> to create actual socket + * is used by the classes {@code DatagramSocket} to create actual socket * implementations. * * @author Yingxian Wang @@ -37,9 +37,9 @@ public interface DatagramSocketImplFactory { /** - * Creates a new <code>DatagramSocketImpl</code> instance. + * Creates a new {@code DatagramSocketImpl} instance. * - * @return a new instance of <code>DatagramSocketImpl</code>. + * @return a new instance of {@code DatagramSocketImpl}. * @see java.net.DatagramSocketImpl */ DatagramSocketImpl createDatagramSocketImpl();
--- a/jdk/src/share/classes/java/net/FileNameMap.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/FileNameMap.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, 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,7 +37,7 @@ /** * Gets the MIME type for the specified file name. * @param fileName the specified file name - * @return a <code>String</code> indicating the MIME + * @return a {@code String} indicating the MIME * type for the specified file name. */ public String getContentTypeFor(String fileName);
--- a/jdk/src/share/classes/java/net/HttpCookie.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/HttpCookie.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, 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 @@ -470,7 +470,7 @@ * protocol. * * @return {@code false} if the cookie can be sent over any standard - * protocol; otherwise, <code>true</code> + * protocol; otherwise, {@code true} * * @see #setSecure */
--- a/jdk/src/share/classes/java/net/HttpRetryException.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/HttpRetryException.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2013, 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 @@ -43,7 +43,7 @@ private String location; /** - * Constructs a new <code>HttpRetryException</code> from the + * Constructs a new {@code HttpRetryException} from the * specified response code and exception detail message * * @param detail the detail message. @@ -55,7 +55,7 @@ } /** - * Constructs a new <code>HttpRetryException</code> with detail message + * Constructs a new {@code HttpRetryException} with detail message * responseCode and the contents of the Location response header field. * * @param detail the detail message.
--- a/jdk/src/share/classes/java/net/HttpURLConnection.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/HttpURLConnection.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, 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 @@ -76,14 +76,14 @@ /** * The chunk-length when using chunked encoding streaming mode for output. - * A value of <code>-1</code> means chunked encoding is disabled for output. + * A value of {@code -1} means chunked encoding is disabled for output. * @since 1.5 */ protected int chunkLength = -1; /** * The fixed content-length when using fixed-length streaming mode. - * A value of <code>-1</code> means fixed-length streaming mode is disabled + * A value of {@code -1} means fixed-length streaming mode is disabled * for output. * * <P> <B>NOTE:</B> {@link #fixedContentLengthLong} is recommended instead @@ -103,15 +103,15 @@ protected long fixedContentLengthLong = -1; /** - * Returns the key for the <code>n</code><sup>th</sup> header field. - * Some implementations may treat the <code>0</code><sup>th</sup> + * Returns the key for the {@code n}<sup>th</sup> header field. + * Some implementations may treat the {@code 0}<sup>th</sup> * header field as special, i.e. as the status line returned by the HTTP * server. In this case, {@link #getHeaderField(int) getHeaderField(0)} returns the status - * line, but <code>getHeaderFieldKey(0)</code> returns null. + * line, but {@code getHeaderFieldKey(0)} returns null. * * @param n an index, where {@code n >=0}. - * @return the key for the <code>n</code><sup>th</sup> header field, - * or <code>null</code> if the key does not exist. + * @return the key for the {@code n}<sup>th</sup> header field, + * or {@code null} if the key does not exist. */ public String getHeaderFieldKey (int n) { return null; @@ -251,8 +251,8 @@ } /** - * Returns the value for the <code>n</code><sup>th</sup> header field. - * Some implementations may treat the <code>0</code><sup>th</sup> + * Returns the value for the {@code n}<sup>th</sup> header field. + * Some implementations may treat the {@code 0}<sup>th</sup> * header field as special, i.e. as the status line returned by the HTTP * server. * <p> @@ -261,8 +261,8 @@ * the headers in the message. * * @param n an index, where {@code n>=0}. - * @return the value of the <code>n</code><sup>th</sup> header field, - * or <code>null</code> if the value does not exist. + * @return the value of the {@code n}<sup>th</sup> header field, + * or {@code null} if the value does not exist. * @see java.net.HttpURLConnection#getHeaderFieldKey(int) */ public String getHeaderField(int n) { @@ -270,7 +270,7 @@ } /** - * An <code>int</code> representing the three digit HTTP Status-Code. + * An {@code int} representing the three digit HTTP Status-Code. * <ul> * <li> 1xx: Informational * <li> 2xx: Success @@ -292,12 +292,12 @@ private static boolean followRedirects = true; /** - * If <code>true</code>, the protocol will automatically follow redirects. - * If <code>false</code>, the protocol will not automatically follow + * If {@code true}, the protocol will automatically follow redirects. + * If {@code false}, the protocol will not automatically follow * redirects. * <p> - * This field is set by the <code>setInstanceFollowRedirects</code> - * method. Its value is returned by the <code>getInstanceFollowRedirects</code> + * This field is set by the {@code setInstanceFollowRedirects} + * method. Its value is returned by the {@code getInstanceFollowRedirects} * method. * <p> * Its default value is based on the value of the static followRedirects @@ -328,14 +328,14 @@ * cannot change this variable. * <p> * If there is a security manager, this method first calls - * the security manager's <code>checkSetFactory</code> method + * the security manager's {@code checkSetFactory} method * to ensure the operation is allowed. * This could result in a SecurityException. * - * @param set a <code>boolean</code> indicating whether or not + * @param set a {@code boolean} indicating whether or not * to follow HTTP redirects. * @exception SecurityException if a security manager exists and its - * <code>checkSetFactory</code> method doesn't + * {@code checkSetFactory} method doesn't * allow the operation. * @see SecurityManager#checkSetFactory * @see #getFollowRedirects() @@ -350,12 +350,12 @@ } /** - * Returns a <code>boolean</code> indicating + * Returns a {@code boolean} indicating * whether or not HTTP redirects (3xx) should * be automatically followed. * - * @return <code>true</code> if HTTP redirects should - * be automatically followed, <tt>false</tt> if not. + * @return {@code true} if HTTP redirects should + * be automatically followed, {@code false} if not. * @see #setFollowRedirects(boolean) */ public static boolean getFollowRedirects() { @@ -364,13 +364,13 @@ /** * Sets whether HTTP redirects (requests with response code 3xx) should - * be automatically followed by this <code>HttpURLConnection</code> + * be automatically followed by this {@code HttpURLConnection} * instance. * <p> * The default value comes from followRedirects, which defaults to * true. * - * @param followRedirects a <code>boolean</code> indicating + * @param followRedirects a {@code boolean} indicating * whether or not to follow HTTP redirects. * * @see java.net.HttpURLConnection#instanceFollowRedirects @@ -382,11 +382,11 @@ } /** - * Returns the value of this <code>HttpURLConnection</code>'s - * <code>instanceFollowRedirects</code> field. + * Returns the value of this {@code HttpURLConnection}'s + * {@code instanceFollowRedirects} field. * - * @return the value of this <code>HttpURLConnection</code>'s - * <code>instanceFollowRedirects</code> field. + * @return the value of this {@code HttpURLConnection}'s + * {@code instanceFollowRedirects} field. * @see java.net.HttpURLConnection#instanceFollowRedirects * @see #setInstanceFollowRedirects(boolean) * @since 1.3 @@ -540,7 +540,7 @@ * Returns null if none could be discerned from the responses * (the result was not valid HTTP). * @throws IOException if an error occurred connecting to the server. - * @return the HTTP response message, or <code>null</code> + * @return the HTTP response message, or {@code null} */ public String getResponseMessage() throws IOException { getResponseCode(); @@ -583,7 +583,7 @@ * @exception IOException if an error occurs while computing * the permission. * - * @return a <code>SocketPermission</code> object representing the + * @return a {@code SocketPermission} object representing the * permission necessary to connect to the destination * host and port. */
--- a/jdk/src/share/classes/java/net/IDN.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/IDN.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, 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 @@ -104,7 +104,7 @@ * @param input the string to be processed * @param flag process flag; can be 0 or any logical OR of possible flags * - * @return the translated <tt>String</tt> + * @return the translated {@code String} * * @throws IllegalArgumentException if the input string doesn't conform to RFC 3490 specification */ @@ -130,13 +130,13 @@ * * <p> This convenience method works as if by invoking the * two-argument counterpart as follows: - * <blockquote><tt> + * <blockquote> * {@link #toASCII(String, int) toASCII}(input, 0); - * </tt></blockquote> + * </blockquote> * * @param input the string to be processed * - * @return the translated <tt>String</tt> + * @return the translated {@code String} * * @throws IllegalArgumentException if the input string doesn't conform to RFC 3490 specification */ @@ -161,7 +161,7 @@ * @param input the string to be processed * @param flag process flag; can be 0 or any logical OR of possible flags * - * @return the translated <tt>String</tt> + * @return the translated {@code String} */ public static String toUnicode(String input, int flag) { int p = 0, q = 0; @@ -184,13 +184,13 @@ * * <p> This convenience method works as if by invoking the * two-argument counterpart as follows: - * <blockquote><tt> + * <blockquote> * {@link #toUnicode(String, int) toUnicode}(input, 0); - * </tt></blockquote> + * </blockquote> * * @param input the string to be processed * - * @return the translated <tt>String</tt> + * @return the translated {@code String} */ public static String toUnicode(String input) { return toUnicode(input, 0);
--- a/jdk/src/share/classes/java/net/Inet4Address.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/Inet4Address.java Wed Jul 05 19:06:33 2017 +0200 @@ -42,10 +42,10 @@ * takes one of the following forms: * * <blockquote><table cellpadding=0 cellspacing=0 summary="layout"> - * <tr><td><tt>d.d.d.d</tt></td></tr> - * <tr><td><tt>d.d.d</tt></td></tr> - * <tr><td><tt>d.d</tt></td></tr> - * <tr><td><tt>d</tt></td></tr> + * <tr><td>{@code d.d.d.d}</td></tr> + * <tr><td>{@code d.d.d}</td></tr> + * <tr><td>{@code d.d}</td></tr> + * <tr><td>{@code d}</td></tr> * </table></blockquote> * * <p> When four parts are specified, each is interpreted as a byte of @@ -153,7 +153,7 @@ * Utility routine to check if the InetAddress is an * IP multicast address. IP multicast address is a Class D * address i.e first four bits of the address are 1110. - * @return a <code>boolean</code> indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * an IP multicast address * @since JDK1.1 */ @@ -163,7 +163,7 @@ /** * Utility routine to check if the InetAddress in a wildcard address. - * @return a <code>boolean</code> indicating if the Inetaddress is + * @return a {@code boolean} indicating if the Inetaddress is * a wildcard address. * @since 1.4 */ @@ -174,7 +174,7 @@ /** * Utility routine to check if the InetAddress is a loopback address. * - * @return a <code>boolean</code> indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * a loopback address; or false otherwise. * @since 1.4 */ @@ -187,7 +187,7 @@ /** * Utility routine to check if the InetAddress is an link local address. * - * @return a <code>boolean</code> indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * a link local address; or false if address is not a link local unicast address. * @since 1.4 */ @@ -204,7 +204,7 @@ /** * Utility routine to check if the InetAddress is a site local address. * - * @return a <code>boolean</code> indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * a site local address; or false if address is not a site local unicast address. * @since 1.4 */ @@ -224,7 +224,7 @@ /** * Utility routine to check if the multicast address has global scope. * - * @return a <code>boolean</code> indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of global scope, false if it is not * of global scope or it is not a multicast address * @since 1.4 @@ -240,7 +240,7 @@ /** * Utility routine to check if the multicast address has node scope. * - * @return a <code>boolean</code> indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of node-local scope, false if it is not * of node-local scope or it is not a multicast address * @since 1.4 @@ -253,7 +253,7 @@ /** * Utility routine to check if the multicast address has link scope. * - * @return a <code>boolean</code> indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of link-local scope, false if it is not * of link-local scope or it is not a multicast address * @since 1.4 @@ -269,7 +269,7 @@ /** * Utility routine to check if the multicast address has site scope. * - * @return a <code>boolean</code> indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of site-local scope, false if it is not * of site-local scope or it is not a multicast address * @since 1.4 @@ -284,7 +284,7 @@ /** * Utility routine to check if the multicast address has organization scope. * - * @return a <code>boolean</code> indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of organization-local scope, * false if it is not of organization-local scope * or it is not a multicast address @@ -299,9 +299,9 @@ } /** - * Returns the raw IP address of this <code>InetAddress</code> + * Returns the raw IP address of this {@code InetAddress} * object. The result is in network byte order: the highest order - * byte of the address is in <code>getAddress()[0]</code>. + * byte of the address is in {@code getAddress()[0]}. * * @return the raw IP address of this object. */ @@ -337,18 +337,18 @@ /** * Compares this object against the specified object. - * The result is <code>true</code> if and only if the argument is - * not <code>null</code> and it represents the same IP address as + * The result is {@code true} if and only if the argument is + * not {@code null} and it represents the same IP address as * this object. * <p> - * Two instances of <code>InetAddress</code> represent the same IP + * Two instances of {@code InetAddress} represent the same IP * address if the length of the byte arrays returned by - * <code>getAddress</code> is the same for both, and each of the + * {@code getAddress} is the same for both, and each of the * array components is the same for the byte arrays. * * @param obj the object to compare against. - * @return <code>true</code> if the objects are the same; - * <code>false</code> otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.net.InetAddress#getAddress() */ public boolean equals(Object obj) {
--- a/jdk/src/share/classes/java/net/Inet6Address.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/Inet6Address.java Wed Jul 05 19:06:33 2017 +0200 @@ -47,7 +47,7 @@ * address. This is the full form. For example, * * <blockquote><table cellpadding=0 cellspacing=0 summary="layout"> - * <tr><td><tt>1080:0:0:0:8:800:200C:417A</tt><td></tr> + * <tr><td>{@code 1080:0:0:0:8:800:200C:417A}<td></tr> * </table></blockquote> * * <p> Note that it is not necessary to write the leading zeros in @@ -64,7 +64,7 @@ * zeros in an address. For example, * * <blockquote><table cellpadding=0 cellspacing=0 summary="layout"> - * <tr><td><tt>1080::8:800:200C:417A</tt><td></tr> + * <tr><td>{@code 1080::8:800:200C:417A}<td></tr> * </table></blockquote> * * <li><p> An alternative form that is sometimes more convenient @@ -75,8 +75,8 @@ * standard IPv4 representation address, for example, * * <blockquote><table cellpadding=0 cellspacing=0 summary="layout"> - * <tr><td><tt>::FFFF:129.144.52.38</tt><td></tr> - * <tr><td><tt>::129.144.52.38</tt><td></tr> + * <tr><td>{@code ::FFFF:129.144.52.38}<td></tr> + * <tr><td>{@code ::129.144.52.38}<td></tr> * </table></blockquote> * * <p> where "::FFFF:d.d.d.d" and "::d.d.d.d" are, respectively, the @@ -85,23 +85,23 @@ * in the "d.d.d.d" form. The following forms are invalid: * * <blockquote><table cellpadding=0 cellspacing=0 summary="layout"> - * <tr><td><tt>::FFFF:d.d.d</tt><td></tr> - * <tr><td><tt>::FFFF:d.d</tt><td></tr> - * <tr><td><tt>::d.d.d</tt><td></tr> - * <tr><td><tt>::d.d</tt><td></tr> + * <tr><td>{@code ::FFFF:d.d.d}<td></tr> + * <tr><td>{@code ::FFFF:d.d}<td></tr> + * <tr><td>{@code ::d.d.d}<td></tr> + * <tr><td>{@code ::d.d}<td></tr> * </table></blockquote> * * <p> The following form: * * <blockquote><table cellpadding=0 cellspacing=0 summary="layout"> - * <tr><td><tt>::FFFF:d</tt><td></tr> + * <tr><td>{@code ::FFFF:d}<td></tr> * </table></blockquote> * * <p> is valid, however it is an unconventional representation of * the IPv4-compatible IPv6 address, * * <blockquote><table cellpadding=0 cellspacing=0 summary="layout"> - * <tr><td><tt>::255.255.0.d</tt><td></tr> + * <tr><td>{@code ::255.255.0.d}<td></tr> * </table></blockquote> * * <p> while "::d" corresponds to the general IPv6 address @@ -258,7 +258,7 @@ * Create an Inet6Address in the exact manner of {@link * InetAddress#getByAddress(String,byte[])} except that the IPv6 scope_id is * set to the value corresponding to the given interface for the address - * type specified in <code>addr</code>. The call will fail with an + * type specified in {@code addr}. The call will fail with an * UnknownHostException if the given interface does not have a numeric * scope_id assigned for the given address type (eg. link-local or site-local). * See <a href="Inet6Address.html#scoped">here</a> for a description of IPv6
--- a/jdk/src/share/classes/java/net/InetAddress.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/InetAddress.java Wed Jul 05 19:06:33 2017 +0200 @@ -296,7 +296,7 @@ /** * Utility routine to check if the InetAddress is an * IP multicast address. - * @return a <code>boolean</code> indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * an IP multicast address * @since JDK1.1 */ @@ -306,7 +306,7 @@ /** * Utility routine to check if the InetAddress in a wildcard address. - * @return a <code>boolean</code> indicating if the Inetaddress is + * @return a {@code boolean} indicating if the Inetaddress is * a wildcard address. * @since 1.4 */ @@ -317,7 +317,7 @@ /** * Utility routine to check if the InetAddress is a loopback address. * - * @return a <code>boolean</code> indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * a loopback address; or false otherwise. * @since 1.4 */ @@ -328,7 +328,7 @@ /** * Utility routine to check if the InetAddress is an link local address. * - * @return a <code>boolean</code> indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * a link local address; or false if address is not a link local unicast address. * @since 1.4 */ @@ -339,7 +339,7 @@ /** * Utility routine to check if the InetAddress is a site local address. * - * @return a <code>boolean</code> indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * a site local address; or false if address is not a site local unicast address. * @since 1.4 */ @@ -350,7 +350,7 @@ /** * Utility routine to check if the multicast address has global scope. * - * @return a <code>boolean</code> indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of global scope, false if it is not * of global scope or it is not a multicast address * @since 1.4 @@ -362,7 +362,7 @@ /** * Utility routine to check if the multicast address has node scope. * - * @return a <code>boolean</code> indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of node-local scope, false if it is not * of node-local scope or it is not a multicast address * @since 1.4 @@ -374,7 +374,7 @@ /** * Utility routine to check if the multicast address has link scope. * - * @return a <code>boolean</code> indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of link-local scope, false if it is not * of link-local scope or it is not a multicast address * @since 1.4 @@ -386,7 +386,7 @@ /** * Utility routine to check if the multicast address has site scope. * - * @return a <code>boolean</code> indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of site-local scope, false if it is not * of site-local scope or it is not a multicast address * @since 1.4 @@ -398,7 +398,7 @@ /** * Utility routine to check if the multicast address has organization scope. * - * @return a <code>boolean</code> indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of organization-local scope, * false if it is not of organization-local scope * or it is not a multicast address @@ -424,9 +424,9 @@ * in an IllegalArgumentException being thrown. * * @param timeout the time, in milliseconds, before the call aborts - * @return a <code>boolean</code> indicating if the address is reachable. + * @return a {@code boolean} indicating if the address is reachable. * @throws IOException if a network error occurs - * @throws IllegalArgumentException if <code>timeout</code> is negative. + * @throws IllegalArgumentException if {@code timeout} is negative. * @since 1.5 */ public boolean isReachable(int timeout) throws IOException { @@ -442,10 +442,10 @@ * privilege can be obtained, otherwise it will try to establish * a TCP connection on port 7 (Echo) of the destination host. * <p> - * The <code>network interface</code> and <code>ttl</code> parameters + * The {@code network interface} and {@code ttl} parameters * let the caller specify which network interface the test will go through * and the maximum number of hops the packets should go through. - * A negative value for the <code>ttl</code> will result in an + * A negative value for the {@code ttl} will result in an * IllegalArgumentException being thrown. * <p> * The timeout value, in milliseconds, indicates the maximum amount of time @@ -458,9 +458,9 @@ * @param ttl the maximum numbers of hops to try or 0 for the * default * @param timeout the time, in milliseconds, before the call aborts - * @throws IllegalArgumentException if either <code>timeout</code> - * or <code>ttl</code> are negative. - * @return a <code>boolean</code>indicating if the address is reachable. + * @throws IllegalArgumentException if either {@code timeout} + * or {@code ttl} are negative. + * @return a {@code boolean}indicating if the address is reachable. * @throws IOException if a network error occurs * @since 1.5 */ @@ -486,8 +486,8 @@ * {@link #getCanonicalHostName() getCanonicalHostName}. * * <p>If there is a security manager, its - * <code>checkConnect</code> method is first called - * with the hostname and <code>-1</code> + * {@code checkConnect} method is first called + * with the hostname and {@code -1} * as its arguments to see if the operation is allowed. * If the operation is not allowed, it will return * the textual representation of the IP address. @@ -511,8 +511,8 @@ * here without a security check. * * <p>If there is a security manager, this method first - * calls its <code>checkConnect</code> method - * with the hostname and <code>-1</code> + * calls its {@code checkConnect} method + * with the hostname and {@code -1} * as its arguments to see if the calling code is allowed to know * the hostname for this IP address, i.e., to connect to the host. * If the operation is not allowed, it will return @@ -539,8 +539,8 @@ * the FQDN depending on the underlying system configuration. * * <p>If there is a security manager, this method first - * calls its <code>checkConnect</code> method - * with the hostname and <code>-1</code> + * calls its {@code checkConnect} method + * with the hostname and {@code -1} * as its arguments to see if the calling code is allowed to know * the hostname for this IP address, i.e., to connect to the host. * If the operation is not allowed, it will return @@ -566,8 +566,8 @@ * Returns the hostname for this address. * * <p>If there is a security manager, this method first - * calls its <code>checkConnect</code> method - * with the hostname and <code>-1</code> + * calls its {@code checkConnect} method + * with the hostname and {@code -1} * as its arguments to see if the calling code is allowed to know * the hostname for this IP address, i.e., to connect to the host. * If the operation is not allowed, it will return @@ -633,9 +633,9 @@ } /** - * Returns the raw IP address of this <code>InetAddress</code> + * Returns the raw IP address of this {@code InetAddress} * object. The result is in network byte order: the highest order - * byte of the address is in <code>getAddress()[0]</code>. + * byte of the address is in {@code getAddress()[0]}. * * @return the raw IP address of this object. */ @@ -664,18 +664,18 @@ /** * Compares this object against the specified object. - * The result is <code>true</code> if and only if the argument is - * not <code>null</code> and it represents the same IP address as + * The result is {@code true} if and only if the argument is + * not {@code null} and it represents the same IP address as * this object. * <p> - * Two instances of <code>InetAddress</code> represent the same IP + * Two instances of {@code InetAddress} represent the same IP * address if the length of the byte arrays returned by - * <code>getAddress</code> is the same for both, and each of the + * {@code getAddress} is the same for both, and each of the * array components is the same for the byte arrays. * * @param obj the object to compare against. - * @return <code>true</code> if the objects are the same; - * <code>false</code> otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.net.InetAddress#getAddress() */ public boolean equals(Object obj) { @@ -683,7 +683,7 @@ } /** - * Converts this IP address to a <code>String</code>. The + * Converts this IP address to a {@code String}. The * string returned is of the form: hostname / literal IP * address. * @@ -974,7 +974,7 @@ * No name service is checked for the validity of the address. * * <p> The host name can either be a machine name, such as - * "<code>java.sun.com</code>", or a textual representation of its IP + * "{@code java.sun.com}", or a textual representation of its IP * address. * <p> No validity checking is done on the host name either. * @@ -1019,26 +1019,26 @@ * Determines the IP address of a host, given the host's name. * * <p> The host name can either be a machine name, such as - * "<code>java.sun.com</code>", or a textual representation of its + * "{@code java.sun.com}", or a textual representation of its * IP address. If a literal IP address is supplied, only the * validity of the address format is checked. * - * <p> For <code>host</code> specified in literal IPv6 address, + * <p> For {@code host} specified in literal IPv6 address, * either the form defined in RFC 2732 or the literal IPv6 address * format defined in RFC 2373 is accepted. IPv6 scoped addresses are also * supported. See <a href="Inet6Address.html#scoped">here</a> for a description of IPv6 * scoped addresses. * - * <p> If the host is <tt>null</tt> then an <tt>InetAddress</tt> + * <p> If the host is {@code null} then an {@code InetAddress} * representing an address of the loopback interface is returned. * See <a href="http://www.ietf.org/rfc/rfc3330.txt">RFC 3330</a> * section 2 and <a href="http://www.ietf.org/rfc/rfc2373.txt">RFC 2373</a> * section 2.5.3. </p> * - * @param host the specified host, or <code>null</code>. + * @param host the specified host, or {@code null}. * @return an IP address for the given host name. * @exception UnknownHostException if no IP address for the - * <code>host</code> could be found, or if a scope_id was specified + * {@code host} could be found, or if a scope_id was specified * for a global IPv6 address. * @exception SecurityException if a security manager exists * and its checkConnect method doesn't allow the operation @@ -1059,37 +1059,37 @@ * based on the configured name service on the system. * * <p> The host name can either be a machine name, such as - * "<code>java.sun.com</code>", or a textual representation of its IP + * "{@code java.sun.com}", or a textual representation of its IP * address. If a literal IP address is supplied, only the * validity of the address format is checked. * - * <p> For <code>host</code> specified in <i>literal IPv6 address</i>, + * <p> For {@code host} specified in <i>literal IPv6 address</i>, * either the form defined in RFC 2732 or the literal IPv6 address * format defined in RFC 2373 is accepted. A literal IPv6 address may * also be qualified by appending a scoped zone identifier or scope_id. * The syntax and usage of scope_ids is described * <a href="Inet6Address.html#scoped">here</a>. - * <p> If the host is <tt>null</tt> then an <tt>InetAddress</tt> + * <p> If the host is {@code null} then an {@code InetAddress} * representing an address of the loopback interface is returned. * See <a href="http://www.ietf.org/rfc/rfc3330.txt">RFC 3330</a> * section 2 and <a href="http://www.ietf.org/rfc/rfc2373.txt">RFC 2373</a> * section 2.5.3. </p> * - * <p> If there is a security manager and <code>host</code> is not - * null and <code>host.length() </code> is not equal to zero, the + * <p> If there is a security manager and {@code host} is not + * null and {@code host.length() } is not equal to zero, the * security manager's - * <code>checkConnect</code> method is called - * with the hostname and <code>-1</code> + * {@code checkConnect} method is called + * with the hostname and {@code -1} * as its arguments to see if the operation is allowed. * - * @param host the name of the host, or <code>null</code>. + * @param host the name of the host, or {@code null}. * @return an array of all the IP addresses for a given host name. * * @exception UnknownHostException if no IP address for the - * <code>host</code> could be found, or if a scope_id was specified + * {@code host} could be found, or if a scope_id was specified * for a global IPv6 address. * @exception SecurityException if a security manager exists and its - * <code>checkConnect</code> method doesn't allow the operation. + * {@code checkConnect} method doesn't allow the operation. * * @see SecurityManager#checkConnect */ @@ -1389,9 +1389,9 @@ } /** - * Returns an <code>InetAddress</code> object given the raw IP address . + * Returns an {@code InetAddress} object given the raw IP address . * The argument is in network byte order: the highest order - * byte of the address is in <code>getAddress()[0]</code>. + * byte of the address is in {@code getAddress()[0]}. * * <p> This method doesn't block, i.e. no reverse name service lookup * is performed. @@ -1417,14 +1417,14 @@ /** * Returns the address of the local host. This is achieved by retrieving * the name of the host from the system, then resolving that name into - * an <code>InetAddress</code>. + * an {@code InetAddress}. * * <P>Note: The resolved address may be cached for a short period of time. * </P> * * <p>If there is a security manager, its - * <code>checkConnect</code> method is called - * with the local host name and <code>-1</code> + * {@code checkConnect} method is called + * with the local host name and {@code -1} * as its arguments to see if the operation is allowed. * If the operation is not allowed, an InetAddress representing * the loopback address is returned.
--- a/jdk/src/share/classes/java/net/InetSocketAddress.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/InetSocketAddress.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, 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 @@ -43,7 +43,7 @@ * as returned values. * <p> * The <i>wildcard</i> is a special local IP address. It usually means "any" - * and can only be used for <code>bind</code> operations. + * and can only be used for {@code bind} operations. * * @see java.net.Socket * @see java.net.ServerSocket @@ -155,8 +155,8 @@ * and the port number a specified value. * <p> * A valid port value is between 0 and 65535. - * A port number of <code>zero</code> will let the system pick up an - * ephemeral port in a <code>bind</code> operation. + * A port number of {@code zero} will let the system pick up an + * ephemeral port in a {@code bind} operation. * <p> * @param port The port number * @throws IllegalArgumentException if the port parameter is outside the specified @@ -171,10 +171,10 @@ * Creates a socket address from an IP address and a port number. * <p> * A valid port value is between 0 and 65535. - * A port number of <code>zero</code> will let the system pick up an - * ephemeral port in a <code>bind</code> operation. + * A port number of {@code zero} will let the system pick up an + * ephemeral port in a {@code bind} operation. * <P> - * A <code>null</code> address will assign the <i>wildcard</i> address. + * A {@code null} address will assign the <i>wildcard</i> address. * <p> * @param addr The IP address * @param port The port number @@ -195,13 +195,13 @@ * An attempt will be made to resolve the hostname into an InetAddress. * If that attempt fails, the address will be flagged as <I>unresolved</I>. * <p> - * If there is a security manager, its <code>checkConnect</code> method + * If there is a security manager, its {@code checkConnect} method * is called with the host name as its argument to check the permissiom * to resolve it. This could result in a SecurityException. * <P> * A valid port value is between 0 and 65535. - * A port number of <code>zero</code> will let the system pick up an - * ephemeral port in a <code>bind</code> operation. + * A port number of {@code zero} will let the system pick up an + * ephemeral port in a {@code bind} operation. * <P> * @param hostname the Host name * @param port The port number @@ -237,8 +237,8 @@ * The address will be flagged as <I>unresolved</I>. * <p> * A valid port value is between 0 and 65535. - * A port number of <code>zero</code> will let the system pick up an - * ephemeral port in a <code>bind</code> operation. + * A port number of {@code zero} will let the system pick up an + * ephemeral port in a {@code bind} operation. * <P> * @param host the Host name * @param port The port number @@ -246,7 +246,7 @@ * the range of valid port values, or if the hostname * parameter is <TT>null</TT>. * @see #isUnresolved() - * @return a <code>InetSocketAddress</code> representing the unresolved + * @return a {@code InetSocketAddress} representing the unresolved * socket address * @since 1.5 */ @@ -326,16 +326,16 @@ /** * - * Gets the <code>InetAddress</code>. + * Gets the {@code InetAddress}. * - * @return the InetAdress or <code>null</code> if it is unresolved. + * @return the InetAdress or {@code null} if it is unresolved. */ public final InetAddress getAddress() { return holder.getAddress(); } /** - * Gets the <code>hostname</code>. + * Gets the {@code hostname}. * Note: This method may trigger a name service reverse lookup if the * address was created with a literal IP address. * @@ -360,8 +360,8 @@ /** * Checks whether the address has been resolved or not. * - * @return <code>true</code> if the hostname couldn't be resolved into - * an <code>InetAddress</code>. + * @return {@code true} if the hostname couldn't be resolved into + * an {@code InetAddress}. */ public final boolean isUnresolved() { return holder.isUnresolved(); @@ -382,11 +382,11 @@ /** * Compares this object against the specified object. - * The result is <code>true</code> if and only if the argument is - * not <code>null</code> and it represents the same address as + * The result is {@code true} if and only if the argument is + * not {@code null} and it represents the same address as * this object. * <p> - * Two instances of <code>InetSocketAddress</code> represent the same + * Two instances of {@code InetSocketAddress} represent the same * address if both the InetAddresses (or hostnames if it is unresolved) and port * numbers are equal. * If both addresses are unresolved, then the hostname and the port number @@ -396,8 +396,8 @@ * considered equal. * * @param obj the object to compare against. - * @return <code>true</code> if the objects are the same; - * <code>false</code> otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.net.InetAddress#equals(java.lang.Object) */ @Override
--- a/jdk/src/share/classes/java/net/InterfaceAddress.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/InterfaceAddress.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, 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 @@ -47,23 +47,23 @@ } /** - * Returns an <code>InetAddress</code> for this address. + * Returns an {@code InetAddress} for this address. * - * @return the <code>InetAddress</code> for this address. + * @return the {@code InetAddress} for this address. */ public InetAddress getAddress() { return address; } /** - * Returns an <code>InetAddress</code> for the brodcast address + * Returns an {@code InetAddress} for the brodcast address * for this InterfaceAddress. * <p> * Only IPv4 networks have broadcast address therefore, in the case - * of an IPv6 network, <code>null</code> will be returned. + * of an IPv6 network, {@code null} will be returned. * - * @return the <code>InetAddress</code> representing the broadcast - * address or <code>null</code> if there is no broadcast address. + * @return the {@code InetAddress} representing the broadcast + * address or {@code null} if there is no broadcast address. */ public InetAddress getBroadcast() { return broadcast; @@ -76,7 +76,7 @@ * or 24 (255.255.255.0). <p> * Typical IPv6 values would be 128 (::1/128) or 10 (fe80::203:baff:fe27:1243/10) * - * @return a <code>short</code> representing the prefix length for the + * @return a {@code short} representing the prefix length for the * subnet of that address. */ public short getNetworkPrefixLength() { @@ -85,17 +85,17 @@ /** * Compares this object against the specified object. - * The result is <code>true</code> if and only if the argument is - * not <code>null</code> and it represents the same interface address as + * The result is {@code true} if and only if the argument is + * not {@code null} and it represents the same interface address as * this object. * <p> - * Two instances of <code>InterfaceAddress</code> represent the same + * Two instances of {@code InterfaceAddress} represent the same * address if the InetAddress, the prefix length and the broadcast are * the same for both. * * @param obj the object to compare against. - * @return <code>true</code> if the objects are the same; - * <code>false</code> otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.net.InterfaceAddress#hashCode() */ public boolean equals(Object obj) { @@ -122,7 +122,7 @@ } /** - * Converts this Interface address to a <code>String</code>. The + * Converts this Interface address to a {@code String}. The * string returned is of the form: InetAddress / prefix length [ broadcast address ]. * * @return a string representation of this Interface address.
--- a/jdk/src/share/classes/java/net/JarURLConnection.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/JarURLConnection.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,18 +45,14 @@ * * <p>for example: * - * <p><code> - * jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class<br> - * </code> + * <p>{@code jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class} * * <p>Jar URLs should be used to refer to a JAR file or entries in * a JAR file. The example above is a JAR URL which refers to a JAR * entry. If the entry name is omitted, the URL refers to the whole * JAR file: * - * <code> - * jar:http://www.foo.com/bar/baz.jar!/ - * </code> + * {@code jar:http://www.foo.com/bar/baz.jar!/} * * <p>Users should cast the generic URLConnection to a * JarURLConnection when they know that the URL they created is a JAR @@ -76,19 +72,19 @@ * <dl> * * <dt>A Jar entry - * <dd><code>jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class</code> + * <dd>{@code jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class} * * <dt>A Jar file - * <dd><code>jar:http://www.foo.com/bar/baz.jar!/</code> + * <dd>{@code jar:http://www.foo.com/bar/baz.jar!/} * * <dt>A Jar directory - * <dd><code>jar:http://www.foo.com/bar/baz.jar!/COM/foo/</code> + * <dd>{@code jar:http://www.foo.com/bar/baz.jar!/COM/foo/} * * </dl> * - * <p><code>!/</code> is refered to as the <em>separator</em>. + * <p>{@code !/} is refered to as the <em>separator</em>. * - * <p>When constructing a JAR url via <code>new URL(context, spec)</code>, + * <p>When constructing a JAR url via {@code new URL(context, spec)}, * the following rules apply: * * <ul> @@ -294,7 +290,7 @@ * can only be called once * the connection has been completely verified by reading * from the input stream until the end of the stream has been - * reached. Otherwise, this method will return <code>null</code> + * reached. Otherwise, this method will return {@code null} * * @return the Certificate object for this connection if the URL * for it points to a JAR file entry, null otherwise.
--- a/jdk/src/share/classes/java/net/MalformedURLException.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/MalformedURLException.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, 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 @@ -39,13 +39,13 @@ private static final long serialVersionUID = -182787522200415866L; /** - * Constructs a <code>MalformedURLException</code> with no detail message. + * Constructs a {@code MalformedURLException} with no detail message. */ public MalformedURLException() { } /** - * Constructs a <code>MalformedURLException</code> with the + * Constructs a {@code MalformedURLException} with the * specified detail message. * * @param msg the detail message.
--- a/jdk/src/share/classes/java/net/MulticastSocket.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/MulticastSocket.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, 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 @@ -92,7 +92,7 @@ * Create a multicast socket. * * <p>If there is a security manager, - * its <code>checkListen</code> method is first called + * its {@code checkListen} method is first called * with 0 as its argument to ensure the operation is allowed. * This could result in a SecurityException. * <p> @@ -103,7 +103,7 @@ * @exception IOException if an I/O exception occurs * while creating the MulticastSocket * @exception SecurityException if a security manager exists and its - * <code>checkListen</code> method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * @see SecurityManager#checkListen * @see java.net.DatagramSocket#setReuseAddress(boolean) */ @@ -115,8 +115,8 @@ * Create a multicast socket and bind it to a specific port. * * <p>If there is a security manager, - * its <code>checkListen</code> method is first called - * with the <code>port</code> argument + * its {@code checkListen} method is first called + * with the {@code port} argument * as its argument to ensure the operation is allowed. * This could result in a SecurityException. * <p> @@ -128,7 +128,7 @@ * @exception IOException if an I/O exception occurs * while creating the MulticastSocket * @exception SecurityException if a security manager exists and its - * <code>checkListen</code> method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * @see SecurityManager#checkListen * @see java.net.DatagramSocket#setReuseAddress(boolean) */ @@ -139,10 +139,10 @@ /** * Create a MulticastSocket bound to the specified socket address. * <p> - * Or, if the address is <code>null</code>, create an unbound socket. + * Or, if the address is {@code null}, create an unbound socket. * <p> * <p>If there is a security manager, - * its <code>checkListen</code> method is first called + * its {@code checkListen} method is first called * with the SocketAddress port as its argument to ensure the operation is allowed. * This could result in a SecurityException. * <p> @@ -150,12 +150,12 @@ * {@link DatagramSocket#setReuseAddress(boolean)} method is * called to enable the SO_REUSEADDR socket option. * - * @param bindaddr Socket address to bind to, or <code>null</code> for + * @param bindaddr Socket address to bind to, or {@code null} for * an unbound socket. * @exception IOException if an I/O exception occurs * while creating the MulticastSocket * @exception SecurityException if a security manager exists and its - * <code>checkListen</code> method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * @see SecurityManager#checkListen * @see java.net.DatagramSocket#setReuseAddress(boolean) * @@ -197,7 +197,7 @@ /** * Set the default time-to-live for multicast packets sent out - * on this <code>MulticastSocket</code> in order to control the + * on this {@code MulticastSocket} in order to control the * scope of the multicasts. * * <p>The ttl is an <b>unsigned</b> 8-bit quantity, and so <B>must</B> be @@ -279,11 +279,11 @@ /** * Joins a multicast group. Its behavior may be affected by - * <code>setInterface</code> or <code>setNetworkInterface</code>. + * {@code setInterface} or {@code setNetworkInterface}. * * <p>If there is a security manager, this method first - * calls its <code>checkMulticast</code> method - * with the <code>mcastaddr</code> argument + * calls its {@code checkMulticast} method + * with the {@code mcastaddr} argument * as its argument. * * @param mcastaddr is the multicast address to join @@ -291,7 +291,7 @@ * @exception IOException if there is an error joining * or when the address is not a multicast address. * @exception SecurityException if a security manager exists and its - * <code>checkMulticast</code> method doesn't allow the join. + * {@code checkMulticast} method doesn't allow the join. * * @see SecurityManager#checkMulticast(InetAddress) */ @@ -325,18 +325,18 @@ /** * Leave a multicast group. Its behavior may be affected by - * <code>setInterface</code> or <code>setNetworkInterface</code>. + * {@code setInterface} or {@code setNetworkInterface}. * * <p>If there is a security manager, this method first - * calls its <code>checkMulticast</code> method - * with the <code>mcastaddr</code> argument + * calls its {@code checkMulticast} method + * with the {@code mcastaddr} argument * as its argument. * * @param mcastaddr is the multicast address to leave * @exception IOException if there is an error leaving * or when the address is not a multicast address. * @exception SecurityException if a security manager exists and its - * <code>checkMulticast</code> method doesn't allow the operation. + * {@code checkMulticast} method doesn't allow the operation. * * @see SecurityManager#checkMulticast(InetAddress) */ @@ -362,8 +362,8 @@ * Joins the specified multicast group at the specified interface. * * <p>If there is a security manager, this method first - * calls its <code>checkMulticast</code> method - * with the <code>mcastaddr</code> argument + * calls its {@code checkMulticast} method + * with the {@code mcastaddr} argument * as its argument. * * @param mcastaddr is the multicast address to join @@ -375,7 +375,7 @@ * @exception IOException if there is an error joining * or when the address is not a multicast address. * @exception SecurityException if a security manager exists and its - * <code>checkMulticast</code> method doesn't allow the join. + * {@code checkMulticast} method doesn't allow the join. * @throws IllegalArgumentException if mcastaddr is null or is a * SocketAddress subclass not supported by this socket * @@ -410,8 +410,8 @@ * Leave a multicast group on a specified local interface. * * <p>If there is a security manager, this method first - * calls its <code>checkMulticast</code> method - * with the <code>mcastaddr</code> argument + * calls its {@code checkMulticast} method + * with the {@code mcastaddr} argument * as its argument. * * @param mcastaddr is the multicast address to leave @@ -422,7 +422,7 @@ * @exception IOException if there is an error leaving * or when the address is not a multicast address. * @exception SecurityException if a security manager exists and its - * <code>checkMulticast</code> method doesn't allow the operation. + * {@code checkMulticast} method doesn't allow the operation. * @throws IllegalArgumentException if mcastaddr is null or is a * SocketAddress subclass not supported by this socket * @@ -478,7 +478,7 @@ * Retrieve the address of the network interface used for * multicast packets. * - * @return An <code>InetAddress</code> representing + * @return An {@code InetAddress} representing * the address of the network interface used for * multicast packets. * @@ -562,7 +562,7 @@ * * @exception SocketException if there is an error in * the underlying protocol, such as a TCP error. - * @return the multicast <code>NetworkInterface</code> currently set + * @return the multicast {@code NetworkInterface} currently set * @see #setNetworkInterface(NetworkInterface) * @since 1.4 */ @@ -587,7 +587,7 @@ * <p>Because this option is a hint, applications that want to * verify what loopback mode is set to should call * {@link #getLoopbackMode()} - * @param disable <code>true</code> to disable the LoopbackMode + * @param disable {@code true} to disable the LoopbackMode * @throws SocketException if an error occurs while setting the value * @since 1.4 * @see #getLoopbackMode @@ -615,18 +615,18 @@ * otherwise it is preferable to set a TTL once on the socket, and * use that default TTL for all packets. This method does <B>not * </B> alter the default TTL for the socket. Its behavior may be - * affected by <code>setInterface</code>. + * affected by {@code setInterface}. * * <p>If there is a security manager, this method first performs some - * security checks. First, if <code>p.getAddress().isMulticastAddress()</code> + * security checks. First, if {@code p.getAddress().isMulticastAddress()} * is true, this method calls the - * security manager's <code>checkMulticast</code> method - * with <code>p.getAddress()</code> and <code>ttl</code> as its arguments. + * security manager's {@code checkMulticast} method + * with {@code p.getAddress()} and {@code ttl} as its arguments. * If the evaluation of that expression is false, * this method instead calls the security manager's - * <code>checkConnect</code> method with arguments - * <code>p.getAddress().getHostAddress()</code> and - * <code>p.getPort()</code>. Each call to a security manager method + * {@code checkConnect} method with arguments + * {@code p.getAddress().getHostAddress()} and + * {@code p.getPort()}. Each call to a security manager method * could result in a SecurityException if the operation is not allowed. * * @param p is the packet to be sent. The packet should contain @@ -639,7 +639,7 @@ * @exception IOException is raised if an error occurs i.e * error while setting ttl. * @exception SecurityException if a security manager exists and its - * <code>checkMulticast</code> or <code>checkConnect</code> + * {@code checkMulticast} or {@code checkConnect} * method doesn't allow the send. * * @deprecated Use the following code or its equivalent instead:
--- a/jdk/src/share/classes/java/net/NetPermission.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/NetPermission.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, 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 @@ -177,8 +177,8 @@ * * @param name the name of the NetPermission. * - * @throws NullPointerException if <code>name</code> is <code>null</code>. - * @throws IllegalArgumentException if <code>name</code> is empty. + * @throws NullPointerException if {@code name} is {@code null}. + * @throws IllegalArgumentException if {@code name} is empty. */ public NetPermission(String name) @@ -194,8 +194,8 @@ * @param name the name of the NetPermission. * @param actions should be null. * - * @throws NullPointerException if <code>name</code> is <code>null</code>. - * @throws IllegalArgumentException if <code>name</code> is empty. + * @throws NullPointerException if {@code name} is {@code null}. + * @throws IllegalArgumentException if {@code name} is empty. */ public NetPermission(String name, String actions)
--- a/jdk/src/share/classes/java/net/NetworkInterface.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/NetworkInterface.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, 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 @@ -98,9 +98,9 @@ * Convenience method to return 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</code> + * If there is a security manager, its {@code checkConnect} * method is called for each InetAddress. Only InetAddresses where - * the <code>checkConnect</code> doesn't throw a SecurityException + * the {@code checkConnect} doesn't throw a SecurityException * will be returned in the Enumeration. However, if the caller has the * {@link NetPermission}("getNetworkInformation") permission, then all * InetAddresses are returned. @@ -154,15 +154,15 @@ } /** - * Get a List of all or a subset of the <code>InterfaceAddresses</code> + * Get a List of all or a subset of the {@code InterfaceAddresses} * of this network interface. * <p> - * If there is a security manager, its <code>checkConnect</code> + * If there is a security manager, its {@code checkConnect} * method is called with the InetAddress for each InterfaceAddress. - * Only InterfaceAddresses where the <code>checkConnect</code> doesn't throw + * Only InterfaceAddresses where the {@code checkConnect} doesn't throw * a SecurityException will be returned in the List. * - * @return a <code>List</code> object with all or a subset of the + * @return a {@code List} object with all or a subset of the * InterfaceAddresss of this network interface * @since 1.6 */ @@ -216,10 +216,10 @@ /** * Returns the parent NetworkInterface of this interface if this is - * a subinterface, or <code>null</code> if it is a physical + * a subinterface, or {@code null} if it is a physical * (non virtual) interface or has no parent. * - * @return The <code>NetworkInterface</code> this interface is attached to. + * @return The {@code NetworkInterface} this interface is attached to. * @since 1.6 */ public NetworkInterface getParent() { @@ -260,15 +260,15 @@ * @param name * The name of the network interface. * - * @return A <tt>NetworkInterface</tt> with the specified name, - * or <tt>null</tt> if there is no network interface + * @return A {@code NetworkInterface} with the specified name, + * or {@code null} if there is no network interface * with the specified name. * * @throws SocketException * If an I/O error occurs. * * @throws NullPointerException - * If the specified name is <tt>null</tt>. + * If the specified name is {@code null}. */ public static NetworkInterface getByName(String name) throws SocketException { if (name == null) @@ -303,17 +303,17 @@ * returned. * * @param addr - * The <tt>InetAddress</tt> to search with. + * The {@code InetAddress} to search with. * - * @return A <tt>NetworkInterface</tt> - * or <tt>null</tt> if there is no network interface + * @return A {@code NetworkInterface} + * or {@code null} if there is no network interface * with the specified IP address. * * @throws SocketException * If an I/O error occurs. * * @throws NullPointerException - * If the specified address is <tt>null</tt>. + * If the specified address is {@code null}. */ public static NetworkInterface getByInetAddress(InetAddress addr) throws SocketException { if (addr == null) { @@ -378,7 +378,7 @@ /** * Returns whether a network interface is up and running. * - * @return <code>true</code> if the interface is up and running. + * @return {@code true} if the interface is up and running. * @exception SocketException if an I/O error occurs. * @since 1.6 */ @@ -390,7 +390,7 @@ /** * Returns whether a network interface is a loopback interface. * - * @return <code>true</code> if the interface is a loopback interface. + * @return {@code true} if the interface is a loopback interface. * @exception SocketException if an I/O error occurs. * @since 1.6 */ @@ -404,7 +404,7 @@ * A typical point to point interface would be a PPP connection through * a modem. * - * @return <code>true</code> if the interface is a point to point + * @return {@code true} if the interface is a point to point * interface. * @exception SocketException if an I/O error occurs. * @since 1.6 @@ -417,7 +417,7 @@ /** * Returns whether a network interface supports multicasting or not. * - * @return <code>true</code> if the interface supports Multicasting. + * @return {@code true} if the interface supports Multicasting. * @exception SocketException if an I/O error occurs. * @since 1.6 */ @@ -432,7 +432,7 @@ * If a security manager is set, then the caller must have * the permission {@link NetPermission}("getNetworkInformation"). * - * @return a byte array containing the address, or <code>null</code> if + * @return a byte array containing the address, or {@code null} if * the address doesn't exist, is not accessible or a security * manager is set and the caller does not have the permission * NetPermission("getNetworkInformation") @@ -481,7 +481,7 @@ * can be several virtual interfaces attached to a single physical * interface. * - * @return <code>true</code> if this interface is a virtual interface. + * @return {@code true} if this interface is a virtual interface. * @since 1.6 */ public boolean isVirtual() { @@ -497,16 +497,16 @@ /** * Compares this object against the specified object. - * The result is <code>true</code> if and only if the argument is - * not <code>null</code> and it represents the same NetworkInterface + * The result is {@code true} if and only if the argument is + * not {@code null} and it represents the same NetworkInterface * as this object. * <p> - * Two instances of <code>NetworkInterface</code> represent the same + * Two instances of {@code NetworkInterface} represent the same * NetworkInterface if both name and addrs are the same for both. * * @param obj the object to compare against. - * @return <code>true</code> if the objects are the same; - * <code>false</code> otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.net.InetAddress#getAddress() */ public boolean equals(Object obj) {
--- a/jdk/src/share/classes/java/net/PasswordAuthentication.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/PasswordAuthentication.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, 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 @@ -43,11 +43,11 @@ private char[] password; /** - * Creates a new <code>PasswordAuthentication</code> object from the given + * Creates a new {@code PasswordAuthentication} object from the given * user name and password. * * <p> Note that the given user password is cloned before it is stored in - * the new <code>PasswordAuthentication</code> object. + * the new {@code PasswordAuthentication} object. * * @param userName the user name * @param password the user's password
--- a/jdk/src/share/classes/java/net/PortUnreachableException.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/PortUnreachableException.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2013, 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 @@ -36,7 +36,7 @@ private static final long serialVersionUID = 8462541992376507323L; /** - * Constructs a new <code>PortUnreachableException</code> with a + * Constructs a new {@code PortUnreachableException} with a * detail message. * @param msg the detail message */ @@ -45,7 +45,7 @@ } /** - * Construct a new <code>PortUnreachableException</code> with no + * Construct a new {@code PortUnreachableException} with no * detailed message. */ public PortUnreachableException() {}
--- a/jdk/src/share/classes/java/net/ProtocolException.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/ProtocolException.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, 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 @@ -39,7 +39,7 @@ private static final long serialVersionUID = -6098449442062388080L; /** - * Constructs a new <code>ProtocolException</code> with the + * Constructs a new {@code ProtocolException} with the * specified detail message. * * @param host the detail message. @@ -49,7 +49,7 @@ } /** - * Constructs a new <code>ProtocolException</code> with no detail message. + * Constructs a new {@code ProtocolException} with no detail message. */ public ProtocolException() { }
--- a/jdk/src/share/classes/java/net/Proxy.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/Proxy.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, 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 @@ -28,7 +28,7 @@ /** * This class represents a proxy setting, typically a type (http, socks) and * a socket address. - * A <code>Proxy</code> is an immutable object. + * A {@code Proxy} is an immutable object. * * @see java.net.ProxySelector * @author Yingxian Wang @@ -61,17 +61,17 @@ private SocketAddress sa; /** - * A proxy setting that represents a <code>DIRECT</code> connection, + * A proxy setting that represents a {@code DIRECT} connection, * basically telling the protocol handler not to use any proxying. * Used, for instance, to create sockets bypassing any other global * proxy settings (like SOCKS): * <P> - * <code>Socket s = new Socket(Proxy.NO_PROXY);</code><br> + * {@code Socket s = new Socket(Proxy.NO_PROXY);}<br> * <P> */ public final static Proxy NO_PROXY = new Proxy(); - // Creates the proxy that represents a <code>DIRECT</code> connection. + // Creates the proxy that represents a {@code DIRECT} connection. private Proxy() { type = Type.DIRECT; sa = null; @@ -82,11 +82,11 @@ * Certain combinations are illegal. For instance, for types Http, and * Socks, a SocketAddress <b>must</b> be provided. * <P> - * Use the <code>Proxy.NO_PROXY</code> constant + * Use the {@code Proxy.NO_PROXY} constant * for representing a direct connection. * - * @param type the <code>Type</code> of the proxy - * @param sa the <code>SocketAddress</code> for that proxy + * @param type the {@code Type} of the proxy + * @param sa the {@code SocketAddress} for that proxy * @throws IllegalArgumentException when the type and the address are * incompatible */ @@ -108,9 +108,9 @@ /** * Returns the socket address of the proxy, or - * <code>null</code> if its a direct connection. + * {@code null} if its a direct connection. * - * @return a <code>SocketAddress</code> representing the socket end + * @return a {@code SocketAddress} representing the socket end * point of the proxy */ public SocketAddress address() { @@ -121,7 +121,7 @@ * Constructs a string representation of this Proxy. * This String is constructed by calling toString() on its type * and concatenating " @ " and the toString() result from its address - * if its type is not <code>DIRECT</code>. + * if its type is not {@code DIRECT}. * * @return a string representation of this object. */ @@ -133,16 +133,16 @@ /** * Compares this object against the specified object. - * The result is <code>true</code> if and only if the argument is - * not <code>null</code> and it represents the same proxy as + * The result is {@code true} if and only if the argument is + * not {@code null} and it represents the same proxy as * this object. * <p> - * Two instances of <code>Proxy</code> represent the same + * Two instances of {@code Proxy} represent the same * address if both the SocketAddresses and type are equal. * * @param obj the object to compare against. - * @return <code>true</code> if the objects are the same; - * <code>false</code> otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.net.InetSocketAddress#equals(java.lang.Object) */ public final boolean equals(Object obj) {
--- a/jdk/src/share/classes/java/net/ProxySelector.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/ProxySelector.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, 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,9 +83,9 @@ * * @throws SecurityException * If a security manager has been installed and it denies - * {@link NetPermission}<tt>("getProxySelector")</tt> + * {@link NetPermission}{@code ("getProxySelector")} * @see #setDefault(ProxySelector) - * @return the system-wide <code>ProxySelector</code> + * @return the system-wide {@code ProxySelector} * @since 1.5 */ public static ProxySelector getDefault() { @@ -102,11 +102,11 @@ * Note: non-standard protocol handlers may ignore this setting. * * @param ps The HTTP proxy selector, or - * <code>null</code> to unset the proxy selector. + * {@code null} to unset the proxy selector. * * @throws SecurityException * If a security manager has been installed and it denies - * {@link NetPermission}<tt>("setProxySelector")</tt> + * {@link NetPermission}{@code ("setProxySelector")} * * @see #getDefault() * @since 1.5 @@ -127,7 +127,7 @@ * <UL> * <LI>http URI for http connections</LI> * <LI>https URI for https connections - * <LI><code>socket://host:port</code><br> + * <LI>{@code socket://host:port}<br> * for tcp client sockets connections</LI> * </UL> *
--- a/jdk/src/share/classes/java/net/ResponseCache.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/ResponseCache.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, 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 @@ -74,10 +74,10 @@ * * @throws SecurityException * If a security manager has been installed and it denies - * {@link NetPermission}<tt>("getResponseCache")</tt> + * {@link NetPermission}{@code ("getResponseCache")} * * @see #setDefault(ResponseCache) - * @return the system-wide <code>ResponseCache</code> + * @return the system-wide {@code ResponseCache} * @since 1.5 */ public synchronized static ResponseCache getDefault() { @@ -94,11 +94,11 @@ * Note: non-standard procotol handlers may ignore this setting. * * @param responseCache The response cache, or - * <code>null</code> to unset the cache. + * {@code null} to unset the cache. * * @throws SecurityException * If a security manager has been installed and it denies - * {@link NetPermission}<tt>("setResponseCache")</tt> + * {@link NetPermission}{@code ("setResponseCache")} * * @see #getDefault() * @since 1.5 @@ -118,14 +118,14 @@ * to get the network resource. If a cached response is returned, * that resource is used instead. * - * @param uri a <code>URI</code> used to reference the requested + * @param uri a {@code URI} used to reference the requested * network resource - * @param rqstMethod a <code>String</code> representing the request + * @param rqstMethod a {@code String} representing the request * method * @param rqstHeaders - a Map from request header * field names to lists of field values representing * the current request headers - * @return a <code>CacheResponse</code> instance if available + * @return a {@code CacheResponse} instance if available * from cache, or null otherwise * @throws IOException if an I/O error occurs * @throws IllegalArgumentException if any one of the arguments is null @@ -148,11 +148,11 @@ * use to write the resource into the cache. If the resource is * not to be cached, then put must return null. * - * @param uri a <code>URI</code> used to reference the requested + * @param uri a {@code URI} used to reference the requested * network resource * @param conn - a URLConnection instance that is used to fetch * the response to be cached - * @return a <code>CacheRequest</code> for recording the + * @return a {@code CacheRequest} for recording the * response to be cached. Null return indicates that * the caller does not intend to cache the response. * @throws IOException if an I/O error occurs
--- a/jdk/src/share/classes/java/net/ServerSocket.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/ServerSocket.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, 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,7 +37,7 @@ * based on that request, and then possibly returns a result to the requester. * <p> * The actual work of the server socket is performed by an instance - * of the <code>SocketImpl</code> class. An application can + * of the {@code SocketImpl} class. An application can * change the socket factory that creates the socket * implementation to configure itself to create sockets * appropriate to the local firewall. @@ -89,31 +89,31 @@ /** * Creates a server socket, bound to the specified port. A port number - * of <code>0</code> means that the port number is automatically + * of {@code 0} means that the port number is automatically * allocated, typically from an ephemeral port range. This port * number can then be retrieved by calling {@link #getLocalPort getLocalPort}. * <p> * The maximum queue length for incoming connection indications (a - * request to connect) is set to <code>50</code>. If a connection + * request to connect) is set to {@code 50}. If a connection * indication arrives when the queue is full, the connection is refused. * <p> * If the application has specified a server socket factory, that - * factory's <code>createSocketImpl</code> method is called to create + * factory's {@code createSocketImpl} method is called to create * the actual socket implementation. Otherwise a "plain" socket is created. * <p> * If there is a security manager, - * its <code>checkListen</code> method is called - * with the <code>port</code> argument + * its {@code checkListen} method is called + * with the {@code port} argument * as its argument to ensure the operation is allowed. * This could result in a SecurityException. * * - * @param port the port number, or <code>0</code> to use a port + * @param port the port number, or {@code 0} to use a port * number that is automatically allocated. * * @exception IOException if an I/O error occurs when opening the socket. * @exception SecurityException - * if a security manager exists and its <code>checkListen</code> + * if a security manager exists and its {@code checkListen} * method doesn't allow the operation. * @exception IllegalArgumentException if the port parameter is outside * the specified range of valid port values, which is between @@ -131,42 +131,42 @@ /** * Creates a server socket and binds it to the specified local port * number, with the specified backlog. - * A port number of <code>0</code> means that the port number is + * A port number of {@code 0} means that the port number is * automatically allocated, typically from an ephemeral port range. * This port number can then be retrieved by calling * {@link #getLocalPort getLocalPort}. * <p> * The maximum queue length for incoming connection indications (a - * request to connect) is set to the <code>backlog</code> parameter. If + * request to connect) is set to the {@code backlog} parameter. If * a connection indication arrives when the queue is full, the * connection is refused. * <p> * If the application has specified a server socket factory, that - * factory's <code>createSocketImpl</code> method is called to create + * factory's {@code createSocketImpl} method is called to create * the actual socket implementation. Otherwise a "plain" socket is created. * <p> * If there is a security manager, - * its <code>checkListen</code> method is called - * with the <code>port</code> argument + * its {@code checkListen} method is called + * with the {@code port} argument * as its argument to ensure the operation is allowed. * This could result in a SecurityException. * - * The <code>backlog</code> argument is the requested maximum number of + * The {@code backlog} argument is the requested maximum number of * pending connections on the socket. Its exact semantics are implementation * specific. In particular, an implementation may impose a maximum length * or may choose to ignore the parameter altogther. The value provided - * should be greater than <code>0</code>. If it is less than or equal to - * <code>0</code>, then an implementation specific default will be used. + * should be greater than {@code 0}. If it is less than or equal to + * {@code 0}, then an implementation specific default will be used. * <P> * - * @param port the port number, or <code>0</code> to use a port + * @param port the port number, or {@code 0} to use a port * number that is automatically allocated. * @param backlog requested maximum length of the queue of incoming * connections. * * @exception IOException if an I/O error occurs when opening the socket. * @exception SecurityException - * if a security manager exists and its <code>checkListen</code> + * if a security manager exists and its {@code checkListen} * method doesn't allow the operation. * @exception IllegalArgumentException if the port parameter is outside * the specified range of valid port values, which is between @@ -189,32 +189,32 @@ * If <i>bindAddr</i> is null, it will default accepting * connections on any/all local addresses. * The port must be between 0 and 65535, inclusive. - * A port number of <code>0</code> means that the port number is + * A port number of {@code 0} means that the port number is * automatically allocated, typically from an ephemeral port range. * This port number can then be retrieved by calling * {@link #getLocalPort getLocalPort}. * * <P>If there is a security manager, this method - * calls its <code>checkListen</code> method - * with the <code>port</code> argument + * calls its {@code checkListen} method + * with the {@code port} argument * as its argument to ensure the operation is allowed. * This could result in a SecurityException. * - * The <code>backlog</code> argument is the requested maximum number of + * The {@code backlog} argument is the requested maximum number of * pending connections on the socket. Its exact semantics are implementation * specific. In particular, an implementation may impose a maximum length * or may choose to ignore the parameter altogther. The value provided - * should be greater than <code>0</code>. If it is less than or equal to - * <code>0</code>, then an implementation specific default will be used. + * should be greater than {@code 0}. If it is less than or equal to + * {@code 0}, then an implementation specific default will be used. * <P> - * @param port the port number, or <code>0</code> to use a port + * @param port the port number, or {@code 0} to use a port * number that is automatically allocated. * @param backlog requested maximum length of the queue of incoming * connections. * @param bindAddr the local InetAddress the server will bind to * * @throws SecurityException if a security manager exists and - * its <code>checkListen</code> method doesn't allow the operation. + * its {@code checkListen} method doesn't allow the operation. * * @throws IOException if an I/O error occurs when opening the socket. * @exception IllegalArgumentException if the port parameter is outside @@ -245,10 +245,10 @@ } /** - * Get the <code>SocketImpl</code> attached to this socket, creating + * Get the {@code SocketImpl} attached to this socket, creating * it if necessary. * - * @return the <code>SocketImpl</code> attached to that ServerSocket. + * @return the {@code SocketImpl} attached to that ServerSocket. * @throws SocketException if creation fails. * @since 1.4 */ @@ -310,17 +310,17 @@ /** * - * Binds the <code>ServerSocket</code> to a specific address + * Binds the {@code ServerSocket} to a specific address * (IP address and port number). * <p> - * If the address is <code>null</code>, then the system will pick up + * If the address is {@code null}, then the system will pick up * an ephemeral port and a valid local address to bind the socket. * <p> * @param endpoint The IP address and port number to bind to. * @throws IOException if the bind operation fails, or if the socket * is already bound. - * @throws SecurityException if a <code>SecurityManager</code> is present and - * its <code>checkListen</code> method doesn't allow the operation. + * @throws SecurityException if a {@code SecurityManager} is present and + * its {@code checkListen} method doesn't allow the operation. * @throws IllegalArgumentException if endpoint is a * SocketAddress subclass not supported by this socket * @since 1.4 @@ -331,25 +331,25 @@ /** * - * Binds the <code>ServerSocket</code> to a specific address + * Binds the {@code ServerSocket} to a specific address * (IP address and port number). * <p> - * If the address is <code>null</code>, then the system will pick up + * If the address is {@code null}, then the system will pick up * an ephemeral port and a valid local address to bind the socket. * <P> - * The <code>backlog</code> argument is the requested maximum number of + * The {@code backlog} argument is the requested maximum number of * pending connections on the socket. Its exact semantics are implementation * specific. In particular, an implementation may impose a maximum length * or may choose to ignore the parameter altogther. The value provided - * should be greater than <code>0</code>. If it is less than or equal to - * <code>0</code>, then an implementation specific default will be used. + * should be greater than {@code 0}. If it is less than or equal to + * {@code 0}, then an implementation specific default will be used. * @param endpoint The IP address and port number to bind to. * @param backlog requested maximum length of the queue of * incoming connections. * @throws IOException if the bind operation fails, or if the socket * is already bound. - * @throws SecurityException if a <code>SecurityManager</code> is present and - * its <code>checkListen</code> method doesn't allow the operation. + * @throws SecurityException if a {@code SecurityManager} is present and + * its {@code checkListen} method doesn't allow the operation. * @throws IllegalArgumentException if endpoint is a * SocketAddress subclass not supported by this socket * @since 1.4 @@ -480,18 +480,18 @@ * Listens for a connection to be made to this socket and accepts * it. The method blocks until a connection is made. * - * <p>A new Socket <code>s</code> is created and, if there + * <p>A new Socket {@code s} is created and, if there * is a security manager, - * the security manager's <code>checkAccept</code> method is called - * with <code>s.getInetAddress().getHostAddress()</code> and - * <code>s.getPort()</code> + * the security manager's {@code checkAccept} method is called + * with {@code s.getInetAddress().getHostAddress()} and + * {@code s.getPort()} * as its arguments to ensure the operation is allowed. * This could result in a SecurityException. * * @exception IOException if an I/O error occurs when waiting for a * connection. * @exception SecurityException if a security manager exists and its - * <code>checkAccept</code> method doesn't allow the operation. + * {@code checkAccept} method doesn't allow the operation. * @exception SocketTimeoutException if a timeout was previously set with setSoTimeout and * the timeout has been reached. * @exception java.nio.channels.IllegalBlockingModeException @@ -597,7 +597,7 @@ * method. * * @return the server-socket channel associated with this socket, - * or <tt>null</tt> if this socket was not created + * or {@code null} if this socket was not created * for a channel * * @since 1.4 @@ -678,18 +678,18 @@ * <p> * When a TCP connection is closed the connection may remain * in a timeout state for a period of time after the connection - * is closed (typically known as the <tt>TIME_WAIT</tt> state - * or <tt>2MSL</tt> wait state). + * is closed (typically known as the {@code TIME_WAIT} state + * or {@code 2MSL} wait state). * For applications using a well known socket address or port * it may not be possible to bind a socket to the required - * <tt>SocketAddress</tt> if there is a connection in the + * {@code SocketAddress} if there is a connection in the * timeout state involving the socket address or port. * <p> * Enabling {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR} prior to * binding the socket using {@link #bind(SocketAddress)} allows the socket * to be bound even though a previous connection is in a timeout state. * <p> - * When a <tt>ServerSocket</tt> is created the initial setting + * When a {@code ServerSocket} is created the initial setting * of {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR} is not defined. * Applications can use {@link #getReuseAddress()} to determine the initial * setting of {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR}. @@ -717,7 +717,7 @@ /** * Tests if {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR} is enabled. * - * @return a <code>boolean</code> indicating whether or not + * @return a {@code boolean} indicating whether or not * {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR} is enabled. * @exception SocketException if there is an error * in the underlying protocol, such as a TCP error. @@ -732,7 +732,7 @@ /** * Returns the implementation address and implementation port of - * this socket as a <code>String</code>. + * this socket as a {@code String}. * <p> * If there is a security manager set, its {@code checkConnect} method is * called with the local address and {@code -1} as its arguments to see @@ -773,14 +773,14 @@ * application. The factory can be specified only once. * <p> * When an application creates a new server socket, the socket - * implementation factory's <code>createSocketImpl</code> method is + * implementation factory's {@code createSocketImpl} method is * called to create the actual socket implementation. * <p> - * Passing <code>null</code> to the method is a no-op unless the factory + * Passing {@code null} to the method is a no-op unless the factory * was already set. * <p> * If there is a security manager, this method first calls - * the security manager's <code>checkSetFactory</code> method + * the security manager's {@code checkSetFactory} method * to ensure the operation is allowed. * This could result in a SecurityException. * @@ -789,7 +789,7 @@ * socket factory. * @exception SocketException if the factory has already been defined. * @exception SecurityException if a security manager exists and its - * <code>checkSetFactory</code> method doesn't allow the operation. + * {@code checkSetFactory} method doesn't allow the operation. * @see java.net.SocketImplFactory#createSocketImpl() * @see SecurityManager#checkSetFactory */ @@ -807,7 +807,7 @@ /** * Sets a default proposed value for the * {@link SocketOptions#SO_RCVBUF SO_RCVBUF} option for sockets - * accepted from this <tt>ServerSocket</tt>. The value actually set + * accepted from this {@code ServerSocket}. The value actually set * in the accepted socket must be determined by calling * {@link Socket#getReceiveBufferSize()} after the socket * is returned by {@link #accept()}. @@ -851,13 +851,13 @@ /** * Gets the value of the {@link SocketOptions#SO_RCVBUF SO_RCVBUF} option - * for this <tt>ServerSocket</tt>, that is the proposed buffer size that - * will be used for Sockets accepted from this <tt>ServerSocket</tt>. + * for this {@code ServerSocket}, that is the proposed buffer size that + * will be used for Sockets accepted from this {@code ServerSocket}. * * <p>Note, the value actually set in the accepted socket is determined by * calling {@link Socket#getReceiveBufferSize()}. * @return the value of the {@link SocketOptions#SO_RCVBUF SO_RCVBUF} - * option for this <tt>Socket</tt>. + * option for this {@code Socket}. * @exception SocketException if there is an error * in the underlying protocol, such as a TCP error. * @see #setReceiveBufferSize(int) @@ -891,24 +891,24 @@ * compared, with larger values indicating stronger preferences. If the * application prefers short connection time over both low latency and high * bandwidth, for example, then it could invoke this method with the values - * <tt>(1, 0, 0)</tt>. If the application prefers high bandwidth above low + * {@code (1, 0, 0)}. If the application prefers high bandwidth above low * latency, and low latency above short connection time, then it could - * invoke this method with the values <tt>(0, 1, 2)</tt>. + * invoke this method with the values {@code (0, 1, 2)}. * * <p> Invoking this method after this socket has been bound * will have no effect. This implies that in order to use this capability * requires the socket to be created with the no-argument constructor. * * @param connectionTime - * An <tt>int</tt> expressing the relative importance of a short + * An {@code int} expressing the relative importance of a short * connection time * * @param latency - * An <tt>int</tt> expressing the relative importance of low + * An {@code int} expressing the relative importance of low * latency * * @param bandwidth - * An <tt>int</tt> expressing the relative importance of high + * An {@code int} expressing the relative importance of high * bandwidth * * @since 1.5
--- a/jdk/src/share/classes/java/net/Socket.java Tue Aug 06 10:03:25 2013 -0700 +++ b/jdk/src/share/classes/java/net/Socket.java Wed Jul 05 19:06:33 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, 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 @@ -39,7 +39,7 @@ * between two machines. * <p> * The actual work of the socket is performed by an instance of the - * <code>SocketImpl</code> class. An application, by changing + * {@code SocketImpl} class. An application, by changing * the socket factory that creates the socket implementation, * can configure itself to create sockets appropriate to the local * firewall. @@ -88,14 +88,14 @@ * Creates an unconnected socket, specifying the type of proxy, if any, * that should be used regardless of any other settings. * <P> - * If there is a security manager, its <code>checkConnect</code> method + * If there is a security manager, its {@code checkConnect} method * is called with the proxy host address and port number * as its arguments. This could result in a SecurityException. * <P> * Examples: - * <UL> <LI><code>Socket s = new Socket(Proxy.NO_PROXY);</code> will create + * <UL> <LI>{@code Socket s = new Socket(Proxy.NO_PROXY);} will create * a plain socket ignoring any other proxy configuration.</LI> - * <LI><code>Socket s = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("socks.mydom.com", 1080)));</code> + * <LI>{@code Socket s = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("socks.mydom.com", 1080)));} * will create a socket connecting through the specified SOCKS proxy * server.</LI> * </UL> @@ -103,7 +103,7 @@ * @param proxy a {@link java.net.Proxy Proxy} object specifying what kind * of proxying should be used. * @throws IllegalArgumentException if the proxy is of an invalid type - * or <code>null</code>. + * or {@code null}. * @throws SecurityException if a security manager is present and * permission to connect to the proxy is * denied. @@ -173,21 +173,22 @@ * Creates a stream socket and connects it to the specified port * number on the named host. * <p> - * If the specified host is <tt>null</tt> it is the equivalent of - * specifying the address as <tt>{@link java.net.InetAddress#getByName InetAddress.getByName}(null)</tt>. + * If the specified host is {@code null} it is the equivalent of + * specifying the address as + * {@link java.net.InetAddress#getByName InetAddress.getByName}{@code (null)}. * In other words, it is equivalent to specifying an address of the * loopback interface. </p> * <p> * If the application has specified a server socket factory, that - * factory's <code>createSocketImpl</code> method is called to create + * factory's {@code createSocketImpl} method is called to create * the actual socket implementation. Otherwise a "plain" socket is created. * <p> * If there is a security manager, its - * <code>checkConnect</code> method is called - * with the host address and <code>port</code> + * {@code checkConnect} method is called + * with the host address and {@code port} * as its arguments. This could result in a SecurityException. * - * @param host the host name, or <code>null</code> for the loopback address. + * @param host the host name, or {@code null} for the loopback address. * @param port the port number. * * @exception UnknownHostException if the IP address of @@ -195,7 +196,7 @@ * * @exception IOException if an I/O error occurs when creating the socket. * @exception SecurityException if a security manager exists and its - * <code>checkConnect</code> method doesn't allow the operation. + * {@code checkConnect} method doesn't allow the operation. * @exception IllegalArgumentException if the port parameter is outside * the specified range of valid port values, which is between * 0 and 65535, inclusive. @@ -217,23 +218,23 @@ * number at the specified IP address. * <p> * If the application has specified a socket factory, that factory's - * <code>createSocketImpl</code> method is called to create the + * {@code createSocketImpl} method is called to create the * actual socket implementation. Otherwise a "plain" socket is created. * <p> * If there is a security manager, its - * <code>checkConnect</code> method is called - * with the host address and <code>port</code> + * {@code checkConnect} method is called + * with the host address and {@code port} * as its arguments. This could result in a SecurityException. * * @param address the IP address. * @param port the port number. * @exception IOException if an I/O error occurs when creating the socket. * @exception SecurityException if a security manager exists and its - * <code>checkConnect</code> method doesn't allow the operation. + * {@code checkConnect} method doesn't allow the operation. * @exception IllegalArgumentException if the port parameter is outside * the specified range of valid port values, which is between * 0 and 65535, inclusive. - * @exception NullPointerException if <code>address</code> is null. + * @exception NullPointerException if {@code address} is null. * @see java.net.Socket#setSocketImplFactory(java.net.SocketImplFactory) * @see java.net.SocketImpl * @see java.net.SocketImplFactory#createSocketImpl() @@ -249,28 +250,29 @@ * the specified remote port. The Socket will also bind() to the local * address and port supplied. * <p> - * If the specified host is <tt>null</tt> it is the equivalent of - * specifying the address as <tt>{@link java.net.InetAddress#getByName InetAddress.getByName}(null)</tt>. + * If the specified host is {@code null} it is the equivalent of + * specifying the address as + * {@link java.net.InetAddress#getByName InetAddress.getByName}{@code (null)}. * In other words, it is equivalent to specifying an address of the * loopback interface. </p> * <p> - * A local port number of <code>zero</code> will let the system pick up a - * free port in the <code>bind</code> operation.</p> + * A local port number of {@code zero} will let the system pick up a + * free port in the {@code bind} operation.</p> * <p> * If there is a security manager, its - * <code>checkConnect</code> method is called - * with the host address and <code>port</code> + * {@code checkConnect} method is called + * with the host address and {@code port} * as its arguments. This could result in a SecurityException. * - * @param host the name of the remote host, or <code>null</code> for the loopback address. + * @param host the name of the remote host, or {@code null} for the loopback address. * @param port the remote port * @param localAddr the local address the socket is bound to, or - * <code>null</code> for the <code>anyLocal</code> address. + * {@code null} for the {@code anyLocal} address. * @param localPort the local port the socket is bound to, or - * <code>zero</code> for a system selected free port. + * {@code zero} for a system selected free port. * @exception IOException if an I/O error occurs when creating the socket. * @exception SecurityException if a security manager exists and its - * <code>checkConnect</code> method doesn't allow the operation. + * {@code checkConnect} method doesn't allow the operation. * @exception IllegalArgumentException if the port parameter or localPort * parameter is outside the specified range of valid port values, * which is between 0 and 65535, inclusive. @@ -289,30 +291,31 @@ * the specified remote port. The Socket will also bind() to the local * address and port supplied. * <p> - * If the specified local address is <tt>null</tt> it is the equivalent of - * specifying the address as the AnyLocal address (see <tt>{@link java.net.InetAddress#isAnyLocalAddress InetAddress.isAnyLocalAddress}()</tt>). + * If the specified local address is {@code null} it is the equivalent of + * specifying the address as the AnyLocal address + * (see {@link java.net.InetAddress#isAnyLocalAddress InetAddress.isAnyLocalAddress}{@code ()}). * <p> - * A local port number of <code>zero</code> will let the system pick up a - * free port in the <code>bind</code> operation.</p> + * A local port number of {@code zero} will let the system pick up a + * free port in the {@code bind} operation.</p> * <p> * If there is a security manager, its - * <code>checkConnect</code> method is called - * with the host address and <code>port</code> + * {@code checkConnect} method is called + * with the host address and {@code port} * as its arguments. This could result in a SecurityException. * * @param address the remote address * @param port the remote port * @param localAddr the local address the socket is bound to, or - * <code>null</code> for the <code>anyLocal</code> address. + * {@code null} for the {@code anyLocal} address. * @param localPort the