--- a/.hgtags Wed Jun 11 10:53:27 2014 +0400
+++ b/.hgtags Wed Jun 18 13:14:15 2014 -0700
@@ -259,3 +259,5 @@
97932f6ad950ae5a73a9da5c96e6e58503ff646b jdk9-b14
74eb0778e4f2dbff6628e718378449fba27c4265 jdk9-b15
4a09f5d30be844ac6f714bdb0f63d8c3c08b9a98 jdk9-b16
+410bccbded9e9cce80f1e13ad221e37ae97a3986 jdk9-b17
+c5495e25c7258ab5f96a1ae14610887d76d2be63 jdk9-b18
--- a/.hgtags-top-repo Wed Jun 11 10:53:27 2014 +0400
+++ b/.hgtags-top-repo Wed Jun 18 13:14:15 2014 -0700
@@ -259,3 +259,5 @@
4e3aa9723e9972623e3dafc321b368e7db7e9b3b jdk9-b14
b114474fb25af4e73cb7219f7c04bd8994da03a5 jdk9-b15
cf22a728521f91a4692b433d39d730a0a1b23155 jdk9-b16
+24152ee0ee1abef54a8bab04c099261dba7bcca5 jdk9-b17
+65abab59f783fcf02ff8e133431c252f9e5f07d5 jdk9-b18
--- a/corba/.hgtags Wed Jun 11 10:53:27 2014 +0400
+++ b/corba/.hgtags Wed Jun 18 13:14:15 2014 -0700
@@ -259,3 +259,5 @@
a2b82f863ba95a596da555a4c1b871c404863e7e jdk9-b14
e54022d0dd92106fff7f7fe670010cd7e6517ee3 jdk9-b15
422ef9d29d84f571453f015c4cb8713c3af70ee4 jdk9-b16
+4c75c2ca7cf3e0618315879acf17f42c8fcd0c09 jdk9-b17
+77565aaaa2bb814e94817e92d680168052a25395 jdk9-b18
--- a/hotspot/.hgtags Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/.hgtags Wed Jun 18 13:14:15 2014 -0700
@@ -419,3 +419,5 @@
bd333491bb6c012d7b606939406d0fa9a5ac7ffd jdk9-b14
170f6d733d7aec062f743a6b8c1cce940a7a984a jdk9-b15
b14e7c0b7d3ec04127f565cda1d84122e205680c jdk9-b16
+14b656df31c2cb09c505921061e79977823de71a jdk9-b17
+871fd128548480095e0dc3fc34c422666baeec75 jdk9-b18
--- a/hotspot/make/bsd/makefiles/universal.gmk Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/make/bsd/makefiles/universal.gmk Wed Jun 18 13:14:15 2014 -0700
@@ -74,19 +74,21 @@
# Replace arch specific binaries with universal binaries
+# Do not touch jre/lib/{client,server}/libjsig.$(LIBRARY_SUFFIX)
+# That symbolic link belongs to the 'jdk' build.
export_universal:
$(RM) -r $(EXPORT_PATH)/jre/lib/{i386,amd64}
$(RM) -r $(JDK_IMAGE_DIR)/jre/lib/{i386,amd64}
- $(RM) $(JDK_IMAGE_DIR)/jre/lib/{client,server}/libjsig.$(LIBRARY_SUFFIX)
($(CD) $(EXPORT_PATH) && \
$(TAR) -cf - *) | \
($(CD) $(JDK_IMAGE_DIR) && $(TAR) -xpf -)
# Overlay universal binaries
+# Do not touch jre/lib/{client,server}/libjsig.$(LIBRARY_SUFFIX)
+# That symbolic link belongs to the 'jdk' build.
copy_universal:
$(RM) -r $(JDK_IMAGE_DIR)$(COPY_SUBDIR)/jre/lib/{i386,amd64}
- $(RM) $(JDK_IMAGE_DIR)$(COPY_SUBDIR)/jre/lib/{client,server}/libjsig.$(LIBRARY_SUFFIX)
($(CD) $(EXPORT_PATH)$(COPY_SUBDIR) && \
$(TAR) -cf - *) | \
($(CD) $(JDK_IMAGE_DIR)$(COPY_SUBDIR) && $(TAR) -xpf -)
--- a/hotspot/make/jprt.properties Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/make/jprt.properties Wed Jun 18 13:14:15 2014 -0700
@@ -47,10 +47,10 @@
# sparc etc.
# Define the Solaris platforms we want for the various releases
-jprt.my.solaris.sparcv9.jdk9=solaris_sparcv9_5.10
+jprt.my.solaris.sparcv9.jdk9=solaris_sparcv9_5.11
jprt.my.solaris.sparcv9=${jprt.my.solaris.sparcv9.${jprt.tools.default.release}}
-jprt.my.solaris.x64.jdk9=solaris_x64_5.10
+jprt.my.solaris.x64.jdk9=solaris_x64_5.11
jprt.my.solaris.x64=${jprt.my.solaris.x64.${jprt.tools.default.release}}
jprt.my.linux.i586.jdk9=linux_i586_2.6
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -4359,9 +4359,15 @@
Method* m = k->lookup_method(vmSymbols::finalize_method_name(),
vmSymbols::void_method_signature());
if (m != NULL && !m->is_empty_method()) {
- f = true;
+ f = true;
}
- assert(f == k->has_finalizer(), "inconsistent has_finalizer");
+
+ // Spec doesn't prevent agent from redefinition of empty finalizer.
+ // Despite the fact that it's generally bad idea and redefined finalizer
+ // will not work as expected we shouldn't abort vm in this case
+ if (!k->has_redefined_this_or_super()) {
+ assert(f == k->has_finalizer(), "inconsistent has_finalizer");
+ }
#endif
// Check if this klass supports the java.lang.Cloneable interface
--- a/hotspot/src/share/vm/classfile/javaClasses.hpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/classfile/javaClasses.hpp Wed Jun 18 13:14:15 2014 -0700
@@ -1181,7 +1181,7 @@
static oop target( oop site) { return site->obj_field( _target_offset); }
static void set_target( oop site, oop target) { site->obj_field_put( _target_offset, target); }
- static volatile oop target_volatile(oop site) { return site->obj_field_volatile( _target_offset); }
+ static volatile oop target_volatile(oop site) { return oop((oopDesc *)(site->obj_field_volatile(_target_offset))); }
static void set_target_volatile(oop site, oop target) { site->obj_field_put_volatile(_target_offset, target); }
// Testers
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -311,8 +311,7 @@
_cmsGen->refs_discovery_is_mt(), // mt discovery
(int) MAX2(ConcGCThreads, ParallelGCThreads), // mt discovery degree
_cmsGen->refs_discovery_is_atomic(), // discovery is not atomic
- &_is_alive_closure, // closure for liveness info
- false); // next field updates do not need write barrier
+ &_is_alive_closure); // closure for liveness info
// Initialize the _ref_processor field of CMSGen
_cmsGen->set_ref_processor(_ref_processor);
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -2246,12 +2246,9 @@
// degree of mt discovery
false,
// Reference discovery is not atomic
- &_is_alive_closure_cm,
+ &_is_alive_closure_cm);
// is alive closure
// (for efficiency/performance)
- true);
- // Setting next fields of discovered
- // lists requires a barrier.
// STW ref processor
_ref_processor_stw =
@@ -2266,12 +2263,9 @@
// degree of mt discovery
true,
// Reference discovery is atomic
- &_is_alive_closure_stw,
+ &_is_alive_closure_stw);
// is alive closure
// (for efficiency/performance)
- false);
- // Setting next fields of discovered
- // lists does not require a barrier.
}
size_t G1CollectedHeap::capacity() const {
--- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -1636,8 +1636,7 @@
refs_discovery_is_mt(), // mt discovery
(int) ParallelGCThreads, // mt discovery degree
refs_discovery_is_atomic(), // atomic_discovery
- NULL, // is_alive_non_header
- false); // write barrier for next field updates
+ NULL); // is_alive_non_header
}
}
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -854,8 +854,7 @@
true, // mt discovery
(int) ParallelGCThreads, // mt discovery degree
true, // atomic_discovery
- &_is_alive_closure, // non-header is alive closure
- false); // write barrier for next field updates
+ &_is_alive_closure); // non-header is alive closure
_counters = new CollectorCounters("PSParallelCompact", 1);
// Initialize static fields in ParCompactionManager.
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -864,8 +864,7 @@
true, // mt discovery
(int) ParallelGCThreads, // mt discovery degree
true, // atomic_discovery
- NULL, // header provides liveness info
- false); // next field updates do not need write barrier
+ NULL); // header provides liveness info
// Cache the cardtable
BarrierSet* bs = Universe::heap()->barrier_set();
--- a/hotspot/src/share/vm/memory/allocation.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/memory/allocation.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -563,6 +563,7 @@
_chunk = new (alloc_failmode, len) Chunk(len);
if (_chunk == NULL) {
+ _chunk = k; // restore the previous value of _chunk
return NULL;
}
if (k) k->set_next(_chunk); // Append new chunk to end of linked list
--- a/hotspot/src/share/vm/memory/metaspace.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/memory/metaspace.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -1423,6 +1423,17 @@
return (size_t)Atomic::add_ptr(-(intptr_t)v, &_capacity_until_GC);
}
+void MetaspaceGC::initialize() {
+ // Set the high-water mark to MaxMetapaceSize during VM initializaton since
+ // we can't do a GC during initialization.
+ _capacity_until_GC = MaxMetaspaceSize;
+}
+
+void MetaspaceGC::post_initialize() {
+ // Reset the high-water mark once the VM initialization is done.
+ _capacity_until_GC = MAX2(MetaspaceAux::committed_bytes(), MetaspaceSize);
+}
+
bool MetaspaceGC::can_expand(size_t word_size, bool is_class) {
// Check if the compressed class space is full.
if (is_class && Metaspace::using_class_space()) {
@@ -1443,21 +1454,13 @@
size_t MetaspaceGC::allowed_expansion() {
size_t committed_bytes = MetaspaceAux::committed_bytes();
+ size_t capacity_until_gc = capacity_until_GC();
+
+ assert(capacity_until_gc >= committed_bytes,
+ err_msg("capacity_until_gc: " SIZE_FORMAT " < committed_bytes: " SIZE_FORMAT,
+ capacity_until_gc, committed_bytes));
size_t left_until_max = MaxMetaspaceSize - committed_bytes;
-
- // Always grant expansion if we are initiating the JVM,
- // or if the GC_locker is preventing GCs.
- if (!is_init_completed() || GC_locker::is_active_and_needs_gc()) {
- return left_until_max / BytesPerWord;
- }
-
- size_t capacity_until_gc = capacity_until_GC();
-
- if (capacity_until_gc <= committed_bytes) {
- return 0;
- }
-
size_t left_until_GC = capacity_until_gc - committed_bytes;
size_t left_to_commit = MIN2(left_until_GC, left_until_max);
@@ -1469,7 +1472,15 @@
uint current_shrink_factor = _shrink_factor;
_shrink_factor = 0;
- const size_t used_after_gc = MetaspaceAux::capacity_bytes();
+ // Using committed_bytes() for used_after_gc is an overestimation, since the
+ // chunk free lists are included in committed_bytes() and the memory in an
+ // un-fragmented chunk free list is available for future allocations.
+ // However, if the chunk free lists becomes fragmented, then the memory may
+ // not be available for future allocations and the memory is therefore "in use".
+ // Including the chunk free lists in the definition of "in use" is therefore
+ // necessary. Not including the chunk free lists can cause capacity_until_GC to
+ // shrink below committed_bytes() and this has caused serious bugs in the past.
+ const size_t used_after_gc = MetaspaceAux::committed_bytes();
const size_t capacity_until_GC = MetaspaceGC::capacity_until_GC();
const double minimum_free_percentage = MinMetaspaceFreeRatio / 100.0;
@@ -3094,6 +3105,8 @@
}
void Metaspace::global_initialize() {
+ MetaspaceGC::initialize();
+
// Initialize the alignment for shared spaces.
int max_alignment = os::vm_allocation_granularity();
size_t cds_total = 0;
@@ -3201,10 +3214,13 @@
}
}
- MetaspaceGC::initialize();
_tracer = new MetaspaceTracer();
}
+void Metaspace::post_initialize() {
+ MetaspaceGC::post_initialize();
+}
+
Metachunk* Metaspace::get_initialization_chunk(MetadataType mdtype,
size_t chunk_word_size,
size_t chunk_bunch) {
--- a/hotspot/src/share/vm/memory/metaspace.hpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/memory/metaspace.hpp Wed Jun 18 13:14:15 2014 -0700
@@ -208,6 +208,7 @@
static void ergo_initialize();
static void global_initialize();
+ static void post_initialize();
static size_t first_chunk_word_size() { return _first_chunk_word_size; }
static size_t first_class_chunk_word_size() { return _first_class_chunk_word_size; }
@@ -398,7 +399,8 @@
public:
- static void initialize() { _capacity_until_GC = MetaspaceSize; }
+ static void initialize();
+ static void post_initialize();
static size_t capacity_until_GC();
static size_t inc_capacity_until_GC(size_t v);
--- a/hotspot/src/share/vm/memory/referenceProcessor.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -96,12 +96,10 @@
bool mt_discovery,
uint mt_discovery_degree,
bool atomic_discovery,
- BoolObjectClosure* is_alive_non_header,
- bool discovered_list_needs_post_barrier) :
+ BoolObjectClosure* is_alive_non_header) :
_discovering_refs(false),
_enqueuing_is_done(false),
_is_alive_non_header(is_alive_non_header),
- _discovered_list_needs_post_barrier(discovered_list_needs_post_barrier),
_processing_is_mt(mt_processing),
_next_id(0)
{
@@ -340,10 +338,18 @@
// (java.lang.ref.Reference.discovered), self-loop their "next" field
// thus distinguishing them from active References, then
// prepend them to the pending list.
+ //
+ // The Java threads will see the Reference objects linked together through
+ // the discovered field. Instead of trying to do the write barrier updates
+ // in all places in the reference processor where we manipulate the discovered
+ // field we make sure to do the barrier here where we anyway iterate through
+ // all linked Reference objects. Note that it is important to not dirty any
+ // cards during reference processing since this will cause card table
+ // verification to fail for G1.
+ //
// BKWRD COMPATIBILITY NOTE: For older JDKs (prior to the fix for 4956777),
// the "next" field is used to chain the pending list, not the discovered
// field.
-
if (TraceReferenceGC && PrintGCDetails) {
gclog_or_tty->print_cr("ReferenceProcessor::enqueue_discovered_reflist list "
INTPTR_FORMAT, (address)refs_list.head());
@@ -365,15 +371,15 @@
assert(java_lang_ref_Reference::next(obj) == NULL,
"Reference not active; should not be discovered");
// Self-loop next, so as to make Ref not active.
- // Post-barrier not needed when looping to self.
java_lang_ref_Reference::set_next_raw(obj, obj);
- if (next_d == obj) { // obj is last
+ if (next_d != obj) {
+ oopDesc::bs()->write_ref_field(java_lang_ref_Reference::discovered_addr(obj), next_d);
+ } else {
+ // This is the last object.
// Swap refs_list into pending_list_addr and
// set obj's discovered to what we read from pending_list_addr.
oop old = oopDesc::atomic_exchange_oop(refs_list.head(), pending_list_addr);
- // Need post-barrier on pending_list_addr above;
- // see special post-barrier code at the end of
- // enqueue_discovered_reflists() further below.
+ // Need post-barrier on pending_list_addr. See enqueue_discovered_ref_helper() above.
java_lang_ref_Reference::set_discovered_raw(obj, old); // old may be NULL
oopDesc::bs()->write_ref_field(java_lang_ref_Reference::discovered_addr(obj), old);
}
@@ -496,20 +502,15 @@
// pre-barrier here because we know the Reference has already been found/marked,
// that's how it ended up in the discovered list in the first place.
oop_store_raw(_prev_next, new_next);
- if (_discovered_list_needs_post_barrier && _prev_next != _refs_list.adr_head()) {
- // Needs post-barrier and this is not the list head (which is not on the heap)
- oopDesc::bs()->write_ref_field(_prev_next, new_next);
- }
NOT_PRODUCT(_removed++);
_refs_list.dec_length(1);
}
// Make the Reference object active again.
void DiscoveredListIterator::make_active() {
- // For G1 we don't want to use set_next - it
- // will dirty the card for the next field of
- // the reference object and will fail
- // CT verification.
+ // The pre barrier for G1 is probably just needed for the old
+ // reference processing behavior. Should we guard this with
+ // ReferenceProcessor::pending_list_uses_discovered_field() ?
if (UseG1GC) {
HeapWord* next_addr = java_lang_ref_Reference::next_addr(_ref);
if (UseCompressedOops) {
@@ -517,10 +518,8 @@
} else {
oopDesc::bs()->write_ref_field_pre((oop*)next_addr, NULL);
}
- java_lang_ref_Reference::set_next_raw(_ref, NULL);
- } else {
- java_lang_ref_Reference::set_next(_ref, NULL);
}
+ java_lang_ref_Reference::set_next_raw(_ref, NULL);
}
void DiscoveredListIterator::clear_referent() {
@@ -546,7 +545,7 @@
OopClosure* keep_alive,
VoidClosure* complete_gc) {
assert(policy != NULL, "Must have a non-NULL policy");
- DiscoveredListIterator iter(refs_list, keep_alive, is_alive, _discovered_list_needs_post_barrier);
+ DiscoveredListIterator iter(refs_list, keep_alive, is_alive);
// Decide which softly reachable refs should be kept alive.
while (iter.has_next()) {
iter.load_ptrs(DEBUG_ONLY(!discovery_is_atomic() /* allow_null_referent */));
@@ -586,7 +585,7 @@
BoolObjectClosure* is_alive,
OopClosure* keep_alive) {
assert(discovery_is_atomic(), "Error");
- DiscoveredListIterator iter(refs_list, keep_alive, is_alive, _discovered_list_needs_post_barrier);
+ DiscoveredListIterator iter(refs_list, keep_alive, is_alive);
while (iter.has_next()) {
iter.load_ptrs(DEBUG_ONLY(false /* allow_null_referent */));
DEBUG_ONLY(oop next = java_lang_ref_Reference::next(iter.obj());)
@@ -623,7 +622,7 @@
OopClosure* keep_alive,
VoidClosure* complete_gc) {
assert(!discovery_is_atomic(), "Error");
- DiscoveredListIterator iter(refs_list, keep_alive, is_alive, _discovered_list_needs_post_barrier);
+ DiscoveredListIterator iter(refs_list, keep_alive, is_alive);
while (iter.has_next()) {
iter.load_ptrs(DEBUG_ONLY(true /* allow_null_referent */));
HeapWord* next_addr = java_lang_ref_Reference::next_addr(iter.obj());
@@ -666,7 +665,7 @@
OopClosure* keep_alive,
VoidClosure* complete_gc) {
ResourceMark rm;
- DiscoveredListIterator iter(refs_list, keep_alive, is_alive, _discovered_list_needs_post_barrier);
+ DiscoveredListIterator iter(refs_list, keep_alive, is_alive);
while (iter.has_next()) {
iter.update_discovered();
iter.load_ptrs(DEBUG_ONLY(false /* allow_null_referent */));
@@ -782,13 +781,6 @@
bool _clear_referent;
};
-void ReferenceProcessor::set_discovered(oop ref, oop value) {
- java_lang_ref_Reference::set_discovered_raw(ref, value);
- if (_discovered_list_needs_post_barrier) {
- oopDesc::bs()->write_ref_field(java_lang_ref_Reference::discovered_addr(ref), value);
- }
-}
-
// Balances reference queues.
// Move entries from all queues[0, 1, ..., _max_num_q-1] to
// queues[0, 1, ..., _num_q-1] because only the first _num_q
@@ -846,9 +838,9 @@
// Add the chain to the to list.
if (ref_lists[to_idx].head() == NULL) {
// to list is empty. Make a loop at the end.
- set_discovered(move_tail, move_tail);
+ java_lang_ref_Reference::set_discovered_raw(move_tail, move_tail);
} else {
- set_discovered(move_tail, ref_lists[to_idx].head());
+ java_lang_ref_Reference::set_discovered_raw(move_tail, ref_lists[to_idx].head());
}
ref_lists[to_idx].set_head(move_head);
ref_lists[to_idx].inc_length(refs_to_move);
@@ -982,7 +974,7 @@
void ReferenceProcessor::clean_up_discovered_reflist(DiscoveredList& refs_list) {
assert(!discovery_is_atomic(), "Else why call this method?");
- DiscoveredListIterator iter(refs_list, NULL, NULL, _discovered_list_needs_post_barrier);
+ DiscoveredListIterator iter(refs_list, NULL, NULL);
while (iter.has_next()) {
iter.load_ptrs(DEBUG_ONLY(true /* allow_null_referent */));
oop next = java_lang_ref_Reference::next(iter.obj());
@@ -1071,16 +1063,6 @@
// The last ref must have its discovered field pointing to itself.
oop next_discovered = (current_head != NULL) ? current_head : obj;
- // Note: In the case of G1, this specific pre-barrier is strictly
- // not necessary because the only case we are interested in
- // here is when *discovered_addr is NULL (see the CAS further below),
- // so this will expand to nothing. As a result, we have manually
- // elided this out for G1, but left in the test for some future
- // collector that might have need for a pre-barrier here, e.g.:-
- // oopDesc::bs()->write_ref_field_pre((oop* or narrowOop*)discovered_addr, next_discovered);
- assert(!_discovered_list_needs_post_barrier || UseG1GC,
- "Need to check non-G1 collector: "
- "may need a pre-write-barrier for CAS from NULL below");
oop retest = oopDesc::atomic_compare_exchange_oop(next_discovered, discovered_addr,
NULL);
if (retest == NULL) {
@@ -1089,9 +1071,6 @@
// is necessary.
refs_list.set_head(obj);
refs_list.inc_length(1);
- if (_discovered_list_needs_post_barrier) {
- oopDesc::bs()->write_ref_field((void*)discovered_addr, next_discovered);
- }
if (TraceReferenceGC) {
gclog_or_tty->print_cr("Discovered reference (mt) (" INTPTR_FORMAT ": %s)",
@@ -1242,24 +1221,14 @@
if (_discovery_is_mt) {
add_to_discovered_list_mt(*list, obj, discovered_addr);
} else {
- // If "_discovered_list_needs_post_barrier", we do write barriers when
- // updating the discovered reference list. Otherwise, we do a raw store
- // here: the field will be visited later when processing the discovered
- // references.
+ // We do a raw store here: the field will be visited later when processing
+ // the discovered references.
oop current_head = list->head();
// The last ref must have its discovered field pointing to itself.
oop next_discovered = (current_head != NULL) ? current_head : obj;
- // As in the case further above, since we are over-writing a NULL
- // pre-value, we can safely elide the pre-barrier here for the case of G1.
- // e.g.:- oopDesc::bs()->write_ref_field_pre((oop* or narrowOop*)discovered_addr, next_discovered);
assert(discovered == NULL, "control point invariant");
- assert(!_discovered_list_needs_post_barrier || UseG1GC,
- "For non-G1 collector, may need a pre-write-barrier for CAS from NULL below");
oop_store_raw(discovered_addr, next_discovered);
- if (_discovered_list_needs_post_barrier) {
- oopDesc::bs()->write_ref_field((void*)discovered_addr, next_discovered);
- }
list->set_head(obj);
list->inc_length(1);
@@ -1353,7 +1322,7 @@
OopClosure* keep_alive,
VoidClosure* complete_gc,
YieldClosure* yield) {
- DiscoveredListIterator iter(refs_list, keep_alive, is_alive, _discovered_list_needs_post_barrier);
+ DiscoveredListIterator iter(refs_list, keep_alive, is_alive);
while (iter.has_next()) {
iter.load_ptrs(DEBUG_ONLY(true /* allow_null_referent */));
oop obj = iter.obj();
--- a/hotspot/src/share/vm/memory/referenceProcessor.hpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/memory/referenceProcessor.hpp Wed Jun 18 13:14:15 2014 -0700
@@ -99,7 +99,6 @@
oop _referent;
OopClosure* _keep_alive;
BoolObjectClosure* _is_alive;
- bool _discovered_list_needs_post_barrier;
DEBUG_ONLY(
oop _first_seen; // cyclic linked list check
@@ -113,8 +112,7 @@
public:
inline DiscoveredListIterator(DiscoveredList& refs_list,
OopClosure* keep_alive,
- BoolObjectClosure* is_alive,
- bool discovered_list_needs_post_barrier = false):
+ BoolObjectClosure* is_alive):
_refs_list(refs_list),
_prev_next(refs_list.adr_head()),
_prev(NULL),
@@ -128,8 +126,7 @@
#endif
_next(NULL),
_keep_alive(keep_alive),
- _is_alive(is_alive),
- _discovered_list_needs_post_barrier(discovered_list_needs_post_barrier)
+ _is_alive(is_alive)
{ }
// End Of List.
@@ -230,14 +227,6 @@
// other collectors in configuration
bool _discovery_is_mt; // true if reference discovery is MT.
- // If true, setting "next" field of a discovered refs list requires
- // write post barrier. (Must be true if used in a collector in which
- // elements of a discovered list may be moved during discovery: for
- // example, a collector like Garbage-First that moves objects during a
- // long-term concurrent marking phase that does weak reference
- // discovery.)
- bool _discovered_list_needs_post_barrier;
-
bool _enqueuing_is_done; // true if all weak references enqueued
bool _processing_is_mt; // true during phases when
// reference processing is MT.
@@ -382,11 +371,6 @@
void enqueue_discovered_reflists(HeapWord* pending_list_addr, AbstractRefProcTaskExecutor* task_executor);
protected:
- // Set the 'discovered' field of the given reference to
- // the given value - emitting post barriers depending upon
- // the value of _discovered_list_needs_post_barrier.
- void set_discovered(oop ref, oop value);
-
// "Preclean" the given discovered reference list
// by removing references with strongly reachable referents.
// Currently used in support of CMS only.
@@ -427,8 +411,7 @@
bool mt_processing = false, uint mt_processing_degree = 1,
bool mt_discovery = false, uint mt_discovery_degree = 1,
bool atomic_discovery = true,
- BoolObjectClosure* is_alive_non_header = NULL,
- bool discovered_list_needs_post_barrier = false);
+ BoolObjectClosure* is_alive_non_header = NULL);
// RefDiscoveryPolicy values
enum DiscoveryPolicy {
--- a/hotspot/src/share/vm/oops/instanceKlass.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/oops/instanceKlass.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -1501,6 +1501,21 @@
return NULL;
}
+#ifdef ASSERT
+// search through class hierarchy and return true if this class or
+// one of the superclasses was redefined
+bool InstanceKlass::has_redefined_this_or_super() const {
+ const InstanceKlass* klass = this;
+ while (klass != NULL) {
+ if (klass->has_been_redefined()) {
+ return true;
+ }
+ klass = InstanceKlass::cast(klass->super());
+ }
+ return false;
+}
+#endif
+
// lookup a method in the default methods list then in all transitive interfaces
// Do NOT return private or static methods
Method* InstanceKlass::lookup_method_in_ordered_interfaces(Symbol* name,
--- a/hotspot/src/share/vm/oops/instanceKlass.hpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/oops/instanceKlass.hpp Wed Jun 18 13:14:15 2014 -0700
@@ -754,6 +754,11 @@
bool implements_interface(Klass* k) const;
bool is_same_or_direct_interface(Klass* k) const;
+#ifdef ASSERT
+ // check whether this class or one of its superclasses was redefined
+ bool has_redefined_this_or_super() const;
+#endif
+
// Access to the implementor of an interface.
Klass* implementor() const
{
@@ -811,8 +816,8 @@
// Casting from Klass*
static InstanceKlass* cast(Klass* k) {
- assert(k->is_klass(), "must be");
- assert(k->oop_is_instance(), "cast to InstanceKlass");
+ assert(k == NULL || k->is_klass(), "must be");
+ assert(k == NULL || k->oop_is_instance(), "cast to InstanceKlass");
return (InstanceKlass*) k;
}
--- a/hotspot/src/share/vm/oops/oopsHierarchy.hpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/oops/oopsHierarchy.hpp Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -112,9 +112,7 @@
// Assignment
oop& operator=(const oop& o) { _o = o.obj(); return *this; }
-#ifndef SOLARIS
volatile oop& operator=(const oop& o) volatile { _o = o.obj(); return *this; }
-#endif
volatile oop& operator=(const volatile oop& o) volatile { _o = o.obj(); return *this; }
// Explict user conversions
@@ -123,11 +121,10 @@
operator void* () const volatile { return (void *)obj(); }
#endif
operator HeapWord* () const { return (HeapWord*)obj(); }
- operator oopDesc* () const { return obj(); }
+ operator oopDesc* () const volatile { return obj(); }
operator intptr_t* () const { return (intptr_t*)obj(); }
operator PromotedObject* () const { return (PromotedObject*)obj(); }
operator markOop () const { return markOop(obj()); }
-
operator address () const { return (address)obj(); }
// from javaCalls.cpp
@@ -161,11 +158,10 @@
oop::operator=(o); \
return *this; \
} \
- NOT_SOLARIS( \
volatile type##Oop& operator=(const type##Oop& o) volatile { \
(void)const_cast<oop&>(oop::operator=(o)); \
return *this; \
- }) \
+ } \
volatile type##Oop& operator=(const volatile type##Oop& o) volatile {\
(void)const_cast<oop&>(oop::operator=(o)); \
return *this; \
--- a/hotspot/src/share/vm/runtime/mutexLocker.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/runtime/mutexLocker.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -280,10 +280,10 @@
#ifdef INCLUDE_TRACE
def(JfrMsg_lock , Monitor, leaf, true);
- def(JfrBuffer_lock , Mutex, nonleaf+1, true);
- def(JfrThreadGroups_lock , Mutex, nonleaf+1, true);
- def(JfrStream_lock , Mutex, nonleaf+2, true);
- def(JfrStacktrace_lock , Mutex, special, true );
+ def(JfrBuffer_lock , Mutex, leaf, true);
+ def(JfrThreadGroups_lock , Mutex, leaf, true);
+ def(JfrStream_lock , Mutex, nonleaf, true);
+ def(JfrStacktrace_lock , Mutex, special, true);
#endif
}
--- a/hotspot/src/share/vm/runtime/objectMonitor.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/runtime/objectMonitor.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -385,6 +385,15 @@
jt->java_suspend_self();
}
Self->set_current_pending_monitor(NULL);
+
+ // We cleared the pending monitor info since we've just gotten past
+ // the enter-check-for-suspend dance and we now own the monitor free
+ // and clear, i.e., it is no longer pending. The ThreadBlockInVM
+ // destructor can go to a safepoint at the end of this block. If we
+ // do a thread dump during that safepoint, then this thread will show
+ // as having "-locked" the monitor, but the OS and java.lang.Thread
+ // states will still report that the thread is blocked trying to
+ // acquire it.
}
Atomic::dec_ptr(&_count);
--- a/hotspot/src/share/vm/runtime/thread.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/runtime/thread.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -1434,7 +1434,7 @@
_in_deopt_handler = 0;
_doing_unsafe_access = false;
_stack_guard_state = stack_guard_unused;
- (void)const_cast<oop&>(_exception_oop = NULL);
+ (void)const_cast<oop&>(_exception_oop = oop(NULL));
_exception_pc = 0;
_exception_handler_pc = 0;
_is_method_handle_return = 0;
@@ -3543,6 +3543,8 @@
// debug stuff, that does not work until all basic classes have been initialized.
set_init_completed();
+ Metaspace::post_initialize();
+
HOTSPOT_VM_INIT_END();
// record VM initialization completion time
--- a/hotspot/src/share/vm/runtime/vframe.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/runtime/vframe.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -199,6 +199,7 @@
continue;
}
if (monitor->owner() != NULL) {
+ // the monitor is associated with an object, i.e., it is locked
// First, assume we have the monitor locked. If we haven't found an
// owned monitor before and this is the first frame, then we need to
@@ -209,7 +210,11 @@
if (!found_first_monitor && frame_count == 0) {
markOop mark = monitor->owner()->mark();
if (mark->has_monitor() &&
- mark->monitor() == thread()->current_pending_monitor()) {
+ ( // we have marked ourself as pending on this monitor
+ mark->monitor() == thread()->current_pending_monitor() ||
+ // we are not the owner of this monitor
+ !mark->monitor()->is_entered(thread())
+ )) {
lock_state = "waiting to lock";
}
}
--- a/hotspot/src/share/vm/services/attachListener.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/services/attachListener.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -162,10 +162,7 @@
java_lang_Throwable::print(PENDING_EXCEPTION, out);
out->cr();
CLEAR_PENDING_EXCEPTION;
- // The exception has been printed on the output stream
- // If the JVM returns JNI_ERR, the attachAPI throws a generic I/O
- // exception and the content of the output stream is not processed.
- // By returning JNI_OK, the exception will be displayed on the client side
+ return JNI_ERR;
}
return JNI_OK;
}
--- a/hotspot/src/share/vm/services/memoryManager.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/services/memoryManager.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, 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 @@
MemoryManager::MemoryManager() {
_num_pools = 0;
- (void)const_cast<instanceOop&>(_memory_mgr_obj = NULL);
+ (void)const_cast<instanceOop&>(_memory_mgr_obj = instanceOop(NULL));
}
void MemoryManager::add_pool(MemoryPool* pool) {
--- a/hotspot/src/share/vm/services/memoryPool.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/services/memoryPool.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, 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
@@ -46,7 +46,7 @@
_name = name;
_initial_size = init_size;
_max_size = max_size;
- (void)const_cast<instanceOop&>(_memory_pool_obj = NULL);
+ (void)const_cast<instanceOop&>(_memory_pool_obj = instanceOop(NULL));
_available_for_allocation = true;
_num_managers = 0;
_type = type;
--- a/hotspot/src/share/vm/utilities/debug.cpp Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/src/share/vm/utilities/debug.cpp Wed Jun 18 13:14:15 2014 -0700
@@ -263,13 +263,11 @@
void report_out_of_shared_space(SharedSpaceType shared_space) {
static const char* name[] = {
- "native memory for metadata",
"shared read only space",
"shared read write space",
"shared miscellaneous data space"
};
static const char* flag[] = {
- "Metaspace",
"SharedReadOnlySize",
"SharedReadWriteSize",
"SharedMiscDataSize"
--- a/hotspot/test/TEST.groups Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/TEST.groups Wed Jun 18 13:14:15 2014 -0700
@@ -81,6 +81,7 @@
runtime/NMT/ThreadedVirtualAllocTestType.java \
runtime/NMT/VirtualAllocTestType.java \
runtime/RedefineObject/TestRedefineObject.java \
+ runtime/Thread/TestThreadDumpMonitorContention.java \
runtime/XCheckJniJsig/XCheckJSig.java \
serviceability/attach/AttachWithStalePidFile.java \
serviceability/jvmti/8036666/GetObjectLockCount.java \
--- a/hotspot/test/gc/arguments/TestParallelHeapSizeFlags.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/gc/arguments/TestParallelHeapSizeFlags.java Wed Jun 18 13:14:15 2014 -0700
@@ -22,6 +22,7 @@
*/
/*
+ * @ignore 8027915
* @test TestParallelHeapSizeFlags
* @key gc
* @bug 8006088
--- a/hotspot/test/gc/arguments/TestUseCompressedOopsErgo.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/gc/arguments/TestUseCompressedOopsErgo.java Wed Jun 18 13:14:15 2014 -0700
@@ -22,6 +22,7 @@
*/
/*
+ * @ignore 8025645
* @test TestUseCompressedOopsErgo
* @key gc
* @bug 8010722
--- a/hotspot/test/gc/g1/TestHumongousShrinkHeap.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/gc/g1/TestHumongousShrinkHeap.java Wed Jun 18 13:14:15 2014 -0700
@@ -22,6 +22,7 @@
*/
/**
+ * @ignore 8041506, 8041946, 8042051
* @test TestHumongousShrinkHeap
* @bug 8036025
* @summary Verify that heap shrinks after GC in the presence of fragmentation due to humongous objects
--- a/hotspot/test/gc/g1/TestStringDeduplicationMemoryUsage.java Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2014, 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 TestStringDeduplicationMemoryUsage
- * @summary Test string deduplication memory usage
- * @bug 8029075
- * @key gc
- * @library /testlibrary
- */
-
-public class TestStringDeduplicationMemoryUsage {
- public static void main(String[] args) throws Exception {
- TestStringDeduplicationTools.testMemoryUsage();
- }
-}
--- a/hotspot/test/gc/g1/TestStringDeduplicationTools.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/gc/g1/TestStringDeduplicationTools.java Wed Jun 18 13:14:15 2014 -0700
@@ -294,55 +294,6 @@
}
}
- private static class MemoryUsageTest {
- public static void main(String[] args) {
- System.out.println("Begin: MemoryUsageTest");
-
- final boolean useStringDeduplication = Boolean.parseBoolean(args[0]);
- final int numberOfStrings = LargeNumberOfStrings;
- final int numberOfUniqueStrings = 1;
-
- ArrayList<String> list = createStrings(numberOfStrings, numberOfUniqueStrings);
- forceDeduplication(DefaultAgeThreshold, FullGC);
-
- if (useStringDeduplication) {
- verifyStrings(list, numberOfUniqueStrings);
- }
-
- System.gc();
-
- System.out.println("Heap Memory Usage: " + ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed());
- System.out.println("Array Header Size: " + unsafe.ARRAY_CHAR_BASE_OFFSET);
-
- System.out.println("End: MemoryUsageTest");
- }
-
- public static OutputAnalyzer run(boolean useStringDeduplication) throws Exception {
- String[] extraArgs = new String[0];
-
- if (useStringDeduplication) {
- extraArgs = new String[] {
- "-XX:+UseStringDeduplication",
- "-XX:+PrintStringDeduplicationStatistics",
- "-XX:StringDeduplicationAgeThreshold=" + DefaultAgeThreshold
- };
- }
-
- String[] defaultArgs = new String[] {
- "-XX:+PrintGC",
- "-XX:+PrintGCDetails",
- MemoryUsageTest.class.getName(),
- "" + useStringDeduplication
- };
-
- ArrayList<String> args = new ArrayList<String>();
- args.addAll(Arrays.asList(extraArgs));
- args.addAll(Arrays.asList(defaultArgs));
-
- return runTest(args.toArray(new String[args.size()]));
- }
- }
-
/*
* Tests
*/
@@ -480,44 +431,4 @@
OutputAnalyzer output = InternedTest.run();
output.shouldHaveExitValue(0);
}
-
- public static void testMemoryUsage() throws Exception {
- // Test that memory usage is reduced after deduplication
- OutputAnalyzer output;
- final String heapMemoryUsagePattern = "Heap Memory Usage: (\\d+)";
- final String arrayHeaderSizePattern = "Array Header Size: (\\d+)";
-
- // Run without deduplication
- output = MemoryUsageTest.run(false);
- output.shouldHaveExitValue(0);
- final long heapMemoryUsageWithoutDedup = Long.parseLong(output.firstMatch(heapMemoryUsagePattern, 1));
- final long arrayHeaderSizeWithoutDedup = Long.parseLong(output.firstMatch(arrayHeaderSizePattern, 1));
-
- // Run with deduplication
- output = MemoryUsageTest.run(true);
- output.shouldHaveExitValue(0);
- final long heapMemoryUsageWithDedup = Long.parseLong(output.firstMatch(heapMemoryUsagePattern, 1));
- final long arrayHeaderSizeWithDedup = Long.parseLong(output.firstMatch(arrayHeaderSizePattern, 1));
-
- // Sanity check to make sure one instance isn't using compressed class pointers and the other not
- if (arrayHeaderSizeWithoutDedup != arrayHeaderSizeWithDedup) {
- throw new Exception("Unexpected difference between array header sizes");
- }
-
- // Calculate expected memory usage with deduplication enabled. This calculation does
- // not take alignment and padding into account, so it's a conservative estimate.
- final long sizeOfChar = unsafe.ARRAY_CHAR_INDEX_SCALE;
- final long sizeOfCharArray = StringLength * sizeOfChar + arrayHeaderSizeWithoutDedup;
- final long bytesSaved = (LargeNumberOfStrings - 1) * sizeOfCharArray;
- final long heapMemoryUsageWithDedupExpected = heapMemoryUsageWithoutDedup - bytesSaved;
-
- System.out.println("Memory usage summary:");
- System.out.println(" heapMemoryUsageWithoutDedup: " + heapMemoryUsageWithoutDedup);
- System.out.println(" heapMemoryUsageWithDedup: " + heapMemoryUsageWithDedup);
- System.out.println(" heapMemoryUsageWithDedupExpected: " + heapMemoryUsageWithDedupExpected);
-
- if (heapMemoryUsageWithDedup > heapMemoryUsageWithDedupExpected) {
- throw new Exception("Unexpected memory usage, heapMemoryUsageWithDedup should be less or equal to heapMemoryUsageWithDedupExpected");
- }
- }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/metaspace/TestMetaspaceInitialization.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+
+/* @test TestMetaspaceInitialization
+ * @bug 8042933
+ * @summary Tests to initialize metaspace with a very low MetaspaceSize
+ * @library /testlibrary
+ * @run main/othervm -XX:MetaspaceSize=2m TestMetaspaceInitialization
+ */
+public class TestMetaspaceInitialization {
+ private class Internal {
+ public int x;
+ public Internal(int x) {
+ this.x = x;
+ }
+ }
+
+ private void test() {
+ ArrayList<Internal> l = new ArrayList<>();
+ l.add(new Internal(17));
+ }
+
+ public static void main(String[] args) {
+ new TestMetaspaceInitialization().test();
+ }
+}
--- a/hotspot/test/gc/parallelScavenge/TestDynShrinkHeap.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/gc/parallelScavenge/TestDynShrinkHeap.java Wed Jun 18 13:14:15 2014 -0700
@@ -22,6 +22,7 @@
*/
/**
+ * @ignore 8042051
* @test TestDynShrinkHeap
* @bug 8016479
* @summary Verify that the heap shrinks after full GC according to the current values of the Min/MaxHeapFreeRatio flags
--- a/hotspot/test/runtime/CommandLine/TestHexArguments.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/runtime/CommandLine/TestHexArguments.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,14 +35,14 @@
public class TestHexArguments {
public static void main(String args[]) throws Exception {
String[] javaArgs = {"-XX:SharedBaseAddress=0x1D000000", "-version"};
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, javaArgs);
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(javaArgs);
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldNotContain("Could not create the Java Virtual Machine");
output.shouldHaveExitValue(0);
String[] javaArgs1 = {"-XX:SharedBaseAddress=1D000000", "-version"};
- pb = ProcessTools.createJavaProcessBuilder(true, javaArgs1);
+ pb = ProcessTools.createJavaProcessBuilder(javaArgs1);
output = new OutputAnalyzer(pb.start());
output.shouldContain("Could not create the Java Virtual Machine");
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/RedefineFinalizer/RedefineFinalizer.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 6904403
+ * @summary Don't assert if we redefine finalize method
+ * @library /testlibrary
+ * @build RedefineClassHelper
+ * @run main RedefineClassHelper
+ * @run main/othervm -javaagent:redefineagent.jar RedefineFinalizer
+ */
+
+/*
+ * Regression test for hitting:
+ *
+ * assert(f == k->has_finalizer()) failed: inconsistent has_finalizer
+ *
+ * when redefining finalizer method
+ */
+public class RedefineFinalizer {
+
+ public static String newB =
+ "class RedefineFinalizer$B {" +
+ " protected void finalize() { " +
+ " System.out.println(\"Finalizer called\");" +
+ " }" +
+ "}";
+
+ public static void main(String[] args) throws Exception {
+ RedefineClassHelper.redefineClass(B.class, newB);
+
+ A a = new A();
+ }
+
+ static class A extends B {
+ }
+
+ static class B {
+ protected void finalize() {
+ // should be empty
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/SharedArchiveFile/LimitSharedSizes.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+/* @ignore JDK-8043896
+ * @test LimitSharedSizes
+ * @summary Test handling of limits on shared space size
+ * @library /testlibrary
+ * @run main LimitSharedSizes
+ */
+
+import com.oracle.java.testlibrary.*;
+
+public class LimitSharedSizes {
+ private static class SharedSizeTestData {
+ public String optionName;
+ public String optionValue;
+ public String expectedErrorMsg;
+
+ public SharedSizeTestData(String name, String value, String msg) {
+ optionName = name;
+ optionValue = value;
+ expectedErrorMsg = msg;
+ }
+ }
+
+ private static final SharedSizeTestData[] testTable = {
+ // values in this part of the test table should cause failure
+ // (shared space sizes are deliberately too small)
+ new SharedSizeTestData("-XX:SharedReadOnlySize", "4M", "read only"),
+ new SharedSizeTestData("-XX:SharedReadWriteSize","4M", "read write"),
+
+ // Known issue, JDK-8038422 (assert() on Windows)
+ // new SharedSizeTestData("-XX:SharedMiscDataSize", "500k", "miscellaneous data"),
+
+ // This will cause a VM crash; commenting out for now; see bug JDK-8038268
+ // @ignore JDK-8038268
+ // new SharedSizeTestData("-XX:SharedMiscCodeSize", "20k", "miscellaneous code"),
+
+ // these values are larger than default ones, but should
+ // be acceptable and not cause failure
+ new SharedSizeTestData("-XX:SharedReadOnlySize", "20M", null),
+ new SharedSizeTestData("-XX:SharedReadWriteSize", "20M", null),
+ new SharedSizeTestData("-XX:SharedMiscDataSize", "20M", null),
+ new SharedSizeTestData("-XX:SharedMiscCodeSize", "20M", null)
+ };
+
+ public static void main(String[] args) throws Exception {
+ String fileName = "test.jsa";
+
+ for (SharedSizeTestData td : testTable) {
+ String option = td.optionName + "=" + td.optionValue;
+ System.out.println("testing option <" + option + ">");
+
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ "-XX:+UnlockDiagnosticVMOptions",
+ "-XX:SharedArchiveFile=./" + fileName,
+ option,
+ "-Xshare:dump");
+
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+
+ if (td.expectedErrorMsg != null) {
+ output.shouldContain("The shared " + td.expectedErrorMsg
+ + " space is not large enough");
+
+ output.shouldHaveExitValue(2);
+ } else {
+ output.shouldNotContain("space is not large enough");
+ output.shouldHaveExitValue(0);
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/SharedArchiveFile/SharedBaseAddress.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2014, 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 SharedBaseAddress
+ * @summary Test variety of values for SharedBaseAddress, making sure
+ * VM handles normal values as well as edge values w/o a crash.
+ * @library /testlibrary
+ * @run main SharedBaseAddress
+ */
+
+import com.oracle.java.testlibrary.*;
+
+public class SharedBaseAddress {
+
+ // shared base address test table
+ private static final String[] testTable = {
+ "1g", "8g", "64g","512g", "4t",
+ "32t", "128t", "0",
+ "1", "64k", "64M"
+ };
+
+ public static void main(String[] args) throws Exception {
+ // Known issue on Solaris-Sparc
+ // @ignore JDK-8044600
+ if (Platform.isSolaris() && Platform.isSparc())
+ return;
+
+ for (String testEntry : testTable) {
+ System.out.println("sharedBaseAddress = " + testEntry);
+
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ "-XX:+UnlockDiagnosticVMOptions",
+ "-XX:SharedArchiveFile=test.jsa",
+ "-XX:SharedBaseAddress=" + testEntry,
+ "-Xshare:dump");
+
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+
+ output.shouldContain("Loading classes to share");
+
+ try {
+ pb = ProcessTools.createJavaProcessBuilder(
+ "-XX:+UnlockDiagnosticVMOptions",
+ "-XX:SharedArchiveFile=test.jsa",
+ "-Xshare:on",
+ "-version");
+ output = new OutputAnalyzer(pb.start());
+ output.shouldContain("sharing");
+ output.shouldHaveExitValue(0);
+ } catch (RuntimeException e) {
+ output.shouldContain("Unable to use shared archive");
+ output.shouldHaveExitValue(1);
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/SharedArchiveFile/SpaceUtilizationCheck.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2014, 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 SpaceUtilizationCheck
+ * @summary Check if the space utilization for shared spaces is adequate
+ * @library /testlibrary
+ * @run main SpaceUtilizationCheck
+ */
+
+import com.oracle.java.testlibrary.*;
+
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+import java.util.ArrayList;
+import java.lang.Integer;
+
+public class SpaceUtilizationCheck {
+ // Minimum allowed utilization value (percent)
+ // The goal is to have this number to be 50% for RO and RW regions
+ // Once that feature is implemented, increase the MIN_UTILIZATION to 50
+ private static final int MIN_UTILIZATION = 30;
+
+ // Only RO and RW regions are considered for this check, since they
+ // currently account for the bulk of the shared space
+ private static final int NUMBER_OF_CHECKED_SHARED_REGIONS = 2;
+
+ public static void main(String[] args) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ "-XX:+UnlockDiagnosticVMOptions",
+ "-XX:SharedArchiveFile=./test.jsa",
+ "-Xshare:dump");
+
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ String stdout = output.getStdout();
+ ArrayList<String> utilization = findUtilization(stdout);
+
+ if (utilization.size() != NUMBER_OF_CHECKED_SHARED_REGIONS )
+ throw new RuntimeException("The output format of sharing summary has changed");
+
+ for(String str : utilization) {
+ int value = Integer.parseInt(str);
+ if (value < MIN_UTILIZATION) {
+ System.out.println(stdout);
+ throw new RuntimeException("Utilization for one of the regions" +
+ "is below a threshold of " + MIN_UTILIZATION + "%");
+ }
+ }
+ }
+
+ public static ArrayList<String> findUtilization(String input) {
+ ArrayList<String> regions = filterRegionsOfInterest(input.split("\n"));
+ return filterByPattern(filterByPattern(regions, "bytes \\[.*% used\\]"), "\\d+");
+ }
+
+ private static ArrayList<String> filterByPattern(Iterable<String> input, String pattern) {
+ ArrayList<String> result = new ArrayList<String>();
+ for (String str : input) {
+ Matcher matcher = Pattern.compile(pattern).matcher(str);
+ if (matcher.find()) {
+ result.add(matcher.group());
+ }
+ }
+ return result;
+ }
+
+ private static ArrayList<String> filterRegionsOfInterest(String[] inputLines) {
+ ArrayList<String> result = new ArrayList<String>();
+ for (String str : inputLines) {
+ if (str.contains("ro space:") || str.contains("rw space:")) {
+ result.add(str);
+ }
+ }
+ return result;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/Thread/TestThreadDumpMonitorContention.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,405 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8036823
+ * @summary Creates two threads contending for the same lock and checks
+ * whether jstack reports "locked" by more than one thread.
+ *
+ * @library /testlibrary
+ * @run main/othervm TestThreadDumpMonitorContention
+ */
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.lang.management.ManagementFactory;
+import java.lang.management.RuntimeMXBean;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.oracle.java.testlibrary.*;
+
+public class TestThreadDumpMonitorContention {
+ // jstack tends to be closely bound to the VM that we are running
+ // so use getTestJDKTool() instead of getCompileJDKTool() or even
+ // getJDKTool() which can fall back to "compile.jdk".
+ final static String JSTACK = JDKToolFinder.getTestJDKTool("jstack");
+ final static String PID = getPid();
+
+ // looking for header lines with these patterns:
+ // "ContendingThread-1" #19 prio=5 os_prio=64 tid=0x000000000079c000 nid=0x23 runnable [0xffff80ffb8b87000]
+ // "ContendingThread-2" #21 prio=5 os_prio=64 tid=0x0000000000780000 nid=0x2f waiting for monitor entry [0xfffffd7fc1111000]
+ final static Pattern HEADER_PREFIX_PATTERN = Pattern.compile(
+ "^\"ContendingThread-.*");
+ final static Pattern HEADER_WAITING_PATTERN = Pattern.compile(
+ "^\"ContendingThread-.* waiting for monitor entry .*");
+ final static Pattern HEADER_RUNNABLE_PATTERN = Pattern.compile(
+ "^\"ContendingThread-.* runnable .*");
+
+ // looking for thread state lines with these patterns:
+ // java.lang.Thread.State: RUNNABLE
+ // java.lang.Thread.State: BLOCKED (on object monitor)
+ final static Pattern THREAD_STATE_PREFIX_PATTERN = Pattern.compile(
+ " *java\\.lang\\.Thread\\.State: .*");
+ final static Pattern THREAD_STATE_BLOCKED_PATTERN = Pattern.compile(
+ " *java\\.lang\\.Thread\\.State: BLOCKED \\(on object monitor\\)");
+ final static Pattern THREAD_STATE_RUNNABLE_PATTERN = Pattern.compile(
+ " *java\\.lang\\.Thread\\.State: RUNNABLE");
+
+ // looking for duplicates of this pattern:
+ // - locked <0x000000076ac59e20> (a TestThreadDumpMonitorContention$1)
+ final static Pattern LOCK_PATTERN = Pattern.compile(
+ ".* locked \\<.*\\(a TestThreadDumpMonitorContention.*");
+
+ // sanity checking header and thread state lines associated
+ // with this pattern:
+ // - waiting to lock <0x000000076ac59e20> (a TestThreadDumpMonitorContention$1)
+ final static Pattern WAITING_PATTERN = Pattern.compile(
+ ".* waiting to lock \\<.*\\(a TestThreadDumpMonitorContention.*");
+
+ volatile static boolean done = false;
+
+ static int error_cnt = 0;
+ static String header_line = null;
+ static boolean have_header_line = false;
+ static boolean have_thread_state_line = false;
+ static int match_cnt = 0;
+ static String[] match_list = new String[2];
+ static int n_samples = 15;
+ static String thread_state_line = null;
+ static boolean verbose = false;
+
+ public static void main(String[] args) throws Exception {
+ if (args.length != 0) {
+ int arg_i = 0;
+ if (args[arg_i].equals("-v")) {
+ verbose = true;
+ arg_i++;
+ }
+
+ try {
+ n_samples = Integer.parseInt(args[arg_i]);
+ } catch (NumberFormatException nfe) {
+ System.err.println(nfe);
+ usage();
+ }
+ }
+
+ Runnable runnable = new Runnable() {
+ public void run() {
+ while (!done) {
+ synchronized (this) { }
+ }
+ }
+ };
+ Thread[] thread_list = new Thread[2];
+ thread_list[0] = new Thread(runnable, "ContendingThread-1");
+ thread_list[1] = new Thread(runnable, "ContendingThread-2");
+ thread_list[0].start();
+ thread_list[1].start();
+
+ doSamples();
+
+ done = true;
+
+ thread_list[0].join();
+ thread_list[1].join();
+
+ if (error_cnt == 0) {
+ System.out.println("Test PASSED.");
+ } else {
+ System.out.println("Test FAILED.");
+ throw new AssertionError("error_cnt=" + error_cnt);
+ }
+ }
+
+ // Reached a blank line which is the end of the
+ // stack trace without matching either LOCK_PATTERN
+ // or WAITING_PATTERN. Rare, but it's not an error.
+ //
+ // Example:
+ // "ContendingThread-1" #21 prio=5 os_prio=64 tid=0x00000000007b9000 nid=0x2f runnable [0xfffffd7fc1111000]
+ // java.lang.Thread.State: RUNNABLE
+ // at TestThreadDumpMonitorContention$1.run(TestThreadDumpMonitorContention.java:67)
+ // at java.lang.Thread.run(Thread.java:745)
+ //
+ static boolean checkBlankLine(String line) {
+ if (line.length() == 0) {
+ have_header_line = false;
+ have_thread_state_line = false;
+ return true;
+ }
+
+ return false;
+ }
+
+ // Process the locked line here if we found one.
+ //
+ // Example 1:
+ // "ContendingThread-1" #21 prio=5 os_prio=64 tid=0x00000000007b9000 nid=0x2f runnable [0xfffffd7fc1111000]
+ // java.lang.Thread.State: RUNNABLE
+ // at TestThreadDumpMonitorContention$1.run(TestThreadDumpMonitorContention.java:67)
+ // - locked <0xfffffd7e6a2912f8> (a TestThreadDumpMonitorContention$1)
+ // at java.lang.Thread.run(Thread.java:745)
+ //
+ // Example 2:
+ // "ContendingThread-1" #21 prio=5 os_prio=64 tid=0x00000000007b9000 nid=0x2f waiting for monitor entry [0xfffffd7fc1111000]
+ // java.lang.Thread.State: BLOCKED (on object monitor)
+ // at TestThreadDumpMonitorContention$1.run(TestThreadDumpMonitorContention.java:67)
+ // - locked <0xfffffd7e6a2912f8> (a TestThreadDumpMonitorContention$1)
+ // at java.lang.Thread.run(Thread.java:745)
+ //
+ static boolean checkLockedLine(String line) {
+ Matcher matcher = LOCK_PATTERN.matcher(line);
+ if (matcher.matches()) {
+ if (verbose) {
+ System.out.println("locked_line='" + line + "'");
+ }
+ match_list[match_cnt] = new String(line);
+ match_cnt++;
+
+ matcher = HEADER_RUNNABLE_PATTERN.matcher(header_line);
+ if (!matcher.matches()) {
+ // It's strange, but a locked line can also
+ // match the HEADER_WAITING_PATTERN.
+ matcher = HEADER_WAITING_PATTERN.matcher(header_line);
+ if (!matcher.matches()) {
+ System.err.println();
+ System.err.println("ERROR: header line does " +
+ "not match runnable or waiting patterns.");
+ System.err.println("ERROR: header_line='" +
+ header_line + "'");
+ System.err.println("ERROR: locked_line='" + line + "'");
+ error_cnt++;
+ }
+ }
+
+ matcher = THREAD_STATE_RUNNABLE_PATTERN.matcher(thread_state_line);
+ if (!matcher.matches()) {
+ // It's strange, but a locked line can also
+ // match the THREAD_STATE_BLOCKED_PATTERN.
+ matcher = THREAD_STATE_BLOCKED_PATTERN.matcher(
+ thread_state_line);
+ if (!matcher.matches()) {
+ System.err.println();
+ System.err.println("ERROR: thread state line does not " +
+ "match runnable or waiting patterns.");
+ System.err.println("ERROR: " + "thread_state_line='" +
+ thread_state_line + "'");
+ System.err.println("ERROR: locked_line='" + line + "'");
+ error_cnt++;
+ }
+ }
+
+ // Have everything we need from this thread stack
+ // that matches the LOCK_PATTERN.
+ have_header_line = false;
+ have_thread_state_line = false;
+ return true;
+ }
+
+ return false;
+ }
+
+ // Process the waiting line here if we found one.
+ //
+ // Example:
+ // "ContendingThread-2" #22 prio=5 os_prio=64 tid=0x00000000007b9800 nid=0x30 waiting for monitor entry [0xfffffd7fc1010000]
+ // java.lang.Thread.State: BLOCKED (on object monitor)
+ // at TestThreadDumpMonitorContention$1.run(TestThreadDumpMonitorContention.java:67)
+ // - waiting to lock <0xfffffd7e6a2912f8> (a TestThreadDumpMonitorContention$1)
+ // at java.lang.Thread.run(Thread.java:745)
+ //
+ static boolean checkWaitingLine(String line) {
+ Matcher matcher = WAITING_PATTERN.matcher(line);
+ if (matcher.matches()) {
+ if (verbose) {
+ System.out.println("waiting_line='" + line + "'");
+ }
+
+ matcher = HEADER_WAITING_PATTERN.matcher(header_line);
+ if (!matcher.matches()) {
+ System.err.println();
+ System.err.println("ERROR: header line does " +
+ "not match a waiting pattern.");
+ System.err.println("ERROR: header_line='" + header_line + "'");
+ System.err.println("ERROR: waiting_line='" + line + "'");
+ error_cnt++;
+ }
+
+ matcher = THREAD_STATE_BLOCKED_PATTERN.matcher(thread_state_line);
+ if (!matcher.matches()) {
+ System.err.println();
+ System.err.println("ERROR: thread state line " +
+ "does not match a waiting pattern.");
+ System.err.println("ERROR: thread_state_line='" +
+ thread_state_line + "'");
+ System.err.println("ERROR: waiting_line='" + line + "'");
+ error_cnt++;
+ }
+
+ // Have everything we need from this thread stack
+ // that matches the WAITING_PATTERN.
+ have_header_line = false;
+ have_thread_state_line = false;
+ return true;
+ }
+
+ return false;
+ }
+
+ static void doSamples() throws Exception {
+ for (int count = 0; count < n_samples; count++) {
+ match_cnt = 0;
+ // verbose mode or an error has a lot of output so add more space
+ if (verbose || error_cnt > 0) System.out.println();
+ System.out.println("Sample #" + count);
+
+ // We don't use the ProcessTools, OutputBuffer or
+ // OutputAnalyzer classes from the testlibrary because
+ // we have a complicated multi-line parse to perform
+ // on a narrow subset of the JSTACK output.
+ //
+ // - we only care about stack traces that match
+ // HEADER_PREFIX_PATTERN; only two should match
+ // - we care about at most three lines from each stack trace
+ // - if both stack traces match LOCKED_PATTERN, then that's
+ // a failure and we report it
+ // - for a stack trace that matches LOCKED_PATTERN, we verify:
+ // - the header line matches HEADER_RUNNABLE_PATTERN
+ // or HEADER_WAITING_PATTERN
+ // - the thread state line matches THREAD_STATE_BLOCKED_PATTERN
+ // or THREAD_STATE_RUNNABLE_PATTERN
+ // - we report any mismatches as failures
+ // - for a stack trace that matches WAITING_PATTERN, we verify:
+ // - the header line matches HEADER_WAITING_PATTERN
+ // - the thread state line matches THREAD_STATE_BLOCKED_PATTERN
+ // - we report any mismatches as failures
+ // - the stack traces that match HEADER_PREFIX_PATTERN may
+ // not match either LOCKED_PATTERN or WAITING_PATTERN
+ // because we might observe the thread outside of
+ // monitor operations; this is not considered a failure
+ //
+ // When we do observe LOCKED_PATTERN or WAITING_PATTERN,
+ // then we are checking the header and thread state patterns
+ // that occurred earlier in the current stack trace that
+ // matched HEADER_PREFIX_PATTERN. We don't use data from
+ // stack traces that don't match HEADER_PREFIX_PATTERN and
+ // we don't mix data between the two stack traces that do
+ // match HEADER_PREFIX_PATTERN.
+ //
+ Process process = new ProcessBuilder(JSTACK, PID)
+ .redirectErrorStream(true).start();
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(
+ process.getInputStream()));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ Matcher matcher = null;
+
+ // process the header line here
+ if (!have_header_line) {
+ matcher = HEADER_PREFIX_PATTERN.matcher(line);
+ if (matcher.matches()) {
+ if (verbose) {
+ System.out.println();
+ System.out.println("header='" + line + "'");
+ }
+ header_line = new String(line);
+ have_header_line = true;
+ continue;
+ }
+ continue; // skip until have a header line
+ }
+
+ // process the thread state line here
+ if (!have_thread_state_line) {
+ matcher = THREAD_STATE_PREFIX_PATTERN.matcher(line);
+ if (matcher.matches()) {
+ if (verbose) {
+ System.out.println("thread_state='" + line + "'");
+ }
+ thread_state_line = new String(line);
+ have_thread_state_line = true;
+ continue;
+ }
+ continue; // skip until we have a thread state line
+ }
+
+ // process the locked line here if we find one
+ if (checkLockedLine(line)) {
+ continue;
+ }
+
+ // process the waiting line here if we find one
+ if (checkWaitingLine(line)) {
+ continue;
+ }
+
+ // process the blank line here if we find one
+ if (checkBlankLine(line)) {
+ continue;
+ }
+ }
+ process.waitFor();
+
+ if (match_cnt == 2) {
+ if (match_list[0].equals(match_list[1])) {
+ System.err.println();
+ System.err.println("ERROR: matching lock lines:");
+ System.err.println("ERROR: line[0]'" + match_list[0] + "'");
+ System.err.println("ERROR: line[1]'" + match_list[1] + "'");
+ error_cnt++;
+ }
+ }
+
+ // slight delay between jstack launches
+ Thread.sleep(500);
+ }
+ }
+
+ // This helper relies on RuntimeMXBean.getName() returning a string
+ // that looks like this: 5436@mt-haku
+ //
+ // The testlibrary has tryFindJvmPid(), but that uses a separate
+ // process which is much more expensive for finding out your own PID.
+ //
+ static String getPid() {
+ RuntimeMXBean runtimebean = ManagementFactory.getRuntimeMXBean();
+ String vmname = runtimebean.getName();
+ int i = vmname.indexOf('@');
+ if (i != -1) {
+ vmname = vmname.substring(0, i);
+ }
+ return vmname;
+ }
+
+ static void usage() {
+ System.err.println("Usage: " +
+ "java TestThreadDumpMonitorContention [-v] [n_samples]");
+ System.exit(1);
+ }
+}
--- a/hotspot/test/serviceability/ParserTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/serviceability/ParserTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -22,10 +22,10 @@
*/
/*
- * @test ParserTest
+ * @test
* @summary Test that the diagnostic command arguemnt parser works
* @library /testlibrary /testlibrary/whitebox
- * @build ParserTest
+ * @build ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.parser.*
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI ParserTest
*/
--- a/hotspot/test/serviceability/attach/AttachWithStalePidFile.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/serviceability/attach/AttachWithStalePidFile.java Wed Jun 18 13:14:15 2014 -0700
@@ -27,7 +27,7 @@
* @key regression
* @summary Regression test for attach issue where stale pid files in /tmp lead to connection issues
* @library /testlibrary
- * @compile AttachWithStalePidFileTarget.java
+ * @build com.oracle.java.testlibrary.* AttachWithStalePidFileTarget
* @run main AttachWithStalePidFile
*/
--- a/hotspot/test/serviceability/dcmd/DynLibDcmdTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/serviceability/dcmd/DynLibDcmdTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
* @test
* @summary Test of VM.dynlib diagnostic command via MBean
* @library /testlibrary
- * @compile DcmdUtil.java
+ * @build com.oracle.java.testlibrary.* DcmdUtil
* @run main DynLibDcmdTest
*/
--- a/hotspot/test/serviceability/jvmti/GetObjectSizeOverflow.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/serviceability/jvmti/GetObjectSizeOverflow.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
* @test
* @bug 8027230
* @library /testlibrary
- * @build GetObjectSizeOverflowAgent
+ * @build ClassFileInstaller com.oracle.java.testlibrary.* GetObjectSizeOverflowAgent
* @run main ClassFileInstaller GetObjectSizeOverflowAgent
* @run main GetObjectSizeOverflow
*/
--- a/hotspot/test/serviceability/jvmti/TestRedefineWithUnresolvedClass.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/serviceability/jvmti/TestRedefineWithUnresolvedClass.java Wed Jun 18 13:14:15 2014 -0700
@@ -26,7 +26,7 @@
* @summary Redefine a class with an UnresolvedClass reference in the constant pool.
* @bug 8035150
* @library /testlibrary
- * @build UnresolvedClassAgent com.oracle.java.testlibrary.ProcessTools com.oracle.java.testlibrary.OutputAnalyzer
+ * @build com.oracle.java.testlibrary.* UnresolvedClassAgent
* @run main TestRedefineWithUnresolvedClass
*/
--- a/hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java Wed Jun 18 13:14:15 2014 -0700
@@ -26,6 +26,7 @@
* @bug 8028623
* @summary Test hashing of extended characters in Serviceability Agent.
* @library /testlibrary
+ * @build com.oracle.java.testlibrary.*
* @compile -encoding utf8 Test8028623.java
* @run main Test8028623
*/
--- a/hotspot/test/serviceability/sa/jmap-hprof/JMapHProfLargeHeapTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/serviceability/sa/jmap-hprof/JMapHProfLargeHeapTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,7 +44,7 @@
* @key regression
* @summary Regression test for hprof export issue due to large heaps (>2G)
* @library /testlibrary
- * @compile JMapHProfLargeHeapProc.java
+ * @build com.oracle.java.testlibrary.* JMapHProfLargeHeapProc
* @run main JMapHProfLargeHeapTest
*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/testlibrary/RedefineClassHelper.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.PrintWriter;
+import java.lang.instrument.*;
+import com.oracle.java.testlibrary.*;
+
+/*
+ * Helper class to write tests that redefine classes.
+ * When main method is run, it will create a redefineagent.jar that can be used
+ * with the -javaagent option to support redefining classes in jtreg tests.
+ *
+ * See sample test in test/testlibrary_tests/RedefineClassTest.java
+ */
+public class RedefineClassHelper {
+
+ public static Instrumentation instrumentation;
+ public static void premain(String agentArgs, Instrumentation inst) {
+ instrumentation = inst;
+ }
+
+ /**
+ * Redefine a class
+ *
+ * @param clazz Class to redefine
+ * @param javacode String with the new java code for the class to be redefined
+ */
+ public static void redefineClass(Class clazz, String javacode) throws Exception {
+ byte[] bytecode = InMemoryJavaCompiler.compile(clazz.getName(), javacode);
+ redefineClass(clazz, bytecode);
+ }
+
+ /**
+ * Redefine a class
+ *
+ * @param clazz Class to redefine
+ * @param bytecode byte[] with the new class
+ */
+ public static void redefineClass(Class clazz, byte[] bytecode) throws Exception {
+ instrumentation.redefineClasses(new ClassDefinition(clazz, bytecode));
+ }
+
+ /**
+ * Main method to be invoked before test to create the redefineagent.jar
+ */
+ public static void main(String[] args) throws Exception {
+ ClassFileInstaller.main("RedefineClassHelper");
+
+ PrintWriter pw = new PrintWriter("MANIFEST.MF");
+ pw.println("Premain-Class: RedefineClassHelper");
+ pw.println("Can-Redefine-Classes: true");
+ pw.close();
+
+ sun.tools.jar.Main jarTool = new sun.tools.jar.Main(System.out, System.err, "jar");
+ if (!jarTool.run(new String[] { "-cmf", "MANIFEST.MF", "redefineagent.jar", "RedefineClassHelper.class" })) {
+ throw new Exception("jar operation failed");
+ }
+ }
+}
--- a/hotspot/test/testlibrary/ctw/test/ClassesDirTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/testlibrary/ctw/test/ClassesDirTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -22,10 +22,10 @@
*/
/*
- * @test ClassesDirTest
+ * @test
* @bug 8012447
* @library /testlibrary /testlibrary/whitebox /testlibrary/ctw/src
- * @build sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox ClassesDirTest Foo Bar
+ * @build ClassFileInstaller sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox Foo Bar
* @run main ClassFileInstaller sun.hotspot.WhiteBox Foo Bar
* @run main ClassesDirTest prepare
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Dsun.hotspot.tools.ctw.logfile=ctw.log sun.hotspot.tools.ctw.CompileTheWorld classes
--- a/hotspot/test/testlibrary/ctw/test/ClassesListTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/testlibrary/ctw/test/ClassesListTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -22,10 +22,10 @@
*/
/*
- * @test ClassesListTest
+ * @test
* @bug 8012447
* @library /testlibrary /testlibrary/whitebox /testlibrary/ctw/src
- * @build sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox ClassesListTest Foo Bar
+ * @build ClassFileInstaller sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox Foo Bar
* @run main ClassFileInstaller sun.hotspot.WhiteBox Foo Bar
* @run main ClassesListTest prepare
* @run main/othervm/timeout=600 -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Dsun.hotspot.tools.ctw.logfile=ctw.log sun.hotspot.tools.ctw.CompileTheWorld classes.lst
--- a/hotspot/test/testlibrary/ctw/test/JarDirTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/testlibrary/ctw/test/JarDirTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -22,10 +22,10 @@
*/
/*
- * @test JarDirTest
+ * @test
* @bug 8012447
* @library /testlibrary /testlibrary/whitebox /testlibrary/ctw/src
- * @build sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox JarDirTest Foo Bar
+ * @build ClassFileInstaller com.oracle.java.testlibrary.* sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox Foo Bar
* @run main ClassFileInstaller sun.hotspot.WhiteBox Foo Bar
* @run main JarDirTest prepare
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Dsun.hotspot.tools.ctw.logfile=ctw.log sun.hotspot.tools.ctw.CompileTheWorld jars/*
--- a/hotspot/test/testlibrary/ctw/test/JarsTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/hotspot/test/testlibrary/ctw/test/JarsTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -22,10 +22,10 @@
*/
/*
- * @test JarsTest
+ * @test
* @bug 8012447
* @library /testlibrary /testlibrary/whitebox /testlibrary/ctw/src
- * @build sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox JarsTest Foo Bar
+ * @build ClassFileInstaller com.oracle.java.testlibrary.* sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox Foo Bar
* @run main ClassFileInstaller sun.hotspot.WhiteBox Foo Bar
* @run main JarsTest prepare
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Dsun.hotspot.tools.ctw.logfile=ctw.log sun.hotspot.tools.ctw.CompileTheWorld foo.jar bar.jar
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/testlibrary_tests/RedefineClassTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2014, 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
+ * @library /testlibrary
+ * @summary Proof of concept test for RedefineClassHelper
+ * @build RedefineClassHelper
+ * @run main RedefineClassHelper
+ * @run main/othervm -javaagent:redefineagent.jar RedefineClassTest
+ */
+
+import static com.oracle.java.testlibrary.Asserts.*;
+import com.oracle.java.testlibrary.*;
+
+/*
+ * Proof of concept test for the test utility class RedefineClassHelper
+ */
+public class RedefineClassTest {
+
+ public static String newClass = "class RedefineClassTest$A { public int Method() { return 2; } }";
+ public static void main(String[] args) throws Exception {
+ A a = new A();
+ assertTrue(a.Method() == 1);
+ RedefineClassHelper.redefineClass(A.class, newClass);
+ assertTrue(a.Method() == 2);
+ }
+
+ static class A {
+ public int Method() {
+ return 1;
+ }
+ }
+}
--- a/jaxp/.hgtags Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/.hgtags Wed Jun 18 13:14:15 2014 -0700
@@ -259,3 +259,5 @@
32b3fc4bc7374a34d52b7f4e2391b4b4b0c084e8 jdk9-b14
6bad71866c7598587860e0981b0b0e51ec8c0476 jdk9-b15
a1461221b05d4620e4d7d1907e2a0282aaedf31c jdk9-b16
+6f923fcbe5129eceb9617a9a18dbdd743980e785 jdk9-b17
+5afa90c28742d175431be75f9098745510bd2b30 jdk9-b18
--- a/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet.java Wed Jun 18 13:14:15 2014 -0700
@@ -3,9 +3,11 @@
* DO NOT REMOVE OR ALTER!
*/
/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -32,7 +34,6 @@
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.Enumeration;
-import java.util.Vector;
import javax.xml.transform.Templates;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
@@ -51,6 +52,7 @@
import com.sun.org.apache.xalan.internal.xsltc.runtime.output.TransletOutputHandlerFactory;
import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
import com.sun.org.apache.xml.internal.serializer.SerializationHandler;
+import com.sun.org.apache.xml.internal.serializer.ToStream;
/**
* @author Jacek Ambroziak
@@ -74,7 +76,7 @@
public String _doctypeSystem = null;
public boolean _indent = false;
public String _mediaType = null;
- public Vector _cdata = null;
+ public ArrayList<String> _cdata = null;
public int _indentamount = -1;
public static final int FIRST_TRANSLET_VERSION = 100;
@@ -642,7 +644,7 @@
*/
public void addCdataElement(String name) {
if (_cdata == null) {
- _cdata = new Vector();
+ _cdata = new ArrayList<>();
}
int lastColon = name.lastIndexOf(':');
@@ -650,11 +652,11 @@
if (lastColon > 0) {
String uri = name.substring(0, lastColon);
String localName = name.substring(lastColon+1);
- _cdata.addElement(uri);
- _cdata.addElement(localName);
+ _cdata.add(uri);
+ _cdata.add(localName);
} else {
- _cdata.addElement(null);
- _cdata.addElement(name);
+ _cdata.add(null);
+ _cdata.add(name);
}
}
--- a/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -3,9 +3,11 @@
* DO NOT REMOVE OR ALTER!
*/
/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -40,7 +42,7 @@
import java.util.Enumeration;
import java.util.Properties;
import java.util.StringTokenizer;
-import java.util.Vector;
+import java.util.ArrayList;
import java.lang.reflect.Constructor;
import javax.xml.parsers.DocumentBuilder;
@@ -1084,7 +1086,7 @@
else if (name.equals(OutputKeys.CDATA_SECTION_ELEMENTS)) {
if (value != null) {
StringTokenizer e = new StringTokenizer(value);
- Vector uriAndLocalNames = null;
+ ArrayList<String> uriAndLocalNames = null;
while (e.hasMoreTokens()) {
final String token = e.nextToken();
@@ -1104,11 +1106,11 @@
}
if (uriAndLocalNames == null) {
- uriAndLocalNames = new Vector();
+ uriAndLocalNames = new ArrayList<>();
}
// add the uri/localName as a pair, in that order
- uriAndLocalNames.addElement(uri);
- uriAndLocalNames.addElement(localName);
+ uriAndLocalNames.add(uri);
+ uriAndLocalNames.add(localName);
}
handler.setCdataSectionElements(uriAndLocalNames);
}
--- a/jaxp/src/com/sun/org/apache/xerces/internal/dom/EntityReferenceImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/dom/EntityReferenceImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -347,7 +347,7 @@
* @see DocumentTypeImpl
* @see EntityImpl
*/
- // The Xerces parser invokes callbacks for startEnityReference
+ // The Xerces parser invokes callbacks for startEntityReference
// the parsed value of the entity EACH TIME, so it is actually
// easier to create the nodes through the callbacks rather than
// clone the Entity.
--- a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDTDScannerImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDTDScannerImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -585,7 +585,7 @@
boolean reportEntity = fReportEntity;
if (name.startsWith("%")) {
reportEntity = peekReportEntity();
- // check well-formedness of the enity
+ // check well-formedness of the entity
int startMarkUpDepth = popPEStack();
// throw fatalError if this entity was incomplete and
// was a freestanding decl
--- a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -2728,7 +2728,7 @@
//if the last section was character data
if(fLastSectionWasCharacterData){
- //if we dont encounter any CDATA or ENITY REFERENCE and current state is also not SCANNER_STATE_CHARACTER_DATA
+ //if we dont encounter any CDATA or ENTITY REFERENCE and current state is also not SCANNER_STATE_CHARACTER_DATA
//return the last scanned charactrer data.
if((fScannerState != SCANNER_STATE_CDATA) && (fScannerState != SCANNER_STATE_REFERENCE)
&& (fScannerState != SCANNER_STATE_CHARACTER_DATA)){
--- a/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidator.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidator.java Wed Jun 18 13:14:15 2014 -0700
@@ -1218,7 +1218,7 @@
// references appear in the document.
// REVISIT: this can be combined to a single check in
// startEntity if we add one more argument in
- // startEnity, inAttrValue
+ // startEntity, inAttrValue
String nonNormalizedValue = attributes.getNonNormalizedValue(i);
if (nonNormalizedValue != null) {
String entityName = getExternalEntityRefInAttrValue(nonNormalizedValue);
--- a/jaxp/src/com/sun/org/apache/xerces/internal/xpointer/ElementSchemePointer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/xpointer/ElementSchemePointer.java Wed Jun 18 13:14:15 2014 -0700
@@ -559,11 +559,13 @@
* @param token The token string
*/
private void addToken(String tokenStr) {
- if (!fTokenNames.containsValue(tokenStr)) {
- Integer tokenInt = new Integer(fTokenNames.size());
+ String str = fTokenNames.get(tokenStr);
+ Integer tokenInt = str == null ? null : Integer.parseInt(str);
+ if (tokenInt == null) {
+ tokenInt = new Integer(fTokenNames.size());
fTokenNames.put(tokenInt, tokenStr);
- addToken(tokenInt.intValue());
}
+ addToken(tokenInt.intValue());
}
/**
--- a/jaxp/src/com/sun/org/apache/xerces/internal/xpointer/XPointerHandler.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/xpointer/XPointerHandler.java Wed Jun 18 13:14:15 2014 -0700
@@ -524,11 +524,13 @@
* @param token The token string
*/
private void addToken(String tokenStr) {
- if (!fTokenNames.containsValue(tokenStr)) {
- Integer tokenInt = new Integer(fTokenNames.size());
+ String str = fTokenNames.get(tokenStr);
+ Integer tokenInt = str == null ? null : Integer.parseInt(str);
+ if (tokenInt == null) {
+ tokenInt = new Integer(fTokenNames.size());
fTokenNames.put(tokenInt, tokenStr);
- addToken(tokenInt.intValue());
}
+ addToken(tokenInt.intValue());
}
/**
@@ -1251,4 +1253,4 @@
super.setProperty(propertyId, value);
}
-}
+}
\ No newline at end of file
--- a/jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMConfigurationException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMConfigurationException.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
/**
* Create a new <code>DTMConfigurationException</code> with no
- * detail mesage.
+ * detail message.
*/
public DTMConfigurationException() {
super("Configuration Error");
--- a/jaxp/src/com/sun/org/apache/xml/internal/serializer/EmptySerializer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/EmptySerializer.java Wed Jun 18 13:14:15 2014 -0700
@@ -3,9 +3,11 @@
* DO NOT REMOVE OR ALTER!
*/
/*
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -27,7 +29,7 @@
import java.io.Writer;
import java.util.Hashtable;
import java.util.Properties;
-import java.util.Vector;
+import java.util.ArrayList;
import javax.xml.transform.SourceLocator;
import javax.xml.transform.Transformer;
@@ -150,9 +152,9 @@
couldThrowIOException();
}
/**
- * @see SerializationHandler#setCdataSectionElements(java.util.Vector)
+ * @see SerializationHandler#setCdataSectionElements(java.util.ArrayList<String>)
*/
- public void setCdataSectionElements(Vector URI_and_localNames)
+ public void setCdataSectionElements(ArrayList<String> URI_and_localNames)
{
aMethodIsCalled();
}
@@ -763,4 +765,25 @@
aMethodIsCalled();
}
+
+
+ public String getOutputProperty(String name) {
+ aMethodIsCalled();
+ return null;
+ }
+
+ public String getOutputPropertyDefault(String name) {
+ aMethodIsCalled();
+ return null;
+ }
+
+ public void setOutputProperty(String name, String val) {
+ aMethodIsCalled();
+
+ }
+
+ public void setOutputPropertyDefault(String name, String val) {
+ aMethodIsCalled();
+
+ }
}
--- a/jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerBase.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerBase.java Wed Jun 18 13:14:15 2014 -0700
@@ -3,9 +3,11 @@
* DO NOT REMOVE OR ALTER!
*/
/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -23,8 +25,11 @@
package com.sun.org.apache.xml.internal.serializer;
import java.io.IOException;
-import java.util.Vector;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.ArrayList;
+import javax.xml.transform.OutputKeys;
import javax.xml.transform.SourceLocator;
import javax.xml.transform.Transformer;
@@ -108,12 +113,12 @@
/**
* The System ID for the doc type.
*/
- private String m_doctypeSystem;
+ protected String m_doctypeSystem;
/**
* The public ID for the doc type.
*/
- private String m_doctypePublic;
+ protected String m_doctypePublic;
/**
* Flag to tell that we need to add the doctype decl, which we can't do
@@ -122,15 +127,9 @@
boolean m_needToOutputDocTypeDecl = true;
/**
- * The character encoding. Must match the encoding used for the
- * printWriter.
- */
- private String m_encoding = null;
-
- /**
* Tells if we should write the XML declaration.
*/
- private boolean m_shouldNotWriteXMLHeader = false;
+ protected boolean m_shouldNotWriteXMLHeader = false;
/**
* The standalone value for the doctype.
@@ -159,12 +158,12 @@
/**
* Tells the XML version, for writing out to the XML decl.
*/
- private String m_version = null;
+ protected String m_version = null;
/**
* The mediatype. Not used right now.
*/
- private String m_mediatype;
+ protected String m_mediatype;
/**
* The transformer that was around when this output handler was created (if
@@ -173,13 +172,6 @@
private Transformer m_transformer;
/**
- * Pairs of local names and corresponding URIs of CDATA sections. This list
- * comes from the cdata-section-elements attribute. Every second one is a
- * local name, and every other second one is the URI for the local name.
- */
- protected Vector m_cdataSectionElements = null;
-
- /**
* Namespace support, that keeps track of currently defined
* prefix/uri mappings. As processed elements come and go, so do
* the associated mappings for that element.
@@ -538,16 +530,16 @@
*/
public String getEncoding()
{
- return m_encoding;
+ return getOutputProperty(OutputKeys.ENCODING);
}
/**
* Sets the character encoding coming from the xsl:output encoding stylesheet attribute.
* @param m_encoding the character encoding
*/
- public void setEncoding(String m_encoding)
+ public void setEncoding(String encoding)
{
- this.m_encoding = m_encoding;
+ setOutputProperty(OutputKeys.ENCODING,encoding);
}
/**
@@ -557,7 +549,8 @@
*/
public void setOmitXMLDeclaration(boolean b)
{
- this.m_shouldNotWriteXMLHeader = b;
+ String val = b ? "yes":"no";
+ setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,val);
}
@@ -588,7 +581,7 @@
*/
public void setDoctypePublic(String doctypePublic)
{
- this.m_doctypePublic = doctypePublic;
+ setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctypePublic);
}
@@ -610,7 +603,7 @@
*/
public void setDoctypeSystem(String doctypeSystem)
{
- this.m_doctypeSystem = doctypeSystem;
+ setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctypeSystem);
}
/** Set the value coming from the xsl:output doctype-public and doctype-system stylesheet properties
@@ -621,8 +614,8 @@
*/
public void setDoctype(String doctypeSystem, String doctypePublic)
{
- this.m_doctypeSystem = doctypeSystem;
- this.m_doctypePublic = doctypePublic;
+ setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctypeSystem);
+ setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctypePublic);
}
/**
@@ -634,12 +627,9 @@
*/
public void setStandalone(String standalone)
{
- if (standalone != null)
- {
- m_standaloneWasSpecified = true;
- setStandaloneInternal(standalone);
- }
+ setOutputProperty(OutputKeys.STANDALONE, standalone);
}
+
/**
* Sets the XSL standalone attribute, but does not remember if this is a
* default or explicite setting.
@@ -700,7 +690,7 @@
*/
public void setVersion(String version)
{
- m_version = version;
+ setOutputProperty(OutputKeys.VERSION, version);
}
/**
@@ -712,7 +702,7 @@
*/
public void setMediaType(String mediaType)
{
- m_mediatype = mediaType;
+ setOutputProperty(OutputKeys.MEDIA_TYPE,mediaType);
}
/**
@@ -741,7 +731,8 @@
*/
public void setIndent(boolean doIndent)
{
- m_doIndent = doIndent;
+ String val = doIndent ? "yes":"no";
+ setOutputProperty(OutputKeys.INDENT,val);
}
/**
@@ -787,59 +778,6 @@
}
/**
- * Push a boolean state based on if the name of the current element
- * is found in the list of qnames. A state is only pushed if
- * there were some cdata-section-names were specified.
- * <p>
- * Hidden parameters are the vector of qualified elements specified in
- * cdata-section-names attribute, and the m_cdataSectionStates stack
- * onto which whether the current element is in the list is pushed (true or
- * false). Other hidden parameters are the current elements namespaceURI,
- * localName and qName
- */
- protected boolean isCdataSection()
- {
-
- boolean b = false;
-
- if (null != m_cdataSectionElements)
- {
- if (m_elemContext.m_elementLocalName == null)
- m_elemContext.m_elementLocalName =
- getLocalName(m_elemContext.m_elementName);
- if (m_elemContext.m_elementURI == null)
- {
- String prefix = getPrefixPart(m_elemContext.m_elementName);
- if (prefix != null)
- m_elemContext.m_elementURI =
- m_prefixMap.lookupNamespace(prefix);
-
- }
-
- if ((null != m_elemContext.m_elementURI)
- && m_elemContext.m_elementURI.length() == 0)
- m_elemContext.m_elementURI = null;
-
- int nElems = m_cdataSectionElements.size();
-
- // loop through 2 at a time, as these are pairs of URI and localName
- for (int i = 0; i < nElems; i += 2)
- {
- String uri = (String) m_cdataSectionElements.elementAt(i);
- String loc = (String) m_cdataSectionElements.elementAt(i + 1);
- if (loc.equals(m_elemContext.m_elementLocalName)
- && subPartMatch(m_elemContext.m_elementURI, uri))
- {
- b = true;
-
- break;
- }
- }
- }
- return b;
- }
-
- /**
* Tell if two strings are equal, without worry if the first string is null.
*
* @param p String reference, which may be null.
@@ -1312,12 +1250,11 @@
private void resetSerializerBase()
{
this.m_attributes.clear();
- this.m_cdataSectionElements = null;
+ this.m_StringOfCDATASections = null;
this.m_elemContext = new ElemContext();
this.m_doctypePublic = null;
this.m_doctypeSystem = null;
this.m_doIndent = false;
- this.m_encoding = null;
this.m_indentAmount = 0;
this.m_inEntityRef = false;
this.m_inExternalDTD = false;
@@ -1399,4 +1336,333 @@
// A particular sub-class of SerializerBase provides the implementation (if desired)
}
+
+ /**
+ * The CDATA section names stored in a whitespace separateed list with
+ * each element being a word of the form "{uri}localName" This list
+ * comes from the cdata-section-elements attribute.
+ *
+ * This field replaces m_cdataSectionElements Vector.
+ */
+ protected String m_StringOfCDATASections = null;
+
+ boolean m_docIsEmpty = true;
+ void initCdataElems(String s)
+ {
+ if (s != null)
+ {
+ int max = s.length();
+
+ // true if we are in the middle of a pair of curly braces that delimit a URI
+ boolean inCurly = false;
+
+ // true if we found a URI but haven't yet processed the local name
+ boolean foundURI = false;
+
+ StringBuilder buf = new StringBuilder();
+ String uri = null;
+ String localName = null;
+
+ // parse through string, breaking on whitespaces. I do this instead
+ // of a tokenizer so I can track whitespace inside of curly brackets,
+ // which theoretically shouldn't happen if they contain legal URLs.
+ for (int i = 0; i < max; i++)
+ {
+ char c = s.charAt(i);
+
+ if (Character.isWhitespace(c))
+ {
+ if (!inCurly)
+ {
+ if (buf.length() > 0)
+ {
+ localName = buf.toString();
+ if (!foundURI)
+ uri = "";
+ addCDATAElement(uri,localName);
+ buf.setLength(0);
+ foundURI = false;
+ }
+ continue;
+ }
+ else
+ buf.append(c); // add whitespace to the URI
+ }
+ else if ('{' == c) // starting a URI
+ inCurly = true;
+ else if ('}' == c)
+ {
+ // we just ended a URI
+ foundURI = true;
+ uri = buf.toString();
+ buf.setLength(0);
+ inCurly = false;
+ }
+ else
+ {
+ // append non-whitespace, non-curly to current URI or localName being gathered.
+ buf.append(c);
+ }
+
+ }
+
+ if (buf.length() > 0)
+ {
+ // We have one last localName to process.
+ localName = buf.toString();
+ if (!foundURI)
+ uri = "";
+ addCDATAElement(uri,localName);
+ }
+ }
+ }
+
+ protected java.util.HashMap<String, HashMap<String, String>> m_CdataElems = null;
+ private void addCDATAElement(String uri, String localName)
+ {
+ if (m_CdataElems == null) {
+ m_CdataElems = new java.util.HashMap<>();
+ }
+
+ HashMap<String,String> h = m_CdataElems.get(localName);
+ if (h == null) {
+ h = new HashMap<>();
+ m_CdataElems.put(localName,h);
+ }
+ h.put(uri,uri);
+
+ }
+
+
+ /**
+ * Return true if nothing has been sent to this result tree yet.
+ * <p>
+ * This is not a public API.
+ *
+ * @xsl.usage internal
+ */
+ public boolean documentIsEmpty() {
+ // If we haven't called startDocument() yet, then this document is empty
+ return m_docIsEmpty && (m_elemContext.m_currentElemDepth == 0);
+ }
+
+ /**
+ * Return true if the current element in m_elemContext
+ * is a CDATA section.
+ * CDATA sections are specified in the <xsl:output> attribute
+ * cdata-section-names or in the JAXP equivalent property.
+ * In any case the format of the value of such a property is:
+ * <pre>
+ * "{uri1}localName1 {uri2}localName2 . . . "
+ * </pre>
+ *
+ * <p>
+ * This method is not a public API, but is only used internally by the serializer.
+ */
+ protected boolean isCdataSection() {
+ boolean b = false;
+
+ if (null != m_StringOfCDATASections) {
+ if (m_elemContext.m_elementLocalName == null) {
+ String localName = getLocalName(m_elemContext.m_elementName);
+ m_elemContext.m_elementLocalName = localName;
+ }
+
+ if ( m_elemContext.m_elementURI == null) {
+
+ m_elemContext.m_elementURI = getElementURI();
+ }
+ else if ( m_elemContext.m_elementURI.length() == 0) {
+ if ( m_elemContext.m_elementName == null) {
+ m_elemContext.m_elementName = m_elemContext.m_elementLocalName;
+ // leave URI as "", meaning in no namespace
+ }
+ else if (m_elemContext.m_elementLocalName.length() < m_elemContext.m_elementName.length()){
+ // We were told the URI was "", yet the name has a prefix since the name is longer than the localname.
+ // So we will fix that incorrect information here.
+ m_elemContext.m_elementURI = getElementURI();
+ }
+ }
+
+ HashMap<String, String> h = null;
+ if (m_CdataElems != null) {
+ h = m_CdataElems.get(m_elemContext.m_elementLocalName);
+ }
+ if (h != null) {
+ Object obj = h.get(m_elemContext.m_elementURI);
+ if (obj != null)
+ b = true;
+ }
+
+ }
+ return b;
+ }
+
+ /**
+ * Before this call m_elementContext.m_elementURI is null,
+ * which means it is not yet known. After this call it
+ * is non-null, but possibly "" meaning that it is in the
+ * default namespace.
+ *
+ * @return The URI of the element, never null, but possibly "".
+ */
+ private String getElementURI() {
+ String uri = null;
+ // At this point in processing we have received all the
+ // namespace mappings
+ // As we still don't know the elements namespace,
+ // we now figure it out.
+
+ String prefix = getPrefixPart(m_elemContext.m_elementName);
+
+ if (prefix == null) {
+ // no prefix so lookup the URI of the default namespace
+ uri = m_prefixMap.lookupNamespace("");
+ } else {
+ uri = m_prefixMap.lookupNamespace(prefix);
+ }
+ if (uri == null) {
+ // We didn't find the namespace for the
+ // prefix ... ouch, that shouldn't happen.
+ // This is a hack, we really don't know
+ // the namespace
+ uri = EMPTYSTRING;
+ }
+
+ return uri;
+ }
+
+
+ /**
+ * Get the value of an output property,
+ * the explicit value, if any, otherwise the
+ * default value, if any, otherwise null.
+ */
+ public String getOutputProperty(String name) {
+ String val = getOutputPropertyNonDefault(name);
+ // If no explicit value, try to get the default value
+ if (val == null)
+ val = getOutputPropertyDefault(name);
+ return val;
+
+ }
+ /**
+ * Get the value of an output property,
+ * not the default value. If there is a default
+ * value, but no non-default value this method
+ * will return null.
+ * <p>
+ *
+ */
+ public String getOutputPropertyNonDefault(String name) {
+ return getProp(name,false);
+ }
+
+ /**
+ * Get the default value of an xsl:output property,
+ * which would be null only if no default value exists
+ * for the property.
+ */
+ public String getOutputPropertyDefault(String name) {
+ return getProp(name, true);
+ }
+
+ /**
+ * Set the value for the output property, typically from
+ * an xsl:output element, but this does not change what
+ * the default value is.
+ */
+ public void setOutputProperty(String name, String val) {
+ setProp(name,val,false);
+ }
+
+ /**
+ * Set the default value for an output property, but this does
+ * not impact any explicitly set value.
+ */
+ public void setOutputPropertyDefault(String name, String val) {
+ setProp(name,val,true);
+
+ }
+
+ /**
+ * A mapping of keys to explicitly set values, for example if
+ * and <xsl:output/> has an "encoding" attribute, this
+ * map will have what that attribute maps to.
+ */
+ private HashMap<String, String> m_OutputProps;
+ /**
+ * A mapping of keys to default values, for example if
+ * the default value of the encoding is "UTF-8" then this
+ * map will have that "encoding" maps to "UTF-8".
+ */
+ private HashMap<String, String> m_OutputPropsDefault;
+
+ Set<String> getOutputPropDefaultKeys() {
+ return m_OutputPropsDefault.keySet();
+ }
+ Set<String> getOutputPropKeys() {
+ return m_OutputProps.keySet();
+ }
+
+ private String getProp(String name, boolean defaultVal) {
+ if (m_OutputProps == null) {
+ m_OutputProps = new HashMap<>();
+ m_OutputPropsDefault = new HashMap<>();
+ }
+
+ String val;
+ if (defaultVal)
+ val = m_OutputPropsDefault.get(name);
+ else
+ val = m_OutputProps.get(name);
+
+ return val;
+ }
+ /**
+ *
+ * @param name The name of the property, e.g. "{http://myprop}indent-tabs" or "indent".
+ * @param val The value of the property, e.g. "4"
+ * @param defaultVal true if this is a default value being set for the property as
+ * opposed to a user define on, set say explicitly in the stylesheet or via JAXP
+ */
+ void setProp(String name, String val, boolean defaultVal) {
+ if (m_OutputProps == null) {
+ m_OutputProps = new HashMap<>();
+ m_OutputPropsDefault = new HashMap<>();
+ }
+
+ if (defaultVal)
+ m_OutputPropsDefault.put(name,val);
+ else {
+ if (OutputKeys.CDATA_SECTION_ELEMENTS.equals(name) && val != null) {
+ initCdataElems(val);
+ String oldVal = m_OutputProps.get(name);
+ String newVal;
+ if (oldVal == null)
+ newVal = oldVal + ' ' + val;
+ else
+ newVal = val;
+ m_OutputProps.put(name,newVal);
+ }
+ else {
+ m_OutputProps.put(name,val);
+ }
+ }
+ }
+
+ /**
+ * Get the first char of the local name
+ * @param name Either a local name, or a local name
+ * preceeded by a uri enclosed in curly braces.
+ */
+ static char getFirstCharLocName(String name) {
+ final char first;
+ int i = name.indexOf('}');
+ if (i < 0)
+ first = name.charAt(0);
+ else
+ first = name.charAt(i+1);
+ return first;
+ }
}
--- a/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -3,9 +3,11 @@
* DO NOT REMOVE OR ALTER!
*/
/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -349,84 +351,84 @@
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("A");
+ elemDesc = (ElemDesc) m_elementFlags.get("a");
elemDesc.setAttr("HREF", ElemDesc.ATTRURL);
elemDesc.setAttr("NAME", ElemDesc.ATTRURL);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("AREA");
+ elemDesc = (ElemDesc) m_elementFlags.get("area");
elemDesc.setAttr("HREF", ElemDesc.ATTRURL);
elemDesc.setAttr("NOHREF", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("BASE");
+ elemDesc = (ElemDesc) m_elementFlags.get("base");
elemDesc.setAttr("HREF", ElemDesc.ATTRURL);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("BUTTON");
+ elemDesc = (ElemDesc) m_elementFlags.get("button");
elemDesc.setAttr("DISABLED", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("BLOCKQUOTE");
+ elemDesc = (ElemDesc) m_elementFlags.get("blockquote");
elemDesc.setAttr("CITE", ElemDesc.ATTRURL);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("DEL");
+ elemDesc = (ElemDesc) m_elementFlags.get("del");
elemDesc.setAttr("CITE", ElemDesc.ATTRURL);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("DIR");
+ elemDesc = (ElemDesc) m_elementFlags.get("dir");
elemDesc.setAttr("COMPACT", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("DIV");
+ elemDesc = (ElemDesc) m_elementFlags.get("div");
elemDesc.setAttr("SRC", ElemDesc.ATTRURL); // Netscape 4 extension
elemDesc.setAttr("NOWRAP", ElemDesc.ATTREMPTY); // Internet-Explorer extension
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("DL");
+ elemDesc = (ElemDesc) m_elementFlags.get("dl");
elemDesc.setAttr("COMPACT", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("FORM");
+ elemDesc = (ElemDesc) m_elementFlags.get("form");
elemDesc.setAttr("ACTION", ElemDesc.ATTRURL);
// ----------------------------------------------
// Attribution to: "Voytenko, Dimitry" <DVoytenko@SECTORBASE.COM>
- elemDesc = (ElemDesc) m_elementFlags.get("FRAME");
+ elemDesc = (ElemDesc) m_elementFlags.get("frame");
elemDesc.setAttr("SRC", ElemDesc.ATTRURL);
elemDesc.setAttr("LONGDESC", ElemDesc.ATTRURL);
elemDesc.setAttr("NORESIZE",ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("HEAD");
+ elemDesc = (ElemDesc) m_elementFlags.get("head");
elemDesc.setAttr("PROFILE", ElemDesc.ATTRURL);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("HR");
+ elemDesc = (ElemDesc) m_elementFlags.get("hr");
elemDesc.setAttr("NOSHADE", ElemDesc.ATTREMPTY);
// ----------------------------------------------
// HTML 4.0, section 16.5
- elemDesc = (ElemDesc) m_elementFlags.get("IFRAME");
+ elemDesc = (ElemDesc) m_elementFlags.get("iframe");
elemDesc.setAttr("SRC", ElemDesc.ATTRURL);
elemDesc.setAttr("LONGDESC", ElemDesc.ATTRURL);
// ----------------------------------------------
// Netscape 4 extension
- elemDesc = (ElemDesc) m_elementFlags.get("ILAYER");
+ elemDesc = (ElemDesc) m_elementFlags.get("ilayer");
elemDesc.setAttr("SRC", ElemDesc.ATTRURL);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("IMG");
+ elemDesc = (ElemDesc) m_elementFlags.get("img");
elemDesc.setAttr("SRC", ElemDesc.ATTRURL);
elemDesc.setAttr("LONGDESC", ElemDesc.ATTRURL);
elemDesc.setAttr("USEMAP", ElemDesc.ATTRURL);
elemDesc.setAttr("ISMAP", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("INPUT");
+ elemDesc = (ElemDesc) m_elementFlags.get("input");
elemDesc.setAttr("SRC", ElemDesc.ATTRURL);
elemDesc.setAttr("USEMAP", ElemDesc.ATTRURL);
elemDesc.setAttr("CHECKED", ElemDesc.ATTREMPTY);
@@ -435,24 +437,24 @@
elemDesc.setAttr("READONLY", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("INS");
+ elemDesc = (ElemDesc) m_elementFlags.get("ins");
elemDesc.setAttr("CITE", ElemDesc.ATTRURL);
// ----------------------------------------------
// Netscape 4 extension
- elemDesc = (ElemDesc) m_elementFlags.get("LAYER");
+ elemDesc = (ElemDesc) m_elementFlags.get("layer");
elemDesc.setAttr("SRC", ElemDesc.ATTRURL);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("LINK");
+ elemDesc = (ElemDesc) m_elementFlags.get("link");
elemDesc.setAttr("HREF", ElemDesc.ATTRURL);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("MENU");
+ elemDesc = (ElemDesc) m_elementFlags.get("menu");
elemDesc.setAttr("COMPACT", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("OBJECT");
+ elemDesc = (ElemDesc) m_elementFlags.get("object");
elemDesc.setAttr("CLASSID", ElemDesc.ATTRURL);
elemDesc.setAttr("CODEBASE", ElemDesc.ATTRURL);
elemDesc.setAttr("DATA", ElemDesc.ATTRURL);
@@ -461,58 +463,58 @@
elemDesc.setAttr("DECLARE", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("OL");
+ elemDesc = (ElemDesc) m_elementFlags.get("ol");
elemDesc.setAttr("COMPACT", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("OPTGROUP");
+ elemDesc = (ElemDesc) m_elementFlags.get("optgroup");
elemDesc.setAttr("DISABLED", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("OPTION");
+ elemDesc = (ElemDesc) m_elementFlags.get("option");
elemDesc.setAttr("SELECTED", ElemDesc.ATTREMPTY);
elemDesc.setAttr("DISABLED", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("Q");
+ elemDesc = (ElemDesc) m_elementFlags.get("q");
elemDesc.setAttr("CITE", ElemDesc.ATTRURL);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("SCRIPT");
+ elemDesc = (ElemDesc) m_elementFlags.get("script");
elemDesc.setAttr("SRC", ElemDesc.ATTRURL);
elemDesc.setAttr("FOR", ElemDesc.ATTRURL);
elemDesc.setAttr("DEFER", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("SELECT");
+ elemDesc = (ElemDesc) m_elementFlags.get("select");
elemDesc.setAttr("DISABLED", ElemDesc.ATTREMPTY);
elemDesc.setAttr("MULTIPLE", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("TABLE");
+ elemDesc = (ElemDesc) m_elementFlags.get("table");
elemDesc.setAttr("NOWRAP", ElemDesc.ATTREMPTY); // Internet-Explorer extension
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("TD");
+ elemDesc = (ElemDesc) m_elementFlags.get("td");
elemDesc.setAttr("NOWRAP", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("TEXTAREA");
+ elemDesc = (ElemDesc) m_elementFlags.get("textarea");
elemDesc.setAttr("DISABLED", ElemDesc.ATTREMPTY);
elemDesc.setAttr("READONLY", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("TH");
+ elemDesc = (ElemDesc) m_elementFlags.get("th");
elemDesc.setAttr("NOWRAP", ElemDesc.ATTREMPTY);
// ----------------------------------------------
// The nowrap attribute of a tr element is both
// a Netscape and Internet-Explorer extension
- elemDesc = (ElemDesc) m_elementFlags.get("TR");
+ elemDesc = (ElemDesc) m_elementFlags.get("tr");
elemDesc.setAttr("NOWRAP", ElemDesc.ATTREMPTY);
// ----------------------------------------------
- elemDesc = (ElemDesc) m_elementFlags.get("UL");
+ elemDesc = (ElemDesc) m_elementFlags.get("ul");
elemDesc.setAttr("COMPACT", ElemDesc.ATTREMPTY);
}
@@ -1762,7 +1764,7 @@
* lets determine if the current element is specified in the cdata-
* section-elements list.
*/
- if (m_cdataSectionElements != null)
+ if (m_StringOfCDATASections != null)
m_elemContext.m_isCdataSection = isCdataSection();
if (m_doIndent)
{
@@ -1776,55 +1778,8 @@
throw new SAXException(e);
}
}
- /**
- * Initialize the serializer with the specified output stream and output
- * format. Must be called before calling any of the serialize methods.
- *
- * @param output The output stream to use
- * @param format The output format
- * @throws UnsupportedEncodingException The encoding specified in the
- * output format is not supported
- */
- protected synchronized void init(OutputStream output, Properties format)
- throws UnsupportedEncodingException
- {
- if (null == format)
- {
- format = OutputPropertiesFactory.getDefaultMethodProperties(Method.HTML);
- }
- super.init(output,format, false);
- }
/**
- * Specifies an output stream to which the document should be
- * serialized. This method should not be called while the
- * serializer is in the process of serializing a document.
- * <p>
- * The encoding specified in the output properties is used, or
- * if no encoding was specified, the default for the selected
- * output method.
- *
- * @param output The output stream
- */
- public void setOutputStream(OutputStream output)
- {
-
- try
- {
- Properties format;
- if (null == m_format)
- format = OutputPropertiesFactory.getDefaultMethodProperties(Method.HTML);
- else
- format = m_format;
- init(output, format, true);
- }
- catch (UnsupportedEncodingException uee)
- {
-
- // Should have been warned in init, I guess...
- }
- }
- /**
* This method is used when a prefix/uri namespace mapping
* is indicated after the element was started with a
* startElement() and before and endElement().
--- a/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToSAXHandler.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToSAXHandler.java Wed Jun 18 13:14:15 2014 -0700
@@ -22,7 +22,7 @@
*/
package com.sun.org.apache.xml.internal.serializer;
-import java.util.Vector;
+import java.util.ArrayList;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
@@ -234,9 +234,9 @@
/**
* Does nothing. The setting of CDATA section elements has an impact on
* stream serializers.
- * @see SerializationHandler#setCdataSectionElements(java.util.Vector)
+ * @see SerializationHandler#setCdataSectionElements(java.util.ArrayList<String>)
*/
- public void setCdataSectionElements(Vector URI_and_localNames)
+ public void setCdataSectionElements(ArrayList<String> URI_and_localNames)
{
// do nothing
}
--- a/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -3,9 +3,11 @@
* DO NOT REMOVE OR ALTER!
*/
/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -25,11 +27,15 @@
import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
import java.io.IOException;
import java.io.OutputStream;
+import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Iterator;
import java.util.Properties;
+import java.util.Set;
import java.util.StringTokenizer;
-import java.util.Vector;
+import java.util.ArrayList;
import javax.xml.transform.ErrorListener;
import javax.xml.transform.OutputKeys;
@@ -186,9 +192,6 @@
*/
boolean m_isUTF8 = false;
- /** The xsl:output properties. */
- protected Properties m_format;
-
/**
* remembers if we are in between the startCDATA() and endCDATA() callbacks
*/
@@ -306,6 +309,7 @@
}
}
+ OutputStream m_outputStream;
/**
* Get the output stream where the events will be serialized to.
*
@@ -314,13 +318,7 @@
*/
public OutputStream getOutputStream()
{
-
- if (m_writer instanceof WriterToUTF8Buffered)
- return ((WriterToUTF8Buffered) m_writer).getOutputStream();
- if (m_writer instanceof WriterToASCI)
- return ((WriterToASCI) m_writer).getOutputStream();
- else
- return null;
+ return m_outputStream;
}
// Implement DeclHandler
@@ -419,10 +417,174 @@
*/
protected final void outputLineSep() throws IOException
{
-
m_writer.write(m_lineSep, 0, m_lineSepLen);
}
+ void setProp(String name, String val, boolean defaultVal) {
+ if (val != null) {
+
+ char first = getFirstCharLocName(name);
+ switch (first) {
+ case 'c':
+ if (OutputKeys.CDATA_SECTION_ELEMENTS.equals(name)) {
+ addCdataSectionElements(val); // val is cdataSectionNames
+ }
+ break;
+ case 'd':
+ if (OutputKeys.DOCTYPE_SYSTEM.equals(name)) {
+ this.m_doctypeSystem = val;
+ } else if (OutputKeys.DOCTYPE_PUBLIC.equals(name)) {
+ this.m_doctypePublic = val;
+ if (val.startsWith("-//W3C//DTD XHTML"))
+ m_spaceBeforeClose = true;
+ }
+ break;
+ case 'e':
+ String newEncoding = val;
+ if (OutputKeys.ENCODING.equals(name)) {
+ String possible_encoding = Encodings.getMimeEncoding(val);
+ if (possible_encoding != null) {
+ // if the encoding is being set, try to get the
+ // preferred
+ // mime-name and set it too.
+ super.setProp("mime-name", possible_encoding,
+ defaultVal);
+ }
+ final String oldExplicitEncoding = getOutputPropertyNonDefault(OutputKeys.ENCODING);
+ final String oldDefaultEncoding = getOutputPropertyDefault(OutputKeys.ENCODING);
+ if ( (defaultVal && ( oldDefaultEncoding == null || !oldDefaultEncoding.equalsIgnoreCase(newEncoding)))
+ || ( !defaultVal && (oldExplicitEncoding == null || !oldExplicitEncoding.equalsIgnoreCase(newEncoding) ))) {
+ // We are trying to change the default or the non-default setting of the encoding to a different value
+ // from what it was
+
+ EncodingInfo encodingInfo = Encodings.getEncodingInfo(newEncoding);
+ if (newEncoding != null && encodingInfo.name == null) {
+ // We tried to get an EncodingInfo for Object for the given
+ // encoding, but it came back with an internall null name
+ // so the encoding is not supported by the JDK, issue a message.
+ final String msg = Utils.messages.createMessage(
+ MsgKey.ER_ENCODING_NOT_SUPPORTED,new Object[]{ newEncoding });
+
+ final String msg2 =
+ "Warning: encoding \"" + newEncoding + "\" not supported, using "
+ + Encodings.DEFAULT_MIME_ENCODING;
+ try {
+ // Prepare to issue the warning message
+ final Transformer tran = super.getTransformer();
+ if (tran != null) {
+ final ErrorListener errHandler = tran
+ .getErrorListener();
+ // Issue the warning message
+ if (null != errHandler
+ && m_sourceLocator != null) {
+ errHandler
+ .warning(new TransformerException(
+ msg, m_sourceLocator));
+ errHandler
+ .warning(new TransformerException(
+ msg2, m_sourceLocator));
+ } else {
+ System.out.println(msg);
+ System.out.println(msg2);
+ }
+ } else {
+ System.out.println(msg);
+ System.out.println(msg2);
+ }
+ } catch (Exception e) {
+ }
+
+ // We said we are using UTF-8, so use it
+ newEncoding = Encodings.DEFAULT_MIME_ENCODING;
+ val = Encodings.DEFAULT_MIME_ENCODING; // to store the modified value into the properties a little later
+ encodingInfo = Encodings.getEncodingInfo(newEncoding);
+ }
+ // The encoding was good, or was forced to UTF-8 above
+
+
+ // If there is already a non-default set encoding and we
+ // are trying to set the default encoding, skip the this block
+ // as the non-default value is already the one to use.
+ if (defaultVal == false || oldExplicitEncoding == null) {
+ m_encodingInfo = encodingInfo;
+ if (newEncoding != null)
+ m_isUTF8 = newEncoding.equals(Encodings.DEFAULT_MIME_ENCODING);
+
+ // if there was a previously set OutputStream
+ OutputStream os = getOutputStream();
+ if (os != null) {
+ Writer w = getWriter();
+
+ // If the writer was previously set, but
+ // set by the user, or if the new encoding is the same
+ // as the old encoding, skip this block
+ String oldEncoding = getOutputProperty(OutputKeys.ENCODING);
+ if ((w == null || !m_writer_set_by_user)
+ && !newEncoding.equalsIgnoreCase(oldEncoding)) {
+ // Make the change of encoding in our internal
+ // table, then call setOutputStreamInternal
+ // which will stomp on the old Writer (if any)
+ // with a new Writer with the new encoding.
+ super.setProp(name, val, defaultVal);
+ setOutputStreamInternal(os,false);
+ }
+ }
+ }
+ }
+ }
+ break;
+ case 'i':
+ if (OutputPropertiesFactory.S_KEY_INDENT_AMOUNT.equals(name)) {
+ setIndentAmount(Integer.parseInt(val));
+ } else if (OutputKeys.INDENT.equals(name)) {
+ boolean b = "yes".equals(val) ? true : false;
+ m_doIndent = b;
+ }
+
+ break;
+ case 'l':
+ if (OutputPropertiesFactory.S_KEY_LINE_SEPARATOR.equals(name)) {
+ m_lineSep = val.toCharArray();
+ m_lineSepLen = m_lineSep.length;
+ }
+
+ break;
+ case 'm':
+ if (OutputKeys.MEDIA_TYPE.equals(name)) {
+ m_mediatype = val;
+ }
+ break;
+ case 'o':
+ if (OutputKeys.OMIT_XML_DECLARATION.equals(name)) {
+ boolean b = "yes".equals(val) ? true : false;
+ this.m_shouldNotWriteXMLHeader = b;
+ }
+ break;
+ case 's':
+ // if standalone was explicitly specified
+ if (OutputKeys.STANDALONE.equals(name)) {
+ if (defaultVal) {
+ setStandaloneInternal(val);
+ } else {
+ m_standaloneWasSpecified = true;
+ setStandaloneInternal(val);
+ }
+ }
+
+ break;
+ case 'v':
+ if (OutputKeys.VERSION.equals(name)) {
+ m_version = val;
+ }
+ break;
+ default:
+ break;
+
+ }
+ super.setProp(name, val, defaultVal);
+ }
+ }
+
/**
* Specifies an output format for this serializer. It the
* serializer has already been associated with an output format,
@@ -434,115 +596,34 @@
*/
public void setOutputFormat(Properties format)
{
-
boolean shouldFlush = m_shouldFlush;
- init(m_writer, format, false, false);
-
- m_shouldFlush = shouldFlush;
- }
-
- /**
- * Initialize the serializer with the specified writer and output format.
- * Must be called before calling any of the serialize methods.
- * This method can be called multiple times and the xsl:output properties
- * passed in the 'format' parameter are accumulated across calls.
- *
- * @param writer The writer to use
- * @param format The output format
- * @param shouldFlush True if the writer should be flushed at EndDocument.
- */
- private synchronized void init(
- Writer writer,
- Properties format,
- boolean defaultProperties,
- boolean shouldFlush)
- {
-
- m_shouldFlush = shouldFlush;
-
-
- // if we are tracing events we need to trace what
- // characters are written to the output writer.
- if (m_tracer != null
- && !(writer instanceof SerializerTraceWriter) )
- m_writer = new SerializerTraceWriter(writer, m_tracer);
- else
- m_writer = writer;
-
-
- m_format = format;
- // m_cdataSectionNames =
- // OutputProperties.getQNameProperties(
- // OutputKeys.CDATA_SECTION_ELEMENTS,
- // format);
- setCdataSectionElements(OutputKeys.CDATA_SECTION_ELEMENTS, format);
-
- setIndentAmount(
- OutputPropertyUtils.getIntProperty(
- OutputPropertiesFactory.S_KEY_INDENT_AMOUNT,
- format));
- setIndent(
- OutputPropertyUtils.getBooleanProperty(OutputKeys.INDENT, format));
-
+ if (format != null)
{
- String sep =
- format.getProperty(OutputPropertiesFactory.S_KEY_LINE_SEPARATOR);
- if (sep != null) {
- m_lineSep = sep.toCharArray();
- m_lineSepLen = sep.length();
+ // Set the default values first,
+ // and the non-default values after that,
+ // just in case there is some unexpected
+ // residual values left over from over-ridden default values
+ Enumeration propNames;
+ propNames = format.propertyNames();
+ while (propNames.hasMoreElements())
+ {
+ String key = (String) propNames.nextElement();
+ // Get the value, possibly a default value
+ String value = format.getProperty(key);
+ // Get the non-default value (if any).
+ String explicitValue = (String) format.get(key);
+ if (explicitValue == null && value != null) {
+ // This is a default value
+ this.setOutputPropertyDefault(key,value);
+ }
+ if (explicitValue != null) {
+ // This is an explicit non-default value
+ this.setOutputProperty(key,explicitValue);
+ }
}
}
- boolean shouldNotWriteXMLHeader =
- OutputPropertyUtils.getBooleanProperty(
- OutputKeys.OMIT_XML_DECLARATION,
- format);
- setOmitXMLDeclaration(shouldNotWriteXMLHeader);
- setDoctypeSystem(format.getProperty(OutputKeys.DOCTYPE_SYSTEM));
- String doctypePublic = format.getProperty(OutputKeys.DOCTYPE_PUBLIC);
- setDoctypePublic(doctypePublic);
-
- // if standalone was explicitly specified
- if (format.get(OutputKeys.STANDALONE) != null)
- {
- String val = format.getProperty(OutputKeys.STANDALONE);
- if (defaultProperties)
- setStandaloneInternal(val);
- else
- setStandalone(val);
- }
-
- setMediaType(format.getProperty(OutputKeys.MEDIA_TYPE));
-
- if (null != doctypePublic)
- {
- if (doctypePublic.startsWith("-//W3C//DTD XHTML"))
- m_spaceBeforeClose = true;
- }
-
- /*
- * This code is added for XML 1.1 Version output.
- */
- String version = getVersion();
- if (null == version)
- {
- version = format.getProperty(OutputKeys.VERSION);
- setVersion(version);
- }
-
- // initCharsMap();
- String encoding = getEncoding();
- if (null == encoding)
- {
- encoding =
- Encodings.getMimeEncoding(
- format.getProperty(OutputKeys.ENCODING));
- setEncoding(encoding);
- }
-
- m_isUTF8 = encoding.equals(Encodings.DEFAULT_MIME_ENCODING);
-
// Access this only from the Hashtable level... we don't want to
// get default properties.
String entitiesFileName =
@@ -557,107 +638,10 @@
m_charInfo = CharInfo.getCharInfo(entitiesFileName, method);
}
- }
-
- /**
- * Initialize the serializer with the specified writer and output format.
- * Must be called before calling any of the serialize methods.
- *
- * @param writer The writer to use
- * @param format The output format
- */
- private synchronized void init(Writer writer, Properties format)
- {
- init(writer, format, false, false);
- }
- /**
- * Initialize the serializer with the specified output stream and output
- * format. Must be called before calling any of the serialize methods.
- *
- * @param output The output stream to use
- * @param format The output format
- * @param defaultProperties true if the properties are the default
- * properties
- *
- * @throws UnsupportedEncodingException The encoding specified in the
- * output format is not supported
- */
- protected synchronized void init(
- OutputStream output,
- Properties format,
- boolean defaultProperties)
- throws UnsupportedEncodingException
- {
-
- String encoding = getEncoding();
- if (encoding == null)
- {
- // if not already set then get it from the properties
- encoding =
- Encodings.getMimeEncoding(
- format.getProperty(OutputKeys.ENCODING));
- setEncoding(encoding);
- }
-
- if (encoding.equalsIgnoreCase("UTF-8"))
- {
- m_isUTF8 = true;
- // if (output instanceof java.io.BufferedOutputStream)
- // {
- // init(new WriterToUTF8(output), format, defaultProperties, true);
- // }
- // else if (output instanceof java.io.FileOutputStream)
- // {
- // init(new WriterToUTF8Buffered(output), format, defaultProperties, true);
- // }
- // else
- // {
- // // Not sure what to do in this case. I'm going to be conservative
- // // and not buffer.
- // init(new WriterToUTF8(output), format, defaultProperties, true);
- // }
-
-
- init(
- new WriterToUTF8Buffered(output),
- format,
- defaultProperties,
- true);
-
-
- }
- else if (
- encoding.equals("WINDOWS-1250")
- || encoding.equals("US-ASCII")
- || encoding.equals("ASCII"))
- {
- init(new WriterToASCI(output), format, defaultProperties, true);
- }
- else
- {
- Writer osw;
-
- try
- {
- osw = Encodings.getWriter(output, encoding);
- }
- catch (UnsupportedEncodingException uee)
- {
- System.out.println(
- "Warning: encoding \""
- + encoding
- + "\" not supported"
- + ", using "
- + Encodings.DEFAULT_MIME_ENCODING);
-
- encoding = Encodings.DEFAULT_MIME_ENCODING;
- setEncoding(encoding);
- osw = Encodings.getWriter(output, encoding);
- }
-
- init(osw, format, defaultProperties, true);
- }
-
+
+
+
+ m_shouldFlush = shouldFlush;
}
/**
@@ -665,9 +649,26 @@
*
* @return The output format in use
*/
- public Properties getOutputFormat()
- {
- return m_format;
+ public Properties getOutputFormat() {
+ Properties def = new Properties();
+ {
+ Set<String> s = getOutputPropDefaultKeys();
+ for (String key : s) {
+ String val = getOutputPropertyDefault(key);
+ def.put(key, val);
+ }
+ }
+
+ Properties props = new Properties(def);
+ {
+ Set<String> s = getOutputPropKeys();
+ for (String key : s) {
+ String val = getOutputPropertyNonDefault(key);
+ if (val != null)
+ props.put(key, val);
+ }
+ }
+ return props;
}
/**
@@ -679,13 +680,28 @@
*/
public void setWriter(Writer writer)
{
+ setWriterInternal(writer, true);
+ }
+
+ private boolean m_writer_set_by_user;
+ private void setWriterInternal(Writer writer, boolean setByUser) {
+ m_writer_set_by_user = setByUser;
+ m_writer = writer;
// if we are tracing events we need to trace what
// characters are written to the output writer.
- if (m_tracer != null
- && !(writer instanceof SerializerTraceWriter) )
- m_writer = new SerializerTraceWriter(writer, m_tracer);
- else
- m_writer = writer;
+ if (m_tracer != null) {
+ boolean noTracerYet = true;
+ Writer w2 = m_writer;
+ while (w2 instanceof WriterChain) {
+ if (w2 instanceof SerializerTraceWriter) {
+ noTracerYet = false;
+ break;
+ }
+ w2 = ((WriterChain)w2).getWriter();
+ }
+ if (noTracerYet)
+ m_writer = new SerializerTraceWriter(m_writer, m_tracer);
+ }
}
/**
@@ -720,25 +736,68 @@
*/
public void setOutputStream(OutputStream output)
{
-
- try
+ setOutputStreamInternal(output, true);
+ }
+
+ private void setOutputStreamInternal(OutputStream output, boolean setByUser)
+ {
+ m_outputStream = output;
+ String encoding = getOutputProperty(OutputKeys.ENCODING);
+ if (Encodings.DEFAULT_MIME_ENCODING.equalsIgnoreCase(encoding))
+ {
+ // We wrap the OutputStream with a writer, but
+ // not one set by the user
+ try {
+ setWriterInternal(new WriterToUTF8Buffered(output), false);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ } else if (
+ "WINDOWS-1250".equals(encoding)
+ || "US-ASCII".equals(encoding)
+ || "ASCII".equals(encoding))
{
- Properties format;
- if (null == m_format)
- format =
- OutputPropertiesFactory.getDefaultMethodProperties(
- Method.XML);
- else
- format = m_format;
- init(output, format, true);
+ setWriterInternal(new WriterToASCI(output), false);
+ } else if (encoding != null) {
+ Writer osw = null;
+ try
+ {
+ osw = Encodings.getWriter(output, encoding);
+ }
+ catch (UnsupportedEncodingException uee)
+ {
+ osw = null;
+ }
+
+
+ if (osw == null) {
+ System.out.println(
+ "Warning: encoding \""
+ + encoding
+ + "\" not supported"
+ + ", using "
+ + Encodings.DEFAULT_MIME_ENCODING);
+
+ encoding = Encodings.DEFAULT_MIME_ENCODING;
+ setEncoding(encoding);
+ try {
+ osw = Encodings.getWriter(output, encoding);
+ } catch (UnsupportedEncodingException e) {
+ // We can't really get here, UTF-8 is always supported
+ // This try-catch exists to make the compiler happy
+ e.printStackTrace();
+ }
+ }
+ setWriterInternal(osw,false);
}
- catch (UnsupportedEncodingException uee)
- {
-
- // Should have been warned in init, I guess...
+ else {
+ // don't have any encoding, but we have an OutputStream
+ Writer osw = new OutputStreamWriter(output);
+ setWriterInternal(osw,false);
}
}
+
/**
* @see SerializationHandler#setEscaping(boolean)
*/
@@ -2455,7 +2514,7 @@
* lets determine if the current element is specified in the cdata-
* section-elements list.
*/
- if (m_cdataSectionElements != null)
+ if (m_StringOfCDATASections != null)
m_elemContext.m_isCdataSection = isCdataSection();
if (m_doIndent)
@@ -2532,12 +2591,12 @@
* @param key the property key.
* @param props the list of properties to search in.
*
- * Sets the vector of local-name/URI pairs of the cdata section elements
+ * Sets the ArrayList of local-name/URI pairs of the cdata section elements
* specified in the cdata-section-elements property.
*
* This method is essentially a copy of getQNameProperties() from
* OutputProperties. Eventually this method should go away and a call
- * to setCdataSectionElements(Vector v) should be made directly.
+ * to setCdataSectionElements(ArrayList<String> v) should be made directly.
*/
private void setCdataSectionElements(String key, Properties props)
{
@@ -2546,11 +2605,11 @@
if (null != s)
{
- // Vector of URI/LocalName pairs
- Vector v = new Vector();
+ // ArrayList<String> of URI/LocalName pairs
+ ArrayList<String> v = new ArrayList<>();
int l = s.length();
boolean inCurly = false;
- StringBuffer buf = new StringBuffer();
+ StringBuilder buf = new StringBuilder();
// parse through string, breaking on whitespaces. I do this instead
// of a tokenizer so I can track whitespace inside of curly brackets,
@@ -2597,7 +2656,7 @@
*
* @return a QName object
*/
- private void addCdataSectionElement(String URI_and_localName, Vector v)
+ private void addCdataSectionElement(String URI_and_localName, ArrayList<String> v)
{
StringTokenizer tokenizer =
@@ -2608,14 +2667,14 @@
if (null == s2)
{
// add null URI and the local name
- v.addElement(null);
- v.addElement(s1);
+ v.add(null);
+ v.add(s1);
}
else
{
// add URI, then local name
- v.addElement(s1);
- v.addElement(s2);
+ v.add(s1);
+ v.add(s2);
}
}
@@ -2624,11 +2683,38 @@
* The "official way to set URI and localName pairs.
* This method should be used by both Xalan and XSLTC.
*
- * @param URI_and_localNames a vector of pairs of Strings (URI/local)
+ * @param URI_and_localNames an ArrayList of pairs of Strings (URI/local)
*/
- public void setCdataSectionElements(Vector URI_and_localNames)
+ public void setCdataSectionElements(ArrayList<String> URI_and_localNames)
{
- m_cdataSectionElements = URI_and_localNames;
+ // convert to the new way.
+ if (URI_and_localNames != null)
+ {
+ final int len = URI_and_localNames.size() - 1;
+ if (len > 0)
+ {
+ final StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < len; i += 2)
+ {
+ // whitspace separated "{uri1}local1 {uri2}local2 ..."
+ if (i != 0)
+ sb.append(' ');
+ final String uri = (String) URI_and_localNames.get(i);
+ final String localName =
+ (String) URI_and_localNames.get(i + 1);
+ if (uri != null)
+ {
+ // If there is no URI don't put this in, just the localName then.
+ sb.append('{');
+ sb.append(uri);
+ sb.append('}');
+ }
+ sb.append(localName);
+ }
+ m_StringOfCDATASections = sb.toString();
+ }
+ }
+ initCdataElems(m_StringOfCDATASections);
}
/**
@@ -3084,37 +3170,7 @@
*/
public void setEncoding(String encoding)
{
- String old = getEncoding();
- super.setEncoding(encoding);
- if (old == null || !old.equals(encoding)) {
- // If we have changed the setting of the
- m_encodingInfo = Encodings.getEncodingInfo(encoding);
-
- if (encoding != null && m_encodingInfo.name == null) {
- // We tried to get an EncodingInfo for Object for the given
- // encoding, but it came back with an internall null name
- // so the encoding is not supported by the JDK, issue a message.
- String msg = Utils.messages.createMessage(
- MsgKey.ER_ENCODING_NOT_SUPPORTED,new Object[]{ encoding });
- try
- {
- // Prepare to issue the warning message
- Transformer tran = super.getTransformer();
- if (tran != null) {
- ErrorListener errHandler = tran.getErrorListener();
- // Issue the warning message
- if (null != errHandler && m_sourceLocator != null)
- errHandler.warning(new TransformerException(msg, m_sourceLocator));
- else
- System.out.println(msg);
- }
- else
- System.out.println(msg);
- }
- catch (Exception e){}
- }
- }
- return;
+ setOutputProperty(OutputKeys.ENCODING,encoding);
}
/**
@@ -3386,4 +3442,24 @@
public void setDTDEntityExpansion(boolean expand) {
m_expandDTDEntities = expand;
}
+
+ /**
+ * Remembers the cdata sections specified in the cdata-section-elements by appending the given
+ * cdata section elements to the list. This method can be called multiple times, but once an
+ * element is put in the list of cdata section elements it can not be removed.
+ * This method should be used by both Xalan and XSLTC.
+ *
+ * @param URI_and_localNames a whitespace separated list of element names, each element
+ * is a URI in curly braces (optional) and a local name. An example of such a parameter is:
+ * "{http://company.com}price {myURI2}book chapter"
+ */
+ public void addCdataSectionElements(String URI_and_localNames)
+ {
+ if (URI_and_localNames != null)
+ initCdataElems(URI_and_localNames);
+ if (m_StringOfCDATASections == null)
+ m_StringOfCDATASections = URI_and_localNames;
+ else
+ m_StringOfCDATASections += (" " + URI_and_localNames);
+ }
}
--- a/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToUnknownStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToUnknownStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -26,7 +26,7 @@
import java.io.OutputStream;
import java.io.Writer;
import java.util.Properties;
-import java.util.Vector;
+import java.util.ArrayList;
import javax.xml.transform.SourceLocator;
import javax.xml.transform.Transformer;
@@ -100,12 +100,12 @@
* A collection of namespace URI's (only for first element).
* _namespacePrefix has the matching prefix for these URI's
*/
- private Vector m_namespaceURI = null;
+ private ArrayList<String> m_namespaceURI = null;
/**
* A collection of namespace Prefix (only for first element)
* _namespaceURI has the matching URIs for these prefix'
*/
- private Vector m_namespacePrefix = null;
+ private ArrayList<String> m_namespacePrefix = null;
/**
* true if startDocument() was called before the underlying handler
@@ -421,11 +421,11 @@
{
if (m_namespacePrefix == null)
{
- m_namespacePrefix = new Vector();
- m_namespaceURI = new Vector();
+ m_namespacePrefix = new ArrayList<>();
+ m_namespaceURI = new ArrayList<>();
}
- m_namespacePrefix.addElement(prefix);
- m_namespaceURI.addElement(uri);
+ m_namespacePrefix.add(prefix);
+ m_namespaceURI.add(uri);
if (m_firstElementURI == null)
{
@@ -1092,8 +1092,8 @@
for (int i = 0; i < n; i++)
{
final String prefix =
- (String) m_namespacePrefix.elementAt(i);
- final String uri = (String) m_namespaceURI.elementAt(i);
+ (String) m_namespacePrefix.get(i);
+ final String uri = (String) m_namespaceURI.get(i);
m_handler.startPrefixMapping(prefix, uri, false);
}
m_namespacePrefix = null;
@@ -1165,8 +1165,8 @@
final int max = m_namespacePrefix.size();
for (int i = 0; i < max; i++)
{
- final String prefix = (String) m_namespacePrefix.elementAt(i);
- final String uri = (String) m_namespaceURI.elementAt(i);
+ final String prefix = m_namespacePrefix.get(i);
+ final String uri = m_namespaceURI.get(i);
if (m_firstElementPrefix != null
&& m_firstElementPrefix.equals(prefix)
@@ -1194,7 +1194,7 @@
* specified in the cdata-section-elements attribute.
* @see SerializationHandler#setCdataSectionElements(java.util.Vector)
*/
- public void setCdataSectionElements(Vector URI_and_localNames)
+ public void setCdataSectionElements(ArrayList<String> URI_and_localNames)
{
m_handler.setCdataSectionElements(URI_and_localNames);
}
--- a/jaxp/src/com/sun/org/apache/xml/internal/serializer/WriterToUTF8Buffered.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/WriterToUTF8Buffered.java Wed Jun 18 13:14:15 2014 -0700
@@ -3,9 +3,11 @@
* DO NOT REMOVE OR ALTER!
*/
/*
- * Copyright 1999-2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
--- a/jaxp/src/com/sun/org/apache/xml/internal/serializer/XSLOutputAttributes.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/XSLOutputAttributes.java Wed Jun 18 13:14:15 2014 -0700
@@ -3,9 +3,11 @@
* DO NOT REMOVE OR ALTER!
*/
/*
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -22,7 +24,7 @@
*/
package com.sun.org.apache.xml.internal.serializer;
-import java.util.Vector;
+import java.util.ArrayList;
/**
* This interface has methods associated with the XSLT xsl:output attribues
@@ -105,11 +107,6 @@
*/
public String getVersion();
-
-
-
-
-
/**
* Sets the value coming from the xsl:output cdata-section-elements
* stylesheet property.
@@ -124,7 +121,7 @@
* relevant in specifying which elements have their text to be output as
* CDATA sections.
*/
- public void setCdataSectionElements(Vector URI_and_localNames);
+ public void setCdataSectionElements(ArrayList<String> URI_and_localNames);
/** Set the value coming from the xsl:output doctype-public and doctype-system stylesheet properties
* @param system the system identifier to be used in the DOCTYPE declaration
@@ -181,4 +178,58 @@
*/
public void setVersion(String version);
+ /**
+ * Get the value for a property that affects seraialization,
+ * if a property was set return that value, otherwise return
+ * the default value, otherwise return null.
+ * @param name The name of the property, which is just the local name
+ * if it is in no namespace, but is the URI in curly braces followed by
+ * the local name if it is in a namespace, for example:
+ * <ul>
+ * <li> "encoding"
+ * <li> "method"
+ * <li> "{http://xml.apache.org/xalan}indent-amount"
+ * <li> "{http://xml.apache.org/xalan}line-separator"
+ * </ul>
+ * @return The value of the parameter
+ */
+ public String getOutputProperty(String name);
+ /**
+ * Get the default value for a property that affects seraialization,
+ * or null if there is none. It is possible that a non-default value
+ * was set for the property, however the value returned by this method
+ * is unaffected by any non-default settings.
+ * @param name The name of the property.
+ * @return The default value of the parameter, or null if there is no default value.
+ */
+ public String getOutputPropertyDefault(String name);
+ /**
+ * Set the non-default value for a property that affects seraialization.
+ * @param name The name of the property, which is just the local name
+ * if it is in no namespace, but is the URI in curly braces followed by
+ * the local name if it is in a namespace, for example:
+ * <ul>
+ * <li> "encoding"
+ * <li> "method"
+ * <li> "{http://xml.apache.org/xalan}indent-amount"
+ * <li> "{http://xml.apache.org/xalan}line-separator"
+ * </ul>
+ * @val The non-default value of the parameter
+ */
+ public void setOutputProperty(String name, String val);
+
+ /**
+ * Set the default value for a property that affects seraialization.
+ * @param name The name of the property, which is just the local name
+ * if it is in no namespace, but is the URI in curly braces followed by
+ * the local name if it is in a namespace, for example:
+ * <ul>
+ * <li> "encoding"
+ * <li> "method"
+ * <li> "{http://xml.apache.org/xalan}indent-amount"
+ * <li> "{http://xml.apache.org/xalan}line-separator"
+ * </ul>
+ * @val The default value of the parameter
+ */
+ public void setOutputPropertyDefault(String name, String val);
}
--- a/jaxp/src/com/sun/xml/internal/stream/Entity.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/xml/internal/stream/Entity.java Wed Jun 18 13:14:15 2014 -0700
@@ -352,7 +352,7 @@
}
/**each 'external' parsed entity may have xml/text declaration containing version information
- * @return String version of the enity, for an internal entity version would be null
+ * @return String version of the entity, for an internal entity version would be null
*/
public String getEntityVersion(){
return version ;
--- a/jaxp/src/com/sun/xml/internal/stream/StaxXMLInputSource.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/com/sun/xml/internal/stream/StaxXMLInputSource.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
* @author Neeraj
*
* This class wraps XMLInputSource and is also capable of telling wether application
- * returned XMLStreamReader or not when XMLResolver.resolveEnity
+ * returned XMLStreamReader or not when XMLResolver.resolveEntity
* was called.
*/
public class StaxXMLInputSource {
--- a/jaxp/src/javax/xml/datatype/DatatypeConfigurationException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/javax/xml/datatype/DatatypeConfigurationException.java Wed Jun 18 13:14:15 2014 -0700
@@ -36,7 +36,7 @@
/**
* <p>Create a new <code>DatatypeConfigurationException</code> with
- * no specified detail mesage and cause.</p>
+ * no specified detail message and cause.</p>
*/
public DatatypeConfigurationException() {
--- a/jaxp/src/javax/xml/datatype/DatatypeFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/javax/xml/datatype/DatatypeFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -119,7 +119,7 @@
Pattern.compile("[^YM]*[DT].*");
/**
- * <p>Protected constructor to prevent instaniation outside of package.</p>
+ * <p>Protected constructor to prevent instantiation outside of package.</p>
*
* <p>Use {@link #newInstance()} to create a <code>DatatypeFactory</code>.</p>
*/
--- a/jaxp/src/javax/xml/namespace/QName.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/javax/xml/namespace/QName.java Wed Jun 18 13:14:15 2014 -0700
@@ -83,7 +83,7 @@
*
* <p>To workaround this issue, serialVersionUID is set with either
* a default value or a compatibility value. To use the
- * compatiblity value, set the system property:</p>
+ * compatibility value, set the system property:</p>
*
* <code>com.sun.xml.namespace.QName.useCompatibleSerialVersionUID=1.0</code>
*
--- a/jaxp/src/javax/xml/parsers/DocumentBuilderFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/javax/xml/parsers/DocumentBuilderFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -423,7 +423,7 @@
* <ul>
* <li>
* <code>true</code>: the implementation will limit XML processing to conform to implementation limits.
- * Examples include enity expansion limits and XML Schema constructs that would consume large amounts of resources.
+ * Examples include entity expansion limits and XML Schema constructs that would consume large amounts of resources.
* If XML processing is limited for security reasons, it will be reported via a call to the registered
* {@link org.xml.sax.ErrorHandler#fatalError(SAXParseException exception)}.
* See {@link DocumentBuilder#setErrorHandler(org.xml.sax.ErrorHandler errorHandler)}.
@@ -517,7 +517,7 @@
* modified DOM trees.
*
* <p>
- * Initialy, null is set as the {@link Schema}.
+ * Initially, null is set as the {@link Schema}.
*
* <p>
* This processing will take effect even if
@@ -531,7 +531,7 @@
* exception when the {@link #newDocumentBuilder()} is invoked.</p>
*
*
- * <h4>Note for implmentors</h4>
+ * <h4>Note for implementors</h4>
*
* <p>
* A parser must be able to work with any {@link Schema}
--- a/jaxp/src/javax/xml/parsers/FactoryConfigurationError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/javax/xml/parsers/FactoryConfigurationError.java Wed Jun 18 13:14:15 2014 -0700
@@ -45,7 +45,7 @@
/**
* Create a new <code>FactoryConfigurationError</code> with no
- * detail mesage.
+ * detail message.
*/
public FactoryConfigurationError() {
--- a/jaxp/src/javax/xml/parsers/ParserConfigurationException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/javax/xml/parsers/ParserConfigurationException.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
/**
* Create a new <code>ParserConfigurationException</code> with no
- * detail mesage.
+ * detail message.
*/
public ParserConfigurationException() {
--- a/jaxp/src/javax/xml/parsers/SAXParser.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/javax/xml/parsers/SAXParser.java Wed Jun 18 13:14:15 2014 -0700
@@ -69,7 +69,7 @@
* given {@link org.xml.sax.HandlerBase} or the
* {@link org.xml.sax.helpers.DefaultHandler} are called.<p>
*
- * Implementors of this class which wrap an underlaying implementation
+ * Implementors of this class which wrap an underlying implementation
* can consider using the {@link org.xml.sax.helpers.ParserAdapter}
* class to initially adapt their SAX1 implementation to work under
* this revised class.
@@ -79,7 +79,7 @@
public abstract class SAXParser {
/**
- * <p>Protected constructor to prevent instaniation.
+ * <p>Protected constructor to prevent instantiation.
* Use {@link javax.xml.parsers.SAXParserFactory#newSAXParser()}.</p>
*/
protected SAXParser () {
@@ -393,10 +393,10 @@
}
/**
- * Returns the SAX parser that is encapsultated by the
+ * Returns the SAX parser that is encapsulated by the
* implementation of this class.
*
- * @return The SAX parser that is encapsultated by the
+ * @return The SAX parser that is encapsulated by the
* implementation of this class.
*
* @throws SAXException If any SAX errors occur during processing.
--- a/jaxp/src/javax/xml/parsers/SAXParserFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/javax/xml/parsers/SAXParserFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -359,7 +359,7 @@
* is responsible to make sure that the application will receive
* those modified event stream.</p>
*
- * <p>Initialy, <code>null</code> is set as the {@link Schema}.</p>
+ * <p>Initially, <code>null</code> is set as the {@link Schema}.</p>
*
* <p>This processing will take effect even if
* the {@link #isValidating()} method returns <code>false</code>.
--- a/jaxp/src/javax/xml/transform/ErrorListener.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/javax/xml/transform/ErrorListener.java Wed Jun 18 13:14:15 2014 -0700
@@ -28,7 +28,7 @@
/**
* <p>To provide customized error handling, implement this interface and
* use the <code>setErrorListener</code> method to register an instance of the
- * implmentation with the {@link javax.xml.transform.Transformer}. The
+ * implementation with the {@link javax.xml.transform.Transformer}. The
* <code>Transformer</code> then reports all errors and warnings through this
* interface.</p>
*
--- a/jaxp/src/javax/xml/transform/TransformerConfigurationException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/javax/xml/transform/TransformerConfigurationException.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
/**
* Create a new <code>TransformerConfigurationException</code> with no
- * detail mesage.
+ * detail message.
*/
public TransformerConfigurationException() {
super("Configuration Error");
--- a/jaxp/src/javax/xml/transform/TransformerFactoryConfigurationError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/javax/xml/transform/TransformerFactoryConfigurationError.java Wed Jun 18 13:14:15 2014 -0700
@@ -42,7 +42,7 @@
/**
* Create a new <code>TransformerFactoryConfigurationError</code> with no
- * detail mesage.
+ * detail message.
*/
public TransformerFactoryConfigurationError() {
--- a/jaxp/src/javax/xml/validation/SchemaFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/javax/xml/validation/SchemaFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -358,7 +358,7 @@
* <ul>
* <li>
* <code>true</code>: the implementation will limit XML processing to conform to implementation limits.
- * Examples include enity expansion limits and XML Schema constructs that would consume large amounts of resources.
+ * Examples include entity expansion limits and XML Schema constructs that would consume large amounts of resources.
* If XML processing is limited for security reasons, it will be reported via a call to the registered
* {@link ErrorHandler#fatalError(SAXParseException exception)}.
* See {@link #setErrorHandler(ErrorHandler errorHandler)}.
--- a/jaxp/src/javax/xml/validation/ValidatorHandler.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxp/src/javax/xml/validation/ValidatorHandler.java Wed Jun 18 13:14:15 2014 -0700
@@ -379,7 +379,7 @@
* <ul>
* <li>
* <code>true</code>: the implementation will limit XML processing to conform to implementation limits.
- * Examples include enity expansion limits and XML Schema constructs that would consume large amounts of resources.
+ * Examples include entity expansion limits and XML Schema constructs that would consume large amounts of resources.
* If XML processing is limited for security reasons, it will be reported via a call to the registered
* {@link ErrorHandler#fatalError(SAXParseException exception)}.
* See {@link #setErrorHandler(ErrorHandler errorHandler)}.
--- a/jaxws/.hgtags Wed Jun 11 10:53:27 2014 +0400
+++ b/jaxws/.hgtags Wed Jun 18 13:14:15 2014 -0700
@@ -262,3 +262,5 @@
02e58850b7062825308413d420f2b02c1f25a724 jdk9-b14
e9780330017a6b464a385356d77e5136f9de8d09 jdk9-b15
1e1a3b2215b7551d88e89d1ca8c1e1ebe3d3c0ab jdk9-b16
+6b159e727dac283f424b7d19f5be3ddd9f85acf5 jdk9-b17
+275f2385aed80c84297840638d58656366350c58 jdk9-b18
--- a/jdk/.hgtags Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/.hgtags Wed Jun 18 13:14:15 2014 -0700
@@ -259,3 +259,5 @@
5c7a17a81afd0906b53ee31d95a3211c96ff6b25 jdk9-b14
4537360f09fe23ab339ee588747b657feb12d0c8 jdk9-b15
ab7d2c565b0de5bee1361d282d4029371327fc9e jdk9-b16
+fd8e675f141b9bdb2f46d1ae8251f4ee3a895d64 jdk9-b17
+6ad17b31f0d30593392b1e8695b9709dbbd7fb70 jdk9-b18
--- a/jdk/THIRD_PARTY_README Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/THIRD_PARTY_README Wed Jun 18 13:14:15 2014 -0700
@@ -1471,7 +1471,7 @@
version 2.0.
The NSS libraries are supplied in executable form, built from unmodified
-NSS source code labeled with the "NSS_3.13.1_RTM" release tag.
+NSS source code labeled with the "NSS_3_16_RTM" HG tag.
The NSS source code is available in the OpenJDK source code repository at:
jdk/test/sun/security/pkcs11/nss/src
--- a/jdk/make/CompileDemos.gmk Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/make/CompileDemos.gmk Wed Jun 18 13:14:15 2014 -0700
@@ -1,6 +1,5 @@
-
#
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, 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
@@ -320,7 +319,6 @@
endif
$(eval $(call SetupJVMTIDemo,hprof, java_crw_demo, \
- -I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt \
$(BUILD_LIBHPROF_AIX_EXTRA_CFLAGS), C, \
-ldl, ws2_32.lib winmm.lib, -lsocket -lnsl, -lpthread, $(BUILD_LIBHPROF_AIX_EXTRA_SRC)))
--- a/jdk/make/CreateJars.gmk Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/make/CreateJars.gmk Wed Jun 18 13:14:15 2014 -0700
@@ -676,15 +676,6 @@
##########################################################################################
-#
-# This is an empty jar (only contains manifest) and fits poorly into framework...
-# create simple rule instead
-#
-$(IMAGES_OUTPUTDIR)/lib/management-agent.jar: $(JDK_TOPDIR)/src/share/classes/sun/management/manifest
- $(JAR) cfm $@ $<
-
-##########################################################################################
-
# This file is imported from hotspot in Import.gmk. Copying it into images/lib so that
# all jars can be found in one place when creating images in Images.gmk. It needs to be
# done here so that clean targets can be simple and accurate.
--- a/jdk/make/lib/Awt2dLibraries.gmk Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/make/lib/Awt2dLibraries.gmk Wed Jun 18 13:14:15 2014 -0700
@@ -319,7 +319,6 @@
ifeq ($(OPENJDK_TARGET_OS), macosx)
LIBAWT_FILES += awt_LoadLibrary.c
- LIBAWT_CFLAGS += -F/System/Library/Frameworks/JavaVM.framework/Frameworks
endif
ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc)
@@ -484,7 +483,6 @@
LDFLAGS_SUFFIX_macosx := -lmlib_image -ljvm $(LIBM) \
-framework Cocoa \
-framework OpenGL \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
-framework JavaRuntimeSupport \
-framework ApplicationServices \
@@ -1146,12 +1144,6 @@
-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/jdga \
$(foreach dir, $(LIBAWT_HEADLESS_DIRS), -I$(dir))
- ifeq ($(OPENJDK_TARGET_OS), macosx)
- LIBAWT_HEADLESS_CFLAGS += \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
- -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks
- endif
-
LIBAWT_HEADLESS_FILES := \
awt_Font.c \
HeadlessToolkit.c \
@@ -1252,8 +1244,7 @@
ifeq ($(OPENJDK_TARGET_OS), macosx)
LIBSPLASHSCREEN_CFLAGS := -I$(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen \
- $(LIBSPLASHSCREEN_CFLAGS) \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks
+ $(LIBSPLASHSCREEN_CFLAGS)
LIBSPLASHSCREEN_CFLAGS += -DWITH_MACOSX
LIBSPLASHSCREEN_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp
@@ -1283,7 +1274,6 @@
-framework ApplicationServices \
-framework Foundation \
-framework Cocoa \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation
else ifeq ($(OPENJDK_TARGET_OS), windows)
LIBSPLASHSCREEN_LDFLAGS_SUFFIX += kernel32.lib user32.lib gdi32.lib delayimp.lib -DELAYLOAD:user32.dll
@@ -1468,9 +1458,7 @@
-I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \
-I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \
-I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \
- -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
- -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks, \
+ -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX_macosx := -lawt -lmlib_image -losxapp -ljvm $(LIBM) \
@@ -1481,7 +1469,6 @@
-framework Cocoa \
-framework Security \
-framework ExceptionHandling \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
-framework JavaRuntimeSupport \
-framework OpenGL \
@@ -1514,8 +1501,7 @@
CFLAGS := $(CFLAGS_JDKLIB) \
-I$(JDK_TOPDIR)/src/macosx/native/com/apple/laf \
-I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \
- -I$(JDK_TOPDIR)/src/macosx/native/sun/awt \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks, \
+ -I$(JDK_TOPDIR)/src/macosx/native/sun/awt, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN) \
-Xlinker -rpath -Xlinker @loader_path, \
@@ -1523,7 +1509,6 @@
-framework Cocoa \
-framework Carbon \
-framework ApplicationServices \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
-framework JavaRuntimeSupport \
-ljava -ljvm, \
--- a/jdk/make/lib/CoreLibraries.gmk Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/make/lib/CoreLibraries.gmk Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, 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
@@ -306,7 +306,7 @@
LDFLAGS_SUFFIX_solaris := -ljvm -ljava -lc, \
LDFLAGS_SUFFIX_aix := -ljvm -ljava, \
LDFLAGS_SUFFIX_windows := advapi32.lib jvm.lib $(WIN_JAVA_LIB), \
- LDFLAGS_SUFFIX_macosx := -ljvm -framework CoreFoundation, \
+ LDFLAGS_SUFFIX_macosx := -ljvm -framework CoreFoundation -framework Foundation, \
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
RC_FLAGS := $(RC_FLAGS) \
-D "JDK_FNAME=prefs.dll" \
@@ -526,30 +526,3 @@
BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/libjli_static.a
endif
-
-##########################################################################################
-
-$(eval $(call SetupNativeCompilation,BUILD_LIBNPT, \
- LIBRARY := npt, \
- OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
- SRC := $(JDK_TOPDIR)/src/share/npt $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt, \
- LANG := C, \
- OPTIMIZATION := LOW, \
- CFLAGS := $(CFLAGS_JDKLIB) \
- -I$(JDK_TOPDIR)/src/share/npt \
- -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt, \
- MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libnpt/mapfile-vers, \
- LDFLAGS := $(LDFLAGS_JDKLIB) \
- $(call SET_SHARED_LIBRARY_ORIGIN), \
- LDFLAGS_macosx := -liconv, \
- LDFLAGS_SUFFIX_windows := -export:nptInitialize -export:nptTerminate, \
- LDFLAGS_SUFFIX_solaris := -lc, \
- VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
- RC_FLAGS := $(RC_FLAGS) \
- -D "JDK_FNAME=npt.dll" \
- -D "JDK_INTERNAL_NAME=npt" \
- -D "JDK_FTYPE=0x2L", \
- OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libnpt, \
- DEBUG_SYMBOLS := true))
-
-BUILD_LIBRARIES += $(BUILD_LIBNPT)
--- a/jdk/make/lib/PlatformLibraries.gmk Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/make/lib/PlatformLibraries.gmk Wed Jun 18 13:14:15 2014 -0700
@@ -32,14 +32,11 @@
LANG := C, \
OPTIMIZATION := LOW, \
CFLAGS := $(CFLAGS_JDKLIB) \
- -I$(JDK_TOPDIR)/src/macosx/native/apple/applescript \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
- -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks, \
+ -I$(JDK_TOPDIR)/src/macosx/native/apple/applescript, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX := -framework Cocoa \
-framework Carbon \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
$(LDFLAGS_JDKLIB_SUFFIX), \
OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libAppleScriptEngine, \
@@ -63,9 +60,7 @@
OPTIMIZATION := LOW, \
CFLAGS := $(CFLAGS_JDKLIB) \
-I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \
- -I$(JDK_OUTPUTDIR)/gensrc_headers_icons \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
- -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks, \
+ -I$(JDK_OUTPUTDIR)/gensrc_headers_icons, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX_macosx := \
@@ -76,7 +71,6 @@
-framework Cocoa \
-framework Security \
-framework ExceptionHandling \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
-framework JavaRuntimeSupport \
-framework OpenGL \
@@ -107,16 +101,13 @@
OPTIMIZATION := LOW, \
CFLAGS := $(CFLAGS_JDKLIB) \
$(foreach dir, $(LIBOSX_DIRS), -I$(dir)) \
- -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
- -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks, \
+ -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX_macosx := \
-losxapp \
-framework Cocoa \
-framework ApplicationServices \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
-framework JavaRuntimeSupport \
-framework Security \
--- a/jdk/make/lib/SecurityLibraries.gmk Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/make/lib/SecurityLibraries.gmk Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, 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
@@ -130,7 +130,7 @@
BUILD_LIBKRB5_NAME := osxkrb5
BUILD_LIBKRB5_SRC := $(JDK_TOPDIR)/src/share/native/sun/security/krb5 \
$(JDK_TOPDIR)/src/macosx/native/sun/security/krb5
- BUILD_LIBKRB5_LIBS := -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
+ BUILD_LIBKRB5_LIBS := \
-framework JavaNativeFoundation \
-framework Cocoa \
-framework SystemConfiguration \
@@ -147,7 +147,6 @@
CFLAGS := $(CFLAGS_JDKLIB) \
-I$(JDK_TOPDIR)/src/share/native/sun/security/krb5, \
CFLAGS_windows := -I$(JDK_TOPDIR)/src/windows/native/sun/security/krb5, \
- CFLAGS_macosx := -F/System/Library/Frameworks/JavaVM.framework/Frameworks, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX := $(BUILD_LIBKRB5_LIBS), \
--- a/jdk/make/lib/ServiceabilityLibraries.gmk Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/make/lib/ServiceabilityLibraries.gmk Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, 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
@@ -147,8 +147,6 @@
CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) -DJDWP_LOGGING \
-I$(JDK_TOPDIR)/src/share/transport/export \
-I$(JDK_TOPDIR)/src/share/back/export \
- -I$(JDK_TOPDIR)/src/share/npt \
- -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt \
-I$(JDK_TOPDIR)/src/share/back \
-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/back \
-I$(JDK_OUTPUTDIR)/gensrc_jdwp_headers, \
@@ -158,6 +156,7 @@
LDFLAGS_SUFFIX_linux := $(LIBDL), \
LDFLAGS_SUFFIX_solaris := $(LIBDL) -lc, \
LDFLAGS_SUFFIX_windows := $(LDFLAGS_JDKLIB_SUFFIX), \
+ LDFLAGS_SUFFIX_macosx := -liconv, \
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
RC_FLAGS := $(RC_FLAGS) \
-D "JDK_FNAME=jdwp.dll" \
@@ -340,8 +339,6 @@
BUILD_LIBHPROF_SRC := $(JDK_TOPDIR)/src/share/demo/jvmti/hprof $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/demo/jvmti/hprof
BUILD_LIBHPROF_CFLAGS := -I$(JDK_TOPDIR)/src/share/demo/jvmti/hprof \
- -I$(JDK_TOPDIR)/src/share/npt \
- -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt \
-I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo
ifeq ($(OPENJDK_TARGET_OS), aix)
--- a/jdk/make/mapfiles/libnpt/mapfile-vers Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-#
-# 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
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# Define public interface.
-
-SUNWprivate_1.1 {
- global:
- nptInitialize;
- nptTerminate;
- local:
- *;
-};
--- a/jdk/make/profile-includes.txt Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/make/profile-includes.txt Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2014, 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
@@ -127,12 +127,9 @@
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jsdt.diz \
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)management$(SHARED_LIBRARY_SUFFIX) \
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)management.diz \
- $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)npt$(SHARED_LIBRARY_SUFFIX) \
- $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)npt.diz \
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)prefs$(SHARED_LIBRARY_SUFFIX) \
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)sctp$(SHARED_LIBRARY_SUFFIX) \
jvm.hprof.txt \
- management-agent.jar \
management/jmxremote.access \
management/jmxremote.password.template \
management/management.properties \
@@ -140,8 +137,7 @@
PROFILE_3_JRE_OTHER_FILES :=
-PROFILE_3_JRE_JAR_FILES := \
- management-agent.jar
+PROFILE_3_JRE_JAR_FILES :=
FULL_JRE_BIN_FILES := \
--- a/jdk/make/src/classes/build/tools/buildmetaindex/BuildMetaIndex.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/make/src/classes/build/tools/buildmetaindex/BuildMetaIndex.java Wed Jun 18 13:14:15 2014 -0700
@@ -53,7 +53,6 @@
com/sun/net/
javax/
com/sun/security/
-# management-agent.jar
! rt.jar
org/w3c/
com/sun/image/
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Wed Jun 18 13:14:15 2014 -0700
@@ -523,7 +523,7 @@
* that is used for menu shortcuts on this toolkit.
* @see java.awt.MenuBar
* @see java.awt.MenuShortcut
- * @since JDK1.1
+ * @since 1.1
*/
@Override
public int getMenuShortcutKeyMask() {
--- a/jdk/src/share/back/debugInit.c Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/back/debugInit.c Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -202,8 +202,6 @@
jint jvmtiCompileTimeMajorVersion;
jint jvmtiCompileTimeMinorVersion;
jint jvmtiCompileTimeMicroVersion;
- char *boot_path = NULL;
- char npt_lib[MAXPATHLEN];
/* See if it's already loaded */
if ( gdata!=NULL && gdata->isLoaded==JNI_TRUE ) {
@@ -268,24 +266,6 @@
forceExit(1); /* Kill entire process, no core dump wanted */
}
- JVMTI_FUNC_PTR(gdata->jvmti, GetSystemProperty)
- (gdata->jvmti, (const char *)"sun.boot.library.path",
- &boot_path);
-
- dbgsysBuildLibName(npt_lib, sizeof(npt_lib), boot_path, NPT_LIBNAME);
- /* Npt and Utf function init */
- NPT_INITIALIZE(npt_lib, &(gdata->npt), NPT_VERSION, NULL);
- jvmtiDeallocate(boot_path);
- if (gdata->npt == NULL) {
- ERROR_MESSAGE(("JDWP: unable to initialize NPT library"));
- return JNI_ERR;
- }
- gdata->npt->utf = (gdata->npt->utfInitialize)(NULL);
- if (gdata->npt->utf == NULL) {
- ERROR_MESSAGE(("JDWP: UTF function initialization failed"));
- return JNI_ERR;
- }
-
/* Parse input options */
if (!parseOptions(options)) {
/* No message necessary, should have been printed out already */
@@ -1307,22 +1287,26 @@
if ( error != JVMTI_ERROR_NONE ) {
exit_code = 1;
if ( docoredump ) {
+ LOG_MISC(("Dumping core as requested by command line"));
finish_logging(exit_code);
abort();
}
}
+
if ( msg==NULL ) {
msg = "";
}
LOG_MISC(("Exiting with error %s(%d): %s", jvmtiErrorText(error), error, msg));
- gdata->vmDead = JNI_TRUE;
+ if (gdata != NULL) {
+ gdata->vmDead = JNI_TRUE;
- /* Let's try and cleanup the JVMTI, if we even have one */
- if ( gdata->jvmti != NULL ) {
- /* Dispose of jvmti (gdata->jvmti becomes NULL) */
- disposeEnvironment(gdata->jvmti);
+ /* Let's try and cleanup the JVMTI, if we even have one */
+ if ( gdata->jvmti != NULL ) {
+ /* Dispose of jvmti (gdata->jvmti becomes NULL) */
+ disposeEnvironment(gdata->jvmti);
+ }
}
/* Finish up logging. We reach here if JDWP is doing the exiting. */
--- a/jdk/src/share/back/error_messages.c Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/back/error_messages.c Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, 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,6 +47,7 @@
#include <errno.h>
#include "util.h"
+#include "utf_util.h"
#include "proc_md.h"
/* Maximim length of a message */
@@ -70,13 +71,8 @@
len = (int)strlen((char*)utf8buf);
/* Convert to platform encoding (ignore errors, dangerous area) */
- if (gdata->npt != NULL) {
- (void)(gdata->npt->utf8ToPlatform)(gdata->npt->utf,
- utf8buf, len, pbuf, MAX_MESSAGE_LEN);
- } else {
- /* May be called before NPT is initialized so don't fault */
- strncpy(pbuf, (char*)utf8buf, len);
- }
+ (void)utf8ToPlatform(utf8buf, len, pbuf, MAX_MESSAGE_LEN);
+
(void)fprintf(fp, "%s%s%s", prefix, pbuf, suffix);
}
--- a/jdk/src/share/back/inStream.c Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/back/inStream.c Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,7 @@
*/
#include "util.h"
+#include "utf_util.h"
#include "stream.h"
#include "inStream.h"
#include "transport.h"
@@ -379,15 +380,12 @@
string[length] = '\0';
/* This is Standard UTF-8, convert to Modified UTF-8 if necessary */
- new_length = (gdata->npt->utf8sToUtf8mLength)
- (gdata->npt->utf, (jbyte*)string, length);
+ new_length = utf8sToUtf8mLength((jbyte*)string, length);
if ( new_length != length ) {
char *new_string;
new_string = jvmtiAllocate(new_length+1);
- (gdata->npt->utf8sToUtf8m)
- (gdata->npt->utf, (jbyte*)string, length,
- (jbyte*)new_string, new_length);
+ utf8sToUtf8m((jbyte*)string, length, (jbyte*)new_string, new_length);
jvmtiDeallocate(string);
return new_string;
}
--- a/jdk/src/share/back/outStream.c Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/back/outStream.c Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,7 @@
*/
#include "util.h"
+#include "utf_util.h"
#include "stream.h"
#include "outStream.h"
#include "inStream.h"
@@ -307,8 +308,7 @@
} else {
jint new_length;
- new_length = (gdata->npt->utf8mToUtf8sLength)
- (gdata->npt->utf, (jbyte*)string, length);
+ new_length = utf8mToUtf8sLength((jbyte*)string, length);
if ( new_length == length ) {
(void)outStream_writeInt(stream, length);
error = writeBytes(stream, (jbyte *)string, length);
@@ -316,9 +316,7 @@
char *new_string;
new_string = jvmtiAllocate(new_length+1);
- (gdata->npt->utf8mToUtf8s)
- (gdata->npt->utf, (jbyte*)string, length,
- (jbyte*)new_string, new_length);
+ utf8mToUtf8s((jbyte*)string, length, (jbyte*)new_string, new_length);
(void)outStream_writeInt(stream, new_length);
error = writeBytes(stream, (jbyte *)new_string, new_length);
jvmtiDeallocate(new_string);
--- a/jdk/src/share/back/transport.c Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/back/transport.c Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,7 @@
*/
#include "util.h"
+#include "utf_util.h"
#include "transport.h"
#include "debugLoop.h"
#include "sys.h"
@@ -65,8 +66,7 @@
len = (int)strlen(msg);
maxlen = len+len/2+2; /* Should allow for plenty of room */
utf8msg = (jbyte*)jvmtiAllocate(maxlen+1);
- (void)(gdata->npt->utf8FromPlatform)(gdata->npt->utf,
- msg, len, utf8msg, maxlen);
+ (void)utf8FromPlatform(msg, len, utf8msg, maxlen);
utf8msg[maxlen] = 0;
}
if (rv == JDWPTRANSPORT_ERROR_NONE) {
@@ -110,8 +110,7 @@
int len;
len = (int)strlen(libdir);
- (void)(gdata->npt->utf8ToPlatform)(gdata->npt->utf,
- (jbyte*)libdir, len, buf, (int)sizeof(buf));
+ (void)utf8ToPlatform((jbyte*)libdir, len, buf, (int)sizeof(buf));
plibdir = buf;
}
@@ -392,8 +391,7 @@
/* Convert commandLine from UTF-8 to platform encoding */
len = (int)strlen(commandLine);
buf = jvmtiAllocate(len*3+3);
- (void)(gdata->npt->utf8ToPlatform)(gdata->npt->utf,
- (jbyte*)commandLine, len, buf, len*3+3);
+ (void)utf8ToPlatform((jbyte*)commandLine, len, buf, len*3+3);
/* Exec commandLine */
rc = dbgsysExec(buf);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/back/utf_util.c Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,540 @@
+/*
+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include <stdlib.h>
+#include <ctype.h>
+
+#include "jni.h"
+
+#include "utf_util.h"
+
+
+/* Error and assert macros */
+#define UTF_ERROR(m) utfError(__FILE__, __LINE__, m)
+#define UTF_ASSERT(x) ( (x)==0 ? UTF_ERROR("ASSERT ERROR " #x) : (void)0 )
+
+// Platform independed part
+
+static void utfError(char *file, int line, char *message) {
+ (void)fprintf(stderr, "UTF ERROR [\"%s\":%d]: %s\n", file, line, message);
+ abort();
+}
+
+/* Determine length of this Standard UTF-8 in Modified UTF-8.
+ * Validation is done of the basic UTF encoding rules, returns
+ * length (no change) when errors are detected in the UTF encoding.
+ *
+ * Note: Accepts Modified UTF-8 also, no verification on the
+ * correctness of Standard UTF-8 is done. e,g, 0xC080 input is ok.
+ */
+int JNICALL utf8sToUtf8mLength(jbyte *string, int length) {
+ int newLength;
+ int i;
+
+ newLength = 0;
+ for ( i = 0 ; i < length ; i++ ) {
+ unsigned byte;
+
+ byte = (unsigned char)string[i];
+ if ( (byte & 0x80) == 0 ) { /* 1byte encoding */
+ newLength++;
+ if ( byte == 0 ) {
+ newLength++; /* We gain one byte in length on NULL bytes */
+ }
+ } else if ( (byte & 0xE0) == 0xC0 ) { /* 2byte encoding */
+ /* Check encoding of following bytes */
+ if ( (i+1) >= length || (string[i+1] & 0xC0) != 0x80 ) {
+ break; /* Error condition */
+ }
+ i++; /* Skip next byte */
+ newLength += 2;
+ } else if ( (byte & 0xF0) == 0xE0 ) { /* 3byte encoding */
+ /* Check encoding of following bytes */
+ if ( (i+2) >= length || (string[i+1] & 0xC0) != 0x80
+ || (string[i+2] & 0xC0) != 0x80 ) {
+ break; /* Error condition */
+ }
+ i += 2; /* Skip next two bytes */
+ newLength += 3;
+ } else if ( (byte & 0xF8) == 0xF0 ) { /* 4byte encoding */
+ /* Check encoding of following bytes */
+ if ( (i+3) >= length || (string[i+1] & 0xC0) != 0x80
+ || (string[i+2] & 0xC0) != 0x80
+ || (string[i+3] & 0xC0) != 0x80 ) {
+ break; /* Error condition */
+ }
+ i += 3; /* Skip next 3 bytes */
+ newLength += 6; /* 4byte encoding turns into 2 3byte ones */
+ } else {
+ break; /* Error condition */
+ }
+ }
+ if ( i != length ) {
+ /* Error in finding new length, return old length so no conversion */
+ /* FIXUP: ERROR_MESSAGE? */
+ return length;
+ }
+ return newLength;
+}
+
+/* Convert Standard UTF-8 to Modified UTF-8.
+ * Assumes the UTF-8 encoding was validated by utf8mLength() above.
+ *
+ * Note: Accepts Modified UTF-8 also, no verification on the
+ * correctness of Standard UTF-8 is done. e,g, 0xC080 input is ok.
+ */
+void JNICALL utf8sToUtf8m(jbyte *string, int length, jbyte *newString, int newLength) {
+ int i;
+ int j;
+
+ j = 0;
+ for ( i = 0 ; i < length ; i++ ) {
+ unsigned byte1;
+
+ byte1 = (unsigned char)string[i];
+
+ /* NULL bytes and bytes starting with 11110xxx are special */
+ if ( (byte1 & 0x80) == 0 ) { /* 1byte encoding */
+ if ( byte1 == 0 ) {
+ /* Bits out: 11000000 10000000 */
+ newString[j++] = (jbyte)0xC0;
+ newString[j++] = (jbyte)0x80;
+ } else {
+ /* Single byte */
+ newString[j++] = byte1;
+ }
+ } else if ( (byte1 & 0xE0) == 0xC0 ) { /* 2byte encoding */
+ newString[j++] = byte1;
+ newString[j++] = string[++i];
+ } else if ( (byte1 & 0xF0) == 0xE0 ) { /* 3byte encoding */
+ newString[j++] = byte1;
+ newString[j++] = string[++i];
+ newString[j++] = string[++i];
+ } else if ( (byte1 & 0xF8) == 0xF0 ) { /* 4byte encoding */
+ /* Beginning of 4byte encoding, turn into 2 3byte encodings */
+ unsigned byte2, byte3, byte4, u21;
+
+ /* Bits in: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
+ byte2 = (unsigned char)string[++i];
+ byte3 = (unsigned char)string[++i];
+ byte4 = (unsigned char)string[++i];
+ /* Reconstruct full 21bit value */
+ u21 = (byte1 & 0x07) << 18;
+ u21 += (byte2 & 0x3F) << 12;
+ u21 += (byte3 & 0x3F) << 6;
+ u21 += (byte4 & 0x3F);
+ /* Bits out: 11101101 1010xxxx 10xxxxxx */
+ newString[j++] = (jbyte)0xED;
+ newString[j++] = (jbyte)(0xA0 + (((u21 >> 16) - 1) & 0x0F));
+ newString[j++] = (jbyte)(0x80 + ((u21 >> 10) & 0x3F));
+ /* Bits out: 11101101 1011xxxx 10xxxxxx */
+ newString[j++] = (jbyte)0xED;
+ newString[j++] = (jbyte)(0xB0 + ((u21 >> 6) & 0x0F));
+ newString[j++] = byte4;
+ }
+ }
+ UTF_ASSERT(i==length);
+ UTF_ASSERT(j==newLength);
+ newString[j] = (jbyte)0;
+}
+
+/* Given a Modified UTF-8 string, calculate the Standard UTF-8 length.
+ * Basic validation of the UTF encoding rules is done, and length is
+ * returned (no change) when errors are detected.
+ *
+ * Note: No validation is made that this is indeed Modified UTF-8 coming in.
+ *
+ */
+int JNICALL utf8mToUtf8sLength(jbyte *string, int length) {
+ int newLength;
+ int i;
+
+ newLength = 0;
+ for ( i = 0 ; i < length ; i++ ) {
+ unsigned byte1, byte2, byte3, byte4, byte5, byte6;
+
+ byte1 = (unsigned char)string[i];
+ if ( (byte1 & 0x80) == 0 ) { /* 1byte encoding */
+ newLength++;
+ } else if ( (byte1 & 0xE0) == 0xC0 ) { /* 2byte encoding */
+ /* Check encoding of following bytes */
+ if ( (i+1) >= length || (string[i+1] & 0xC0) != 0x80 ) {
+ break; /* Error condition */
+ }
+ byte2 = (unsigned char)string[++i];
+ if ( byte1 != 0xC0 || byte2 != 0x80 ) {
+ newLength += 2; /* Normal 2byte encoding, not 0xC080 */
+ } else {
+ newLength++; /* We will turn 0xC080 into 0 */
+ }
+ } else if ( (byte1 & 0xF0) == 0xE0 ) { /* 3byte encoding */
+ /* Check encoding of following bytes */
+ if ( (i+2) >= length || (string[i+1] & 0xC0) != 0x80
+ || (string[i+2] & 0xC0) != 0x80 ) {
+ break; /* Error condition */
+ }
+ byte2 = (unsigned char)string[++i];
+ byte3 = (unsigned char)string[++i];
+ newLength += 3;
+ /* Possible process a second 3byte encoding */
+ if ( (i+3) < length && byte1 == 0xED && (byte2 & 0xF0) == 0xA0 ) {
+ /* See if this is a pair of 3byte encodings */
+ byte4 = (unsigned char)string[i+1];
+ byte5 = (unsigned char)string[i+2];
+ byte6 = (unsigned char)string[i+3];
+ if ( byte4 == 0xED && (byte5 & 0xF0) == 0xB0 ) {
+ /* Check encoding of 3rd byte */
+ if ( (byte6 & 0xC0) != 0x80 ) {
+ break; /* Error condition */
+ }
+ newLength++; /* New string will have 4byte encoding */
+ i += 3; /* Skip next 3 bytes */
+ }
+ }
+ } else {
+ break; /* Error condition */
+ }
+ }
+ if ( i != length ) {
+ /* Error in UTF encoding */
+ /* FIXUP: ERROR_MESSAGE()? */
+ return length;
+ }
+ return newLength;
+}
+
+/* Convert a Modified UTF-8 string into a Standard UTF-8 string
+ * It is assumed that this string has been validated in terms of the
+ * basic UTF encoding rules by utf8Length() above.
+ *
+ * Note: No validation is made that this is indeed Modified UTF-8 coming in.
+ *
+ */
+void JNICALL utf8mToUtf8s(jbyte *string, int length, jbyte *newString, int newLength) {
+ int i;
+ int j;
+
+ j = 0;
+ for ( i = 0 ; i < length ; i++ ) {
+ unsigned byte1, byte2, byte3, byte4, byte5, byte6;
+
+ byte1 = (unsigned char)string[i];
+ if ( (byte1 & 0x80) == 0 ) { /* 1byte encoding */
+ /* Single byte */
+ newString[j++] = byte1;
+ } else if ( (byte1 & 0xE0) == 0xC0 ) { /* 2byte encoding */
+ byte2 = (unsigned char)string[++i];
+ if ( byte1 != 0xC0 || byte2 != 0x80 ) {
+ newString[j++] = byte1;
+ newString[j++] = byte2;
+ } else {
+ newString[j++] = 0;
+ }
+ } else if ( (byte1 & 0xF0) == 0xE0 ) { /* 3byte encoding */
+ byte2 = (unsigned char)string[++i];
+ byte3 = (unsigned char)string[++i];
+ if ( i+3 < length && byte1 == 0xED && (byte2 & 0xF0) == 0xA0 ) {
+ /* See if this is a pair of 3byte encodings */
+ byte4 = (unsigned char)string[i+1];
+ byte5 = (unsigned char)string[i+2];
+ byte6 = (unsigned char)string[i+3];
+ if ( byte4 == 0xED && (byte5 & 0xF0) == 0xB0 ) {
+ unsigned u21;
+
+ /* Bits in: 11101101 1010xxxx 10xxxxxx */
+ /* Bits in: 11101101 1011xxxx 10xxxxxx */
+ i += 3;
+
+ /* Reconstruct 21 bit code */
+ u21 = ((byte2 & 0x0F) + 1) << 16;
+ u21 += (byte3 & 0x3F) << 10;
+ u21 += (byte5 & 0x0F) << 6;
+ u21 += (byte6 & 0x3F);
+
+ /* Bits out: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
+
+ /* Convert to 4byte encoding */
+ newString[j++] = 0xF0 + ((u21 >> 18) & 0x07);
+ newString[j++] = 0x80 + ((u21 >> 12) & 0x3F);
+ newString[j++] = 0x80 + ((u21 >> 6) & 0x3F);
+ newString[j++] = 0x80 + (u21 & 0x3F);
+ continue;
+ }
+ }
+ /* Normal 3byte encoding */
+ newString[j++] = byte1;
+ newString[j++] = byte2;
+ newString[j++] = byte3;
+ }
+ }
+ UTF_ASSERT(i==length);
+ UTF_ASSERT(j==newLength);
+ newString[j] = 0;
+}
+
+#ifdef _WIN32
+// Microsoft Windows specific part
+
+#include <windows.h>
+
+static UINT getCodepage() {
+ LANGID langID;
+ LCID localeID;
+ TCHAR strCodePage[7]; // ANSI code page id
+
+ static UINT intCodePage = -1;
+
+ if (intCodePage == -1) {
+ // Firts call, get codepage from the os
+ langID = LANGIDFROMLCID(GetUserDefaultLCID());
+ localeID = MAKELCID(langID, SORT_DEFAULT);
+ if (GetLocaleInfo(localeID, LOCALE_IDEFAULTANSICODEPAGE,
+ strCodePage, sizeof(strCodePage)/sizeof(TCHAR)) > 0 ) {
+ intCodePage = atoi(strCodePage);
+ }
+ else {
+ intCodePage = GetACP();
+ }
+ }
+
+ return intCodePage;
+}
+
+/*
+ * Get wide string (assumes len>0)
+ */
+static WCHAR* getWideString(UINT codePage, char* str, int len, int *pwlen) {
+ int wlen;
+ WCHAR* wstr;
+
+ /* Convert the string to WIDE string */
+ wlen = MultiByteToWideChar(codePage, 0, str, len, NULL, 0);
+ *pwlen = wlen;
+ if (wlen <= 0) {
+ UTF_ERROR(("Can't get WIDE string length"));
+ return NULL;
+ }
+ wstr = (WCHAR*)malloc(wlen * sizeof(WCHAR));
+ if (wstr == NULL) {
+ UTF_ERROR(("Can't malloc() any space"));
+ return NULL;
+ }
+ if (MultiByteToWideChar(codePage, 0, str, len, wstr, wlen) == 0) {
+ UTF_ERROR(("Can't get WIDE string"));
+ return NULL;
+ }
+ return wstr;
+}
+
+/*
+ * Convert UTF-8 to a platform string
+ */
+int JNICALL utf8ToPlatform(jbyte *utf8, int len, char* output, int outputMaxLen) {
+ int wlen;
+ int plen;
+ WCHAR* wstr;
+ UINT codepage;
+
+ UTF_ASSERT(utf8);
+ UTF_ASSERT(output);
+ UTF_ASSERT(outputMaxLen > len);
+
+ /* Zero length is ok, but we don't need to do much */
+ if ( len == 0 ) {
+ output[0] = 0;
+ return 0;
+ }
+
+ /* Get WIDE string version (assumes len>0) */
+ wstr = getWideString(CP_UTF8, (char*)utf8, len, &wlen);
+ if ( wstr == NULL ) {
+ // Can't allocate WIDE string
+ goto just_copy_bytes;
+ }
+
+ /* Convert WIDE string to MultiByte string */
+ codepage = getCodepage();
+ plen = WideCharToMultiByte(codepage, 0, wstr, wlen,
+ output, outputMaxLen, NULL, NULL);
+ free(wstr);
+ if (plen <= 0) {
+ // Can't convert WIDE string to multi-byte
+ goto just_copy_bytes;
+ }
+ output[plen] = '\0';
+ return plen;
+
+just_copy_bytes:
+ (void)memcpy(output, utf8, len);
+ output[len] = 0;
+ return len;
+}
+
+/*
+ * Convert Platform Encoding to UTF-8.
+ */
+int JNICALL utf8FromPlatform(char *str, int len, jbyte *output, int outputMaxLen) {
+ int wlen;
+ int plen;
+ WCHAR* wstr;
+ UINT codepage;
+
+ UTF_ASSERT(str);
+ UTF_ASSERT(output);
+ UTF_ASSERT(outputMaxLen > len);
+
+ /* Zero length is ok, but we don't need to do much */
+ if ( len == 0 ) {
+ output[0] = 0;
+ return 0;
+ }
+
+ /* Get WIDE string version (assumes len>0) */
+ codepage = getCodepage();
+ wstr = getWideString(codepage, str, len, &wlen);
+ if ( wstr == NULL ) {
+ goto just_copy_bytes;
+ }
+
+ /* Convert WIDE string to UTF-8 string */
+ plen = WideCharToMultiByte(CP_UTF8, 0, wstr, wlen,
+ (char*)output, outputMaxLen, NULL, NULL);
+ free(wstr);
+ if (plen <= 0) {
+ UTF_ERROR(("Can't convert WIDE string to multi-byte"));
+ goto just_copy_bytes;
+ }
+ output[plen] = '\0';
+ return plen;
+
+just_copy_bytes:
+ (void)memcpy(output, str, len);
+ output[len] = 0;
+ return len;
+}
+
+
+#else
+// *NIX specific part
+
+#include <iconv.h>
+#include <locale.h>
+#include <langinfo.h>
+#include <string.h>
+
+typedef enum {TO_UTF8, FROM_UTF8} conv_direction;
+
+/*
+ * Do iconv() conversion.
+ * Returns length or -1 if output overflows.
+ */
+static int iconvConvert(conv_direction drn, char *bytes, size_t len, char *output, size_t outputMaxLen) {
+
+ static char *codeset = 0;
+ iconv_t func;
+ size_t bytes_converted;
+ size_t inLeft, outLeft;
+ char *inbuf, *outbuf;
+
+ UTF_ASSERT(bytes);
+ UTF_ASSERT(output);
+ UTF_ASSERT(outputMaxLen > len);
+
+ /* Zero length is ok, but we don't need to do much */
+ if ( len == 0 ) {
+ output[0] = 0;
+ return 0;
+ }
+
+ if (codeset == NULL && codeset != (char *) -1) {
+ // locale is not initialized, do it now
+ if (setlocale(LC_ALL, "") != NULL) {
+ // nl_langinfo returns ANSI_X3.4-1968 by default
+ codeset = (char*)nl_langinfo(CODESET);
+ }
+
+ if (codeset == NULL) {
+ // Not able to intialize process locale from platform one.
+ codeset = (char *) -1;
+ }
+ }
+
+ if (codeset == (char *) -1) {
+ // There was an error during initialization, so just bail out
+ goto just_copy_bytes;
+ }
+
+ func = (drn == TO_UTF8) ? iconv_open(codeset, "UTF-8") : iconv_open("UTF-8", codeset);
+ if (func == (iconv_t) -1) {
+ // Requested charset combination is not supported, conversion couldn't be done.
+ // make sure we will not try it again
+ codeset = (char *) -1;
+ goto just_copy_bytes;
+ }
+
+ // perform conversion
+ inbuf = bytes;
+ outbuf = output;
+ inLeft = len;
+ outLeft = outputMaxLen;
+
+ bytes_converted = iconv(func, (void*)&inbuf, &inLeft, &outbuf, &outLeft);
+ if (bytes_converted == (size_t) -1 || bytes_converted == 0 || inLeft != 0) {
+ // Input string is invalid, not able to convert entire string
+ // or some other iconv error happens.
+ iconv_close(func);
+ goto just_copy_bytes;
+ }
+
+ iconv_close(func);
+ // Overwrite bytes_converted with value of actually stored bytes
+ bytes_converted = outputMaxLen-outLeft;
+ output[bytes_converted] = 0;
+ return bytes_converted;
+
+
+just_copy_bytes:
+ (void)memcpy(output, bytes, len);
+ output[len] = 0;
+ return len;
+ }
+
+/*
+ * Convert UTF-8 to Platform Encoding.
+ * Returns length or -1 if output overflows.
+ */
+int JNICALL utf8ToPlatform(jbyte *utf8, int len, char *output, int outputMaxLen) {
+ return iconvConvert(FROM_UTF8, (char*)utf8, len, output, outputMaxLen);
+}
+
+/*
+ * Convert Platform Encoding to UTF-8.
+ * Returns length or -1 if output overflows.
+ */
+int JNICALL utf8FromPlatform(char *str, int len, jbyte *output, int outputMaxLen) {
+ return iconvConvert(TO_UTF8, str, len, (char*) output, outputMaxLen);
+}
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/back/utf_util.h Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#ifndef _utf_util_h_
+#define _utf_util_h_
+
+#include "jni.h"
+
+
+int JNICALL utf8sToUtf8mLength(jbyte *string, int length);
+void JNICALL utf8sToUtf8m(jbyte *string, int length, jbyte *newString, int newLength);
+int JNICALL utf8mToUtf8sLength(jbyte *string, int length);
+void JNICALL utf8mToUtf8s(jbyte *string, int length, jbyte *newString, int newLength);
+
+int JNICALL utf8ToPlatform(jbyte *utf8, int len, char* output, int outputMaxLen);
+int JNICALL utf8FromPlatform(char *str, int len, jbyte *output, int outputMaxLen);
+
+#endif
--- a/jdk/src/share/back/util.h Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/back/util.h Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, 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
@@ -53,9 +53,6 @@
#include "error_messages.h"
#include "debugInit.h"
-/* Get access to Native Platform Toolkit functions */
-#include "npt.h"
-
/* Definition of a CommonRef tracked by the backend for the frontend */
typedef struct RefNode {
jlong seqNum; /* ID of reference, also key for hash table */
@@ -123,9 +120,6 @@
unsigned log_flags;
- /* The Native Platform Toolkit access */
- NptEnv *npt;
-
/* Common References static data */
jrawMonitorID refLock;
jlong nextSeqNum;
--- a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageReader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageReader.java Wed Jun 18 13:14:15 2014 -0700
@@ -509,7 +509,7 @@
byte[] signature = new byte[6];
stream.readFully(signature);
- StringBuffer version = new StringBuffer(3);
+ StringBuilder version = new StringBuilder(3);
version.append((char)signature[3]);
version.append((char)signature[4]);
version.append((char)signature[5]);
--- a/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java Wed Jun 18 13:14:15 2014 -0700
@@ -900,7 +900,7 @@
if (times == 1) {
return s;
}
- StringBuffer sb = new StringBuffer((s.length() + 1)*times - 1);
+ StringBuilder sb = new StringBuilder((s.length() + 1)*times - 1);
sb.append(s);
for (int i = 1; i < times; i++) {
sb.append(" ");
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java Wed Jun 18 13:14:15 2014 -0700
@@ -169,23 +169,23 @@
result.add(typedInName);
}
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
len = result.size();
// construct the resulting string
for (int i=0; i<len; i++) {
if (i > 0) {
- buf.append(" ");
+ sb.append(" ");
}
if (len > 1) {
- buf.append("\"");
+ sb.append("\"");
}
- buf.append(result.get(i));
+ sb.append(result.get(i));
if (len > 1) {
- buf.append("\"");
+ sb.append("\"");
}
}
- return buf.toString();
+ return sb.toString();
}
public void setFileName(String fileName) {
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java Wed Jun 18 13:14:15 2014 -0700
@@ -533,13 +533,13 @@
// Pending: verify character encoding spec for gconf
Reader reader = new InputStreamReader(url.openStream(), "ISO-8859-1");
char[] buf = new char[1024];
- StringBuffer strBuf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
int n;
while ((n = reader.read(buf)) >= 0) {
- strBuf.append(buf, 0, n);
+ sb.append(buf, 0, n);
}
reader.close();
- String str = strBuf.toString();
+ String str = sb.toString();
if (str != null) {
String strLowerCase = str.toLowerCase();
int i = strLowerCase.indexOf("<entry name=\"theme\"");
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java Wed Jun 18 13:14:15 2014 -0700
@@ -121,20 +121,20 @@
}
private String fileNameString(File[] files) {
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; files != null && i < files.length; i++) {
if (i > 0) {
- buf.append(" ");
+ sb.append(" ");
}
if (files.length > 1) {
- buf.append("\"");
+ sb.append("\"");
}
- buf.append(fileNameString(files[i]));
+ sb.append(fileNameString(files[i]));
if (files.length > 1) {
- buf.append("\"");
+ sb.append("\"");
}
}
- return buf.toString();
+ return sb.toString();
}
public MotifFileChooserUI(JFileChooser filechooser) {
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java Wed Jun 18 13:14:15 2014 -0700
@@ -690,7 +690,7 @@
}
private String fileNameString(File[] files) {
- StringBuffer buf = new StringBuffer();
+ StringBuilder buf = new StringBuilder();
for (int i = 0; files != null && i < files.length; i++) {
if (i > 0) {
buf.append(" ");
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java Wed Jun 18 13:14:15 2014 -0700
@@ -628,7 +628,7 @@
}
if (metaCoding.length > 0
&& (verbose > 2 || verbose > 1 && metaCoding.length > 1)) {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < metaCoding.length; i++) {
if (i == 1) sb.append(" /");
sb.append(" ").append(metaCoding[i] & 0xFF);
@@ -756,7 +756,7 @@
" size="+outputSize()+
irr+" coding="+bandCoding);
if (metaCoding != noMetaCoding) {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < metaCoding.length; i++) {
if (i == 1) sb.append(" /");
sb.append(" ").append(metaCoding[i] & 0xFF);
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java Wed Jun 18 13:14:15 2014 -0700
@@ -839,7 +839,7 @@
return parts;
}
- /** @since JDK 7, JSR 292 */
+ /** @since 1.7, JSR 292 */
public static
class MethodHandleEntry extends Entry {
final int refKind;
@@ -889,7 +889,7 @@
}
}
- /** @since JDK 7, JSR 292 */
+ /** @since 1.7, JSR 292 */
public static
class MethodTypeEntry extends Entry {
final SignatureEntry typeRef;
@@ -924,7 +924,7 @@
}
}
- /** @since JDK 7, JSR 292 */
+ /** @since 1.7, JSR 292 */
public static
class InvokeDynamicEntry extends Entry {
final BootstrapMethodEntry bssRef;
@@ -977,7 +977,7 @@
}
}
- /** @since JDK 7, JSR 292 */
+ /** @since 1.7, JSR 292 */
public static
class BootstrapMethodEntry extends Entry {
final MethodHandleEntry bsmRef;
@@ -1026,7 +1026,7 @@
}
static
String stringValueOf(MethodHandleEntry bsmRef, Entry[] argRefs) {
- StringBuffer sb = new StringBuffer(bsmRef.stringValue());
+ StringBuilder sb = new StringBuilder(bsmRef.stringValue());
// Arguments are formatted as "<foo;bar;baz>" instead of "[foo,bar,baz]".
// This ensures there will be no confusion if "[,]" appear inside of names.
char nextSep = '<';
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -97,7 +97,7 @@
</ul>
<li>
-@since JDK1.5.0</li>
+@since 1.5</li>
<br><!-- Put @see and @since tags down here. -->
</body>
--- a/jdk/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java Wed Jun 18 13:14:15 2014 -0700
@@ -562,7 +562,7 @@
}
if (readMethod != null) {
ReflectUtil.checkPackageAccess(readMethod.getDeclaringClass());
- return MethodUtil.invoke(readMethod, complex, new Class[0]);
+ return MethodUtil.invoke(readMethod, complex, new Class<?>[0]);
}
throw new AttributeNotFoundException(
--- a/jdk/src/share/classes/com/sun/jmx/mbeanserver/MBeanInstantiator.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jmx/mbeanserver/MBeanInstantiator.java Wed Jun 18 13:14:15 2014 -0700
@@ -757,7 +757,7 @@
}
}
- private static void ensureClassAccess(Class clazz)
+ private static void ensureClassAccess(Class<?> clazz)
throws IllegalAccessException
{
int mod = clazz.getModifiers();
--- a/jdk/src/share/classes/com/sun/jmx/remote/internal/ClientNotifForwarder.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jmx/remote/internal/ClientNotifForwarder.java Wed Jun 18 13:14:15 2014 -0700
@@ -58,7 +58,7 @@
private final AccessControlContext acc;
- public ClientNotifForwarder(Map env) {
+ public ClientNotifForwarder(Map<String, ?> env) {
this(null, env);
}
--- a/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java Wed Jun 18 13:14:15 2014 -0700
@@ -310,10 +310,10 @@
}
});
if (s == null) return; /* security has not been enabled */
- final Set principals = s.getPrincipals();
+ final Set<Principal> principals = s.getPrincipals();
String newPropertyValue = null;
- for (Iterator i = principals.iterator(); i.hasNext(); ) {
- final Principal p = (Principal) i.next();
+ for (Iterator<Principal> i = principals.iterator(); i.hasNext(); ) {
+ final Principal p = i.next();
Access access = accessMap.get(p.getName());
if (access != null) {
boolean ok;
--- a/jdk/src/share/classes/com/sun/jmx/snmp/IPAcl/NetMaskImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jmx/snmp/IPAcl/NetMaskImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -63,12 +63,12 @@
if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(),
"extractSubNet", "BINARY ARRAY :");
- StringBuffer buff = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for(int i =0; i < addrLength; i++) {
- buff.append((b[i] &0xFF) +":");
+ sb.append((b[i] & 0xFF) + ":");
}
SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(),
- "extractSubNet", buff.toString());
+ "extractSubNet", sb.toString());
}
// 8 is a byte size. Common to any InetAddress (V4 or V6).
--- a/jdk/src/share/classes/com/sun/jmx/snmp/IPAcl/ParseException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jmx/snmp/IPAcl/ParseException.java Wed Jun 18 13:14:15 2014 -0700
@@ -170,7 +170,7 @@
* string literal.
*/
protected String add_escapes(String str) {
- StringBuffer retval = new StringBuffer();
+ StringBuilder retval = new StringBuilder();
char ch;
for (int i = 0; i < str.length(); i++) {
switch (str.charAt(i))
--- a/jdk/src/share/classes/com/sun/jmx/snmp/IPAcl/SnmpAcl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jmx/snmp/IPAcl/SnmpAcl.java Wed Jun 18 13:14:15 2014 -0700
@@ -186,8 +186,8 @@
public static String getDefaultAclFileName() {
final String fileSeparator =
System.getProperty("file.separator");
- final StringBuffer defaultAclName =
- new StringBuffer(System.getProperty("java.home")).
+ final StringBuilder defaultAclName =
+ new StringBuilder(System.getProperty("java.home")).
append(fileSeparator).append("lib").append(fileSeparator).
append("snmp.acl");
return defaultAclName.toString();
--- a/jdk/src/share/classes/com/sun/jmx/snmp/IPAcl/TokenMgrError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jmx/snmp/IPAcl/TokenMgrError.java Wed Jun 18 13:14:15 2014 -0700
@@ -65,7 +65,7 @@
* equivalents in the given string
*/
protected static final String addEscapes(String str) {
- StringBuffer retval = new StringBuffer();
+ StringBuilder retval = new StringBuilder();
char ch;
for (int i = 0; i < str.length(); i++) {
switch (str.charAt(i))
--- a/jdk/src/share/classes/com/sun/jmx/snmp/SnmpMessage.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jmx/snmp/SnmpMessage.java Wed Jun 18 13:14:15 2014 -0700
@@ -347,7 +347,7 @@
* @return The string containing the dump.
*/
public String printMessage() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if (community == null) {
sb.append("Community: null") ;
}
--- a/jdk/src/share/classes/com/sun/jmx/snmp/SnmpMsg.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jmx/snmp/SnmpMsg.java Wed Jun 18 13:14:15 2014 -0700
@@ -181,22 +181,22 @@
* @return The string containing the dump.
*/
public static String dumpHexBuffer(byte [] b, int offset, int len) {
- StringBuffer buf = new StringBuffer(len << 1) ;
+ StringBuilder sb = new StringBuilder(len << 1) ;
int k = 1 ;
int flen = offset + len ;
for (int i = offset; i < flen ; i++) {
int j = b[i] & 0xFF ;
- buf.append(Character.forDigit((j >>> 4) , 16)) ;
- buf.append(Character.forDigit((j & 0x0F), 16)) ;
+ sb.append(Character.forDigit((j >>> 4), 16)) ;
+ sb.append(Character.forDigit((j & 0x0F), 16)) ;
k++ ;
if (k%16 == 0) {
- buf.append('\n') ;
+ sb.append('\n') ;
k = 1 ;
} else
- buf.append(' ') ;
+ sb.append(' ') ;
}
- return buf.toString() ;
+ return sb.toString() ;
}
/**
@@ -205,7 +205,7 @@
* @return The string containing the dump.
*/
public String printMessage() {
- StringBuffer sb = new StringBuffer() ;
+ StringBuilder sb = new StringBuilder() ;
sb.append("Version: ") ;
sb.append(version) ;
sb.append("\n") ;
--- a/jdk/src/share/classes/com/sun/jmx/snmp/SnmpOpaque.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jmx/snmp/SnmpOpaque.java Wed Jun 18 13:14:15 2014 -0700
@@ -73,7 +73,7 @@
* @return The <CODE>String</CODE> representation of the value.
*/
public String toString() {
- StringBuffer result = new StringBuffer() ;
+ StringBuilder result = new StringBuilder() ;
for (int i = 0 ; i < value.length ; i++) {
byte b = value[i] ;
int n = (b >= 0) ? b : b + 256 ;
--- a/jdk/src/share/classes/com/sun/jmx/snmp/SnmpV3Message.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jmx/snmp/SnmpV3Message.java Wed Jun 18 13:14:15 2014 -0700
@@ -478,7 +478,7 @@
* @return The string containing the dump.
*/
public String printMessage() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("msgId : " + msgId + "\n");
sb.append("msgMaxSize : " + msgMaxSize + "\n");
sb.append("msgFlags : " + msgFlags + "\n");
--- a/jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpRequestTree.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpRequestTree.java Wed Jun 18 13:14:15 2014 -0700
@@ -535,7 +535,7 @@
// Save old vectors
SnmpOid[] olde = entryoids;
- Vector[] oldl = entrylists;
+ Vector<SnmpVarBind>[] oldl = entrylists;
boolean[] oldn = isentrynew;
SnmpVarBind[] oldr = rowstatus;
--- a/jdk/src/share/classes/com/sun/jndi/cosnaming/CNNameParser.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jndi/cosnaming/CNNameParser.java Wed Jun 18 13:14:15 2014 -0700
@@ -96,7 +96,7 @@
* Used by CNCtx.getNameInNamespace(), CNCompoundName.toString().
*/
static String cosNameToInsString(NameComponent[] cname) {
- StringBuffer str = new StringBuffer();
+ StringBuilder str = new StringBuilder();
for ( int i = 0; i < cname.length; i++) {
if ( i > 0) {
str.append(compSeparator);
@@ -254,7 +254,7 @@
}
private static String stringifyComponent(NameComponent comp) {
- StringBuffer one = new StringBuffer(escape(comp.id));
+ StringBuilder one = new StringBuilder(escape(comp.id));
if (comp.kind != null && !comp.kind.equals("")) {
one.append(kindSeparator + escape(comp.kind));
}
--- a/jdk/src/share/classes/com/sun/jndi/dns/DnsContextFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jndi/dns/DnsContextFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -198,14 +198,14 @@
}
}
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < servers.length; i++) {
if (i > 0) {
- buf.append(' ');
+ sb.append(' ');
}
- buf.append("dns://").append(servers[i]).append(path);
+ sb.append("dns://").append(servers[i]).append(path);
}
- return buf.toString();
+ return sb.toString();
}
/*
--- a/jdk/src/share/classes/com/sun/jndi/dns/DnsName.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jndi/dns/DnsName.java Wed Jun 18 13:14:15 2014 -0700
@@ -415,7 +415,7 @@
*/
private void parse(String name) throws InvalidNameException {
- StringBuffer label = new StringBuffer(); // label being parsed
+ StringBuilder label = new StringBuilder(); // label being parsed
for (int i = 0; i < name.length(); i++) {
char c = name.charAt(i);
@@ -564,15 +564,15 @@
* into account. See compareLabels().
*/
private static String keyForLabel(String label) {
- StringBuffer buf = new StringBuffer(label.length());
+ StringBuilder sb = new StringBuilder(label.length());
for (int i = 0; i < label.length(); i++) {
char c = label.charAt(i);
if (c >= 'A' && c <= 'Z') {
c += 'a' - 'A'; // to lower case
}
- buf.append(c);
+ sb.append(c);
}
- return buf.toString();
+ return sb.toString();
}
--- a/jdk/src/share/classes/com/sun/jndi/dns/ResourceRecord.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jndi/dns/ResourceRecord.java Wed Jun 18 13:14:15 2014 -0700
@@ -596,21 +596,21 @@
// If bestBase != -1, compress zeros in [bestBase, bestBase+bestLen)
boolean compress = (bestBase != -1);
- StringBuffer buf = new StringBuffer(40);
+ StringBuilder sb = new StringBuilder(40);
if (bestBase == 0) {
- buf.append(':');
+ sb.append(':');
}
for (int i = 0; i < 8; i++) {
if (!compress || (i < bestBase) || (i >= bestBase + bestLen)) {
- buf.append(Integer.toHexString(addr6[i]));
+ sb.append(Integer.toHexString(addr6[i]));
if (i < 7) {
- buf.append(':');
+ sb.append(':');
}
} else if (compress && (i == bestBase)) { // first compressed zero
- buf.append(':');
+ sb.append(':');
}
}
- return buf.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/com/sun/jndi/ldap/ClientId.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/ClientId.java Wed Jun 18 13:14:15 2014 -0700
@@ -210,7 +210,7 @@
if (ctls == null) {
return "";
}
- StringBuffer str = new StringBuffer();
+ StringBuilder str = new StringBuilder();
for (int i = 0; i < ctls.length; i++) {
str.append(ctls[i].getID());
str.append(' ');
--- a/jdk/src/share/classes/com/sun/jndi/ldap/DigestClientId.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/DigestClientId.java Wed Jun 18 13:14:15 2014 -0700
@@ -103,14 +103,14 @@
public String toString() {
if (propvals != null) {
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < propvals.length; i++) {
- buf.append(':');
+ sb.append(':');
if (propvals[i] != null) {
- buf.append(propvals[i]);
+ sb.append(propvals[i]);
}
}
- return super.toString() + buf.toString();
+ return super.toString() + sb.toString();
} else {
return super.toString();
}
--- a/jdk/src/share/classes/com/sun/jndi/ldap/LdapSchemaParser.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/LdapSchemaParser.java Wed Jun 18 13:14:15 2014 -0700
@@ -767,7 +767,7 @@
final private String classDef2ObjectDesc(Attributes attrs)
throws NamingException {
- StringBuffer objectDesc = new StringBuffer("( ");
+ StringBuilder objectDesc = new StringBuilder("( ");
Attribute attr = null;
int count = 0;
@@ -879,7 +879,7 @@
final private String attrDef2AttrDesc(Attributes attrs)
throws NamingException {
- StringBuffer attrDesc = new StringBuffer("( "); // opening parens
+ StringBuilder attrDesc = new StringBuilder("( "); // opening parens
Attribute attr = null;
int count = 0;
@@ -1012,7 +1012,7 @@
final private String syntaxDef2SyntaxDesc(Attributes attrs)
throws NamingException {
- StringBuffer syntaxDesc = new StringBuffer("( "); // opening parens
+ StringBuilder syntaxDesc = new StringBuilder("( "); // opening parens
Attribute attr = null;
int count = 0;
@@ -1068,7 +1068,7 @@
final private String matchRuleDef2MatchRuleDesc(Attributes attrs)
throws NamingException {
- StringBuffer matchRuleDesc = new StringBuffer("( "); // opening parens
+ StringBuilder matchRuleDesc = new StringBuilder("( "); // opening parens
Attribute attr = null;
int count = 0;
@@ -1196,7 +1196,7 @@
// write QDList
- StringBuffer qdList = new StringBuffer(attr.getID());
+ StringBuilder qdList = new StringBuilder(attr.getID());
qdList.append(WHSP);
qdList.append(OID_LIST_BEGIN);
@@ -1233,7 +1233,7 @@
// write OID List
- StringBuffer oidList = new StringBuffer(oidsAttr.getID());
+ StringBuilder oidList = new StringBuilder(oidsAttr.getID());
oidList.append(WHSP);
oidList.append(OID_LIST_BEGIN);
--- a/jdk/src/share/classes/com/sun/jndi/ldap/ServiceLocator.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/ServiceLocator.java Wed Jun 18 13:14:15 2014 -0700
@@ -68,7 +68,7 @@
if (dn == null) {
return null;
}
- StringBuffer domain = new StringBuffer();
+ StringBuilder domain = new StringBuilder();
LdapName ldapName = new LdapName(dn);
// process RDNs left-to-right
--- a/jdk/src/share/classes/com/sun/jndi/ldap/sasl/DefaultCallbackHandler.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/sasl/DefaultCallbackHandler.java Wed Jun 18 13:14:15 2014 -0700
@@ -88,7 +88,7 @@
}
}
if (selected == -1) {
- StringBuffer allChoices = new StringBuffer();
+ StringBuilder allChoices = new StringBuilder();
for (int j = 0; j < choices.length; j++) {
allChoices.append(choices[j] + ",");
}
--- a/jdk/src/share/classes/com/sun/jndi/toolkit/dir/SearchFilter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/jndi/toolkit/dir/SearchFilter.java Wed Jun 18 13:14:15 2014 -0700
@@ -520,30 +520,30 @@
str = (String)obj;
}
int len = str.length();
- StringBuffer buf = new StringBuffer(len);
+ StringBuilder sb = new StringBuilder(len);
char ch;
for (int i = 0; i < len; i++) {
switch (ch=str.charAt(i)) {
case '*':
- buf.append("\\2a");
+ sb.append("\\2a");
break;
case '(':
- buf.append("\\28");
+ sb.append("\\28");
break;
case ')':
- buf.append("\\29");
+ sb.append("\\29");
break;
case '\\':
- buf.append("\\5c");
+ sb.append("\\5c");
break;
case 0:
- buf.append("\\00");
+ sb.append("\\00");
break;
default:
- buf.append(ch);
+ sb.append(ch);
}
}
- return buf.toString();
+ return sb.toString();
}
@@ -585,7 +585,7 @@
int param;
int where = 0, start = 0;
- StringBuffer answer = new StringBuffer(expr.length());
+ StringBuilder answer = new StringBuilder(expr.length());
while ((where = findUnescaped('{', expr, start)) >= 0) {
int pstart = where + 1; // skip '{'
--- a/jdk/src/share/classes/com/sun/management/DiagnosticCommandMBean.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/management/DiagnosticCommandMBean.java Wed Jun 18 13:14:15 2014 -0700
@@ -212,7 +212,7 @@
* {@linkplain javax.management.Notification#getUserData() userData} that
* is the new {@code MBeanInfo}.
*
- * @since 8
+ * @since 1.8
*/
public interface DiagnosticCommandMBean extends DynamicMBean
{
--- a/jdk/src/share/classes/com/sun/media/sound/SoftPerformer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/media/sound/SoftPerformer.java Wed Jun 18 13:14:15 2014 -0700
@@ -326,7 +326,7 @@
private static KeySortComparator keySortComparator = new KeySortComparator();
private String extractKeys(ModelConnectionBlock conn) {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if (conn.getSources() != null) {
sb.append("[");
ModelSource[] srcs = conn.getSources();
--- a/jdk/src/share/classes/com/sun/media/sound/WaveExtensibleFileReader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/media/sound/WaveExtensibleFileReader.java Wed Jun 18 13:14:15 2014 -0700
@@ -162,7 +162,7 @@
0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
private String decodeChannelMask(long channelmask) {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
long m = 1;
for (int i = 0; i < allchannelnames.length; i++) {
if ((channelmask & m) != 0L) {
--- a/jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/Base64.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/Base64.java Wed Jun 18 13:14:15 2014 -0700
@@ -257,7 +257,7 @@
public static final byte[] decode(Element element) throws Base64DecodingException {
Node sibling = element.getFirstChild();
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
while (sibling != null) {
if (sibling.getNodeType() == Node.TEXT_NODE) {
--- a/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -7697,7 +7697,7 @@
* @param columnIndex the first column is 1, the second is 2, ...
* @return a SQLXML object that maps an SQL XML value
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public SQLXML getSQLXML(int columnIndex) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
@@ -7723,7 +7723,7 @@
* @return the column value if the value is a SQL <code>NULL</code> the
* value returned is <code>null</code>
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public RowId getRowId(int columnIndex) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
@@ -7738,7 +7738,7 @@
* @return the column value if the value is a SQL <code>NULL</code> the
* value returned is <code>null</code>
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public RowId getRowId(String columnName) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
@@ -7754,7 +7754,7 @@
* @param columnIndex the first column is 1, the second 2, ...
* @param x the column value
* @throws SQLException if a database access occurs
- * @since 6.0
+ * @since 1.6
*/
public void updateRowId(int columnIndex, RowId x) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
@@ -7770,7 +7770,7 @@
* @param columnName the name of the column
* @param x the column value
* @throws SQLException if a database access occurs
- * @since 6.0
+ * @since 1.6
*/
public void updateRowId(String columnName, RowId x) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
@@ -7780,7 +7780,7 @@
* Retrieves the holdability of this ResultSet object
* @return either ResultSet.HOLD_CURSORS_OVER_COMMIT or ResultSet.CLOSE_CURSORS_AT_COMMIT
* @throws SQLException if a database error occurs
- * @since 6.0
+ * @since 1.6
*/
public int getHoldability() throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
@@ -7791,7 +7791,7 @@
* method close has been called on it, or if it is automatically closed.
* @return true if this ResultSet object is closed; false if it is still open
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public boolean isClosed() throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
@@ -7803,7 +7803,7 @@
* @param columnIndex the first column is 1, the second 2, ...
* @param nString the value for the column to be updated
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public void updateNString(int columnIndex, String nString) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
@@ -7815,7 +7815,7 @@
* @param columnName name of the Column
* @param nString the value for the column to be updated
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public void updateNString(String columnName, String nString) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
@@ -7828,7 +7828,7 @@
* @param columnIndex the first column is 1, the second 2, ...
* @param nClob the value for the column to be updated
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public void updateNClob(int columnIndex, NClob nClob) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
@@ -7840,7 +7840,7 @@
* @param columnName name of the column
* @param nClob the value for the column to be updated
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public void updateNClob(String columnName, NClob nClob) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
@@ -7855,7 +7855,7 @@
* @return a <code>NClob</code> object representing the SQL
* <code>NCLOB</code> value in the specified column
* @exception SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public NClob getNClob(int i) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
@@ -7871,7 +7871,7 @@
* @return a <code>NClob</code> object representing the SQL <code>NCLOB</code>
* value in the specified column
* @exception SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public NClob getNClob(String colName) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
--- a/jdk/src/share/classes/com/sun/rowset/JdbcRowSetImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/rowset/JdbcRowSetImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -4505,7 +4505,7 @@
* @param columnIndex the first column is 1, the second is 2, ...
* @return a SQLXML object that maps an SQL XML value
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public SQLXML getSQLXML(int columnIndex) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
@@ -4531,7 +4531,7 @@
* @return the column value if the value is a SQL <code>NULL</code> the
* value returned is <code>null</code>
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public RowId getRowId(int columnIndex) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
@@ -4546,7 +4546,7 @@
* @return the column value if the value is a SQL <code>NULL</code> the
* value returned is <code>null</code>
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public RowId getRowId(String columnName) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
@@ -4562,7 +4562,7 @@
* @param columnIndex the first column is 1, the second 2, ...
* @param x the column value
* @throws SQLException if a database access occurs
- * @since 6.0
+ * @since 1.6
*/
public void updateRowId(int columnIndex, RowId x) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
@@ -4578,7 +4578,7 @@
* @param columnName the name of the column
* @param x the column value
* @throws SQLException if a database access occurs
- * @since 6.0
+ * @since 1.6
*/
public void updateRowId(String columnName, RowId x) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
@@ -4588,7 +4588,7 @@
* Retrieves the holdability of this ResultSet object
* @return either ResultSet.HOLD_CURSORS_OVER_COMMIT or ResultSet.CLOSE_CURSORS_AT_COMMIT
* @throws SQLException if a database error occurs
- * @since 6.0
+ * @since 1.6
*/
public int getHoldability() throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
@@ -4599,7 +4599,7 @@
* method close has been called on it, or if it is automatically closed.
* @return true if this ResultSet object is closed; false if it is still open
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public boolean isClosed() throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
@@ -4611,7 +4611,7 @@
* @param columnIndex the first column is 1, the second 2, ...
* @param nString the value for the column to be updated
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public void updateNString(int columnIndex, String nString) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
@@ -4623,7 +4623,7 @@
* @param columnName name of the Column
* @param nString the value for the column to be updated
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public void updateNString(String columnName, String nString) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
@@ -4636,7 +4636,7 @@
* @param columnIndex the first column is 1, the second 2, ...
* @param nClob the value for the column to be updated
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public void updateNClob(int columnIndex, NClob nClob) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
@@ -4648,7 +4648,7 @@
* @param columnName name of the column
* @param nClob the value for the column to be updated
* @throws SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public void updateNClob(String columnName, NClob nClob) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
@@ -4663,7 +4663,7 @@
* @return a <code>NClob</code> object representing the SQL
* <code>NCLOB</code> value in the specified column
* @exception SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public NClob getNClob(int i) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
@@ -4679,7 +4679,7 @@
* @return a <code>NClob</code> object representing the SQL <code>NCLOB</code>
* value in the specified column
* @exception SQLException if a database access error occurs
- * @since 6.0
+ * @since 1.6
*/
public NClob getNClob(String colName) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
--- a/jdk/src/share/classes/com/sun/security/sasl/CramMD5Base.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/security/sasl/CramMD5Base.java Wed Jun 18 13:14:15 2014 -0700
@@ -195,7 +195,7 @@
digest = md5.digest();
// Get character representation of digest
- StringBuffer digestString = new StringBuffer();
+ StringBuilder digestString = new StringBuilder();
for (i = 0; i < digest.length; i++) {
if ((digest[i] & 0x000000ff) < 0x10) {
--- a/jdk/src/share/classes/com/sun/security/sasl/CramMD5Server.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/security/sasl/CramMD5Server.java Wed Jun 18 13:14:15 2014 -0700
@@ -117,15 +117,15 @@
long rand = random.nextLong();
long timestamp = System.currentTimeMillis();
- StringBuffer buf = new StringBuffer();
- buf.append('<');
- buf.append(rand);
- buf.append('.');
- buf.append(timestamp);
- buf.append('@');
- buf.append(fqdn);
- buf.append('>');
- String challengeStr = buf.toString();
+ StringBuilder sb = new StringBuilder();
+ sb.append('<');
+ sb.append(rand);
+ sb.append('.');
+ sb.append(timestamp);
+ sb.append('@');
+ sb.append(fqdn);
+ sb.append('>');
+ String challengeStr = sb.toString();
logger.log(Level.FINE,
"CRAMSRV01:Generated challenge: {0}", challengeStr);
--- a/jdk/src/share/classes/com/sun/security/sasl/digest/DigestMD5Base.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/security/sasl/digest/DigestMD5Base.java Wed Jun 18 13:14:15 2014 -0700
@@ -387,7 +387,7 @@
protected byte[] binaryToHex(byte[] digest) throws
UnsupportedEncodingException {
- StringBuffer digestString = new StringBuffer();
+ StringBuilder digestString = new StringBuilder();
for (int i = 0; i < digest.length; i ++) {
if ((digest[i] & 0x000000ff) < 0x10) {
@@ -598,7 +598,7 @@
protected static String nonceCountToHex(int count) {
String str = Integer.toHexString(count);
- StringBuffer pad = new StringBuffer();
+ StringBuilder pad = new StringBuilder();
if (str.length() < 8) {
for (int i = 0; i < 8-str.length(); i ++) {
--- a/jdk/src/share/classes/com/sun/security/sasl/digest/DigestMD5Server.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/security/sasl/digest/DigestMD5Server.java Wed Jun 18 13:14:15 2014 -0700
@@ -203,19 +203,19 @@
String supportedCiphers = null;
if ((allQop&PRIVACY_PROTECTION) != 0) {
myCiphers = getPlatformCiphers();
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
// myCipher[i] is a byte that indicates whether CIPHER_TOKENS[i]
// is supported
for (int i = 0; i < CIPHER_TOKENS.length; i++) {
if (myCiphers[i] != 0) {
- if (buf.length() > 0) {
- buf.append(',');
+ if (sb.length() > 0) {
+ sb.append(',');
}
- buf.append(CIPHER_TOKENS[i]);
+ sb.append(CIPHER_TOKENS[i]);
}
}
- supportedCiphers = buf.toString();
+ supportedCiphers = sb.toString();
}
try {
--- a/jdk/src/share/classes/com/sun/security/sasl/util/AbstractSaslImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/security/sasl/util/AbstractSaslImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -80,13 +80,13 @@
"SASLIMPL02:Preferred qop mask: {0}", new Byte(allQop));
if (qop.length > 0) {
- StringBuffer qopbuf = new StringBuffer();
+ StringBuilder str = new StringBuilder();
for (int i = 0; i < qop.length; i++) {
- qopbuf.append(Byte.toString(qop[i]));
- qopbuf.append(' ');
+ str.append(Byte.toString(qop[i]));
+ str.append(' ');
}
logger.logp(Level.FINE, myClassName, "constructor",
- "SASLIMPL03:Preferred qops : {0}", qopbuf.toString());
+ "SASLIMPL03:Preferred qops : {0}", str.toString());
}
}
@@ -95,13 +95,13 @@
logger.logp(Level.FINE, myClassName, "constructor",
"SASLIMPL04:Preferred strength property: {0}", prop);
if (logger.isLoggable(Level.FINE) && strength.length > 0) {
- StringBuffer strbuf = new StringBuffer();
+ StringBuilder str = new StringBuilder();
for (int i = 0; i < strength.length; i++) {
- strbuf.append(Byte.toString(strength[i]));
- strbuf.append(' ');
+ str.append(Byte.toString(strength[i]));
+ str.append(' ');
}
logger.logp(Level.FINE, myClassName, "constructor",
- "SASLIMPL05:Cipher strengths: {0}", strbuf.toString());
+ "SASLIMPL05:Cipher strengths: {0}", str.toString());
}
// Max receive buffer size
--- a/jdk/src/share/classes/com/sun/tools/attach/VirtualMachine.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/attach/VirtualMachine.java Wed Jun 18 13:14:15 2014 -0700
@@ -76,16 +76,10 @@
* // attach to target VM
* VirtualMachine vm = VirtualMachine.attach("2177");
*
- * // get system properties in target VM
- * Properties props = vm.getSystemProperties();
- *
- * // construct path to management agent
- * String home = props.getProperty("java.home");
- * String agent = home + File.separator + "lib" + File.separator
- * + "management-agent.jar";
- *
- * // load agent into target VM
- * vm.loadAgent(agent, "com.sun.management.jmxremote.port=5000");
+ * // start management agent
+ * Properties props = new Properties();
+ * props.put("com.sun.management.jmxremote.port", "5000");
+ * vm.startManagementAgent(props);
*
* // detach
* vm.detach();
@@ -93,9 +87,9 @@
* </pre>
*
* <p> In this example we attach to a Java virtual machine that is identified by
- * the process identifier <code>2177</code>. The system properties from the target
- * VM are then used to construct the path to a <i>management agent</i> which is then
- * loaded into the target VM. Once loaded the client detaches from the target VM. </p>
+ * the process identifier <code>2177</code>. Then the JMX management agent is
+ * started in the target process using the supplied arguments. Finally, the
+ * client detaches from the target VM. </p>
*
* <p> A VirtualMachine is safe for use by multiple concurrent threads. </p>
*
@@ -611,6 +605,68 @@
public abstract Properties getAgentProperties() throws IOException;
/**
+ * Starts the JMX management agent in the target virtual machine.
+ *
+ * <p> The configuration properties are the same as those specified on
+ * the command line when starting the JMX management agent. In the same
+ * way as on the command line, you need to specify at least the
+ * {@code com.sun.management.jmxremote.port} property.
+ *
+ * <p> See the online documentation for <a
+ * href="../../../../../../../../technotes/guides/management/agent.html">
+ * Monitoring and Management Using JMX Technology</a> for further details.
+ *
+ * @param agentProperties
+ * A Properties object containing the configuration properties
+ * for the agent.
+ *
+ * @throws AttachOperationFailedException
+ * If the target virtual machine is unable to complete the
+ * attach operation. A more specific error message will be
+ * given by {@link AttachOperationFailedException#getMessage()}.
+ *
+ * @throws IOException
+ * If an I/O error occurs, a communication error for example,
+ * that cannot be identified as an error to indicate that the
+ * operation failed in the target VM.
+ *
+ * @throws IllegalArgumentException
+ * If keys or values in agentProperties are invalid.
+ *
+ * @throws NullPointerException
+ * If agentProperties is null.
+ *
+ * @since 1.9
+ */
+ public abstract void startManagementAgent(Properties agentProperties) throws IOException;
+
+ /**
+ * Starts the local JMX management agent in the target virtual machine.
+ *
+ * <p> See the online documentation for <a
+ * href="../../../../../../../../technotes/guides/management/agent.html">
+ * Monitoring and Management Using JMX Technology</a> for further details.
+ *
+ * @return The String representation of the local connector's service address.
+ * The value can be parsed by the
+ * {@link javax.management.remote.JMXServiceURL#JMXServiceURL(String)}
+ * constructor.
+ *
+ * @throws AttachOperationFailedException
+ * If the target virtual machine is unable to complete the
+ * attach operation. A more specific error message will be
+ * given by {@link AttachOperationFailedException#getMessage()}.
+ *
+ * @throws IOException
+ * If an I/O error occurs, a communication error for example,
+ * that cannot be identified as an error to indicate that the
+ * operation failed in the target VM.
+ *
+ * @since 1.9
+ */
+ public abstract String startLocalManagementAgent() throws IOException;
+
+ /**
* Returns a hash-code value for this VirtualMachine. The hash
* code is based upon the VirtualMachine's components, and satifies
* the general contract of the {@link java.lang.Object#hashCode()
--- a/jdk/src/share/classes/com/sun/tools/example/debug/bdi/ExceptionSpec.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/bdi/ExceptionSpec.java Wed Jun 18 13:14:15 2014 -0700
@@ -102,8 +102,8 @@
@Override
public String toString() {
- StringBuffer buffer = new StringBuffer("exception catch ");
- buffer.append(refSpec.toString());
- return buffer.toString();
+ StringBuilder sb = new StringBuilder("exception catch ");
+ sb.append(refSpec.toString());
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/com/sun/tools/example/debug/bdi/LineBreakpointSpec.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/bdi/LineBreakpointSpec.java Wed Jun 18 13:14:15 2014 -0700
@@ -118,13 +118,13 @@
@Override
public String toString() {
- StringBuffer buffer = new StringBuffer("breakpoint ");
- buffer.append(refSpec.toString());
- buffer.append(':');
- buffer.append(lineNumber);
- buffer.append(" (");
- buffer.append(getStatusString());
- buffer.append(')');
- return buffer.toString();
+ StringBuilder sb = new StringBuilder("breakpoint ");
+ sb.append(refSpec.toString());
+ sb.append(':');
+ sb.append(lineNumber);
+ sb.append(" (");
+ sb.append(getStatusString());
+ sb.append(')');
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/com/sun/tools/example/debug/bdi/MethodBreakpointSpec.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/bdi/MethodBreakpointSpec.java Wed Jun 18 13:14:15 2014 -0700
@@ -126,26 +126,26 @@
@Override
public String toString() {
- StringBuffer buffer = new StringBuffer("breakpoint ");
- buffer.append(refSpec.toString());
- buffer.append('.');
- buffer.append(methodId);
+ StringBuilder sb = new StringBuilder("breakpoint ");
+ sb.append(refSpec.toString());
+ sb.append('.');
+ sb.append(methodId);
if (methodArgs != null) {
boolean first = true;
- buffer.append('(');
+ sb.append('(');
for (String name : methodArgs) {
if (!first) {
- buffer.append(',');
+ sb.append(',');
}
- buffer.append(name);
+ sb.append(name);
first = false;
}
- buffer.append(")");
+ sb.append(")");
}
- buffer.append(" (");
- buffer.append(getStatusString());
- buffer.append(')');
- return buffer.toString();
+ sb.append(" (");
+ sb.append(getStatusString());
+ sb.append(')');
+ return sb.toString();
}
private boolean isValidMethodName(String s) {
@@ -225,8 +225,8 @@
* stripping whitespace after the name ends.
*/
int i = 0;
- StringBuffer typePart = new StringBuffer();
- StringBuffer arrayPart = new StringBuffer();
+ StringBuilder typePart = new StringBuilder();
+ StringBuilder arrayPart = new StringBuilder();
name = name.trim();
int nameLength = name.length();
/*
--- a/jdk/src/share/classes/com/sun/tools/example/debug/expr/ExpressionParser.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/expr/ExpressionParser.java Wed Jun 18 13:14:15 2014 -0700
@@ -185,7 +185,7 @@
}
final public String Name() throws ParseException {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
jj_consume_token(IDENTIFIER);
sb.append(token);
label_2:
--- a/jdk/src/share/classes/com/sun/tools/example/debug/expr/ParseException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/expr/ParseException.java Wed Jun 18 13:14:15 2014 -0700
@@ -114,7 +114,7 @@
int[][] expectedTokenSequences,
String[] tokenImage) {
String eol = System.getProperty("line.separator", "\n");
- StringBuffer expected = new StringBuffer();
+ StringBuilder expected = new StringBuilder();
int maxSize = 0;
for (int i = 0; i < expectedTokenSequences.length; i++) {
if (maxSize < expectedTokenSequences[i].length) {
@@ -164,7 +164,7 @@
* string literal.
*/
static String add_escapes(String str) {
- StringBuffer retval = new StringBuffer();
+ StringBuilder retval = new StringBuilder();
char ch;
for (int i = 0; i < str.length(); i++) {
switch (str.charAt(i))
--- a/jdk/src/share/classes/com/sun/tools/example/debug/expr/TokenMgrError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/expr/TokenMgrError.java Wed Jun 18 13:14:15 2014 -0700
@@ -73,7 +73,7 @@
* equivalents in the given string
*/
protected static final String addEscapes(String str) {
- StringBuffer retval = new StringBuffer();
+ StringBuilder retval = new StringBuilder();
char ch;
for (int i = 0; i < str.length(); i++) {
switch (str.charAt(i))
--- a/jdk/src/share/classes/com/sun/tools/example/debug/gui/CommandInterpreter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/gui/CommandInterpreter.java Wed Jun 18 13:14:15 2014 -0700
@@ -267,7 +267,7 @@
buf[j] = ' ';
}
buf[79] = '\0';
- StringBuffer sbOut = new StringBuffer();
+ StringBuilder sbOut = new StringBuilder();
sbOut.append(buf);
// Right-justify the thread number at start of output string
@@ -381,16 +381,16 @@
}
} else {
clname = t.nextToken();
- StringBuffer sbuf = new StringBuffer();
+ StringBuilder str = new StringBuilder();
// Allow VM arguments to be specified here?
while (t.hasMoreTokens()) {
String tok = t.nextToken();
- sbuf.append(tok);
+ str.append(tok);
if (t.hasMoreTokens()) {
- sbuf.append(' ');
+ str.append(' ');
}
}
- String args = sbuf.toString();
+ String args = str.toString();
try {
String vmArgs = context.getVmArguments();
runtime.run(suspended, vmArgs, clname, args);
--- a/jdk/src/share/classes/com/sun/tools/example/debug/gui/ContextManager.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/gui/ContextManager.java Wed Jun 18 13:14:15 2014 -0700
@@ -333,7 +333,7 @@
private String processClasspathDefaults(String javaArgs) {
if (javaArgs.indexOf("-classpath ") == -1) {
- StringBuffer munged = new StringBuffer(javaArgs);
+ StringBuilder munged = new StringBuilder(javaArgs);
SearchPath classpath = classManager.getClassPath();
if (classpath.isEmpty()) {
String envcp = System.getProperty("env.class.path");
--- a/jdk/src/share/classes/com/sun/tools/example/debug/gui/SourceModel.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/gui/SourceModel.java Wed Jun 18 13:14:15 2014 -0700
@@ -236,7 +236,7 @@
private String expandTabs(String s) {
int col = 0;
int len = s.length();
- StringBuffer sb = new StringBuffer(132);
+ StringBuilder sb = new StringBuilder(132);
for (int i = 0; i < len; i++) {
char c = s.charAt(i);
sb.append(c);
--- a/jdk/src/share/classes/com/sun/tools/example/debug/tty/BreakpointSpec.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/tty/BreakpointSpec.java Wed Jun 18 13:14:15 2014 -0700
@@ -154,27 +154,27 @@
@Override
public String toString() {
- StringBuffer buffer = new StringBuffer(refSpec.toString());
+ StringBuilder sb = new StringBuilder(refSpec.toString());
if (isMethodBreakpoint()) {
- buffer.append('.');
- buffer.append(methodId);
+ sb.append('.');
+ sb.append(methodId);
if (methodArgs != null) {
boolean first = true;
- buffer.append('(');
+ sb.append('(');
for (String arg : methodArgs) {
if (!first) {
- buffer.append(',');
+ sb.append(',');
}
- buffer.append(arg);
+ sb.append(arg);
first = false;
}
- buffer.append(")");
+ sb.append(")");
}
} else {
- buffer.append(':');
- buffer.append(lineNumber);
+ sb.append(':');
+ sb.append(lineNumber);
}
- return MessageOutput.format("breakpoint", buffer.toString());
+ return MessageOutput.format("breakpoint", sb.toString());
}
private Location location(ReferenceType refType) throws
@@ -275,8 +275,8 @@
* stripping whitespace after the name ends
*/
int i = 0;
- StringBuffer typePart = new StringBuffer();
- StringBuffer arrayPart = new StringBuffer();
+ StringBuilder typePart = new StringBuilder();
+ StringBuilder arrayPart = new StringBuilder();
name = name.trim();
int nameLength = name.length();
/*
--- a/jdk/src/share/classes/com/sun/tools/example/debug/tty/Commands.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/tty/Commands.java Wed Jun 18 13:14:15 2014 -0700
@@ -164,30 +164,30 @@
}
String typedName(Method method) {
- StringBuffer buf = new StringBuffer();
- buf.append(method.name());
- buf.append("(");
+ StringBuilder sb = new StringBuilder();
+ sb.append(method.name());
+ sb.append("(");
List<String> args = method.argumentTypeNames();
int lastParam = args.size() - 1;
// output param types except for the last
for (int ii = 0; ii < lastParam; ii++) {
- buf.append(args.get(ii));
- buf.append(", ");
+ sb.append(args.get(ii));
+ sb.append(", ");
}
if (lastParam >= 0) {
// output the last param
String lastStr = args.get(lastParam);
if (method.isVarArgs()) {
// lastParam is an array. Replace the [] with ...
- buf.append(lastStr.substring(0, lastStr.length() - 2));
- buf.append("...");
+ sb.append(lastStr.substring(0, lastStr.length() - 2));
+ sb.append("...");
} else {
- buf.append(lastStr);
+ sb.append(lastStr);
}
}
- buf.append(")");
- return buf.toString();
+ sb.append(")");
+ return sb.toString();
}
void commandConnectors(VirtualMachineManager vmm) {
@@ -226,7 +226,7 @@
}
void commandClasses() {
- StringBuffer classList = new StringBuffer();
+ StringBuilder classList = new StringBuilder();
for (ReferenceType refType : Env.vm().allClasses()) {
classList.append(refType.name());
classList.append("\n");
@@ -309,7 +309,7 @@
String idClass = t.nextToken();
ReferenceType cls = Env.getReferenceTypeFromToken(idClass);
if (cls != null) {
- StringBuffer methodsList = new StringBuffer();
+ StringBuilder methodsList = new StringBuilder();
for (Method method : cls.allMethods()) {
methodsList.append(method.declaringType().name());
methodsList.append(" ");
@@ -333,7 +333,7 @@
if (cls != null) {
List<Field> fields = cls.allFields();
List<Field> visible = cls.visibleFields();
- StringBuffer fieldsList = new StringBuffer();
+ StringBuilder fieldsList = new StringBuilder();
for (Field field : fields) {
String s;
if (!visible.contains(field)) {
@@ -391,11 +391,11 @@
* very long thread names, at the possible cost of lines
* being wrapped by the display device.
*/
- StringBuffer idBuffer = new StringBuffer(Env.description(thr));
+ StringBuilder idBuffer = new StringBuilder(Env.description(thr));
for (int i = idBuffer.length(); i < maxIdLength; i++) {
idBuffer.append(" ");
}
- StringBuffer nameBuffer = new StringBuffer(thr.name());
+ StringBuilder nameBuffer = new StringBuilder(thr.name());
for (int i = nameBuffer.length(); i < maxNameLength; i++) {
nameBuffer.append(" ");
}
@@ -1606,16 +1606,16 @@
private void dump(ObjectReference obj, ReferenceType refType,
ReferenceType refTypeBase) {
for (Field field : refType.fields()) {
- StringBuffer o = new StringBuffer();
- o.append(" ");
+ StringBuilder sb = new StringBuilder();
+ sb.append(" ");
if (!refType.equals(refTypeBase)) {
- o.append(refType.name());
- o.append(".");
+ sb.append(refType.name());
+ sb.append(".");
}
- o.append(field.name());
- o.append(MessageOutput.format("colon space"));
- o.append(obj.getValue(field));
- MessageOutput.printDirectln(o.toString()); // Special case: use printDirectln()
+ sb.append(field.name());
+ sb.append(MessageOutput.format("colon space"));
+ sb.append(obj.getValue(field));
+ MessageOutput.printDirectln(sb.toString()); // Special case: use printDirectln()
}
if (refType instanceof ClassType) {
ClassType sup = ((ClassType)refType).superclass();
@@ -1954,7 +1954,7 @@
}
}
- StringBuffer line = new StringBuffer(80);
+ StringBuilder line = new StringBuilder(80);
line.append("0000: ");
for (int i = 0; i < bytecodes.length; i++) {
if ((i > 0) && (i % 16 == 0)) {
--- a/jdk/src/share/classes/com/sun/tools/example/debug/tty/Env.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/tty/Env.java Wed Jun 18 13:14:15 2014 -0700
@@ -114,12 +114,12 @@
}
static String excludesString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (String pattern : excludes()) {
- buffer.append(pattern);
- buffer.append(",");
+ sb.append(pattern);
+ sb.append(",");
}
- return buffer.toString();
+ return sb.toString();
}
static void addExcludes(StepRequest request) {
--- a/jdk/src/share/classes/com/sun/tools/example/debug/tty/TTY.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/tty/TTY.java Wed Jun 18 13:14:15 2014 -0700
@@ -827,17 +827,17 @@
private static String addArgument(String string, String argument) {
if (hasWhitespace(argument) || argument.indexOf(',') != -1) {
// Quotes were stripped out for this argument, add 'em back.
- StringBuffer buffer = new StringBuffer(string);
- buffer.append('"');
+ StringBuilder sb = new StringBuilder(string);
+ sb.append('"');
for (int i = 0; i < argument.length(); i++) {
char c = argument.charAt(i);
if (c == '"') {
- buffer.append('\\');
+ sb.append('\\');
}
- buffer.append(c);
+ sb.append(c);
}
- buffer.append("\" ");
- return buffer.toString();
+ sb.append("\" ");
+ return sb.toString();
} else {
return string + argument + ' ';
}
--- a/jdk/src/share/classes/com/sun/tools/example/trace/Trace.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/example/trace/Trace.java Wed Jun 18 13:14:15 2014 -0700
@@ -121,7 +121,7 @@
usage();
System.exit(1);
}
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append(args[inx]);
for (++inx; inx < args.length; ++inx) {
sb.append(' ');
--- a/jdk/src/share/classes/com/sun/tools/hat/internal/util/Misc.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/hat/internal/util/Misc.java Wed Jun 18 13:14:15 2014 -0700
@@ -83,30 +83,30 @@
public static String encodeHtml(String str) {
final int len = str.length();
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++) {
char ch = str.charAt(i);
if (ch == '<') {
- buf.append("<");
+ sb.append("<");
} else if (ch == '>') {
- buf.append(">");
+ sb.append(">");
} else if (ch == '"') {
- buf.append(""");
+ sb.append(""");
} else if (ch == '\'') {
- buf.append("'");
+ sb.append("'");
} else if (ch == '&') {
- buf.append("&");
+ sb.append("&");
} else if (ch < ' ') {
- buf.append("&#" + Integer.toString(ch) + ";");
+ sb.append("&#" + Integer.toString(ch) + ";");
} else {
int c = (ch & 0xFFFF);
if (c > 127) {
- buf.append("&#" + Integer.toString(c) + ";");
+ sb.append("&#" + Integer.toString(c) + ";");
} else {
- buf.append(ch);
+ sb.append(ch);
}
}
}
- return buf.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/com/sun/tools/jdi/FieldImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/jdi/FieldImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -95,12 +95,12 @@
}
public String toString() {
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buf.append(declaringType().name());
- buf.append('.');
- buf.append(name());
+ sb.append(declaringType().name());
+ sb.append('.');
+ sb.append(name());
- return buf.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/com/sun/tools/jdi/JNITypeParser.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/jdi/JNITypeParser.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,11 +44,11 @@
}
static String typeNameToSignature(String signature) {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
int firstIndex = signature.indexOf('[');
int index = firstIndex;
while (index != -1) {
- buffer.append('[');
+ sb.append('[');
index = signature.indexOf('[', index + 1);
}
@@ -57,28 +57,28 @@
}
if (signature.equals("boolean")) {
- buffer.append('Z');
+ sb.append('Z');
} else if (signature.equals("byte")) {
- buffer.append('B');
+ sb.append('B');
} else if (signature.equals("char")) {
- buffer.append('C');
+ sb.append('C');
} else if (signature.equals("short")) {
- buffer.append('S');
+ sb.append('S');
} else if (signature.equals("int")) {
- buffer.append('I');
+ sb.append('I');
} else if (signature.equals("long")) {
- buffer.append('J');
+ sb.append('J');
} else if (signature.equals("float")) {
- buffer.append('F');
+ sb.append('F');
} else if (signature.equals("double")) {
- buffer.append('D');
+ sb.append('D');
} else {
- buffer.append('L');
- buffer.append(signature.replace('.', '/'));
- buffer.append(';');
+ sb.append('L');
+ sb.append(signature.replace('.', '/'));
+ sb.append(';');
}
- return buffer.toString();
+ return sb.toString();
}
String typeName() {
--- a/jdk/src/share/classes/com/sun/tools/jdi/MethodImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/jdi/MethodImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -387,7 +387,7 @@
}
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append(declaringType().name());
sb.append(".");
sb.append(name());
--- a/jdk/src/share/classes/com/sun/tools/jdi/ReferenceTypeImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ReferenceTypeImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -751,7 +751,7 @@
String baseSourceDir() {
if (baseSourceDir == null) {
String typeName = name();
- StringBuffer sb = new StringBuffer(typeName.length() + 10);
+ StringBuilder sb = new StringBuilder(typeName.length() + 10);
int index = 0;
int nextIndex;
--- a/jdk/src/share/classes/com/sun/tools/jdi/SDE.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/jdi/SDE.java Wed Jun 18 13:14:15 2014 -0700
@@ -56,16 +56,16 @@
if (sourcePath == null) {
sourcePath = refType.baseSourceDir() + sourceName;
} else {
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < sourcePath.length(); ++i) {
char ch = sourcePath.charAt(i);
if (ch == '/') {
- buf.append(File.separatorChar);
+ sb.append(File.separatorChar);
} else {
- buf.append(ch);
+ sb.append(ch);
}
}
- sourcePath = buf.toString();
+ sourcePath = sb.toString();
}
isConverted = true;
}
@@ -327,7 +327,7 @@
}
String readLine() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
char ch;
ignoreWhite();
--- a/jdk/src/share/classes/com/sun/tools/jdi/TargetVM.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/jdi/TargetVM.java Wed Jun 18 13:14:15 2014 -0700
@@ -78,7 +78,7 @@
", errorCode=" + packet.errorCode +
", flags=" + packet.flags);
}
- StringBuffer line = new StringBuffer(80);
+ StringBuilder line = new StringBuilder(80);
line.append("0000: ");
for (int i = 0; i < packet.data.length; i++) {
if ((i > 0) && (i % 16 == 0)) {
--- a/jdk/src/share/classes/com/sun/tools/jdi/VirtualMachineImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/com/sun/tools/jdi/VirtualMachineImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -742,7 +742,7 @@
}
void printReceiveTrace(int depth, String string) {
- StringBuffer sb = new StringBuffer("Receiving:");
+ StringBuilder sb = new StringBuilder("Receiving:");
for (int i = depth; i > 0; --i) {
sb.append(" ");
}
@@ -872,7 +872,7 @@
ReferenceTypeImpl referenceType(long id, int tag,
String signature) {
if ((vm.traceFlags & VirtualMachine.TRACE_REFTYPES) != 0) {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("Looking up ");
if (tag == JDWP.TypeTag.CLASS) {
sb.append("Class");
--- a/jdk/src/share/classes/java/applet/Applet.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/applet/Applet.java Wed Jun 18 13:14:15 2014 -0700
@@ -45,7 +45,7 @@
*
* @author Arthur van Hoff
* @author Chris Warth
- * @since JDK1.0
+ * @since 1.0
*/
public class Applet extends Panel {
@@ -375,7 +375,7 @@
*
* @return the locale of the applet; if no locale has
* been set, the default locale is returned.
- * @since JDK1.1
+ * @since 1.1
*/
public Locale getLocale() {
Locale locale = super.getLocale();
--- a/jdk/src/share/classes/java/applet/AppletContext.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/applet/AppletContext.java Wed Jun 18 13:14:15 2014 -0700
@@ -43,7 +43,7 @@
* information about its environment.
*
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public interface AppletContext {
/**
--- a/jdk/src/share/classes/java/applet/AppletStub.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/applet/AppletStub.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
*
* @author Arthur van Hoff
* @see java.applet.Applet#setStub(java.applet.AppletStub)
- * @since JDK1.0
+ * @since 1.0
*/
public interface AppletStub {
/**
--- a/jdk/src/share/classes/java/applet/AudioClip.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/applet/AudioClip.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* together to produce a composite.
*
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public interface AudioClip {
/**
--- a/jdk/src/share/classes/java/applet/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/applet/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -55,6 +55,6 @@
</ul>
-->
-@since JDK1.0
+@since 1.0
</body>
</html>
--- a/jdk/src/share/classes/java/awt/AWTError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/AWTError.java Wed Jun 18 13:14:15 2014 -0700
@@ -41,7 +41,7 @@
* Constructs an instance of <code>AWTError</code> with the specified
* detail message.
* @param msg the detail message.
- * @since JDK1.0
+ * @since 1.0
*/
public AWTError(String msg) {
super(msg);
--- a/jdk/src/share/classes/java/awt/AWTException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/AWTException.java Wed Jun 18 13:14:15 2014 -0700
@@ -43,7 +43,7 @@
* instance of <code>String</code> that describes this particular
* exception.
* @param msg the detail message
- * @since JDK1.0
+ * @since 1.0
*/
public AWTException(String msg) {
super(msg);
--- a/jdk/src/share/classes/java/awt/BorderLayout.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/BorderLayout.java Wed Jun 18 13:14:15 2014 -0700
@@ -119,7 +119,7 @@
* @author Arthur van Hoff
* @see java.awt.Container#add(String, Component)
* @see java.awt.ComponentOrientation
- * @since JDK1.0
+ * @since 1.0
*/
public class BorderLayout implements LayoutManager2,
java.io.Serializable {
@@ -367,7 +367,7 @@
/**
* Returns the horizontal gap between components.
- * @since JDK1.1
+ * @since 1.1
*/
public int getHgap() {
return hgap;
@@ -376,7 +376,7 @@
/**
* Sets the horizontal gap between components.
* @param hgap the horizontal gap between components
- * @since JDK1.1
+ * @since 1.1
*/
public void setHgap(int hgap) {
this.hgap = hgap;
@@ -384,7 +384,7 @@
/**
* Returns the vertical gap between components.
- * @since JDK1.1
+ * @since 1.1
*/
public int getVgap() {
return vgap;
@@ -393,7 +393,7 @@
/**
* Sets the vertical gap between components.
* @param vgap the vertical gap between components
- * @since JDK1.1
+ * @since 1.1
*/
public void setVgap(int vgap) {
this.vgap = vgap;
@@ -415,7 +415,7 @@
* @see java.awt.Container#add(java.awt.Component, java.lang.Object)
* @exception IllegalArgumentException if the constraint object is not
* a string, or if it not one of the five specified constants.
- * @since JDK1.1
+ * @since 1.1
*/
public void addLayoutComponent(Component comp, Object constraints) {
synchronized (comp.getTreeLock()) {
--- a/jdk/src/share/classes/java/awt/Button.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Button.java Wed Jun 18 13:14:15 2014 -0700
@@ -82,7 +82,7 @@
* @see java.awt.event.ActionListener
* @see java.awt.Component#processMouseEvent
* @see java.awt.Component#addMouseListener
- * @since JDK1.0
+ * @since 1.0
*/
public class Button extends Component implements Accessible {
@@ -228,7 +228,7 @@
* If the string is <code>null</code> then the action command
* is set to match the label of the button.
* @see java.awt.event.ActionEvent
- * @since JDK1.1
+ * @since 1.1
*/
public void setActionCommand(String command) {
actionCommand = command;
@@ -255,7 +255,7 @@
* @see #removeActionListener
* @see #getActionListeners
* @see java.awt.event.ActionListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addActionListener(ActionListener l) {
if (l == null) {
@@ -277,7 +277,7 @@
* @see #addActionListener
* @see #getActionListeners
* @see java.awt.event.ActionListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeActionListener(ActionListener l) {
if (l == null) {
@@ -370,7 +370,7 @@
* @param e the event
* @see java.awt.event.ActionEvent
* @see java.awt.Button#processActionEvent
- * @since JDK1.1
+ * @since 1.1
*/
protected void processEvent(AWTEvent e) {
if (e instanceof ActionEvent) {
@@ -401,7 +401,7 @@
* @see java.awt.event.ActionListener
* @see java.awt.Button#addActionListener
* @see java.awt.Component#enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected void processActionEvent(ActionEvent e) {
ActionListener listener = actionListener;
--- a/jdk/src/share/classes/java/awt/Canvas.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Canvas.java Wed Jun 18 13:14:15 2014 -0700
@@ -39,7 +39,7 @@
* in order to perform custom graphics on the canvas.
*
* @author Sami Shaio
- * @since JDK1.0
+ * @since 1.0
*/
public class Canvas extends Component implements Accessible {
--- a/jdk/src/share/classes/java/awt/CardLayout.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/CardLayout.java Wed Jun 18 13:14:15 2014 -0700
@@ -53,7 +53,7 @@
*
* @author Arthur van Hoff
* @see java.awt.Container
- * @since JDK1.0
+ * @since 1.0
*/
public class CardLayout implements LayoutManager2,
@@ -148,7 +148,7 @@
* @return the horizontal gap between components.
* @see java.awt.CardLayout#setHgap(int)
* @see java.awt.CardLayout#getVgap()
- * @since JDK1.1
+ * @since 1.1
*/
public int getHgap() {
return hgap;
@@ -159,7 +159,7 @@
* @param hgap the horizontal gap between components.
* @see java.awt.CardLayout#getHgap()
* @see java.awt.CardLayout#setVgap(int)
- * @since JDK1.1
+ * @since 1.1
*/
public void setHgap(int hgap) {
this.hgap = hgap;
@@ -180,7 +180,7 @@
* @param vgap the vertical gap between components.
* @see java.awt.CardLayout#getVgap()
* @see java.awt.CardLayout#setHgap(int)
- * @since JDK1.1
+ * @since 1.1
*/
public void setVgap(int vgap) {
this.vgap = vgap;
--- a/jdk/src/share/classes/java/awt/Checkbox.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Checkbox.java Wed Jun 18 13:14:15 2014 -0700
@@ -71,7 +71,7 @@
* @author Sami Shaio
* @see java.awt.GridLayout
* @see java.awt.CheckboxGroup
- * @since JDK1.0
+ * @since 1.0
*/
public class Checkbox extends Component implements ItemSelectable, Accessible {
@@ -190,7 +190,7 @@
* <code>GraphicsEnvironment.isHeadless</code>
* returns <code>true</code>
* @see java.awt.GraphicsEnvironment#isHeadless
- * @since JDK1.1
+ * @since 1.1
*/
public Checkbox(String label, boolean state, CheckboxGroup group)
throws HeadlessException {
@@ -216,7 +216,7 @@
* <code>GraphicsEnvironment.isHeadless</code>
* returns <code>true</code>
* @see java.awt.GraphicsEnvironment#isHeadless
- * @since JDK1.1
+ * @since 1.1
*/
public Checkbox(String label, CheckboxGroup group, boolean state)
throws HeadlessException {
@@ -424,7 +424,7 @@
* @see #setState
* @see java.awt.event.ItemEvent
* @see java.awt.event.ItemListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addItemListener(ItemListener l) {
if (l == null) {
@@ -446,7 +446,7 @@
* @see #getItemListeners
* @see java.awt.event.ItemEvent
* @see java.awt.event.ItemListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeItemListener(ItemListener l) {
if (l == null) {
@@ -540,7 +540,7 @@
* @param e the event
* @see java.awt.event.ItemEvent
* @see #processItemEvent
- * @since JDK1.1
+ * @since 1.1
*/
protected void processEvent(AWTEvent e) {
if (e instanceof ItemEvent) {
@@ -572,7 +572,7 @@
* @see java.awt.event.ItemListener
* @see #addItemListener
* @see java.awt.Component#enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected void processItemEvent(ItemEvent e) {
ItemListener listener = itemListener;
--- a/jdk/src/share/classes/java/awt/CheckboxGroup.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/CheckboxGroup.java Wed Jun 18 13:14:15 2014 -0700
@@ -52,7 +52,7 @@
*
* @author Sami Shaio
* @see java.awt.Checkbox
- * @since JDK1.0
+ * @since 1.0
*/
public class CheckboxGroup implements java.io.Serializable {
/**
@@ -84,7 +84,7 @@
* "on" state, or <code>null</code>.
* @see java.awt.Checkbox
* @see java.awt.CheckboxGroup#setSelectedCheckbox
- * @since JDK1.1
+ * @since 1.1
*/
public Checkbox getSelectedCheckbox() {
return getCurrent();
@@ -113,7 +113,7 @@
* current selection.
* @see java.awt.Checkbox
* @see java.awt.CheckboxGroup#getSelectedCheckbox
- * @since JDK1.1
+ * @since 1.1
*/
public void setSelectedCheckbox(Checkbox box) {
setCurrent(box);
--- a/jdk/src/share/classes/java/awt/CheckboxMenuItem.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/CheckboxMenuItem.java Wed Jun 18 13:14:15 2014 -0700
@@ -59,7 +59,7 @@
* @author Sami Shaio
* @see java.awt.event.ItemEvent
* @see java.awt.event.ItemListener
- * @since JDK1.0
+ * @since 1.0
*/
public class CheckboxMenuItem extends MenuItem implements ItemSelectable, Accessible {
@@ -102,7 +102,7 @@
* @exception HeadlessException if GraphicsEnvironment.isHeadless()
* returns true
* @see java.awt.GraphicsEnvironment#isHeadless
- * @since JDK1.1
+ * @since 1.1
*/
public CheckboxMenuItem() throws HeadlessException {
this("", false);
@@ -132,7 +132,7 @@
* @exception HeadlessException if GraphicsEnvironment.isHeadless()
* returns true
* @see java.awt.GraphicsEnvironment#isHeadless
- * @since JDK1.1
+ * @since 1.1
*/
public CheckboxMenuItem(String label, boolean state)
throws HeadlessException {
@@ -231,7 +231,7 @@
* @see #setState
* @see java.awt.event.ItemEvent
* @see java.awt.event.ItemListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addItemListener(ItemListener l) {
if (l == null) {
@@ -253,7 +253,7 @@
* @see #getItemListeners
* @see java.awt.event.ItemEvent
* @see java.awt.event.ItemListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeItemListener(ItemListener l) {
if (l == null) {
@@ -350,7 +350,7 @@
* @param e the event
* @see java.awt.event.ItemEvent
* @see #processItemEvent
- * @since JDK1.1
+ * @since 1.1
*/
protected void processEvent(AWTEvent e) {
if (e instanceof ItemEvent) {
@@ -381,7 +381,7 @@
* @see java.awt.event.ItemListener
* @see #addItemListener
* @see java.awt.MenuItem#enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected void processItemEvent(ItemEvent e) {
ItemListener listener = itemListener;
--- a/jdk/src/share/classes/java/awt/Choice.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Choice.java Wed Jun 18 13:14:15 2014 -0700
@@ -68,7 +68,7 @@
*
* @author Sami Shaio
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public class Choice extends Component implements ItemSelectable, Accessible {
/**
@@ -158,7 +158,7 @@
* Returns the number of items in this <code>Choice</code> menu.
* @return the number of items in this <code>Choice</code> menu
* @see #getItem
- * @since JDK1.1
+ * @since 1.1
*/
public int getItemCount() {
return countItems();
@@ -196,7 +196,7 @@
* @param item the item to be added
* @exception NullPointerException if the item's value is
* <code>null</code>
- * @since JDK1.1
+ * @since 1.1
*/
public void add(String item) {
addItem(item);
@@ -291,7 +291,7 @@
* @param item the item to remove from this <code>Choice</code> menu
* @exception IllegalArgumentException if the item doesn't
* exist in the choice menu
- * @since JDK1.1
+ * @since 1.1
*/
public void remove(String item) {
synchronized (this) {
@@ -319,7 +319,7 @@
* @param position the position of the item
* @throws IndexOutOfBoundsException if the specified
* position is out of bounds
- * @since JDK1.1
+ * @since 1.1
*/
public void remove(int position) {
synchronized (this) {
@@ -357,7 +357,7 @@
/**
* Removes all items from the choice menu.
* @see #remove
- * @since JDK1.1
+ * @since 1.1
*/
public void removeAll() {
synchronized (this) {
@@ -475,7 +475,7 @@
* @see #select
* @see java.awt.event.ItemEvent
* @see java.awt.event.ItemListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addItemListener(ItemListener l) {
if (l == null) {
@@ -497,7 +497,7 @@
* @see #getItemListeners
* @see java.awt.event.ItemEvent
* @see java.awt.event.ItemListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeItemListener(ItemListener l) {
if (l == null) {
@@ -591,7 +591,7 @@
* @param e the event
* @see java.awt.event.ItemEvent
* @see #processItemEvent
- * @since JDK1.1
+ * @since 1.1
*/
protected void processEvent(AWTEvent e) {
if (e instanceof ItemEvent) {
@@ -623,7 +623,7 @@
* @see java.awt.event.ItemListener
* @see #addItemListener(ItemListener)
* @see java.awt.Component#enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected void processItemEvent(ItemEvent e) {
ItemListener listener = itemListener;
--- a/jdk/src/share/classes/java/awt/Color.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Color.java Wed Jun 18 13:14:15 2014 -0700
@@ -597,7 +597,7 @@
* @see #getRed
* @see #getGreen
* @see #getBlue
- * @since JDK1.0
+ * @since 1.0
*/
public int getRGB() {
return value;
@@ -621,7 +621,7 @@
* a brighter version of this <code>Color</code>
* with the same {@code alpha} value.
* @see java.awt.Color#darker
- * @since JDK1.0
+ * @since 1.0
*/
public Color brighter() {
int r = getRed();
@@ -664,7 +664,7 @@
* a darker version of this <code>Color</code>
* with the same {@code alpha} value.
* @see java.awt.Color#brighter
- * @since JDK1.0
+ * @since 1.0
*/
public Color darker() {
return new Color(Math.max((int)(getRed() *FACTOR), 0),
@@ -676,7 +676,7 @@
/**
* Computes the hash code for this <code>Color</code>.
* @return a hash code value for this object.
- * @since JDK1.0
+ * @since 1.0
*/
public int hashCode() {
return value;
@@ -693,7 +693,7 @@
* <code>Color</code>
* @return <code>true</code> if the objects are the same;
* <code>false</code> otherwise.
- * @since JDK1.0
+ * @since 1.0
*/
public boolean equals(Object obj) {
return obj instanceof Color && ((Color)obj).getRGB() == this.getRGB();
@@ -723,7 +723,7 @@
* @exception NumberFormatException if the specified string cannot
* be interpreted as a decimal,
* octal, or hexadecimal integer.
- * @since JDK1.1
+ * @since 1.1
*/
public static Color decode(String nm) throws NumberFormatException {
Integer intval = Integer.decode(nm);
@@ -747,7 +747,7 @@
* @see java.lang.System#getProperty(java.lang.String)
* @see java.lang.Integer#getInteger(java.lang.String)
* @see java.awt.Color#Color(int)
- * @since JDK1.0
+ * @since 1.0
*/
public static Color getColor(String nm) {
return getColor(nm, null);
@@ -771,7 +771,7 @@
* @see java.lang.System#getProperty(java.lang.String)
* @see java.lang.Integer#getInteger(java.lang.String)
* @see java.awt.Color#Color(int)
- * @since JDK1.0
+ * @since 1.0
*/
public static Color getColor(String nm, Color v) {
Integer intval = Integer.getInteger(nm);
@@ -801,7 +801,7 @@
* @see java.lang.System#getProperty(java.lang.String)
* @see java.lang.Integer#getInteger(java.lang.String)
* @see java.awt.Color#Color(int)
- * @since JDK1.0
+ * @since 1.0
*/
public static Color getColor(String nm, int v) {
Integer intval = Integer.getInteger(nm);
@@ -834,7 +834,7 @@
* @see java.awt.Color#getRGB()
* @see java.awt.Color#Color(int)
* @see java.awt.image.ColorModel#getRGBdefault()
- * @since JDK1.0
+ * @since 1.0
*/
public static int HSBtoRGB(float hue, float saturation, float brightness) {
int r = 0, g = 0, b = 0;
@@ -902,7 +902,7 @@
* @see java.awt.Color#getRGB()
* @see java.awt.Color#Color(int)
* @see java.awt.image.ColorModel#getRGBdefault()
- * @since JDK1.0
+ * @since 1.0
*/
public static float[] RGBtoHSB(int r, int g, int b, float[] hsbvals) {
float hue, saturation, brightness;
@@ -957,7 +957,7 @@
* @param b the brightness of the color
* @return a <code>Color</code> object with the specified hue,
* saturation, and brightness.
- * @since JDK1.0
+ * @since 1.0
*/
public static Color getHSBColor(float h, float s, float b) {
return new Color(HSBtoRGB(h, s, b));
--- a/jdk/src/share/classes/java/awt/Component.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Component.java Wed Jun 18 13:14:15 2014 -0700
@@ -1018,7 +1018,7 @@
* Gets the name of the component.
* @return this component's name
* @see #setName
- * @since JDK1.1
+ * @since 1.1
*/
public String getName() {
if (name == null && !nameExplicitlySet) {
@@ -1035,7 +1035,7 @@
* @param name the string that is to be this
* component's name
* @see #getName
- * @since JDK1.1
+ * @since 1.1
*/
public void setName(String name) {
String oldName;
@@ -1050,7 +1050,7 @@
/**
* Gets the parent of this component.
* @return the parent container of this component
- * @since JDK1.0
+ * @since 1.0
*/
public Container getParent() {
return getParent_NoClientCode();
@@ -1221,7 +1221,7 @@
* toolkit is used by that component. Therefore if the component
* is moved from one frame to another, the toolkit it uses may change.
* @return the toolkit of this component
- * @since JDK1.0
+ * @since 1.0
*/
public Toolkit getToolkit() {
return getToolkitImpl();
@@ -1250,7 +1250,7 @@
* otherwise
* @see #validate
* @see #invalidate
- * @since JDK1.0
+ * @since 1.0
*/
public boolean isValid() {
return (peer != null) && valid;
@@ -1292,7 +1292,7 @@
* @return <code>true</code> if the component is visible,
* <code>false</code> otherwise
* @see #setVisible
- * @since JDK1.0
+ * @since 1.0
*/
@Transient
public boolean isVisible() {
@@ -1419,7 +1419,7 @@
* @return <code>true</code> if the component is showing,
* <code>false</code> otherwise
* @see #setVisible
- * @since JDK1.0
+ * @since 1.0
*/
public boolean isShowing() {
if (visible && (peer != null)) {
@@ -1437,7 +1437,7 @@
* @return <code>true</code> if the component is enabled,
* <code>false</code> otherwise
* @see #setEnabled
- * @since JDK1.0
+ * @since 1.0
*/
public boolean isEnabled() {
return isEnabledImpl();
@@ -1466,7 +1466,7 @@
* enabled; otherwise this component is disabled
* @see #isEnabled
* @see #isLightweight
- * @since JDK1.1
+ * @since 1.1
*/
public void setEnabled(boolean b) {
enable(b);
@@ -1611,7 +1611,7 @@
* otherwise, hides this component
* @see #isVisible
* @see #invalidate
- * @since JDK1.1
+ * @since 1.1
*/
public void setVisible(boolean b) {
show(b);
@@ -1739,7 +1739,7 @@
* not have a foreground color, the foreground color of its parent
* is returned
* @see #setForeground
- * @since JDK1.0
+ * @since 1.0
* @beaninfo
* bound: true
*/
@@ -1760,7 +1760,7 @@
* then this component will inherit
* the foreground color of its parent
* @see #getForeground
- * @since JDK1.0
+ * @since 1.0
*/
public void setForeground(Color c) {
Color oldColor = foreground;
@@ -1796,7 +1796,7 @@
* not have a background color,
* the background color of its parent is returned
* @see #setBackground
- * @since JDK1.0
+ * @since 1.0
*/
@Transient
public Color getBackground() {
@@ -1819,7 +1819,7 @@
* if this parameter is <code>null</code>, then this
* component will inherit the background color of its parent
* @see #getBackground
- * @since JDK1.0
+ * @since 1.0
* @beaninfo
* bound: true
*/
@@ -1856,7 +1856,7 @@
* @return this component's font; if a font has not been set
* for this component, the font of its parent is returned
* @see #setFont
- * @since JDK1.0
+ * @since 1.0
*/
@Transient
public Font getFont() {
@@ -1887,7 +1887,7 @@
* component will inherit the font of its parent
* @see #getFont
* @see #invalidate
- * @since JDK1.0
+ * @since 1.0
* @beaninfo
* bound: true
*/
@@ -1940,7 +1940,7 @@
* does not have its own locale and has not yet been added to
* a containment hierarchy such that the locale can be determined
* from the containing parent
- * @since JDK1.1
+ * @since 1.1
*/
public Locale getLocale() {
Locale locale = this.locale;
@@ -1965,7 +1965,7 @@
* @param l the locale to become this component's locale
* @see #getLocale
* @see #invalidate
- * @since JDK1.1
+ * @since 1.1
*/
public void setLocale(Locale l) {
Locale oldValue = locale;
@@ -1986,7 +1986,7 @@
* @see java.awt.image.ColorModel
* @see java.awt.peer.ComponentPeer#getColorModel()
* @see Toolkit#getColorModel()
- * @since JDK1.0
+ * @since 1.0
*/
public ColorModel getColorModel() {
ComponentPeer peer = this.peer;
@@ -2016,7 +2016,7 @@
* the coordinate space of the component's parent
* @see #setLocation
* @see #getLocationOnScreen
- * @since JDK1.1
+ * @since 1.1
*/
public Point getLocation() {
return location();
@@ -2095,7 +2095,7 @@
* @see #getLocation
* @see #setBounds
* @see #invalidate
- * @since JDK1.1
+ * @since 1.1
*/
public void setLocation(int x, int y) {
move(x, y);
@@ -2127,7 +2127,7 @@
* @see #getLocation
* @see #setBounds
* @see #invalidate
- * @since JDK1.1
+ * @since 1.1
*/
public void setLocation(Point p) {
setLocation(p.x, p.y);
@@ -2143,7 +2143,7 @@
* @return a <code>Dimension</code> object that indicates the
* size of this component
* @see #setSize
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getSize() {
return size();
@@ -2170,7 +2170,7 @@
* @see #getSize
* @see #setBounds
* @see #invalidate
- * @since JDK1.1
+ * @since 1.1
*/
public void setSize(int width, int height) {
resize(width, height);
@@ -2201,7 +2201,7 @@
* @see #setSize
* @see #setBounds
* @see #invalidate
- * @since JDK1.1
+ * @since 1.1
*/
public void setSize(Dimension d) {
resize(d);
@@ -2258,7 +2258,7 @@
* @see #setSize(int, int)
* @see #setSize(Dimension)
* @see #invalidate
- * @since JDK1.1
+ * @since 1.1
*/
public void setBounds(int x, int y, int width, int height) {
reshape(x, y, width, height);
@@ -2402,7 +2402,7 @@
* @see #setSize(int, int)
* @see #setSize(Dimension)
* @see #invalidate
- * @since JDK1.1
+ * @since 1.1
*/
public void setBounds(Rectangle r) {
setBounds(r.x, r.y, r.width, r.height);
@@ -2883,7 +2883,7 @@
* @see #doLayout()
* @see LayoutManager
* @see Container#validate
- * @since JDK1.0
+ * @since 1.0
*/
public void validate() {
synchronized (getTreeLock()) {
@@ -2926,7 +2926,7 @@
* @see #doLayout
* @see LayoutManager
* @see java.awt.Container#isValidateRoot
- * @since JDK1.0
+ * @since 1.0
*/
public void invalidate() {
synchronized (getTreeLock()) {
@@ -3021,7 +3021,7 @@
* @return a graphics context for this component, or <code>null</code>
* if it has none
* @see #paint
- * @since JDK1.0
+ * @since 1.0
*/
public Graphics getGraphics() {
if (peer instanceof LightweightPeer) {
@@ -3085,7 +3085,7 @@
* @see #getPeer
* @see java.awt.peer.ComponentPeer#getFontMetrics(Font)
* @see Toolkit#getFontMetrics(Font)
- * @since JDK1.0
+ * @since 1.0
*/
public FontMetrics getFontMetrics(Font font) {
// This is an unsupported hack, but left in for a customer.
@@ -3125,7 +3125,7 @@
* @see #contains
* @see Toolkit#createCustomCursor
* @see Cursor
- * @since JDK1.1
+ * @since 1.1
*/
public void setCursor(Cursor cursor) {
this.cursor = cursor;
@@ -3158,7 +3158,7 @@
* If no cursor is set in the entire hierarchy,
* <code>Cursor.DEFAULT_CURSOR</code> is returned.
* @see #setCursor
- * @since JDK1.1
+ * @since 1.1
*/
public Cursor getCursor() {
return getCursor_NoClientCode();
@@ -3212,7 +3212,7 @@
*
* @param g the graphics context to use for painting
* @see #update
- * @since JDK1.0
+ * @since 1.0
*/
public void paint(Graphics g) {
}
@@ -3248,7 +3248,7 @@
* @param g the specified context to use for updating
* @see #paint
* @see #repaint()
- * @since JDK1.0
+ * @since 1.0
*/
public void update(Graphics g) {
paint(g);
@@ -3264,7 +3264,7 @@
*
* @param g the graphics context to use for painting
* @see #paint
- * @since JDK1.0
+ * @since 1.0
*/
public void paintAll(Graphics g) {
if (isShowing()) {
@@ -3308,7 +3308,7 @@
*
* @see #update(Graphics)
- * @since JDK1.0
+ * @since 1.0
*/
public void repaint() {
repaint(0, 0, 0, width, height);
@@ -3327,7 +3327,7 @@
* @param tm maximum time in milliseconds before update
* @see #paint
* @see #update(Graphics)
- * @since JDK1.0
+ * @since 1.0
*/
public void repaint(long tm) {
repaint(tm, 0, 0, width, height);
@@ -3351,7 +3351,7 @@
* @param width the width
* @param height the height
* @see #update(Graphics)
- * @since JDK1.0
+ * @since 1.0
*/
public void repaint(int x, int y, int width, int height) {
repaint(0, x, y, width, height);
@@ -3377,7 +3377,7 @@
* @param width the width
* @param height the height
* @see #update(Graphics)
- * @since JDK1.0
+ * @since 1.0
*/
public void repaint(long tm, int x, int y, int width, int height) {
if (this.peer instanceof LightweightPeer) {
@@ -3430,7 +3430,7 @@
* graphics context is the bounding rectangle of this component.
* @param g the graphics context to use for printing
* @see #paint(Graphics)
- * @since JDK1.0
+ * @since 1.0
*/
public void print(Graphics g) {
paint(g);
@@ -3445,7 +3445,7 @@
* graphics context is the bounding rectangle of this component.
* @param g the graphics context to use for printing
* @see #print(Graphics)
- * @since JDK1.0
+ * @since 1.0
*/
public void printAll(Graphics g) {
if (isShowing()) {
@@ -3525,7 +3525,7 @@
* @see Graphics#drawImage(Image, int, int, int, int, Color, java.awt.image.ImageObserver)
* @see Graphics#drawImage(Image, int, int, int, int, java.awt.image.ImageObserver)
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public boolean imageUpdate(Image img, int infoflags,
int x, int y, int w, int h) {
@@ -3550,7 +3550,7 @@
* Creates an image from the specified image producer.
* @param producer the image producer
* @return the image produced
- * @since JDK1.0
+ * @since 1.0
*/
public Image createImage(ImageProducer producer) {
ComponentPeer peer = this.peer;
@@ -3572,7 +3572,7 @@
* <code>true</code>.
* @see #isDisplayable
* @see GraphicsEnvironment#isHeadless
- * @since JDK1.0
+ * @since 1.0
*/
public Image createImage(int width, int height) {
ComponentPeer peer = this.peer;
@@ -3643,7 +3643,7 @@
* to be notified as the image is being prepared
* @return <code>true</code> if the image has already been fully
* prepared; <code>false</code> otherwise
- * @since JDK1.0
+ * @since 1.0
*/
public boolean prepareImage(Image image, ImageObserver observer) {
return prepareImage(image, -1, -1, observer);
@@ -3665,7 +3665,7 @@
* @return <code>true</code> if the image has already been fully
* prepared; <code>false</code> otherwise
* @see java.awt.image.ImageObserver
- * @since JDK1.0
+ * @since 1.0
*/
public boolean prepareImage(Image image, int width, int height,
ImageObserver observer) {
@@ -3701,7 +3701,7 @@
* @see #prepareImage(Image, int, int, java.awt.image.ImageObserver)
* @see Toolkit#checkImage(Image, int, int, java.awt.image.ImageObserver)
* @see java.awt.image.ImageObserver
- * @since JDK1.0
+ * @since 1.0
*/
public int checkImage(Image image, ImageObserver observer) {
return checkImage(image, -1, -1, observer);
@@ -3737,7 +3737,7 @@
* @see #prepareImage(Image, int, int, java.awt.image.ImageObserver)
* @see Toolkit#checkImage(Image, int, int, java.awt.image.ImageObserver)
* @see java.awt.image.ImageObserver
- * @since JDK1.0
+ * @since 1.0
*/
public int checkImage(Image image, int width, int height,
ImageObserver observer) {
@@ -4622,7 +4622,7 @@
* @param x the <i>x</i> coordinate of the point
* @param y the <i>y</i> coordinate of the point
* @see #getComponentAt(int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public boolean contains(int x, int y) {
return inside(x, y);
@@ -4644,7 +4644,7 @@
* @param p the point
* @throws NullPointerException if {@code p} is {@code null}
* @see #getComponentAt(Point)
- * @since JDK1.1
+ * @since 1.1
*/
public boolean contains(Point p) {
return contains(p.x, p.y);
@@ -4669,7 +4669,7 @@
* <code>null</code> if the location
* is outside this component
* @see #contains(int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public Component getComponentAt(int x, int y) {
return locate(x, y);
@@ -4689,7 +4689,7 @@
* specified point.
* @param p the point
* @see java.awt.Component#contains
- * @since JDK1.1
+ * @since 1.1
*/
public Component getComponentAt(Point p) {
return getComponentAt(p.x, p.y);
@@ -5224,7 +5224,7 @@
* @see java.awt.event.ComponentListener
* @see #removeComponentListener
* @see #getComponentListeners
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addComponentListener(ComponentListener l) {
if (l == null) {
@@ -5248,7 +5248,7 @@
* @see java.awt.event.ComponentListener
* @see #addComponentListener
* @see #getComponentListeners
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeComponentListener(ComponentListener l) {
if (l == null) {
@@ -5286,7 +5286,7 @@
* @see java.awt.event.FocusListener
* @see #removeFocusListener
* @see #getFocusListeners
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addFocusListener(FocusListener l) {
if (l == null) {
@@ -5317,7 +5317,7 @@
* @see java.awt.event.FocusListener
* @see #addFocusListener
* @see #getFocusListeners
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeFocusListener(FocusListener l) {
if (l == null) {
@@ -5618,7 +5618,7 @@
* @see java.awt.event.KeyListener
* @see #removeKeyListener
* @see #getKeyListeners
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addKeyListener(KeyListener l) {
if (l == null) {
@@ -5649,7 +5649,7 @@
* @see java.awt.event.KeyListener
* @see #addKeyListener
* @see #getKeyListeners
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeKeyListener(KeyListener l) {
if (l == null) {
@@ -5687,7 +5687,7 @@
* @see java.awt.event.MouseListener
* @see #removeMouseListener
* @see #getMouseListeners
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addMouseListener(MouseListener l) {
if (l == null) {
@@ -5718,7 +5718,7 @@
* @see java.awt.event.MouseListener
* @see #addMouseListener
* @see #getMouseListeners
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeMouseListener(MouseListener l) {
if (l == null) {
@@ -5756,7 +5756,7 @@
* @see java.awt.event.MouseMotionListener
* @see #removeMouseMotionListener
* @see #getMouseMotionListeners
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addMouseMotionListener(MouseMotionListener l) {
if (l == null) {
@@ -5787,7 +5787,7 @@
* @see java.awt.event.MouseMotionListener
* @see #addMouseMotionListener
* @see #getMouseMotionListeners
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeMouseMotionListener(MouseMotionListener l) {
if (l == null) {
@@ -6072,7 +6072,7 @@
* @see #processEvent
* @see #disableEvents
* @see AWTEvent
- * @since JDK1.1
+ * @since 1.1
*/
protected final void enableEvents(long eventsToEnable) {
long notifyAncestors = 0;
@@ -6108,7 +6108,7 @@
* from being delivered to this component.
* @param eventsToDisable the event mask defining the event types
* @see #enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected final void disableEvents(long eventsToDisable) {
long notifyAncestors = 0;
@@ -6285,7 +6285,7 @@
* @see #processInputMethodEvent
* @see #processHierarchyEvent
* @see #processMouseWheelEvent
- * @since JDK1.1
+ * @since 1.1
*/
protected void processEvent(AWTEvent e) {
if (e instanceof FocusEvent) {
@@ -6351,7 +6351,7 @@
* @see java.awt.event.ComponentListener
* @see #addComponentListener
* @see #enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected void processComponentEvent(ComponentEvent e) {
ComponentListener listener = componentListener;
@@ -6414,7 +6414,7 @@
* @see #addFocusListener
* @see #enableEvents
* @see #dispatchEvent
- * @since JDK1.1
+ * @since 1.1
*/
protected void processFocusEvent(FocusEvent e) {
FocusListener listener = focusListener;
@@ -6480,7 +6480,7 @@
* @see #addKeyListener
* @see #enableEvents
* @see #isShowing
- * @since JDK1.1
+ * @since 1.1
*/
protected void processKeyEvent(KeyEvent e) {
KeyListener listener = keyListener;
@@ -6522,7 +6522,7 @@
* @see java.awt.event.MouseListener
* @see #addMouseListener
* @see #enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected void processMouseEvent(MouseEvent e) {
MouseListener listener = mouseListener;
@@ -6570,7 +6570,7 @@
* @see java.awt.event.MouseMotionListener
* @see #addMouseMotionListener
* @see #enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected void processMouseMotionEvent(MouseEvent e) {
MouseMotionListener listener = mouseMotionListener;
@@ -6882,7 +6882,7 @@
* @see #isDisplayable
* @see #removeNotify
* @see #invalidate
- * @since JDK1.0
+ * @since 1.0
*/
public void addNotify() {
synchronized (getTreeLock()) {
@@ -6985,7 +6985,7 @@
*
* @see #isDisplayable
* @see #addNotify
- * @since JDK1.0
+ * @since 1.0
*/
public void removeNotify() {
KeyboardFocusManager.clearMostRecentFocusOwner(this);
@@ -7094,7 +7094,7 @@
* @return <code>true</code> if this <code>Component</code> is
* focusable; <code>false</code> otherwise
* @see #setFocusable
- * @since JDK1.1
+ * @since 1.1
* @deprecated As of 1.4, replaced by <code>isFocusable()</code>.
*/
@Deprecated
@@ -7433,7 +7433,7 @@
* @see #isFocusable
* @see #isDisplayable
* @see KeyboardFocusManager#clearGlobalFocusOwner
- * @since JDK1.0
+ * @since 1.0
*/
public void requestFocus() {
requestFocusHelper(false, true);
@@ -7862,7 +7862,7 @@
* Transfers the focus to the next component, as though this Component were
* the focus owner.
* @see #requestFocus()
- * @since JDK1.1
+ * @since 1.1
*/
public void transferFocus() {
nextFocus();
@@ -8070,7 +8070,7 @@
* @param popup the popup menu to be added to the component.
* @see #remove(MenuComponent)
* @exception NullPointerException if {@code popup} is {@code null}
- * @since JDK1.1
+ * @since 1.1
*/
public void add(PopupMenu popup) {
synchronized (getTreeLock()) {
@@ -8095,7 +8095,7 @@
* Removes the specified popup menu from the component.
* @param popup the popup menu to be removed
* @see #add(PopupMenu)
- * @since JDK1.1
+ * @since 1.1
*/
@SuppressWarnings("unchecked")
public void remove(MenuComponent popup) {
@@ -8126,7 +8126,7 @@
* <code>null</code>.
*
* @return a string representation of this component's state
- * @since JDK1.0
+ * @since 1.0
*/
protected String paramString() {
final String thisName = Objects.toString(getName(), "");
@@ -8140,7 +8140,7 @@
/**
* Returns a string representation of this component and its values.
* @return a string representation of this component
- * @since JDK1.0
+ * @since 1.0
*/
public String toString() {
return getClass().getName() + '[' + paramString() + ']';
@@ -8150,7 +8150,7 @@
* Prints a listing of this component to the standard system output
* stream <code>System.out</code>.
* @see java.lang.System#out
- * @since JDK1.0
+ * @since 1.0
*/
public void list() {
list(System.out, 0);
@@ -8161,7 +8161,7 @@
* stream.
* @param out a print stream
* @throws NullPointerException if {@code out} is {@code null}
- * @since JDK1.0
+ * @since 1.0
*/
public void list(PrintStream out) {
list(out, 0);
@@ -8174,7 +8174,7 @@
* @param indent number of spaces to indent
* @see java.io.PrintStream#println(java.lang.Object)
* @throws NullPointerException if {@code out} is {@code null}
- * @since JDK1.0
+ * @since 1.0
*/
public void list(PrintStream out, int indent) {
for (int i = 0 ; i < indent ; i++) {
@@ -8187,7 +8187,7 @@
* Prints a listing to the specified print writer.
* @param out the print writer to print to
* @throws NullPointerException if {@code out} is {@code null}
- * @since JDK1.1
+ * @since 1.1
*/
public void list(PrintWriter out) {
list(out, 0);
@@ -8200,7 +8200,7 @@
* @param indent the number of spaces to indent
* @throws NullPointerException if {@code out} is {@code null}
* @see java.io.PrintStream#println(java.lang.Object)
- * @since JDK1.1
+ * @since 1.1
*/
public void list(PrintWriter out, int indent) {
for (int i = 0 ; i < indent ; i++) {
--- a/jdk/src/share/classes/java/awt/Container.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Container.java Wed Jun 18 13:14:15 2014 -0700
@@ -85,7 +85,7 @@
* @see #add(java.awt.Component, int)
* @see #getComponent(int)
* @see LayoutManager
- * @since JDK1.0
+ * @since 1.0
*/
public class Container extends Component {
@@ -302,7 +302,7 @@
*
* @return the number of components in this panel.
* @see #getComponent
- * @since JDK1.1
+ * @since 1.1
* @see Component#getTreeLock()
*/
public int getComponentCount() {
@@ -384,7 +384,7 @@
* @return the insets of this container.
* @see Insets
* @see LayoutManager
- * @since JDK1.1
+ * @since 1.1
*/
public Insets getInsets() {
return insets();
@@ -975,7 +975,7 @@
* @see #validate
* @see javax.swing.JComponent#revalidate()
* @see LayoutManager
- * @since JDK1.1
+ * @since 1.1
*/
public void add(Component comp, Object constraints) {
addImpl(comp, constraints, -1);
@@ -1078,7 +1078,7 @@
* @see #invalidate
* @see LayoutManager
* @see LayoutManager2
- * @since JDK1.1
+ * @since 1.1
*/
protected void addImpl(Component comp, Object constraints, int index) {
synchronized (getTreeLock()) {
@@ -1202,7 +1202,7 @@
* @see #invalidate
* @see #validate
* @see #getComponentCount
- * @since JDK1.1
+ * @since 1.1
*/
public void remove(int index) {
synchronized (getTreeLock()) {
@@ -1501,7 +1501,7 @@
* @see LayoutManager#layoutContainer
* @see #setLayout
* @see #validate
- * @since JDK1.1
+ * @since 1.1
*/
public void doLayout() {
layout();
@@ -1749,7 +1749,7 @@
* @param f The font to become this container's font.
* @see Component#getFont
* @see #invalidate
- * @since JDK1.0
+ * @since 1.0
*/
public void setFont(Font f) {
boolean shouldinvalidate = false;
@@ -1834,7 +1834,7 @@
* @see #getLayout
* @see LayoutManager#minimumLayoutSize(Container)
* @see Component#getMinimumSize
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getMinimumSize() {
return minimumSize();
@@ -2539,7 +2539,7 @@
* point is within the bounds of the container the container itself
* is returned; otherwise the top-most child is returned.
* @see Component#contains
- * @since JDK1.1
+ * @since 1.1
*/
public Component getComponentAt(int x, int y) {
return locate(x, y);
@@ -2585,7 +2585,7 @@
* or <code>null</code> if the component does
* not contain the point.
* @see Component#contains
- * @since JDK1.1
+ * @since 1.1
*/
public Component getComponentAt(Point p) {
return getComponentAt(p.x, p.y);
@@ -2837,7 +2837,7 @@
* @param c the component
* @return <code>true</code> if it is an ancestor;
* <code>false</code> otherwise.
- * @since JDK1.1
+ * @since 1.1
*/
public boolean isAncestorOf(Component c) {
Container p;
@@ -3012,7 +3012,7 @@
* @param indent the number of spaces to indent
* @throws NullPointerException if {@code out} is {@code null}
* @see Component#list(java.io.PrintStream, int)
- * @since JDK1.0
+ * @since 1.0
*/
public void list(PrintStream out, int indent) {
super.list(out, indent);
@@ -3039,7 +3039,7 @@
* @param indent the number of spaces to indent
* @throws NullPointerException if {@code out} is {@code null}
* @see Component#list(java.io.PrintWriter, int)
- * @since JDK1.1
+ * @since 1.1
*/
public void list(PrintWriter out, int indent) {
super.list(out, indent);
--- a/jdk/src/share/classes/java/awt/Dialog.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Dialog.java Wed Jun 18 13:14:15 2014 -0700
@@ -92,7 +92,7 @@
*
* @author Sami Shaio
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public class Dialog extends Window {
--- a/jdk/src/share/classes/java/awt/Event.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Event.java Wed Jun 18 13:14:15 2014 -0700
@@ -57,7 +57,7 @@
* <code>PGDN</code>, <code>F1</code>, <code>F2</code>, etc).
*
* @author Sami Shaio
- * @since JDK1.0
+ * @since 1.0
*/
public class Event implements java.io.Serializable {
private transient long data;
@@ -871,7 +871,7 @@
* @return a string that represents the event and the values
* of its member fields.
* @see java.awt.Event#paramString
- * @since JDK1.1
+ * @since 1.1
*/
public String toString() {
return getClass().getName() + "[" + paramString() + "]";
--- a/jdk/src/share/classes/java/awt/FileDialog.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/FileDialog.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,7 +44,7 @@
*
* @author Sami Shaio
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public class FileDialog extends Dialog {
@@ -176,7 +176,7 @@
* <code>FileDialog(parent, "", LOAD)</code>.
*
* @param parent the owner of the dialog
- * @since JDK1.1
+ * @since 1.1
*/
public FileDialog(Frame parent) {
this(parent, "", LOAD);
@@ -353,7 +353,7 @@
* @see java.awt.FileDialog#getMode
* @exception IllegalArgumentException if an illegal file
* dialog mode is supplied
- * @since JDK1.1
+ * @since 1.1
*/
public void setMode(int mode) {
switch (mode) {
--- a/jdk/src/share/classes/java/awt/FlowLayout.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/FlowLayout.java Wed Jun 18 13:14:15 2014 -0700
@@ -79,7 +79,7 @@
*
* @author Arthur van Hoff
* @author Sami Shaio
- * @since JDK1.0
+ * @since 1.0
* @see ComponentOrientation
*/
public class FlowLayout implements LayoutManager, java.io.Serializable {
@@ -246,7 +246,7 @@
* or <code>FlowLayout.TRAILING</code>.
* @return the alignment value for this layout
* @see java.awt.FlowLayout#setAlignment
- * @since JDK1.1
+ * @since 1.1
*/
public int getAlignment() {
return newAlign;
@@ -264,7 +264,7 @@
* </ul>
* @param align one of the alignment values shown above
* @see #getAlignment()
- * @since JDK1.1
+ * @since 1.1
*/
public void setAlignment(int align) {
this.newAlign = align;
@@ -295,7 +295,7 @@
* and between the components and the borders
* of the <code>Container</code>
* @see java.awt.FlowLayout#setHgap
- * @since JDK1.1
+ * @since 1.1
*/
public int getHgap() {
return hgap;
@@ -310,7 +310,7 @@
* and between the components and the borders
* of the <code>Container</code>
* @see java.awt.FlowLayout#getHgap
- * @since JDK1.1
+ * @since 1.1
*/
public void setHgap(int hgap) {
this.hgap = hgap;
@@ -325,7 +325,7 @@
* and between the components and the borders
* of the <code>Container</code>
* @see java.awt.FlowLayout#setVgap
- * @since JDK1.1
+ * @since 1.1
*/
public int getVgap() {
return vgap;
@@ -339,7 +339,7 @@
* and between the components and the borders
* of the <code>Container</code>
* @see java.awt.FlowLayout#getVgap
- * @since JDK1.1
+ * @since 1.1
*/
public void setVgap(int vgap) {
this.vgap = vgap;
--- a/jdk/src/share/classes/java/awt/Font.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Font.java Wed Jun 18 13:14:15 2014 -0700
@@ -364,7 +364,7 @@
/**
* The logical name of this <code>Font</code>, as passed to the
* constructor.
- * @since JDK1.0
+ * @since 1.0
*
* @serial
* @see #getName
@@ -374,7 +374,7 @@
/**
* The style of this <code>Font</code>, as passed to the constructor.
* This style can be PLAIN, BOLD, ITALIC, or BOLD+ITALIC.
- * @since JDK1.0
+ * @since 1.0
*
* @serial
* @see #getStyle()
@@ -383,7 +383,7 @@
/**
* The point size of this <code>Font</code>, rounded to integer.
- * @since JDK1.0
+ * @since 1.0
*
* @serial
* @see #getSize()
@@ -436,7 +436,7 @@
/**
* Gets the peer of this <code>Font</code>.
* @return the peer of the <code>Font</code>.
- * @since JDK1.1
+ * @since 1.1
* @deprecated Font rendering is now platform independent.
*/
@Deprecated
@@ -562,7 +562,7 @@
* @param size the point size of the {@code Font}
* @see GraphicsEnvironment#getAllFonts
* @see GraphicsEnvironment#getAvailableFontFamilyNames
- * @since JDK1.0
+ * @since 1.0
*/
public Font(String name, int style, int size) {
this.name = (name != null) ? name : "Default";
@@ -1180,7 +1180,7 @@
*
* @see #getName
* @see #getFontName
- * @since JDK1.1
+ * @since 1.1
*/
public String getFamily() {
return getFamily_NoClientCode();
@@ -1240,7 +1240,7 @@
* this <code>Font</code>.
* @see #getFamily
* @see #getFontName
- * @since JDK1.0
+ * @since 1.0
*/
public String getName() {
return name;
@@ -1286,7 +1286,7 @@
* @see #isPlain
* @see #isBold
* @see #isItalic
- * @since JDK1.0
+ * @since 1.0
*/
public int getStyle() {
return style;
@@ -1312,7 +1312,7 @@
* @see #getSize2D
* @see GraphicsConfiguration#getDefaultTransform
* @see GraphicsConfiguration#getNormalizingTransform
- * @since JDK1.0
+ * @since 1.0
*/
public int getSize() {
return size;
@@ -1337,7 +1337,7 @@
* PLAIN style;
* <code>false</code> otherwise.
* @see java.awt.Font#getStyle
- * @since JDK1.0
+ * @since 1.0
*/
public boolean isPlain() {
return style == 0;
@@ -1350,7 +1350,7 @@
* style is BOLD;
* <code>false</code> otherwise.
* @see java.awt.Font#getStyle
- * @since JDK1.0
+ * @since 1.0
*/
public boolean isBold() {
return (style & BOLD) != 0;
@@ -1363,7 +1363,7 @@
* style is ITALIC;
* <code>false</code> otherwise.
* @see java.awt.Font#getStyle
- * @since JDK1.0
+ * @since 1.0
*/
public boolean isItalic() {
return (style & ITALIC) != 0;
@@ -1484,7 +1484,7 @@
* describes, or a new default <code>Font</code> if
* <code>str</code> is <code>null</code>.
* @see #getFamily
- * @since JDK1.1
+ * @since 1.1
*/
public static Font decode(String str) {
String fontName = str;
@@ -1595,7 +1595,7 @@
/**
* Returns a hashcode for this <code>Font</code>.
* @return a hashcode value for this <code>Font</code>.
- * @since JDK1.0
+ * @since 1.0
*/
public int hashCode() {
if (hash == 0) {
@@ -1622,7 +1622,7 @@
* or if the argument is a <code>Font</code> object
* describing the same font as this object;
* <code>false</code> otherwise.
- * @since JDK1.0
+ * @since 1.0
*/
public boolean equals(Object obj) {
if (obj == this) {
@@ -1667,7 +1667,7 @@
* representation.
* @return a <code>String</code> representation of this
* <code>Font</code> object.
- * @since JDK1.0
+ * @since 1.0
*/
// NOTE: This method may be called by privileged threads.
// DO NOT INVOKE CLIENT CODE ON THIS THREAD!
--- a/jdk/src/share/classes/java/awt/FontMetrics.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/FontMetrics.java Wed Jun 18 13:14:15 2014 -0700
@@ -94,7 +94,7 @@
*
* @author Jim Graham
* @see java.awt.Font
- * @since JDK1.0
+ * @since 1.0
*/
public abstract class FontMetrics implements java.io.Serializable {
@@ -625,7 +625,6 @@
* object's values as a <code>String</code>.
* @return a <code>String</code> representation of this
* <code>FontMetrics</code> object.
- * @since JDK1.0.
*/
public String toString() {
return getClass().getName() +
--- a/jdk/src/share/classes/java/awt/Frame.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Frame.java Wed Jun 18 13:14:15 2014 -0700
@@ -130,7 +130,7 @@
* @author Sami Shaio
* @see WindowEvent
* @see Window#addWindowListener
- * @since JDK1.0
+ * @since 1.0
*/
public class Frame extends Window implements MenuContainer {
--- a/jdk/src/share/classes/java/awt/Graphics.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Graphics.java Wed Jun 18 13:14:15 2014 -0700
@@ -99,7 +99,7 @@
* @see java.awt.Graphics#setPaintMode()
* @see java.awt.Graphics#setXORMode(java.awt.Color)
* @see java.awt.Graphics#setFont(java.awt.Font)
- * @since JDK1.0
+ * @since 1.0
*/
public abstract class Graphics {
@@ -283,7 +283,7 @@
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(int, int, int, int)
* @see java.awt.Graphics#setClip(Shape)
- * @since JDK1.1
+ * @since 1.1
*/
public abstract Rectangle getClipBounds();
@@ -321,7 +321,7 @@
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(Shape)
* @see java.awt.Graphics#getClip
- * @since JDK1.1
+ * @since 1.1
*/
public abstract void setClip(int x, int y, int width, int height);
@@ -339,7 +339,7 @@
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(int, int, int, int)
* @see java.awt.Graphics#setClip(Shape)
- * @since JDK1.1
+ * @since 1.1
*/
public abstract Shape getClip();
@@ -357,7 +357,7 @@
* @see java.awt.Graphics#getClip()
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public abstract void setClip(Shape clip);
@@ -694,7 +694,7 @@
* @param yPoints an array of <i>y</i> points
* @param nPoints the total number of points
* @see java.awt.Graphics#drawPolygon(int[], int[], int)
- * @since JDK1.1
+ * @since 1.1
*/
public abstract void drawPolyline(int xPoints[], int yPoints[],
int nPoints);
@@ -1058,7 +1058,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public abstract boolean drawImage(Image img,
int dx1, int dy1, int dx2, int dy2,
@@ -1119,7 +1119,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public abstract boolean drawImage(Image img,
int dx1, int dy1, int dx2, int dy2,
--- a/jdk/src/share/classes/java/awt/Graphics2D.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Graphics2D.java Wed Jun 18 13:14:15 2014 -0700
@@ -662,7 +662,7 @@
* <code>null</code>
* @see java.awt.Graphics#drawBytes
* @see java.awt.Graphics#drawChars
- * @since JDK1.0
+ * @since 1.0
*/
public abstract void drawString(String str, int x, int y);
@@ -968,7 +968,7 @@
* context are relative to this new origin.
* @param x the specified x coordinate
* @param y the specified y coordinate
- * @since JDK1.0
+ * @since 1.0
*/
public abstract void translate(int x, int y);
--- a/jdk/src/share/classes/java/awt/GridBagConstraints.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/GridBagConstraints.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* @author Doug Stein
* @author Bill Spitzak (orignial NeWS & OLIT implementation)
* @see java.awt.GridBagLayout
- * @since JDK1.0
+ * @since 1.0
*/
public class GridBagConstraints implements Cloneable, java.io.Serializable {
--- a/jdk/src/share/classes/java/awt/GridBagLayout.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/GridBagLayout.java Wed Jun 18 13:14:15 2014 -0700
@@ -359,7 +359,7 @@
* @see java.awt.GridBagConstraints
* @see java.awt.GridBagLayoutInfo
* @see java.awt.ComponentOrientation
- * @since JDK1.0
+ * @since 1.0
*/
public class GridBagLayout implements LayoutManager2,
java.io.Serializable {
@@ -562,7 +562,7 @@
* @return the graphics origin of the cell in the top-left
* corner of the layout grid
* @see java.awt.ComponentOrientation
- * @since JDK1.1
+ * @since 1.1
*/
public Point getLayoutOrigin () {
Point origin = new Point(0,0);
@@ -580,7 +580,7 @@
* @return an array of two arrays, containing the widths
* of the layout columns and
* the heights of the layout rows
- * @since JDK1.1
+ * @since 1.1
*/
public int [][] getLayoutDimensions () {
if (layoutInfo == null)
@@ -606,7 +606,7 @@
* @return an array of two arrays, representing the
* horizontal weights of the layout columns
* and the vertical weights of the layout rows
- * @since JDK1.1
+ * @since 1.1
*/
public double [][] getLayoutWeights () {
if (layoutInfo == null)
@@ -647,7 +647,7 @@
* in the layout grid contains the point
* (<i>x</i>, <i>y</i>).
* @see java.awt.ComponentOrientation
- * @since JDK1.1
+ * @since 1.1
*/
public Point location(int x, int y) {
Point loc = new Point(0,0);
--- a/jdk/src/share/classes/java/awt/GridBagLayoutInfo.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/GridBagLayoutInfo.java Wed Jun 18 13:14:15 2014 -0700
@@ -62,7 +62,7 @@
* grid cells with it's own parameters.
* @param width the columns
* @param height the rows
- * @since 6.0
+ * @since 1.6
*/
GridBagLayoutInfo(int width, int height) {
this.width = width;
--- a/jdk/src/share/classes/java/awt/GridLayout.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/GridLayout.java Wed Jun 18 13:14:15 2014 -0700
@@ -88,7 +88,7 @@
* number of rows is set to zero.
*
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public class GridLayout implements LayoutManager, java.io.Serializable {
/*
@@ -144,7 +144,7 @@
/**
* Creates a grid layout with a default of one column per component,
* in a single row.
- * @since JDK1.1
+ * @since 1.1
*/
public GridLayout() {
this(1, 0, 0, 0);
@@ -203,7 +203,7 @@
/**
* Gets the number of rows in this layout.
* @return the number of rows in this layout
- * @since JDK1.1
+ * @since 1.1
*/
public int getRows() {
return rows;
@@ -214,7 +214,7 @@
* @param rows the number of rows in this layout
* @exception IllegalArgumentException if the value of both
* <code>rows</code> and <code>cols</code> is set to zero
- * @since JDK1.1
+ * @since 1.1
*/
public void setRows(int rows) {
if ((rows == 0) && (this.cols == 0)) {
@@ -226,7 +226,7 @@
/**
* Gets the number of columns in this layout.
* @return the number of columns in this layout
- * @since JDK1.1
+ * @since 1.1
*/
public int getColumns() {
return cols;
@@ -242,7 +242,7 @@
* @param cols the number of columns in this layout
* @exception IllegalArgumentException if the value of both
* <code>rows</code> and <code>cols</code> is set to zero
- * @since JDK1.1
+ * @since 1.1
*/
public void setColumns(int cols) {
if ((cols == 0) && (this.rows == 0)) {
@@ -254,7 +254,7 @@
/**
* Gets the horizontal gap between components.
* @return the horizontal gap between components
- * @since JDK1.1
+ * @since 1.1
*/
public int getHgap() {
return hgap;
@@ -263,7 +263,7 @@
/**
* Sets the horizontal gap between components to the specified value.
* @param hgap the horizontal gap between components
- * @since JDK1.1
+ * @since 1.1
*/
public void setHgap(int hgap) {
this.hgap = hgap;
@@ -272,7 +272,7 @@
/**
* Gets the vertical gap between components.
* @return the vertical gap between components
- * @since JDK1.1
+ * @since 1.1
*/
public int getVgap() {
return vgap;
@@ -281,7 +281,7 @@
/**
* Sets the vertical gap between components to the specified value.
* @param vgap the vertical gap between components
- * @since JDK1.1
+ * @since 1.1
*/
public void setVgap(int vgap) {
this.vgap = vgap;
--- a/jdk/src/share/classes/java/awt/Image.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Image.java Wed Jun 18 13:14:15 2014 -0700
@@ -41,7 +41,7 @@
*
* @author Sami Shaio
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public abstract class Image {
@@ -164,7 +164,7 @@
* @see java.awt.Image#SCALE_SMOOTH
* @see java.awt.Image#SCALE_REPLICATE
* @see java.awt.Image#SCALE_AREA_AVERAGING
- * @since JDK1.1
+ * @since 1.1
*/
public Image getScaledInstance(int width, int height, int hints) {
ImageFilter filter;
@@ -180,21 +180,21 @@
/**
* Use the default image-scaling algorithm.
- * @since JDK1.1
+ * @since 1.1
*/
public static final int SCALE_DEFAULT = 1;
/**
* Choose an image-scaling algorithm that gives higher priority
* to scaling speed than smoothness of the scaled image.
- * @since JDK1.1
+ * @since 1.1
*/
public static final int SCALE_FAST = 2;
/**
* Choose an image-scaling algorithm that gives higher priority
* to image smoothness than scaling speed.
- * @since JDK1.1
+ * @since 1.1
*/
public static final int SCALE_SMOOTH = 4;
@@ -205,7 +205,7 @@
* that performs the same algorithm yet integrates more efficiently
* into the imaging infrastructure supplied by the toolkit.
* @see java.awt.image.ReplicateScaleFilter
- * @since JDK1.1
+ * @since 1.1
*/
public static final int SCALE_REPLICATE = 8;
@@ -215,7 +215,7 @@
* performs the same algorithm yet integrates more efficiently
* into the image infrastructure supplied by the toolkit.
* @see java.awt.image.AreaAveragingScaleFilter
- * @since JDK1.1
+ * @since 1.1
*/
public static final int SCALE_AREA_AVERAGING = 16;
--- a/jdk/src/share/classes/java/awt/Insets.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Insets.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
* @author Sami Shaio
* @see java.awt.LayoutManager
* @see java.awt.Container
- * @since JDK1.0
+ * @since 1.0
*/
public class Insets implements Cloneable, java.io.Serializable {
@@ -130,7 +130,7 @@
* <code>bottom</code>, and <code>right</code> are all equal.
* @return <code>true</code> if the two insets are equal;
* otherwise <code>false</code>.
- * @since JDK1.1
+ * @since 1.1
*/
public boolean equals(Object obj) {
if (obj instanceof Insets) {
--- a/jdk/src/share/classes/java/awt/Label.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Label.java Wed Jun 18 13:14:15 2014 -0700
@@ -49,7 +49,7 @@
* style="float:center; margin: 7px 10px;">
*
* @author Sami Shaio
- * @since JDK1.0
+ * @since 1.0
*/
public class Label extends Component implements Accessible {
@@ -73,7 +73,6 @@
/**
* Indicates that the label should be right justified.
- * @since JDK1.0t.
*/
public static final int RIGHT = 2;
--- a/jdk/src/share/classes/java/awt/List.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/List.java Wed Jun 18 13:14:15 2014 -0700
@@ -104,7 +104,7 @@
* @see java.awt.event.ItemListener
* @see java.awt.event.ActionEvent
* @see java.awt.event.ActionListener
- * @since JDK1.0
+ * @since 1.0
*/
public class List extends Component implements ItemSelectable, Accessible {
/**
@@ -199,7 +199,7 @@
* @exception HeadlessException if GraphicsEnvironment.isHeadless()
* returns true.
* @see java.awt.GraphicsEnvironment#isHeadless
- * @since JDK1.1
+ * @since 1.1
*/
public List(int rows) throws HeadlessException {
this(rows, false);
@@ -275,7 +275,7 @@
* Gets the number of items in the list.
* @return the number of items in the list
* @see #getItem
- * @since JDK1.1
+ * @since 1.1
*/
public int getItemCount() {
return countItems();
@@ -315,7 +315,7 @@
* @see #select
* @see #deselect
* @see #isIndexSelected
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized String[] getItems() {
String itemCopies[] = new String[items.size()];
@@ -326,7 +326,7 @@
/**
* Adds the specified item to the end of scrolling list.
* @param item the item to be added
- * @since JDK1.1
+ * @since 1.1
*/
public void add(String item) {
addItem(item);
@@ -351,7 +351,7 @@
* if this parameter is <code>null</code> then the item is
* treated as an empty string, <code>""</code>
* @param index the position at which to add the item
- * @since JDK1.1
+ * @since 1.1
*/
public void add(String item, int index) {
addItem(item, index);
@@ -399,7 +399,7 @@
* Removes all items from this list.
* @see #remove
* @see #delItems
- * @since JDK1.1
+ * @since 1.1
*/
public void removeAll() {
clear();
@@ -426,7 +426,7 @@
* @param item the item to remove from the list
* @exception IllegalArgumentException
* if the item doesn't exist in the list
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void remove(String item) {
int index = items.indexOf(item);
@@ -445,7 +445,7 @@
* only selected item in the list, the list is set to have no selection.
* @param position the index of the item to delete
* @see #add(String, int)
- * @since JDK1.1
+ * @since 1.1
* @exception ArrayIndexOutOfBoundsException
* if the <code>position</code> is less than 0 or
* greater than <code>getItemCount()-1</code>
@@ -639,7 +639,7 @@
* selected; <code>false</code> otherwise
* @see #select
* @see #deselect
- * @since JDK1.1
+ * @since 1.1
*/
public boolean isIndexSelected(int index) {
return isSelected(index);
@@ -675,7 +675,7 @@
* @return <code>true</code> if this list allows multiple
* selections; otherwise, <code>false</code>
* @see #setMultipleMode
- * @since JDK1.1
+ * @since 1.1
*/
public boolean isMultipleMode() {
return allowsMultipleSelections();
@@ -702,7 +702,7 @@
* are allowed; otherwise, only one item from
* the list can be selected at once
* @see #isMultipleMode
- * @since JDK1.1
+ * @since 1.1
*/
public void setMultipleMode(boolean b) {
setMultipleSelections(b);
@@ -753,7 +753,7 @@
* @return the preferred dimensions for displaying this scrolling list
* given that the specified number of rows must be visible
* @see java.awt.Component#getPreferredSize
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getPreferredSize(int rows) {
return preferredSize(rows);
@@ -777,7 +777,7 @@
* Gets the preferred size of this scrolling list.
* @return the preferred dimensions for displaying this scrolling list
* @see java.awt.Component#getPreferredSize
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getPreferredSize() {
return preferredSize();
@@ -803,7 +803,7 @@
* @return the minimum dimensions for displaying this scrolling list
* given that the specified number of rows must be visible
* @see java.awt.Component#getMinimumSize
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getMinimumSize(int rows) {
return minimumSize(rows);
@@ -828,7 +828,7 @@
* @return the minimum dimensions needed
* to display this scrolling list
* @see java.awt.Component#getMinimumSize()
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getMinimumSize() {
return minimumSize();
@@ -861,7 +861,7 @@
* @see #deselect
* @see java.awt.event.ItemEvent
* @see java.awt.event.ItemListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addItemListener(ItemListener l) {
if (l == null) {
@@ -884,7 +884,7 @@
* @see #getItemListeners
* @see java.awt.event.ItemEvent
* @see java.awt.event.ItemListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeItemListener(ItemListener l) {
if (l == null) {
@@ -927,7 +927,7 @@
* @see #getActionListeners
* @see java.awt.event.ActionEvent
* @see java.awt.event.ActionListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addActionListener(ActionListener l) {
if (l == null) {
@@ -951,7 +951,7 @@
* @see #getActionListeners
* @see java.awt.event.ActionEvent
* @see java.awt.event.ActionListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeActionListener(ActionListener l) {
if (l == null) {
@@ -1061,7 +1061,7 @@
* @see java.awt.event.ItemEvent
* @see #processActionEvent
* @see #processItemEvent
- * @since JDK1.1
+ * @since 1.1
*/
protected void processEvent(AWTEvent e) {
if (e instanceof ItemEvent) {
@@ -1096,7 +1096,7 @@
* @see java.awt.event.ItemListener
* @see #addItemListener
* @see java.awt.Component#enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected void processItemEvent(ItemEvent e) {
ItemListener listener = itemListener;
@@ -1127,7 +1127,7 @@
* @see java.awt.event.ActionListener
* @see #addActionListener
* @see java.awt.Component#enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected void processActionEvent(ActionEvent e) {
ActionListener listener = actionListener;
--- a/jdk/src/share/classes/java/awt/MediaTracker.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/MediaTracker.java Wed Jun 18 13:14:15 2014 -0700
@@ -164,7 +164,7 @@
* } </pre></blockquote><hr>
*
* @author Jim Graham
- * @since JDK1.0
+ * @since 1.0
*/
public class MediaTracker implements java.io.Serializable {
@@ -726,7 +726,7 @@
* @param image the image to be removed
* @see java.awt.MediaTracker#removeImage(java.awt.Image, int)
* @see java.awt.MediaTracker#removeImage(java.awt.Image, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeImage(Image image) {
removeImageImpl(image);
@@ -765,7 +765,7 @@
* @param id the tracking ID from which to remove the image
* @see java.awt.MediaTracker#removeImage(java.awt.Image)
* @see java.awt.MediaTracker#removeImage(java.awt.Image, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeImage(Image image, int id) {
removeImageImpl(image, id);
@@ -805,7 +805,7 @@
* @param height the height to remove (-1 for unscaled)
* @see java.awt.MediaTracker#removeImage(java.awt.Image)
* @see java.awt.MediaTracker#removeImage(java.awt.Image, int)
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeImage(Image image, int id,
int width, int height) {
--- a/jdk/src/share/classes/java/awt/Menu.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Menu.java Wed Jun 18 13:14:15 2014 -0700
@@ -53,7 +53,7 @@
* @author Sami Shaio
* @see java.awt.MenuItem
* @see java.awt.CheckboxMenuItem
- * @since JDK1.0
+ * @since 1.0
*/
public class Menu extends MenuItem implements MenuContainer, Accessible {
@@ -118,7 +118,7 @@
* @exception HeadlessException if GraphicsEnvironment.isHeadless()
* returns true.
* @see java.awt.GraphicsEnvironment#isHeadless
- * @since JDK1.1
+ * @since 1.1
*/
public Menu() throws HeadlessException {
this("", false);
@@ -151,7 +151,6 @@
* @exception HeadlessException if GraphicsEnvironment.isHeadless()
* returns true.
* @see java.awt.GraphicsEnvironment#isHeadless
- * @since JDK1.0.
*/
public Menu(String label, boolean tearOff) throws HeadlessException {
super(label);
@@ -215,7 +214,7 @@
/**
* Get the number of items in this menu.
* @return the number of items in this menu.
- * @since JDK1.1
+ * @since 1.1
*/
public int getItemCount() {
return countItems();
@@ -303,7 +302,7 @@
* @see java.awt.Menu#add(java.awt.MenuItem)
* @exception IllegalArgumentException if the value of
* <code>index</code> is less than zero
- * @since JDK1.1
+ * @since 1.1
*/
public void insert(MenuItem menuitem, int index) {
@@ -347,7 +346,7 @@
* @see java.awt.Menu#add(java.awt.MenuItem)
* @exception IllegalArgumentException if the value of
* <code>index</code> is less than zero
- * @since JDK1.1
+ * @since 1.1
*/
public void insert(String label, int index) {
@@ -369,7 +368,7 @@
* @exception IllegalArgumentException if the value of
* <code>index</code> is less than 0.
* @see java.awt.Menu#addSeparator
- * @since JDK1.1
+ * @since 1.1
*/
public void insertSeparator(int index) {
@@ -436,7 +435,7 @@
/**
* Removes all items from this menu.
- * @since JDK1.0.
+ * @since 1.1
*/
public void removeAll() {
synchronized (getTreeLock()) {
--- a/jdk/src/share/classes/java/awt/MenuBar.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/MenuBar.java Wed Jun 18 13:14:15 2014 -0700
@@ -65,7 +65,7 @@
* @see java.awt.Menu
* @see java.awt.MenuItem
* @see java.awt.MenuShortcut
- * @since JDK1.0
+ * @since 1.0
*/
public class MenuBar extends MenuComponent implements MenuContainer, Accessible {
@@ -272,7 +272,7 @@
/**
* Gets the number of menus on the menu bar.
* @return the number of menus on the menu bar.
- * @since JDK1.1
+ * @since 1.1
*/
public int getMenuCount() {
return countMenus();
@@ -318,7 +318,7 @@
* @return an enumeration of menu shortcuts that this
* menu bar is managing.
* @see java.awt.MenuShortcut
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized Enumeration<MenuShortcut> shortcuts() {
Vector<MenuShortcut> shortcuts = new Vector<>();
@@ -341,7 +341,7 @@
* @param s the specified menu shortcut.
* @see java.awt.MenuItem
* @see java.awt.MenuShortcut
- * @since JDK1.1
+ * @since 1.1
*/
public MenuItem getShortcutMenuItem(MenuShortcut s) {
int nmenus = getMenuCount();
@@ -387,7 +387,7 @@
/**
* Deletes the specified menu shortcut.
* @param s the menu shortcut to delete.
- * @since JDK1.1
+ * @since 1.1
*/
public void deleteShortcut(MenuShortcut s) {
int nmenus = getMenuCount();
--- a/jdk/src/share/classes/java/awt/MenuComponent.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/MenuComponent.java Wed Jun 18 13:14:15 2014 -0700
@@ -45,7 +45,7 @@
* through the method <code>processEvent</code>.
*
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public abstract class MenuComponent implements java.io.Serializable {
@@ -175,7 +175,7 @@
* Gets the name of the menu component.
* @return the name of the menu component
* @see java.awt.MenuComponent#setName(java.lang.String)
- * @since JDK1.1
+ * @since 1.1
*/
public String getName() {
if (name == null && !nameExplicitlySet) {
@@ -191,7 +191,7 @@
* Sets the name of the component to the specified string.
* @param name the name of the menu component
* @see java.awt.MenuComponent#getName
- * @since JDK1.1
+ * @since 1.1
*/
public void setName(String name) {
synchronized(this) {
@@ -373,7 +373,7 @@
* exception.
*
* @param e the event
- * @since JDK1.1
+ * @since 1.1
*/
protected void processEvent(AWTEvent e) {
}
--- a/jdk/src/share/classes/java/awt/MenuItem.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/MenuItem.java Wed Jun 18 13:14:15 2014 -0700
@@ -176,7 +176,7 @@
* @exception HeadlessException if GraphicsEnvironment.isHeadless()
* returns true.
* @see java.awt.GraphicsEnvironment#isHeadless
- * @since JDK1.1
+ * @since 1.1
*/
public MenuItem() throws HeadlessException {
this("", null);
@@ -192,7 +192,7 @@
* @exception HeadlessException if GraphicsEnvironment.isHeadless()
* returns true.
* @see java.awt.GraphicsEnvironment#isHeadless
- * @since JDK1.0
+ * @since 1.0
*/
public MenuItem(String label) throws HeadlessException {
this(label, null);
@@ -209,7 +209,7 @@
* @exception HeadlessException if GraphicsEnvironment.isHeadless()
* returns true.
* @see java.awt.GraphicsEnvironment#isHeadless
- * @since JDK1.1
+ * @since 1.1
*/
public MenuItem(String label, MenuShortcut s) throws HeadlessException {
this.label = label;
@@ -242,7 +242,7 @@
* @return the label of this menu item, or <code>null</code>
if this menu item has no label.
* @see java.awt.MenuItem#setLabel
- * @since JDK1.0
+ * @since 1.0
*/
public String getLabel() {
return label;
@@ -252,7 +252,7 @@
* Sets the label for this menu item to the specified label.
* @param label the new label, or <code>null</code> for no label.
* @see java.awt.MenuItem#getLabel
- * @since JDK1.0
+ * @since 1.0
*/
public synchronized void setLabel(String label) {
this.label = label;
@@ -265,7 +265,7 @@
/**
* Checks whether this menu item is enabled.
* @see java.awt.MenuItem#setEnabled
- * @since JDK1.0
+ * @since 1.0
*/
public boolean isEnabled() {
return enabled;
@@ -276,7 +276,7 @@
* @param b if <code>true</code>, enables this menu item;
* if <code>false</code>, disables it.
* @see java.awt.MenuItem#isEnabled
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void setEnabled(boolean b) {
enable(b);
@@ -327,7 +327,7 @@
* @return the menu shortcut associated with this menu item,
* or <code>null</code> if none has been specified.
* @see java.awt.MenuItem#setShortcut
- * @since JDK1.1
+ * @since 1.1
*/
public MenuShortcut getShortcut() {
return shortcut;
@@ -340,7 +340,7 @@
* @param s the menu shortcut to associate
* with this menu item.
* @see java.awt.MenuItem#getShortcut
- * @since JDK1.1
+ * @since 1.1
*/
public void setShortcut(MenuShortcut s) {
shortcut = s;
@@ -353,7 +353,7 @@
/**
* Delete any <code>MenuShortcut</code> object associated
* with this menu item.
- * @since JDK1.1
+ * @since 1.1
*/
public void deleteShortcut() {
shortcut = null;
@@ -455,7 +455,7 @@
* @see java.awt.MenuItem#processEvent
* @see java.awt.MenuItem#disableEvents
* @see java.awt.Component#enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected final void enableEvents(long eventsToEnable) {
eventMask |= eventsToEnable;
@@ -470,7 +470,7 @@
* @see java.awt.MenuItem#processEvent
* @see java.awt.MenuItem#enableEvents
* @see java.awt.Component#disableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected final void disableEvents(long eventsToDisable) {
eventMask &= ~eventsToDisable;
@@ -485,7 +485,7 @@
* @param command the action command to be set
* for this menu item.
* @see java.awt.MenuItem#getActionCommand
- * @since JDK1.1
+ * @since 1.1
*/
public void setActionCommand(String command) {
actionCommand = command;
@@ -495,7 +495,7 @@
* Gets the command name of the action event that is fired
* by this menu item.
* @see java.awt.MenuItem#setActionCommand
- * @since JDK1.1
+ * @since 1.1
*/
public String getActionCommand() {
return getActionCommandImpl();
@@ -518,7 +518,7 @@
* @see #getActionListeners
* @see java.awt.event.ActionEvent
* @see java.awt.event.ActionListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addActionListener(ActionListener l) {
if (l == null) {
@@ -540,7 +540,7 @@
* @see #getActionListeners
* @see java.awt.event.ActionEvent
* @see java.awt.event.ActionListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeActionListener(ActionListener l) {
if (l == null) {
@@ -621,7 +621,7 @@
*
* @param e the event
* @see java.awt.MenuItem#processActionEvent
- * @since JDK1.1
+ * @since 1.1
*/
protected void processEvent(AWTEvent e) {
if (e instanceof ActionEvent) {
@@ -661,7 +661,7 @@
* @see java.awt.event.ActionEvent
* @see java.awt.event.ActionListener
* @see java.awt.MenuItem#enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected void processActionEvent(ActionEvent e) {
ActionListener listener = actionListener;
--- a/jdk/src/share/classes/java/awt/MenuShortcut.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/MenuShortcut.java Wed Jun 18 13:14:15 2014 -0700
@@ -54,7 +54,7 @@
* via {@link Toolkit#getMenuShortcutKeyMask}.
*
* @author Thomas Ball
- * @since JDK1.1
+ * @since 1.1
*/
public class MenuShortcut implements java.io.Serializable
{
@@ -71,7 +71,7 @@
* @see #getKey()
* @see #usesShiftModifier()
* @see java.awt.event.KeyEvent
- * @since JDK1.1
+ * @since 1.1
*/
int key;
@@ -82,7 +82,7 @@
*
* @serial
* @see #usesShiftModifier()
- * @since JDK1.1
+ * @since 1.1
*/
boolean usesShift;
@@ -120,7 +120,7 @@
* Returns the raw keycode of this MenuShortcut.
* @return the raw keycode of this MenuShortcut.
* @see java.awt.event.KeyEvent
- * @since JDK1.1
+ * @since 1.1
*/
public int getKey() {
return key;
@@ -130,7 +130,7 @@
* Returns whether this MenuShortcut must be invoked using the SHIFT key.
* @return <code>true</code> if this MenuShortcut must be invoked using the
* SHIFT key, <code>false</code> otherwise.
- * @since JDK1.1
+ * @since 1.1
*/
public boolean usesShiftModifier() {
return usesShift;
@@ -143,7 +143,7 @@
* @param s the MenuShortcut to compare with this.
* @return <code>true</code> if this MenuShortcut is the same as another,
* <code>false</code> otherwise.
- * @since JDK1.1
+ * @since 1.1
*/
public boolean equals(MenuShortcut s) {
return (s != null && (s.getKey() == key) &&
@@ -178,7 +178,7 @@
/**
* Returns an internationalized description of the MenuShortcut.
* @return a string representation of this MenuShortcut.
- * @since JDK1.1
+ * @since 1.1
*/
public String toString() {
int modifiers = 0;
@@ -196,7 +196,7 @@
* Returns the parameter string representing the state of this
* MenuShortcut. This string is useful for debugging.
* @return the parameter string of this MenuShortcut.
- * @since JDK1.1
+ * @since 1.1
*/
protected String paramString() {
String str = "key=" + key;
--- a/jdk/src/share/classes/java/awt/Panel.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Panel.java Wed Jun 18 13:14:15 2014 -0700
@@ -36,7 +36,7 @@
*
* @author Sami Shaio
* @see java.awt.FlowLayout
- * @since JDK1.0
+ * @since 1.0
*/
public class Panel extends Container implements Accessible {
private static final String base = "panel";
@@ -59,7 +59,7 @@
/**
* Creates a new panel with the specified layout manager.
* @param layout the layout manager for this panel.
- * @since JDK1.1
+ * @since 1.1
*/
public Panel(LayoutManager layout) {
setLayout(layout);
--- a/jdk/src/share/classes/java/awt/ScrollPaneAdjustable.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/ScrollPaneAdjustable.java Wed Jun 18 13:14:15 2014 -0700
@@ -393,7 +393,7 @@
* @see #getAdjustmentListeners
* @see java.awt.event.AdjustmentListener
* @see java.awt.event.AdjustmentEvent
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeAdjustmentListener(AdjustmentListener l){
if (l == null) {
--- a/jdk/src/share/classes/java/awt/Scrollbar.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Scrollbar.java Wed Jun 18 13:14:15 2014 -0700
@@ -161,7 +161,7 @@
* @author Sami Shaio
* @see java.awt.event.AdjustmentEvent
* @see java.awt.event.AdjustmentListener
- * @since JDK1.0
+ * @since 1.0
*/
public class Scrollbar extends Component implements Adjustable, Accessible {
@@ -460,7 +460,7 @@
* @exception IllegalArgumentException if the value supplied
* for <code>orientation</code> is not a
* legal value
- * @since JDK1.1
+ * @since 1.1
*/
public void setOrientation(int orientation) {
synchronized (getTreeLock()) {
@@ -566,7 +566,7 @@
* @param newMinimum the new minimum value for this scroll bar
* @see java.awt.Scrollbar#setValues
* @see java.awt.Scrollbar#setMaximum
- * @since JDK1.1
+ * @since 1.1
*/
public void setMinimum(int newMinimum) {
// No checks are necessary in this method since minimum is
@@ -611,7 +611,7 @@
* for this scroll bar
* @see java.awt.Scrollbar#setValues
* @see java.awt.Scrollbar#setMinimum
- * @since JDK1.1
+ * @since 1.1
*/
public void setMaximum(int newMaximum) {
// minimum is checked first in setValues, so we need to
@@ -649,7 +649,7 @@
*
* @return the visible amount of this scroll bar
* @see java.awt.Scrollbar#setVisibleAmount
- * @since JDK1.1
+ * @since 1.1
*/
public int getVisibleAmount() {
return getVisible();
@@ -697,7 +697,7 @@
* @param newAmount the new visible amount
* @see java.awt.Scrollbar#getVisibleAmount
* @see java.awt.Scrollbar#setValues
- * @since JDK1.1
+ * @since 1.1
*/
public void setVisibleAmount(int newAmount) {
// Use setValues so that a consistent policy relating
@@ -722,7 +722,7 @@
* @param v the amount by which to increment or decrement
* the scroll bar's value
* @see java.awt.Scrollbar#getUnitIncrement
- * @since JDK1.1
+ * @since 1.1
*/
public void setUnitIncrement(int v) {
setLineIncrement(v);
@@ -761,7 +761,7 @@
*
* @return the unit increment of this scroll bar
* @see java.awt.Scrollbar#setUnitIncrement
- * @since JDK1.1
+ * @since 1.1
*/
public int getUnitIncrement() {
return getLineIncrement();
@@ -790,7 +790,7 @@
* @param v the amount by which to increment or decrement
* the scroll bar's value
* @see java.awt.Scrollbar#getBlockIncrement
- * @since JDK1.1
+ * @since 1.1
*/
public void setBlockIncrement(int v) {
setPageIncrement(v);
@@ -826,7 +826,7 @@
*
* @return the block increment of this scroll bar
* @see java.awt.Scrollbar#setBlockIncrement
- * @since JDK1.1
+ * @since 1.1
*/
public int getBlockIncrement() {
return getPageIncrement();
@@ -972,7 +972,7 @@
* @see #getAdjustmentListeners
* @see java.awt.event.AdjustmentEvent
* @see java.awt.event.AdjustmentListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addAdjustmentListener(AdjustmentListener l) {
if (l == null) {
@@ -995,7 +995,7 @@
* @see #getAdjustmentListeners
* @see java.awt.event.AdjustmentEvent
* @see java.awt.event.AdjustmentListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeAdjustmentListener(AdjustmentListener l) {
if (l == null) {
@@ -1086,7 +1086,7 @@
* @param e the event
* @see java.awt.event.AdjustmentEvent
* @see java.awt.Scrollbar#processAdjustmentEvent
- * @since JDK1.1
+ * @since 1.1
*/
protected void processEvent(AWTEvent e) {
if (e instanceof AdjustmentEvent) {
@@ -1118,7 +1118,7 @@
* @see java.awt.event.AdjustmentListener
* @see java.awt.Scrollbar#addAdjustmentListener
* @see java.awt.Component#enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected void processAdjustmentEvent(AdjustmentEvent e) {
AdjustmentListener listener = adjustmentListener;
--- a/jdk/src/share/classes/java/awt/TextArea.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/TextArea.java Wed Jun 18 13:14:15 2014 -0700
@@ -51,7 +51,7 @@
* </pre></blockquote><hr>
*
* @author Sami Shaio
- * @since JDK1.0
+ * @since 1.0
*/
public class TextArea extends TextComponent {
@@ -84,25 +84,25 @@
/**
* Create and display both vertical and horizontal scrollbars.
- * @since JDK1.1
+ * @since 1.1
*/
public static final int SCROLLBARS_BOTH = 0;
/**
* Create and display vertical scrollbar only.
- * @since JDK1.1
+ * @since 1.1
*/
public static final int SCROLLBARS_VERTICAL_ONLY = 1;
/**
* Create and display horizontal scrollbar only.
- * @since JDK1.1
+ * @since 1.1
*/
public static final int SCROLLBARS_HORIZONTAL_ONLY = 2;
/**
* Do not create or display any scrollbars for the text area.
- * @since JDK1.1
+ * @since 1.1
*/
public static final int SCROLLBARS_NONE = 3;
@@ -248,7 +248,7 @@
* <code>columns</code> is set to <code>0</code>
* @param scrollbars a constant that determines what
* scrollbars are created to view the text area
- * @since JDK1.1
+ * @since 1.1
* @exception HeadlessException if
* <code>GraphicsEnvironment.isHeadless</code> returns true
* @see java.awt.GraphicsEnvironment#isHeadless()
@@ -307,7 +307,7 @@
* @see java.awt.TextComponent#setText
* @see java.awt.TextArea#replaceRange
* @see java.awt.TextArea#append
- * @since JDK1.1
+ * @since 1.1
*/
public void insert(String str, int pos) {
insertText(str, pos);
@@ -335,7 +335,7 @@
*
* @param str the non-<code>null</code> text to append
* @see java.awt.TextArea#insert
- * @since JDK1.1
+ * @since 1.1
*/
public void append(String str) {
appendText(str);
@@ -371,7 +371,7 @@
* @param start the start position
* @param end the end position
* @see java.awt.TextArea#insert
- * @since JDK1.1
+ * @since 1.1
*/
public void replaceRange(String str, int start, int end) {
replaceText(str, start, end);
@@ -396,7 +396,7 @@
* @return the number of rows in the text area
* @see #setRows(int)
* @see #getColumns()
- * @since JDK1
+ * @since 1.0
*/
public int getRows() {
return rows;
@@ -410,7 +410,7 @@
* @exception IllegalArgumentException if the value
* supplied for <code>rows</code>
* is less than <code>0</code>
- * @since JDK1.1
+ * @since 1.1
*/
public void setRows(int rows) {
int oldVal = this.rows;
@@ -441,7 +441,7 @@
* @exception IllegalArgumentException if the value
* supplied for <code>columns</code>
* is less than <code>0</code>
- * @since JDK1.1
+ * @since 1.1
*/
public void setColumns(int columns) {
int oldVal = this.columns;
@@ -469,7 +469,7 @@
* @see java.awt.TextArea#SCROLLBARS_HORIZONTAL_ONLY
* @see java.awt.TextArea#SCROLLBARS_NONE
* @see java.awt.TextArea#TextArea(java.lang.String, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public int getScrollbarVisibility() {
return scrollbarVisibility;
@@ -485,7 +485,7 @@
* the text area with the specified
* number of rows and columns
* @see java.awt.Component#getPreferredSize
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getPreferredSize(int rows, int columns) {
return preferredSize(rows, columns);
@@ -509,7 +509,7 @@
* Determines the preferred size of this text area.
* @return the preferred dimensions needed for this text area
* @see java.awt.Component#getPreferredSize
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getPreferredSize() {
return preferredSize();
@@ -537,7 +537,7 @@
* the text area with the specified
* number of rows and columns
* @see java.awt.Component#getMinimumSize
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getMinimumSize(int rows, int columns) {
return minimumSize(rows, columns);
@@ -561,7 +561,7 @@
* Determines the minimum size of this text area.
* @return the preferred dimensions needed for this text area
* @see java.awt.Component#getPreferredSize
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getMinimumSize() {
return minimumSize();
--- a/jdk/src/share/classes/java/awt/TextComponent.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/TextComponent.java Wed Jun 18 13:14:15 2014 -0700
@@ -55,7 +55,7 @@
*
* @author Sami Shaio
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public class TextComponent extends Component implements Accessible {
@@ -268,7 +268,7 @@
* @return <code>true</code> if this text component is
* editable; <code>false</code> otherwise.
* @see java.awt.TextComponent#setEditable
- * @since JDK1.0
+ * @since 1.0
*/
public boolean isEditable() {
return editable;
@@ -288,7 +288,7 @@
* @param b a flag indicating whether this text component
* is user editable.
* @see java.awt.TextComponent#isEditable
- * @since JDK1.0
+ * @since 1.0
*/
public synchronized void setEditable(boolean b) {
if (editable == b) {
@@ -313,7 +313,7 @@
* If this text component does not have a background color,
* the background color of its parent is returned.
* @see #setBackground(Color)
- * @since JDK1.0
+ * @since 1.0
*/
public Color getBackground() {
if (!editable && !backgroundSetByClientCode) {
@@ -330,7 +330,7 @@
* If this parameter is null then this text component
* will inherit the background color of its parent.
* @see #getBackground()
- * @since JDK1.0
+ * @since 1.0
*/
public void setBackground(Color c) {
backgroundSetByClientCode = true;
@@ -365,7 +365,7 @@
* selected text
* @see java.awt.TextComponent#getSelectionStart
* @see java.awt.TextComponent#setSelectionEnd
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void setSelectionStart(int selectionStart) {
/* Route through select method to enforce consistent policy
@@ -401,7 +401,7 @@
* selected text
* @see java.awt.TextComponent#getSelectionEnd
* @see java.awt.TextComponent#setSelectionStart
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void setSelectionEnd(int selectionEnd) {
/* Route through select method to enforce consistent policy
@@ -494,7 +494,7 @@
* @param position the position of the text insertion caret
* @exception IllegalArgumentException if <code>position</code>
* is less than zero
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void setCaretPosition(int position) {
if (position < 0) {
@@ -523,7 +523,7 @@
*
* @return the position of the text insertion caret
* @see #setCaretPosition(int)
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized int getCaretPosition() {
TextComponentPeer peer = (TextComponentPeer)this.peer;
@@ -574,7 +574,7 @@
* @see #addTextListener
* @see #getTextListeners
* @see java.awt.event.TextListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeTextListener(TextListener l) {
if (l == null) {
--- a/jdk/src/share/classes/java/awt/TextField.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/TextField.java Wed Jun 18 13:14:15 2014 -0700
@@ -92,7 +92,7 @@
* @see java.awt.TextField#processEvent
* @see java.awt.TextField#processActionEvent
* @see java.awt.TextField#addActionListener
- * @since JDK1.0
+ * @since 1.0
*/
public class TextField extends TextComponent {
@@ -265,7 +265,7 @@
* @param c the echo character for this text field.
* @see java.awt.TextField#echoCharIsSet
* @see java.awt.TextField#getEchoChar
- * @since JDK1.1
+ * @since 1.1
*/
public void setEchoChar(char c) {
setEchoCharacter(c);
@@ -321,7 +321,7 @@
* approximate average character width that is platform-dependent.
* @return the number of columns.
* @see java.awt.TextField#setColumns
- * @since JDK1.1
+ * @since 1.1
*/
public int getColumns() {
return columns;
@@ -335,7 +335,7 @@
* @exception IllegalArgumentException if the value
* supplied for <code>columns</code>
* is less than <code>0</code>.
- * @since JDK1.1
+ * @since 1.1
*/
public void setColumns(int columns) {
int oldVal;
@@ -361,7 +361,7 @@
* in this text field.
* @return the preferred dimensions for
* displaying this text field.
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getPreferredSize(int columns) {
return preferredSize(columns);
@@ -385,7 +385,7 @@
* Gets the preferred size of this text field.
* @return the preferred dimensions for
* displaying this text field.
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getPreferredSize() {
return preferredSize();
@@ -409,7 +409,7 @@
* the specified number of columns.
* @param columns the number of columns in
* this text field.
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getMinimumSize(int columns) {
return minimumSize(columns);
@@ -433,7 +433,7 @@
* Gets the minimum dimensions for this text field.
* @return the minimum dimensions for
* displaying this text field.
- * @since JDK1.1
+ * @since 1.1
*/
public Dimension getMinimumSize() {
return minimumSize();
@@ -463,7 +463,7 @@
* @see #removeActionListener
* @see #getActionListeners
* @see java.awt.event.ActionListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void addActionListener(ActionListener l) {
if (l == null) {
@@ -484,7 +484,7 @@
* @see #addActionListener
* @see #getActionListeners
* @see java.awt.event.ActionListener
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void removeActionListener(ActionListener l) {
if (l == null) {
@@ -578,7 +578,7 @@
* @param e the event
* @see java.awt.event.ActionEvent
* @see java.awt.TextField#processActionEvent
- * @since JDK1.1
+ * @since 1.1
*/
protected void processEvent(AWTEvent e) {
if (e instanceof ActionEvent) {
@@ -609,7 +609,7 @@
* @see java.awt.event.ActionListener
* @see java.awt.TextField#addActionListener
* @see java.awt.Component#enableEvents
- * @since JDK1.1
+ * @since 1.1
*/
protected void processActionEvent(ActionEvent e) {
ActionListener listener = actionListener;
--- a/jdk/src/share/classes/java/awt/Toolkit.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Toolkit.java Wed Jun 18 13:14:15 2014 -0700
@@ -108,7 +108,7 @@
* @author Sami Shaio
* @author Arthur van Hoff
* @author Fred Ecks
- * @since JDK1.0
+ * @since 1.0
*/
public abstract class Toolkit {
@@ -222,7 +222,7 @@
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.ScrollPane
* @see java.awt.peer.ScrollPanePeer
- * @since JDK1.1
+ * @since 1.1
*/
protected abstract ScrollPanePeer createScrollPane(ScrollPane target)
throws HeadlessException;
@@ -355,7 +355,7 @@
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.PopupMenu
* @see java.awt.peer.PopupMenuPeer
- * @since JDK1.1
+ * @since 1.1
*/
protected abstract PopupMenuPeer createPopupMenu(PopupMenu target)
throws HeadlessException;
@@ -457,7 +457,7 @@
* @exception HeadlessException if GraphicsEnvironment.isHeadless()
* returns true
* @see java.awt.GraphicsEnvironment#isHeadless
- * @since JDK1.1
+ * @since 1.1
*/
protected void loadSystemColors(int[] systemColors)
throws HeadlessException {
@@ -1105,7 +1105,7 @@
* @param imagedata an array of bytes, representing
* image data in a supported image format.
* @return an image.
- * @since JDK1.1
+ * @since 1.1
*/
public Image createImage(byte[] imagedata) {
return createImage(imagedata, 0, imagedata.length);
@@ -1122,7 +1122,7 @@
* of the data in the array.
* @param imagelength the length of the data in the array.
* @return an image.
- * @since JDK1.1
+ * @since 1.1
*/
public abstract Image createImage(byte[] imagedata,
int imageoffset,
@@ -1159,7 +1159,7 @@
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.PrintJob
* @see java.lang.RuntimePermission
- * @since JDK1.1
+ * @since 1.1
*/
public abstract PrintJob getPrintJob(Frame frame, String jobtitle,
Properties props);
@@ -1230,7 +1230,7 @@
/**
* Emits an audio beep depending on native system settings and hardware
* capabilities.
- * @since JDK1.1
+ * @since 1.1
*/
public abstract void beep();
@@ -1273,7 +1273,7 @@
* @see java.awt.datatransfer.DataFlavor#plainTextFlavor
* @see java.io.Reader
* @see java.awt.AWTPermission
- * @since JDK1.1
+ * @since 1.1
*/
public abstract Clipboard getSystemClipboard()
throws HeadlessException;
@@ -1353,7 +1353,7 @@
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.MenuBar
* @see java.awt.MenuShortcut
- * @since JDK1.1
+ * @since 1.1
*/
public int getMenuShortcutKeyMask() throws HeadlessException {
GraphicsEnvironment.checkHeadless();
--- a/jdk/src/share/classes/java/awt/Window.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/Window.java Wed Jun 18 13:14:15 2014 -0700
@@ -143,7 +143,7 @@
* @see WindowEvent
* @see #addWindowListener
* @see java.awt.BorderLayout
- * @since JDK1.0
+ * @since 1.0
*/
public class Window extends Container implements Accessible {
@@ -753,7 +753,7 @@
* not be called directly by programs.
* @see Component#isDisplayable
* @see Container#removeNotify
- * @since JDK1.0
+ * @since 1.0
*/
public void addNotify() {
synchronized (getTreeLock()) {
@@ -1405,7 +1405,7 @@
* is returned.
* @return the locale that is set for this window.
* @see java.util.Locale
- * @since JDK1.1
+ * @since 1.1
*/
public Locale getLocale() {
if (this.locale == null) {
@@ -1441,7 +1441,7 @@
* Cursor.DEFAULT_CURSOR.
* @see Component#getCursor
* @see Cursor
- * @since JDK1.1
+ * @since 1.1
*/
public void setCursor(Cursor cursor) {
if (cursor == null) {
--- a/jdk/src/share/classes/java/awt/datatransfer/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/datatransfer/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -59,6 +59,6 @@
</ul>
-->
-@since JDK1.1
+@since 1.1
</body>
</html>
--- a/jdk/src/share/classes/java/awt/event/InputEvent.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/event/InputEvent.java Wed Jun 18 13:14:15 2014 -0700
@@ -162,7 +162,7 @@
* @see getButtonDownMasks
* There are twenty buttons fit into 4byte space.
* one more bit is reserved for FIRST_HIGH_BIT.
- * @since 7.0
+ * @since 1.7
*/
private static final int [] BUTTON_DOWN_MASK = new int [] { BUTTON1_DOWN_MASK,
BUTTON2_DOWN_MASK,
@@ -187,7 +187,7 @@
/**
* A method to access an array of extended modifiers for additional buttons.
- * @since 7.0
+ * @since 1.7
*/
private static int [] getButtonDownMasks(){
return Arrays.copyOf(BUTTON_DOWN_MASK, BUTTON_DOWN_MASK.length);
@@ -237,7 +237,7 @@
* @return a mask for an existing mouse button.
* @throws IllegalArgumentException if {@code button} is less than zero or greater than the number
* of button masks reserved for buttons
- * @since 7.0
+ * @since 1.7
* @see java.awt.MouseInfo#getNumberOfButtons()
* @see Toolkit#areExtraMouseButtonsEnabled()
* @see MouseEvent#getModifiers()
--- a/jdk/src/share/classes/java/awt/event/WindowEvent.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/event/WindowEvent.java Wed Jun 18 13:14:15 2014 -0700
@@ -54,7 +54,7 @@
* @see WindowListener
* @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html">Tutorial: Writing a Window Listener</a>
*
- * @since JDK1.1
+ * @since 1.1
*/
public class WindowEvent extends ComponentEvent {
--- a/jdk/src/share/classes/java/awt/event/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/event/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -53,6 +53,6 @@
</ul>
-->
-@since JDK1.1
+@since 1.1
</body>
</html>
--- a/jdk/src/share/classes/java/awt/im/spi/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/im/spi/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -121,6 +121,6 @@
Method Engine SPI Tutorial</A></B>
</UL>
-@since JDK1.3
+@since 1.3
</BODY>
</HTML>
--- a/jdk/src/share/classes/java/awt/image/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/image/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -53,6 +53,6 @@
</ul>
-->
-@since JDK1.0
+@since 1.0
</body>
</html>
--- a/jdk/src/share/classes/java/awt/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/awt/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -78,6 +78,6 @@
</ul>
-->
-@since JDK1.0
+@since 1.0
</body>
</html>
--- a/jdk/src/share/classes/java/beans/Introspector.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/beans/Introspector.java Wed Jun 18 13:14:15 2014 -0700
@@ -1291,7 +1291,7 @@
* Creates a key for a method in a method cache.
*/
private static String makeQualifiedMethodName(String name, String[] params) {
- StringBuffer sb = new StringBuffer(name);
+ StringBuilder sb = new StringBuilder(name);
sb.append('=');
for (int i = 0; i < params.length; i++) {
sb.append(':');
--- a/jdk/src/share/classes/java/beans/Statement.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/beans/Statement.java Wed Jun 18 13:14:15 2014 -0700
@@ -340,7 +340,7 @@
if (arguments == null) {
arguments = emptyArray;
}
- StringBuffer result = new StringBuffer(instanceName(target) + "." + methodName + "(");
+ StringBuilder result = new StringBuilder(instanceName(target) + "." + methodName + "(");
int n = arguments.length;
for(int i = 0; i < n; i++) {
result.append(instanceName(arguments[i]));
--- a/jdk/src/share/classes/java/io/BufferedInputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/BufferedInputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -45,7 +45,7 @@
* the contained input stream.
*
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public
class BufferedInputStream extends FilterInputStream {
--- a/jdk/src/share/classes/java/io/BufferedOutputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/BufferedOutputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* system for each byte written.
*
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public
class BufferedOutputStream extends FilterOutputStream {
--- a/jdk/src/share/classes/java/io/BufferedReader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/BufferedReader.java Wed Jun 18 13:14:15 2014 -0700
@@ -64,7 +64,7 @@
* @see java.nio.file.Files#newBufferedReader
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public class BufferedReader extends Reader {
--- a/jdk/src/share/classes/java/io/BufferedWriter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/BufferedWriter.java Wed Jun 18 13:14:15 2014 -0700
@@ -60,7 +60,7 @@
* @see java.nio.file.Files#newBufferedWriter
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public class BufferedWriter extends Writer {
--- a/jdk/src/share/classes/java/io/ByteArrayInputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/ByteArrayInputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -38,7 +38,7 @@
*
* @author Arthur van Hoff
* @see java.io.StringBufferInputStream
- * @since JDK1.0
+ * @since 1.0
*/
public
class ByteArrayInputStream extends InputStream {
@@ -73,7 +73,7 @@
* If no mark has been set, then the value of mark is the offset
* passed to the constructor (or 0 if the offset was not supplied).
*
- * @since JDK1.1
+ * @since 1.1
*/
protected int mark = 0;
@@ -237,7 +237,7 @@
* <code>markSupported</code> method of <code>ByteArrayInputStream</code>
* always returns <code>true</code>.
*
- * @since JDK1.1
+ * @since 1.1
*/
public boolean markSupported() {
return true;
@@ -256,7 +256,7 @@
* <p> Note: The <code>readAheadLimit</code> for this class
* has no meaning.
*
- * @since JDK1.1
+ * @since 1.1
*/
public void mark(int readAheadLimit) {
mark = pos;
--- a/jdk/src/share/classes/java/io/ByteArrayOutputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/ByteArrayOutputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -39,7 +39,7 @@
* generating an <tt>IOException</tt>.
*
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public class ByteArrayOutputStream extends OutputStream {
@@ -202,7 +202,7 @@
* required.
*
* @return String decoded from the buffer's contents.
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized String toString() {
return new String(buf, 0, count);
@@ -224,7 +224,7 @@
* @return String decoded from the buffer's contents.
* @exception UnsupportedEncodingException
* If the named charset is not supported
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized String toString(String charsetName)
throws UnsupportedEncodingException
--- a/jdk/src/share/classes/java/io/CharArrayReader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/CharArrayReader.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* character-input stream.
*
* @author Herb Jellinek
- * @since JDK1.1
+ * @since 1.1
*/
public class CharArrayReader extends Reader {
/** The character buffer. */
--- a/jdk/src/share/classes/java/io/CharArrayWriter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/CharArrayWriter.java Wed Jun 18 13:14:15 2014 -0700
@@ -37,7 +37,7 @@
* without generating an IOException.
*
* @author Herb Jellinek
- * @since JDK1.1
+ * @since 1.1
*/
public
class CharArrayWriter extends Writer {
--- a/jdk/src/share/classes/java/io/CharConversionException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/CharConversionException.java Wed Jun 18 13:14:15 2014 -0700
@@ -28,7 +28,7 @@
* Base class for character conversion exceptions.
*
* @author Asmus Freytag
- * @since JDK1.1
+ * @since 1.1
*/
public class CharConversionException
extends java.io.IOException
--- a/jdk/src/share/classes/java/io/DataInput.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/DataInput.java Wed Jun 18 13:14:15 2014 -0700
@@ -143,7 +143,7 @@
* @author Frank Yellin
* @see java.io.DataInputStream
* @see java.io.DataOutput
- * @since JDK1.0
+ * @since 1.0
*/
public
interface DataInput {
--- a/jdk/src/share/classes/java/io/DataInputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/DataInputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -37,7 +37,7 @@
*
* @author Arthur van Hoff
* @see java.io.DataOutputStream
- * @since JDK1.0
+ * @since 1.0
*/
public
class DataInputStream extends FilterInputStream implements DataInput {
--- a/jdk/src/share/classes/java/io/DataOutput.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/DataOutput.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,7 +44,7 @@
* @author Frank Yellin
* @see java.io.DataInput
* @see java.io.DataOutputStream
- * @since JDK1.0
+ * @since 1.0
*/
public
interface DataOutput {
--- a/jdk/src/share/classes/java/io/DataOutputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/DataOutputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
*
* @author unascribed
* @see java.io.DataInputStream
- * @since JDK1.0
+ * @since 1.0
*/
public
class DataOutputStream extends FilterOutputStream implements DataOutput {
--- a/jdk/src/share/classes/java/io/EOFException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/EOFException.java Wed Jun 18 13:14:15 2014 -0700
@@ -36,7 +36,7 @@
* @author Frank Yellin
* @see java.io.DataInputStream
* @see java.io.IOException
- * @since JDK1.0
+ * @since 1.0
*/
public
class EOFException extends IOException {
--- a/jdk/src/share/classes/java/io/Externalizable.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/Externalizable.java Wed Jun 18 13:14:15 2014 -0700
@@ -61,7 +61,7 @@
* @see java.io.ObjectOutput
* @see java.io.ObjectInput
* @see java.io.Serializable
- * @since JDK1.1
+ * @since 1.1
*/
public interface Externalizable extends java.io.Serializable {
/**
--- a/jdk/src/share/classes/java/io/File.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/File.java Wed Jun 18 13:14:15 2014 -0700
@@ -143,7 +143,7 @@
* diagnose errors when an operation on a file fails.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public class File
@@ -608,7 +608,7 @@
* java.lang.SecurityManager#checkRead}</code> method denies
* read access to the file
*
- * @since JDK1.1
+ * @since 1.1
* @see Path#toRealPath
*/
public String getCanonicalPath() throws IOException {
--- a/jdk/src/share/classes/java/io/FileInputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/FileInputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -43,7 +43,7 @@
* @see java.io.FileDescriptor
* @see java.io.FileOutputStream
* @see java.nio.file.Files#newInputStream
- * @since JDK1.0
+ * @since 1.0
*/
public
class FileInputStream extends InputStream
--- a/jdk/src/share/classes/java/io/FileNotFoundException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/FileNotFoundException.java Wed Jun 18 13:14:15 2014 -0700
@@ -37,7 +37,7 @@
* example when an attempt is made to open a read-only file for writing.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public class FileNotFoundException extends IOException {
--- a/jdk/src/share/classes/java/io/FileOutputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/FileOutputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -47,7 +47,7 @@
* @see java.io.FileDescriptor
* @see java.io.FileInputStream
* @see java.nio.file.Files#newOutputStream
- * @since JDK1.0
+ * @since 1.0
*/
public
class FileOutputStream extends OutputStream
@@ -125,7 +125,7 @@
* <code>checkWrite</code> method denies write access
* to the file.
* @see java.lang.SecurityManager#checkWrite(java.lang.String)
- * @since JDK1.1
+ * @since 1.1
*/
public FileOutputStream(String name, boolean append)
throws FileNotFoundException
--- a/jdk/src/share/classes/java/io/FileReader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/FileReader.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,7 +40,7 @@
* @see FileInputStream
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public class FileReader extends InputStreamReader {
--- a/jdk/src/share/classes/java/io/FileWriter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/FileWriter.java Wed Jun 18 13:14:15 2014 -0700
@@ -46,7 +46,7 @@
* @see FileOutputStream
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public class FileWriter extends OutputStreamWriter {
--- a/jdk/src/share/classes/java/io/FilenameFilter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/FilenameFilter.java Wed Jun 18 13:14:15 2014 -0700
@@ -37,7 +37,7 @@
* @see java.awt.FileDialog#setFilenameFilter(java.io.FilenameFilter)
* @see java.io.File
* @see java.io.File#list(java.io.FilenameFilter)
- * @since JDK1.0
+ * @since 1.0
*/
@FunctionalInterface
public interface FilenameFilter {
--- a/jdk/src/share/classes/java/io/FilterInputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/FilterInputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,7 +40,7 @@
* and fields.
*
* @author Jonathan Payne
- * @since JDK1.0
+ * @since 1.0
*/
public
class FilterInputStream extends InputStream {
--- a/jdk/src/share/classes/java/io/FilterOutputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/FilterOutputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -39,7 +39,7 @@
* methods as well as provide additional methods and fields.
*
* @author Jonathan Payne
- * @since JDK1.0
+ * @since 1.0
*/
public
class FilterOutputStream extends OutputStream {
--- a/jdk/src/share/classes/java/io/FilterReader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/FilterReader.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
* additional methods and fields.
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public abstract class FilterReader extends Reader {
--- a/jdk/src/share/classes/java/io/FilterWriter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/FilterWriter.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
* provide additional methods and fields.
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public abstract class FilterWriter extends Writer {
--- a/jdk/src/share/classes/java/io/IOException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/IOException.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
* @author unascribed
* @see java.io.InputStream
* @see java.io.OutputStream
- * @since JDK1.0
+ * @since 1.0
*/
public
class IOException extends Exception {
--- a/jdk/src/share/classes/java/io/InputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/InputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,7 +40,7 @@
* @see java.io.InputStream#read()
* @see java.io.OutputStream
* @see java.io.PushbackInputStream
- * @since JDK1.0
+ * @since 1.0
*/
public abstract class InputStream implements Closeable {
--- a/jdk/src/share/classes/java/io/InputStreamReader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/InputStreamReader.java Wed Jun 18 13:14:15 2014 -0700
@@ -56,7 +56,7 @@
* @see java.nio.charset.Charset
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public class InputStreamReader extends Reader {
--- a/jdk/src/share/classes/java/io/InterruptedIOException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/InterruptedIOException.java Wed Jun 18 13:14:15 2014 -0700
@@ -37,7 +37,7 @@
* @see java.io.InputStream
* @see java.io.OutputStream
* @see java.lang.Thread#interrupt()
- * @since JDK1.0
+ * @since 1.0
*/
public
class InterruptedIOException extends IOException {
--- a/jdk/src/share/classes/java/io/InvalidClassException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/InvalidClassException.java Wed Jun 18 13:14:15 2014 -0700
@@ -36,7 +36,7 @@
* </UL>
*
* @author unascribed
- * @since JDK1.1
+ * @since 1.1
*/
public class InvalidClassException extends ObjectStreamException {
--- a/jdk/src/share/classes/java/io/InvalidObjectException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/InvalidObjectException.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,10 +30,10 @@
* tests. The argument should provide the reason for the failure.
*
* @see ObjectInputValidation
- * @since JDK1.1
+ * @since 1.1
*
* @author unascribed
- * @since JDK1.1
+ * @since 1.1
*/
public class InvalidObjectException extends ObjectStreamException {
--- a/jdk/src/share/classes/java/io/LineNumberInputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/LineNumberInputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,7 +40,7 @@
*
* @author Arthur van Hoff
* @see java.io.LineNumberReader
- * @since JDK1.0
+ * @since 1.0
* @deprecated This class incorrectly assumes that bytes adequately represent
* characters. As of JDK 1.1, the preferred way to operate on
* character streams is via the new character-stream classes, which
--- a/jdk/src/share/classes/java/io/LineNumberReader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/LineNumberReader.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,7 +44,7 @@
* immediately by a linefeed.
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public class LineNumberReader extends BufferedReader {
--- a/jdk/src/share/classes/java/io/NotActiveException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/NotActiveException.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
* Thrown when serialization or deserialization is not active.
*
* @author unascribed
- * @since JDK1.1
+ * @since 1.1
*/
public class NotActiveException extends ObjectStreamException {
--- a/jdk/src/share/classes/java/io/NotSerializableException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/NotSerializableException.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* this exception. The argument should be the name of the class.
*
* @author unascribed
- * @since JDK1.1
+ * @since 1.1
*/
public class NotSerializableException extends ObjectStreamException {
--- a/jdk/src/share/classes/java/io/ObjectInput.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/ObjectInput.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
* @see java.io.InputStream
* @see java.io.ObjectOutputStream
* @see java.io.ObjectInputStream
- * @since JDK1.1
+ * @since 1.1
*/
public interface ObjectInput extends DataInput, AutoCloseable {
/**
--- a/jdk/src/share/classes/java/io/ObjectInputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/ObjectInputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -200,7 +200,7 @@
* @see java.io.ObjectOutputStream
* @see java.io.Serializable
* @see <a href="../../../platform/serialization/spec/input.html"> Object Serialization Specification, Section 3, Object Input Classes</a>
- * @since JDK1.1
+ * @since 1.1
*/
public class ObjectInputStream
extends InputStream implements ObjectInput, ObjectStreamConstants
--- a/jdk/src/share/classes/java/io/ObjectInputValidation.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/ObjectInputValidation.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
* @author unascribed
* @see ObjectInputStream
* @see ObjectInputStream#registerValidation(java.io.ObjectInputValidation, int)
- * @since JDK1.1
+ * @since 1.1
*/
public interface ObjectInputValidation {
/**
--- a/jdk/src/share/classes/java/io/ObjectOutput.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/ObjectOutput.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
* @see java.io.InputStream
* @see java.io.ObjectOutputStream
* @see java.io.ObjectInputStream
- * @since JDK1.1
+ * @since 1.1
*/
public interface ObjectOutput extends DataOutput, AutoCloseable {
/**
--- a/jdk/src/share/classes/java/io/ObjectOutputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/ObjectOutputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -156,7 +156,7 @@
* @see java.io.Serializable
* @see java.io.Externalizable
* @see <a href="../../../platform/serialization/spec/output.html">Object Serialization Specification, Section 2, Object Output Classes</a>
- * @since JDK1.1
+ * @since 1.1
*/
public class ObjectOutputStream
extends OutputStream implements ObjectOutput, ObjectStreamConstants
--- a/jdk/src/share/classes/java/io/ObjectStreamClass.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/ObjectStreamClass.java Wed Jun 18 13:14:15 2014 -0700
@@ -67,7 +67,7 @@
* @author Roger Riggs
* @see ObjectStreamField
* @see <a href="../../../platform/serialization/spec/class.html">Object Serialization Specification, Section 4, Class Descriptors</a>
- * @since JDK1.1
+ * @since 1.1
*/
public class ObjectStreamClass implements Serializable {
--- a/jdk/src/share/classes/java/io/ObjectStreamConstants.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/ObjectStreamConstants.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
* Constants written into the Object Serialization Stream.
*
* @author unascribed
- * @since JDK 1.1
+ * @since 1.1
*/
public interface ObjectStreamConstants {
--- a/jdk/src/share/classes/java/io/ObjectStreamException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/ObjectStreamException.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
* Superclass of all exceptions specific to Object Stream classes.
*
* @author unascribed
- * @since JDK1.1
+ * @since 1.1
*/
public abstract class ObjectStreamException extends IOException {
--- a/jdk/src/share/classes/java/io/OptionalDataException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/OptionalDataException.java Wed Jun 18 13:14:15 2014 -0700
@@ -43,7 +43,7 @@
* </ul>
*
* @author unascribed
- * @since JDK1.1
+ * @since 1.1
*/
public class OptionalDataException extends ObjectStreamException {
--- a/jdk/src/share/classes/java/io/OutputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/OutputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -41,7 +41,7 @@
* @see java.io.FilterOutputStream
* @see java.io.InputStream
* @see java.io.OutputStream#write(int)
- * @since JDK1.0
+ * @since 1.0
*/
public abstract class OutputStream implements Closeable, Flushable {
/**
--- a/jdk/src/share/classes/java/io/OutputStreamWriter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/OutputStreamWriter.java Wed Jun 18 13:14:15 2014 -0700
@@ -71,7 +71,7 @@
* @see java.nio.charset.Charset
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public class OutputStreamWriter extends Writer {
--- a/jdk/src/share/classes/java/io/PipedInputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/PipedInputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -45,7 +45,7 @@
*
* @author James Gosling
* @see java.io.PipedOutputStream
- * @since JDK1.0
+ * @since 1.0
*/
public class PipedInputStream extends InputStream {
boolean closedByWriter = false;
@@ -63,7 +63,7 @@
/**
* The default size of the pipe's circular input buffer.
- * @since JDK1.1
+ * @since 1.1
*/
// This used to be a constant before the pipe size was allowed
// to change. This field will continue to be maintained
@@ -72,7 +72,7 @@
/**
* The circular buffer into which incoming data is placed.
- * @since JDK1.1
+ * @since 1.1
*/
protected byte buffer[];
@@ -81,14 +81,14 @@
* next byte of data will be stored when received from the connected
* piped output stream. <code>in<0</code> implies the buffer is empty,
* <code>in==out</code> implies the buffer is full
- * @since JDK1.1
+ * @since 1.1
*/
protected int in = -1;
/**
* The index of the position in the circular buffer at which the next
* byte of data will be read by this piped input stream.
- * @since JDK1.1
+ * @since 1.1
*/
protected int out = 0;
@@ -195,7 +195,7 @@
* @exception IOException If the pipe is <a href="#BROKEN"> <code>broken</code></a>,
* {@link #connect(java.io.PipedOutputStream) unconnected},
* closed, or if an I/O error occurs.
- * @since JDK1.1
+ * @since 1.1
*/
protected synchronized void receive(int b) throws IOException {
checkStateForReceive();
@@ -421,7 +421,7 @@
* <a href="#BROKEN"> <code>broken</code></a>.
*
* @exception IOException if an I/O error occurs.
- * @since JDK1.0.2
+ * @since 1.0.2
*/
public synchronized int available() throws IOException {
if(in < 0)
--- a/jdk/src/share/classes/java/io/PipedOutputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/PipedOutputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -41,7 +41,7 @@
*
* @author James Gosling
* @see java.io.PipedInputStream
- * @since JDK1.0
+ * @since 1.0
*/
public
class PipedOutputStream extends OutputStream {
--- a/jdk/src/share/classes/java/io/PipedReader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/PipedReader.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* Piped character-input streams.
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public class PipedReader extends Reader {
--- a/jdk/src/share/classes/java/io/PipedWriter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/PipedWriter.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* Piped character-output streams.
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public class PipedWriter extends Writer {
--- a/jdk/src/share/classes/java/io/PrintStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/PrintStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -51,7 +51,7 @@
*
* @author Frank Yellin
* @author Mark Reinhold
- * @since JDK1.0
+ * @since 1.0
*/
public class PrintStream extends FilterOutputStream
@@ -404,7 +404,7 @@
* #checkError()} to return <tt>true</tt> until {@link
* #clearError()} is invoked.
*
- * @since JDK1.1
+ * @since 1.1
*/
protected void setError() {
trouble = true;
--- a/jdk/src/share/classes/java/io/PrintWriter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/PrintWriter.java Wed Jun 18 13:14:15 2014 -0700
@@ -50,7 +50,7 @@
*
* @author Frank Yellin
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public class PrintWriter extends Writer {
--- a/jdk/src/share/classes/java/io/PushbackInputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/PushbackInputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -46,13 +46,13 @@
*
* @author David Connelly
* @author Jonathan Payne
- * @since JDK1.0
+ * @since 1.0
*/
public
class PushbackInputStream extends FilterInputStream {
/**
* The pushback buffer.
- * @since JDK1.1
+ * @since 1.1
*/
protected byte[] buf;
@@ -62,7 +62,7 @@
* <code>buf.length</code>; when the buffer is full, <code>pos</code> is
* equal to zero.
*
- * @since JDK1.1
+ * @since 1.1
*/
protected int pos;
@@ -86,7 +86,7 @@
* @param in the input stream from which bytes will be read.
* @param size the size of the pushback buffer.
* @exception IllegalArgumentException if {@code size <= 0}
- * @since JDK1.1
+ * @since 1.1
*/
public PushbackInputStream(InputStream in, int size) {
super(in);
@@ -224,7 +224,7 @@
* buffer for the specified number of bytes,
* or this input stream has been closed by
* invoking its {@link #close()} method.
- * @since JDK1.1
+ * @since 1.1
*/
public void unread(byte[] b, int off, int len) throws IOException {
ensureOpen();
@@ -246,7 +246,7 @@
* buffer for the specified number of bytes,
* or this input stream has been closed by
* invoking its {@link #close()} method.
- * @since JDK1.1
+ * @since 1.1
*/
public void unread(byte[] b) throws IOException {
unread(b, 0, b.length);
--- a/jdk/src/share/classes/java/io/PushbackReader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/PushbackReader.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* stream.
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public class PushbackReader extends FilterReader {
--- a/jdk/src/share/classes/java/io/RandomAccessFile.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/RandomAccessFile.java Wed Jun 18 13:14:15 2014 -0700
@@ -53,7 +53,7 @@
* {@code IOException} may be thrown if the stream has been closed.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public class RandomAccessFile implements DataOutput, DataInput, Closeable {
@@ -890,7 +890,7 @@
*/
public final String readLine() throws IOException {
- StringBuffer input = new StringBuffer();
+ StringBuilder input = new StringBuilder();
int c = -1;
boolean eol = false;
--- a/jdk/src/share/classes/java/io/Reader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/Reader.java Wed Jun 18 13:14:15 2014 -0700
@@ -45,7 +45,7 @@
* @see Writer
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public abstract class Reader implements Readable, Closeable {
--- a/jdk/src/share/classes/java/io/SequenceInputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/SequenceInputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,7 +40,7 @@
* on the last of the contained input streams.
*
* @author Author van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public
class SequenceInputStream extends InputStream {
@@ -132,7 +132,7 @@
* has been closed by invoking its {@link #close()} method
* @exception IOException if an I/O error occurs.
*
- * @since JDK1.1
+ * @since 1.1
*/
public int available() throws IOException {
if (in == null) {
--- a/jdk/src/share/classes/java/io/Serializable.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/Serializable.java Wed Jun 18 13:14:15 2014 -0700
@@ -164,7 +164,7 @@
* @see java.io.ObjectOutput
* @see java.io.ObjectInput
* @see java.io.Externalizable
- * @since JDK1.1
+ * @since 1.1
*/
public interface Serializable {
}
--- a/jdk/src/share/classes/java/io/StreamCorruptedException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/StreamCorruptedException.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* violates internal consistency checks.
*
* @author unascribed
- * @since JDK1.1
+ * @since 1.1
*/
public class StreamCorruptedException extends ObjectStreamException {
--- a/jdk/src/share/classes/java/io/StreamTokenizer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/StreamTokenizer.java Wed Jun 18 13:14:15 2014 -0700
@@ -59,7 +59,7 @@
* @author James Gosling
* @see java.io.StreamTokenizer#nextToken()
* @see java.io.StreamTokenizer#TT_EOF
- * @since JDK1.0
+ * @since 1.0
*/
public class StreamTokenizer {
@@ -240,7 +240,7 @@
* Create a tokenizer that parses the given character stream.
*
* @param r a Reader object providing the input stream.
- * @since JDK1.1
+ * @since 1.1
*/
public StreamTokenizer(Reader r) {
this();
--- a/jdk/src/share/classes/java/io/StringBufferInputStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/StringBufferInputStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -37,7 +37,7 @@
* @author Arthur van Hoff
* @see java.io.ByteArrayInputStream
* @see java.io.StringReader
- * @since JDK1.0
+ * @since 1.0
* @deprecated This class does not properly convert characters into bytes. As
* of JDK 1.1, the preferred way to create a stream from a
* string is via the <code>StringReader</code> class.
--- a/jdk/src/share/classes/java/io/StringReader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/StringReader.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* A character stream whose source is a string.
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public class StringReader extends Reader {
--- a/jdk/src/share/classes/java/io/StringWriter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/StringWriter.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
* <tt>IOException</tt>.
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public class StringWriter extends Writer {
--- a/jdk/src/share/classes/java/io/SyncFailedException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/SyncFailedException.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* @author Ken Arnold
* @see java.io.FileDescriptor#sync
* @see java.io.IOException
- * @since JDK1.1
+ * @since 1.1
*/
public class SyncFailedException extends IOException {
private static final long serialVersionUID = -2353342684412443330L;
--- a/jdk/src/share/classes/java/io/UTFDataFormatException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/UTFDataFormatException.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,7 +40,7 @@
* @see java.io.DataInput
* @see java.io.DataInputStream#readUTF(java.io.DataInput)
* @see java.io.IOException
- * @since JDK1.0
+ * @since 1.0
*/
public
class UTFDataFormatException extends IOException {
--- a/jdk/src/share/classes/java/io/UnsupportedEncodingException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/UnsupportedEncodingException.java Wed Jun 18 13:14:15 2014 -0700
@@ -28,7 +28,7 @@
* The Character Encoding is not supported.
*
* @author Asmus Freytag
- * @since JDK1.1
+ * @since 1.1
*/
public class UnsupportedEncodingException
extends IOException
--- a/jdk/src/share/classes/java/io/WriteAbortedException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/WriteAbortedException.java Wed Jun 18 13:14:15 2014 -0700
@@ -41,7 +41,7 @@
* method, as well as the aforementioned "legacy field."
*
* @author unascribed
- * @since JDK1.1
+ * @since 1.1
*/
public class WriteAbortedException extends ObjectStreamException {
private static final long serialVersionUID = -3326426625597282442L;
--- a/jdk/src/share/classes/java/io/Writer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/Writer.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,7 +44,7 @@
* @see Reader
*
* @author Mark Reinhold
- * @since JDK1.1
+ * @since 1.1
*/
public abstract class Writer implements Appendable, Closeable, Flushable {
--- a/jdk/src/share/classes/java/io/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/io/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -47,6 +47,6 @@
<li><a href="../../../technotes/guides/serialization">Serialization Enhancements</a>
</ul>
-@since JDK1.0
+@since 1.0
</body>
</html>
--- a/jdk/src/share/classes/java/lang/AbstractMethodError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/AbstractMethodError.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
* compiled.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class AbstractMethodError extends IncompatibleClassChangeError {
--- a/jdk/src/share/classes/java/lang/ArithmeticException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/ArithmeticException.java Wed Jun 18 13:14:15 2014 -0700
@@ -36,7 +36,7 @@
* stack trace was not writable}.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public class ArithmeticException extends RuntimeException {
private static final long serialVersionUID = 2256477558314496007L;
--- a/jdk/src/share/classes/java/lang/ArrayIndexOutOfBoundsException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/ArrayIndexOutOfBoundsException.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* equal to the size of the array.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException {
--- a/jdk/src/share/classes/java/lang/ArrayStoreException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/ArrayStoreException.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
* </pre></blockquote>
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class ArrayStoreException extends RuntimeException {
--- a/jdk/src/share/classes/java/lang/Boolean.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Boolean.java Wed Jun 18 13:14:15 2014 -0700
@@ -38,7 +38,7 @@
* {@code boolean}.
*
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public final class Boolean implements java.io.Serializable,
Comparable<Boolean>
@@ -58,7 +58,7 @@
/**
* The Class object representing the primitive type boolean.
*
- * @since JDK1.1
+ * @since 1.1
*/
@SuppressWarnings("unchecked")
public static final Class<Boolean> TYPE = (Class<Boolean>) Class.getPrimitiveClass("boolean");
--- a/jdk/src/share/classes/java/lang/Byte.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Byte.java Wed Jun 18 13:14:15 2014 -0700
@@ -39,7 +39,7 @@
* @author Nakul Saraiya
* @author Joseph D. Darcy
* @see java.lang.Number
- * @since JDK1.1
+ * @since 1.1
*/
public final class Byte extends Number implements Comparable<Byte> {
--- a/jdk/src/share/classes/java/lang/Character.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Character.java Wed Jun 18 13:14:15 2014 -0700
@@ -5875,7 +5875,7 @@
* @see Character#isLetter(char)
* @see Character#isLetterOrDigit(char)
* @see Character#isUnicodeIdentifierStart(char)
- * @since 1.02
+ * @since 1.0.2
* @deprecated Replaced by isJavaIdentifierStart(char).
*/
@Deprecated
@@ -5911,7 +5911,7 @@
* @see Character#isLetterOrDigit(char)
* @see Character#isUnicodeIdentifierPart(char)
* @see Character#isIdentifierIgnorable(char)
- * @since 1.02
+ * @since 1.0.2
* @deprecated Replaced by isJavaIdentifierPart(char).
*/
@Deprecated
--- a/jdk/src/share/classes/java/lang/Class.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Class.java Wed Jun 18 13:14:15 2014 -0700
@@ -114,7 +114,7 @@
*
* @author unascribed
* @see java.lang.ClassLoader#defineClass(byte[], int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public final class Class<T> implements java.io.Serializable,
GenericDeclaration,
@@ -469,7 +469,7 @@
* @param obj the object to check
* @return true if {@code obj} is an instance of this class
*
- * @since JDK1.1
+ * @since 1.1
*/
public native boolean isInstance(Object obj);
@@ -496,7 +496,7 @@
* type {@code cls} can be assigned to objects of this class
* @exception NullPointerException if the specified Class parameter is
* null.
- * @since JDK1.1
+ * @since 1.1
*/
public native boolean isAssignableFrom(Class<?> cls);
@@ -516,7 +516,7 @@
*
* @return {@code true} if this object represents an array class;
* {@code false} otherwise.
- * @since JDK1.1
+ * @since 1.1
*/
public native boolean isArray();
@@ -547,7 +547,7 @@
* @see java.lang.Float#TYPE
* @see java.lang.Double#TYPE
* @see java.lang.Void#TYPE
- * @since JDK1.1
+ * @since 1.1
*/
public native boolean isPrimitive();
@@ -909,7 +909,7 @@
* @return the {@code Class} representing the component type of this
* class if this class is an array
* @see java.lang.reflect.Array
- * @since JDK1.1
+ * @since 1.1
*/
public native Class<?> getComponentType();
@@ -939,7 +939,7 @@
*
* @return the {@code int} representing the modifiers for this class
* @see java.lang.reflect.Modifier
- * @since JDK1.1
+ * @since 1.1
*/
public native int getModifiers();
@@ -950,7 +950,7 @@
* @return the signers of this class, or null if there are no signers. In
* particular, this method returns null if this object represents
* a primitive type or void.
- * @since JDK1.1
+ * @since 1.1
*/
public native Object[] getSigners();
@@ -1215,7 +1215,7 @@
* loader for the declaring class and invocation of {@link
* SecurityManager#checkPackageAccess s.checkPackageAccess()}
* denies access to the package of the declaring class
- * @since JDK1.1
+ * @since 1.1
*/
@CallerSensitive
public Class<?> getDeclaringClass() throws SecurityException {
@@ -1470,7 +1470,7 @@
* s.checkPackageAccess()} denies access to the package
* of this class.
*
- * @since JDK1.1
+ * @since 1.1
*/
@CallerSensitive
public Class<?>[] getClasses() {
@@ -1533,7 +1533,7 @@
* s.checkPackageAccess()} denies access to the package
* of this class.
*
- * @since JDK1.1
+ * @since 1.1
* @jls 8.2 Class Members
* @jls 8.3 Field Declarations
*/
@@ -1593,7 +1593,7 @@
*
* @jls 8.2 Class Members
* @jls 8.4 Method Declarations
- * @since JDK1.1
+ * @since 1.1
*/
@CallerSensitive
public Method[] getMethods() throws SecurityException {
@@ -1629,7 +1629,7 @@
* s.checkPackageAccess()} denies access to the package
* of this class.
*
- * @since JDK1.1
+ * @since 1.1
*/
@CallerSensitive
public Constructor<?>[] getConstructors() throws SecurityException {
@@ -1676,7 +1676,7 @@
* s.checkPackageAccess()} denies access to the package
* of this class.
*
- * @since JDK1.1
+ * @since 1.1
* @jls 8.2 Class Members
* @jls 8.3 Field Declarations
*/
@@ -1761,7 +1761,7 @@
*
* @jls 8.2 Class Members
* @jls 8.4 Method Declarations
- * @since JDK1.1
+ * @since 1.1
*/
@CallerSensitive
public Method getMethod(String name, Class<?>... parameterTypes)
@@ -1802,7 +1802,7 @@
* s.checkPackageAccess()} denies access to the package
* of this class.
*
- * @since JDK1.1
+ * @since 1.1
*/
@CallerSensitive
public Constructor<T> getConstructor(Class<?>... parameterTypes)
@@ -1845,7 +1845,7 @@
*
* </ul>
*
- * @since JDK1.1
+ * @since 1.1
*/
@CallerSensitive
public Class<?>[] getDeclaredClasses() throws SecurityException {
@@ -1892,7 +1892,7 @@
*
* </ul>
*
- * @since JDK1.1
+ * @since 1.1
* @jls 8.2 Class Members
* @jls 8.3 Field Declarations
*/
@@ -1953,7 +1953,7 @@
*
* @jls 8.2 Class Members
* @jls 8.4 Method Declarations
- * @since JDK1.1
+ * @since 1.1
*/
@CallerSensitive
public Method[] getDeclaredMethods() throws SecurityException {
@@ -1998,7 +1998,7 @@
*
* </ul>
*
- * @since JDK1.1
+ * @since 1.1
*/
@CallerSensitive
public Constructor<?>[] getDeclaredConstructors() throws SecurityException {
@@ -2043,7 +2043,7 @@
*
* </ul>
*
- * @since JDK1.1
+ * @since 1.1
* @jls 8.2 Class Members
* @jls 8.3 Field Declarations
*/
@@ -2105,7 +2105,7 @@
*
* @jls 8.2 Class Members
* @jls 8.4 Method Declarations
- * @since JDK1.1
+ * @since 1.1
*/
@CallerSensitive
public Method getDeclaredMethod(String name, Class<?>... parameterTypes)
@@ -2155,7 +2155,7 @@
*
* </ul>
*
- * @since JDK1.1
+ * @since 1.1
*/
@CallerSensitive
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
@@ -2197,7 +2197,7 @@
* @return A {@link java.io.InputStream} object or {@code null} if
* no resource with this name is found
* @throws NullPointerException If {@code name} is {@code null}
- * @since JDK1.1
+ * @since 1.1
*/
public InputStream getResourceAsStream(String name) {
name = resolveName(name);
@@ -2241,7 +2241,7 @@
* @param name name of the desired resource
* @return A {@link java.net.URL} object or {@code null} if no
* resource with this name is found
- * @since JDK1.1
+ * @since 1.1
*/
public java.net.URL getResource(String name) {
name = resolveName(name);
@@ -2696,12 +2696,26 @@
}
static class MethodArray {
+ // Don't add or remove methods except by add() or remove() calls.
private Method[] methods;
private int length;
+ private int defaults;
MethodArray() {
- methods = new Method[20];
+ this(20);
+ }
+
+ MethodArray(int initialSize) {
+ if (initialSize < 2)
+ throw new IllegalArgumentException("Size should be 2 or more");
+
+ methods = new Method[initialSize];
length = 0;
+ defaults = 0;
+ }
+
+ boolean hasDefaults() {
+ return defaults != 0;
}
void add(Method m) {
@@ -2709,6 +2723,9 @@
methods = Arrays.copyOf(methods, 2 * methods.length);
}
methods[length++] = m;
+
+ if (m != null && m.isDefault())
+ defaults++;
}
void addAll(Method[] ma) {
@@ -2742,7 +2759,10 @@
}
}
- void addAllNonStatic(Method[] methods) {
+ /* Add Methods declared in an interface to this MethodArray.
+ * Static methods declared in interfaces are not inherited.
+ */
+ void addInterfaceMethods(Method[] methods) {
for (Method candidate : methods) {
if (!Modifier.isStatic(candidate.getModifiers())) {
add(candidate);
@@ -2758,19 +2778,35 @@
return methods[i];
}
- void removeByNameAndSignature(Method toRemove) {
+ Method getFirst() {
+ for (Method m : methods)
+ if (m != null)
+ return m;
+ return null;
+ }
+
+ void removeByNameAndDescriptor(Method toRemove) {
for (int i = 0; i < length; i++) {
Method m = methods[i];
- if (m != null &&
- m.getReturnType() == toRemove.getReturnType() &&
- m.getName() == toRemove.getName() &&
- arrayContentsEq(m.getParameterTypes(),
- toRemove.getParameterTypes())) {
- methods[i] = null;
+ if (m != null && matchesNameAndDescriptor(m, toRemove)) {
+ remove(i);
}
}
}
+ private void remove(int i) {
+ if (methods[i] != null && methods[i].isDefault())
+ defaults--;
+ methods[i] = null;
+ }
+
+ private boolean matchesNameAndDescriptor(Method m1, Method m2) {
+ return m1.getReturnType() == m2.getReturnType() &&
+ m1.getName() == m2.getName() && // name is guaranteed to be interned
+ arrayContentsEq(m1.getParameterTypes(),
+ m2.getParameterTypes());
+ }
+
void compactAndTrim() {
int newPos = 0;
// Get rid of null slots
@@ -2788,9 +2824,48 @@
}
}
+ /* Removes all Methods from this MethodArray that have a more specific
+ * default Method in this MethodArray.
+ *
+ * Users of MethodArray are responsible for pruning Methods that have
+ * a more specific <em>concrete</em> Method.
+ */
+ void removeLessSpecifics() {
+ if (!hasDefaults())
+ return;
+
+ for (int i = 0; i < length; i++) {
+ Method m = get(i);
+ if (m == null || !m.isDefault())
+ continue;
+
+ for (int j = 0; j < length; j++) {
+ if (i == j)
+ continue;
+
+ Method candidate = get(j);
+ if (candidate == null)
+ continue;
+
+ if (!matchesNameAndDescriptor(m, candidate))
+ continue;
+
+ if (hasMoreSpecificClass(m, candidate))
+ remove(j);
+ }
+ }
+ }
+
Method[] getArray() {
return methods;
}
+
+ // Returns true if m1 is more specific than m2
+ static boolean hasMoreSpecificClass(Method m1, Method m2) {
+ Class<?> m1Class = m1.getDeclaringClass();
+ Class<?> m2Class = m2.getDeclaringClass();
+ return m1Class != m2Class && m2Class.isAssignableFrom(m1Class);
+ }
}
@@ -2819,7 +2894,7 @@
// the end.
MethodArray inheritedMethods = new MethodArray();
for (Class<?> i : getInterfaces()) {
- inheritedMethods.addAllNonStatic(i.privateGetPublicMethods());
+ inheritedMethods.addInterfaceMethods(i.privateGetPublicMethods());
}
if (!isInterface()) {
Class<?> c = getSuperclass();
@@ -2830,8 +2905,10 @@
// interface methods
for (int i = 0; i < supers.length(); i++) {
Method m = supers.get(i);
- if (m != null && !Modifier.isAbstract(m.getModifiers())) {
- inheritedMethods.removeByNameAndSignature(m);
+ if (m != null &&
+ !Modifier.isAbstract(m.getModifiers()) &&
+ !m.isDefault()) {
+ inheritedMethods.removeByNameAndDescriptor(m);
}
}
// Insert superclass's inherited methods before
@@ -2844,9 +2921,10 @@
// Filter out all local methods from inherited ones
for (int i = 0; i < methods.length(); i++) {
Method m = methods.get(i);
- inheritedMethods.removeByNameAndSignature(m);
+ inheritedMethods.removeByNameAndDescriptor(m);
}
methods.addAllIfNotPresent(inheritedMethods);
+ methods.removeLessSpecifics();
methods.compactAndTrim();
res = methods.getArray();
if (rd != null) {
@@ -2919,8 +2997,21 @@
return (res == null ? res : getReflectionFactory().copyMethod(res));
}
-
private Method getMethod0(String name, Class<?>[] parameterTypes, boolean includeStaticMethods) {
+ MethodArray interfaceCandidates = new MethodArray(2);
+ Method res = privateGetMethodRecursive(name, parameterTypes, includeStaticMethods, interfaceCandidates);
+ if (res != null)
+ return res;
+
+ // Not found on class or superclass directly
+ interfaceCandidates.removeLessSpecifics();
+ return interfaceCandidates.getFirst(); // may be null
+ }
+
+ private Method privateGetMethodRecursive(String name,
+ Class<?>[] parameterTypes,
+ boolean includeStaticMethods,
+ MethodArray allInterfaceCandidates) {
// Note: the intent is that the search algorithm this routine
// uses be equivalent to the ordering imposed by
// privateGetPublicMethods(). It fetches only the declared
@@ -2928,6 +3019,14 @@
// number of Method objects which have to be created for the
// common case where the method being requested is declared in
// the class which is being queried.
+ //
+ // Due to default methods, unless a method is found on a superclass,
+ // methods declared in any superinterface needs to be considered.
+ // Collect all candidates declared in superinterfaces in {@code
+ // allInterfaceCandidates} and select the most specific if no match on
+ // a superclass is found.
+
+ // Must _not_ return root methods
Method res;
// Search declared public methods
if ((res = searchMethods(privateGetDeclaredMethods(true),
@@ -2949,7 +3048,7 @@
Class<?>[] interfaces = getInterfaces();
for (Class<?> c : interfaces)
if ((res = c.getMethod0(name, parameterTypes, false)) != null)
- return res;
+ allInterfaceCandidates.add(res);
// Not found
return null;
}
--- a/jdk/src/share/classes/java/lang/ClassCastException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/ClassCastException.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
* </pre></blockquote>
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class ClassCastException extends RuntimeException {
--- a/jdk/src/share/classes/java/lang/ClassCircularityError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/ClassCircularityError.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* superclass hierarchy of a class being loaded.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public class ClassCircularityError extends LinkageError {
private static final long serialVersionUID = 1054362542914539689L;
--- a/jdk/src/share/classes/java/lang/ClassFormatError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/ClassFormatError.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* be interpreted as a class file.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class ClassFormatError extends LinkageError {
--- a/jdk/src/share/classes/java/lang/ClassNotFoundException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/ClassNotFoundException.java Wed Jun 18 13:14:15 2014 -0700
@@ -48,7 +48,7 @@
* @see java.lang.Class#forName(java.lang.String)
* @see java.lang.ClassLoader#findSystemClass(java.lang.String)
* @see java.lang.ClassLoader#loadClass(java.lang.String, boolean)
- * @since JDK1.0
+ * @since 1.0
*/
public class ClassNotFoundException extends ReflectiveOperationException {
/**
--- a/jdk/src/share/classes/java/lang/CloneNotSupportedException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/CloneNotSupportedException.java Wed Jun 18 13:14:15 2014 -0700
@@ -38,7 +38,7 @@
* @author unascribed
* @see java.lang.Cloneable
* @see java.lang.Object#clone()
- * @since JDK1.0
+ * @since 1.0
*/
public
--- a/jdk/src/share/classes/java/lang/Cloneable.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Cloneable.java Wed Jun 18 13:14:15 2014 -0700
@@ -48,7 +48,7 @@
* @author unascribed
* @see java.lang.CloneNotSupportedException
* @see java.lang.Object#clone()
- * @since JDK1.0
+ * @since 1.0
*/
public interface Cloneable {
}
--- a/jdk/src/share/classes/java/lang/Compiler.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Compiler.java Wed Jun 18 13:14:15 2014 -0700
@@ -42,7 +42,7 @@
* <p> If no compiler is available, these methods do nothing.
*
* @author Frank Yellin
- * @since JDK1.0
+ * @since 1.0
*/
public final class Compiler {
private Compiler() {} // don't make instances
--- a/jdk/src/share/classes/java/lang/Double.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Double.java Wed Jun 18 13:14:15 2014 -0700
@@ -43,7 +43,7 @@
* @author Lee Boynton
* @author Arthur van Hoff
* @author Joseph D. Darcy
- * @since JDK1.0
+ * @since 1.0
*/
public final class Double extends Number implements Comparable<Double> {
/**
@@ -132,7 +132,7 @@
* The {@code Class} instance representing the primitive type
* {@code double}.
*
- * @since JDK1.1
+ * @since 1.1
*/
@SuppressWarnings("unchecked")
public static final Class<Double> TYPE = (Class<Double>) Class.getPrimitiveClass("double");
@@ -650,7 +650,7 @@
* @return the {@code double} value represented by this object
* converted to type {@code byte}
* @jls 5.1.3 Narrowing Primitive Conversions
- * @since JDK1.1
+ * @since 1.1
*/
public byte byteValue() {
return (byte)value;
@@ -663,7 +663,7 @@
* @return the {@code double} value represented by this object
* converted to type {@code short}
* @jls 5.1.3 Narrowing Primitive Conversions
- * @since JDK1.1
+ * @since 1.1
*/
public short shortValue() {
return (short)value;
@@ -700,7 +700,7 @@
* @return the {@code double} value represented by this object
* converted to type {@code float}
* @jls 5.1.3 Narrowing Primitive Conversions
- * @since JDK1.0
+ * @since 1.0
*/
public float floatValue() {
return (float)value;
--- a/jdk/src/share/classes/java/lang/Error.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Error.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,7 +44,7 @@
* @author Frank Yellin
* @see java.lang.ThreadDeath
* @jls 11.2 Compile-Time Checking of Exceptions
- * @since JDK1.0
+ * @since 1.0
*/
public class Error extends Throwable {
static final long serialVersionUID = 4980196508277280342L;
--- a/jdk/src/share/classes/java/lang/Exception.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Exception.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,7 +40,7 @@
* @author Frank Yellin
* @see java.lang.Error
* @jls 11.2 Compile-Time Checking of Exceptions
- * @since JDK1.0
+ * @since 1.0
*/
public class Exception extends Throwable {
static final long serialVersionUID = -3387516993124229948L;
--- a/jdk/src/share/classes/java/lang/ExceptionInInitializerError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/ExceptionInInitializerError.java Wed Jun 18 13:14:15 2014 -0700
@@ -39,7 +39,7 @@
* as the aforementioned "legacy method."
*
* @author Frank Yellin
- * @since JDK1.1
+ * @since 1.1
*/
public class ExceptionInInitializerError extends LinkageError {
/**
--- a/jdk/src/share/classes/java/lang/Float.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Float.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,7 +44,7 @@
* @author Lee Boynton
* @author Arthur van Hoff
* @author Joseph D. Darcy
- * @since JDK1.0
+ * @since 1.0
*/
public final class Float extends Number implements Comparable<Float> {
/**
@@ -131,7 +131,7 @@
* The {@code Class} instance representing the primitive type
* {@code float}.
*
- * @since JDK1.1
+ * @since 1.1
*/
@SuppressWarnings("unchecked")
public static final Class<Float> TYPE = (Class<Float>) Class.getPrimitiveClass("float");
@@ -587,7 +587,7 @@
* @return the {@code float} value represented by this object
* converted to type {@code short}
* @jls 5.1.3 Narrowing Primitive Conversions
- * @since JDK1.1
+ * @since 1.1
*/
public short shortValue() {
return (short)value;
--- a/jdk/src/share/classes/java/lang/IllegalAccessError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/IllegalAccessError.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
* incompatibly changed.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public class IllegalAccessError extends IncompatibleClassChangeError {
private static final long serialVersionUID = -8988904074992417891L;
--- a/jdk/src/share/classes/java/lang/IllegalAccessException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/IllegalAccessException.java Wed Jun 18 13:14:15 2014 -0700
@@ -54,7 +54,7 @@
* @see java.lang.reflect.Field#getDouble(Object)
* @see java.lang.reflect.Method#invoke(Object, Object[])
* @see java.lang.reflect.Constructor#newInstance(Object[])
- * @since JDK1.0
+ * @since 1.0
*/
public class IllegalAccessException extends ReflectiveOperationException {
private static final long serialVersionUID = 6616958222490762034L;
--- a/jdk/src/share/classes/java/lang/IllegalArgumentException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/IllegalArgumentException.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* inappropriate argument.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class IllegalArgumentException extends RuntimeException {
--- a/jdk/src/share/classes/java/lang/IllegalMonitorStateException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/IllegalMonitorStateException.java Wed Jun 18 13:14:15 2014 -0700
@@ -36,7 +36,7 @@
* @see java.lang.Object#wait()
* @see java.lang.Object#wait(long)
* @see java.lang.Object#wait(long, int)
- * @since JDK1.0
+ * @since 1.0
*/
public
class IllegalMonitorStateException extends RuntimeException {
--- a/jdk/src/share/classes/java/lang/IllegalStateException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/IllegalStateException.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* operation.
*
* @author Jonni Kanerva
- * @since JDK1.1
+ * @since 1.1
*/
public
class IllegalStateException extends RuntimeException {
--- a/jdk/src/share/classes/java/lang/IllegalThreadStateException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/IllegalThreadStateException.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
* @author unascribed
* @see java.lang.Thread#resume()
* @see java.lang.Thread#suspend()
- * @since JDK1.0
+ * @since 1.0
*/
public class IllegalThreadStateException extends IllegalArgumentException {
private static final long serialVersionUID = -7626246362397460174L;
--- a/jdk/src/share/classes/java/lang/IncompatibleClassChangeError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/IncompatibleClassChangeError.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* executing method depends, has since changed.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class IncompatibleClassChangeError extends LinkageError {
--- a/jdk/src/share/classes/java/lang/IndexOutOfBoundsException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/IndexOutOfBoundsException.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* Applications can subclass this class to indicate similar exceptions.
*
* @author Frank Yellin
- * @since JDK1.0
+ * @since 1.0
*/
public
class IndexOutOfBoundsException extends RuntimeException {
--- a/jdk/src/share/classes/java/lang/InstantiationError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/InstantiationError.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
* incompatibly changed.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
--- a/jdk/src/share/classes/java/lang/InstantiationException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/InstantiationException.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,7 +40,7 @@
*
* @author unascribed
* @see java.lang.Class#newInstance()
- * @since JDK1.0
+ * @since 1.0
*/
public
class InstantiationException extends ReflectiveOperationException {
--- a/jdk/src/share/classes/java/lang/Integer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Integer.java Wed Jun 18 13:14:15 2014 -0700
@@ -47,7 +47,7 @@
* @author Arthur van Hoff
* @author Josh Bloch
* @author Joseph D. Darcy
- * @since JDK1.0
+ * @since 1.0
*/
public final class Integer extends Number implements Comparable<Integer> {
/**
@@ -66,7 +66,7 @@
* The {@code Class} instance representing the primitive type
* {@code int}.
*
- * @since JDK1.1
+ * @since 1.1
*/
@SuppressWarnings("unchecked")
public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
@@ -227,7 +227,7 @@
* represented by the argument in hexadecimal (base 16).
* @see #parseUnsignedInt(String, int)
* @see #toUnsignedString(int, int)
- * @since JDK1.0.2
+ * @since 1.0.2
*/
public static String toHexString(int i) {
return toUnsignedString0(i, 4);
@@ -265,7 +265,7 @@
* represented by the argument in octal (base 8).
* @see #parseUnsignedInt(String, int)
* @see #toUnsignedString(int, int)
- * @since JDK1.0.2
+ * @since 1.0.2
*/
public static String toOctalString(int i) {
return toUnsignedString0(i, 3);
@@ -297,7 +297,7 @@
* represented by the argument in binary (base 2).
* @see #parseUnsignedInt(String, int)
* @see #toUnsignedString(int, int)
- * @since JDK1.0.2
+ * @since 1.0.2
*/
public static String toBinaryString(int i) {
return toUnsignedString0(i, 1);
--- a/jdk/src/share/classes/java/lang/InternalError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/InternalError.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* the Java Virtual Machine.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public class InternalError extends VirtualMachineError {
private static final long serialVersionUID = -9062593416125562365L;
--- a/jdk/src/share/classes/java/lang/InterruptedException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/InterruptedException.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,7 +44,7 @@
* @see java.lang.Thread#sleep(long)
* @see java.lang.Thread#interrupt()
* @see java.lang.Thread#interrupted()
- * @since JDK1.0
+ * @since 1.0
*/
public
class InterruptedException extends Exception {
--- a/jdk/src/share/classes/java/lang/LinkageError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/LinkageError.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
*
*
* @author Frank Yellin
- * @since JDK1.0
+ * @since 1.0
*/
public
class LinkageError extends Error {
--- a/jdk/src/share/classes/java/lang/Long.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Long.java Wed Jun 18 13:14:15 2014 -0700
@@ -49,7 +49,7 @@
* @author Arthur van Hoff
* @author Josh Bloch
* @author Joseph D. Darcy
- * @since JDK1.0
+ * @since 1.0
*/
public final class Long extends Number implements Comparable<Long> {
/**
@@ -68,7 +68,7 @@
* The {@code Class} instance representing the primitive type
* {@code long}.
*
- * @since JDK1.1
+ * @since 1.1
*/
@SuppressWarnings("unchecked")
public static final Class<Long> TYPE = (Class<Long>) Class.getPrimitiveClass("long");
@@ -266,7 +266,7 @@
* (base 16).
* @see #parseUnsignedLong(String, int)
* @see #toUnsignedString(long, int)
- * @since JDK 1.0.2
+ * @since 1.0.2
*/
public static String toHexString(long i) {
return toUnsignedString0(i, 4);
@@ -305,7 +305,7 @@
* value represented by the argument in octal (base 8).
* @see #parseUnsignedLong(String, int)
* @see #toUnsignedString(long, int)
- * @since JDK 1.0.2
+ * @since 1.0.2
*/
public static String toOctalString(long i) {
return toUnsignedString0(i, 3);
@@ -338,7 +338,7 @@
* value represented by the argument in binary (base 2).
* @see #parseUnsignedLong(String, int)
* @see #toUnsignedString(long, int)
- * @since JDK 1.0.2
+ * @since 1.0.2
*/
public static String toBinaryString(long i) {
return toUnsignedString0(i, 1);
--- a/jdk/src/share/classes/java/lang/Math.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Math.java Wed Jun 18 13:14:15 2014 -0700
@@ -99,7 +99,7 @@
*
* @author unascribed
* @author Joseph D. Darcy
- * @since JDK1.0
+ * @since 1.0
*/
public final class Math {
--- a/jdk/src/share/classes/java/lang/NegativeArraySizeException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/NegativeArraySizeException.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
* Thrown if an application tries to create an array with negative size.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class NegativeArraySizeException extends RuntimeException {
--- a/jdk/src/share/classes/java/lang/NoClassDefFoundError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/NoClassDefFoundError.java Wed Jun 18 13:14:15 2014 -0700
@@ -36,7 +36,7 @@
* found.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class NoClassDefFoundError extends LinkageError {
--- a/jdk/src/share/classes/java/lang/NoSuchFieldError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/NoSuchFieldError.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
* incompatibly changed.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class NoSuchFieldError extends IncompatibleClassChangeError {
--- a/jdk/src/share/classes/java/lang/NoSuchFieldException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/NoSuchFieldException.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
* Signals that the class doesn't have a field of a specified name.
*
* @author unascribed
- * @since JDK1.1
+ * @since 1.1
*/
public class NoSuchFieldException extends ReflectiveOperationException {
private static final long serialVersionUID = -6143714805279938260L;
--- a/jdk/src/share/classes/java/lang/NoSuchMethodError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/NoSuchMethodError.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
* incompatibly changed.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class NoSuchMethodError extends IncompatibleClassChangeError {
--- a/jdk/src/share/classes/java/lang/NoSuchMethodException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/NoSuchMethodException.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
* Thrown when a particular method cannot be found.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class NoSuchMethodException extends ReflectiveOperationException {
--- a/jdk/src/share/classes/java/lang/NullPointerException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/NullPointerException.java Wed Jun 18 13:14:15 2014 -0700
@@ -47,7 +47,7 @@
* stack trace was not writable}.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class NullPointerException extends RuntimeException {
--- a/jdk/src/share/classes/java/lang/Number.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Number.java Wed Jun 18 13:14:15 2014 -0700
@@ -50,7 +50,7 @@
* @author Arthur van Hoff
* @jls 5.1.2 Widening Primitive Conversions
* @jls 5.1.3 Narrowing Primitive Conversions
- * @since JDK1.0
+ * @since 1.0
*/
public abstract class Number implements java.io.Serializable {
/**
@@ -98,7 +98,7 @@
*
* @return the numeric value represented by this object after conversion
* to type {@code byte}.
- * @since JDK1.1
+ * @since 1.1
*/
public byte byteValue() {
return (byte)intValue();
@@ -113,7 +113,7 @@
*
* @return the numeric value represented by this object after conversion
* to type {@code short}.
- * @since JDK1.1
+ * @since 1.1
*/
public short shortValue() {
return (short)intValue();
--- a/jdk/src/share/classes/java/lang/NumberFormatException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/NumberFormatException.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
*
* @author unascribed
* @see java.lang.Integer#parseInt(String)
- * @since JDK1.0
+ * @since 1.0
*/
public
class NumberFormatException extends IllegalArgumentException {
--- a/jdk/src/share/classes/java/lang/Object.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Object.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
*
* @author unascribed
* @see java.lang.Class
- * @since JDK1.0
+ * @since 1.0
*/
public class Object {
--- a/jdk/src/share/classes/java/lang/OutOfMemoryError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/OutOfMemoryError.java Wed Jun 18 13:14:15 2014 -0700
@@ -36,7 +36,7 @@
* writable}.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public class OutOfMemoryError extends VirtualMachineError {
private static final long serialVersionUID = 8228564086184010517L;
--- a/jdk/src/share/classes/java/lang/Process.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Process.java Wed Jun 18 13:14:15 2014 -0700
@@ -72,7 +72,7 @@
* <p>As of 1.5, {@link ProcessBuilder#start()} is the preferred way
* to create a {@code Process}.
*
- * @since JDK1.0
+ * @since 1.0
*/
public abstract class Process {
/**
--- a/jdk/src/share/classes/java/lang/Runnable.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Runnable.java Wed Jun 18 13:14:15 2014 -0700
@@ -50,7 +50,7 @@
* @author Arthur van Hoff
* @see java.lang.Thread
* @see java.util.concurrent.Callable
- * @since JDK1.0
+ * @since 1.0
*/
@FunctionalInterface
public interface Runnable {
--- a/jdk/src/share/classes/java/lang/Runtime.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Runtime.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,7 +40,7 @@
*
* @author unascribed
* @see java.lang.Runtime#getRuntime()
- * @since JDK1.0
+ * @since 1.0
*/
public class Runtime {
@@ -299,7 +299,7 @@
* @see java.lang.Runtime#exit(int)
* @see java.lang.Runtime#gc()
* @see java.lang.SecurityManager#checkExit(int)
- * @since JDK1.1
+ * @since 1.1
*/
@Deprecated
public static void runFinalizersOnExit(boolean value) {
--- a/jdk/src/share/classes/java/lang/RuntimeException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/RuntimeException.java Wed Jun 18 13:14:15 2014 -0700
@@ -38,7 +38,7 @@
*
* @author Frank Yellin
* @jls 11.2 Compile-Time Checking of Exceptions
- * @since JDK1.0
+ * @since 1.0
*/
public class RuntimeException extends Exception {
static final long serialVersionUID = -7034897190745766939L;
--- a/jdk/src/share/classes/java/lang/SecurityException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/SecurityException.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
*
* @author unascribed
* @see java.lang.SecurityManager
- * @since JDK1.0
+ * @since 1.0
*/
public class SecurityException extends RuntimeException {
--- a/jdk/src/share/classes/java/lang/SecurityManager.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/SecurityManager.java Wed Jun 18 13:14:15 2014 -0700
@@ -216,7 +216,7 @@
* @see java.security.SecurityPermission SecurityPermission
* @see java.security.ProtectionDomain
*
- * @since JDK1.0
+ * @since 1.0
*/
public
class SecurityManager {
@@ -1179,7 +1179,7 @@
* use (join/leave/send/receive) IP multicast.
* @exception NullPointerException if the address argument is
* <code>null</code>.
- * @since JDK1.1
+ * @since 1.1
* @see #checkPermission(java.security.Permission) checkPermission
*/
public void checkMulticast(InetAddress maddr) {
@@ -1213,7 +1213,7 @@
* use (join/leave/send/receive) IP multicast.
* @exception NullPointerException if the address argument is
* <code>null</code>.
- * @since JDK1.1
+ * @since 1.1
* @deprecated Use #checkPermission(java.security.Permission) instead
* @see #checkPermission(java.security.Permission) checkPermission
*/
@@ -1322,7 +1322,7 @@
*
* @exception SecurityException if the calling thread does not have
* permission to initiate a print job request.
- * @since JDK1.1
+ * @since 1.1
* @see #checkPermission(java.security.Permission) checkPermission
*/
public void checkPrintJobAccess() {
@@ -1333,7 +1333,7 @@
* Throws {@code SecurityException} if the calling thread does
* not have {@code AllPermission}.
*
- * @since JDK1.1
+ * @since 1.1
* @exception SecurityException if the calling thread does not have
* {@code AllPermission}
* @deprecated This method was originally used to check if the calling
@@ -1351,7 +1351,7 @@
* Throws {@code SecurityException} if the calling thread does
* not have {@code AllPermission}.
*
- * @since JDK1.1
+ * @since 1.1
* @exception SecurityException if the calling thread does not have
* {@code AllPermission}
* @deprecated This method was originally used to check if the calling
@@ -1610,7 +1610,7 @@
* to check the permission {@code java.security.AllPermission}.
*
* @see java.lang.reflect.Member
- * @since JDK1.1
+ * @since 1.1
* @see #checkPermission(java.security.Permission) checkPermission
*/
@Deprecated
@@ -1666,7 +1666,7 @@
* @exception NullPointerException if <code>target</code> is null.
* @exception IllegalArgumentException if <code>target</code> is empty.
*
- * @since JDK1.1
+ * @since 1.1
* @see #checkPermission(java.security.Permission) checkPermission
*/
public void checkSecurityAccess(String target) {
@@ -1683,7 +1683,7 @@
* manager to return the appropriate thread group.
*
* @return ThreadGroup that new threads are instantiated into
- * @since JDK1.1
+ * @since 1.1
* @see java.lang.ThreadGroup
*/
public ThreadGroup getThreadGroup() {
--- a/jdk/src/share/classes/java/lang/Short.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Short.java Wed Jun 18 13:14:15 2014 -0700
@@ -38,7 +38,7 @@
* @author Nakul Saraiya
* @author Joseph D. Darcy
* @see java.lang.Number
- * @since JDK1.1
+ * @since 1.1
*/
public final class Short extends Number implements Comparable<Short> {
--- a/jdk/src/share/classes/java/lang/StackOverflowError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/StackOverflowError.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* recurses too deeply.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class StackOverflowError extends VirtualMachineError {
--- a/jdk/src/share/classes/java/lang/String.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/String.java Wed Jun 18 13:14:15 2014 -0700
@@ -105,7 +105,7 @@
* @see java.lang.StringBuffer
* @see java.lang.StringBuilder
* @see java.nio.charset.Charset
- * @since JDK1.0
+ * @since 1.0
*/
public final class String
@@ -404,7 +404,7 @@
* If the {@code offset} and {@code length} arguments index
* characters outside the bounds of the {@code bytes} array
*
- * @since JDK1.1
+ * @since 1.1
*/
public String(byte bytes[], int offset, int length, String charsetName)
throws UnsupportedEncodingException {
@@ -472,7 +472,7 @@
* @throws UnsupportedEncodingException
* If the named charset is not supported
*
- * @since JDK1.1
+ * @since 1.1
*/
public String(byte bytes[], String charsetName)
throws UnsupportedEncodingException {
@@ -527,7 +527,7 @@
* If the {@code offset} and the {@code length} arguments index
* characters outside the bounds of the {@code bytes} array
*
- * @since JDK1.1
+ * @since 1.1
*/
public String(byte bytes[], int offset, int length) {
checkBounds(bytes, offset, length);
@@ -548,7 +548,7 @@
* @param bytes
* The bytes to be decoded into characters
*
- * @since JDK1.1
+ * @since 1.1
*/
public String(byte bytes[]) {
this(bytes, 0, bytes.length);
@@ -898,7 +898,7 @@
* @throws UnsupportedEncodingException
* If the named charset is not supported
*
- * @since JDK1.1
+ * @since 1.1
*/
public byte[] getBytes(String charsetName)
throws UnsupportedEncodingException {
@@ -940,7 +940,7 @@
*
* @return The resultant byte array
*
- * @since JDK1.1
+ * @since 1.1
*/
public byte[] getBytes() {
return StringCoding.encode(value, 0, value.length);
@@ -1415,7 +1415,7 @@
* argument is an empty string or is equal to this
* {@code String} object as determined by the
* {@link #equals(Object)} method.
- * @since 1. 0
+ * @since 1.0
*/
public boolean startsWith(String prefix) {
return startsWith(prefix, 0);
--- a/jdk/src/share/classes/java/lang/StringBuffer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/StringBuffer.java Wed Jun 18 13:14:15 2014 -0700
@@ -92,7 +92,7 @@
* @author Arthur van Hoff
* @see java.lang.StringBuilder
* @see java.lang.String
- * @since JDK1.0
+ * @since 1.0
*/
public final class StringBuffer
extends AbstractStringBuilder
@@ -656,7 +656,7 @@
}
/**
- * @since JDK1.0.2
+ * @since 1.0.2
*/
@Override
public synchronized StringBuffer reverse() {
--- a/jdk/src/share/classes/java/lang/StringIndexOutOfBoundsException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/StringIndexOutOfBoundsException.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
*
* @author unascribed
* @see java.lang.String#charAt(int)
- * @since JDK1.0
+ * @since 1.0
*/
public
class StringIndexOutOfBoundsException extends IndexOutOfBoundsException {
@@ -42,8 +42,6 @@
/**
* Constructs a {@code StringIndexOutOfBoundsException} with no
* detail message.
- *
- * @since JDK1.0.
*/
public StringIndexOutOfBoundsException() {
super();
--- a/jdk/src/share/classes/java/lang/System.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/System.java Wed Jun 18 13:14:15 2014 -0700
@@ -54,7 +54,7 @@
* method for quickly copying a portion of an array.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public final class System {
@@ -144,7 +144,7 @@
* @see SecurityManager#checkPermission
* @see java.lang.RuntimePermission
*
- * @since JDK1.1
+ * @since 1.1
*/
public static void setIn(InputStream in) {
checkIO();
@@ -168,7 +168,7 @@
* @see SecurityManager#checkPermission
* @see java.lang.RuntimePermission
*
- * @since JDK1.1
+ * @since 1.1
*/
public static void setOut(PrintStream out) {
checkIO();
@@ -192,7 +192,7 @@
* @see SecurityManager#checkPermission
* @see java.lang.RuntimePermission
*
- * @since JDK1.1
+ * @since 1.1
*/
public static void setErr(PrintStream err) {
checkIO();
@@ -502,7 +502,7 @@
*
* @param x object for which the hashCode is to be calculated
* @return the hashCode
- * @since JDK1.1
+ * @since 1.1
*/
public static native int identityHashCode(Object x);
@@ -1032,7 +1032,7 @@
* @see java.lang.Runtime#exit(int)
* @see java.lang.Runtime#gc()
* @see java.lang.SecurityManager#checkExit(int)
- * @since JDK1.1
+ * @since 1.1
*/
@Deprecated
public static void runFinalizersOnExit(boolean value) {
--- a/jdk/src/share/classes/java/lang/Thread.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Thread.java Wed Jun 18 13:14:15 2014 -0700
@@ -135,7 +135,7 @@
* @see Runtime#exit(int)
* @see #run()
* @see #stop()
- * @since JDK1.0
+ * @since 1.0
*/
public
class Thread implements Runnable {
--- a/jdk/src/share/classes/java/lang/ThreadDeath.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/ThreadDeath.java Wed Jun 18 13:14:15 2014 -0700
@@ -43,7 +43,7 @@
* "normal occurrence", because many applications catch all
* occurrences of {@code Exception} and then discard the exception.
*
- * @since JDK1.0
+ * @since 1.0
*/
public class ThreadDeath extends Error {
--- a/jdk/src/share/classes/java/lang/ThreadGroup.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/ThreadGroup.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,7 +40,7 @@
* parent thread group or any other thread groups.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
/* The locking strategy for this code is to try to lock only one level of the
* tree wherever possible, but otherwise to lock from the bottom up.
@@ -90,7 +90,7 @@
* @exception SecurityException if the current thread cannot create a
* thread in the specified thread group.
* @see java.lang.ThreadGroup#checkAccess()
- * @since JDK1.0
+ * @since 1.0
*/
public ThreadGroup(String name) {
this(Thread.currentThread().getThreadGroup(), name);
@@ -111,7 +111,7 @@
* thread in the specified thread group.
* @see java.lang.SecurityException
* @see java.lang.ThreadGroup#checkAccess()
- * @since JDK1.0
+ * @since 1.0
*/
public ThreadGroup(ThreadGroup parent, String name) {
this(checkParentAccess(parent), parent, name);
@@ -140,7 +140,7 @@
* Returns the name of this thread group.
*
* @return the name of this thread group.
- * @since JDK1.0
+ * @since 1.0
*/
public final String getName() {
return name;
@@ -160,7 +160,7 @@
* @see java.lang.ThreadGroup#checkAccess()
* @see java.lang.SecurityException
* @see java.lang.RuntimePermission
- * @since JDK1.0
+ * @since 1.0
*/
public final ThreadGroup getParent() {
if (parent != null)
@@ -176,7 +176,7 @@
* @return the maximum priority that a thread in this thread group
* can have.
* @see #setMaxPriority
- * @since JDK1.0
+ * @since 1.0
*/
public final int getMaxPriority() {
return maxPriority;
@@ -189,7 +189,7 @@
*
* @return <code>true</code> if this thread group is a daemon thread group;
* <code>false</code> otherwise.
- * @since JDK1.0
+ * @since 1.0
*/
public final boolean isDaemon() {
return daemon;
@@ -199,7 +199,7 @@
* Tests if this thread group has been destroyed.
*
* @return true if this object is destroyed
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized boolean isDestroyed() {
return destroyed;
@@ -221,7 +221,7 @@
* this thread group.
* @see java.lang.SecurityException
* @see java.lang.ThreadGroup#checkAccess()
- * @since JDK1.0
+ * @since 1.0
*/
public final void setDaemon(boolean daemon) {
checkAccess();
@@ -254,7 +254,7 @@
* @see #getMaxPriority
* @see java.lang.SecurityException
* @see java.lang.ThreadGroup#checkAccess()
- * @since JDK1.0
+ * @since 1.0
*/
public final void setMaxPriority(int pri) {
int ngroupsSnapshot;
@@ -285,7 +285,7 @@
* @return <code>true</code> if this thread group is the thread group
* argument or one of its ancestor thread groups;
* <code>false</code> otherwise.
- * @since JDK1.0
+ * @since 1.0
*/
public final boolean parentOf(ThreadGroup g) {
for (; g != null ; g = g.parent) {
@@ -307,7 +307,7 @@
* @exception SecurityException if the current thread is not allowed to
* access this thread group.
* @see java.lang.SecurityManager#checkAccess(java.lang.ThreadGroup)
- * @since JDK1.0
+ * @since 1.0
*/
public final void checkAccess() {
SecurityManager security = System.getSecurityManager();
@@ -331,7 +331,7 @@
* group and in any other thread group that has this thread
* group as an ancestor
*
- * @since JDK1.0
+ * @since 1.0
*/
public int activeCount() {
int result;
@@ -377,7 +377,7 @@
* if {@linkplain #checkAccess checkAccess} determines that
* the current thread cannot access this thread group
*
- * @since JDK1.0
+ * @since 1.0
*/
public int enumerate(Thread list[]) {
checkAccess();
@@ -415,7 +415,7 @@
* if {@linkplain #checkAccess checkAccess} determines that
* the current thread cannot access this thread group
*
- * @since JDK1.0
+ * @since 1.0
*/
public int enumerate(Thread list[], boolean recurse) {
checkAccess();
@@ -468,7 +468,7 @@
* @return the number of active thread groups with this thread group as
* an ancestor
*
- * @since JDK1.0
+ * @since 1.0
*/
public int activeGroupCount() {
int ngroupsSnapshot;
@@ -511,7 +511,7 @@
* if {@linkplain #checkAccess checkAccess} determines that
* the current thread cannot access this thread group
*
- * @since JDK1.0
+ * @since 1.0
*/
public int enumerate(ThreadGroup list[]) {
checkAccess();
@@ -549,7 +549,7 @@
* if {@linkplain #checkAccess checkAccess} determines that
* the current thread cannot access this thread group
*
- * @since JDK1.0
+ * @since 1.0
*/
public int enumerate(ThreadGroup list[], boolean recurse) {
checkAccess();
@@ -603,7 +603,7 @@
* @see java.lang.SecurityException
* @see java.lang.Thread#stop()
* @see java.lang.ThreadGroup#checkAccess()
- * @since JDK1.0
+ * @since 1.0
* @deprecated This method is inherently unsafe. See
* {@link Thread#stop} for details.
*/
@@ -665,7 +665,7 @@
* @see java.lang.Thread#suspend()
* @see java.lang.SecurityException
* @see java.lang.ThreadGroup#checkAccess()
- * @since JDK1.0
+ * @since 1.0
* @deprecated This method is inherently deadlock-prone. See
* {@link Thread#suspend} for details.
*/
@@ -726,7 +726,7 @@
* @see java.lang.SecurityException
* @see java.lang.Thread#resume()
* @see java.lang.ThreadGroup#checkAccess()
- * @since JDK1.0
+ * @since 1.0
* @deprecated This method is used solely in conjunction with
* <tt>Thread.suspend</tt> and <tt>ThreadGroup.suspend</tt>,
* both of which have been deprecated, as they are inherently
@@ -767,7 +767,7 @@
* @exception SecurityException if the current thread cannot modify this
* thread group.
* @see java.lang.ThreadGroup#checkAccess()
- * @since JDK1.0
+ * @since 1.0
*/
public final void destroy() {
int ngroupsSnapshot;
@@ -980,7 +980,7 @@
* Prints information about this thread group to the standard
* output. This method is useful only for debugging.
*
- * @since JDK1.0
+ * @since 1.0
*/
public void list() {
list(System.out, 0);
@@ -1045,7 +1045,7 @@
*
* @param t the thread that is about to exit.
* @param e the uncaught exception.
- * @since JDK1.0
+ * @since 1.0
*/
public void uncaughtException(Thread t, Throwable e) {
if (parent != null) {
@@ -1068,7 +1068,7 @@
*
* @param b boolean to allow or disallow suspension
* @return true on success
- * @since JDK1.1
+ * @since 1.1
* @deprecated The definition of this call depends on {@link #suspend},
* which is deprecated. Further, the behavior of this call
* was never specified.
@@ -1086,7 +1086,7 @@
* Returns a string representation of this Thread group.
*
* @return a string representation of this thread group.
- * @since JDK1.0
+ * @since 1.0
*/
public String toString() {
return getClass().getName() + "[name=" + getName() + ",maxpri=" + maxPriority + "]";
--- a/jdk/src/share/classes/java/lang/Throwable.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Throwable.java Wed Jun 18 13:14:15 2014 -0700
@@ -109,7 +109,7 @@
* @author Josh Bloch (Added exception chaining and programmatic access to
* stack trace in 1.4.)
* @jls 11.2 Compile-Time Checking of Exceptions
- * @since JDK1.0
+ * @since 1.0
*/
public class Throwable implements Serializable {
/** use serialVersionUID from JDK 1.0.2 for interoperability */
@@ -385,7 +385,7 @@
* {@code getMessage()}.
*
* @return The localized description of this throwable.
- * @since JDK1.1
+ * @since 1.1
*/
public String getLocalizedMessage() {
return getMessage();
@@ -714,7 +714,7 @@
* print writer.
*
* @param s {@code PrintWriter} to use for output
- * @since JDK1.1
+ * @since 1.1
*/
public void printStackTrace(PrintWriter s) {
printStackTrace(new WrappedPrintWriter(s));
--- a/jdk/src/share/classes/java/lang/UnknownError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/UnknownError.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* Java Virtual Machine.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class UnknownError extends VirtualMachineError {
--- a/jdk/src/share/classes/java/lang/UnsatisfiedLinkError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/UnsatisfiedLinkError.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @author unascribed
* @see java.lang.Runtime
- * @since JDK1.0
+ * @since 1.0
*/
public
class UnsatisfiedLinkError extends LinkageError {
--- a/jdk/src/share/classes/java/lang/VerifyError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/VerifyError.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* or security problem.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public
class VerifyError extends LinkageError {
--- a/jdk/src/share/classes/java/lang/VirtualMachineError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/VirtualMachineError.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
*
* @author Frank Yellin
- * @since JDK1.0
+ * @since 1.0
*/
abstract public class VirtualMachineError extends Error {
private static final long serialVersionUID = 4161983926571568670L;
--- a/jdk/src/share/classes/java/lang/Void.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/Void.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* void.
*
* @author unascribed
- * @since JDK1.1
+ * @since 1.1
*/
public final
class Void {
--- a/jdk/src/share/classes/java/lang/instrument/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/instrument/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -274,7 +274,7 @@
<li><a href="{@docRoot}/../technotes/tools/index.html">JDK Tools and Utilities</a>
</ul>
-@since JDK1.5
+@since 1.5
@revised 1.6
</body>
--- a/jdk/src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,6 +40,7 @@
import static java.lang.invoke.MethodHandleNatives.Constants.*;
import static java.lang.invoke.LambdaForm.BasicType.*;
import sun.invoke.util.VerifyType;
+import sun.reflect.misc.ReflectUtil;
/**
* Code generation backend for LambdaForm.
@@ -594,6 +595,8 @@
return false; // inner class of some sort
if (cls.getClassLoader() != MethodHandle.class.getClassLoader())
return false; // not on BCP
+ if (ReflectUtil.isVMAnonymousClass(cls)) // FIXME: switch to supported API once it is added
+ return false;
MethodType mtype = member.getMethodOrFieldType();
if (!isStaticallyNameable(mtype.returnType()))
return false;
@@ -612,6 +615,8 @@
cls = cls.getComponentType();
if (cls.isPrimitive())
return true; // int[].class, for example
+ if (ReflectUtil.isVMAnonymousClass(cls)) // FIXME: switch to supported API once it is added
+ return false;
// could use VerifyAccess.isClassAccessible but the following is a safe approximation
if (cls.getClassLoader() != Object.class.getClassLoader())
return false;
--- a/jdk/src/share/classes/java/lang/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -66,6 +66,6 @@
* that must be supported by every implementation of the Java
* platform.
*
- * @since JDK1.0
+ * @since 1.0
*/
package java.lang;
--- a/jdk/src/share/classes/java/lang/reflect/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/lang/reflect/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,6 +44,6 @@
* members of a target object (based on its runtime class) or the
* members declared by a given class.
*
- * @since JDK1.1
+ * @since 1.1
*/
package java.lang.reflect;
--- a/jdk/src/share/classes/java/math/BigInteger.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/math/BigInteger.java Wed Jun 18 13:14:15 2014 -0700
@@ -117,7 +117,7 @@
* @author Michael McCloskey
* @author Alan Eliasen
* @author Timothy Buktu
- * @since JDK1.1
+ * @since 1.1
*/
public class BigInteger extends Number implements Comparable<BigInteger> {
--- a/jdk/src/share/classes/java/math/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/math/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,6 +40,6 @@
* allowing the user to choose from a comprehensive set of eight
* rounding modes.
*
- * @since JDK1.1
+ * @since 1.1
*/
package java.math;
--- a/jdk/src/share/classes/java/net/BindException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/BindException.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* socket to a local address and port. Typically, the port is
* in use, or the requested local address could not be assigned.
*
- * @since JDK1.1
+ * @since 1.1
*/
public class BindException extends SocketException {
--- a/jdk/src/share/classes/java/net/ConnectException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/ConnectException.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* was refused remotely (e.g., no process is listening on the
* remote address/port).
*
- * @since JDK1.1
+ * @since 1.1
*/
public class ConnectException extends SocketException {
private static final long serialVersionUID = 3831404271622369215L;
--- a/jdk/src/share/classes/java/net/ContentHandler.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/ContentHandler.java Wed Jun 18 13:14:15 2014 -0700
@@ -79,7 +79,7 @@
* @see java.net.URLConnection
* @see java.net.URLConnection#getContent()
* @see java.net.URLConnection#setContentHandlerFactory(java.net.ContentHandlerFactory)
- * @since JDK1.0
+ * @since 1.0
*/
abstract public class ContentHandler {
/**
--- a/jdk/src/share/classes/java/net/ContentHandlerFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/ContentHandlerFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -36,7 +36,7 @@
* @author James Gosling
* @see java.net.ContentHandler
* @see java.net.URLStreamHandler
- * @since JDK1.0
+ * @since 1.0
*/
public interface ContentHandlerFactory {
/**
--- a/jdk/src/share/classes/java/net/DatagramPacket.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/DatagramPacket.java Wed Jun 18 13:14:15 2014 -0700
@@ -37,7 +37,7 @@
*
* @author Pavani Diwanji
* @author Benjamin Renaud
- * @since JDK1.0
+ * @since 1.0
*/
public final
class DatagramPacket {
@@ -276,7 +276,7 @@
* Sets the IP address of the machine to which this datagram
* is being sent.
* @param iaddr the {@code InetAddress}
- * @since JDK1.1
+ * @since 1.1
* @see #getAddress()
*/
public synchronized void setAddress(InetAddress iaddr) {
@@ -287,7 +287,7 @@
* Sets the port number on the remote host to which this datagram
* is being sent.
* @param iport the port number
- * @since JDK1.1
+ * @since 1.1
* @see #getPort()
*/
public synchronized void setPort(int iport) {
@@ -342,7 +342,7 @@
* @see #getLength
* @see #getData
*
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void setData(byte[] buf) {
if (buf == null) {
@@ -370,7 +370,7 @@
* @see #getLength
* @see #setData
*
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized void setLength(int length) {
if ((length + offset) > buf.length || length < 0 ||
--- a/jdk/src/share/classes/java/net/DatagramSocket.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/DatagramSocket.java Wed Jun 18 13:14:15 2014 -0700
@@ -63,7 +63,7 @@
* @author Pavani Diwanji
* @see java.net.DatagramPacket
* @see java.nio.channels.DatagramChannel
- * @since JDK1.0
+ * @since 1.0
*/
public
class DatagramSocket implements java.io.Closeable {
@@ -275,7 +275,7 @@
* {@code checkListen} method doesn't allow the operation.
*
* @see SecurityManager#checkListen
- * @since JDK1.1
+ * @since 1.1
*/
public DatagramSocket(int port, InetAddress laddr) throws SocketException {
this(new InetSocketAddress(laddr, port));
@@ -852,7 +852,7 @@
*
* @param timeout the specified timeout in milliseconds.
* @throws SocketException if there is an error in the underlying protocol, such as an UDP error.
- * @since JDK1.1
+ * @since 1.1
* @see #getSoTimeout()
*/
public synchronized void setSoTimeout(int timeout) throws SocketException {
@@ -867,7 +867,7 @@
*
* @return the setting for SO_TIMEOUT
* @throws SocketException if there is an error in the underlying protocol, such as an UDP error.
- * @since JDK1.1
+ * @since 1.1
* @see #setSoTimeout(int)
*/
public synchronized int getSoTimeout() throws SocketException {
--- a/jdk/src/share/classes/java/net/DatagramSocketImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/DatagramSocketImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
/**
* Abstract datagram and multicast socket implementation base class.
* @author Pavani Diwanji
- * @since JDK1.1
+ * @since 1.1
*/
public abstract class DatagramSocketImpl implements SocketOptions {
--- a/jdk/src/share/classes/java/net/FileNameMap.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/FileNameMap.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* between a file name and a MIME type string.
*
* @author Steven B. Byrne
- * @since JDK1.1
+ * @since 1.1
*/
public interface FileNameMap {
--- a/jdk/src/share/classes/java/net/HttpURLConnection.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/HttpURLConnection.java Wed Jun 18 13:14:15 2014 -0700
@@ -64,7 +64,7 @@
* redirected host/URL.
*
* @see java.net.HttpURLConnection#disconnect()
- * @since JDK1.1
+ * @since 1.1
*/
abstract public class HttpURLConnection extends URLConnection {
/* instance variables */
--- a/jdk/src/share/classes/java/net/IDN.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/IDN.java Wed Jun 18 13:14:15 2014 -0700
@@ -111,7 +111,7 @@
public static String toASCII(String input, int flag)
{
int p = 0, q = 0;
- StringBuffer out = new StringBuffer();
+ StringBuilder out = new StringBuilder();
if (isRootLabel(input)) {
return ".";
@@ -172,7 +172,7 @@
*/
public static String toUnicode(String input, int flag) {
int p = 0, q = 0;
- StringBuffer out = new StringBuffer();
+ StringBuilder out = new StringBuilder();
if (isRootLabel(input)) {
return ".";
--- a/jdk/src/share/classes/java/net/Inet4Address.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/Inet4Address.java Wed Jun 18 13:14:15 2014 -0700
@@ -155,7 +155,7 @@
* address i.e first four bits of the address are 1110.
* @return a {@code boolean} indicating if the InetAddress is
* an IP multicast address
- * @since JDK1.1
+ * @since 1.1
*/
public boolean isMulticastAddress() {
return ((holder().getAddress() & 0xf0000000) == 0xe0000000);
@@ -320,7 +320,7 @@
* Returns the IP address string in textual presentation form.
*
* @return the raw IP address in a string format.
- * @since JDK1.0.2
+ * @since 1.0.2
*/
public String getHostAddress() {
return numericToTextFormat(getAddress());
--- a/jdk/src/share/classes/java/net/Inet6Address.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/Inet6Address.java Wed Jun 18 13:14:15 2014 -0700
@@ -683,7 +683,7 @@
* @return a {@code boolean} indicating if the InetAddress is an IP
* multicast address
*
- * @since JDK1.1
+ * @since 1.1
*/
@Override
public boolean isMulticastAddress() {
--- a/jdk/src/share/classes/java/net/InetAddress.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/InetAddress.java Wed Jun 18 13:14:15 2014 -0700
@@ -183,7 +183,7 @@
* @see java.net.InetAddress#getAllByName(java.lang.String)
* @see java.net.InetAddress#getByName(java.lang.String)
* @see java.net.InetAddress#getLocalHost()
- * @since JDK1.0
+ * @since 1.0
*/
public
class InetAddress implements java.io.Serializable {
@@ -305,7 +305,7 @@
* IP multicast address.
* @return a {@code boolean} indicating if the InetAddress is
* an IP multicast address
- * @since JDK1.1
+ * @since 1.1
*/
public boolean isMulticastAddress() {
return false;
@@ -654,7 +654,7 @@
* Returns the IP address string in textual presentation.
*
* @return the raw IP address in a string format.
- * @since JDK1.0.2
+ * @since 1.0.2
*/
public String getHostAddress() {
return null;
--- a/jdk/src/share/classes/java/net/MalformedURLException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/MalformedURLException.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
* string could not be parsed.
*
* @author Arthur van Hoff
- * @since JDK1.0
+ * @since 1.0
*/
public class MalformedURLException extends IOException {
private static final long serialVersionUID = -182787522200415866L;
--- a/jdk/src/share/classes/java/net/MulticastSocket.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/MulticastSocket.java Wed Jun 18 13:14:15 2014 -0700
@@ -77,7 +77,7 @@
* Currently applets are not allowed to use multicast sockets.
*
* @author Pavani Diwanji
- * @since JDK1.1
+ * @since 1.1
*/
public
class MulticastSocket extends DatagramSocket {
--- a/jdk/src/share/classes/java/net/NoRouteToHostException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/NoRouteToHostException.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* host cannot be reached because of an intervening firewall, or
* if an intermediate router is down.
*
- * @since JDK1.1
+ * @since 1.1
*/
public class NoRouteToHostException extends SocketException {
private static final long serialVersionUID = -1897550894873493790L;
--- a/jdk/src/share/classes/java/net/ProtocolException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/ProtocolException.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* protocol, such as a TCP error.
*
* @author Chris Warth
- * @since JDK1.0
+ * @since 1.0
*/
public
class ProtocolException extends IOException {
--- a/jdk/src/share/classes/java/net/ServerSocket.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/ServerSocket.java Wed Jun 18 13:14:15 2014 -0700
@@ -48,7 +48,7 @@
* @see java.net.SocketImpl
* @see java.net.ServerSocket#setSocketFactory(java.net.SocketImplFactory)
* @see java.nio.channels.ServerSocketChannel
- * @since JDK1.0
+ * @since 1.0
*/
public
class ServerSocket implements java.io.Closeable {
@@ -225,7 +225,7 @@
* @see SocketOptions
* @see SocketImpl
* @see SecurityManager#checkListen
- * @since JDK1.1
+ * @since 1.1
*/
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException {
setImpl();
@@ -527,7 +527,7 @@
* and the channel is in non-blocking mode
* @throws IOException if an I/O error occurs when waiting
* for a connection.
- * @since JDK1.1
+ * @since 1.1
* @revised 1.4
* @spec JSR-51
*/
@@ -644,7 +644,7 @@
* @param timeout the specified timeout, in milliseconds
* @exception SocketException if there is an error in
* the underlying protocol, such as a TCP error.
- * @since JDK1.1
+ * @since 1.1
* @see #getSoTimeout()
*/
public synchronized void setSoTimeout(int timeout) throws SocketException {
@@ -658,7 +658,7 @@
* 0 returns implies that the option is disabled (i.e., timeout of infinity).
* @return the {@link SocketOptions#SO_TIMEOUT SO_TIMEOUT} value
* @exception IOException if an I/O error occurs
- * @since JDK1.1
+ * @since 1.1
* @see #setSoTimeout(int)
*/
public synchronized int getSoTimeout() throws IOException {
--- a/jdk/src/share/classes/java/net/Socket.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/Socket.java Wed Jun 18 13:14:15 2014 -0700
@@ -50,7 +50,7 @@
* @see java.net.Socket#setSocketImplFactory(java.net.SocketImplFactory)
* @see java.net.SocketImpl
* @see java.nio.channels.SocketChannel
- * @since JDK1.0
+ * @since 1.0
*/
public
class Socket implements java.io.Closeable {
@@ -79,7 +79,7 @@
* Creates an unconnected socket, with the
* system-default type of SocketImpl.
*
- * @since JDK1.1
+ * @since 1.1
* @revised 1.4
*/
public Socket() {
@@ -161,7 +161,7 @@
*
* @exception SocketException if there is an error in the underlying protocol,
* such as a TCP error.
- * @since JDK1.1
+ * @since 1.1
*/
protected Socket(SocketImpl impl) throws SocketException {
this.impl = impl;
@@ -281,7 +281,7 @@
* parameter is outside the specified range of valid port values,
* which is between 0 and 65535, inclusive.
* @see SecurityManager#checkConnect
- * @since JDK1.1
+ * @since 1.1
*/
public Socket(String host, int port, InetAddress localAddr,
int localPort) throws IOException {
@@ -323,7 +323,7 @@
* which is between 0 and 65535, inclusive.
* @exception NullPointerException if {@code address} is null.
* @see SecurityManager#checkConnect
- * @since JDK1.1
+ * @since 1.1
*/
public Socket(InetAddress address, int port, InetAddress localAddr,
int localPort) throws IOException {
@@ -708,7 +708,7 @@
* @return the local address to which the socket is bound,
* the loopback address if denied by the security manager, or
* the wildcard address if the socket is closed or not bound yet.
- * @since JDK1.1
+ * @since 1.1
*
* @see SecurityManager#checkConnect
*/
@@ -972,7 +972,7 @@
* @exception SocketException if there is an error
* in the underlying protocol, such as a TCP error.
*
- * @since JDK1.1
+ * @since 1.1
*
* @see #getTcpNoDelay()
*/
@@ -989,7 +989,7 @@
* {@link SocketOptions#TCP_NODELAY TCP_NODELAY} is enabled.
* @exception SocketException if there is an error
* in the underlying protocol, such as a TCP error.
- * @since JDK1.1
+ * @since 1.1
* @see #setTcpNoDelay(boolean)
*/
public boolean getTcpNoDelay() throws SocketException {
@@ -1010,7 +1010,7 @@
* @exception SocketException if there is an error
* in the underlying protocol, such as a TCP error.
* @exception IllegalArgumentException if the linger value is negative.
- * @since JDK1.1
+ * @since 1.1
* @see #getSoLinger()
*/
public void setSoLinger(boolean on, int linger) throws SocketException {
@@ -1038,7 +1038,7 @@
* @return the setting for {@link SocketOptions#SO_LINGER SO_LINGER}.
* @exception SocketException if there is an error
* in the underlying protocol, such as a TCP error.
- * @since JDK1.1
+ * @since 1.1
* @see #setSoLinger(boolean, int)
*/
public int getSoLinger() throws SocketException {
@@ -1131,7 +1131,7 @@
* @param timeout the specified timeout, in milliseconds.
* @exception SocketException if there is an error
* in the underlying protocol, such as a TCP error.
- * @since JDK 1.1
+ * @since 1.1
* @see #getSoTimeout()
*/
public synchronized void setSoTimeout(int timeout) throws SocketException {
@@ -1151,7 +1151,7 @@
* @exception SocketException if there is an error
* in the underlying protocol, such as a TCP error.
*
- * @since JDK1.1
+ * @since 1.1
* @see #setSoTimeout(int)
*/
public synchronized int getSoTimeout() throws SocketException {
--- a/jdk/src/share/classes/java/net/SocketException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/SocketException.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* Thrown to indicate that there is an error creating or accessing a Socket.
*
* @author Jonathan Payne
- * @since JDK1.0
+ * @since 1.0
*/
public
class SocketException extends IOException {
--- a/jdk/src/share/classes/java/net/SocketImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/SocketImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -42,7 +42,7 @@
* described, without attempting to go through a firewall or proxy.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public abstract class SocketImpl implements SocketOptions {
/**
--- a/jdk/src/share/classes/java/net/SocketImplFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/SocketImplFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
* @author Arthur van Hoff
* @see java.net.Socket
* @see java.net.ServerSocket
- * @since JDK1.0
+ * @since 1.0
*/
public
interface SocketImplFactory {
--- a/jdk/src/share/classes/java/net/SocketPermission.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/SocketPermission.java Wed Jun 18 13:14:15 2014 -0700
@@ -733,7 +733,7 @@
InetAddress auth;
try {
- StringBuffer sb = new StringBuffer(39);
+ StringBuilder sb = new StringBuilder(39);
for (int i = 15; i >= 0; i--) {
sb.append(Integer.toHexString(((addr[i]) & 0x0f)));
--- a/jdk/src/share/classes/java/net/URI.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/URI.java Wed Jun 18 13:14:15 2014 -0700
@@ -1957,7 +1957,7 @@
private void defineString() {
if (string != null) return;
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if (scheme != null) {
sb.append(scheme);
sb.append(':');
@@ -2015,7 +2015,7 @@
if (i >= 0)
path = base.substring(0, i + 1);
} else {
- StringBuffer sb = new StringBuffer(base.length() + cn);
+ StringBuilder sb = new StringBuilder(base.length() + cn);
// 5.2 (6a)
if (i >= 0)
sb.append(base.substring(0, i + 1));
@@ -2778,7 +2778,7 @@
if (s.indexOf('%') < 0)
return s;
- StringBuffer sb = new StringBuffer(n);
+ StringBuilder sb = new StringBuilder(n);
ByteBuffer bb = ByteBuffer.allocate(n);
CharBuffer cb = CharBuffer.allocate(n);
CharsetDecoder dec = ThreadLocalCoders.decoderFor("UTF-8")
--- a/jdk/src/share/classes/java/net/URISyntaxException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/URISyntaxException.java Wed Jun 18 13:14:15 2014 -0700
@@ -121,7 +121,7 @@
* @return A string describing the parse error
*/
public String getMessage() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append(getReason());
if (index > -1) {
sb.append(" at index ");
--- a/jdk/src/share/classes/java/net/URL.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/URL.java Wed Jun 18 13:14:15 2014 -0700
@@ -131,7 +131,7 @@
* as the encoding scheme defined in RFC2396.
*
* @author James Gosling
- * @since JDK1.0
+ * @since 1.0
*/
public final class URL implements java.io.Serializable {
--- a/jdk/src/share/classes/java/net/URLConnection.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/URLConnection.java Wed Jun 18 13:14:15 2014 -0700
@@ -155,7 +155,7 @@
* @see java.net.URLConnection#setIfModifiedSince(long)
* @see java.net.URLConnection#setRequestProperty(java.lang.String, java.lang.String)
* @see java.net.URLConnection#setUseCaches(boolean)
- * @since JDK1.0
+ * @since 1.0
*/
public abstract class URLConnection {
@@ -283,7 +283,7 @@
private MessageHeader requests;
/**
- * @since JDK1.1
+ * @since 1.1
*/
private static FileNameMap fileNameMap;
@@ -495,7 +495,7 @@
* @return the content length of the resource that this connection's URL
* references, or {@code -1} if the content length is
* not known.
- * @since 7.0
+ * @since 1.7
*/
public long getContentLengthLong() {
return getHeaderFieldLong("content-length", -1);
@@ -623,7 +623,7 @@
* @return the value of the named field, parsed as a long. The
* {@code Default} value is returned if the field is
* missing or malformed.
- * @since 7.0
+ * @since 1.7
*/
public long getHeaderFieldLong(String name, long Default) {
String value = getHeaderField(name);
--- a/jdk/src/share/classes/java/net/URLDecoder.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/URLDecoder.java Wed Jun 18 13:14:15 2014 -0700
@@ -134,7 +134,7 @@
boolean needToChange = false;
int numChars = s.length();
- StringBuffer sb = new StringBuffer(numChars > 500 ? numChars / 2 : numChars);
+ StringBuilder sb = new StringBuilder(numChars > 500 ? numChars / 2 : numChars);
int i = 0;
if (enc.length() == 0) {
--- a/jdk/src/share/classes/java/net/URLEncoder.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/URLEncoder.java Wed Jun 18 13:14:15 2014 -0700
@@ -77,7 +77,7 @@
* character @ is encoded as one byte 40 (hex).
*
* @author Herb Jellinek
- * @since JDK1.0
+ * @since 1.0
*/
public class URLEncoder {
static BitSet dontNeedEncoding;
@@ -201,7 +201,7 @@
throws UnsupportedEncodingException {
boolean needToChange = false;
- StringBuffer out = new StringBuffer(s.length());
+ StringBuilder out = new StringBuilder(s.length());
Charset charset;
CharArrayWriter charArrayWriter = new CharArrayWriter();
--- a/jdk/src/share/classes/java/net/URLStreamHandler.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/URLStreamHandler.java Wed Jun 18 13:14:15 2014 -0700
@@ -47,7 +47,7 @@
*
* @author James Gosling
* @see java.net.URL#URL(java.lang.String, java.lang.String, int, java.lang.String)
- * @since JDK1.0
+ * @since 1.0
*/
public abstract class URLStreamHandler {
/**
@@ -486,7 +486,7 @@
if (u.getRef() != null)
len += 1 + u.getRef().length();
- StringBuffer result = new StringBuffer(len);
+ StringBuilder result = new StringBuilder(len);
result.append(u.getProtocol());
result.append(":");
if (u.getAuthority() != null && u.getAuthority().length() > 0) {
--- a/jdk/src/share/classes/java/net/URLStreamHandlerFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/URLStreamHandlerFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
* @author Arthur van Hoff
* @see java.net.URL
* @see java.net.URLStreamHandler
- * @since JDK1.0
+ * @since 1.0
*/
public interface URLStreamHandlerFactory {
/**
--- a/jdk/src/share/classes/java/net/UnknownHostException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/UnknownHostException.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* Thrown to indicate that the IP address of a host could not be determined.
*
* @author Jonathan Payne
- * @since JDK1.0
+ * @since 1.0
*/
public
class UnknownHostException extends IOException {
--- a/jdk/src/share/classes/java/net/UnknownServiceException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/UnknownServiceException.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
* read-only URL connection.
*
* @author unascribed
- * @since JDK1.0
+ * @since 1.0
*/
public class UnknownServiceException extends IOException {
private static final long serialVersionUID = -4169033248853639508L;
--- a/jdk/src/share/classes/java/net/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/net/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -156,6 +156,6 @@
* Networking System Properties</a></li>
* </ul>
*
- * @since JDK1.0
+ * @since 1.0
*/
package java.net;
--- a/jdk/src/share/classes/java/nio/file/InvalidPathException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/nio/file/InvalidPathException.java Wed Jun 18 13:14:15 2014 -0700
@@ -117,7 +117,7 @@
* @return a string describing the error
*/
public String getMessage() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append(getReason());
if (index > -1) {
sb.append(" at index ");
--- a/jdk/src/share/classes/java/rmi/AccessException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/AccessException.java Wed Jun 18 13:14:15 2014 -0700
@@ -36,7 +36,7 @@
*
* @author Ann Wollrath
* @author Roger Riggs
- * @since JDK1.1
+ * @since 1.1
* @see java.rmi.Naming
* @see java.rmi.activation.ActivationSystem
*/
@@ -50,7 +50,7 @@
* detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
*/
public AccessException(String s) {
super(s);
@@ -62,7 +62,7 @@
*
* @param s the detail message
* @param ex the nested exception
- * @since JDK1.1
+ * @since 1.1
*/
public AccessException(String s, Exception ex) {
super(s, ex);
--- a/jdk/src/share/classes/java/rmi/AlreadyBoundException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/AlreadyBoundException.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
* is made to bind an object in the registry to a name that already
* has an associated binding.
*
- * @since JDK1.1
+ * @since 1.1
* @author Ann Wollrath
* @author Roger Riggs
* @see java.rmi.Naming#bind(String, java.rmi.Remote)
@@ -43,7 +43,7 @@
/**
* Constructs an <code>AlreadyBoundException</code> with no
* specified detail message.
- * @since JDK1.1
+ * @since 1.1
*/
public AlreadyBoundException() {
super();
@@ -54,7 +54,7 @@
* detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
*/
public AlreadyBoundException(String s) {
super(s);
--- a/jdk/src/share/classes/java/rmi/ConnectException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/ConnectException.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* to the remote host for a remote method call.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
*/
public class ConnectException extends RemoteException {
@@ -42,7 +42,7 @@
* detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
*/
public ConnectException(String s) {
super(s);
@@ -54,7 +54,7 @@
*
* @param s the detail message
* @param ex the nested exception
- * @since JDK1.1
+ * @since 1.1
*/
public ConnectException(String s, Exception ex) {
super(s, ex);
--- a/jdk/src/share/classes/java/rmi/ConnectIOException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/ConnectIOException.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* to the remote host for a remote method call.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
*/
public class ConnectIOException extends RemoteException {
@@ -43,7 +43,7 @@
* detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
*/
public ConnectIOException(String s) {
super(s);
@@ -56,7 +56,7 @@
*
* @param s the detail message
* @param ex the nested exception
- * @since JDK1.1
+ * @since 1.1
*/
public ConnectIOException(String s, Exception ex) {
super(s, ex);
--- a/jdk/src/share/classes/java/rmi/MarshalException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/MarshalException.java Wed Jun 18 13:14:15 2014 -0700
@@ -39,7 +39,7 @@
* "at most once" call semantics.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
*/
public class MarshalException extends RemoteException {
@@ -51,7 +51,7 @@
* detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
*/
public MarshalException(String s) {
super(s);
@@ -63,7 +63,7 @@
*
* @param s the detail message
* @param ex the nested exception
- * @since JDK1.1
+ * @since 1.1
*/
public MarshalException(String s, Exception ex) {
super(s, ex);
--- a/jdk/src/share/classes/java/rmi/Naming.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/Naming.java Wed Jun 18 13:14:15 2014 -0700
@@ -64,7 +64,7 @@
*
* @author Ann Wollrath
* @author Roger Riggs
- * @since JDK1.1
+ * @since 1.1
* @see java.rmi.registry.Registry
* @see java.rmi.registry.LocateRegistry
* @see java.rmi.registry.LocateRegistry#createRegistry(int)
@@ -86,7 +86,7 @@
* @exception AccessException if this operation is not permitted
* @exception MalformedURLException if the name is not an appropriately
* formatted URL
- * @since JDK1.1
+ * @since 1.1
*/
public static Remote lookup(String name)
throws NotBoundException,
@@ -112,7 +112,7 @@
* @exception RemoteException if registry could not be contacted
* @exception AccessException if this operation is not permitted (if
* originating from a non-local host, for example)
- * @since JDK1.1
+ * @since 1.1
*/
public static void bind(String name, Remote obj)
throws AlreadyBoundException,
@@ -139,7 +139,7 @@
* @exception RemoteException if registry could not be contacted
* @exception AccessException if this operation is not permitted (if
* originating from a non-local host, for example)
- * @since JDK1.1
+ * @since 1.1
*/
public static void unbind(String name)
throws RemoteException,
@@ -163,7 +163,7 @@
* @exception RemoteException if registry could not be contacted
* @exception AccessException if this operation is not permitted (if
* originating from a non-local host, for example)
- * @since JDK1.1
+ * @since 1.1
*/
public static void rebind(String name, Remote obj)
throws RemoteException, java.net.MalformedURLException
@@ -190,7 +190,7 @@
* @exception MalformedURLException if the name is not an appropriately
* formatted URL
* @exception RemoteException if registry could not be contacted.
- * @since JDK1.1
+ * @since 1.1
*/
public static String[] list(String name)
throws RemoteException, java.net.MalformedURLException
--- a/jdk/src/share/classes/java/rmi/NoSuchObjectException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/NoSuchObjectException.java Wed Jun 18 13:14:15 2014 -0700
@@ -39,7 +39,7 @@
* <code>java.rmi.activation.Activatable</code> and
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
* @see java.rmi.server.RemoteObject#toStub(Remote)
* @see java.rmi.server.UnicastRemoteObject#unexportObject(Remote,boolean)
* @see java.rmi.activation.Activatable#unexportObject(Remote,boolean)
@@ -54,7 +54,7 @@
* detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
*/
public NoSuchObjectException(String s) {
super(s);
--- a/jdk/src/share/classes/java/rmi/NotBoundException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/NotBoundException.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
* is made to lookup or unbind in the registry a name that has
* no associated binding.
*
- * @since JDK1.1
+ * @since 1.1
* @author Ann Wollrath
* @author Roger Riggs
* @see java.rmi.Naming#lookup(String)
@@ -45,7 +45,7 @@
/**
* Constructs a <code>NotBoundException</code> with no
* specified detail message.
- * @since JDK1.1
+ * @since 1.1
*/
public NotBoundException() {
super();
@@ -56,7 +56,7 @@
* detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
*/
public NotBoundException(String s) {
super(s);
--- a/jdk/src/share/classes/java/rmi/RMISecurityException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/RMISecurityException.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* <code>java.rmi.RMISecurityManager</code>'s methods.
*
* @author Roger Riggs
- * @since JDK1.1
+ * @since 1.1
* @deprecated Use {@link java.lang.SecurityException} instead.
* Application code should never directly reference this class, and
* <code>RMISecurityManager</code> no longer throws this subclass of
@@ -45,7 +45,7 @@
/**
* Construct an <code>RMISecurityException</code> with a detail message.
* @param name the detail message
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -57,7 +57,7 @@
* Construct an <code>RMISecurityException</code> with a detail message.
* @param name the detail message
* @param arg ignored
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
--- a/jdk/src/share/classes/java/rmi/RMISecurityManager.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/RMISecurityManager.java Wed Jun 18 13:14:15 2014 -0700
@@ -52,7 +52,7 @@
*
* @author Roger Riggs
* @author Peter Jones
- * @since JDK1.1
+ * @since 1.1
* @deprecated Use {@link SecurityManager} instead.
*/
@Deprecated
@@ -60,7 +60,7 @@
/**
* Constructs a new {@code RMISecurityManager}.
- * @since JDK1.1
+ * @since 1.1
*/
public RMISecurityManager() {
}
--- a/jdk/src/share/classes/java/rmi/Remote.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/Remote.java Wed Jun 18 13:14:15 2014 -0700
@@ -42,7 +42,7 @@
* <p>For complete details on RMI, see the <a
href=../../../platform/rmi/spec/rmiTOC.html>RMI Specification</a> which describes the RMI API and system.
*
- * @since JDK1.1
+ * @since 1.1
* @author Ann Wollrath
* @see java.rmi.server.UnicastRemoteObject
* @see java.rmi.activation.Activatable
--- a/jdk/src/share/classes/java/rmi/RemoteException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/RemoteException.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,7 +44,7 @@
* IllegalStateException}.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
*/
public class RemoteException extends java.io.IOException {
--- a/jdk/src/share/classes/java/rmi/ServerError.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/ServerError.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
* <code>Error</code> that occurred as its cause.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
*/
public class ServerError extends RemoteException {
@@ -48,7 +48,7 @@
*
* @param s the detail message
* @param err the nested error
- * @since JDK1.1
+ * @since 1.1
*/
public ServerError(String s, Error err) {
super(s, err);
--- a/jdk/src/share/classes/java/rmi/ServerException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/ServerException.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
* <code>RemoteException</code> that occurred as its cause.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
*/
public class ServerException extends RemoteException {
@@ -47,7 +47,7 @@
* detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
*/
public ServerException(String s) {
super(s);
@@ -59,7 +59,7 @@
*
* @param s the detail message
* @param ex the nested exception
- * @since JDK1.1
+ * @since 1.1
*/
public ServerException(String s, Exception ex) {
super(s, ex);
--- a/jdk/src/share/classes/java/rmi/ServerRuntimeException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/ServerRuntimeException.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,7 +40,7 @@
* executing on the Java 2 platform v1.2 or later versions.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -56,7 +56,7 @@
* @param s the detail message
* @param ex the nested exception
* @deprecated no replacement
- * @since JDK1.1
+ * @since 1.1
*/
@Deprecated
public ServerRuntimeException(String s, Exception ex) {
--- a/jdk/src/share/classes/java/rmi/StubNotFoundException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/StubNotFoundException.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
* <code>java.rmi.activation.Activatable.register</code> method.
*
* @author Roger Riggs
- * @since JDK1.1
+ * @since 1.1
* @see java.rmi.server.UnicastRemoteObject
* @see java.rmi.activation.Activatable
*/
@@ -47,7 +47,7 @@
* detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
*/
public StubNotFoundException(String s) {
super(s);
@@ -59,7 +59,7 @@
*
* @param s the detail message
* @param ex the nested exception
- * @since JDK1.1
+ * @since 1.1
*/
public StubNotFoundException(String s, Exception ex) {
super(s, ex);
--- a/jdk/src/share/classes/java/rmi/UnexpectedException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/UnexpectedException.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* <code>throws</code> clause of the method in the remote interface.
*
* @author Roger Riggs
- * @since JDK1.1
+ * @since 1.1
*/
public class UnexpectedException extends RemoteException {
@@ -44,7 +44,7 @@
* detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
*/
public UnexpectedException(String s) {
super(s);
@@ -56,7 +56,7 @@
*
* @param s the detail message
* @param ex the nested exception
- * @since JDK1.1
+ * @since 1.1
*/
public UnexpectedException(String s, Exception ex) {
super(s, ex);
--- a/jdk/src/share/classes/java/rmi/UnknownHostException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/UnknownHostException.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* <code>java.net.UnknownHostException</code> occurs while creating
* a connection to the remote host for a remote method call.
*
- * @since JDK1.1
+ * @since 1.1
*/
public class UnknownHostException extends RemoteException {
@@ -42,7 +42,7 @@
* detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
*/
public UnknownHostException(String s) {
super(s);
@@ -54,7 +54,7 @@
*
* @param s the detail message
* @param ex the nested exception
- * @since JDK1.1
+ * @since 1.1
*/
public UnknownHostException(String s, Exception ex) {
super(s, ex);
--- a/jdk/src/share/classes/java/rmi/UnmarshalException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/UnmarshalException.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,7 +44,7 @@
* </ul>
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
*/
public class UnmarshalException extends RemoteException {
@@ -56,7 +56,7 @@
* detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
*/
public UnmarshalException(String s) {
super(s);
@@ -68,7 +68,7 @@
*
* @param s the detail message
* @param ex the nested exception
- * @since JDK1.1
+ * @since 1.1
*/
public UnmarshalException(String s, Exception ex) {
super(s, ex);
--- a/jdk/src/share/classes/java/rmi/dgc/VMID.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/dgc/VMID.java Wed Jun 18 13:14:15 2014 -0700
@@ -120,15 +120,15 @@
* Return string representation of this VMID.
*/
public String toString() {
- StringBuffer result = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if (addr != null)
for (int i = 0; i < addr.length; ++ i) {
int x = addr[i] & 0xFF;
- result.append((x < 0x10 ? "0" : "") +
- Integer.toString(x, 16));
+ sb.append((x < 0x10 ? "0" : "") +
+ Integer.toString(x, 16));
}
- result.append(':');
- result.append(uid.toString());
- return result.toString();
+ sb.append(':');
+ sb.append(uid.toString());
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/java/rmi/dgc/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/dgc/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -50,6 +50,6 @@
</ul>
-->
-@since JDK1.1
+@since 1.1
</body>
</html>
--- a/jdk/src/share/classes/java/rmi/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -54,6 +54,6 @@
</ul>
-->
-@since JDK1.1
+@since 1.1
</body>
</html>
--- a/jdk/src/share/classes/java/rmi/registry/LocateRegistry.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/registry/LocateRegistry.java Wed Jun 18 13:14:15 2014 -0700
@@ -51,7 +51,7 @@
*
* @author Ann Wollrath
* @author Peter Jones
- * @since JDK1.1
+ * @since 1.1
* @see java.rmi.registry.Registry
*/
public final class LocateRegistry {
@@ -67,7 +67,7 @@
*
* @return reference (a stub) to the remote object registry
* @exception RemoteException if the reference could not be created
- * @since JDK1.1
+ * @since 1.1
*/
public static Registry getRegistry()
throws RemoteException
@@ -82,7 +82,7 @@
* @param port port on which the registry accepts requests
* @return reference (a stub) to the remote object registry
* @exception RemoteException if the reference could not be created
- * @since JDK1.1
+ * @since 1.1
*/
public static Registry getRegistry(int port)
throws RemoteException
@@ -98,7 +98,7 @@
* @param host host for the remote registry
* @return reference (a stub) to the remote object registry
* @exception RemoteException if the reference could not be created
- * @since JDK1.1
+ * @since 1.1
*/
public static Registry getRegistry(String host)
throws RemoteException
@@ -115,7 +115,7 @@
* @param port port on which the registry accepts requests
* @return reference (a stub) to the remote object registry
* @exception RemoteException if the reference could not be created
- * @since JDK1.1
+ * @since 1.1
*/
public static Registry getRegistry(String host, int port)
throws RemoteException
@@ -197,7 +197,7 @@
* @param port the port on which the registry accepts requests
* @return the registry
* @exception RemoteException if the registry could not be exported
- * @since JDK1.1
+ * @since 1.1
**/
public static Registry createRegistry(int port) throws RemoteException {
return new RegistryImpl(port);
--- a/jdk/src/share/classes/java/rmi/registry/Registry.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/registry/Registry.java Wed Jun 18 13:14:15 2014 -0700
@@ -72,7 +72,7 @@
*
* @author Ann Wollrath
* @author Peter Jones
- * @since JDK1.1
+ * @since 1.1
* @see LocateRegistry
*/
public interface Registry extends Remote {
--- a/jdk/src/share/classes/java/rmi/registry/RegistryHandler.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/registry/RegistryHandler.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
* by application code.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
--- a/jdk/src/share/classes/java/rmi/registry/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/registry/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -52,6 +52,6 @@
</ul>
-->
-@since JDK1.1
+@since 1.1
</body>
</html>
--- a/jdk/src/share/classes/java/rmi/server/ExportException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/ExportException.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
* <code>java.rmi.activation.Activatable</code>.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
* @see java.rmi.server.UnicastRemoteObject
* @see java.rmi.activation.Activatable
*/
@@ -47,7 +47,7 @@
* detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
*/
public ExportException(String s) {
super(s);
@@ -59,7 +59,7 @@
*
* @param s the detail message
* @param ex the nested exception
- * @since JDK1.1
+ * @since 1.1
*/
public ExportException(String s, Exception ex) {
super(s, ex);
--- a/jdk/src/share/classes/java/rmi/server/LoaderHandler.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/LoaderHandler.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
* by application code.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
*
* @deprecated no replacement
*/
@@ -56,7 +56,7 @@
* @exception ClassNotFoundException
* if a definition for the class could not
* be found at the codebase location.
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -75,7 +75,7 @@
* @exception ClassNotFoundException
* if a definition for the class could not
* be found at the specified URL
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -87,7 +87,7 @@
*
* @param loader a class loader from which to get the security context
* @return the security context
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
--- a/jdk/src/share/classes/java/rmi/server/LogStream.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/LogStream.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* of possible interest to those monitoring a system.
*
* @author Ann Wollrath (lots of code stolen from Ken Arnold)
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -64,7 +64,7 @@
* method.
* @param name string identifying messages from this log
* @out output stream that log messages will be sent to
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -83,7 +83,7 @@
* the default stream is created.
* @param name name identifying the desired LogStream
* @return log associated with given name
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -103,7 +103,7 @@
* Return the current default stream for new logs.
* @return default log stream
* @see #setDefaultStream
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -115,7 +115,7 @@
* Set the default stream for new logs.
* @param newDefault new default log stream
* @see #getDefaultStream
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -134,7 +134,7 @@
* Return the current stream to which output from this log is sent.
* @return output stream for this log
* @see #setOutputStream
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -147,7 +147,7 @@
* Set the stream to which output from this log is sent.
* @param out new output stream for this log
* @see #getOutputStream
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -164,7 +164,7 @@
* the byte is appended to the internal buffer. If it is a newline,
* then the currently buffered line is sent to the log's output
* stream, prefixed with the appropriate logging information.
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -208,7 +208,7 @@
/**
* Write a subarray of bytes. Pass each through write byte method.
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -223,7 +223,7 @@
/**
* Return log name as string representation.
* @return log name
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -244,7 +244,7 @@
* integer representation.
* @param s name of logging level (e.g., 'SILENT', 'BRIEF', 'VERBOSE')
* @return corresponding integer log level
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
--- a/jdk/src/share/classes/java/rmi/server/ObjID.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/ObjID.java Wed Jun 18 13:14:15 2014 -0700
@@ -65,7 +65,7 @@
*
* @author Ann Wollrath
* @author Peter Jones
- * @since JDK1.1
+ * @since 1.1
*/
public final class ObjID implements Serializable {
--- a/jdk/src/share/classes/java/rmi/server/Operation.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/Operation.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* stubs (stubs generated with <code>rmic -v1.2</code>); hence, this class
* is deprecated.
*
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -43,7 +43,7 @@
* Creates a new Operation object.
* @param op method name
* @deprecated no replacement
- * @since JDK1.1
+ * @since 1.1
*/
@Deprecated
public Operation(String op) {
@@ -54,7 +54,7 @@
* Returns the name of the method.
* @return method name
* @deprecated no replacement
- * @since JDK1.1
+ * @since 1.1
*/
@Deprecated
public String getOperation() {
@@ -64,7 +64,7 @@
/**
* Returns the string representation of the operation.
* @deprecated no replacement
- * @since JDK1.1
+ * @since 1.1
*/
@Deprecated
public String toString() {
--- a/jdk/src/share/classes/java/rmi/server/RMIClassLoader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/RMIClassLoader.java Wed Jun 18 13:14:15 2014 -0700
@@ -105,7 +105,7 @@
* @author Peter Jones
* @author Laird Dornin
* @see RMIClassLoaderSpi
- * @since JDK1.1
+ * @since 1.1
*/
public class RMIClassLoader {
--- a/jdk/src/share/classes/java/rmi/server/RMIFailureHandler.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/RMIFailureHandler.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
* <code>ServerSocket</code>.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
*/
public interface RMIFailureHandler {
@@ -53,7 +53,7 @@
* @return if true, the RMI runtime attempts to retry
* <code>ServerSocket</code> creation
* @see java.rmi.server.RMISocketFactory#setFailureHandler(RMIFailureHandler)
- * @since JDK1.1
+ * @since 1.1
*/
public boolean failure(Exception ex);
--- a/jdk/src/share/classes/java/rmi/server/RMISocketFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/RMISocketFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -85,7 +85,7 @@
*
* @author Ann Wollrath
* @author Peter Jones
- * @since JDK1.1
+ * @since 1.1
*/
public abstract class RMISocketFactory
implements RMIClientSocketFactory, RMIServerSocketFactory
@@ -100,7 +100,7 @@
/**
* Constructs an <code>RMISocketFactory</code>.
- * @since JDK1.1
+ * @since 1.1
*/
public RMISocketFactory() {
super();
@@ -112,7 +112,7 @@
* @param port the port number
* @return a socket connected to the specified host and port.
* @exception IOException if an I/O error occurs during socket creation
- * @since JDK1.1
+ * @since 1.1
*/
public abstract Socket createSocket(String host, int port)
throws IOException;
@@ -124,7 +124,7 @@
* @return the server socket on the specified port
* @exception IOException if an I/O error occurs during server socket
* creation
- * @since JDK1.1
+ * @since 1.1
*/
public abstract ServerSocket createServerSocket(int port)
throws IOException;
@@ -142,7 +142,7 @@
* <code>checkSetFactory</code> method doesn't allow the operation.
* @see #getSocketFactory
* @see java.lang.SecurityManager#checkSetFactory()
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized static void setSocketFactory(RMISocketFactory fac)
throws IOException
@@ -163,7 +163,7 @@
* set.
* @return the socket factory
* @see #setSocketFactory(RMISocketFactory)
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized static RMISocketFactory getSocketFactory()
{
@@ -176,7 +176,7 @@
* by the RMI runtime when <code>getSocketFactory</code>
* returns <code>null</code>.
* @return the default RMI socket factory
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized static RMISocketFactory getDefaultSocketFactory() {
if (defaultSocketFactory == null) {
@@ -203,7 +203,7 @@
* operation.
* @see #getFailureHandler
* @see java.rmi.server.RMIFailureHandler#failure(Exception)
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized static void setFailureHandler(RMIFailureHandler fh)
{
@@ -219,7 +219,7 @@
* <code>setFailureHandler</code> method.
* @return the failure handler
* @see #setFailureHandler(RMIFailureHandler)
- * @since JDK1.1
+ * @since 1.1
*/
public synchronized static RMIFailureHandler getFailureHandler()
{
--- a/jdk/src/share/classes/java/rmi/server/RemoteCall.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/RemoteCall.java Wed Jun 18 13:14:15 2014 -0700
@@ -37,7 +37,7 @@
* deprecated because it is only used by deprecated methods of
* <code>java.rmi.server.RemoteRef</code>.
*
- * @since JDK1.1
+ * @since 1.1
* @author Ann Wollrath
* @author Roger Riggs
* @see java.rmi.server.RemoteRef
@@ -52,7 +52,7 @@
*
* @return output stream for arguments/results
* @exception java.io.IOException if an I/O error occurs.
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -63,7 +63,7 @@
* the stream.
*
* @exception java.io.IOException if an I/O error occurs.
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -75,7 +75,7 @@
*
* @return input stream for reading arguments/results
* @exception java.io.IOException if an I/O error occurs.
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -87,7 +87,7 @@
* the channel early.
*
* @exception java.io.IOException if an I/O error occurs.
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -103,7 +103,7 @@
* @return output stream for writing call result
* @exception java.io.IOException if an I/O error occurs.
* @exception java.io.StreamCorruptedException If already been called.
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -114,7 +114,7 @@
* Do whatever it takes to execute the call.
*
* @exception java.lang.Exception if a general exception occurs.
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -124,7 +124,7 @@
* Allow cleanup after the remote call has completed.
*
* @exception java.io.IOException if an I/O error occurs.
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
--- a/jdk/src/share/classes/java/rmi/server/RemoteObject.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/RemoteObject.java Wed Jun 18 13:14:15 2014 -0700
@@ -39,7 +39,7 @@
* @author Ann Wollrath
* @author Laird Dornin
* @author Peter Jones
- * @since JDK1.1
+ * @since 1.1
*/
public abstract class RemoteObject implements Remote, java.io.Serializable {
--- a/jdk/src/share/classes/java/rmi/server/RemoteRef.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/RemoteRef.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
* remote method invocation to a remote object.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
* @see java.rmi.server.RemoteStub
*/
public interface RemoteRef extends java.io.Externalizable {
@@ -84,7 +84,7 @@
* interpret them. The remote reference may need the operation to
* encode in the call.
*
- * @since JDK1.1
+ * @since 1.1
* @deprecated 1.2 style stubs no longer use this method. Instead of
* using a sequence of method calls on the stub's the remote reference
* (<code>newCall</code>, <code>invoke</code>, and <code>done</code>), a
@@ -114,7 +114,7 @@
* take care of cleaning up the connection before raising the
* "user" or remote exception.
*
- * @since JDK1.1
+ * @since 1.1
* @deprecated 1.2 style stubs no longer use this method. Instead of
* using a sequence of method calls to the remote reference
* (<code>newCall</code>, <code>invoke</code>, and <code>done</code>), a
@@ -135,7 +135,7 @@
* Done should only be called if the invoke returns successfully
* (non-exceptionally) to the stub.
*
- * @since JDK1.1
+ * @since 1.1
* @deprecated 1.2 style stubs no longer use this method. Instead of
* using a sequence of method calls to the remote reference
* (<code>newCall</code>, <code>invoke</code>, and <code>done</code>), a
@@ -157,7 +157,7 @@
* @param out the output stream to which the reference will be serialized
* @return the class name (without package qualification) of the reference
* type
- * @since JDK1.1
+ * @since 1.1
*/
String getRefClass(java.io.ObjectOutput out);
@@ -168,7 +168,7 @@
*
* @return remote object hashcode
* @see java.util.Hashtable
- * @since JDK1.1
+ * @since 1.1
*/
int remoteHashCode();
@@ -180,7 +180,7 @@
* @param obj the Object to compare with
* @return true if these Objects are equal; false otherwise.
* @see java.util.Hashtable
- * @since JDK1.1
+ * @since 1.1
*/
boolean remoteEquals(RemoteRef obj);
@@ -188,7 +188,7 @@
* Returns a String that represents the reference of this remote
* object.
* @return string representing remote object reference
- * @since JDK1.1
+ * @since 1.1
*/
String remoteToString();
--- a/jdk/src/share/classes/java/rmi/server/RemoteServer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/RemoteServer.java Wed Jun 18 13:14:15 2014 -0700
@@ -37,7 +37,7 @@
* concretely by its subclass(es).
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
*/
public abstract class RemoteServer extends RemoteObject
{
@@ -46,7 +46,7 @@
/**
* Constructs a <code>RemoteServer</code>.
- * @since JDK1.1
+ * @since 1.1
*/
protected RemoteServer() {
super();
@@ -56,7 +56,7 @@
* Constructs a <code>RemoteServer</code> with the given reference type.
*
* @param ref the remote reference
- * @since JDK1.1
+ * @since 1.1
*/
protected RemoteServer(RemoteRef ref) {
super(ref);
@@ -71,7 +71,7 @@
* @throws ServerNotActiveException if no remote method invocation
* is being processed in the current thread
*
- * @since JDK1.1
+ * @since 1.1
*/
public static String getClientHost() throws ServerNotActiveException {
return sun.rmi.transport.tcp.TCPTransport.getClientHost();
@@ -91,7 +91,7 @@
* the invocation of its <code>checkPermission</code> method
* fails
* @see #getLog
- * @since JDK1.1
+ * @since 1.1
*/
public static void setLog(java.io.OutputStream out)
{
@@ -103,7 +103,7 @@
* Returns stream for the RMI call log.
* @return the call log
* @see #setLog
- * @since JDK1.1
+ * @since 1.1
*/
public static java.io.PrintStream getLog()
{
--- a/jdk/src/share/classes/java/rmi/server/RemoteStub.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/RemoteStub.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
* implementation of the remote object.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
*
* @deprecated Statically generated stubs are deprecated, since
* stubs are generated dynamically. See {@link UnicastRemoteObject}
@@ -57,7 +57,7 @@
* reference.
*
* @param ref the remote reference
- * @since JDK1.1
+ * @since 1.1
*/
protected RemoteStub(RemoteRef ref) {
super(ref);
@@ -69,7 +69,7 @@
* @param stub the remote stub
* @param ref the remote reference
* @throws UnsupportedOperationException always
- * @since JDK1.1
+ * @since 1.1
* @deprecated No replacement. The {@code setRef} method
* was intended for setting the remote reference of a remote
* stub. This is unnecessary, since {@code RemoteStub}s can be created
--- a/jdk/src/share/classes/java/rmi/server/ServerCloneException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/ServerCloneException.java Wed Jun 18 13:14:15 2014 -0700
@@ -41,7 +41,7 @@
* IllegalStateException}.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
* @see java.rmi.server.UnicastRemoteObject#clone()
*/
public class ServerCloneException extends CloneNotSupportedException {
--- a/jdk/src/share/classes/java/rmi/server/ServerNotActiveException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/ServerNotActiveException.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* method call.
*
* @author Roger Riggs
- * @since JDK1.1
+ * @since 1.1
* @see java.rmi.server.RemoteServer#getClientHost()
*/
public class ServerNotActiveException extends java.lang.Exception {
@@ -43,7 +43,7 @@
/**
* Constructs an <code>ServerNotActiveException</code> with no specified
* detail message.
- * @since JDK1.1
+ * @since 1.1
*/
public ServerNotActiveException() {}
@@ -52,7 +52,7 @@
* detail message.
*
* @param s the detail message.
- * @since JDK1.1
+ * @since 1.1
*/
public ServerNotActiveException(String s)
{
--- a/jdk/src/share/classes/java/rmi/server/ServerRef.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/ServerRef.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* implementation.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
* @deprecated No replacement. This interface is unused and is obsolete.
*/
@Deprecated
@@ -50,7 +50,7 @@
* @return the stub for the remote object
* @exception RemoteException if an exception occurs attempting
* to export the object (e.g., stub class could not be found)
- * @since JDK1.1
+ * @since 1.1
*/
RemoteStub exportObject(Remote obj, Object data)
throws RemoteException;
@@ -62,7 +62,7 @@
* @return the client's host name
* @exception ServerNotActiveException if called outside of servicing
* a remote method invocation
- * @since JDK1.1
+ * @since 1.1
*/
String getClientHost() throws ServerNotActiveException;
}
--- a/jdk/src/share/classes/java/rmi/server/Skeleton.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/Skeleton.java Wed Jun 18 13:14:15 2014 -0700
@@ -37,7 +37,7 @@
* implementation.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement. Skeletons are no longer required for remote
* method calls in the Java 2 platform v1.2 and greater.
*/
@@ -52,7 +52,7 @@
* @param opnum operation number
* @param hash stub/skeleton interface hash
* @exception java.lang.Exception if a general exception occurs.
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
@@ -62,7 +62,7 @@
/**
* Returns the operations supported by the skeleton.
* @return operations supported by skeleton
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
--- a/jdk/src/share/classes/java/rmi/server/SkeletonMismatchException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/SkeletonMismatchException.java Wed Jun 18 13:14:15 2014 -0700
@@ -36,7 +36,7 @@
* the stub compiler (<code>rmic</code>).
*
* @author Roger Riggs
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement. Skeletons are no longer required for remote
* method calls in the Java 2 platform v1.2 and greater.
*/
@@ -51,7 +51,7 @@
* a specified detail message.
*
* @param s the detail message
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement
*/
@Deprecated
--- a/jdk/src/share/classes/java/rmi/server/SkeletonNotFoundException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/SkeletonNotFoundException.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
* exported is not found. Skeletons are no longer required, so this
* exception is never thrown.
*
- * @since JDK1.1
+ * @since 1.1
* @deprecated no replacement. Skeletons are no longer required for remote
* method calls in the Java 2 platform v1.2 and greater.
*/
@@ -48,7 +48,7 @@
* detail message.
*
* @param s the detail message.
- * @since JDK1.1
+ * @since 1.1
*/
public SkeletonNotFoundException(String s) {
super(s);
@@ -60,7 +60,7 @@
*
* @param s the detail message.
* @param ex the nested exception
- * @since JDK1.1
+ * @since 1.1
*/
public SkeletonNotFoundException(String s, Exception ex) {
super(s, ex);
--- a/jdk/src/share/classes/java/rmi/server/SocketSecurityException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/SocketSecurityException.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
* An obsolete subclass of {@link ExportException}.
*
* @author Ann Wollrath
- * @since JDK1.1
+ * @since 1.1
* @deprecated This class is obsolete. Use {@link ExportException} instead.
*/
@Deprecated
@@ -43,7 +43,7 @@
* detail message.
*
* @param s the detail message.
- * @since JDK1.1
+ * @since 1.1
*/
public SocketSecurityException(String s) {
super(s);
@@ -55,7 +55,7 @@
*
* @param s the detail message.
* @param ex the nested exception
- * @since JDK1.1
+ * @since 1.1
*/
public SocketSecurityException(String s, Exception ex) {
super(s, ex);
--- a/jdk/src/share/classes/java/rmi/server/UID.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/UID.java Wed Jun 18 13:14:15 2014 -0700
@@ -66,7 +66,7 @@
*
* @author Ann Wollrath
* @author Peter Jones
- * @since JDK1.1
+ * @since 1.1
*/
public final class UID implements Serializable {
--- a/jdk/src/share/classes/java/rmi/server/UnicastRemoteObject.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/UnicastRemoteObject.java Wed Jun 18 13:14:15 2014 -0700
@@ -142,7 +142,7 @@
*
* @author Ann Wollrath
* @author Peter Jones
- * @since JDK1.1
+ * @since 1.1
**/
public class UnicastRemoteObject extends RemoteServer {
@@ -173,7 +173,7 @@
* created using the {@link RMISocketFactory} class.
*
* @throws RemoteException if failed to export object
- * @since JDK1.1
+ * @since 1.1
*/
protected UnicastRemoteObject() throws RemoteException
{
@@ -242,7 +242,7 @@
* @exception CloneNotSupportedException if clone failed due to
* a RemoteException.
* @return the new remote object
- * @since JDK1.1
+ * @since 1.1
*/
public Object clone() throws CloneNotSupportedException
{
@@ -280,7 +280,7 @@
* @param obj the remote object to be exported
* @return remote object stub
* @exception RemoteException if export fails
- * @since JDK1.1
+ * @since 1.1
* @deprecated This method is deprecated because it supports only static stubs.
* Use {@link #exportObject(Remote, int) exportObject(Remote, port)} or
* {@link #exportObject(Remote, int, RMIClientSocketFactory, RMIServerSocketFactory)
--- a/jdk/src/share/classes/java/rmi/server/Unreferenced.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/Unreferenced.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,14 +32,14 @@
*
* @author Ann Wollrath
* @author Roger Riggs
- * @since JDK1.1
+ * @since 1.1
*/
public interface Unreferenced {
/**
* Called by the RMI runtime sometime after the runtime determines that
* the reference list, the list of clients referencing the remote object,
* becomes empty.
- * @since JDK1.1
+ * @since 1.1
*/
public void unreferenced();
}
--- a/jdk/src/share/classes/java/rmi/server/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/rmi/server/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -69,6 +69,6 @@
</ul>
-->
-@since JDK1.1
+@since 1.1
</body>
</html>
--- a/jdk/src/share/classes/java/security/CodeSigner.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/CodeSigner.java Wed Jun 18 13:14:15 2014 -0700
@@ -154,7 +154,7 @@
* if present.
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("(");
sb.append("Signer: " + signerCertPath.getCertificates().get(0));
if (timestamp != null) {
--- a/jdk/src/share/classes/java/security/Timestamp.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/Timestamp.java Wed Jun 18 13:14:15 2014 -0700
@@ -141,7 +141,7 @@
* its signer's certificate.
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("(");
sb.append("timestamp: " + timestamp);
List<? extends Certificate> certs = signerCertPath.getCertificates();
--- a/jdk/src/share/classes/java/security/acl/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/acl/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -28,6 +28,6 @@
* superseded by classes in the java.security package.
* See that package and, for example, java.security.Permission for details.
*
- * @since JDK1.1
+ * @since 1.1
*/
package java.security.acl;
--- a/jdk/src/share/classes/java/security/cert/CertPath.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/cert/CertPath.java Wed Jun 18 13:14:15 2014 -0700
@@ -220,7 +220,7 @@
* @return a string representation of this certification path
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
Iterator<? extends Certificate> stringIterator =
getCertificates().iterator();
--- a/jdk/src/share/classes/java/security/cert/CollectionCertStoreParameters.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/cert/CollectionCertStoreParameters.java Wed Jun 18 13:14:15 2014 -0700
@@ -132,7 +132,7 @@
* @return a formatted string describing the parameters
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("CollectionCertStoreParameters: [\n");
sb.append(" collection: " + coll + "\n");
sb.append("]");
--- a/jdk/src/share/classes/java/security/cert/LDAPCertStoreParameters.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/cert/LDAPCertStoreParameters.java Wed Jun 18 13:14:15 2014 -0700
@@ -138,7 +138,7 @@
* @return a formatted string describing the parameters
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("LDAPCertStoreParameters: [\n");
sb.append(" serverName: " + serverName + "\n");
--- a/jdk/src/share/classes/java/security/cert/PKIXBuilderParameters.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/cert/PKIXBuilderParameters.java Wed Jun 18 13:14:15 2014 -0700
@@ -189,7 +189,7 @@
* @return a formatted string describing the parameters
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("[\n");
sb.append(super.toString());
sb.append(" Maximum Path Length: " + maxPathLength + "\n");
--- a/jdk/src/share/classes/java/security/cert/PKIXCertPathBuilderResult.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/cert/PKIXCertPathBuilderResult.java Wed Jun 18 13:14:15 2014 -0700
@@ -107,7 +107,7 @@
* {@code PKIXCertPathBuilderResult}
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("PKIXCertPathBuilderResult: [\n");
sb.append(" Certification Path: " + certPath + "\n");
sb.append(" Trust Anchor: " + getTrustAnchor().toString() + "\n");
--- a/jdk/src/share/classes/java/security/cert/PKIXCertPathValidatorResult.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/cert/PKIXCertPathValidatorResult.java Wed Jun 18 13:14:15 2014 -0700
@@ -148,7 +148,7 @@
* {@code PKIXCertPathValidatorResult}
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("PKIXCertPathValidatorResult: [\n");
sb.append(" Trust Anchor: " + trustAnchor.toString() + "\n");
sb.append(" Policy Tree: " + String.valueOf(policyTree) + "\n");
--- a/jdk/src/share/classes/java/security/cert/PKIXParameters.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/cert/PKIXParameters.java Wed Jun 18 13:14:15 2014 -0700
@@ -693,7 +693,7 @@
* @return a formatted string describing the parameters.
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("[\n");
/* start with trusted anchor info */
--- a/jdk/src/share/classes/java/security/cert/PolicyQualifierInfo.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/cert/PolicyQualifierInfo.java Wed Jun 18 13:14:15 2014 -0700
@@ -161,7 +161,7 @@
if (pqiString != null)
return pqiString;
HexDumpEncoder enc = new HexDumpEncoder();
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("PolicyQualifierInfo: [\n");
sb.append(" qualifierID: " + mId + "\n");
sb.append(" qualifier: " +
--- a/jdk/src/share/classes/java/security/cert/TrustAnchor.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/cert/TrustAnchor.java Wed Jun 18 13:14:15 2014 -0700
@@ -317,7 +317,7 @@
* @return a formatted string describing the {@code TrustAnchor}
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("[\n");
if (pubKey != null) {
sb.append(" Trusted CA Public Key: " + pubKey.toString() + "\n");
--- a/jdk/src/share/classes/java/security/cert/X509CRLSelector.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/cert/X509CRLSelector.java Wed Jun 18 13:14:15 2014 -0700
@@ -566,7 +566,7 @@
* {@code X509CRLSelector}.
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("X509CRLSelector: [\n");
if (issuerNames != null) {
sb.append(" IssuerNames:\n");
--- a/jdk/src/share/classes/java/security/cert/X509CertSelector.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/cert/X509CertSelector.java Wed Jun 18 13:14:15 2014 -0700
@@ -1811,7 +1811,7 @@
* {@code CertSelector}
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("X509CertSelector: [\n");
if (x509Cert != null) {
sb.append(" Certificate: " + x509Cert.toString() + "\n");
--- a/jdk/src/share/classes/java/security/interfaces/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/interfaces/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -69,6 +69,6 @@
* </b></a></li>
* </ul>
*
- * @since JDK1.1
+ * @since 1.1
*/
package java.security.interfaces;
--- a/jdk/src/share/classes/java/security/spec/DSAGenParameterSpec.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/security/spec/DSAGenParameterSpec.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @see AlgorithmParameterSpec
*
- * @since 8
+ * @since 1.8
*/
public final class DSAGenParameterSpec implements AlgorithmParameterSpec {
--- a/jdk/src/share/classes/java/text/AttributedString.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/text/AttributedString.java Wed Jun 18 13:14:15 2014 -0700
@@ -243,11 +243,11 @@
throw new IllegalArgumentException("Invalid substring range");
// Copy the given string
- StringBuffer textBuffer = new StringBuffer();
+ StringBuilder textBuilder = new StringBuilder();
text.setIndex(beginIndex);
for (char c = text.current(); text.getIndex() < endIndex; c = text.next())
- textBuffer.append(c);
- this.text = textBuffer.toString();
+ textBuilder.append(c);
+ this.text = textBuilder.toString();
if (beginIndex == endIndex)
return;
--- a/jdk/src/share/classes/java/text/ChoiceFormat.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/text/ChoiceFormat.java Wed Jun 18 13:14:15 2014 -0700
@@ -259,7 +259,7 @@
* @return the pattern string
*/
public String toPattern() {
- StringBuffer result = new StringBuffer();
+ StringBuilder result = new StringBuilder();
for (int i = 0; i < choiceLimits.length; ++i) {
if (i != 0) {
result.append('|');
--- a/jdk/src/share/classes/java/text/DecimalFormatSymbols.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/text/DecimalFormatSymbols.java Wed Jun 18 13:14:15 2014 -0700
@@ -679,7 +679,7 @@
* default serialization will work properly if this object is streamed out again.
* Initializes the currency from the intlCurrencySymbol field.
*
- * @since JDK 1.1.6
+ * @since 1.1.6
*/
private void readObject(ObjectInputStream stream)
throws IOException, ClassNotFoundException {
@@ -802,7 +802,7 @@
/**
* The decimal separator used when formatting currency values.
* @serial
- * @since JDK 1.1.6
+ * @since 1.1.6
* @see #getMonetaryDecimalSeparator
*/
private char monetarySeparator; // Field new in JDK 1.1.6
@@ -816,7 +816,7 @@
* The intent is that this will be added to the API in the future.
*
* @serial
- * @since JDK 1.1.6
+ * @since 1.1.6
*/
private char exponential; // Field new in JDK 1.1.6
@@ -872,7 +872,7 @@
* is always written.
*
* @serial
- * @since JDK 1.1.6
+ * @since 1.1.6
*/
private int serialVersionOnStream = currentSerialVersion;
}
--- a/jdk/src/share/classes/java/text/SimpleDateFormat.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/text/SimpleDateFormat.java Wed Jun 18 13:14:15 2014 -0700
@@ -441,7 +441,7 @@
* and the highest allowable <code>serialVersionOnStream</code>
* is written.
* @serial
- * @since JDK1.1.4
+ * @since 1.1.4
*/
private int serialVersionOnStream = currentSerialVersion;
@@ -506,7 +506,7 @@
* <code>defaultCenturyStart</code>, which may be any date. May
* not be null.
* @serial
- * @since JDK1.1.4
+ * @since 1.1.4
*/
private Date defaultCenturyStart;
--- a/jdk/src/share/classes/java/text/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/text/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -60,6 +60,6 @@
</ul>
-->
-@since JDK1.1
+@since 1.1
</body>
</html>
--- a/jdk/src/share/classes/java/time/Instant.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/time/Instant.java Wed Jun 18 13:14:15 2014 -0700
@@ -375,7 +375,7 @@
return Instant.ofEpochSecond(instantSecs, nanoOfSecond);
} catch (DateTimeException ex) {
throw new DateTimeException("Unable to obtain Instant from TemporalAccessor: " +
- temporal + " of type " + temporal.getClass().getName());
+ temporal + " of type " + temporal.getClass().getName(), ex);
}
}
@@ -1058,7 +1058,8 @@
}
// inline TemporalAccessor.super.query(query) as an optimization
if (query == TemporalQueries.chronology() || query == TemporalQueries.zoneId() ||
- query == TemporalQueries.zone() || query == TemporalQueries.offset()) {
+ query == TemporalQueries.zone() || query == TemporalQueries.offset() ||
+ query == TemporalQueries.localDate() || query == TemporalQueries.localTime()) {
return null;
}
return query.queryFrom(this);
--- a/jdk/src/share/classes/java/time/OffsetDateTime.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/time/OffsetDateTime.java Wed Jun 18 13:14:15 2014 -0700
@@ -357,10 +357,11 @@
}
try {
ZoneOffset offset = ZoneOffset.from(temporal);
- try {
- LocalDateTime ldt = LocalDateTime.from(temporal);
- return OffsetDateTime.of(ldt, offset);
- } catch (DateTimeException ignore) {
+ LocalDate date = temporal.query(TemporalQueries.localDate());
+ LocalTime time = temporal.query(TemporalQueries.localTime());
+ if (date != null && time != null) {
+ return OffsetDateTime.of(date, time, offset);
+ } else {
Instant instant = Instant.from(temporal);
return OffsetDateTime.ofInstant(instant, offset);
}
--- a/jdk/src/share/classes/java/time/ZonedDateTime.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/time/ZonedDateTime.java Wed Jun 18 13:14:15 2014 -0700
@@ -81,6 +81,7 @@
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAmount;
import java.time.temporal.TemporalField;
+import java.time.temporal.TemporalQueries;
import java.time.temporal.TemporalQuery;
import java.time.temporal.TemporalUnit;
import java.time.temporal.UnsupportedTemporalTypeException;
@@ -551,14 +552,14 @@
}
try {
ZoneId zone = ZoneId.from(temporal);
- try {
+ if (temporal.isSupported(INSTANT_SECONDS)) {
long epochSecond = temporal.getLong(INSTANT_SECONDS);
int nanoOfSecond = temporal.get(NANO_OF_SECOND);
return create(epochSecond, nanoOfSecond, zone);
-
- } catch (DateTimeException ex1) {
- LocalDateTime ldt = LocalDateTime.from(temporal);
- return of(ldt, zone);
+ } else {
+ LocalDate date = LocalDate.from(temporal);
+ LocalTime time = LocalTime.from(temporal);
+ return of(date, time, zone);
}
} catch (DateTimeException ex) {
throw new DateTimeException("Unable to obtain ZonedDateTime from TemporalAccessor: " +
@@ -2039,8 +2040,12 @@
* @throws DateTimeException if unable to query (defined by the query)
* @throws ArithmeticException if numeric overflow occurs (defined by the query)
*/
+ @SuppressWarnings("unchecked")
@Override // override for Javadoc
public <R> R query(TemporalQuery<R> query) {
+ if (query == TemporalQueries.localDate()) {
+ return (R) toLocalDate();
+ }
return ChronoZonedDateTime.super.query(query);
}
--- a/jdk/src/share/classes/java/time/chrono/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/time/chrono/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -166,6 +166,6 @@
* All calculations should check for numeric overflow and throw either an {@link java.lang.ArithmeticException}
* or a {@link java.time.DateTimeException}.
* </p>
- * @since JDK1.8
+ * @since 1.8
*/
package java.time.chrono;
--- a/jdk/src/share/classes/java/time/format/DateTimeFormatterBuilder.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/time/format/DateTimeFormatterBuilder.java Wed Jun 18 13:14:15 2014 -0700
@@ -3283,7 +3283,7 @@
} catch (RuntimeException ex) {
return ~position;
}
- int successPos = text.length();
+ int successPos = pos;
successPos = context.setParsedField(INSTANT_SECONDS, instantSecs, position, successPos);
return context.setParsedField(NANO_OF_SECOND, nano, position, successPos);
}
--- a/jdk/src/share/classes/java/time/format/Parsed.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/time/format/Parsed.java Wed Jun 18 13:14:15 2014 -0700
@@ -66,6 +66,7 @@
import static java.time.temporal.ChronoField.CLOCK_HOUR_OF_DAY;
import static java.time.temporal.ChronoField.HOUR_OF_AMPM;
import static java.time.temporal.ChronoField.HOUR_OF_DAY;
+import static java.time.temporal.ChronoField.INSTANT_SECONDS;
import static java.time.temporal.ChronoField.MICRO_OF_DAY;
import static java.time.temporal.ChronoField.MICRO_OF_SECOND;
import static java.time.temporal.ChronoField.MILLI_OF_DAY;
@@ -74,14 +75,17 @@
import static java.time.temporal.ChronoField.MINUTE_OF_HOUR;
import static java.time.temporal.ChronoField.NANO_OF_DAY;
import static java.time.temporal.ChronoField.NANO_OF_SECOND;
+import static java.time.temporal.ChronoField.OFFSET_SECONDS;
import static java.time.temporal.ChronoField.SECOND_OF_DAY;
import static java.time.temporal.ChronoField.SECOND_OF_MINUTE;
import java.time.DateTimeException;
+import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Period;
import java.time.ZoneId;
+import java.time.ZoneOffset;
import java.time.chrono.ChronoLocalDate;
import java.time.chrono.ChronoLocalDateTime;
import java.time.chrono.ChronoZonedDateTime;
@@ -241,12 +245,15 @@
resolveTimeLenient();
crossCheck();
resolvePeriod();
+ resolveFractional();
+ resolveInstant();
return this;
}
//-----------------------------------------------------------------------
private void resolveFields() {
// resolve ChronoField
+ resolveInstantFields();
resolveDateFields();
resolveTimeFields();
@@ -300,6 +307,7 @@
}
// if something changed then have to redo ChronoField resolve
if (changedCount > 0) {
+ resolveInstantFields();
resolveDateFields();
resolveTimeFields();
}
@@ -316,6 +324,29 @@
}
//-----------------------------------------------------------------------
+ private void resolveInstantFields() {
+ // resolve parsed instant seconds to date and time if zone available
+ if (fieldValues.containsKey(INSTANT_SECONDS)) {
+ if (zone != null) {
+ resolveInstantFields0(zone);
+ } else {
+ Long offsetSecs = fieldValues.get(OFFSET_SECONDS);
+ if (offsetSecs != null) {
+ ZoneOffset offset = ZoneOffset.ofTotalSeconds(offsetSecs.intValue());
+ resolveInstantFields0(offset);
+ }
+ }
+ }
+ }
+
+ private void resolveInstantFields0(ZoneId selectedZone) {
+ Instant instant = Instant.ofEpochSecond(fieldValues.remove(INSTANT_SECONDS));
+ ChronoZonedDateTime<?> zdt = chrono.zonedDateTime(instant, selectedZone);
+ updateCheckConflict(zdt.toLocalDate());
+ updateCheckConflict(INSTANT_SECONDS, SECOND_OF_DAY, (long) zdt.toLocalTime().toSecondOfDay());
+ }
+
+ //-----------------------------------------------------------------------
private void resolveDateFields() {
updateCheckConflict(chrono.resolveDate(fieldValues, resolverStyle));
}
@@ -533,6 +564,42 @@
}
}
+ private void resolveFractional() {
+ // ensure fractional seconds available as ChronoField requires
+ // resolveTimeLenient() will have merged MICRO_OF_SECOND/MILLI_OF_SECOND to NANO_OF_SECOND
+ if (time == null &&
+ (fieldValues.containsKey(INSTANT_SECONDS) ||
+ fieldValues.containsKey(SECOND_OF_DAY) ||
+ fieldValues.containsKey(SECOND_OF_MINUTE))) {
+ if (fieldValues.containsKey(NANO_OF_SECOND)) {
+ long nos = fieldValues.get(NANO_OF_SECOND);
+ fieldValues.put(MICRO_OF_SECOND, nos / 1000);
+ fieldValues.put(MILLI_OF_SECOND, nos / 1000000);
+ } else {
+ fieldValues.put(NANO_OF_SECOND, 0L);
+ fieldValues.put(MICRO_OF_SECOND, 0L);
+ fieldValues.put(MILLI_OF_SECOND, 0L);
+ }
+ }
+ }
+
+ private void resolveInstant() {
+ // add instant seconds if we have date, time and zone
+ if (date != null && time != null) {
+ if (zone != null) {
+ long instant = date.atTime(time).atZone(zone).getLong(ChronoField.INSTANT_SECONDS);
+ fieldValues.put(INSTANT_SECONDS, instant);
+ } else {
+ Long offsetSecs = fieldValues.get(OFFSET_SECONDS);
+ if (offsetSecs != null) {
+ ZoneOffset offset = ZoneOffset.ofTotalSeconds(offsetSecs.intValue());
+ long instant = date.atTime(time).atZone(offset).getLong(ChronoField.INSTANT_SECONDS);
+ fieldValues.put(INSTANT_SECONDS, instant);
+ }
+ }
+ }
+ }
+
private void updateCheckConflict(LocalTime timeToSet, Period periodToSet) {
if (time != null) {
if (time.equals(timeToSet) == false) {
@@ -568,18 +635,20 @@
for (Iterator<Entry<TemporalField, Long>> it = fieldValues.entrySet().iterator(); it.hasNext(); ) {
Entry<TemporalField, Long> entry = it.next();
TemporalField field = entry.getKey();
- long val1;
- try {
- val1 = target.getLong(field);
- } catch (RuntimeException ex) {
- continue;
+ if (target.isSupported(field)) {
+ long val1;
+ try {
+ val1 = target.getLong(field);
+ } catch (RuntimeException ex) {
+ continue;
+ }
+ long val2 = entry.getValue();
+ if (val1 != val2) {
+ throw new DateTimeException("Conflict found: Field " + field + " " + val1 +
+ " differs from " + field + " " + val2 + " derived from " + target);
+ }
+ it.remove();
}
- long val2 = entry.getValue();
- if (val1 != val2) {
- throw new DateTimeException("Conflict found: Field " + field + " " + val1 +
- " differs from " + field + " " + val2 + " derived from " + target);
- }
- it.remove();
}
}
--- a/jdk/src/share/classes/java/time/format/TextStyle.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/time/format/TextStyle.java Wed Jun 18 13:14:15 2014 -0700
@@ -82,6 +82,8 @@
*
* @implSpec
* This is immutable and thread-safe enum.
+ *
+ * @since 1.8
*/
public enum TextStyle {
// ordered from large to small
--- a/jdk/src/share/classes/java/time/format/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/time/format/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -90,6 +90,6 @@
* All calculations should check for numeric overflow and throw either an {@link java.lang.ArithmeticException}
* or a {@link java.time.DateTimeException}.
* </p>
- * @since JDK1.8
+ * @since 1.8
*/
package java.time.format;
--- a/jdk/src/share/classes/java/time/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/time/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -282,6 +282,6 @@
*
* </pre>
*
- * @since JDK1.8
+ * @since 1.8
*/
package java.time;
--- a/jdk/src/share/classes/java/time/temporal/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/time/temporal/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -154,6 +154,6 @@
* All calculations should check for numeric overflow and throw either an {@link java.lang.ArithmeticException}
* or a {@link java.time.DateTimeException}.
* </p>
- * @since JDK1.8
+ * @since 1.8
*/
package java.time.temporal;
--- a/jdk/src/share/classes/java/time/zone/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/time/zone/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -81,6 +81,6 @@
* All calculations should check for numeric overflow and throw either an {@link java.lang.ArithmeticException}
* or a {@link java.time.DateTimeException}.
* </p>
- * @since JDK1.8
+ * @since 1.8
*/
package java.time.zone;
--- a/jdk/src/share/classes/java/util/BitSet.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/BitSet.java Wed Jun 18 13:14:15 2014 -0700
@@ -60,7 +60,7 @@
* @author Arthur van Hoff
* @author Michael McCloskey
* @author Martin Buchholz
- * @since JDK1.0
+ * @since 1.0
*/
public class BitSet implements Cloneable, java.io.Serializable {
/*
@@ -437,7 +437,7 @@
*
* @param bitIndex a bit index
* @throws IndexOutOfBoundsException if the specified index is negative
- * @since JDK1.0
+ * @since 1.0
*/
public void set(int bitIndex) {
if (bitIndex < 0)
@@ -533,7 +533,7 @@
*
* @param bitIndex the index of the bit to be cleared
* @throws IndexOutOfBoundsException if the specified index is negative
- * @since JDK1.0
+ * @since 1.0
*/
public void clear(int bitIndex) {
if (bitIndex < 0)
--- a/jdk/src/share/classes/java/util/Calendar.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/Calendar.java Wed Jun 18 13:14:15 2014 -0700
@@ -308,7 +308,7 @@
* @see TimeZone
* @see java.text.DateFormat
* @author Mark Davis, David Goldsmith, Chen-Lieh Huang, Alan Liu
- * @since JDK1.1
+ * @since 1.1
*/
public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> {
@@ -994,7 +994,7 @@
* and the highest allowable <code>serialVersionOnStream</code>
* is written.
* @serial
- * @since JDK1.1.6
+ * @since 1.1.6
*/
private int serialVersionOnStream = currentSerialVersion;
--- a/jdk/src/share/classes/java/util/Date.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/Date.java Wed Jun 18 13:14:15 2014 -0700
@@ -126,7 +126,7 @@
* @see java.text.DateFormat
* @see java.util.Calendar
* @see java.util.TimeZone
- * @since JDK1.0
+ * @since 1.0
*/
public class Date
implements java.io.Serializable, Cloneable, Comparable<Date>
--- a/jdk/src/share/classes/java/util/Dictionary.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/Dictionary.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,7 +44,7 @@
* @see java.lang.Object#equals(java.lang.Object)
* @see java.lang.Object#hashCode()
* @see java.util.Hashtable
- * @since JDK1.0
+ * @since 1.0
*/
public abstract
class Dictionary<K,V> {
--- a/jdk/src/share/classes/java/util/EmptyStackException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/EmptyStackException.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @author Jonathan Payne
* @see java.util.Stack
- * @since JDK1.0
+ * @since 1.0
*/
public
class EmptyStackException extends RuntimeException {
--- a/jdk/src/share/classes/java/util/Enumeration.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/Enumeration.java Wed Jun 18 13:14:15 2014 -0700
@@ -56,7 +56,7 @@
* @see java.util.Vector#elements()
*
* @author Lee Boynton
- * @since JDK1.0
+ * @since 1.0
*/
public interface Enumeration<E> {
/**
--- a/jdk/src/share/classes/java/util/EventListener.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/EventListener.java Wed Jun 18 13:14:15 2014 -0700
@@ -27,7 +27,7 @@
/**
* A tagging interface that all event listener interfaces must extend.
- * @since JDK1.1
+ * @since 1.1
*/
public interface EventListener {
}
--- a/jdk/src/share/classes/java/util/EventObject.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/EventObject.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
* that is logically deemed to be the object upon which the Event in question
* initially occurred upon.
*
- * @since JDK1.1
+ * @since 1.1
*/
public class EventObject implements java.io.Serializable {
--- a/jdk/src/share/classes/java/util/GregorianCalendar.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/GregorianCalendar.java Wed Jun 18 13:14:15 2014 -0700
@@ -325,7 +325,7 @@
*
* @see TimeZone
* @author David Goldsmith, Mark Davis, Chen-Lieh Huang, Alan Liu
- * @since JDK1.1
+ * @since 1.1
*/
public class GregorianCalendar extends Calendar {
/*
--- a/jdk/src/share/classes/java/util/Hashtable.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/Hashtable.java Wed Jun 18 13:14:15 2014 -0700
@@ -129,7 +129,7 @@
* @see Map
* @see HashMap
* @see TreeMap
- * @since JDK1.0
+ * @since 1.0
*/
public class Hashtable<K,V>
extends Dictionary<K,V>
--- a/jdk/src/share/classes/java/util/ListResourceBundle.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/ListResourceBundle.java Wed Jun 18 13:14:15 2014 -0700
@@ -113,7 +113,7 @@
*
* @see ResourceBundle
* @see PropertyResourceBundle
- * @since JDK1.1
+ * @since 1.1
*/
public abstract class ListResourceBundle extends ResourceBundle {
/**
--- a/jdk/src/share/classes/java/util/MissingResourceException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/MissingResourceException.java Wed Jun 18 13:14:15 2014 -0700
@@ -45,7 +45,7 @@
* @see java.lang.Exception
* @see ResourceBundle
* @author Mark Davis
- * @since JDK1.1
+ * @since 1.1
*/
public
class MissingResourceException extends RuntimeException {
--- a/jdk/src/share/classes/java/util/NoSuchElementException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/NoSuchElementException.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* @author unascribed
* @see java.util.Enumeration#nextElement()
* @see java.util.Iterator#next()
- * @since JDK1.0
+ * @since 1.0
*/
public
class NoSuchElementException extends RuntimeException {
--- a/jdk/src/share/classes/java/util/Observable.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/Observable.java Wed Jun 18 13:14:15 2014 -0700
@@ -57,7 +57,7 @@
* @see java.util.Observable#notifyObservers(java.lang.Object)
* @see java.util.Observer
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
- * @since JDK1.0
+ * @since 1.0
*/
public class Observable {
private boolean changed = false;
--- a/jdk/src/share/classes/java/util/Observer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/Observer.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @author Chris Warth
* @see java.util.Observable
- * @since JDK1.0
+ * @since 1.0
*/
public interface Observer {
/**
--- a/jdk/src/share/classes/java/util/Properties.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/Properties.java Wed Jun 18 13:14:15 2014 -0700
@@ -116,7 +116,7 @@
* @author Arthur van Hoff
* @author Michael McCloskey
* @author Xueming Shen
- * @since JDK1.0
+ * @since 1.0
*/
public
class Properties extends Hashtable<Object,Object> {
@@ -602,7 +602,7 @@
if (bufLen < 0) {
bufLen = Integer.MAX_VALUE;
}
- StringBuffer outBuffer = new StringBuffer(bufLen);
+ StringBuilder outBuffer = new StringBuilder(bufLen);
for(int x=0; x<len; x++) {
char aChar = theString.charAt(x);
@@ -1065,7 +1065,7 @@
* @param out an output stream.
* @throws ClassCastException if any key in this property list
* is not a string.
- * @since JDK1.1
+ * @since 1.1
*/
/*
* Rather than use an anonymous inner class to share common code, this
--- a/jdk/src/share/classes/java/util/PropertyResourceBundle.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/PropertyResourceBundle.java Wed Jun 18 13:14:15 2014 -0700
@@ -117,7 +117,7 @@
* @see ResourceBundle
* @see ListResourceBundle
* @see Properties
- * @since JDK1.1
+ * @since 1.1
*/
public class PropertyResourceBundle extends ResourceBundle {
/**
--- a/jdk/src/share/classes/java/util/ResourceBundle.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/ResourceBundle.java Wed Jun 18 13:14:15 2014 -0700
@@ -282,7 +282,7 @@
* @see ListResourceBundle
* @see PropertyResourceBundle
* @see MissingResourceException
- * @since JDK1.1
+ * @since 1.1
*/
public abstract class ResourceBundle {
--- a/jdk/src/share/classes/java/util/Stack.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/Stack.java Wed Jun 18 13:14:15 2014 -0700
@@ -43,7 +43,7 @@
* Deque<Integer> stack = new ArrayDeque<Integer>();}</pre>
*
* @author Jonathan Payne
- * @since JDK1.0
+ * @since 1.0
*/
public
class Stack<E> extends Vector<E> {
--- a/jdk/src/share/classes/java/util/StringTokenizer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/StringTokenizer.java Wed Jun 18 13:14:15 2014 -0700
@@ -97,7 +97,7 @@
*
* @author unascribed
* @see java.io.StreamTokenizer
- * @since JDK1.0
+ * @since 1.0
*/
public
class StringTokenizer implements Enumeration<Object> {
--- a/jdk/src/share/classes/java/util/TimeZone.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/TimeZone.java Wed Jun 18 13:14:15 2014 -0700
@@ -128,7 +128,7 @@
* @see GregorianCalendar
* @see SimpleTimeZone
* @author Mark Davis, David Goldsmith, Chen-Lieh Huang, Alan Liu
- * @since JDK1.1
+ * @since 1.1
*/
abstract public class TimeZone implements Serializable, Cloneable {
/**
--- a/jdk/src/share/classes/java/util/TooManyListenersException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/TooManyListenersException.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,7 +44,7 @@
* @see java.util.EventListener
*
* @author Laurence P. G. Cable
- * @since JDK1.1
+ * @since 1.1
*/
public class TooManyListenersException extends Exception {
--- a/jdk/src/share/classes/java/util/Vector.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/Vector.java Wed Jun 18 13:14:15 2014 -0700
@@ -82,7 +82,7 @@
* @author Jonathan Payne
* @see Collection
* @see LinkedList
- * @since JDK1.0
+ * @since 1.0
*/
public class Vector<E>
extends AbstractList<E>
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentHashMap.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentHashMap.java Wed Jun 18 13:14:15 2014 -0700
@@ -133,12 +133,12 @@
* mapped values are (perhaps transiently) not used or all take the
* same mapping value.
*
- * <p>A ConcurrentHashMap can be used as scalable frequency map (a
+ * <p>A ConcurrentHashMap can be used as a scalable frequency map (a
* form of histogram or multiset) by using {@link
* java.util.concurrent.atomic.LongAdder} values and initializing via
* {@link #computeIfAbsent computeIfAbsent}. For example, to add a count
* to a {@code ConcurrentHashMap<String,LongAdder> freqs}, you can use
- * {@code freqs.computeIfAbsent(k -> new LongAdder()).increment();}
+ * {@code freqs.computeIfAbsent(key, k -> new LongAdder()).increment();}
*
* <p>This class and its views and iterators implement all of the
* <em>optional</em> methods of the {@link Map} and {@link Iterator}
--- a/jdk/src/share/classes/java/util/concurrent/atomic/LongAdder.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/concurrent/atomic/LongAdder.java Wed Jun 18 13:14:15 2014 -0700
@@ -57,7 +57,7 @@
* frequency map (a form of histogram or multiset). For example, to
* add a count to a {@code ConcurrentHashMap<String,LongAdder> freqs},
* initializing if not already present, you can use {@code
- * freqs.computeIfAbsent(k -> new LongAdder()).increment();}
+ * freqs.computeIfAbsent(key, k -> new LongAdder()).increment();}
*
* <p>This class extends {@link Number}, but does <em>not</em> define
* methods such as {@code equals}, {@code hashCode} and {@code
--- a/jdk/src/share/classes/java/util/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -50,6 +50,6 @@
Framework Design FAQ</b></a>
</ul>
-@since JDK1.0
+@since 1.0
</body>
</html>
--- a/jdk/src/share/classes/java/util/prefs/Base64.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/prefs/Base64.java Wed Jun 18 13:14:15 2014 -0700
@@ -57,7 +57,7 @@
int numFullGroups = aLen/3;
int numBytesInPartialGroup = aLen - 3*numFullGroups;
int resultLen = 4*((aLen + 2)/3);
- StringBuffer result = new StringBuffer(resultLen);
+ StringBuilder result = new StringBuilder(resultLen);
char[] intToAlpha = (alternate ? intToAltBase64 : intToBase64);
// Translate all full groups from byte array elements to Base64
--- a/jdk/src/share/classes/java/util/prefs/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/prefs/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -39,6 +39,6 @@
<h2>Related Documentation</h2>
-->
-@since JDK1.4
+@since 1.4
</body>
</html>
--- a/jdk/src/share/classes/java/util/regex/PatternSyntaxException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/regex/PatternSyntaxException.java Wed Jun 18 13:14:15 2014 -0700
@@ -105,7 +105,7 @@
* @return The full detail message
*/
public String getMessage() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append(desc);
if (index >= 0) {
sb.append(" near index ");
--- a/jdk/src/share/classes/java/util/zip/ZipException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/zip/ZipException.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
*
* @author unascribed
* @see java.io.IOException
- * @since JDK1.0
+ * @since 1.0
*/
public
--- a/jdk/src/share/classes/java/util/zip/package.html Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/java/util/zip/package.html Wed Jun 18 13:14:15 2014 -0700
@@ -81,7 +81,7 @@
</ul>
-->
-@since JDK1.1
+@since 1.1
</body>
</html>
--- a/jdk/src/share/classes/javax/imageio/stream/ImageInputStreamImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/imageio/stream/ImageInputStreamImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -289,7 +289,7 @@
}
public String readLine() throws IOException {
- StringBuffer input = new StringBuffer();
+ StringBuilder input = new StringBuilder();
int c = -1;
boolean eol = false;
--- a/jdk/src/share/classes/javax/management/modelmbean/RequiredModelMBean.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/management/modelmbean/RequiredModelMBean.java Wed Jun 18 13:14:15 2014 -0700
@@ -1215,7 +1215,7 @@
ReflectUtil.checkPackageAccess(className);
final ClassLoader targetClassLoader =
rmmbClass.getClassLoader();
- Class clz = Class.forName(className, false,
+ Class<?> clz = Class.forName(className, false,
targetClassLoader);
if (!rmmbClass.isAssignableFrom(clz))
return null;
@@ -1673,12 +1673,12 @@
// inequality may come from type subclassing
boolean subtype;
try {
- final Class respClass = response.getClass();
+ final Class<?> respClass = response.getClass();
final Exception[] caughException = new Exception[1];
AccessControlContext stack = AccessController.getContext();
- Class c = javaSecurityAccess.doIntersectionPrivilege(new PrivilegedAction<Class<?>>() {
+ Class<?> c = javaSecurityAccess.doIntersectionPrivilege(new PrivilegedAction<Class<?>>() {
@Override
public Class<?> run() {
@@ -2855,7 +2855,7 @@
AccessControlContext stack = AccessController.getContext();
final ClassNotFoundException[] caughtException = new ClassNotFoundException[1];
- Class c = javaSecurityAccess.doIntersectionPrivilege(new PrivilegedAction<Class<?>>() {
+ Class<?> c = javaSecurityAccess.doIntersectionPrivilege(new PrivilegedAction<Class<?>>() {
@Override
public Class<?> run() {
--- a/jdk/src/share/classes/javax/management/remote/rmi/RMIConnector.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/management/remote/rmi/RMIConnector.java Wed Jun 18 13:14:15 2014 -0700
@@ -2011,13 +2011,13 @@
if (nullSubjectConnRef == null
|| (conn = nullSubjectConnRef.get()) == null) {
conn = new RemoteMBeanServerConnection(null);
- nullSubjectConnRef = new WeakReference(conn);
+ nullSubjectConnRef = new WeakReference<MBeanServerConnection>(conn);
}
} else {
WeakReference<MBeanServerConnection> wr = rmbscMap.get(delegationSubject);
if (wr == null || (conn = wr.get()) == null) {
conn = new RemoteMBeanServerConnection(delegationSubject);
- rmbscMap.put(delegationSubject, new WeakReference(conn));
+ rmbscMap.put(delegationSubject, new WeakReference<MBeanServerConnection>(conn));
}
}
return conn;
@@ -2115,7 +2115,7 @@
PrivilegedExceptionAction<Constructor<?>> action =
new PrivilegedExceptionAction<Constructor<?>>() {
public Constructor<?> run() throws Exception {
- Class thisClass = RMIConnector.class;
+ Class<RMIConnector> thisClass = RMIConnector.class;
ClassLoader thisLoader = thisClass.getClassLoader();
ProtectionDomain thisProtectionDomain =
thisClass.getProtectionDomain();
@@ -2354,7 +2354,7 @@
PrivilegedExceptionAction<Class<?>> action =
new PrivilegedExceptionAction<Class<?>>() {
public Class<?> run() throws Exception {
- Class thisClass = RMIConnector.class;
+ Class<RMIConnector> thisClass = RMIConnector.class;
ClassLoader thisLoader = thisClass.getClassLoader();
ProtectionDomain thisProtectionDomain =
thisClass.getProtectionDomain();
--- a/jdk/src/share/classes/javax/naming/BinaryRefAddr.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/naming/BinaryRefAddr.java Wed Jun 18 13:14:15 2014 -0700
@@ -165,7 +165,7 @@
* @return The non-null string representation of this address.
*/
public String toString(){
- StringBuffer str = new StringBuffer("Address Type: " + addrType + "\n");
+ StringBuilder str = new StringBuilder("Address Type: " + addrType + "\n");
str.append("AddressContents: ");
for (int i = 0; i<buf.length && i < 32; i++) {
--- a/jdk/src/share/classes/javax/naming/NameImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/naming/NameImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -104,7 +104,7 @@
String endQuote;
boolean start = true;
boolean one = false;
- StringBuffer answer = new StringBuffer(len);
+ StringBuilder answer = new StringBuilder(len);
while (i < len) {
// handle quoted strings
--- a/jdk/src/share/classes/javax/naming/RefAddr.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/naming/RefAddr.java Wed Jun 18 13:14:15 2014 -0700
@@ -139,7 +139,7 @@
* @return The non-null string representation of this address.
*/
public String toString(){
- StringBuffer str = new StringBuffer("Type: " + addrType + "\n");
+ StringBuilder str = new StringBuilder("Type: " + addrType + "\n");
str.append("Content: " + getContent() + "\n");
return (str.toString());
--- a/jdk/src/share/classes/javax/naming/Reference.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/naming/Reference.java Wed Jun 18 13:14:15 2014 -0700
@@ -364,13 +364,13 @@
* @return The non-null string representation of this reference.
*/
public String toString() {
- StringBuffer buf = new StringBuffer("Reference Class Name: " +
- className + "\n");
+ StringBuilder sb = new StringBuilder("Reference Class Name: " +
+ className + "\n");
int len = addrs.size();
for (int i = 0; i < len; i++)
- buf.append(get(i).toString());
+ sb.append(get(i).toString());
- return buf.toString();
+ return sb.toString();
}
/**
--- a/jdk/src/share/classes/javax/naming/directory/BasicAttribute.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/naming/directory/BasicAttribute.java Wed Jun 18 13:14:15 2014 -0700
@@ -211,7 +211,7 @@
* @return The non-null string representation of this attribute.
*/
public String toString() {
- StringBuffer answer = new StringBuffer(attrID + ": ");
+ StringBuilder answer = new StringBuilder(attrID + ": ");
if (values.size() == 0) {
answer.append("No values");
} else {
--- a/jdk/src/share/classes/javax/print/MimeType.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/print/MimeType.java Wed Jun 18 13:14:15 2014 -0700
@@ -285,7 +285,7 @@
*/
private String getStringValue() {
if (myStringValue == null) {
- StringBuffer result = new StringBuffer();
+ StringBuilder result = new StringBuilder();
result.append (myPieces[0]);
result.append ('/');
result.append (myPieces[1]);
@@ -510,7 +510,7 @@
int n = s.length();
int i;
char c;
- StringBuffer result = new StringBuffer (n+2);
+ StringBuilder result = new StringBuilder (n+2);
result.append ('\"');
for (i = 0; i < n; ++ i) {
c = s.charAt (i);
--- a/jdk/src/share/classes/javax/print/attribute/ResolutionSyntax.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/print/attribute/ResolutionSyntax.java Wed Jun 18 13:14:15 2014 -0700
@@ -241,7 +241,7 @@
* (unchecked exception) Thrown if {@code units < 1}.
*/
public String toString(int units, String unitsName) {
- StringBuffer result = new StringBuffer();
+ StringBuilder result = new StringBuilder();
result.append(getCrossFeedResolution (units));
result.append('x');
result.append(getFeedResolution (units));
@@ -326,7 +326,7 @@
* resolution. The values are reported in the internal units of dphi.
*/
public String toString() {
- StringBuffer result = new StringBuffer();
+ StringBuilder result = new StringBuilder();
result.append(crossFeedResolution);
result.append('x');
result.append(feedResolution);
--- a/jdk/src/share/classes/javax/print/attribute/SetOfIntegerSyntax.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/print/attribute/SetOfIntegerSyntax.java Wed Jun 18 13:14:15 2014 -0700
@@ -540,7 +540,7 @@
* <CODE>"<I>i</I>-<I>j</I>"</CODE> otherwise.
*/
public String toString() {
- StringBuffer result = new StringBuffer();
+ StringBuilder result = new StringBuilder();
int n = members.length;
for (int i = 0; i < n; i++) {
if (i > 0) {
--- a/jdk/src/share/classes/javax/print/attribute/Size2DSyntax.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/print/attribute/Size2DSyntax.java Wed Jun 18 13:14:15 2014 -0700
@@ -257,7 +257,7 @@
* (unchecked exception) Thrown if {@code units < 1}.
*/
public String toString(int units, String unitsName) {
- StringBuffer result = new StringBuffer();
+ StringBuilder result = new StringBuilder();
result.append(getX (units));
result.append('x');
result.append(getY (units));
@@ -312,7 +312,7 @@
* The values are reported in the internal units of micrometers.
*/
public String toString() {
- StringBuffer result = new StringBuffer();
+ StringBuilder result = new StringBuilder();
result.append(x);
result.append('x');
result.append(y);
--- a/jdk/src/share/classes/javax/security/auth/callback/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/security/auth/callback/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,6 +30,6 @@
* or passwords, for example) or to display information
* (error and warning messages, for example).
*
- * @since JDK1.4
+ * @since 1.4
*/
package javax.security.auth.callback;
--- a/jdk/src/share/classes/javax/security/auth/kerberos/KerberosTicket.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/security/auth/kerberos/KerberosTicket.java Wed Jun 18 13:14:15 2014 -0700
@@ -636,11 +636,11 @@
public String toString() {
if (destroyed)
throw new IllegalStateException("This ticket is no longer valid");
- StringBuffer caddrBuf = new StringBuffer();
+ StringBuilder caddrString = new StringBuilder();
if (clientAddresses != null) {
for (int i = 0; i < clientAddresses.length; i++) {
- caddrBuf.append("clientAddresses[" + i + "] = " +
- clientAddresses[i].toString());
+ caddrString.append("clientAddresses[" + i + "] = " +
+ clientAddresses[i].toString());
}
}
return ("Ticket (hex) = " + "\n" +
@@ -660,7 +660,7 @@
"End Time = " + endTime.toString() + "\n" +
"Renew Till = " + String.valueOf(renewTill) + "\n" +
"Client Addresses " +
- (clientAddresses == null ? " Null " : caddrBuf.toString() +
+ (clientAddresses == null ? " Null " : caddrString.toString() +
"\n"));
}
--- a/jdk/src/share/classes/javax/security/auth/kerberos/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/security/auth/kerberos/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -54,6 +54,6 @@
* string or a boolean value. A boolean value can be one of "true", "false",
* "yes", or "no", case-insensitive.<p>
*
- * @since JDK1.4
+ * @since 1.4
*/
package javax.security.auth.kerberos;
--- a/jdk/src/share/classes/javax/security/auth/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/security/auth/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,6 +33,6 @@
* based on code location, code signers and code executors
* (Subjects).
*
- * @since JDK1.4
+ * @since 1.4
*/
package javax.security.auth;
--- a/jdk/src/share/classes/javax/security/auth/spi/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/security/auth/spi/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -27,6 +27,6 @@
* This package provides the interface to be used for
* implementing pluggable authentication modules.
*
- * @since JDK1.4
+ * @since 1.4
*/
package javax.security.auth.spi;
--- a/jdk/src/share/classes/javax/security/auth/x500/package-info.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/security/auth/x500/package-info.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,6 +44,6 @@
* Directory Information Models</a></li>
* </ul>
*
- * @since JDK1.4
+ * @since 1.4
*/
package javax.security.auth.x500;
--- a/jdk/src/share/classes/javax/sound/sampled/CompoundControl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sound/sampled/CompoundControl.java Wed Jun 18 13:14:15 2014 -0700
@@ -74,18 +74,18 @@
@Override
public String toString() {
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < controls.length; i++) {
if (i != 0) {
- buf.append(", ");
+ sb.append(", ");
if ((i + 1) == controls.length) {
- buf.append("and ");
+ sb.append("and ");
}
}
- buf.append(controls[i].getType());
+ sb.append(controls[i].getType());
}
- return new String(getType() + " Control containing " + buf + " Controls.");
+ return new String(getType() + " Control containing " + sb + " Controls.");
}
/**
--- a/jdk/src/share/classes/javax/sound/sampled/DataLine.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sound/sampled/DataLine.java Wed Jun 18 13:14:15 2014 -0700
@@ -470,23 +470,23 @@
@Override
public String toString() {
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if ( (formats.length == 1) && (formats[0] != null) ) {
- buf.append(" supporting format " + formats[0]);
+ sb.append(" supporting format " + formats[0]);
} else if (getFormats().length > 1) {
- buf.append(" supporting " + getFormats().length + " audio formats");
+ sb.append(" supporting " + getFormats().length + " audio formats");
}
if ( (minBufferSize != AudioSystem.NOT_SPECIFIED) && (maxBufferSize != AudioSystem.NOT_SPECIFIED) ) {
- buf.append(", and buffers of " + minBufferSize + " to " + maxBufferSize + " bytes");
+ sb.append(", and buffers of " + minBufferSize + " to " + maxBufferSize + " bytes");
} else if ( (minBufferSize != AudioSystem.NOT_SPECIFIED) && (minBufferSize > 0) ) {
- buf.append(", and buffers of at least " + minBufferSize + " bytes");
+ sb.append(", and buffers of at least " + minBufferSize + " bytes");
} else if (maxBufferSize != AudioSystem.NOT_SPECIFIED) {
- buf.append(", and buffers of up to " + minBufferSize + " bytes");
+ sb.append(", and buffers of up to " + minBufferSize + " bytes");
}
- return new String(super.toString() + buf);
+ return new String(super.toString() + sb);
}
}
}
--- a/jdk/src/share/classes/javax/sql/CommonDataSource.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/CommonDataSource.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,6 +34,7 @@
* Interface that defines the methods which are common between <code>DataSource</code>,
* <code>XADataSource</code> and <code>ConnectionPoolDataSource</code>.
*
+ * @since 1.6
*/
public interface CommonDataSource {
--- a/jdk/src/share/classes/javax/sql/rowset/BaseRowSet.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/BaseRowSet.java Wed Jun 18 13:14:15 2014 -0700
@@ -291,6 +291,8 @@
* extending class overrides and reimplements any <code>BaseRowSet</code> method and encounters
* connectivity or underlying data source issues, that method <b>may</b> in addition throw an
* <code>SQLException</code> object for that reason.
+*
+* @since 1.5
*/
public abstract class BaseRowSet implements Serializable, Cloneable {
--- a/jdk/src/share/classes/javax/sql/rowset/CachedRowSet.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/CachedRowSet.java Wed Jun 18 13:14:15 2014 -0700
@@ -626,6 +626,7 @@
* </PRE>
*
* @author Jonathan Bruce
+ * @since 1.5
*/
public interface CachedRowSet extends RowSet, Joinable {
--- a/jdk/src/share/classes/javax/sql/rowset/FilteredRowSet.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/FilteredRowSet.java Wed Jun 18 13:14:15 2014 -0700
@@ -122,6 +122,7 @@
* synchronized with the data source.
*
* @author Jonathan Bruce
+ * @since 1.5
*/
public interface FilteredRowSet extends WebRowSet {
--- a/jdk/src/share/classes/javax/sql/rowset/JdbcRowSet.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/JdbcRowSet.java Wed Jun 18 13:14:15 2014 -0700
@@ -118,6 +118,7 @@
* requirements of connected and disconnected <code>RowSet</code> objects.
*
* @author Jonathan Bruce
+ * @since 1.5
*/
public interface JdbcRowSet extends RowSet, Joinable {
--- a/jdk/src/share/classes/javax/sql/rowset/JoinRowSet.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/JoinRowSet.java Wed Jun 18 13:14:15 2014 -0700
@@ -217,6 +217,7 @@
* This method creates a copy that can be persisted to the data source.
* </UL>
*
+ * @since 1.5
*/
public interface JoinRowSet extends WebRowSet {
--- a/jdk/src/share/classes/javax/sql/rowset/Joinable.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/Joinable.java Wed Jun 18 13:14:15 2014 -0700
@@ -129,6 +129,7 @@
*
* @see JoinRowSet
* @author Jonathan Bruce
+ * @since 1.5
*/
public interface Joinable {
--- a/jdk/src/share/classes/javax/sql/rowset/Predicate.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/Predicate.java Wed Jun 18 13:14:15 2014 -0700
@@ -97,6 +97,7 @@
* applications that use both column identification conventions.
*
* @author Jonathan Bruce, Amit Handa
+ * @since 1.5
*
*/
--- a/jdk/src/share/classes/javax/sql/rowset/RowSetMetaDataImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/RowSetMetaDataImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -48,6 +48,8 @@
* Therefore, any <code>RowSetMetaDataImpl</code> method that retrieves information
* is defined as having unspecified behavior when it is called
* before the <code>RowSet</code> object contains data.
+ *
+ * @since 1.5
*/
public class RowSetMetaDataImpl implements RowSetMetaData, Serializable {
--- a/jdk/src/share/classes/javax/sql/rowset/RowSetWarning.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/RowSetWarning.java Wed Jun 18 13:14:15 2014 -0700
@@ -50,6 +50,8 @@
* The inherited methods <code>getMessage</code>, <code>getSQLState</code>,
* and <code>getErrorCode</code> retrieve information contained in a
* <code>RowSetWarning</code> object.
+ *
+ * @since 1.5
*/
public class RowSetWarning extends SQLException {
--- a/jdk/src/share/classes/javax/sql/rowset/WebRowSet.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/WebRowSet.java Wed Jun 18 13:14:15 2014 -0700
@@ -408,6 +408,7 @@
* @see javax.sql.rowset.CachedRowSet
* @see javax.sql.rowset.FilteredRowSet
* @see javax.sql.rowset.JoinRowSet
+ * @since 1.5
*/
public interface WebRowSet extends CachedRowSet {
--- a/jdk/src/share/classes/javax/sql/rowset/serial/SQLOutputImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/serial/SQLOutputImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -52,6 +52,8 @@
* to write data from the <code>SQLData</code> object to
* the <code>SQLOutputImpl</code> output stream as the
* representation of an SQL user-defined type.
+ *
+ * @since 1.5
*/
public class SQLOutputImpl implements SQLOutput {
--- a/jdk/src/share/classes/javax/sql/rowset/serial/SerialArray.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/serial/SerialArray.java Wed Jun 18 13:14:15 2014 -0700
@@ -56,6 +56,7 @@
* SerialArray is to be used by more than one thread then access to the
* SerialArray should be controlled by appropriate synchronization.
*
+ * @since 1.5
*/
public class SerialArray implements Array, Serializable, Cloneable {
--- a/jdk/src/share/classes/javax/sql/rowset/serial/SerialBlob.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/serial/SerialBlob.java Wed Jun 18 13:14:15 2014 -0700
@@ -58,6 +58,7 @@
* should be controlled by appropriate synchronization.
*
* @author Jonathan Bruce
+ * @since 1.5
*/
public class SerialBlob implements Blob, Serializable, Cloneable {
--- a/jdk/src/share/classes/javax/sql/rowset/serial/SerialClob.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/serial/SerialClob.java Wed Jun 18 13:14:15 2014 -0700
@@ -49,7 +49,9 @@
* <p> A SerialClob is not safe for use by multiple concurrent threads. If a
* SerialClob is to be used by more than one thread then access to the SerialClob
* should be controlled by appropriate synchronization.
+ *
* @author Jonathan Bruce
+ * @since 1.5
*/
public class SerialClob implements Clob, Serializable, Cloneable {
--- a/jdk/src/share/classes/javax/sql/rowset/serial/SerialDatalink.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/serial/SerialDatalink.java Wed Jun 18 13:14:15 2014 -0700
@@ -48,6 +48,8 @@
* A SerialDatalink is not safe for use by multiple concurrent threads. If a
* SerialDatalink is to be used by more than one thread then access to the
* SerialDatalink should be controlled by appropriate synchronization.
+ *
+ * @since 1.5
*/
public class SerialDatalink implements Serializable, Cloneable {
--- a/jdk/src/share/classes/javax/sql/rowset/serial/SerialException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/serial/SerialException.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,6 +32,7 @@
* SQL types such as <code>BLOB, CLOB, STRUCT or ARRAY</code> in
* addition to SQL types such as <code>DATALINK and JAVAOBJECT</code>
*
+ * @since 1.5
*/
public class SerialException extends java.sql.SQLException {
--- a/jdk/src/share/classes/javax/sql/rowset/serial/SerialJavaObject.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/serial/SerialJavaObject.java Wed Jun 18 13:14:15 2014 -0700
@@ -54,6 +54,7 @@
* SerialJavaObject should be controlled by appropriate synchronization.
*
* @author Jonathan Bruce
+ * @since 1.5
*/
public class SerialJavaObject implements Serializable, Cloneable {
--- a/jdk/src/share/classes/javax/sql/rowset/serial/SerialRef.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/serial/SerialRef.java Wed Jun 18 13:14:15 2014 -0700
@@ -43,6 +43,7 @@
* SerialRef is to be used by more than one thread then access to the SerialRef
* should be controlled by appropriate synchronization.
*
+ * @since 1.5
*/
public class SerialRef implements Ref, Serializable, Cloneable {
--- a/jdk/src/share/classes/javax/sql/rowset/serial/SerialStruct.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/serial/SerialStruct.java Wed Jun 18 13:14:15 2014 -0700
@@ -57,6 +57,7 @@
* SerialStruct is to be used by more than one thread then access to the
* SerialStruct should be controlled by appropriate synchronization.
*
+ * @since 1.5
*/
public class SerialStruct implements Struct, Serializable, Cloneable {
--- a/jdk/src/share/classes/javax/sql/rowset/spi/SyncFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/spi/SyncFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -200,6 +200,7 @@
* @author Jonathan Bruce
* @see javax.sql.rowset.spi.SyncProvider
* @see javax.sql.rowset.spi.SyncFactoryException
+ * @since 1.5
*/
public class SyncFactory {
--- a/jdk/src/share/classes/javax/sql/rowset/spi/SyncFactoryException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/spi/SyncFactoryException.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,6 +35,7 @@
* @author Jonathan Bruce
* @see javax.sql.rowset.spi.SyncFactory
* @see javax.sql.rowset.spi.SyncFactoryException
+ * @since 1.5
*/
public class SyncFactoryException extends java.sql.SQLException {
--- a/jdk/src/share/classes/javax/sql/rowset/spi/SyncProvider.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/spi/SyncProvider.java Wed Jun 18 13:14:15 2014 -0700
@@ -209,6 +209,7 @@
* @author Jonathan Bruce
* @see javax.sql.rowset.spi.SyncFactory
* @see javax.sql.rowset.spi.SyncFactoryException
+ * @since 1.5
*/
public abstract class SyncProvider {
--- a/jdk/src/share/classes/javax/sql/rowset/spi/SyncProviderException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/spi/SyncProviderException.java Wed Jun 18 13:14:15 2014 -0700
@@ -61,6 +61,7 @@
* @see javax.sql.rowset.spi.SyncFactory
* @see javax.sql.rowset.spi.SyncResolver
* @see javax.sql.rowset.spi.SyncFactoryException
+ * @since 1.5
*/
public class SyncProviderException extends java.sql.SQLException {
--- a/jdk/src/share/classes/javax/sql/rowset/spi/SyncResolver.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/spi/SyncResolver.java Wed Jun 18 13:14:15 2014 -0700
@@ -231,7 +231,9 @@
* }
* }
* }</PRE>
+ *
* @author Jonathan Bruce
+ * @since 1.5
*/
public interface SyncResolver extends RowSet {
--- a/jdk/src/share/classes/javax/sql/rowset/spi/TransactionalWriter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/spi/TransactionalWriter.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,6 +44,8 @@
* the <code>CachedRowSet</code> constant <code>COMMIT_ON_ACCEPT_CHANGES</code>
* to <code>false</code> and use the <code>commit</code> and <code>rollback</code>
* methods defined in this interface to manage transaction boundaries.
+ *
+ * @since 1.5
*/
public interface TransactionalWriter extends RowSetWriter {
--- a/jdk/src/share/classes/javax/sql/rowset/spi/XmlReader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/spi/XmlReader.java Wed Jun 18 13:14:15 2014 -0700
@@ -46,6 +46,8 @@
* rowset's <code>xmlReader</code> field. When the <code>WebRowSet</code>
* object's <code>readXml</code> method is invoked, it in turn invokes
* its XML reader's <code>readXML</code> method.
+ *
+ * @since 1.5
*/
public interface XmlReader extends RowSetReader {
--- a/jdk/src/share/classes/javax/sql/rowset/spi/XmlWriter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/sql/rowset/spi/XmlWriter.java Wed Jun 18 13:14:15 2014 -0700
@@ -44,6 +44,8 @@
* Writing a <code>WebRowSet</code> object includes printing the
* rowset's data, metadata, and properties, all with the
* appropriate XML tags.
+ *
+ * @since 1.5
*/
public interface XmlWriter extends RowSetWriter {
--- a/jdk/src/share/classes/javax/swing/AbstractButton.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/AbstractButton.java Wed Jun 18 13:14:15 2014 -0700
@@ -947,6 +947,7 @@
* <p>
* This is a JavaBeans bound property.
*
+ * @param iconTextGap the space between icon and text if these properties are set.
* @since 1.4
* @see #getIconTextGap
* @beaninfo
@@ -1337,6 +1338,7 @@
* that of the <code>Action</code>.
*
* @param a the button's action
+ * @return the {@code PropertyChangeListener}
* @since 1.3
* @see Action
* @see #setAction
@@ -2070,12 +2072,20 @@
}
}
-
+ /**
+ * Returns {@code ActionListener} that is added to model.
+ *
+ * @return the {@code ActionListener}
+ */
protected ActionListener createActionListener() {
return getHandler();
}
-
+ /**
+ * Returns {@code ItemListener} that is added to model.
+ *
+ * @return the {@code ItemListener}
+ */
protected ItemListener createItemListener() {
return getHandler();
}
@@ -2148,7 +2158,7 @@
return listenerList.getListeners(ItemListener.class);
}
- /**
+ /**
* Returns an array (length 1) containing the label or
* <code>null</code> if the button is not selected.
*
@@ -2164,6 +2174,12 @@
return selectedObjects;
}
+ /**
+ * Initialization of the {@code AbstractButton}.
+ *
+ * @param text the text of the button
+ * @param icon the Icon image to display on the button
+ */
protected void init(String text, Icon icon) {
if(text != null) {
setText(text);
--- a/jdk/src/share/classes/javax/swing/AbstractSpinnerModel.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/AbstractSpinnerModel.java Wed Jun 18 13:14:15 2014 -0700
@@ -131,6 +131,7 @@
* myAbstractSpinnerModel.getListeners(ChangeListener.class);
* </pre>
*
+ * @param <T> the type of requested listeners
* @param listenerType the type of listeners to return, e.g. ChangeListener.class
* @return all of the objects receiving <em>listenerType</em> notifications
* from this model
--- a/jdk/src/share/classes/javax/swing/Action.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/Action.java Wed Jun 18 13:14:15 2014 -0700
@@ -337,6 +337,9 @@
/**
* Gets one of this object's properties
* using the associated key.
+ *
+ * @param key a {@code String} containing the key
+ * @return the {@code Object} value
* @see #putValue
*/
public Object getValue(String key);
--- a/jdk/src/share/classes/javax/swing/ActionMap.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/ActionMap.java Wed Jun 18 13:14:15 2014 -0700
@@ -94,6 +94,9 @@
* for <code>key</code>.
* <p>In most instances, <code>key</code> will be
* <code>action.getValue(NAME)</code>.
+ *
+ * @param key a key
+ * @param action a binding for {@code key}
*/
public void put(Object key, Action action) {
if (key == null) {
@@ -113,6 +116,9 @@
/**
* Returns the binding for <code>key</code>, messaging the
* parent <code>ActionMap</code> if the binding is not locally defined.
+ *
+ * @param key a key
+ * @return the binding for {@code key}
*/
public Action get(Object key) {
Action value = (arrayTable == null) ? null :
@@ -130,6 +136,8 @@
/**
* Removes the binding for <code>key</code> from this <code>ActionMap</code>.
+ *
+ * @param key a key
*/
public void remove(Object key) {
if (arrayTable != null) {
@@ -148,6 +156,8 @@
/**
* Returns the <code>Action</code> names that are bound in this <code>ActionMap</code>.
+ *
+ * @return an array of the keys
*/
public Object[] keys() {
if (arrayTable == null) {
@@ -172,6 +182,8 @@
* Returns an array of the keys defined in this <code>ActionMap</code> and
* its parent. This method differs from <code>keys()</code> in that
* this method includes the keys defined in the parent.
+ *
+ * @return an array of the keys
*/
public Object[] allKeys() {
int count = size();
--- a/jdk/src/share/classes/javax/swing/ButtonGroup.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/ButtonGroup.java Wed Jun 18 13:14:15 2014 -0700
@@ -167,9 +167,11 @@
}
/**
- * Returns whether a <code>ButtonModel</code> is selected.
- * @return <code>true</code> if the button is selected,
- * otherwise returns <code>false</code>
+ * Returns whether a {@code ButtonModel} is selected.
+ *
+ * @param m an isntance of {@code ButtonModel}
+ * @return {@code true} if the button is selected,
+ * otherwise returns {@code false}
*/
public boolean isSelected(ButtonModel m) {
return (m == selection);
--- a/jdk/src/share/classes/javax/swing/ComboBoxEditor.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/ComboBoxEditor.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,23 +34,44 @@
*/
public interface ComboBoxEditor {
- /** Return the component that should be added to the tree hierarchy for
- * this editor
- */
+ /**
+ * Returns the component that should be added to the tree hierarchy for
+ * this editor
+ *
+ * @return the component
+ */
public Component getEditorComponent();
- /** Set the item that should be edited. Cancel any editing if necessary **/
+ /**
+ * Set the item that should be edited. Cancel any editing if necessary
+ *
+ * @param anObject an item
+ */
public void setItem(Object anObject);
- /** Return the edited item **/
+ /**
+ * Returns the edited item
+ *
+ * @return the edited item
+ */
public Object getItem();
- /** Ask the editor to start editing and to select everything **/
+ /**
+ * Ask the editor to start editing and to select everything
+ */
public void selectAll();
- /** Add an ActionListener. An action event is generated when the edited item changes **/
+ /**
+ * Add an ActionListener. An action event is generated when the edited item changes
+ *
+ * @param l an {@code ActionListener}
+ */
public void addActionListener(ActionListener l);
- /** Remove an ActionListener **/
+ /**
+ * Remove an ActionListener
+ *
+ * @param l an {@code ActionListener}
+ */
public void removeActionListener(ActionListener l);
}
--- a/jdk/src/share/classes/javax/swing/ComponentInputMap.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/ComponentInputMap.java Wed Jun 18 13:14:15 2014 -0700
@@ -78,7 +78,9 @@
}
/**
- * Returns the component the <code>InputMap</code> was created for.
+ * Returns the component the {@code InputMap} was created for.
+ *
+ * @return the component the {@code InputMap} was created for.
*/
public JComponent getComponent() {
return component;
--- a/jdk/src/share/classes/javax/swing/DefaultButtonModel.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/DefaultButtonModel.java Wed Jun 18 13:14:15 2014 -0700
@@ -477,6 +477,7 @@
* If no such listeners exist,
* this method returns an empty array.
*
+ * @param <T> the type of requested listeners
* @param listenerType the type of listeners requested;
* this parameter should specify an interface
* that descends from <code>java.util.EventListener</code>
--- a/jdk/src/share/classes/javax/swing/FocusManager.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/FocusManager.java Wed Jun 18 13:14:15 2014 -0700
@@ -140,6 +140,7 @@
* Returns whether the application has invoked
* <code>disableSwingFocusManager()</code>.
*
+ * @return {@code true} if focus manager is enabled.
* @see #disableSwingFocusManager
* @deprecated As of 1.4, replaced by
* <code>KeyboardFocusManager.getDefaultFocusTraversalPolicy()</code>
--- a/jdk/src/share/classes/javax/swing/GroupLayout.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/GroupLayout.java Wed Jun 18 13:14:15 2014 -0700
@@ -670,6 +670,7 @@
* @param resizable whether the group is resizable
* @param anchorBaselineToTop whether the baseline is anchored to
* the top or bottom of the group
+ * @return the {@code ParallelGroup}
* @see #createBaselineGroup
* @see ParallelGroup
*/
--- a/jdk/src/share/classes/javax/swing/JColorChooser.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/JColorChooser.java Wed Jun 18 13:14:15 2014 -0700
@@ -542,7 +542,7 @@
* @return a string representation of this <code>JColorChooser</code>
*/
protected String paramString() {
- StringBuffer chooserPanelsString = new StringBuffer("");
+ StringBuilder chooserPanelsString = new StringBuilder("");
for (int i=0; i<chooserPanels.length; i++) {
chooserPanelsString.append("[" + chooserPanels[i].toString()
+ "]");
--- a/jdk/src/share/classes/javax/swing/JComboBox.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/JComboBox.java Wed Jun 18 13:14:15 2014 -0700
@@ -232,6 +232,13 @@
updateUI();
}
+ /**
+ * Registers ancestor listener so that it will receive
+ * {@code AncestorEvents} when it or any of its ancestors
+ * move or are made visible or invisible.
+ * Events are also sent when the component or its ancestors are added
+ * or removed from the containment hierarchy.
+ */
protected void installAncestorListener() {
addAncestorListener(new AncestorListener(){
public void ancestorAdded(AncestorEvent event){ hidePopup();}
@@ -812,6 +819,8 @@
/**
* Sets the visibility of the popup.
+ *
+ * @param v if {@code true} shows the popup, otherwise, hides the popup.
*/
public void setPopupVisible(boolean v) {
getUI().setPopupVisible(this, v);
@@ -1144,6 +1153,7 @@
* that of the <code>Action</code>.
*
* @param a the combobox's action
+ * @return the {@code PropertyChangeListener}
* @since 1.3
* @see Action
* @see #setAction
@@ -1359,6 +1369,8 @@
*
* @param keyChar a char, typically this is a keyboard key
* typed by the user
+ * @return {@code true} if there is an item corresponding to that character.
+ * Otherwise, returns {@code false}.
*/
public boolean selectWithKeyChar(char keyChar) {
int index;
@@ -1445,6 +1457,7 @@
* selection. Typically, the first selection with a matching first
* character becomes the selected item.
*
+ * @param aManager a key selection manager
* @beaninfo
* expert: true
* description: The objects that changes the selection when a key is pressed.
--- a/jdk/src/share/classes/javax/swing/JOptionPane.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/JOptionPane.java Wed Jun 18 13:14:15 2014 -0700
@@ -435,6 +435,7 @@
* @exception HeadlessException if
* <code>GraphicsEnvironment.isHeadless</code> returns
* <code>true</code>
+ * @return user's input
* @see java.awt.GraphicsEnvironment#isHeadless
*/
public static String showInputDialog(Object message)
@@ -451,6 +452,7 @@
* @param message the <code>Object</code> to display
* @param initialSelectionValue the value used to initialize the input
* field
+ * @return user's input
* @since 1.4
*/
public static String showInputDialog(Object message, Object initialSelectionValue) {
@@ -469,6 +471,7 @@
* @exception HeadlessException if
* <code>GraphicsEnvironment.isHeadless</code> returns
* <code>true</code>
+ * @return user's input
* @see java.awt.GraphicsEnvironment#isHeadless
*/
public static String showInputDialog(Component parentComponent,
@@ -489,6 +492,7 @@
* @param message the <code>Object</code> to display
* @param initialSelectionValue the value used to initialize the input
* field
+ * @return user's input
* @since 1.4
*/
public static String showInputDialog(Component parentComponent, Object message,
@@ -515,6 +519,7 @@
* <code>WARNING_MESSAGE</code>,
* <code>QUESTION_MESSAGE</code>,
* or <code>PLAIN_MESSAGE</code>
+ * @return user's input
* @exception HeadlessException if
* <code>GraphicsEnvironment.isHeadless</code> returns
* <code>true</code>
@@ -1348,6 +1353,7 @@
* @param parentComponent the parent <code>Component</code>
* for the dialog
* @param message the <code>Object</code> to display
+ * @return user's input
*/
public static String showInternalInputDialog(Component parentComponent,
Object message) {
@@ -1368,6 +1374,7 @@
* @param messageType the type of message that is to be displayed:
* ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE,
* QUESTION_MESSAGE, or PLAIN_MESSAGE
+ * @return user's input
*/
public static String showInternalInputDialog(Component parentComponent,
Object message, String title, int messageType) {
@@ -2246,6 +2253,8 @@
* <p>
* This is a bound property.
*
+ * @param newValue if true, an input component whose parent is {@code parentComponent}
+ * is provided to allow the user to input a value.
* @see #setSelectionValues
* @see #setInputValue
* @beaninfo
--- a/jdk/src/share/classes/javax/swing/JProgressBar.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/JProgressBar.java Wed Jun 18 13:14:15 2014 -0700
@@ -665,6 +665,7 @@
* to the {@code ChangeListener}s that have been added directly to the
* progress bar.
*
+ * @return the instance of a custom {@code ChangeListener} implementation.
* @see #changeListener
* @see #fireStateChanged
* @see javax.swing.event.ChangeListener
--- a/jdk/src/share/classes/javax/swing/JRadioButton.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/JRadioButton.java Wed Jun 18 13:14:15 2014 -0700
@@ -118,6 +118,7 @@
* Creates a radiobutton where properties are taken from the
* Action supplied.
*
+ * @param a an {@code Action}
* @since 1.3
*/
public JRadioButton(Action a) {
@@ -175,6 +176,8 @@
*
* @param text the string displayed on the radio button
* @param icon the image that the button should display
+ * @param selected if {@code true}, the button is initially selected
+ * otherwise, the button is initially unselected
*/
public JRadioButton (String text, Icon icon, boolean selected) {
super(text, icon, selected);
--- a/jdk/src/share/classes/javax/swing/JRadioButtonMenuItem.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/JRadioButtonMenuItem.java Wed Jun 18 13:14:15 2014 -0700
@@ -173,6 +173,8 @@
*
* @param text the string displayed on the radio button
* @param icon the image that the button should display
+ * @param selected if {@code true}, the button is initially selected,
+ * otherwise, the button is initially unselected
*/
public JRadioButtonMenuItem(String text, Icon icon, boolean selected) {
super(text, icon);
--- a/jdk/src/share/classes/javax/swing/JScrollBar.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/JScrollBar.java Wed Jun 18 13:14:15 2014 -0700
@@ -149,6 +149,12 @@
* @see #setVisibleAmount
* @see #setMinimum
* @see #setMaximum
+ *
+ * @param orientation an orientation of the {@code JScrollBar}
+ * @param value an int giving the current value
+ * @param extent an int giving the amount by which the value can "jump"
+ * @param min an int giving the minimum value
+ * @param max an int giving the maximum value
*/
public JScrollBar(int orientation, int value, int extent, int min, int max)
{
@@ -172,6 +178,8 @@
* value = 0
* extent = 10
* </pre>
+ *
+ * @param orientation an orientation of the {@code JScrollBar}
*/
public JScrollBar(int orientation) {
this(orientation, 0, 10, 0, 100);
@@ -213,6 +221,7 @@
* Returns the delegate that implements the look and feel for
* this component.
*
+ * @return the scroll bar's current UI.
* @see JComponent#setUI
*/
public ScrollBarUI getUI() {
@@ -258,6 +267,7 @@
* Set the scrollbar's orientation to either VERTICAL or
* HORIZONTAL.
*
+ * @param orientation an orientation of the {@code JScrollBar}
* @exception IllegalArgumentException if orientation is not one of VERTICAL, HORIZONTAL
* @see #getOrientation
* @beaninfo
@@ -293,6 +303,8 @@
* Returns data model that handles the scrollbar's four
* fundamental properties: minimum, maximum, value, extent.
*
+ * @return the data model
+ *
* @see #setModel
*/
public BoundedRangeModel getModel() {
@@ -304,6 +316,7 @@
* Sets the model that handles the scrollbar's four
* fundamental properties: minimum, maximum, value, extent.
*
+ * @param newModel a new model
* @see #getModel
* @beaninfo
* bound: true
@@ -583,6 +596,8 @@
* scrollbar model will not generate ChangeEvents while
* valueIsAdjusting is true.
*
+ * @param b {@code true} if the upcoming changes to the value property are part of a series
+ *
* @see #getValueIsAdjusting
* @see BoundedRangeModel#setValueIsAdjusting
* @beaninfo
@@ -610,6 +625,10 @@
* minimum ≤ value ≤ value+extent ≤ maximum
* </pre>
*
+ * @param newValue an int giving the current value
+ * @param newExtent an int giving the amount by which the value can "jump"
+ * @param newMin an int giving the minimum value
+ * @param newMax an int giving the maximum value
*
* @see BoundedRangeModel#setRangeProperties
* @see #setValue
@@ -681,6 +700,10 @@
/**
* Notify listeners that the scrollbar's model has changed.
*
+ * @param id an integer indicating the type of event.
+ * @param type an integer indicating the adjustment type.
+ * @param value the current value of the adjustment
+ *
* @see #addAdjustmentListener
* @see EventListenerList
*/
--- a/jdk/src/share/classes/javax/swing/JToggleButton.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/JToggleButton.java Wed Jun 18 13:14:15 2014 -0700
@@ -140,6 +140,7 @@
* Creates a toggle button where properties are taken from the
* Action supplied.
*
+ * @param a an instance of an {@code Action}
* @since 1.3
*/
public JToggleButton(Action a) {
@@ -390,6 +391,9 @@
protected class AccessibleJToggleButton extends AccessibleAbstractButton
implements ItemListener {
+ /**
+ * Constructs {@code AccessibleJToggleButton}
+ */
public AccessibleJToggleButton() {
super();
JToggleButton.this.addItemListener(this);
--- a/jdk/src/share/classes/javax/swing/JToolBar.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/JToolBar.java Wed Jun 18 13:14:15 2014 -0700
@@ -161,6 +161,8 @@
/**
* Returns the tool bar's current UI.
+ *
+ * @return the tool bar's current UI.
* @see #setUI
*/
public ToolBarUI getUI() {
@@ -555,7 +557,8 @@
* or <code>null</code> if the default
* property change listener for the control is desired.
*
- * @return <code>null</code>
+ * @param b a {@code JButton}
+ * @return {@code null}
*/
protected PropertyChangeListener createActionChangeListener(JButton b) {
return null;
--- a/jdk/src/share/classes/javax/swing/JTree.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/JTree.java Wed Jun 18 13:14:15 2014 -0700
@@ -986,6 +986,7 @@
* or equal to 0 the height for each row is determined by the
* renderer.
*
+ * @return the height of each row
*/
public int getRowHeight()
{
@@ -1115,6 +1116,7 @@
* <p>
* This is a bound property.
*
+ * @param clickCount the number of mouse clicks to get a node expanded or closed
* @since 1.3
* @beaninfo
* bound: true
@@ -1508,6 +1510,7 @@
* is provided as an entry point for subclassers to add filtered
* editing without having to resort to creating a new editor.
*
+ * @param path a {@code TreePath} identifying a node
* @return true if every parent node and the node itself is editable
* @see #isEditable
*/
@@ -1984,6 +1987,8 @@
/**
* Returns true if the node identified by the path has ever been
* expanded.
+ *
+ * @param path a {@code TreePath} identifying a node
* @return true if the <code>path</code> has ever been expanded
*/
public boolean hasBeenExpanded(TreePath path) {
@@ -2079,6 +2084,7 @@
* which means it is either the root or all of its parents are expanded.
* Otherwise, this method returns false.
*
+ * @param path {@code TreePath} identifying a node
* @return true if the node is viewable, otherwise false
*/
public boolean isVisible(TreePath path) {
@@ -2472,6 +2478,7 @@
* set the selection model to <code>null</code>, which forces an empty
* selection model to be used.
*
+ * @return the model for selections
* @see #setSelectionModel
*/
public TreeSelectionModel getSelectionModel() {
@@ -2817,6 +2824,7 @@
*
* @param path the <code>TreePath</code> indicating the node that was
* expanded
+ * @throws ExpandVetoException if the expansion is prevented from occurring
* @see EventListenerList
*/
public void fireTreeWillExpand(TreePath path) throws ExpandVetoException {
@@ -2843,6 +2851,7 @@
*
* @param path the <code>TreePath</code> indicating the node that was
* expanded
+ * @throws ExpandVetoException if the collapse is prevented from occurring
* @see EventListenerList
*/
public void fireTreeWillCollapse(TreePath path) throws ExpandVetoException {
@@ -3541,6 +3550,11 @@
* <code>path</code> are marked EXPANDED, but <code>path</code> itself
* is marked collapsed.<p>
* This will fail if a <code>TreeWillExpandListener</code> vetos it.
+ *
+ * @param path a {@code TreePath} identifying a node
+ * @param state if {@code true}, all parents of @{code path} and path are marked as expanded.
+ * Otherwise, all parents of {@code path} are marked EXPANDED,
+ * but {@code path} itself is marked collapsed.
*/
protected void setExpandedState(TreePath path, boolean state) {
if(path != null) {
@@ -3636,9 +3650,12 @@
}
/**
- * Returns an <code>Enumeration</code> of <code>TreePaths</code>
+ * Returns an {@code Enumeration} of {@code TreePaths}
* that have been expanded that
- * are descendants of <code>parent</code>.
+ * are descendants of {@code parent}.
+ *
+ * @param parent a path
+ * @return the {@code Enumeration} of {@code TreePaths}
*/
protected Enumeration<TreePath>
getDescendantToggledPaths(TreePath parent)
@@ -3701,6 +3718,8 @@
* <p>
* For more information on what expanded state means, see the
* <a href=#jtree_description>JTree description</a> above.
+ *
+ * @return the instance of {@code TreeModelHandler}
*/
protected TreeModelListener createTreeModelListener() {
return new TreeModelHandler();
@@ -3711,6 +3730,9 @@
* <code>path</code>. If <code>includePath</code> is true and
* <code>path</code> is selected, it will be removed from the selection.
*
+ * @param path a path
+ * @param includePath is {@code true} and {@code path} is selected,
+ * it will be removed from the selection.
* @return true if a descendant was selected
* @since 1.3
*/
@@ -3891,6 +3913,9 @@
* elements are added is children, otherwise if <code>children</code>
* is a hashtable all the key/value pairs are added in the order
* <code>Enumeration</code> returns them.
+ *
+ * @param parent the parent node
+ * @param children the children
*/
public static void createChildren(DefaultMutableTreeNode parent,
Object children) {
@@ -4113,6 +4138,9 @@
TreePath leadSelectionPath;
Accessible leadSelectionAccessible;
+ /**
+ * Constructs {@code AccessibleJTree}
+ */
public AccessibleJTree() {
// Add a tree model listener for JTree
TreeModel model = JTree.this.getModel();
@@ -4551,7 +4579,11 @@
private boolean isLeaf = false;
/**
- * Constructs an AccessibleJTreeNode
+ * Constructs an AccessibleJTreeNode
+ *
+ * @param t an instance of {@code JTree}
+ * @param p an instance of {@code TreePath}
+ * @param ap an instance of {@code Accessible}
* @since 1.4
*/
public AccessibleJTreeNode(JTree t, TreePath p, Accessible ap) {
@@ -5183,6 +5215,11 @@
}
}
+ /**
+ * Returns the relative location of the node
+ *
+ * @return the relative location of the node
+ */
protected Point getLocationInJTree() {
Rectangle r = tree.getPathBounds(path);
if (r != null) {
--- a/jdk/src/share/classes/javax/swing/ListSelectionModel.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/ListSelectionModel.java Wed Jun 18 13:14:15 2014 -0700
@@ -134,18 +134,25 @@
/**
* Returns the first selected index or -1 if the selection is empty.
+ *
+ * @return the first selected index or -1 if the selection is empty.
*/
int getMinSelectionIndex();
/**
* Returns the last selected index or -1 if the selection is empty.
+ *
+ * @return the last selected index or -1 if the selection is empty.
*/
int getMaxSelectionIndex();
/**
* Returns true if the specified index is selected.
+ *
+ * @param index an index
+ * @return {@code true} if the specified index is selected
*/
boolean isSelectedIndex(int index);
@@ -158,6 +165,7 @@
* indices specially, e.g. Windows95 displays the lead index with a
* dotted yellow outline.
*
+ * @return the anchor selection index
* @see #getLeadSelectionIndex
* @see #setSelectionInterval
* @see #addSelectionInterval
@@ -168,6 +176,7 @@
/**
* Set the anchor selection index.
*
+ * @param index the anchor selection index
* @see #getAnchorSelectionIndex
*/
void setAnchorSelectionIndex(int index);
@@ -177,6 +186,7 @@
* Return the second index argument from the most recent call to
* setSelectionInterval(), addSelectionInterval() or removeSelectionInterval().
*
+ * @return the lead selection index.
* @see #getAnchorSelectionIndex
* @see #setSelectionInterval
* @see #addSelectionInterval
@@ -186,6 +196,7 @@
/**
* Set the lead selection index.
*
+ * @param index the lead selection index
* @see #getLeadSelectionIndex
*/
void setLeadSelectionIndex(int index);
@@ -200,20 +211,30 @@
/**
* Returns true if no indices are selected.
+ *
+ * @return {@code true} if no indices are selected.
*/
boolean isSelectionEmpty();
/**
- * Insert length indices beginning before/after index. This is typically
+ * Insert {@code length} indices beginning before/after {@code index}. This is typically
* called to sync the selection model with a corresponding change
* in the data model.
+ *
+ * @param index the beginning of the interval
+ * @param length the length of the interval
+ * @param before if {@code true}, interval inserts before the {@code index},
+ * otherwise, interval inserts after the {@code index}
*/
void insertIndexInterval(int index, int length, boolean before);
/**
- * Remove the indices in the interval index0,index1 (inclusive) from
+ * Remove the indices in the interval {@code index0,index1} (inclusive) from
* the selection model. This is typically called to sync the selection
* model width a corresponding change in the data model.
+ *
+ * @param index0 the beginning of the interval
+ * @param index1 the end of the interval
*/
void removeIndexInterval(int index0, int index1);
@@ -272,6 +293,7 @@
* In this mode, there's no restriction on what can be selected.
* </ul>
*
+ * @param selectionMode the selection mode
* @see #getSelectionMode
* @throws IllegalArgumentException if the selection mode isn't
* one of those allowed
--- a/jdk/src/share/classes/javax/swing/MultiUIDefaults.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/MultiUIDefaults.java Wed Jun 18 13:14:15 2014 -0700
@@ -190,18 +190,18 @@
@Override
public synchronized String toString() {
- StringBuffer buf = new StringBuffer();
- buf.append("{");
+ StringBuilder sb = new StringBuilder();
+ sb.append("{");
Enumeration keys = keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
- buf.append(key + "=" + get(key) + ", ");
+ sb.append(key + "=" + get(key) + ", ");
}
- int length = buf.length();
+ int length = sb.length();
if (length > 1) {
- buf.delete(length-2, length);
+ sb.delete(length-2, length);
}
- buf.append("}");
- return buf.toString();
+ sb.append("}");
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/javax/swing/RepaintManager.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/RepaintManager.java Wed Jun 18 13:14:15 2014 -0700
@@ -331,6 +331,7 @@
* for the event dispatching thread that will validate the components
* first isValidateRoot() ancestor.
*
+ * @param invalidComponent a component
* @see JComponent#isValidateRoot
* @see #removeInvalidComponent
*/
@@ -374,6 +375,7 @@
/**
* Remove a component from the list of invalid components.
*
+ * @param component a component
* @see #addInvalidComponent
*/
public synchronized void removeInvalidComponent(JComponent component) {
@@ -610,9 +612,13 @@
return false;
}
- /** Return the current dirty region for a component.
- * Return an empty rectangle if the component is not
- * dirty.
+ /**
+ * Return the current dirty region for a component.
+ * Return an empty rectangle if the component is not
+ * dirty.
+ *
+ * @param aComponent a component
+ * @return the region
*/
public Rectangle getDirtyRegion(JComponent aComponent) {
RepaintManager delegate = getDelegate(aComponent);
@@ -632,6 +638,8 @@
/**
* Mark a component completely dirty. <b>aComponent</b> will be
* completely painted during the next paintDirtyRegions() call.
+ *
+ * @param aComponent a component
*/
public void markCompletelyDirty(JComponent aComponent) {
RepaintManager delegate = getDelegate(aComponent);
@@ -645,6 +653,8 @@
/**
* Mark a component completely clean. <b>aComponent</b> will not
* get painted during the next paintDirtyRegions() call.
+ *
+ * @param aComponent a component
*/
public void markCompletelyClean(JComponent aComponent) {
RepaintManager delegate = getDelegate(aComponent);
@@ -662,6 +672,10 @@
* painted during the next paintDirtyRegions(). If computing dirty regions is
* expensive for your component, use this method and avoid computing dirty region
* if it return true.
+ *
+ * @param aComponent a component
+ * @return {@code true} if <b>aComponent</b> will be completely
+ * painted during the next paintDirtyRegions().
*/
public boolean isCompletelyDirty(JComponent aComponent) {
RepaintManager delegate = getDelegate(aComponent);
@@ -975,20 +989,26 @@
* @return a String representation of this object
*/
public synchronized String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if(dirtyComponents != null)
sb.append("" + dirtyComponents);
return sb.toString();
}
- /**
+ /**
* Return the offscreen buffer that should be used as a double buffer with
* the component <code>c</code>.
* By default there is a double buffer per RepaintManager.
* The buffer might be smaller than <code>(proposedWidth,proposedHeight)</code>
* This happens when the maximum double buffer size as been set for the receiving
* repaint manager.
+ *
+ * @param c the component
+ * @param proposedWidth the width of the buffer
+ * @param proposedHeight the height of the buffer
+ *
+ * @return the image
*/
public Image getOffscreenBuffer(Component c,int proposedWidth,int proposedHeight) {
RepaintManager delegate = getDelegate(c);
@@ -998,18 +1018,23 @@
return _getOffscreenBuffer(c, proposedWidth, proposedHeight);
}
- /**
- * Return a volatile offscreen buffer that should be used as a
- * double buffer with the specified component <code>c</code>.
- * The image returned will be an instance of VolatileImage, or null
- * if a VolatileImage object could not be instantiated.
- * This buffer might be smaller than <code>(proposedWidth,proposedHeight)</code>.
- * This happens when the maximum double buffer size has been set for this
- * repaint manager.
- *
- * @see java.awt.image.VolatileImage
- * @since 1.4
- */
+ /**
+ * Return a volatile offscreen buffer that should be used as a
+ * double buffer with the specified component <code>c</code>.
+ * The image returned will be an instance of VolatileImage, or null
+ * if a VolatileImage object could not be instantiated.
+ * This buffer might be smaller than <code>(proposedWidth,proposedHeight)</code>.
+ * This happens when the maximum double buffer size has been set for this
+ * repaint manager.
+ *
+ * @param c the component
+ * @param proposedWidth the width of the buffer
+ * @param proposedHeight the height of the buffer
+ *
+ * @return the volatile image
+ * @see java.awt.image.VolatileImage
+ * @since 1.4
+ */
public Image getVolatileOffscreenBuffer(Component c,
int proposedWidth,int proposedHeight) {
RepaintManager delegate = getDelegate(c);
@@ -1104,7 +1129,11 @@
}
- /** Set the maximum double buffer size. **/
+ /**
+ * Set the maximum double buffer size.
+ *
+ * @param d the dimension
+ */
public void setDoubleBufferMaximumSize(Dimension d) {
doubleBufferMaxSize = d;
if (doubleBufferMaxSize == null) {
--- a/jdk/src/share/classes/javax/swing/RootPaneContainer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/RootPaneContainer.java Wed Jun 18 13:14:15 2014 -0700
@@ -132,6 +132,7 @@
* Generally implemented with<pre>
* getRootPane().setLayeredPane(layeredPane);</pre>
*
+ * @param layeredPane the layered pane
* @exception java.awt.IllegalComponentStateException (a runtime
* exception) if the layered pane parameter is null
* @see #getLayeredPane
@@ -162,6 +163,7 @@
* Generally implemented with
* <code>getRootPane().setGlassPane(glassPane);</code>
*
+ * @param glassPane the glass pane
* @see #getGlassPane
* @see JRootPane#setGlassPane
*/
--- a/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java Wed Jun 18 13:14:15 2014 -0700
@@ -168,6 +168,8 @@
* };
* scrollpane.setLayout(mySPLayout):
* </pre>
+ *
+ * @param sp an instance of the {@code JScrollPane}
*/
public void syncWithScrollPane(JScrollPane sp) {
viewport = sp.getViewport();
@@ -1106,6 +1108,7 @@
* Returns the bounds of the border around the specified scroll pane's
* viewport.
*
+ * @param scrollpane an instance of the {@code JScrollPane}
* @return the size and position of the viewport border
* @deprecated As of JDK version Swing1.1
* replaced by <code>JScrollPane.getViewportBorderBounds()</code>.
--- a/jdk/src/share/classes/javax/swing/SwingUtilities.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/SwingUtilities.java Wed Jun 18 13:14:15 2014 -0700
@@ -103,15 +103,23 @@
}
/**
- * Return true if <code>a</code> contains <code>b</code>
+ * Return {@code true} if @{code a} contains {@code b}
+ *
+ * @param a the first rectangle
+ * @param b the second rectangle
+ *
+ * @return {@code true} if @{code a} contains {@code b}
*/
- public static final boolean isRectangleContainingRectangle(Rectangle a,Rectangle b) {
+ public static boolean isRectangleContainingRectangle(Rectangle a,Rectangle b) {
return b.x >= a.x && (b.x + b.width) <= (a.x + a.width) &&
b.y >= a.y && (b.y + b.height) <= (a.y + a.height);
}
/**
- * Return the rectangle (0,0,bounds.width,bounds.height) for the component <code>aComponent</code>
+ * Return the rectangle (0,0,bounds.width,bounds.height) for the component {@code aComponent}
+ *
+ * @param aComponent a component
+ * @return the local bounds for the component {@code aComponent}
*/
public static Rectangle getLocalBounds(Component aComponent) {
Rectangle b = new Rectangle(aComponent.getBounds());
@@ -165,6 +173,12 @@
* root component coordinate system.
* If both <code>source</code> and <code>destination</code> are {@code null}, return <code>aPoint</code>
* without any conversion.
+ *
+ * @param source the source component
+ * @param aPoint the point
+ * @param destination the destination component
+ *
+ * @return the converted coordinate
*/
public static Point convertPoint(Component source,Point aPoint,Component destination) {
Point p;
@@ -196,6 +210,13 @@
* root component coordinate system.
* If both <code>source</code> and <code>destination</code> are {@code null}, return <code>(x,y)</code>
* without any conversion.
+ *
+ * @param source the source component
+ * @param x the x-coordinate of the point
+ * @param y the y-coordinate of the point
+ * @param destination the destination component
+ *
+ * @return the converted coordinate
*/
public static Point convertPoint(Component source,int x, int y,Component destination) {
Point point = new Point(x,y);
@@ -211,6 +232,12 @@
* root component coordinate system.
* If both <code>source</code> and <code>destination</code> are {@code null}, return <code>aRectangle</code>
* without any conversion.
+ *
+ * @param source the source component
+ * @param aRectangle a rectangle
+ * @param destination the destination component
+ *
+ * @return the converted rectangle
*/
public static Rectangle convertRectangle(Component source,Rectangle aRectangle,Component destination) {
Point point = new Point(aRectangle.x,aRectangle.y);
@@ -222,6 +249,12 @@
* Convenience method for searching above <code>comp</code> in the
* component hierarchy and returns the first object of class <code>c</code> it
* finds. Can return {@code null}, if a class <code>c</code> cannot be found.
+ *
+ * @param c the class of a component
+ * @param comp the component
+ *
+ * @return the ancestor of the {@code comp},
+ * or {@code null} if {@code c} cannot be found.
*/
public static Container getAncestorOfClass(Class<?> c, Component comp)
{
@@ -238,6 +271,12 @@
* Convenience method for searching above <code>comp</code> in the
* component hierarchy and returns the first object of <code>name</code> it
* finds. Can return {@code null}, if <code>name</code> cannot be found.
+ *
+ * @param name the name of a component
+ * @param comp the component
+ *
+ * @return the ancestor of the {@code comp},
+ * or {@code null} if {@code name} cannot be found.
*/
public static Container getAncestorNamed(String name, Component comp) {
if(comp == null || name == null)
@@ -260,6 +299,8 @@
* @param parent the root component to begin the search
* @param x the x target location
* @param y the y target location
+ *
+ * @return the deepest component
*/
public static Component getDeepestComponentAt(Component parent, int x, int y) {
if (!parent.contains(x, y)) {
@@ -297,6 +338,12 @@
* to <code>destination</code> if destination is non-{@code null}
* use the translateMouseEvent() method to translate a mouse event from
* one component to another without changing the source.
+ *
+ * @param source the source component
+ * @param sourceEvent the source mouse event
+ * @param destination the destination component
+ *
+ * @return the new mouse event
*/
public static MouseEvent convertMouseEvent(Component source,
MouseEvent sourceEvent,
@@ -456,7 +503,11 @@
}
/**
- * Return <code>true</code> if a component <code>a</code> descends from a component <code>b</code>
+ * Return {@code true} if a component {@code a} descends from a component {@code b}
+ *
+ * @param a the first component
+ * @param b the second component
+ * @return {@code true} if a component {@code a} descends from a component {@code b}
*/
public static boolean isDescendingFrom(Component a,Component b) {
if(a == b)
@@ -531,6 +582,12 @@
* Convenience returning an array of rect representing the regions within
* <code>rectA</code> that do not overlap with <code>rectB</code>. If the
* two Rects do not overlap, returns an empty array
+ *
+ * @param rectA the first rectangle
+ * @param rectB the second rectangle
+ *
+ * @return an array of rectangles representing the regions within {@code rectA}
+ * that do not overlap with {@code rectB}.
*/
public static Rectangle[] computeDifference(Rectangle rectA,Rectangle rectB) {
if (rectB == null || !rectA.intersects(rectB) || isRectangleContainingRectangle(rectB,rectA)) {
@@ -841,6 +898,21 @@
* relative to the viewR rectangle.
* The JComponents orientation (LEADING/TRAILING) will also be taken
* into account and translated into LEFT/RIGHT values accordingly.
+ *
+ * @param c the component
+ * @param fm the instance of {@code FontMetrics}
+ * @param text the text
+ * @param icon the icon
+ * @param verticalAlignment the vertical alignment
+ * @param horizontalAlignment the horizontal alignment
+ * @param verticalTextPosition the vertical text position
+ * @param horizontalTextPosition the horizontal text position
+ * @param viewR the available rectangle
+ * @param iconR the rectangle for the icon
+ * @param textR the rectangle for the text
+ * @param textIconGap the gap between text and icon
+ *
+ * @return the possibly clipped version of the compound labels string
*/
public static String layoutCompoundLabel(JComponent c,
FontMetrics fm,
@@ -910,6 +982,20 @@
* values in horizontalTextPosition (they will default to RIGHT) and in
* horizontalAlignment (they will default to CENTER).
* Use the other version of layoutCompoundLabel() instead.
+ *
+ * @param fm the instance of {@code FontMetrics}
+ * @param text the text
+ * @param icon the icon
+ * @param verticalAlignment the vertical alignment
+ * @param horizontalAlignment the horizontal alignment
+ * @param verticalTextPosition the vertical text position
+ * @param horizontalTextPosition the horizontal text position
+ * @param viewR the available rectangle
+ * @param iconR the rectangle for the icon
+ * @param textR the rectangle for the text
+ * @param textIconGap the gap between text and icon
+ *
+ * @return the possibly clipped version of the compound labels string
*/
public static String layoutCompoundLabel(
FontMetrics fm,
@@ -1219,6 +1305,8 @@
* A simple minded look and feel change: ask each node in the tree
* to <code>updateUI()</code> -- that is, to initialize its UI property
* with the current look and feel.
+ *
+ * @param c the component
*/
public static void updateComponentTreeUI(Component c) {
updateComponentTreeUI0(c);
@@ -1284,6 +1372,7 @@
* <p>
* Unlike the rest of Swing, this method can be invoked from any thread.
*
+ * @param doRun the instance of {@code Runnable}
* @see #invokeAndWait
*/
public static void invokeLater(Runnable doRun) {
@@ -1334,6 +1423,7 @@
* As of 1.3 this method is just a cover for
* <code>java.awt.EventQueue.invokeAndWait()</code>.
*
+ * @param doRun the instance of {@code Runnable}
* @exception InterruptedException if we're interrupted while waiting for
* the event dispatching thread to finish executing
* <code>doRun.run()</code>
@@ -1374,6 +1464,7 @@
* Component.AccessibleAWTComponent.getAccessibleIndexInParent() instead
* of using this method.
*
+ * @param c the component
* @return -1 of this object does not have an accessible parent.
* Otherwise, the index of the child in its accessible parent.
*/
@@ -1386,6 +1477,8 @@
* local coordinate <code>Point</code>, if one exists.
* Otherwise returns <code>null</code>.
*
+ * @param c the component
+ * @param p the local coordinate
* @return the <code>Accessible</code> at the specified location,
* if it exists; otherwise <code>null</code>
*/
@@ -1431,6 +1524,7 @@
* Component.AccessibleAWTComponent.getAccessibleIndexInParent() instead
* of using this method.
*
+ * @param c the component
* @return an instance of AccessibleStateSet containing the current state
* set of the object
* @see AccessibleState
@@ -1448,6 +1542,7 @@
* Component.AccessibleAWTComponent.getAccessibleIndexInParent() instead
* of using this method.
*
+ * @param c the component
* @return the number of accessible children in the object.
*/
public static int getAccessibleChildrenCount(Component c) {
@@ -1461,6 +1556,7 @@
* Component.AccessibleAWTComponent.getAccessibleIndexInParent() instead
* of using this method.
*
+ * @param c the component
* @param i zero-based index of child
* @return the nth Accessible child of the object
*/
@@ -1502,6 +1598,8 @@
/**
* If c is a JRootPane descendant return its JRootPane ancestor.
* If c is a RootPaneContainer then return its JRootPane.
+ *
+ * @param c the component
* @return the JRootPane for Component c or {@code null}.
*/
public static JRootPane getRootPane(Component c) {
@@ -1519,6 +1617,8 @@
/**
* Returns the root component for the current component tree.
+ *
+ * @param c the component
* @return the first ancestor of c that's a Window or the last Applet ancestor
*/
public static Component getRoot(Component c) {
@@ -1616,6 +1716,14 @@
* This will return true if <code>action</code> is non-{@code null} and
* actionPerformed is invoked on it.
*
+ * @param action an action
+ * @param ks a key stroke
+ * @param event a key event
+ * @param sender a sender
+ * @param modifiers action modifiers
+ * @return {@code true} if {@code action} is non-{@code null} and
+ * actionPerformed is invoked on it.
+ *
* @since 1.3
*/
public static boolean notifyAction(Action action, KeyStroke ks,
@@ -1672,6 +1780,9 @@
* to <code>uiInputMap</code>. If <code>uiInputMap</code> is {@code null},
* this removes any previously installed UI InputMap.
*
+ * @param component a component
+ * @param type a type
+ * @param uiInputMap an {@code InputMap}
* @since 1.3
*/
public static void replaceUIInputMap(JComponent component, int type,
@@ -1694,6 +1805,8 @@
* to <code>uiActionMap</code>. If <code>uiActionMap</code> is {@code null},
* this removes any previously installed UI ActionMap.
*
+ * @param component a component
+ * @param uiActionMap an {@code ActionMap}
* @since 1.3
*/
public static void replaceUIActionMap(JComponent component,
@@ -1714,9 +1827,14 @@
/**
* Returns the InputMap provided by the UI for condition
* <code>condition</code> in component <code>component</code>.
- * <p>This will return {@code null} if the UI has not installed a InputMap
+ * <p>This will return {@code null} if the UI has not installed an InputMap
* of the specified type.
*
+ * @param component a component
+ * @param condition a condition
+ * @return the {@code ActionMap} provided by the UI for {@code condition}
+ * in the component, or {@code null} if the UI has not installed
+ * an InputMap of the specified type.
* @since 1.3
*/
public static InputMap getUIInputMap(JComponent component, int condition) {
@@ -1736,6 +1854,9 @@
* in component <code>component</code>.
* <p>This will return {@code null} if the UI has not installed an ActionMap.
*
+ * @param component a component
+ * @return the {@code ActionMap} provided by the UI in the component,
+ * or {@code null} if the UI has not installed an ActionMap.
* @since 1.3
*/
public static ActionMap getUIActionMap(JComponent component) {
--- a/jdk/src/share/classes/javax/swing/event/TreeModelEvent.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/event/TreeModelEvent.java Wed Jun 18 13:14:15 2014 -0700
@@ -292,24 +292,24 @@
* @return a String representation of this object
*/
public String toString() {
- StringBuffer retBuffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- retBuffer.append(getClass().getName() + " " +
- Integer.toString(hashCode()));
+ sb.append(getClass().getName() + " " +
+ Integer.toString(hashCode()));
if(path != null)
- retBuffer.append(" path " + path);
+ sb.append(" path " + path);
if(childIndices != null) {
- retBuffer.append(" indices [ ");
+ sb.append(" indices [ ");
for(int counter = 0; counter < childIndices.length; counter++)
- retBuffer.append(Integer.toString(childIndices[counter])+ " ");
- retBuffer.append("]");
+ sb.append(Integer.toString(childIndices[counter])+ " ");
+ sb.append("]");
}
if(children != null) {
- retBuffer.append(" children [ ");
+ sb.append(" children [ ");
for(int counter = 0; counter < children.length; counter++)
- retBuffer.append(children[counter] + " ");
- retBuffer.append("]");
+ sb.append(children[counter] + " ");
+ sb.append("]");
}
- return retBuffer.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java Wed Jun 18 13:14:15 2014 -0700
@@ -1322,8 +1322,8 @@
return null;
}
- StringBuffer plainBuf = new StringBuffer();
- StringBuffer htmlBuf = new StringBuffer();
+ StringBuilder plainBuf = new StringBuilder();
+ StringBuilder htmlBuf = new StringBuilder();
htmlBuf.append("<html>\n<body>\n<ul>\n");
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicListUI.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicListUI.java Wed Jun 18 13:14:15 2014 -0700
@@ -2855,23 +2855,23 @@
return null;
}
- StringBuffer plainBuf = new StringBuffer();
- StringBuffer htmlBuf = new StringBuffer();
+ StringBuilder plainStr = new StringBuilder();
+ StringBuilder htmlStr = new StringBuilder();
- htmlBuf.append("<html>\n<body>\n<ul>\n");
+ htmlStr.append("<html>\n<body>\n<ul>\n");
for (int i = 0; i < values.length; i++) {
Object obj = values[i];
String val = ((obj == null) ? "" : obj.toString());
- plainBuf.append(val + "\n");
- htmlBuf.append(" <li>" + val + "\n");
+ plainStr.append(val + "\n");
+ htmlStr.append(" <li>" + val + "\n");
}
// remove the last newline
- plainBuf.deleteCharAt(plainBuf.length() - 1);
- htmlBuf.append("</ul>\n</body>\n</html>");
+ plainStr.deleteCharAt(plainStr.length() - 1);
+ htmlStr.append("</ul>\n</body>\n</html>");
- return new BasicTransferable(plainBuf.toString(), htmlBuf.toString());
+ return new BasicTransferable(plainStr.toString(), htmlStr.toString());
}
return null;
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTableUI.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTableUI.java Wed Jun 18 13:14:15 2014 -0700
@@ -2182,29 +2182,29 @@
return null;
}
- StringBuffer plainBuf = new StringBuffer();
- StringBuffer htmlBuf = new StringBuffer();
+ StringBuilder plainStr = new StringBuilder();
+ StringBuilder htmlStr = new StringBuilder();
- htmlBuf.append("<html>\n<body>\n<table>\n");
+ htmlStr.append("<html>\n<body>\n<table>\n");
for (int row = 0; row < rows.length; row++) {
- htmlBuf.append("<tr>\n");
+ htmlStr.append("<tr>\n");
for (int col = 0; col < cols.length; col++) {
Object obj = table.getValueAt(rows[row], cols[col]);
String val = ((obj == null) ? "" : obj.toString());
- plainBuf.append(val + "\t");
- htmlBuf.append(" <td>" + val + "</td>\n");
+ plainStr.append(val + "\t");
+ htmlStr.append(" <td>" + val + "</td>\n");
}
// we want a newline at the end of each line and not a tab
- plainBuf.deleteCharAt(plainBuf.length() - 1).append("\n");
- htmlBuf.append("</tr>\n");
+ plainStr.deleteCharAt(plainStr.length() - 1).append("\n");
+ htmlStr.append("</tr>\n");
}
// remove the last newline
- plainBuf.deleteCharAt(plainBuf.length() - 1);
- htmlBuf.append("</table>\n</body>\n</html>");
+ plainStr.deleteCharAt(plainStr.length() - 1);
+ htmlStr.append("</table>\n</body>\n</html>");
- return new BasicTransferable(plainBuf.toString(), htmlBuf.toString());
+ return new BasicTransferable(plainStr.toString(), htmlStr.toString());
}
return null;
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTreeUI.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTreeUI.java Wed Jun 18 13:14:15 2014 -0700
@@ -3213,10 +3213,10 @@
return null;
}
- StringBuffer plainBuf = new StringBuffer();
- StringBuffer htmlBuf = new StringBuffer();
-
- htmlBuf.append("<html>\n<body>\n<ul>\n");
+ StringBuilder plainStr = new StringBuilder();
+ StringBuilder htmlStr = new StringBuilder();
+
+ htmlStr.append("<html>\n<body>\n<ul>\n");
TreeModel model = tree.getModel();
TreePath lastPath = null;
@@ -3227,17 +3227,17 @@
boolean leaf = model.isLeaf(node);
String label = getDisplayString(path, true, leaf);
- plainBuf.append(label + "\n");
- htmlBuf.append(" <li>" + label + "\n");
+ plainStr.append(label + "\n");
+ htmlStr.append(" <li>" + label + "\n");
}
// remove the last newline
- plainBuf.deleteCharAt(plainBuf.length() - 1);
- htmlBuf.append("</ul>\n</body>\n</html>");
+ plainStr.deleteCharAt(plainStr.length() - 1);
+ htmlStr.append("</ul>\n</body>\n</html>");
tree = null;
- return new BasicTransferable(plainBuf.toString(), htmlBuf.toString());
+ return new BasicTransferable(plainStr.toString(), htmlStr.toString());
}
return null;
--- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java Wed Jun 18 13:14:15 2014 -0700
@@ -618,20 +618,20 @@
}
private String fileNameString(File[] files) {
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; files != null && i < files.length; i++) {
if (i > 0) {
- buf.append(" ");
+ sb.append(" ");
}
if (files.length > 1) {
- buf.append("\"");
+ sb.append("\"");
}
- buf.append(fileNameString(files[i]));
+ sb.append(fileNameString(files[i]));
if (files.length > 1) {
- buf.append("\"");
+ sb.append("\"");
}
}
- return buf.toString();
+ return sb.toString();
}
/* The following methods are used by the PropertyChange Listener */
--- a/jdk/src/share/classes/javax/swing/plaf/nimbus/DerivedColor.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/plaf/nimbus/DerivedColor.java Wed Jun 18 13:14:15 2014 -0700
@@ -106,7 +106,7 @@
* @see #getRed
* @see #getGreen
* @see #getBlue
- * @since JDK1.0
+ * @since 1.0
*/
@Override public int getRGB() {
return argbValue;
--- a/jdk/src/share/classes/javax/swing/plaf/nimbus/State.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/plaf/nimbus/State.java Wed Jun 18 13:14:15 2014 -0700
@@ -179,35 +179,35 @@
}
private static String toString(int state) {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if ((state & SynthConstants.DEFAULT) == SynthConstants.DEFAULT) {
- buffer.append("Default");
+ sb.append("Default");
}
if ((state & SynthConstants.DISABLED) == SynthConstants.DISABLED) {
- if (buffer.length() > 0) buffer.append("+");
- buffer.append("Disabled");
+ if (sb.length() > 0) sb.append("+");
+ sb.append("Disabled");
}
if ((state & SynthConstants.ENABLED) == SynthConstants.ENABLED) {
- if (buffer.length() > 0) buffer.append("+");
- buffer.append("Enabled");
+ if (sb.length() > 0) sb.append("+");
+ sb.append("Enabled");
}
if ((state & SynthConstants.FOCUSED) == SynthConstants.FOCUSED) {
- if (buffer.length() > 0) buffer.append("+");
- buffer.append("Focused");
+ if (sb.length() > 0) sb.append("+");
+ sb.append("Focused");
}
if ((state & SynthConstants.MOUSE_OVER) == SynthConstants.MOUSE_OVER) {
- if (buffer.length() > 0) buffer.append("+");
- buffer.append("MouseOver");
+ if (sb.length() > 0) sb.append("+");
+ sb.append("MouseOver");
}
if ((state & SynthConstants.PRESSED) == SynthConstants.PRESSED) {
- if (buffer.length() > 0) buffer.append("+");
- buffer.append("Pressed");
+ if (sb.length() > 0) sb.append("+");
+ sb.append("Pressed");
}
if ((state & SynthConstants.SELECTED) == SynthConstants.SELECTED) {
- if (buffer.length() > 0) buffer.append("+");
- buffer.append("Selected");
+ if (sb.length() > 0) sb.append("+");
+ sb.append("Selected");
}
- return buffer.toString();
+ return sb.toString();
}
}
}
--- a/jdk/src/share/classes/javax/swing/plaf/synth/ParsedSynthStyle.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/ParsedSynthStyle.java Wed Jun 18 13:14:15 2014 -0700
@@ -156,7 +156,7 @@
}
public String toString() {
- StringBuffer text = new StringBuffer(super.toString());
+ StringBuilder text = new StringBuilder(super.toString());
if (_painters != null) {
text.append(",painters=[");
for (int i = 0; i < +_painters.length; i++) {
@@ -208,7 +208,7 @@
}
public String toString() {
- StringBuffer text = new StringBuffer(super.toString());
+ StringBuilder text = new StringBuilder(super.toString());
text.append(",painters=[");
if (_painterInfo != null) {
for (int i = 0; i < +_painterInfo.length; i++) {
--- a/jdk/src/share/classes/javax/swing/text/ComponentView.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/text/ComponentView.java Wed Jun 18 13:14:15 2014 -0700
@@ -439,7 +439,7 @@
* @param b If <code>true</code>, shows this component;
* otherwise, hides this component.
* @see #isVisible
- * @since JDK1.1
+ * @since 1.1
*/
public void setVisible(boolean b) {
super.setVisible(b);
--- a/jdk/src/share/classes/javax/swing/text/StyleContext.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/text/StyleContext.java Wed Jun 18 13:14:15 2014 -0700
@@ -1013,7 +1013,7 @@
*
* @return <code>true</code> if this enumeration contains more elements;
* <code>false</code> otherwise.
- * @since JDK1.0
+ * @since 1.0
*/
public boolean hasMoreElements() {
return i < attr.length;
@@ -1024,7 +1024,7 @@
*
* @return the next element of this enumeration.
* @exception NoSuchElementException if no more elements exist.
- * @since JDK1.0
+ * @since 1.0
*/
public Object nextElement() {
if (i < attr.length) {
--- a/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java Wed Jun 18 13:14:15 2014 -0700
@@ -1153,23 +1153,23 @@
*/
public String toString() {
int selCount = getSelectionCount();
- StringBuffer retBuffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
int[] rows;
if(rowMapper != null)
rows = rowMapper.getRowsForPaths(selection);
else
rows = null;
- retBuffer.append(getClass().getName() + " " + hashCode() + " [ ");
+ sb.append(getClass().getName() + " " + hashCode() + " [ ");
for(int counter = 0; counter < selCount; counter++) {
if(rows != null)
- retBuffer.append(selection[counter].toString() + "@" +
- Integer.toString(rows[counter])+ " ");
+ sb.append(selection[counter].toString() + "@" +
+ Integer.toString(rows[counter])+ " ");
else
- retBuffer.append(selection[counter].toString() + " ");
+ sb.append(selection[counter].toString() + " ");
}
- retBuffer.append("]");
- return retBuffer.toString();
+ sb.append("]");
+ return sb.toString();
}
/**
--- a/jdk/src/share/classes/javax/swing/tree/TreePath.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/tree/TreePath.java Wed Jun 18 13:14:15 2014 -0700
@@ -349,7 +349,7 @@
* @return a String representation of this object
*/
public String toString() {
- StringBuffer tempSpot = new StringBuffer("[");
+ StringBuilder tempSpot = new StringBuilder("[");
for(int counter = 0, maxCounter = getPathCount();counter < maxCounter;
counter++) {
--- a/jdk/src/share/classes/jdk/internal/util/xml/PropertiesDefaultHandler.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/jdk/internal/util/xml/PropertiesDefaultHandler.java Wed Jun 18 13:14:15 2014 -0700
@@ -42,7 +42,7 @@
* re-implemented using a subset of SAX
*
* @author Joe Wang
- * @since 8
+ * @since 1.8
*/
public class PropertiesDefaultHandler extends DefaultHandler {
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id: ApacheNodeSetData.java 1203890 2011-11-18 22:47:56Z mullan $
@@ -47,7 +47,7 @@
this.xi = xi;
}
- public Iterator iterator() {
+ public Iterator<Node> iterator() {
// If nodefilters are set, must execute them first to create node-set
if (xi.getNodeFilters() != null && !xi.getNodeFilters().isEmpty()) {
return Collections.unmodifiableSet
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java Wed Jun 18 13:14:15 2014 -0700
@@ -118,7 +118,7 @@
}
ExcC14NParameterSpec params = (ExcC14NParameterSpec)spec;
- StringBuffer prefixListAttr = new StringBuffer("");
+ StringBuilder prefixListAttr = new StringBuilder("");
@SuppressWarnings("unchecked")
List<String> prefixList = params.getPrefixList();
for (int i = 0, size = prefixList.size(); i < size; i++) {
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id: DOMKeyInfo.java 1333869 2012-05-04 10:42:44Z coheigea $
@@ -138,7 +138,7 @@
return id;
}
- public List getContent() {
+ public List<XMLStructure> getContent() {
return keyInfoTypes;
}
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id: DOMKeyInfoFactory.java 1333869 2012-05-04 10:42:44Z coheigea $
@@ -48,11 +48,12 @@
public DOMKeyInfoFactory() { }
+ @SuppressWarnings("rawtypes")
public KeyInfo newKeyInfo(List content) {
return newKeyInfo(content, null);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public KeyInfo newKeyInfo(List content, String id) {
return new DOMKeyInfo(content, id);
}
@@ -78,12 +79,12 @@
return newPGPData(keyId, null, null);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public PGPData newPGPData(byte[] keyId, byte[] keyPacket, List other) {
return new DOMPGPData(keyId, keyPacket, other);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public PGPData newPGPData(byte[] keyPacket, List other) {
return new DOMPGPData(keyPacket, other);
}
@@ -92,7 +93,7 @@
return newRetrievalMethod(uri, null, null);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public RetrievalMethod newRetrievalMethod(String uri, String type,
List transforms) {
if (uri == null) {
@@ -101,7 +102,7 @@
return new DOMRetrievalMethod(uri, type, transforms);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings("rawtypes")
public X509Data newX509Data(List content) {
return new DOMX509Data(content);
}
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyValue.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyValue.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id: DOMKeyValue.java 1333415 2012-05-03 12:03:51Z coheigea $
@@ -364,15 +364,16 @@
}
void getMethods() throws ClassNotFoundException, NoSuchMethodException {
- Class c = Class.forName("sun.security.ec.ECParameters");
- Class[] params = new Class[] { ECPoint.class, EllipticCurve.class };
+ Class<?> c = Class.forName("sun.security.ec.ECParameters");
+ Class<?>[] params = new Class<?>[] { ECPoint.class,
+ EllipticCurve.class };
encodePoint = c.getMethod("encodePoint", params);
- params = new Class[] { ECParameterSpec.class };
+ params = new Class<?>[] { ECParameterSpec.class };
getCurveName = c.getMethod("getCurveName", params);
- params = new Class[] { byte[].class, EllipticCurve.class };
+ params = new Class<?>[] { byte[].class, EllipticCurve.class };
decodePoint = c.getMethod("decodePoint", params);
c = Class.forName("sun.security.ec.NamedCurve");
- params = new Class[] { String.class };
+ params = new Class<?>[] { String.class };
getECParameterSpec = c.getMethod("getECParameterSpec", params);
}
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id: DOMManifest.java 1333415 2012-05-03 12:03:51Z coheigea $
@@ -127,7 +127,12 @@
return id;
}
- public List getReferences() {
+ @SuppressWarnings("unchecked")
+ static List<Reference> getManifestReferences(Manifest mf) {
+ return mf.getReferences();
+ }
+
+ public List<Reference> getReferences() {
return references;
}
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id: DOMPGPData.java 1203846 2011-11-18 21:18:17Z mullan $
@@ -184,7 +184,7 @@
return (keyPacket == null ? null : keyPacket.clone());
}
- public List getExternalElements() {
+ public List<XMLStructure> getExternalElements() {
return externalElements;
}
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* ===========================================================================
@@ -293,7 +293,7 @@
return type;
}
- public List getTransforms() {
+ public List<Transform> getTransforms() {
return Collections.unmodifiableList(allTransforms);
}
@@ -643,7 +643,7 @@
try {
final Set<Node> s = xsi.getNodeSet();
return new NodeSetData() {
- public Iterator iterator() { return s.iterator(); }
+ public Iterator<Node> iterator() { return s.iterator(); }
};
} catch (Exception e) {
// log a warning
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* ===========================================================================
@@ -177,7 +177,7 @@
return type;
}
- public List getTransforms() {
+ public List<Transform> getTransforms() {
return transforms;
}
@@ -245,7 +245,7 @@
// guard against RetrievalMethod loops
if ((data instanceof NodeSetData) && Utils.secureValidation(context)) {
NodeSetData nsd = (NodeSetData)data;
- Iterator i = nsd.iterator();
+ Iterator<?> i = nsd.iterator();
if (i.hasNext()) {
Node root = (Node)i.next();
if ("RetrievalMethod".equals(root.getLocalName())) {
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id: DOMSignatureProperties.java 1333415 2012-05-03 12:03:51Z coheigea $
@@ -125,7 +125,7 @@
}
}
- public List getProperties() {
+ public List<SignatureProperty> getProperties() {
return properties;
}
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id: DOMSignatureProperty.java 1333415 2012-05-03 12:03:51Z coheigea $
@@ -123,7 +123,7 @@
}
}
- public List getContent() {
+ public List<XMLStructure> getContent() {
return content;
}
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id: DOMSignedInfo.java 1333415 2012-05-03 12:03:51Z coheigea $
@@ -206,7 +206,7 @@
return id;
}
- public List getReferences() {
+ public List<Reference> getReferences() {
return references;
}
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id$
@@ -54,7 +54,7 @@
this.excludeComments = excludeComments;
}
- public Iterator iterator() {
+ public Iterator<Node> iterator() {
return new DelayedNodeIterator(root, excludeComments);
}
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id: DOMURIDereferencer.java 1231033 2012-01-13 12:12:12Z coheigea $
@@ -111,7 +111,8 @@
try {
ResourceResolver apacheResolver =
ResourceResolver.getInstance(uriAttr, baseURI, secVal);
- XMLSignatureInput in = apacheResolver.resolve(uriAttr, baseURI);
+ XMLSignatureInput in = apacheResolver.resolve(uriAttr,
+ baseURI, secVal);
if (in.isOctetStream()) {
return new ApacheOctetStreamData(in);
} else {
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509Data.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509Data.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id: DOMX509Data.java 1333415 2012-05-03 12:03:51Z coheigea $
@@ -135,7 +135,7 @@
this.content = Collections.unmodifiableList(content);
}
- public List getContent() {
+ public List<Object> getContent() {
return content;
}
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* $Id: DOMXMLObject.java 1333415 2012-05-03 12:03:51Z coheigea $
@@ -139,7 +139,7 @@
this.objectElem = objElem;
}
- public List getContent() {
+ public List<XMLStructure> getContent() {
return content;
}
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,7 +21,7 @@
* under the License.
*/
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
*/
/*
* ===========================================================================
@@ -188,7 +188,7 @@
return si;
}
- public List getObjects() {
+ public List<XMLObject> getObjects() {
return objects;
}
@@ -471,7 +471,8 @@
digestReference((DOMReference)xs, signContext);
} else if (xs instanceof Manifest) {
Manifest man = (Manifest)xs;
- List manRefs = man.getReferences();
+ List<Reference> manRefs =
+ DOMManifest.getManifestReferences(man);
for (int i = 0, size = manRefs.size(); i < size; i++) {
digestReference((DOMReference)manRefs.get(i),
signContext);
--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -58,7 +58,7 @@
return new DOMXMLSignature(si, ki, null, null, null);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public XMLSignature newXMLSignature(SignedInfo si, KeyInfo ki,
List objects, String id, String signatureValueId) {
return new DOMXMLSignature(si, ki, objects, id, signatureValueId);
@@ -68,13 +68,13 @@
return newReference(uri, dm, null, null, null);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public Reference newReference(String uri, DigestMethod dm, List transforms,
String type, String id) {
return new DOMReference(uri, type, dm, transforms, id, getProvider());
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public Reference newReference(String uri, DigestMethod dm,
List appliedTransforms, Data result, List transforms, String type,
String id) {
@@ -91,7 +91,7 @@
(uri, type, dm, appliedTransforms, result, transforms, id, getProvider());
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public Reference newReference(String uri, DigestMethod dm, List transforms,
String type, String id, byte[] digestValue) {
if (digestValue == null) {
@@ -101,41 +101,41 @@
(uri, type, dm, null, null, transforms, id, digestValue, getProvider());
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings("rawtypes")
public SignedInfo newSignedInfo(CanonicalizationMethod cm,
SignatureMethod sm, List references) {
return newSignedInfo(cm, sm, references, null);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public SignedInfo newSignedInfo(CanonicalizationMethod cm,
SignatureMethod sm, List references, String id) {
return new DOMSignedInfo(cm, sm, references, id);
}
// Object factory methods
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public XMLObject newXMLObject(List content, String id, String mimeType,
String encoding) {
return new DOMXMLObject(content, id, mimeType, encoding);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings("rawtypes")
public Manifest newManifest(List references) {
return newManifest(references, null);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public Manifest newManifest(List references, String id) {
return new DOMManifest(references, id);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public SignatureProperties newSignatureProperties(List props, String id) {
return new DOMSignatureProperties(props, id);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public SignatureProperty newSignatureProperty
(List info, String target, String id) {
return new DOMSignatureProperty(info, target, id);
--- a/jdk/src/share/classes/sun/applet/AppletClassLoader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/applet/AppletClassLoader.java Wed Jun 18 13:14:15 2014 -0700
@@ -357,7 +357,7 @@
* @param name the resource name
* @return an input stream for reading the resource, or <code>null</code>
* if the resource could not be found
- * @since JDK1.1
+ * @since 1.1
*/
public InputStream getResourceAsStream(String name)
{
@@ -417,7 +417,7 @@
* @param name the resource name
* @return an input stream for reading the resource, or <code>null</code>
* if the resource could not be found
- * @since JDK1.1
+ * @since 1.1
*/
public InputStream getResourceAsStreamFromJar(String name) {
--- a/jdk/src/share/classes/sun/applet/AppletSecurity.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/applet/AppletSecurity.java Wed Jun 18 13:14:15 2014 -0700
@@ -303,7 +303,7 @@
* This method calls <code>checkPermission</code> with the
* <code>AWTPermission("accessEventQueue")</code> permission.
*
- * @since JDK1.1
+ * @since 1.1
* @exception SecurityException if the caller does not have
* permission to access the AWT event queue.
*/
@@ -347,7 +347,7 @@
* @return the AppContext corresponding to the current context.
* @see sun.awt.AppContext
* @see java.lang.SecurityManager
- * @since JDK1.2.1
+ * @since 1.2.1
*/
public AppContext getAppContext() {
AppletClassLoader appletLoader = currentAppletClassLoader();
--- a/jdk/src/share/classes/sun/applet/AppletThreadGroup.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/applet/AppletThreadGroup.java Wed Jun 18 13:14:15 2014 -0700
@@ -55,7 +55,7 @@
* @exception SecurityException if the current thread cannot create a
* thread in the specified thread group.
* @see java.lang.SecurityException
- * @since JDK1.1.1
+ * @since 1.1.1
*/
public AppletThreadGroup(ThreadGroup parent, String name) {
super(parent, name);
--- a/jdk/src/share/classes/sun/applet/AppletViewer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/applet/AppletViewer.java Wed Jun 18 13:14:15 2014 -0700
@@ -1000,15 +1000,15 @@
* Scan identifier
*/
public static String scanIdentifier(Reader in) throws IOException {
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
while (true) {
if (((c >= 'a') && (c <= 'z')) ||
((c >= 'A') && (c <= 'Z')) ||
((c >= '0') && (c <= '9')) || (c == '_')) {
- buf.append((char)c);
+ sb.append((char) c);
c = in.read();
} else {
- return buf.toString();
+ return sb.toString();
}
}
}
@@ -1031,19 +1031,19 @@
quote = c;
c = in.read();
}
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
while ((c > 0) &&
(((quote < 0) && (c != ' ') && (c != '\t') &&
(c != '\n') && (c != '\r') && (c != '>'))
|| ((quote >= 0) && (c != quote)))) {
- buf.append((char)c);
+ sb.append((char) c);
c = in.read();
}
if (c == quote) {
c = in.read();
}
skipSpace(in);
- val = buf.toString();
+ val = sb.toString();
}
//statusMsgStream.println("PUT " + att + " = '" + val + "'");
if (! val.equals("")) {
--- a/jdk/src/share/classes/sun/awt/AWTSecurityManager.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/awt/AWTSecurityManager.java Wed Jun 18 13:14:15 2014 -0700
@@ -56,7 +56,7 @@
* @return the AppContext corresponding to the current context.
* @see sun.awt.AppContext
* @see java.lang.SecurityManager
- * @since JDK1.2.1
+ * @since 1.2.1
*/
public AppContext getAppContext() {
return null; // Default implementation returns null
--- a/jdk/src/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java Wed Jun 18 13:14:15 2014 -0700
@@ -60,7 +60,7 @@
* TBC
* </p>
*
- * @since JDK1.3.1
+ * @since 1.3.1
*
*/
public abstract class SunDragSourceContextPeer implements DragSourceContextPeer {
--- a/jdk/src/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java Wed Jun 18 13:14:15 2014 -0700
@@ -65,7 +65,7 @@
* the interaction between a windowing systems DnD system and Java.
* </p>
*
- * @since JDK1.3.1
+ * @since 1.3.1
*
*/
--- a/jdk/src/share/classes/sun/awt/image/MultiResolutionImage.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/awt/image/MultiResolutionImage.java Wed Jun 18 13:14:15 2014 -0700
@@ -69,7 +69,7 @@
* @param height the desired image resolution height.
* @return image resolution variant.
*
- * @since JDK1.8
+ * @since 1.8
*/
public Image getResolutionVariant(int width, int height);
@@ -77,7 +77,7 @@
* Gets list of all resolution variants including the base image
*
* @return list of resolution variants.
- * @since JDK1.8
+ * @since 1.8
*/
public List<Image> getResolutionVariants();
}
--- a/jdk/src/share/classes/sun/font/Decoration.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/font/Decoration.java Wed Jun 18 13:14:15 2014 -0700
@@ -428,17 +428,17 @@
public String toString() {
- StringBuffer buf = new StringBuffer();
- buf.append(super.toString());
- buf.append("[");
- if (fgPaint != null) buf.append("fgPaint: " + fgPaint);
- if (bgPaint != null) buf.append(" bgPaint: " + bgPaint);
- if (swapColors) buf.append(" swapColors: true");
- if (strikethrough) buf.append(" strikethrough: true");
- if (stdUnderline != null) buf.append(" stdUnderline: " + stdUnderline);
- if (imUnderline != null) buf.append(" imUnderline: " + imUnderline);
- buf.append("]");
- return buf.toString();
+ StringBuilder sb = new StringBuilder();
+ sb.append(super.toString());
+ sb.append("[");
+ if (fgPaint != null) sb.append("fgPaint: " + fgPaint);
+ if (bgPaint != null) sb.append(" bgPaint: " + bgPaint);
+ if (swapColors) sb.append(" swapColors: true");
+ if (strikethrough) sb.append(" strikethrough: true");
+ if (stdUnderline != null) sb.append(" stdUnderline: " + stdUnderline);
+ if (imUnderline != null) sb.append(" imUnderline: " + imUnderline);
+ sb.append("]");
+ return sb.toString();
}
}
}
--- a/jdk/src/share/classes/sun/font/ExtendedTextSourceLabel.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/font/ExtendedTextSourceLabel.java Wed Jun 18 13:14:15 2014 -0700
@@ -896,31 +896,31 @@
if (true) {
return source.toString(TextSource.WITHOUT_CONTEXT);
}
- StringBuffer buf = new StringBuffer();
- buf.append(super.toString());
- buf.append("[source:");
- buf.append(source.toString(TextSource.WITHOUT_CONTEXT));
- buf.append(", lb:");
- buf.append(lb);
- buf.append(", ab:");
- buf.append(ab);
- buf.append(", vb:");
- buf.append(vb);
- buf.append(", gv:");
- buf.append(gv);
- buf.append(", ci: ");
+ StringBuilder sb = new StringBuilder();
+ sb.append(super.toString());
+ sb.append("[source:");
+ sb.append(source.toString(TextSource.WITHOUT_CONTEXT));
+ sb.append(", lb:");
+ sb.append(lb);
+ sb.append(", ab:");
+ sb.append(ab);
+ sb.append(", vb:");
+ sb.append(vb);
+ sb.append(", gv:");
+ sb.append(gv);
+ sb.append(", ci: ");
if (charinfo == null) {
- buf.append("null");
+ sb.append("null");
} else {
- buf.append(charinfo[0]);
+ sb.append(charinfo[0]);
for (int i = 1; i < charinfo.length;) {
- buf.append(i % numvals == 0 ? "; " : ", ");
- buf.append(charinfo[i]);
+ sb.append(i % numvals == 0 ? "; " : ", ");
+ sb.append(charinfo[i]);
}
}
- buf.append("]");
+ sb.append("]");
- return buf.toString();
+ return sb.toString();
}
//public static ExtendedTextLabel create(TextSource source) {
--- a/jdk/src/share/classes/sun/font/StandardTextSource.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/font/StandardTextSource.java Wed Jun 18 13:14:15 2014 -0700
@@ -210,16 +210,16 @@
}
public String toString(boolean withContext) {
- StringBuffer buf = new StringBuffer(super.toString());
- buf.append("[start:");
- buf.append(start);
- buf.append(", len:" );
- buf.append(len);
- buf.append(", cstart:");
- buf.append(cstart);
- buf.append(", clen:" );
- buf.append(clen);
- buf.append(", chars:\"");
+ StringBuilder sb = new StringBuilder(super.toString());
+ sb.append("[start:");
+ sb.append(start);
+ sb.append(", len:" );
+ sb.append(len);
+ sb.append(", cstart:");
+ sb.append(cstart);
+ sb.append(", clen:" );
+ sb.append(clen);
+ sb.append(", chars:\"");
int chStart, chLimit;
if (withContext == WITH_CONTEXT) {
chStart = cstart;
@@ -231,23 +231,23 @@
}
for (int i = chStart; i < chLimit; ++i) {
if (i > chStart) {
- buf.append(" ");
+ sb.append(" ");
}
- buf.append(Integer.toHexString(chars[i]));
+ sb.append(Integer.toHexString(chars[i]));
}
- buf.append("\"");
- buf.append(", level:");
- buf.append(level);
- buf.append(", flags:");
- buf.append(flags);
- buf.append(", font:");
- buf.append(font);
- buf.append(", frc:");
- buf.append(frc);
- buf.append(", cm:");
- buf.append(cm);
- buf.append("]");
+ sb.append("\"");
+ sb.append(", level:");
+ sb.append(level);
+ sb.append(", flags:");
+ sb.append(flags);
+ sb.append(", font:");
+ sb.append(font);
+ sb.append(", frc:");
+ sb.append(frc);
+ sb.append(", cm:");
+ sb.append(cm);
+ sb.append("]");
- return buf.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/font/Type1Font.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/font/Type1Font.java Wed Jun 18 13:14:15 2014 -0700
@@ -529,7 +529,7 @@
}
private String expandName(String s, boolean tryExpandAbbreviations) {
- StringBuffer res = new StringBuffer(s.length() + 10);
+ StringBuilder res = new StringBuilder(s.length() + 10);
int start=0, end;
while(start < s.length()) {
--- a/jdk/src/share/classes/sun/java2d/opengl/OGLContext.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/java2d/opengl/OGLContext.java Wed Jun 18 13:14:15 2014 -0700
@@ -201,29 +201,29 @@
@Override
public String toString() {
- StringBuffer buf = new StringBuffer(super.toString());
+ StringBuilder sb = new StringBuilder(super.toString());
if ((caps & CAPS_EXT_FBOBJECT) != 0) {
- buf.append("CAPS_EXT_FBOBJECT|");
+ sb.append("CAPS_EXT_FBOBJECT|");
}
if ((caps & CAPS_STORED_ALPHA) != 0) {
- buf.append("CAPS_STORED_ALPHA|");
+ sb.append("CAPS_STORED_ALPHA|");
}
if ((caps & CAPS_DOUBLEBUFFERED) != 0) {
- buf.append("CAPS_DOUBLEBUFFERED|");
+ sb.append("CAPS_DOUBLEBUFFERED|");
}
if ((caps & CAPS_EXT_LCD_SHADER) != 0) {
- buf.append("CAPS_EXT_LCD_SHADER|");
+ sb.append("CAPS_EXT_LCD_SHADER|");
}
if ((caps & CAPS_EXT_BIOP_SHADER) != 0) {
- buf.append("CAPS_BIOP_SHADER|");
+ sb.append("CAPS_BIOP_SHADER|");
}
if ((caps & CAPS_EXT_GRAD_SHADER) != 0) {
- buf.append("CAPS_EXT_GRAD_SHADER|");
+ sb.append("CAPS_EXT_GRAD_SHADER|");
}
if ((caps & CAPS_EXT_TEXRECT) != 0) {
- buf.append("CAPS_EXT_TEXRECT|");
+ sb.append("CAPS_EXT_TEXRECT|");
}
- return buf.toString();
+ return sb.toString();
}
}
}
--- a/jdk/src/share/classes/sun/java2d/pipe/Region.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/java2d/pipe/Region.java Wed Jun 18 13:14:15 2014 -0700
@@ -1277,7 +1277,7 @@
}
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("Region[[");
sb.append(lox);
sb.append(", ");
--- a/jdk/src/share/classes/sun/java2d/pipe/hw/ContextCapabilities.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/java2d/pipe/hw/ContextCapabilities.java Wed Jun 18 13:14:15 2014 -0700
@@ -93,37 +93,37 @@
@Override
public String toString() {
- StringBuffer buf =
- new StringBuffer("ContextCapabilities: adapter=" +
+ StringBuilder sb =
+ new StringBuilder("ContextCapabilities: adapter=" +
adapterId+", caps=");
if (caps == CAPS_EMPTY) {
- buf.append("CAPS_EMPTY");
+ sb.append("CAPS_EMPTY");
} else {
if ((caps & CAPS_RT_PLAIN_ALPHA) != 0) {
- buf.append("CAPS_RT_PLAIN_ALPHA|");
+ sb.append("CAPS_RT_PLAIN_ALPHA|");
}
if ((caps & CAPS_RT_TEXTURE_ALPHA) != 0) {
- buf.append("CAPS_RT_TEXTURE_ALPHA|");
+ sb.append("CAPS_RT_TEXTURE_ALPHA|");
}
if ((caps & CAPS_RT_TEXTURE_OPAQUE) != 0) {
- buf.append("CAPS_RT_TEXTURE_OPAQUE|");
+ sb.append("CAPS_RT_TEXTURE_OPAQUE|");
}
if ((caps & CAPS_MULTITEXTURE) != 0) {
- buf.append("CAPS_MULTITEXTURE|");
+ sb.append("CAPS_MULTITEXTURE|");
}
if ((caps & CAPS_TEXNONPOW2) != 0) {
- buf.append("CAPS_TEXNONPOW2|");
+ sb.append("CAPS_TEXNONPOW2|");
}
if ((caps & CAPS_TEXNONSQUARE) != 0) {
- buf.append("CAPS_TEXNONSQUARE|");
+ sb.append("CAPS_TEXNONSQUARE|");
}
if ((caps & CAPS_PS20) != 0) {
- buf.append("CAPS_PS20|");
+ sb.append("CAPS_PS20|");
}
if ((caps & CAPS_PS30) != 0) {
- buf.append("CAPS_PS30|");
+ sb.append("CAPS_PS30|");
}
}
- return buf.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/jvmstat/monitor/HostIdentifier.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/jvmstat/monitor/HostIdentifier.java Wed Jun 18 13:14:15 2014 -0700
@@ -358,7 +358,7 @@
URI nuri = null;
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append(scheme).append("://");
--- a/jdk/src/share/classes/sun/jvmstat/monitor/MonitoredHost.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/jvmstat/monitor/MonitoredHost.java Wed Jun 18 13:14:15 2014 -0700
@@ -257,7 +257,7 @@
throws MonitorException {
String hostname = hostId.getHost();
String scheme = hostId.getScheme();
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
assert hostname != null;
--- a/jdk/src/share/classes/sun/jvmstat/monitor/VmIdentifier.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/jvmstat/monitor/VmIdentifier.java Wed Jun 18 13:14:15 2014 -0700
@@ -255,7 +255,7 @@
* a MonitorException in a future version.
*/
public HostIdentifier getHostIdentifier() throws URISyntaxException {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if (getScheme() != null) {
sb.append(getScheme()).append(":");
}
--- a/jdk/src/share/classes/sun/management/Agent.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/management/Agent.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,6 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.InetAddress;
-import java.net.Socket;
import java.net.UnknownHostException;
import java.text.MessageFormat;
import java.util.MissingResourceException;
@@ -88,7 +87,7 @@
// return empty property set
private static Properties parseString(String args) {
Properties argProps = new Properties();
- if (args != null) {
+ if (args != null && !args.trim().equals("")) {
for (String option : args.split(",")) {
String s[] = option.split("=", 2);
String name = s[0].trim();
@@ -160,53 +159,59 @@
throw new RuntimeException(getText(INVALID_STATE, "Agent already started"));
}
- Properties argProps = parseString(args);
- Properties configProps = new Properties();
+ try {
+ Properties argProps = parseString(args);
+ Properties configProps = new Properties();
- // Load the management properties from the config file
- // if config file is not specified readConfiguration implicitly
- // reads <java.home>/lib/management/management.properties
+ // Load the management properties from the config file
+ // if config file is not specified readConfiguration implicitly
+ // reads <java.home>/lib/management/management.properties
+
+ String fname = System.getProperty(CONFIG_FILE);
+ readConfiguration(fname, configProps);
- String fname = System.getProperty(CONFIG_FILE);
- readConfiguration(fname, configProps);
+ // management properties can be overridden by system properties
+ // which take precedence
+ Properties sysProps = System.getProperties();
+ synchronized (sysProps) {
+ configProps.putAll(sysProps);
+ }
- // management properties can be overridden by system properties
- // which take precedence
- Properties sysProps = System.getProperties();
- synchronized (sysProps) {
- configProps.putAll(sysProps);
- }
+ // if user specifies config file into command line for either
+ // jcmd utilities or attach command it overrides properties set in
+ // command line at the time of VM start
+ String fnameUser = argProps.getProperty(CONFIG_FILE);
+ if (fnameUser != null) {
+ readConfiguration(fnameUser, configProps);
+ }
- // if user specifies config file into command line for either
- // jcmd utilities or attach command it overrides properties set in
- // command line at the time of VM start
- String fnameUser = argProps.getProperty(CONFIG_FILE);
- if (fnameUser != null) {
- readConfiguration(fnameUser, configProps);
- }
+ // arguments specified in command line of jcmd utilities
+ // override both system properties and one set by config file
+ // specified in jcmd command line
+ configProps.putAll(argProps);
- // arguments specified in command line of jcmd utilities
- // override both system properties and one set by config file
- // specified in jcmd command line
- configProps.putAll(argProps);
+ // jcmd doesn't allow to change ThreadContentionMonitoring, but user
+ // can specify this property inside config file, so enable optional
+ // monitoring functionality if this property is set
+ final String enableThreadContentionMonitoring =
+ configProps.getProperty(ENABLE_THREAD_CONTENTION_MONITORING);
- // jcmd doesn't allow to change ThreadContentionMonitoring, but user
- // can specify this property inside config file, so enable optional
- // monitoring functionality if this property is set
- final String enableThreadContentionMonitoring =
- configProps.getProperty(ENABLE_THREAD_CONTENTION_MONITORING);
+ if (enableThreadContentionMonitoring != null) {
+ ManagementFactory.getThreadMXBean().
+ setThreadContentionMonitoringEnabled(true);
+ }
- if (enableThreadContentionMonitoring != null) {
- ManagementFactory.getThreadMXBean().
- setThreadContentionMonitoringEnabled(true);
- }
+ String jmxremotePort = configProps.getProperty(JMXREMOTE_PORT);
+ if (jmxremotePort != null) {
+ jmxServer = ConnectorBootstrap.
+ startRemoteConnectorServer(jmxremotePort, configProps);
- String jmxremotePort = configProps.getProperty(JMXREMOTE_PORT);
- if (jmxremotePort != null) {
- jmxServer = ConnectorBootstrap.
- startRemoteConnectorServer(jmxremotePort, configProps);
-
- startDiscoveryService(configProps);
+ startDiscoveryService(configProps);
+ } else {
+ throw new AgentConfigurationError(INVALID_JMXREMOTE_PORT, "No port specified");
+ }
+ } catch (AgentConfigurationError err) {
+ error(err.getError(), err.getParams());
}
}
@@ -401,7 +406,7 @@
if (home == null) {
throw new Error("Can't find java.home ??");
}
- StringBuffer defaultFileName = new StringBuffer(home);
+ StringBuilder defaultFileName = new StringBuilder(home);
defaultFileName.append(File.separator).append("lib");
defaultFileName.append(File.separator).append("management");
defaultFileName.append(File.separator).append("management.properties");
@@ -495,7 +500,7 @@
if (params == null || params.length == 0) {
error(key);
} else {
- StringBuffer message = new StringBuffer(params[0]);
+ StringBuilder message = new StringBuilder(params[0]);
for (int i = 1; i < params.length; i++) {
message.append(" " + params[i]);
}
@@ -507,7 +512,7 @@
String keyText = getText(key);
System.err.print(getText("agent.err.error") + ": " + keyText);
System.err.println(": " + message);
- throw new RuntimeException(keyText);
+ throw new RuntimeException(keyText + ": " + message);
}
public static void error(Exception e) {
--- a/jdk/src/share/classes/sun/management/DiagnosticCommandArgumentInfo.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/management/DiagnosticCommandArgumentInfo.java Wed Jun 18 13:14:15 2014 -0700
@@ -43,7 +43,7 @@
* argumentA's position is 0, argumentB's position is 1 and argumentC's
* position is 2.
*
- * @since 8
+ * @since 1.8
*/
class DiagnosticCommandArgumentInfo {
--- a/jdk/src/share/classes/sun/management/DiagnosticCommandImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/management/DiagnosticCommandImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,7 +35,7 @@
/**
* Implementation class for the diagnostic commands subsystem.
*
- * @since 8
+ * @since 1.8
*/
class DiagnosticCommandImpl extends NotificationEmitterSupport
implements DiagnosticCommandMBean {
--- a/jdk/src/share/classes/sun/management/DiagnosticCommandInfo.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/management/DiagnosticCommandInfo.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* Diagnostic command information. It contains the description of a
* diagnostic command.
*
- * @since 8
+ * @since 1.8
*/
class DiagnosticCommandInfo {
--- a/jdk/src/share/classes/sun/management/manifest Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-Premain-Class: sun.management.Agent
-Agent-Class: sun.management.Agent
-
--- a/jdk/src/share/classes/sun/management/resources/agent.properties Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/management/resources/agent.properties Wed Jun 18 13:14:15 2014 -0700
@@ -43,7 +43,7 @@
agent.err.premain.notfound = premain(String) does not exist in agent class
agent.err.agentclass.access.denied = Access to premain(String) is denied
agent.err.invalid.agentclass = Invalid com.sun.management.agent.class property value
-agent.err.invalid.state = Invalid agent state
+agent.err.invalid.state = Invalid agent state: {0}
agent.err.invalid.jmxremote.port = Invalid com.sun.management.jmxremote.port number
agent.err.invalid.jmxremote.rmi.port = Invalid com.sun.management.jmxremote.rmi.port number
--- a/jdk/src/share/classes/sun/management/snmp/jvminstr/JvmThreadInstanceEntryImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/management/snmp/jvminstr/JvmThreadInstanceEntryImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -311,19 +311,19 @@
StackTraceElement[] stackTrace = info.getStackTrace();
//We append the stack trace in a buffer
// XXX Revisit: should check isDebugOn()
- StringBuffer b = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
final int stackSize = stackTrace.length;
log.debug("getJvmThreadInstStackTrace", "Stack size : " + stackSize);
for(int i = 0; i < stackSize; i++) {
log.debug("getJvmThreadInstStackTrace", "Append " +
stackTrace[i].toString());
- b.append(stackTrace[i].toString());
+ sb.append(stackTrace[i].toString());
//Append \n at the end of each line except the last one
if(i < stackSize)
- b.append("\n");
+ sb.append("\n");
}
//The stack trace is truncated if its size exceeds 255.
- return validPathElementTC(b.toString());
+ return validPathElementTC(sb.toString());
}
static final MibLogger log =
new MibLogger(JvmThreadInstanceEntryImpl.class);
--- a/jdk/src/share/classes/sun/misc/MessageUtils.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/misc/MessageUtils.java Wed Jun 18 13:14:15 2014 -0700
@@ -55,7 +55,7 @@
}
public static String subst(String patt, String args[]) {
- StringBuffer result = new StringBuffer();
+ StringBuilder result = new StringBuilder();
int len = patt.length();
for (int i = 0; i >= 0 && i < len; i++) {
char ch = patt.charAt(i);
--- a/jdk/src/share/classes/sun/misc/Timeable.java Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1995, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.misc;
-
-/**
- * This interface is used by the Timer class. A class that uses
- * Timer objects must implement this interface.
- *
- * @see Timer
- * @author Patrick Chan
- */
-public interface Timeable {
- /**
- * This method is executed every time a timer owned by this
- * object ticks. An object can own more than one timer but
- * all timers call this method when they tick;
- * you can use the supplied timer parameter to determine
- * which timer has ticked.
- * @param timer a handle to the timer that has just ticked.
- */
- public void tick(Timer timer);
-}
--- a/jdk/src/share/classes/sun/misc/Timer.java Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,647 +0,0 @@
-/*
- * Copyright (c) 1995, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.misc;
-
-/**
- A Timer object is used by algorithms that require timed events.
- For example, in an animation loop, a timer would help in
- determining when to change frames.
-
- A timer has an interval which determines when it "ticks";
- that is, a timer delays for the specified interval and then
- it calls the owner's tick() method.
-
- Here's an example of creating a timer with a 5 sec interval:
-
- <pre>
- class Main implements Timeable {
- public void tick(Timer timer) {
- System.out.println("tick");
- }
- public static void main(String args[]) {
- (new Timer(this, 5000)).cont();
- }
- }
- </pre>
-
- A timer can be stopped, continued, or reset at any time.
- A timer's state is not stopped while it's calling the
- owner's tick() method.
-
- A timer can be regular or irregular. If in regular mode,
- a timer ticks at the specified interval, regardless of
- how long the owner's tick() method takes. While the timer
- is running, no ticks are ever discarded. That means that if
- the owner's tick() method takes longer than the interval,
- the ticks that would have occurred are delivered immediately.
-
- In irregular mode, a timer starts delaying for exactly
- the specified interval only after the tick() method returns.
-
- Synchronization issues: do not hold the timer's monitor
- while calling any of the Timer operations below otherwise
- the Timer class will deadlock.
-
- @author Patrick Chan
-*/
-
-/*
- Synchronization issues: there are two data structures that
- require locking. A Timer object and the Timer queue
- (described in the TimerThread class). To avoid deadlock,
- the timer queue monitor is always acquired before the timer
- object's monitor. However, the timer queue monitor is acquired
- only if the timer operation will make use of the timer
- queue, e.g. stop().
-
- The class monitor on the class TimerThread severs as the monitor
- to the timer queue.
-
- Possible feature: perhaps a timer should have an associated
- thread priority. The thread that makes the callback temporarily
- takes on that priority before calling the owner's tick() method.
-*/
-
-public class Timer {
- /**
- * This is the owner of the timer. Its tick method is
- * called when the timer ticks.
- */
- public Timeable owner;
-
- /*
- * This is the interval of time in ms.
- */
- long interval;
-
- /*
- * This variable is used for two different purposes.
- * This is done in order to save space.
- * If 'stopped' is true, this variable holds the time
- * that the timer was stopped; otherwise, this variable
- * is used by the TimerThread to determine when the timer
- * should tick.
- */
- long sleepUntil;
-
- /*
- * This is the time remaining before the timer ticks. It
- * is only valid if 'stopped' is true. If the timer is
- * continued, the next tick will happen remaingTime
- * milliseconds later.
- */
- long remainingTime;
-
- /*
- * True iff the timer is in regular mode.
- */
- boolean regular;
-
- /*
- * True iff the timer has been stopped.
- */
- boolean stopped;
-
- /* **************************************************************
- * Timer queue-related variables
- * ************************************************************** */
-
- /*
- * A link to another timer object. This is used while the
- * timer object is enqueued in the timer queue.
- */
- Timer next;
-
- /* **************************************************************
- * Timer methods
- * ************************************************************** */
-
- /*
- * This variable holds a handle to the TimerThread class for
- * the purpose of getting at the class monitor. The reason
- * why Class.forName("TimerThread") is not used is because it
- * doesn't appear to work when loaded via a net class loader.
- */
- static TimerThread timerThread = null;
-
- /**
- * Creates a timer object that is owned by 'owner' and
- * with the interval 'interval' milliseconds. The new timer
- * object is stopped and is regular. getRemainingTime()
- * return 'interval' at this point. getStopTime() returns
- * the time this object was created.
- * @param owner owner of the timer object
- * @param interval interval of the timer in milliseconds
- */
- public Timer(Timeable owner, long interval) {
- this.owner = owner;
- this.interval = interval;
- remainingTime = interval;
- regular = true;
- sleepUntil = System.currentTimeMillis();
- stopped = true;
- synchronized (getClass()) {
- if (timerThread == null) {
- timerThread = new TimerThread();
- }
- }
- }
-
- /**
- * Returns true if this timer is stopped.
- */
- public synchronized boolean isStopped() {
- return stopped;
- }
-
- /**
- * Stops the timer. The amount of time the timer has already
- * delayed is saved so if the timer is continued, it will only
- * delay for the amount of time remaining.
- * Note that even after stopping a timer, one more tick may
- * still occur.
- * This method is MT-safe; i.e. it is synchronized but for
- * implementation reasons, the synchronized modifier cannot
- * be included in the method declaration.
- */
- public void stop() {
- long now = System.currentTimeMillis();
-
- synchronized (timerThread) {
- synchronized (this) {
- if (!stopped) {
- TimerThread.dequeue(this);
- remainingTime = Math.max(0, sleepUntil - now);
- sleepUntil = now; // stop time
- stopped = true;
- }
- }
- }
- }
-
- /**
- * Continue the timer. The next tick will come at getRemainingTime()
- * milliseconds later. If the timer is not stopped, this
- * call will be a no-op.
- * This method is MT-safe; i.e. it is synchronized but for
- * implementation reasons, the synchronized modifier cannot
- * be included in the method declaration.
- */
- public void cont() {
- synchronized (timerThread) {
- synchronized (this) {
- if (stopped) {
- // The TimerTickThread avoids requeuing the
- // timer only if the sleepUntil value has changed.
- // The following guarantees that the sleepUntil
- // value will be different; without this guarantee,
- // it's theoretically possible for the timer to be
- // inserted twice.
- sleepUntil = Math.max(sleepUntil + 1,
- System.currentTimeMillis() + remainingTime);
- TimerThread.enqueue(this);
- stopped = false;
- }
- }
- }
- }
-
- /**
- * Resets the timer's remaining time to the timer's interval.
- * If the timer's running state is not altered.
- */
- public void reset() {
- synchronized (timerThread) {
- synchronized (this) {
- setRemainingTime(interval);
- }
- }
- }
-
- /**
- * Returns the time at which the timer was last stopped. The
- * return value is valid only if the timer is stopped.
- */
- public synchronized long getStopTime() {
- return sleepUntil;
- }
-
- /**
- * Returns the timer's interval.
- */
- public synchronized long getInterval() {
- return interval;
- }
-
- /**
- * Changes the timer's interval. The new interval setting
- * does not take effect until after the next tick.
- * This method does not alter the remaining time or the
- * running state of the timer.
- * @param interval new interval of the timer in milliseconds
- */
- public synchronized void setInterval(long interval) {
- this.interval = interval;
- }
-
- /**
- * Returns the remaining time before the timer's next tick.
- * The return value is valid only if timer is stopped.
- */
- public synchronized long getRemainingTime() {
- return remainingTime;
- }
-
- /**
- * Sets the remaining time before the timer's next tick.
- * This method does not alter the timer's running state.
- * This method is MT-safe; i.e. it is synchronized but for
- * implementation reasons, the synchronized modifier cannot
- * be included in the method declaration.
- * @param time new remaining time in milliseconds.
- */
- public void setRemainingTime(long time) {
- synchronized (timerThread) {
- synchronized (this) {
- if (stopped) {
- remainingTime = time;
- } else {
- stop();
- remainingTime = time;
- cont();
- }
- }
- }
- }
-
- /**
- * In regular mode, a timer ticks at the specified interval,
- * regardless of how long the owner's tick() method takes.
- * While the timer is running, no ticks are ever discarded.
- * That means that if the owner's tick() method takes longer
- * than the interval, the ticks that would have occurred are
- * delivered immediately.
- *
- * In irregular mode, a timer starts delaying for exactly
- * the specified interval only after the tick() method returns.
- */
- public synchronized void setRegular(boolean regular) {
- this.regular = regular;
- }
-
- /*
- * This method is used only for testing purposes.
- */
- protected Thread getTimerThread() {
- return TimerThread.timerThread;
- }
-}
-
-
-/*
-
-This class implements the timer queue and is exclusively used by the
-Timer class. There are only two methods exported to the Timer class -
-enqueue, for inserting a timer into queue and dequeue, for removing
-a timer from the queue.
-
-A timer in the timer queue is awaiting a tick. When a timer is to be
-ticked, it is removed from the timer queue before the owner's tick()
-method is called.
-
-A single timer thread manages the timer queue. This timer thread
-looks at the head of the timer queue and delays until it's time for
-the timer to tick. When the time comes, the timer thread creates a
-callback thread to call the timer owner's tick() method. The timer
-thread then processes the next timer in the queue.
-
-When a timer is inserted at the head of the queue, the timer thread is
-notified. This causes the timer thread to prematurely wake up and
-process the new head of the queue.
-
-*/
-
-class TimerThread extends Thread {
- /*
- * Set to true to get debugging output.
- */
- public static boolean debug = false;
-
- /*
- * This is a handle to the thread managing the thread queue.
- */
- static TimerThread timerThread;
-
- /*
- * This flag is set if the timer thread has been notified
- * while it was in the timed wait. This flag allows the
- * timer thread to tell whether or not the wait completed.
- */
- static boolean notified = false;
-
- protected TimerThread() {
- super("TimerThread");
- timerThread = this;
- start();
- }
-
- public synchronized void run() {
- while (true) {
- long delay;
-
- while (timerQueue == null) {
- try {
- wait();
- } catch (InterruptedException ex) {
- // Just drop through and check timerQueue.
- }
- }
- notified = false;
- delay = timerQueue.sleepUntil - System.currentTimeMillis();
- if (delay > 0) {
- try {
- wait(delay);
- } catch (InterruptedException ex) {
- // Just drop through.
- }
- }
- // remove from timer queue.
- if (!notified) {
- Timer timer = timerQueue;
- timerQueue = timerQueue.next;
- TimerTickThread thr = TimerTickThread.call(
- timer, timer.sleepUntil);
- if (debug) {
- long delta = (System.currentTimeMillis() - timer.sleepUntil);
- System.out.println("tick(" + thr.getName() + ","
- + timer.interval + ","+delta+ ")");
- if (delta > 250) {
- System.out.println("*** BIG DELAY ***");
- }
- }
- }
- }
- }
-
- /* *******************************************************
- Timer Queue
- ******************************************************* */
-
- /*
- * The timer queue is a queue of timers waiting to tick.
- */
- static Timer timerQueue = null;
-
- /*
- * Uses timer.sleepUntil to determine where in the queue
- * to insert the timer object.
- * A new ticker thread is created only if the timer
- * is inserted at the beginning of the queue.
- * The timer must not already be in the queue.
- * Assumes the caller has the TimerThread monitor.
- */
- static protected void enqueue(Timer timer) {
- Timer prev = null;
- Timer cur = timerQueue;
-
- if (cur == null || timer.sleepUntil <= cur.sleepUntil) {
- // insert at front of queue
- timer.next = timerQueue;
- timerQueue = timer;
- notified = true;
- timerThread.notify();
- } else {
- do {
- prev = cur;
- cur = cur.next;
- } while (cur != null && timer.sleepUntil > cur.sleepUntil);
- // insert or append to the timer queue
- timer.next = cur;
- prev.next = timer;
- }
- if (debug) {
- long now = System.currentTimeMillis();
-
- System.out.print(Thread.currentThread().getName()
- + ": enqueue " + timer.interval + ": ");
- cur = timerQueue;
- while(cur != null) {
- long delta = cur.sleepUntil - now;
- System.out.print(cur.interval + "(" + delta + ") ");
- cur = cur.next;
- }
- System.out.println();
- }
- }
-
- /*
- * If the timer is not in the queue, returns false;
- * otherwise removes the timer from the timer queue and returns true.
- * Assumes the caller has the TimerThread monitor.
- */
- static protected boolean dequeue(Timer timer) {
- Timer prev = null;
- Timer cur = timerQueue;
-
- while (cur != null && cur != timer) {
- prev = cur;
- cur = cur.next;
- }
- if (cur == null) {
- if (debug) {
- System.out.println(Thread.currentThread().getName()
- + ": dequeue " + timer.interval + ": no-op");
- }
- return false;
- } if (prev == null) {
- timerQueue = timer.next;
- notified = true;
- timerThread.notify();
- } else {
- prev.next = timer.next;
- }
- timer.next = null;
- if (debug) {
- long now = System.currentTimeMillis();
-
- System.out.print(Thread.currentThread().getName()
- + ": dequeue " + timer.interval + ": ");
- cur = timerQueue;
- while(cur != null) {
- long delta = cur.sleepUntil - now;
- System.out.print(cur.interval + "(" + delta + ") ");
- cur = cur.next;
- }
- System.out.println();
- }
- return true;
- }
-
- /*
- * Inserts the timer back into the queue. This method
- * is used by a callback thread after it has called the
- * timer owner's tick() method. This method recomputes
- * the sleepUntil field.
- * Assumes the caller has the TimerThread and Timer monitor.
- */
- protected static void requeue(Timer timer) {
- if (!timer.stopped) {
- long now = System.currentTimeMillis();
- if (timer.regular) {
- timer.sleepUntil += timer.interval;
- } else {
- timer.sleepUntil = now + timer.interval;
- }
- enqueue(timer);
- } else if (debug) {
- System.out.println(Thread.currentThread().getName()
- + ": requeue " + timer.interval + ": no-op");
- }
- }
-}
-
-/*
-
-This class implements a simple thread whose only purpose is to call a
-timer owner's tick() method. A small fixed-sized pool of threads is
-maintained and is protected by the class monitor. If the pool is
-exhausted, a new thread is temporarily created and destroyed when
-done.
-
-A thread that's in the pool waits on it's own monitor. When the
-thread is retrieved from the pool, the retriever notifies the thread's
-monitor.
-
-*/
-
-class TimerTickThread extends Thread {
- /*
- * Maximum size of the thread pool.
- */
- static final int MAX_POOL_SIZE = 3;
-
- /*
- * Number of threads in the pool.
- */
- static int curPoolSize = 0;
-
- /*
- * The pool of timer threads.
- */
- static TimerTickThread pool = null;
-
- /*
- * Is used when linked into the thread pool.
- */
- TimerTickThread next = null;
-
- /*
- * This is the handle to the timer whose owner's
- * tick() method will be called.
- */
- Timer timer;
-
- /*
- * The value of a timer's sleepUntil value is captured here.
- * This is used to determine whether or not the timer should
- * be reinserted into the queue. If the timer's sleepUntil
- * value has changed, the timer is not reinserted.
- */
- long lastSleepUntil;
-
- /*
- * Creates a new callback thread to call the timer owner's
- * tick() method. A thread is taken from the pool if one
- * is available, otherwise, a new thread is created.
- * The thread handle is returned.
- */
- protected static synchronized TimerTickThread call(
- Timer timer, long sleepUntil) {
- TimerTickThread thread = pool;
-
- if (thread == null) {
- // create one.
- thread = new TimerTickThread();
- thread.timer = timer;
- thread.lastSleepUntil = sleepUntil;
- thread.start();
- } else {
- pool = pool.next;
- thread.timer = timer;
- thread.lastSleepUntil = sleepUntil;
- synchronized (thread) {
- thread.notify();
- }
- }
- return thread;
- }
-
- /*
- * Returns false if the thread should simply exit;
- * otherwise the thread is returned the pool, where
- * it waits to be notified. (I did try to use the
- * class monitor but the time between the notify
- * and breaking out of the wait seemed to take
- * significantly longer; need to look into this later.)
- */
- private boolean returnToPool() {
- synchronized (getClass()) {
- if (curPoolSize >= MAX_POOL_SIZE) {
- return false;
- }
- next = pool;
- pool = this;
- curPoolSize++;
- timer = null;
- }
- while (timer == null) {
- synchronized (this) {
- try {
- wait();
- } catch (InterruptedException ex) {
- // Just drop through and retest timer.
- }
- }
- }
- synchronized (getClass()) {
- curPoolSize--;
- }
- return true;
- }
-
- public void run() {
- do {
- timer.owner.tick(timer);
- synchronized (TimerThread.timerThread) {
- synchronized (timer) {
- if (lastSleepUntil == timer.sleepUntil) {
- TimerThread.requeue(timer);
- }
- }
- }
- } while (returnToPool());
- }
-}
--- a/jdk/src/share/classes/sun/misc/UUDecoder.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/misc/UUDecoder.java Wed Jun 18 13:14:15 2014 -0700
@@ -123,7 +123,7 @@
throws IOException {
int i, c1, c2, c3, c4;
int a, b, c;
- StringBuffer x = new StringBuffer();
+ StringBuilder x = new StringBuilder();
for (i = 0; i < 4; i++) {
c1 = inStream.read();
@@ -152,7 +152,7 @@
*/
protected void decodeBufferPrefix(PushbackInputStream inStream, OutputStream outStream) throws IOException {
int c;
- StringBuffer q = new StringBuffer(32);
+ StringBuilder q = new StringBuilder(32);
String r;
boolean sawNewLine;
--- a/jdk/src/share/classes/sun/net/TransferProtocolClient.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/net/TransferProtocolClient.java Wed Jun 18 13:14:15 2014 -0700
@@ -53,7 +53,7 @@
* number. Returns -1 on failure.
*/
public int readServerResponse() throws IOException {
- StringBuffer replyBuf = new StringBuffer(32);
+ StringBuilder replyBuf = new StringBuilder(32);
int c;
int continuingCode = -1;
int code;
--- a/jdk/src/share/classes/sun/net/ftp/impl/FtpClient.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/net/ftp/impl/FtpClient.java Wed Jun 18 13:14:15 2014 -0700
@@ -408,7 +408,7 @@
* number. Returns -1 on failure.
*/
private int readServerResponse() throws IOException {
- StringBuffer replyBuf = new StringBuffer(32);
+ StringBuilder replyBuf = new StringBuilder(32);
int c;
int continuingCode = -1;
int code;
@@ -1050,7 +1050,7 @@
// keep the welcome message around so we can
// put it in the resulting HTML page.
String l;
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < serverResponse.size(); i++) {
l = serverResponse.elementAt(i);
if (l != null) {
@@ -1095,7 +1095,7 @@
// keep the welcome message around so we can
// put it in the resulting HTML page.
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if (serverResponse != null) {
for (String l : serverResponse) {
if (l != null) {
@@ -1493,7 +1493,7 @@
* So we need to remove the 1st and last line
*/
Vector<String> resp = getResponseStrings();
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 1; i < resp.size() - 1; i++) {
sb.append(resp.get(i));
}
@@ -1985,7 +1985,7 @@
* by the server.
*/
public String getLastResponseString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if (serverResponse != null) {
for (String l : serverResponse) {
if (l != null) {
@@ -2188,7 +2188,7 @@
}
// on multiple lines answers, like the ones above, remove 1st and last
// line, concat the the others.
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 1; i < resp.size() - 1; i++) {
sb.append(resp.get(i).substring(3));
}
--- a/jdk/src/share/classes/sun/net/www/MimeEntry.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/net/www/MimeEntry.java Wed Jun 18 13:14:15 2014 -0700
@@ -281,52 +281,52 @@
}
public synchronized String toProperty() {
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
String separator = "; ";
boolean needSeparator = false;
int action = getAction();
if (action != MimeEntry.UNKNOWN) {
- buf.append("action=" + actionKeywords[action]);
+ sb.append("action=" + actionKeywords[action]);
needSeparator = true;
}
String command = getLaunchString();
if (command != null && command.length() > 0) {
if (needSeparator) {
- buf.append(separator);
+ sb.append(separator);
}
- buf.append("application=" + command);
+ sb.append("application=" + command);
needSeparator = true;
}
if (getImageFileName() != null) {
if (needSeparator) {
- buf.append(separator);
+ sb.append(separator);
}
- buf.append("icon=" + getImageFileName());
+ sb.append("icon=" + getImageFileName());
needSeparator = true;
}
String extensions = getExtensionsAsList();
if (extensions.length() > 0) {
if (needSeparator) {
- buf.append(separator);
+ sb.append(separator);
}
- buf.append("file_extensions=" + extensions);
+ sb.append("file_extensions=" + extensions);
needSeparator = true;
}
String description = getDescription();
if (description != null && !description.equals(getType())) {
if (needSeparator) {
- buf.append(separator);
+ sb.append(separator);
}
- buf.append("description=" + description);
+ sb.append("description=" + description);
}
- return buf.toString();
+ return sb.toString();
}
public String toString() {
--- a/jdk/src/share/classes/sun/net/www/http/HttpClient.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/net/www/http/HttpClient.java Wed Jun 18 13:14:15 2014 -0700
@@ -558,7 +558,7 @@
// Do not use URLStreamHandler.toExternalForm as the fragment
// should not be part of the RequestURI. It should be an
// absolute URI which does not have a fragment part.
- StringBuffer result = new StringBuffer(128);
+ StringBuilder result = new StringBuilder(128);
result.append(url.getProtocol());
result.append(":");
if (url.getAuthority() != null && url.getAuthority().length() > 0) {
--- a/jdk/src/share/classes/sun/net/www/protocol/file/FileURLConnection.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/net/www/protocol/file/FileURLConnection.java Wed Jun 18 13:14:15 2014 -0700
@@ -191,7 +191,7 @@
if (isDirectory) {
FileNameMap map = java.net.URLConnection.getFileNameMap();
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if (files == null) {
throw new FileNotFoundException(filename);
@@ -201,11 +201,11 @@
for (int i = 0 ; i < files.size() ; i++) {
String fileName = files.get(i);
- buf.append(fileName);
- buf.append("\n");
+ sb.append(fileName);
+ sb.append("\n");
}
// Put it into a (default) locale-specific byte-stream.
- is = new ByteArrayInputStream(buf.toString().getBytes());
+ is = new ByteArrayInputStream(sb.toString().getBytes());
} else {
throw new FileNotFoundException(filename);
}
--- a/jdk/src/share/classes/sun/net/www/protocol/http/DigestAuthentication.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/net/www/protocol/http/DigestAuthentication.java Wed Jun 18 13:14:15 2014 -0700
@@ -532,7 +532,7 @@
}
byte[] digest = md.digest();
- StringBuffer res = new StringBuffer(digest.length * 2);
+ StringBuilder res = new StringBuilder(digest.length * 2);
for (int i = 0; i < digest.length; i++) {
int hashchar = ((digest[i] >>> 4) & 0xf);
res.append(charArray[hashchar]);
--- a/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Wed Jun 18 13:14:15 2014 -0700
@@ -552,7 +552,7 @@
}
requests.setIfNotSet("User-Agent", userAgent);
int port = url.getPort();
- String host = url.getHost();
+ String host = stripIPv6ZoneId(url.getHost());
if (port != -1 && port != url.getDefaultPort()) {
host += ":" + String.valueOf(port);
}
@@ -2659,7 +2659,7 @@
requests.set(0, method + " " + getRequestURI()+" " +
httpVersion, null);
int port = url.getPort();
- String host = url.getHost();
+ String host = stripIPv6ZoneId(url.getHost());
if (port != -1 && port != url.getDefaultPort()) {
host += ":" + String.valueOf(port);
}
@@ -3204,6 +3204,24 @@
return headers;
}
+ /**
+ * Returns the given host, without the IPv6 Zone Id, if present.
+ * (e.g. [fe80::a00:27ff:aaaa:aaaa%eth0] -> [fe80::a00:27ff:aaaa:aaaa])
+ *
+ * @param host host address (not null, not empty)
+ * @return host address without Zone Id
+ */
+ static String stripIPv6ZoneId(String host) {
+ if (host.charAt(0) != '[') { // not an IPv6-literal
+ return host;
+ }
+ int i = host.lastIndexOf('%');
+ if (i == -1) { // doesn't contain zone_id
+ return host;
+ }
+ return host.substring(0, i) + "]";
+ }
+
/* The purpose of this wrapper is just to capture the close() call
* so we can check authentication information that may have
* arrived in a Trailer field
--- a/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -382,7 +382,7 @@
}
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append(this.getClass().getName());
sb.append('[');
if (!isOpen()) {
--- a/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -983,7 +983,7 @@
@Override
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append(this.getClass().getSuperclass().getName());
sb.append('[');
if (!isOpen())
--- a/jdk/src/share/classes/sun/print/PSPathGraphics.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/print/PSPathGraphics.java Wed Jun 18 13:14:15 2014 -0700
@@ -76,7 +76,7 @@
* a copy of this <code>Graphics</code> object.
* @return a new graphics context that is a copy of
* this graphics context.
- * @since JDK1.0
+ * @since 1.0
*/
public Graphics create() {
@@ -108,7 +108,7 @@
* @param y the <i>y</i> coordinate.
* @see java.awt.Graphics#drawBytes
* @see java.awt.Graphics#drawChars
- * @since JDK1.0
+ * @since 1.0
*/
public void drawString(String str, int x, int y) {
drawString(str, (float) x, (float) y);
--- a/jdk/src/share/classes/sun/print/PSPrinterJob.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/print/PSPrinterJob.java Wed Jun 18 13:14:15 2014 -0700
@@ -1267,7 +1267,7 @@
CharsetString cs = acs[i];
CharsetEncoder fontCS = cs.fontDescriptor.encoder;
- StringBuffer nativeStr = new StringBuffer();
+ StringBuilder nativeStr = new StringBuilder();
byte[] strSeg = new byte[cs.length * 2];
int len = 0;
try {
--- a/jdk/src/share/classes/sun/print/PathGraphics.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/print/PathGraphics.java Wed Jun 18 13:14:15 2014 -0700
@@ -332,7 +332,7 @@
* @param width the width of the oval to be drawn.
* @param height the height of the oval to be drawn.
* @see java.awt.Graphics#fillOval
- * @since JDK1.0
+ * @since 1.0
*/
public void drawOval(int x, int y, int width, int height) {
draw(new Ellipse2D.Float(x, y, width, height));
@@ -453,7 +453,7 @@
* @param yPoints an array of <i>y</i> points
* @param nPoints the total number of points
* @see java.awt.Graphics#drawPolygon(int[], int[], int)
- * @since JDK1.1
+ * @since 1.1
*/
public void drawPolyline(int xPoints[], int yPoints[],
int nPoints) {
@@ -564,7 +564,7 @@
* @param y the <i>y</i> coordinate.
* @see java.awt.Graphics#drawBytes
* @see java.awt.Graphics#drawChars
- * @since JDK1.0
+ * @since 1.0
*/
public void drawString(String str, int x, int y) {
drawString(str, (float) x, (float) y);
@@ -1388,7 +1388,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public boolean drawImage(Image img, int x, int y,
ImageObserver observer) {
@@ -1428,7 +1428,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public boolean drawImage(Image img, int x, int y,
int width, int height,
@@ -1472,7 +1472,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public boolean drawImage(Image img, int x, int y,
Color bgcolor,
@@ -1533,7 +1533,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public boolean drawImage(Image img, int x, int y,
int width, int height,
@@ -1605,7 +1605,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public boolean drawImage(Image img,
int dx1, int dy1, int dx2, int dy2,
@@ -1670,7 +1670,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public boolean drawImage(Image img,
int dx1, int dy1, int dx2, int dy2,
--- a/jdk/src/share/classes/sun/print/PeekGraphics.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/print/PeekGraphics.java Wed Jun 18 13:14:15 2014 -0700
@@ -166,7 +166,7 @@
* a copy of this <code>Graphics</code> object.
* @return a new graphics context that is a copy of
* this graphics context.
- * @since JDK1.0
+ * @since 1.0
*/
public Graphics create() {
PeekGraphics newGraphics = null;
@@ -196,7 +196,7 @@
* to this new origin.
* @param x the <i>x</i> coordinate.
* @param y the <i>y</i> coordinate.
- * @since JDK1.0
+ * @since 1.0
*/
public void translate(int x, int y) {
mGraphics.translate(x, y);
@@ -293,7 +293,7 @@
* @return this graphics context's current color.
* @see java.awt.Color
* @see java.awt.Graphics#setColor
- * @since JDK1.0
+ * @since 1.0
*/
public Color getColor() {
return mGraphics.getColor();
@@ -306,7 +306,7 @@
* @param c the new rendering color.
* @see java.awt.Color
* @see java.awt.Graphics#getColor
- * @since JDK1.0
+ * @since 1.0
*/
public void setColor(Color c) {
mGraphics.setColor(c);
@@ -318,7 +318,7 @@
* This sets the logical pixel operation function to the paint or
* overwrite mode. All subsequent rendering operations will
* overwrite the destination with the current color.
- * @since JDK1.0
+ * @since 1.0
*/
public void setPaintMode() {
mGraphics.setPaintMode();
@@ -338,7 +338,7 @@
* in an unpredictable but reversible manner; if the same figure is
* drawn twice, then all pixels are restored to their original values.
* @param c1 the XOR alternation color
- * @since JDK1.0
+ * @since 1.0
*/
public void setXORMode(Color c1) {
mGraphics.setXORMode(c1);
@@ -349,7 +349,7 @@
* @return this graphics context's current font.
* @see java.awt.Font
* @see java.awt.Graphics#setFont
- * @since JDK1.0
+ * @since 1.0
*/
public Font getFont() {
return mGraphics.getFont();
@@ -364,7 +364,7 @@
* @see java.awt.Graphics#drawChars(java.lang.String, int, int)
* @see java.awt.Graphics#drawString(byte[], int, int, int, int)
* @see java.awt.Graphics#drawBytes(char[], int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public void setFont(Font font) {
mGraphics.setFont(font);
@@ -377,7 +377,7 @@
* @see java.awt.Graphics#getFont
* @see java.awt.FontMetrics
* @see java.awt.Graphics#getFontMetrics()
- * @since JDK1.0
+ * @since 1.0
*/
public FontMetrics getFontMetrics(Font f) {
return mGraphics.getFontMetrics(f);
@@ -400,7 +400,7 @@
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(int, int, int, int)
* @see java.awt.Graphics#setClip(Shape)
- * @since JDK1.1
+ * @since 1.1
*/
public Rectangle getClipBounds() {
return mGraphics.getClipBounds();
@@ -436,7 +436,7 @@
* @param height the height of the new clip rectangle.
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(Shape)
- * @since JDK1.1
+ * @since 1.1
*/
public void setClip(int x, int y, int width, int height) {
mGraphics.setClip(x, y, width, height);
@@ -450,7 +450,7 @@
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(int, int, int, int)
* @see java.awt.Graphics#setClip(Shape)
- * @since JDK1.1
+ * @since 1.1
*/
public Shape getClip() {
return mGraphics.getClip();
@@ -468,7 +468,7 @@
* @see java.awt.Graphics#getClip()
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public void setClip(Shape clip) {
mGraphics.setClip(clip);
@@ -493,7 +493,7 @@
* @param height the height of the source rectangle.
* @param dx the horizontal distance to copy the pixels.
* @param dy the vertical distance to copy the pixels.
- * @since JDK1.0
+ * @since 1.0
*/
public void copyArea(int x, int y, int width, int height,
int dx, int dy) {
@@ -508,7 +508,7 @@
* @param y1 the first point's <i>y</i> coordinate.
* @param x2 the second point's <i>x</i> coordinate.
* @param y2 the second point's <i>y</i> coordinate.
- * @since JDK1.0
+ * @since 1.0
*/
public void drawLine(int x1, int y1, int x2, int y2) {
addStrokeShape(new Line2D.Float(x1, y1, x2, y2));
@@ -535,7 +535,7 @@
* @param height the height of the rectangle to be filled.
* @see java.awt.Graphics#fillRect
* @see java.awt.Graphics#clearRect
- * @since JDK1.0
+ * @since 1.0
*/
public void fillRect(int x, int y, int width, int height) {
@@ -562,7 +562,7 @@
* @see java.awt.Graphics#setColor(java.awt.Color)
* @see java.awt.Graphics#setPaintMode
* @see java.awt.Graphics#setXORMode(java.awt.Color)
- * @since JDK1.0
+ * @since 1.0
*/
public void clearRect(int x, int y, int width, int height) {
Rectangle2D.Float rect = new Rectangle2D.Float(x, y, width, height);
@@ -585,7 +585,7 @@
* @param arcHeight the vertical diameter of the arc
* at the four corners.
* @see java.awt.Graphics#fillRoundRect
- * @since JDK1.0
+ * @since 1.0
*/
public void drawRoundRect(int x, int y, int width, int height,
int arcWidth, int arcHeight) {
@@ -609,7 +609,7 @@
* @param arcHeight the vertical diameter
* of the arc at the four corners.
* @see java.awt.Graphics#drawRoundRect
- * @since JDK1.0
+ * @since 1.0
*/
public void fillRoundRect(int x, int y, int width, int height,
int arcWidth, int arcHeight) {
@@ -634,7 +634,7 @@
* @param width the width of the oval to be drawn.
* @param height the height of the oval to be drawn.
* @see java.awt.Graphics#fillOval
- * @since JDK1.0
+ * @since 1.0
*/
public void drawOval(int x, int y, int width, int height) {
addStrokeShape(new Rectangle2D.Float(x, y, width, height));
@@ -651,7 +651,7 @@
* @param width the width of the oval to be filled.
* @param height the height of the oval to be filled.
* @see java.awt.Graphics#drawOval
- * @since JDK1.0
+ * @since 1.0
*/
public void fillOval(int x, int y, int width, int height) {
Rectangle2D.Float rect = new Rectangle2D.Float(x, y, width, height);
@@ -689,7 +689,7 @@
* @param arcAngle the angular extent of the arc,
* relative to the start angle.
* @see java.awt.Graphics#fillArc
- * @since JDK1.0
+ * @since 1.0
*/
public void drawArc(int x, int y, int width, int height,
int startAngle, int arcAngle) {
@@ -725,7 +725,7 @@
* @param arcAngle the angular extent of the arc,
* relative to the start angle.
* @see java.awt.Graphics#drawArc
- * @since JDK1.0
+ * @since 1.0
*/
public void fillArc(int x, int y, int width, int height,
int startAngle, int arcAngle) {
@@ -745,7 +745,7 @@
* @param yPoints an array of <i>y</i> points
* @param nPoints the total number of points
* @see java.awt.Graphics#drawPolygon(int[], int[], int)
- * @since JDK1.1
+ * @since 1.1
*/
public void drawPolyline(int xPoints[], int yPoints[],
int nPoints) {
@@ -780,7 +780,7 @@
* @param nPoints a the total number of points.
* @see java.awt.Graphics#fillPolygon
* @see java.awt.Graphics#drawPolyline
- * @since JDK1.0
+ * @since 1.0
*/
public void drawPolygon(int xPoints[], int yPoints[],
int nPoints) {
@@ -811,7 +811,7 @@
* @param yPoints a an array of <code>y</code> coordinates.
* @param nPoints a the total number of points.
* @see java.awt.Graphics#drawPolygon(int[], int[], int)
- * @since JDK1.0
+ * @since 1.0
*/
public void fillPolygon(int xPoints[], int yPoints[],
int nPoints) {
@@ -854,7 +854,7 @@
* @param y the <i>y</i> coordinate.
* @see java.awt.Graphics#drawBytes
* @see java.awt.Graphics#drawChars
- * @since JDK1.0
+ * @since 1.0
*/
public void drawString(String str, int x, int y) {
@@ -942,7 +942,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public boolean drawImage(Image img, int x, int y,
ImageObserver observer) {
@@ -995,7 +995,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public boolean drawImage(Image img, int x, int y,
int width, int height,
@@ -1040,7 +1040,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public boolean drawImage(Image img, int x, int y,
Color bgcolor,
@@ -1099,7 +1099,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public boolean drawImage(Image img, int x, int y,
int width, int height,
@@ -1162,7 +1162,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public boolean drawImage(Image img,
int dx1, int dy1, int dx2, int dy2,
@@ -1236,7 +1236,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public boolean drawImage(Image img,
int dx1, int dy1, int dx2, int dy2,
@@ -1327,7 +1327,7 @@
* @see java.awt.Component#update
* @see java.awt.Component#getGraphics
* @see java.awt.Graphics#create
- * @since JDK1.0
+ * @since 1.0
*/
public void dispose() {
mGraphics.dispose();
--- a/jdk/src/share/classes/sun/print/ProxyGraphics.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/print/ProxyGraphics.java Wed Jun 18 13:14:15 2014 -0700
@@ -241,7 +241,7 @@
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(int, int, int, int)
* @see java.awt.Graphics#setClip(Shape)
- * @since JDK1.1
+ * @since 1.1
*/
public Rectangle getClipBounds() {
return g.getClipBounds();
@@ -282,7 +282,7 @@
* @param height the height of the new clip rectangle.
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(Shape)
- * @since JDK1.1
+ * @since 1.1
*/
public void setClip(int x, int y, int width, int height) {
g.setClip(x, y, width, height);
@@ -302,7 +302,7 @@
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(int, int, int, int)
* @see java.awt.Graphics#setClip(Shape)
- * @since JDK1.1
+ * @since 1.1
*/
public Shape getClip() {
return g.getClip();
@@ -322,7 +322,7 @@
* @see java.awt.Graphics#getClip()
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public void setClip(Shape clip) {
g.setClip(clip);
@@ -647,7 +647,7 @@
* @param yPoints an array of <i>y</i> points
* @param nPoints the total number of points
* @see java.awt.Graphics#drawPolygon(int[], int[], int)
- * @since JDK1.1
+ * @since 1.1
*/
public void drawPolyline(int xPoints[], int yPoints[],
int nPoints) {
@@ -988,7 +988,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public boolean drawImage(Image img,
int dx1, int dy1, int dx2, int dy2,
@@ -1051,7 +1051,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public boolean drawImage(Image img,
int dx1, int dy1, int dx2, int dy2,
--- a/jdk/src/share/classes/sun/print/ProxyGraphics2D.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/print/ProxyGraphics2D.java Wed Jun 18 13:14:15 2014 -0700
@@ -115,7 +115,7 @@
* a copy of this <code>Graphics</code> object.
* @return a new graphics context that is a copy of
* this graphics context.
- * @since JDK1.0
+ * @since 1.0
*/
public Graphics create() {
return new ProxyGraphics2D((Graphics2D) mGraphics.create(),
@@ -132,7 +132,7 @@
* to this new origin.
* @param x the <i>x</i> coordinate.
* @param y the <i>y</i> coordinate.
- * @since JDK1.0
+ * @since 1.0
*/
public void translate(int x, int y) {
mGraphics.translate(x, y);
@@ -229,7 +229,7 @@
* @return this graphics context's current color.
* @see java.awt.Color
* @see java.awt.Graphics#setColor
- * @since JDK1.0
+ * @since 1.0
*/
public Color getColor() {
return mGraphics.getColor();
@@ -242,7 +242,7 @@
* @param c the new rendering color.
* @see java.awt.Color
* @see java.awt.Graphics#getColor
- * @since JDK1.0
+ * @since 1.0
*/
public void setColor(Color c) {
mGraphics.setColor(c);
@@ -254,7 +254,7 @@
* This sets the logical pixel operation function to the paint or
* overwrite mode. All subsequent rendering operations will
* overwrite the destination with the current color.
- * @since JDK1.0
+ * @since 1.0
*/
public void setPaintMode() {
mGraphics.setPaintMode();
@@ -274,7 +274,7 @@
* in an unpredictable but reversible manner; if the same figure is
* drawn twice, then all pixels are restored to their original values.
* @param c1 the XOR alternation color
- * @since JDK1.0
+ * @since 1.0
*/
public void setXORMode(Color c1) {
mGraphics.setXORMode(c1);
@@ -285,7 +285,7 @@
* @return this graphics context's current font.
* @see java.awt.Font
* @see java.awt.Graphics#setFont
- * @since JDK1.0
+ * @since 1.0
*/
public Font getFont() {
return mGraphics.getFont();
@@ -300,7 +300,7 @@
* @see java.awt.Graphics#drawChars(java.lang.String, int, int)
* @see java.awt.Graphics#drawString(byte[], int, int, int, int)
* @see java.awt.Graphics#drawBytes(char[], int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public void setFont(Font font) {
mGraphics.setFont(font);
@@ -313,7 +313,7 @@
* @see java.awt.Graphics#getFont
* @see java.awt.FontMetrics
* @see java.awt.Graphics#getFontMetrics()
- * @since JDK1.0
+ * @since 1.0
*/
public FontMetrics getFontMetrics(Font f) {
return mGraphics.getFontMetrics(f);
@@ -336,7 +336,7 @@
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(int, int, int, int)
* @see java.awt.Graphics#setClip(Shape)
- * @since JDK1.1
+ * @since 1.1
*/
public Rectangle getClipBounds() {
return mGraphics.getClipBounds();
@@ -372,7 +372,7 @@
* @param height the height of the new clip rectangle.
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(Shape)
- * @since JDK1.1
+ * @since 1.1
*/
public void setClip(int x, int y, int width, int height) {
mGraphics.setClip(x, y, width, height);
@@ -386,7 +386,7 @@
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(int, int, int, int)
* @see java.awt.Graphics#setClip(Shape)
- * @since JDK1.1
+ * @since 1.1
*/
public Shape getClip() {
return mGraphics.getClip();
@@ -404,7 +404,7 @@
* @see java.awt.Graphics#getClip()
* @see java.awt.Graphics#clipRect
* @see java.awt.Graphics#setClip(int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public void setClip(Shape clip) {
mGraphics.setClip(clip);
@@ -429,7 +429,7 @@
* @param height the height of the source rectangle.
* @param dx the horizontal distance to copy the pixels.
* @param dy the vertical distance to copy the pixels.
- * @since JDK1.0
+ * @since 1.0
*/
public void copyArea(int x, int y, int width, int height,
int dx, int dy) {
@@ -444,7 +444,7 @@
* @param y1 the first point's <i>y</i> coordinate.
* @param x2 the second point's <i>x</i> coordinate.
* @param y2 the second point's <i>y</i> coordinate.
- * @since JDK1.0
+ * @since 1.0
*/
public void drawLine(int x1, int y1, int x2, int y2) {
mGraphics.drawLine(x1, y1, x2, y2);
@@ -469,7 +469,7 @@
* @param height the height of the rectangle to be filled.
* @see java.awt.Graphics#fillRect
* @see java.awt.Graphics#clearRect
- * @since JDK1.0
+ * @since 1.0
*/
public void fillRect(int x, int y, int width, int height) {
mGraphics.fillRect(x, y, width, height);
@@ -493,7 +493,7 @@
* @see java.awt.Graphics#setColor(java.awt.Color)
* @see java.awt.Graphics#setPaintMode
* @see java.awt.Graphics#setXORMode(java.awt.Color)
- * @since JDK1.0
+ * @since 1.0
*/
public void clearRect(int x, int y, int width, int height) {
mGraphics.clearRect(x, y, width, height);
@@ -514,7 +514,7 @@
* @param arcHeight the vertical diameter of the arc
* at the four corners.
* @see java.awt.Graphics#fillRoundRect
- * @since JDK1.0
+ * @since 1.0
*/
public void drawRoundRect(int x, int y, int width, int height,
int arcWidth, int arcHeight) {
@@ -536,7 +536,7 @@
* @param arcHeight the vertical diameter
* of the arc at the four corners.
* @see java.awt.Graphics#drawRoundRect
- * @since JDK1.0
+ * @since 1.0
*/
public void fillRoundRect(int x, int y, int width, int height,
int arcWidth, int arcHeight) {
@@ -559,7 +559,7 @@
* @param width the width of the oval to be drawn.
* @param height the height of the oval to be drawn.
* @see java.awt.Graphics#fillOval
- * @since JDK1.0
+ * @since 1.0
*/
public void drawOval(int x, int y, int width, int height) {
mGraphics.drawOval(x, y, width, height);
@@ -575,7 +575,7 @@
* @param width the width of the oval to be filled.
* @param height the height of the oval to be filled.
* @see java.awt.Graphics#drawOval
- * @since JDK1.0
+ * @since 1.0
*/
public void fillOval(int x, int y, int width, int height) {
mGraphics.fillOval(x, y, width, height);
@@ -609,7 +609,7 @@
* @param arcAngle the angular extent of the arc,
* relative to the start angle.
* @see java.awt.Graphics#fillArc
- * @since JDK1.0
+ * @since 1.0
*/
public void drawArc(int x, int y, int width, int height,
int startAngle, int arcAngle) {
@@ -643,7 +643,7 @@
* @param arcAngle the angular extent of the arc,
* relative to the start angle.
* @see java.awt.Graphics#drawArc
- * @since JDK1.0
+ * @since 1.0
*/
public void fillArc(int x, int y, int width, int height,
int startAngle, int arcAngle) {
@@ -660,7 +660,7 @@
* @param yPoints an array of <i>y</i> points
* @param nPoints the total number of points
* @see java.awt.Graphics#drawPolygon(int[], int[], int)
- * @since JDK1.1
+ * @since 1.1
*/
public void drawPolyline(int xPoints[], int yPoints[],
int nPoints) {
@@ -685,7 +685,7 @@
* @param nPoints a the total number of points.
* @see java.awt.Graphics#fillPolygon
* @see java.awt.Graphics#drawPolyline
- * @since JDK1.0
+ * @since 1.0
*/
public void drawPolygon(int xPoints[], int yPoints[],
int nPoints) {
@@ -711,7 +711,7 @@
* @param yPoints a an array of <code>y</code> coordinates.
* @param nPoints a the total number of points.
* @see java.awt.Graphics#drawPolygon(int[], int[], int)
- * @since JDK1.0
+ * @since 1.0
*/
public void fillPolygon(int xPoints[], int yPoints[],
int nPoints) {
@@ -728,7 +728,7 @@
* @param y the <i>y</i> coordinate.
* @see java.awt.Graphics#drawBytes
* @see java.awt.Graphics#drawChars
- * @since JDK1.0
+ * @since 1.0
*/
public void drawString(String str, int x, int y) {
mGraphics.drawString(str, x, y);
@@ -807,7 +807,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public boolean drawImage(Image img, int x, int y,
ImageObserver observer) {
@@ -847,7 +847,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public boolean drawImage(Image img, int x, int y,
int width, int height,
@@ -885,7 +885,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public boolean drawImage(Image img, int x, int y,
Color bgcolor,
@@ -944,7 +944,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.0
+ * @since 1.0
*/
public boolean drawImage(Image img, int x, int y,
int width, int height,
@@ -1013,7 +1013,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public boolean drawImage(Image img,
int dx1, int dy1, int dx2, int dy2,
@@ -1075,7 +1075,7 @@
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
- * @since JDK1.1
+ * @since 1.1
*/
public boolean drawImage(Image img,
int dx1, int dy1, int dx2, int dy2,
@@ -1255,7 +1255,7 @@
* @see java.awt.Component#update
* @see java.awt.Component#getGraphics
* @see java.awt.Graphics#create
- * @since JDK1.0
+ * @since 1.0
*/
public void dispose() {
mGraphics.dispose();
--- a/jdk/src/share/classes/sun/reflect/MethodAccessorGenerator.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/reflect/MethodAccessorGenerator.java Wed Jun 18 13:14:15 2014 -0700
@@ -751,14 +751,14 @@
}
private String buildInternalSignature() {
- StringBuffer buf = new StringBuffer();
- buf.append("(");
+ StringBuilder sb = new StringBuilder();
+ sb.append("(");
for (int i = 0; i < parameterTypes.length; i++) {
- buf.append(getClassName(parameterTypes[i], true));
+ sb.append(getClassName(parameterTypes[i], true));
}
- buf.append(")");
- buf.append(getClassName(returnType, true));
- return buf.toString();
+ sb.append(")");
+ sb.append(getClassName(returnType, true));
+ return sb.toString();
}
private static synchronized String generateName(boolean isConstructor,
--- a/jdk/src/share/classes/sun/rmi/server/Activation.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/rmi/server/Activation.java Wed Jun 18 13:14:15 2014 -0700
@@ -1239,7 +1239,7 @@
checkArgs(desc, argv);
if (debugExec) {
- StringBuffer sb = new StringBuffer(argv[0]);
+ StringBuilder sb = new StringBuilder(argv[0]);
int j;
for (j = 1; j < argv.length; j++) {
sb.append(' ');
--- a/jdk/src/share/classes/sun/rmi/server/LoaderHandler.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/rmi/server/LoaderHandler.java Wed Jun 18 13:14:15 2014 -0700
@@ -793,7 +793,7 @@
} else if (urls.length == 1) {
return urls[0].toExternalForm();
} else {
- StringBuffer path = new StringBuffer(urls[0].toExternalForm());
+ StringBuilder path = new StringBuilder(urls[0].toExternalForm());
for (int i = 1; i < urls.length; i++) {
path.append(' ');
path.append(urls[i].toExternalForm());
--- a/jdk/src/share/classes/sun/rmi/server/Util.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/rmi/server/Util.java Wed Jun 18 13:14:15 2014 -0700
@@ -391,7 +391,7 @@
* the definition of a "method descriptor".
*/
private static String getMethodNameAndDescriptor(Method m) {
- StringBuffer desc = new StringBuffer(m.getName());
+ StringBuilder desc = new StringBuilder(m.getName());
desc.append('(');
Class<?>[] paramTypes = m.getParameterTypes();
for (int i = 0; i < paramTypes.length; i++) {
--- a/jdk/src/share/classes/sun/security/acl/AclImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/acl/AclImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -253,7 +253,7 @@
* ACL.
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
Enumeration<AclEntry> entries = entries();
while (entries.hasMoreElements()) {
AclEntry entry = entries.nextElement();
--- a/jdk/src/share/classes/sun/security/jgss/GSSCredentialImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/jgss/GSSCredentialImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -636,29 +636,29 @@
}
GSSCredentialSpi element = null;
- StringBuffer buffer = new StringBuffer("[GSSCredential: ");
+ StringBuilder sb = new StringBuilder("[GSSCredential: ");
Object[] elements = hashtable.entrySet().toArray();
for (int i = 0; i < elements.length; i++) {
try {
- buffer.append('\n');
+ sb.append('\n');
element = (GSSCredentialSpi)
((Map.Entry)elements[i]).getValue();
- buffer.append(element.getName());
- buffer.append(' ');
- buffer.append(element.getMechanism());
- buffer.append(element.isInitiatorCredential() ?
- " Initiate" : "");
- buffer.append(element.isAcceptorCredential() ?
- " Accept" : "");
- buffer.append(" [");
- buffer.append(element.getClass());
- buffer.append(']');
+ sb.append(element.getName());
+ sb.append(' ');
+ sb.append(element.getMechanism());
+ sb.append(element.isInitiatorCredential() ?
+ " Initiate" : "");
+ sb.append(element.isAcceptorCredential() ?
+ " Accept" : "");
+ sb.append(" [");
+ sb.append(element.getClass());
+ sb.append(']');
} catch (GSSException e) {
// skip to next element
}
}
- buffer.append(']');
- return buffer.toString();
+ sb.append(']');
+ return sb.toString();
}
static class SearchKey {
--- a/jdk/src/share/classes/sun/security/jgss/GSSHeader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/jgss/GSSHeader.java Wed Jun 18 13:14:15 2014 -0700
@@ -327,7 +327,7 @@
private String getHexBytes(byte[] bytes, int len)
throws IOException {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++) {
int b1 = (bytes[i]>>4) & 0x0f;
--- a/jdk/src/share/classes/sun/security/jgss/GSSToken.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/jgss/GSSToken.java Wed Jun 18 13:14:15 2014 -0700
@@ -216,7 +216,7 @@
}
public static final String getHexBytes(byte[] bytes, int pos, int len) {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = pos; i < (pos+len); i++) {
int b1 = (bytes[i]>>4) & 0x0f;
int b2 = bytes[i] & 0x0f;
--- a/jdk/src/share/classes/sun/security/jgss/ProviderList.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/jgss/ProviderList.java Wed Jun 18 13:14:15 2014 -0700
@@ -536,12 +536,12 @@
// For debugging
public String toString() {
- StringBuffer buf = new StringBuffer("<");
- buf.append(p.getName());
- buf.append(", ");
- buf.append(oid);
- buf.append(">");
- return buf.toString();
+ StringBuilder sb = new StringBuilder("<");
+ sb.append(p.getName());
+ sb.append(", ");
+ sb.append(oid);
+ sb.append(">");
+ return sb.toString();
}
}
}
--- a/jdk/src/share/classes/sun/security/jgss/TokenTracker.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/jgss/TokenTracker.java Wed Jun 18 13:14:15 2014 -0700
@@ -336,19 +336,19 @@
}
public String toString() {
- StringBuffer buf = new StringBuffer("TokenTracker: ");
- buf.append(" initNumber=").append(initNumber);
- buf.append(" windowStart=").append(windowStart);
- buf.append(" expectedNumber=").append(expectedNumber);
- buf.append(" windowStartIndex=").append(windowStartIndex);
- buf.append("\n\tIntervals are: {");
+ StringBuilder sb = new StringBuilder("TokenTracker: ");
+ sb.append(" initNumber=").append(initNumber);
+ sb.append(" windowStart=").append(windowStart);
+ sb.append(" expectedNumber=").append(expectedNumber);
+ sb.append(" windowStartIndex=").append(windowStartIndex);
+ sb.append("\n\tIntervals are: {");
for (int i = 0; i < list.size(); i++) {
if (i != 0)
- buf.append(", ");
- buf.append(list.get(i).toString());
+ sb.append(", ");
+ sb.append(list.get(i).toString());
}
- buf.append('}');
- return buf.toString();
+ sb.append('}');
+ return sb.toString();
}
/**
--- a/jdk/src/share/classes/sun/security/jgss/krb5/InitialToken.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/jgss/krb5/InitialToken.java Wed Jun 18 13:14:15 2014 -0700
@@ -164,15 +164,15 @@
serviceTicket.getServer();
// Cannot use '\"' instead of "\"" in constructor because
// it is interpreted as suggested length!
- StringBuffer buf = new StringBuffer("\"");
- buf.append(delegateTo.getName()).append('\"');
+ StringBuilder sb = new StringBuilder("\"");
+ sb.append(delegateTo.getName()).append('\"');
String realm = delegateTo.getRealmAsString();
- buf.append(" \"krbtgt/").append(realm).append('@');
- buf.append(realm).append('\"');
+ sb.append(" \"krbtgt/").append(realm).append('@');
+ sb.append(realm).append('\"');
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
DelegationPermission perm =
- new DelegationPermission(buf.toString());
+ new DelegationPermission(sb.toString());
sm.checkPermission(perm);
}
--- a/jdk/src/share/classes/sun/security/jgss/krb5/Krb5Context.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/jgss/krb5/Krb5Context.java Wed Jun 18 13:14:15 2014 -0700
@@ -1345,7 +1345,7 @@
private static String getHexBytes(byte[] bytes, int pos, int len) {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++) {
int b1 = (bytes[i]>>4) & 0x0f;
--- a/jdk/src/share/classes/sun/security/jgss/wrapper/Krb5Util.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/jgss/wrapper/Krb5Util.java Wed Jun 18 13:14:15 2014 -0700
@@ -41,9 +41,9 @@
String krbPrinc = name.getKrbName();
int atIndex = krbPrinc.indexOf('@');
String realm = krbPrinc.substring(atIndex + 1);
- StringBuffer buf = new StringBuffer("krbtgt/");
- buf.append(realm).append('@').append(realm);
- return buf.toString();
+ StringBuilder sb = new StringBuilder("krbtgt/");
+ sb.append(realm).append('@').append(realm);
+ return sb.toString();
}
// Perform the Service Permission check using the specified
--- a/jdk/src/share/classes/sun/security/jgss/wrapper/NativeGSSContext.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/jgss/wrapper/NativeGSSContext.java Wed Jun 18 13:14:15 2014 -0700
@@ -139,10 +139,10 @@
if (sm != null) {
String targetStr = targetName.getKrbName();
String tgsStr = Krb5Util.getTGSName(targetName);
- StringBuffer buf = new StringBuffer("\"");
- buf.append(targetStr).append("\" \"");
- buf.append(tgsStr).append('\"');
- String krbPrincPair = buf.toString();
+ StringBuilder sb = new StringBuilder("\"");
+ sb.append(targetStr).append("\" \"");
+ sb.append(tgsStr).append('\"');
+ String krbPrincPair = sb.toString();
SunNativeProvider.debug("Checking DelegationPermission (" +
krbPrincPair + ")");
DelegationPermission perm =
--- a/jdk/src/share/classes/sun/security/krb5/Credentials.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/krb5/Credentials.java Wed Jun 18 13:14:15 2014 -0700
@@ -510,21 +510,21 @@
}
public String toString() {
- StringBuffer buffer = new StringBuffer("Credentials:");
- buffer.append( "\n client=").append(client);
- buffer.append( "\n server=").append(server);
+ StringBuilder sb = new StringBuilder("Credentials:");
+ sb.append( "\n client=").append(client);
+ sb.append( "\n server=").append(server);
if (authTime != null) {
- buffer.append("\n authTime=").append(authTime);
+ sb.append("\n authTime=").append(authTime);
}
if (startTime != null) {
- buffer.append("\n startTime=").append(startTime);
+ sb.append("\n startTime=").append(startTime);
}
- buffer.append( "\n endTime=").append(endTime);
- buffer.append( "\n renewTill=").append(renewTill);
- buffer.append( "\n flags=").append(flags);
- buffer.append( "\nEType (skey)=").append(key.getEType());
- buffer.append( "\n (tkt key)=").append(ticket.encPart.eType);
- return buffer.toString();
+ sb.append( "\n endTime=").append(endTime);
+ sb.append( "\n renewTill=").append(renewTill);
+ sb.append( "\n flags=").append(flags);
+ sb.append( "\nEType (skey)=").append(key.getEType());
+ sb.append( "\n (tkt key)=").append(ticket.encPart.eType);
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/security/krb5/KrbException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/krb5/KrbException.java Wed Jun 18 13:14:15 2014 -0700
@@ -96,7 +96,7 @@
public String krbErrorMessage() {
- StringBuffer strbuf = new StringBuffer("krb_error " + returnCode);
+ StringBuilder strbuf = new StringBuilder("krb_error " + returnCode);
String msg = getMessage();
if (msg != null) {
strbuf.append(" ");
@@ -112,7 +112,7 @@
* If the error code is 0 then the first half is skipped.
*/
public String getMessage() {
- StringBuffer message = new StringBuffer();
+ StringBuilder message = new StringBuilder();
int returnCode = returnCode();
if (returnCode != 0) {
message.append(returnCodeMessage());
--- a/jdk/src/share/classes/sun/security/krb5/PrincipalName.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/krb5/PrincipalName.java Wed Jun 18 13:14:15 2014 -0700
@@ -480,7 +480,7 @@
}
public String getPrincipalNameAsString() {
- StringBuffer temp = new StringBuffer(nameStrings[0]);
+ StringBuilder temp = new StringBuilder(nameStrings[0]);
for (int i = 1; i < nameStrings.length; i++)
temp.append(nameStrings[i]);
return temp.toString();
@@ -521,7 +521,7 @@
public String getSalt() {
if (salt == null) {
- StringBuffer salt = new StringBuffer();
+ StringBuilder salt = new StringBuilder();
salt.append(nameRealm.toString());
for (int i = 0; i < nameStrings.length; i++) {
salt.append(nameStrings[i]);
@@ -532,7 +532,7 @@
}
public String toString() {
- StringBuffer str = new StringBuffer();
+ StringBuilder str = new StringBuilder();
for (int i = 0; i < nameStrings.length; i++) {
if (i > 0)
str.append("/");
@@ -544,7 +544,7 @@
}
public String getNameString() {
- StringBuffer str = new StringBuffer();
+ StringBuilder str = new StringBuilder();
for (int i = 0; i < nameStrings.length; i++) {
if (i > 0)
str.append("/");
--- a/jdk/src/share/classes/sun/security/krb5/internal/EncTicketPart.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/krb5/internal/EncTicketPart.java Wed Jun 18 13:14:15 2014 -0700
@@ -117,7 +117,7 @@
private static String getHexBytes(byte[] bytes, int len)
throws IOException {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++) {
int b1 = (bytes[i] >> 4) & 0x0f;
--- a/jdk/src/share/classes/sun/security/krb5/internal/TicketFlags.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/krb5/internal/TicketFlags.java Wed Jun 18 13:14:15 2014 -0700
@@ -137,7 +137,7 @@
* Returns the string representative of ticket flags.
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
boolean[] flags = toBooleanArray();
for (int i = 0; i < flags.length; i++) {
if (flags[i] == true) {
--- a/jdk/src/share/classes/sun/security/krb5/internal/crypto/EType.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/krb5/internal/crypto/EType.java Wed Jun 18 13:14:15 2014 -0700
@@ -269,7 +269,7 @@
}
int len = list.size();
if (len <= 0) {
- StringBuffer keystr = new StringBuffer();
+ StringBuilder keystr = new StringBuilder();
for (int i = 0; i < keys.length; i++) {
keystr.append(toString(keys[i].getEType()));
keystr.append(" ");
--- a/jdk/src/share/classes/sun/security/krb5/internal/crypto/dk/DkCrypto.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/krb5/internal/crypto/dk/DkCrypto.java Wed Jun 18 13:14:15 2014 -0700
@@ -636,7 +636,7 @@
// Routines used for debugging
static String bytesToString(byte[] digest) {
// Get character representation of digest
- StringBuffer digestString = new StringBuffer();
+ StringBuilder digestString = new StringBuilder();
for (int i = 0; i < digest.length; i++) {
if ((digest[i] & 0x000000ff) < 0x10) {
--- a/jdk/src/share/classes/sun/security/krb5/internal/ktab/KeyTabEntry.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/krb5/internal/ktab/KeyTabEntry.java Wed Jun 18 13:14:15 2014 -0700
@@ -73,7 +73,7 @@
}
public String getKeyString() {
- StringBuffer sb = new StringBuffer("0x");
+ StringBuilder sb = new StringBuilder("0x");
for (int i = 0; i < keyblock.length; i++) {
sb.append(String.format("%02x", keyblock[i]&0xff));
}
--- a/jdk/src/share/classes/sun/security/pkcs/PKCS9Attribute.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs/PKCS9Attribute.java Wed Jun 18 13:14:15 2014 -0700
@@ -790,26 +790,26 @@
* Returns a string representation of this attribute.
*/
public String toString() {
- StringBuffer buf = new StringBuffer(100);
+ StringBuilder sb = new StringBuilder(100);
- buf.append("[");
+ sb.append("[");
if (index == -1) {
- buf.append(oid.toString());
+ sb.append(oid.toString());
} else {
- buf.append(OID_NAME_TABLE.get(PKCS9_OIDS[index]));
+ sb.append(OID_NAME_TABLE.get(PKCS9_OIDS[index]));
}
- buf.append(": ");
+ sb.append(": ");
if (index == -1 || SINGLE_VALUED[index]) {
if (value instanceof byte[]) { // special case for octet string
HexDumpEncoder hexDump = new HexDumpEncoder();
- buf.append(hexDump.encodeBuffer((byte[]) value));
+ sb.append(hexDump.encodeBuffer((byte[]) value));
} else {
- buf.append(value.toString());
+ sb.append(value.toString());
}
- buf.append("]");
- return buf.toString();
+ sb.append("]");
+ return sb.toString();
} else { // multi-valued
boolean first = true;
Object[] values = (Object[]) value;
@@ -818,11 +818,11 @@
if (first)
first = false;
else
- buf.append(", ");
+ sb.append(", ");
- buf.append(values[j].toString());
+ sb.append(values[j].toString());
}
- return buf.toString();
+ return sb.toString();
}
}
@@ -857,7 +857,7 @@
private void throwTagException(Byte tag)
throws IOException {
Byte[] expectedTags = PKCS9_VALUE_TAGS[index];
- StringBuffer msg = new StringBuffer(100);
+ StringBuilder msg = new StringBuilder(100);
msg.append("Value of attribute ");
msg.append(oid.toString());
msg.append(" (");
--- a/jdk/src/share/classes/sun/security/pkcs/PKCS9Attributes.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs/PKCS9Attributes.java Wed Jun 18 13:14:15 2014 -0700
@@ -323,8 +323,8 @@
* Returns the PKCS9 block in a printable string form.
*/
public String toString() {
- StringBuffer buf = new StringBuffer(200);
- buf.append("PKCS9 Attributes: [\n\t");
+ StringBuilder sb = new StringBuilder(200);
+ sb.append("PKCS9 Attributes: [\n\t");
ObjectIdentifier oid;
PKCS9Attribute value;
@@ -339,14 +339,14 @@
if (first)
first = false;
else
- buf.append(";\n\t");
+ sb.append(";\n\t");
- buf.append(value.toString());
+ sb.append(value.toString());
}
- buf.append("\n\t] (end PKCS9 Attributes)");
+ sb.append("\n\t] (end PKCS9 Attributes)");
- return buf.toString();
+ return sb.toString();
}
/**
--- a/jdk/src/share/classes/sun/security/pkcs/SigningCertificateInfo.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs/SigningCertificateInfo.java Wed Jun 18 13:14:15 2014 -0700
@@ -92,15 +92,15 @@
}
public String toString() {
- StringBuffer buffer = new StringBuffer();
- buffer.append("[\n");
+ StringBuilder sb = new StringBuilder();
+ sb.append("[\n");
for (int i = 0; i < certId.length; i++) {
- buffer.append(certId[i].toString());
+ sb.append(certId[i].toString());
}
// format policies as a string
- buffer.append("\n]");
+ sb.append("\n]");
- return buffer.toString();
+ return sb.toString();
}
public void parse(byte[] bytes) throws IOException {
@@ -151,17 +151,17 @@
}
public String toString() {
- StringBuffer buffer = new StringBuffer();
- buffer.append("[\n\tCertificate hash (SHA-1):\n");
+ StringBuilder sb = new StringBuilder();
+ sb.append("[\n\tCertificate hash (SHA-1):\n");
if (hexDumper == null) {
hexDumper = new HexDumpEncoder();
}
- buffer.append(hexDumper.encode(certHash));
+ sb.append(hexDumper.encode(certHash));
if (issuer != null && serialNumber != null) {
- buffer.append("\n\tIssuer: " + issuer + "\n");
- buffer.append("\t" + serialNumber);
+ sb.append("\n\tIssuer: " + issuer + "\n");
+ sb.append("\t" + serialNumber);
}
- buffer.append("\n]");
- return buffer.toString();
+ sb.append("\n]");
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_AES_CTR_PARAMS.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_AES_CTR_PARAMS.java Wed Jun 18 13:14:15 2014 -0700
@@ -50,17 +50,17 @@
}
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("ulCounterBits: ");
- buffer.append(ulCounterBits);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("ulCounterBits: ");
+ sb.append(ulCounterBits);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("cb: ");
- buffer.append(Functions.toHexString(cb));
+ sb.append(Constants.INDENT);
+ sb.append("cb: ");
+ sb.append(Functions.toHexString(cb));
- return buffer.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_DATE.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_DATE.java Wed Jun 18 13:14:15 2014 -0700
@@ -122,16 +122,16 @@
* @return the string representation of CK_DATE
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(new String(day));
- buffer.append('.');
- buffer.append(new String(month));
- buffer.append('.');
- buffer.append(new String(year));
- buffer.append(" (DD.MM.YYYY)");
+ sb.append(new String(day));
+ sb.append('.');
+ sb.append(new String(month));
+ sb.append('.');
+ sb.append(new String(year));
+ sb.append(" (DD.MM.YYYY)");
- return buffer.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_ECDH1_DERIVE_PARAMS.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_ECDH1_DERIVE_PARAMS.java Wed Jun 18 13:14:15 2014 -0700
@@ -105,34 +105,34 @@
* @return the string representation of CK_PKCS5_PBKD2_PARAMS
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("kdf: 0x");
- buffer.append(Functions.toFullHexString(kdf));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("kdf: 0x");
+ sb.append(Functions.toFullHexString(kdf));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pSharedDataLen: ");
- buffer.append(pSharedData.length);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pSharedDataLen: ");
+ sb.append(pSharedData.length);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pSharedData: ");
- buffer.append(Functions.toHexString(pSharedData));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pSharedData: ");
+ sb.append(Functions.toHexString(pSharedData));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPublicDataLen: ");
- buffer.append(pPublicData.length);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pPublicDataLen: ");
+ sb.append(pPublicData.length);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPublicData: ");
- buffer.append(Functions.toHexString(pPublicData));
+ sb.append(Constants.INDENT);
+ sb.append("pPublicData: ");
+ sb.append(Functions.toHexString(pPublicData));
//buffer.append(Constants.NEWLINE);
- return buffer.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_ECDH2_DERIVE_PARAMS.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_ECDH2_DERIVE_PARAMS.java Wed Jun 18 13:14:15 2014 -0700
@@ -128,54 +128,54 @@
* @return the string representation of CK_PKCS5_PBKD2_PARAMS
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("kdf: 0x");
- buffer.append(Functions.toFullHexString(kdf));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("kdf: 0x");
+ sb.append(Functions.toFullHexString(kdf));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pSharedDataLen: ");
- buffer.append(pSharedData.length);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pSharedDataLen: ");
+ sb.append(pSharedData.length);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pSharedData: ");
- buffer.append(Functions.toHexString(pSharedData));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pSharedData: ");
+ sb.append(Functions.toHexString(pSharedData));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPublicDataLen: ");
- buffer.append(pPublicData.length);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pPublicDataLen: ");
+ sb.append(pPublicData.length);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPublicData: ");
- buffer.append(Functions.toHexString(pPublicData));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pPublicData: ");
+ sb.append(Functions.toHexString(pPublicData));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulPrivateDataLen: ");
- buffer.append(ulPrivateDataLen);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("ulPrivateDataLen: ");
+ sb.append(ulPrivateDataLen);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("hPrivateData: ");
- buffer.append(hPrivateData);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("hPrivateData: ");
+ sb.append(hPrivateData);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPublicDataLen2: ");
- buffer.append(pPublicData2.length);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pPublicDataLen2: ");
+ sb.append(pPublicData2.length);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPublicData2: ");
- buffer.append(Functions.toHexString(pPublicData2));
+ sb.append(Constants.INDENT);
+ sb.append("pPublicData2: ");
+ sb.append(Functions.toHexString(pPublicData2));
//buffer.append(Constants.NEWLINE);
- return buffer.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_INFO.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_INFO.java Wed Jun 18 13:14:15 2014 -0700
@@ -131,34 +131,34 @@
* @return the string representation of CK_INFO
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("cryptokiVersion: ");
- buffer.append(cryptokiVersion.toString());
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("cryptokiVersion: ");
+ sb.append(cryptokiVersion.toString());
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("manufacturerID: ");
- buffer.append(new String(manufacturerID));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("manufacturerID: ");
+ sb.append(new String(manufacturerID));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("flags: ");
- buffer.append(Functions.toBinaryString(flags));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("flags: ");
+ sb.append(Functions.toBinaryString(flags));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("libraryDescription: ");
- buffer.append(new String(libraryDescription));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("libraryDescription: ");
+ sb.append(new String(libraryDescription));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("libraryVersion: ");
- buffer.append(libraryVersion.toString());
+ sb.append(Constants.INDENT);
+ sb.append("libraryVersion: ");
+ sb.append(libraryVersion.toString());
//buffer.append(Constants.NEWLINE);
- return buffer.toString() ;
+ return sb.toString() ;
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_MECHANISM.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_MECHANISM.java Wed Jun 18 13:14:15 2014 -0700
@@ -143,24 +143,24 @@
* @return the string representation of CK_MECHANISM
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("mechanism: ");
- buffer.append(mechanism);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("mechanism: ");
+ sb.append(mechanism);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pParameter: ");
- buffer.append(pParameter.toString());
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pParameter: ");
+ sb.append(pParameter.toString());
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulParameterLen: ??");
+ sb.append(Constants.INDENT);
+ sb.append("ulParameterLen: ??");
//buffer.append(pParameter.length);
//buffer.append(Constants.NEWLINE);
- return buffer.toString() ;
+ return sb.toString() ;
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_MECHANISM_INFO.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_MECHANISM_INFO.java Wed Jun 18 13:14:15 2014 -0700
@@ -103,25 +103,25 @@
* @return the string representation of CK_MECHANISM_INFO
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("ulMinKeySize: ");
- buffer.append(String.valueOf(ulMinKeySize));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("ulMinKeySize: ");
+ sb.append(String.valueOf(ulMinKeySize));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulMaxKeySize: ");
- buffer.append(String.valueOf(ulMaxKeySize));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("ulMaxKeySize: ");
+ sb.append(String.valueOf(ulMaxKeySize));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("flags: ");
- buffer.append(String.valueOf(flags));
- buffer.append(" = ");
- buffer.append(Functions.mechanismInfoFlagsToString(flags));
+ sb.append(Constants.INDENT);
+ sb.append("flags: ");
+ sb.append(String.valueOf(flags));
+ sb.append(" = ");
+ sb.append(Functions.mechanismInfoFlagsToString(flags));
//buffer.append(Constants.NEWLINE);
- return buffer.toString() ;
+ return sb.toString() ;
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_PBE_PARAMS.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_PBE_PARAMS.java Wed Jun 18 13:14:15 2014 -0700
@@ -109,39 +109,39 @@
* @return the string representation of CK_PBE_PARAMS
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("pInitVector: ");
- buffer.append(pInitVector);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pInitVector: ");
+ sb.append(pInitVector);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulPasswordLen: ");
- buffer.append(pPassword.length);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("ulPasswordLen: ");
+ sb.append(pPassword.length);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPassword: ");
- buffer.append(pPassword);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pPassword: ");
+ sb.append(pPassword);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulSaltLen: ");
- buffer.append(pSalt.length);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("ulSaltLen: ");
+ sb.append(pSalt.length);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pSalt: ");
- buffer.append(pSalt);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pSalt: ");
+ sb.append(pSalt);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulIteration: ");
- buffer.append(ulIteration);
+ sb.append(Constants.INDENT);
+ sb.append("ulIteration: ");
+ sb.append(ulIteration);
//buffer.append(Constants.NEWLINE);
- return buffer.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_PKCS5_PBKD2_PARAMS.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_PKCS5_PBKD2_PARAMS.java Wed Jun 18 13:14:15 2014 -0700
@@ -118,44 +118,44 @@
* @return the string representation of CK_PKCS5_PBKD2_PARAMS
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("saltSource: ");
- buffer.append(saltSource);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("saltSource: ");
+ sb.append(saltSource);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pSaltSourceData: ");
- buffer.append(Functions.toHexString(pSaltSourceData));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pSaltSourceData: ");
+ sb.append(Functions.toHexString(pSaltSourceData));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulSaltSourceDataLen: ");
- buffer.append(pSaltSourceData.length);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("ulSaltSourceDataLen: ");
+ sb.append(pSaltSourceData.length);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("iterations: ");
- buffer.append(iterations);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("iterations: ");
+ sb.append(iterations);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("prf: ");
- buffer.append(prf);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("prf: ");
+ sb.append(prf);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPrfData: ");
- buffer.append(Functions.toHexString(pPrfData));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pPrfData: ");
+ sb.append(Functions.toHexString(pPrfData));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulPrfDataLen: ");
- buffer.append(pPrfData.length);
+ sb.append(Constants.INDENT);
+ sb.append("ulPrfDataLen: ");
+ sb.append(pPrfData.length);
//buffer.append(Constants.NEWLINE);
- return buffer.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_RSA_PKCS_OAEP_PARAMS.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_RSA_PKCS_OAEP_PARAMS.java Wed Jun 18 13:14:15 2014 -0700
@@ -110,34 +110,34 @@
* @return the string representation of CK_RSA_PKCS_OAEP_PARAMS
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("hashAlg: ");
- buffer.append(hashAlg);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("hashAlg: ");
+ sb.append(hashAlg);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("mgf: ");
- buffer.append(mgf);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("mgf: ");
+ sb.append(mgf);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("source: ");
- buffer.append(source);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("source: ");
+ sb.append(source);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pSourceData: ");
- buffer.append(pSourceData.toString());
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pSourceData: ");
+ sb.append(pSourceData.toString());
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pSourceDataLen: ");
- buffer.append(Functions.toHexString(pSourceData));
+ sb.append(Constants.INDENT);
+ sb.append("pSourceDataLen: ");
+ sb.append(Functions.toHexString(pSourceData));
//buffer.append(Constants.NEWLINE);
- return buffer.toString() ;
+ return sb.toString() ;
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_RSA_PKCS_PSS_PARAMS.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_RSA_PKCS_PSS_PARAMS.java Wed Jun 18 13:14:15 2014 -0700
@@ -95,24 +95,24 @@
* @return the string representation of CK_PKCS5_PBKD2_PARAMS
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("hashAlg: 0x");
- buffer.append(Functions.toFullHexString(hashAlg));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("hashAlg: 0x");
+ sb.append(Functions.toFullHexString(hashAlg));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("mgf: 0x");
- buffer.append(Functions.toFullHexString(mgf));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("mgf: 0x");
+ sb.append(Functions.toFullHexString(mgf));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("sLen: ");
- buffer.append(sLen);
+ sb.append(Constants.INDENT);
+ sb.append("sLen: ");
+ sb.append(sLen);
//buffer.append(Constants.NEWLINE);
- return buffer.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_SESSION_INFO.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_SESSION_INFO.java Wed Jun 18 13:14:15 2014 -0700
@@ -114,29 +114,29 @@
* @return the string representation of CK_SESSION_INFO
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("slotID: ");
- buffer.append(String.valueOf(slotID));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("slotID: ");
+ sb.append(String.valueOf(slotID));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("state: ");
- buffer.append(Functions.sessionStateToString(state));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("state: ");
+ sb.append(Functions.sessionStateToString(state));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("flags: ");
- buffer.append(Functions.sessionInfoFlagsToString(flags));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("flags: ");
+ sb.append(Functions.sessionInfoFlagsToString(flags));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulDeviceError: ");
- buffer.append(Functions.toHexString(ulDeviceError));
+ sb.append(Constants.INDENT);
+ sb.append("ulDeviceError: ");
+ sb.append(Functions.toHexString(ulDeviceError));
//buffer.append(Constants.NEWLINE);
- return buffer.toString() ;
+ return sb.toString() ;
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_SLOT_INFO.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_SLOT_INFO.java Wed Jun 18 13:14:15 2014 -0700
@@ -130,34 +130,34 @@
* @return the string representation of CK_SLOT_INFO
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("slotDescription: ");
- buffer.append(new String(slotDescription));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("slotDescription: ");
+ sb.append(new String(slotDescription));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("manufacturerID: ");
- buffer.append(new String(manufacturerID));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("manufacturerID: ");
+ sb.append(new String(manufacturerID));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("flags: ");
- buffer.append(Functions.slotInfoFlagsToString(flags));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("flags: ");
+ sb.append(Functions.slotInfoFlagsToString(flags));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("hardwareVersion: ");
- buffer.append(hardwareVersion.toString());
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("hardwareVersion: ");
+ sb.append(hardwareVersion.toString());
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("firmwareVersion: ");
- buffer.append(firmwareVersion.toString());
+ sb.append(Constants.INDENT);
+ sb.append("firmwareVersion: ");
+ sb.append(firmwareVersion.toString());
//buffer.append(Constants.NEWLINE);
- return buffer.toString() ;
+ return sb.toString() ;
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_TOKEN_INFO.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_TOKEN_INFO.java Wed Jun 18 13:14:15 2014 -0700
@@ -271,119 +271,119 @@
* @return the string representation of CK_TOKEN_INFO
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("label: ");
- buffer.append(new String(label));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("label: ");
+ sb.append(new String(label));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("manufacturerID: ");
- buffer.append(new String(manufacturerID));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("manufacturerID: ");
+ sb.append(new String(manufacturerID));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("model: ");
- buffer.append(new String(model));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("model: ");
+ sb.append(new String(model));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("serialNumber: ");
- buffer.append(new String(serialNumber));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("serialNumber: ");
+ sb.append(new String(serialNumber));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("flags: ");
- buffer.append(Functions.tokenInfoFlagsToString(flags));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("flags: ");
+ sb.append(Functions.tokenInfoFlagsToString(flags));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulMaxSessionCount: ");
- buffer.append((ulMaxSessionCount == PKCS11Constants.CK_EFFECTIVELY_INFINITE)
+ sb.append(Constants.INDENT);
+ sb.append("ulMaxSessionCount: ");
+ sb.append((ulMaxSessionCount == PKCS11Constants.CK_EFFECTIVELY_INFINITE)
? "CK_EFFECTIVELY_INFINITE"
: (ulMaxSessionCount == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
? "CK_UNAVAILABLE_INFORMATION"
: String.valueOf(ulMaxSessionCount));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulSessionCount: ");
- buffer.append((ulSessionCount == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
+ sb.append(Constants.INDENT);
+ sb.append("ulSessionCount: ");
+ sb.append((ulSessionCount == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
? "CK_UNAVAILABLE_INFORMATION"
: String.valueOf(ulSessionCount));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulMaxRwSessionCount: ");
- buffer.append((ulMaxRwSessionCount == PKCS11Constants.CK_EFFECTIVELY_INFINITE)
+ sb.append(Constants.INDENT);
+ sb.append("ulMaxRwSessionCount: ");
+ sb.append((ulMaxRwSessionCount == PKCS11Constants.CK_EFFECTIVELY_INFINITE)
? "CK_EFFECTIVELY_INFINITE"
: (ulMaxRwSessionCount == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
? "CK_UNAVAILABLE_INFORMATION"
: String.valueOf(ulMaxRwSessionCount));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulRwSessionCount: ");
- buffer.append((ulRwSessionCount == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
+ sb.append(Constants.INDENT);
+ sb.append("ulRwSessionCount: ");
+ sb.append((ulRwSessionCount == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
? "CK_UNAVAILABLE_INFORMATION"
: String.valueOf(ulRwSessionCount));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulMaxPinLen: ");
- buffer.append(String.valueOf(ulMaxPinLen));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("ulMaxPinLen: ");
+ sb.append(String.valueOf(ulMaxPinLen));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulMinPinLen: ");
- buffer.append(String.valueOf(ulMinPinLen));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("ulMinPinLen: ");
+ sb.append(String.valueOf(ulMinPinLen));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulTotalPublicMemory: ");
- buffer.append((ulTotalPublicMemory == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
+ sb.append(Constants.INDENT);
+ sb.append("ulTotalPublicMemory: ");
+ sb.append((ulTotalPublicMemory == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
? "CK_UNAVAILABLE_INFORMATION"
: String.valueOf(ulTotalPublicMemory));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulFreePublicMemory: ");
- buffer.append((ulFreePublicMemory == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
+ sb.append(Constants.INDENT);
+ sb.append("ulFreePublicMemory: ");
+ sb.append((ulFreePublicMemory == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
? "CK_UNAVAILABLE_INFORMATION"
: String.valueOf(ulFreePublicMemory));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulTotalPrivateMemory: ");
- buffer.append((ulTotalPrivateMemory == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
+ sb.append(Constants.INDENT);
+ sb.append("ulTotalPrivateMemory: ");
+ sb.append((ulTotalPrivateMemory == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
? "CK_UNAVAILABLE_INFORMATION"
: String.valueOf(ulTotalPrivateMemory));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulFreePrivateMemory: ");
- buffer.append((ulFreePrivateMemory == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
+ sb.append(Constants.INDENT);
+ sb.append("ulFreePrivateMemory: ");
+ sb.append((ulFreePrivateMemory == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
? "CK_UNAVAILABLE_INFORMATION"
: String.valueOf(ulFreePrivateMemory));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("hardwareVersion: ");
- buffer.append(hardwareVersion.toString());
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("hardwareVersion: ");
+ sb.append(hardwareVersion.toString());
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("firmwareVersion: ");
- buffer.append(firmwareVersion.toString());
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("firmwareVersion: ");
+ sb.append(firmwareVersion.toString());
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("utcTime: ");
- buffer.append(new String(utcTime));
+ sb.append(Constants.INDENT);
+ sb.append("utcTime: ");
+ sb.append(new String(utcTime));
//buffer.append(Constants.NEWLINE);
- return buffer.toString() ;
+ return sb.toString() ;
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_X9_42_DH1_DERIVE_PARAMS.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_X9_42_DH1_DERIVE_PARAMS.java Wed Jun 18 13:14:15 2014 -0700
@@ -99,34 +99,34 @@
* @return the string representation of CK_PKCS5_PBKD2_PARAMS
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("kdf: 0x");
- buffer.append(Functions.toFullHexString(kdf));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("kdf: 0x");
+ sb.append(Functions.toFullHexString(kdf));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pOtherInfoLen: ");
- buffer.append(pOtherInfo.length);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pOtherInfoLen: ");
+ sb.append(pOtherInfo.length);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pOtherInfo: ");
- buffer.append(Functions.toHexString(pOtherInfo));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pOtherInfo: ");
+ sb.append(Functions.toHexString(pOtherInfo));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPublicDataLen: ");
- buffer.append(pPublicData.length);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pPublicDataLen: ");
+ sb.append(pPublicData.length);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPublicData: ");
- buffer.append(Functions.toHexString(pPublicData));
+ sb.append(Constants.INDENT);
+ sb.append("pPublicData: ");
+ sb.append(Functions.toHexString(pPublicData));
//buffer.append(Constants.NEWLINE);
- return buffer.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_X9_42_DH2_DERIVE_PARAMS.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_X9_42_DH2_DERIVE_PARAMS.java Wed Jun 18 13:14:15 2014 -0700
@@ -128,54 +128,54 @@
* @return the string representation of CK_PKCS5_PBKD2_PARAMS
*/
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buffer.append(Constants.INDENT);
- buffer.append("kdf: 0x");
- buffer.append(Functions.toFullHexString(kdf));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("kdf: 0x");
+ sb.append(Functions.toFullHexString(kdf));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pOtherInfoLen: ");
- buffer.append(pOtherInfo.length);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pOtherInfoLen: ");
+ sb.append(pOtherInfo.length);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pOtherInfo: ");
- buffer.append(Functions.toHexString(pOtherInfo));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pOtherInfo: ");
+ sb.append(Functions.toHexString(pOtherInfo));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPublicDataLen: ");
- buffer.append(pPublicData.length);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pPublicDataLen: ");
+ sb.append(pPublicData.length);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPublicData: ");
- buffer.append(Functions.toHexString(pPublicData));
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pPublicData: ");
+ sb.append(Functions.toHexString(pPublicData));
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("ulPrivateDataLen: ");
- buffer.append(ulPrivateDataLen);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("ulPrivateDataLen: ");
+ sb.append(ulPrivateDataLen);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("hPrivateData: ");
- buffer.append(hPrivateData);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("hPrivateData: ");
+ sb.append(hPrivateData);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPublicDataLen2: ");
- buffer.append(pPublicData2.length);
- buffer.append(Constants.NEWLINE);
+ sb.append(Constants.INDENT);
+ sb.append("pPublicDataLen2: ");
+ sb.append(pPublicData2.length);
+ sb.append(Constants.NEWLINE);
- buffer.append(Constants.INDENT);
- buffer.append("pPublicData2: ");
- buffer.append(Functions.toHexString(pPublicData2));
+ sb.append(Constants.INDENT);
+ sb.append("pPublicData2: ");
+ sb.append(Functions.toHexString(pPublicData2));
//buffer.append(Constants.NEWLINE);
- return buffer.toString();
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/Functions.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/Functions.java Wed Jun 18 13:14:15 2014 -0700
@@ -109,14 +109,14 @@
*/
public static String toFullHexString(long value) {
long currentValue = value;
- StringBuffer stringBuffer = new StringBuffer(16);
+ StringBuilder sb = new StringBuilder(16);
for(int j = 0; j < 16; j++) {
int currentDigit = (int) currentValue & 0xf;
- stringBuffer.append(HEX_DIGITS[currentDigit]);
+ sb.append(HEX_DIGITS[currentDigit]);
currentValue >>>= 4;
}
- return stringBuffer.reverse().toString();
+ return sb.reverse().toString();
}
/**
@@ -128,14 +128,14 @@
*/
public static String toFullHexString(int value) {
int currentValue = value;
- StringBuffer stringBuffer = new StringBuffer(8);
+ StringBuilder sb = new StringBuilder(8);
for(int i = 0; i < 8; i++) {
int currentDigit = currentValue & 0xf;
- stringBuffer.append(HEX_DIGITS[currentDigit]);
+ sb.append(HEX_DIGITS[currentDigit]);
currentValue >>>= 4;
}
- return stringBuffer.reverse().toString();
+ return sb.reverse().toString();
}
/**
@@ -161,20 +161,20 @@
return null;
}
- StringBuffer buffer = new StringBuffer(2 * value.length);
+ StringBuilder sb = new StringBuilder(2 * value.length);
int single;
for (int i = 0; i < value.length; i++) {
single = value[i] & 0xFF;
if (single < 0x10) {
- buffer.append('0');
+ sb.append('0');
}
- buffer.append(Integer.toString(single, 16));
+ sb.append(Integer.toString(single, 16));
}
- return buffer.toString();
+ return sb.toString();
}
/**
--- a/jdk/src/share/classes/sun/security/provider/AuthPolicyFile.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/provider/AuthPolicyFile.java Wed Jun 18 13:14:15 2014 -0700
@@ -944,7 +944,7 @@
}
File f = new File(path);
path = f.getCanonicalPath();
- StringBuffer sb = new StringBuffer(path);
+ StringBuilder sb = new StringBuilder(path);
// reappend '*' to canonicalized filename (note that
// canonicalization may have removed trailing file
// separator, so we have to check for that, too)
@@ -1095,7 +1095,7 @@
@Override
public String toString(){
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append(rb.getString("LPARAM"));
sb.append(getCodeSource());
sb.append("\n");
--- a/jdk/src/share/classes/sun/security/provider/SeedGenerator.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/provider/SeedGenerator.java Wed Jun 18 13:14:15 2014 -0700
@@ -150,14 +150,13 @@
* Retrieve some system information, hashed.
*/
static byte[] getSystemEntropy() {
- byte[] ba;
final MessageDigest md;
try {
md = MessageDigest.getInstance("SHA");
} catch (NoSuchAlgorithmException nsae) {
- throw new InternalError("internal error: SHA-1 not available."
- , nsae);
+ throw new InternalError("internal error: SHA-1 not available.",
+ nsae);
}
// The current time in millis
@@ -170,11 +169,8 @@
public Void run() {
try {
// System properties can change from machine to machine
- String s;
Properties p = System.getProperties();
- Enumeration<?> e = p.propertyNames();
- while (e.hasMoreElements()) {
- s =(String)e.nextElement();
+ for (String s: p.stringPropertyNames()) {
md.update(s.getBytes());
md.update(p.getProperty(s).getBytes());
}
--- a/jdk/src/share/classes/sun/security/provider/X509Factory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/provider/X509Factory.java Wed Jun 18 13:14:15 2014 -0700
@@ -519,7 +519,7 @@
// Step 2: Read the rest of header, determine the line end
int end;
- StringBuffer header = new StringBuffer("-----");
+ StringBuilder header = new StringBuilder("-----");
while (true) {
int next = is.read();
if (next == -1) {
@@ -562,7 +562,7 @@
}
// Step 4: Consume the footer
- StringBuffer footer = new StringBuffer("-");
+ StringBuilder footer = new StringBuilder("-");
while (true) {
int next = is.read();
// Add next == '\n' for maximum safety, in case endline
--- a/jdk/src/share/classes/sun/security/provider/certpath/URICertStore.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/provider/certpath/URICertStore.java Wed Jun 18 13:14:15 2014 -0700
@@ -84,7 +84,7 @@
*
* @author Andreas Sterbenz
* @author Sean Mullan
- * @since 7.0
+ * @since 1.7
*/
class URICertStore extends CertStoreSpi {
--- a/jdk/src/share/classes/sun/security/smartcardio/PCSC.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/smartcardio/PCSC.java Wed Jun 18 13:14:15 2014 -0700
@@ -172,7 +172,7 @@
private final static char[] hexDigits = "0123456789abcdef".toCharArray();
public static String toString(byte[] b) {
- StringBuffer sb = new StringBuffer(b.length * 3);
+ StringBuilder sb = new StringBuilder(b.length * 3);
for (int i = 0; i < b.length; i++) {
int k = b[i] & 0xff;
if (i != 0) {
--- a/jdk/src/share/classes/sun/security/ssl/BaseSSLSocketImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/ssl/BaseSSLSocketImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -307,7 +307,7 @@
* Gets the local address to which the socket is bound.
*
* @return the local address to which the socket is bound.
- * @since JDK1.1
+ * @since 1.1
*/
@Override
public final InetAddress getLocalAddress() {
--- a/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java Wed Jun 18 13:14:15 2014 -0700
@@ -1474,17 +1474,17 @@
s.println();
if (protocolVersion.v >= ProtocolVersion.TLS12.v) {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
boolean opened = false;
for (SignatureAndHashAlgorithm signAlg : algorithms) {
if (opened) {
- buffer.append(", " + signAlg.getAlgorithmName());
+ sb.append(", " + signAlg.getAlgorithmName());
} else {
- buffer.append(signAlg.getAlgorithmName());
+ sb.append(signAlg.getAlgorithmName());
opened = true;
}
}
- s.println("Supported Signature Algorithms: " + buffer);
+ s.println("Supported Signature Algorithms: " + sb);
}
s.println("Cert Authorities:");
--- a/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -2594,7 +2594,7 @@
*/
@Override
public String toString() {
- StringBuffer retval = new StringBuffer(80);
+ StringBuilder retval = new StringBuilder(80);
retval.append(Integer.toHexString(hashCode()));
retval.append("[");
--- a/jdk/src/share/classes/sun/security/ssl/ServerNameExtension.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/ssl/ServerNameExtension.java Wed Jun 18 13:14:15 2014 -0700
@@ -266,12 +266,12 @@
@Override
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (SNIServerName sniName : sniMap.values()) {
- buffer.append("[" + sniName + "]");
+ sb.append("[" + sniName + "]");
}
- return "Extension " + type + ", server_name: " + buffer;
+ return "Extension " + type + ", server_name: " + sb;
}
private static class UnknownServerName extends SNIServerName {
--- a/jdk/src/share/classes/sun/security/ssl/SessionId.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/ssl/SessionId.java Wed Jun 18 13:14:15 2014 -0700
@@ -72,16 +72,16 @@
public String toString ()
{
int len = sessionId.length;
- StringBuffer s = new StringBuffer (10 + 2 * len);
+ StringBuilder sb = new StringBuilder (10 + 2 * len);
- s.append ("{");
+ sb.append("{");
for (int i = 0; i < len; i++) {
- s.append (0x0ff & sessionId [i]);
+ sb.append(0x0ff & sessionId[i]);
if (i != (len - 1))
- s.append (", ");
+ sb.append (", ");
}
- s.append ("}");
- return s.toString ();
+ sb.append("}");
+ return sb.toString ();
}
--- a/jdk/src/share/classes/sun/security/ssl/SignatureAlgorithmsExtension.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/ssl/SignatureAlgorithmsExtension.java Wed Jun 18 13:14:15 2014 -0700
@@ -118,18 +118,18 @@
@Override
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
boolean opened = false;
for (SignatureAndHashAlgorithm signAlg : algorithms) {
if (opened) {
- buffer.append(", " + signAlg.getAlgorithmName());
+ sb.append(", " + signAlg.getAlgorithmName());
} else {
- buffer.append(signAlg.getAlgorithmName());
+ sb.append(signAlg.getAlgorithmName());
opened = true;
}
}
- return "Extension " + type + ", signature_algorithms: " + buffer;
+ return "Extension " + type + ", signature_algorithms: " + sb;
}
}
--- a/jdk/src/share/classes/sun/security/tools/KeyStoreUtil.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/tools/KeyStoreUtil.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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,19 +25,28 @@
package sun.security.tools;
+
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.io.StreamTokenizer;
+import java.io.StringReader;
import java.net.URL;
import java.security.KeyStore;
import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import java.util.Locale;
+import java.util.Properties;
+
+import sun.security.util.PropertyExpander;
/**
* <p> This class provides several utilities to <code>KeyStore</code>.
@@ -151,4 +160,83 @@
return null;
}
}
+
+ /**
+ * Parses a option line likes
+ * -genkaypair -dname "CN=Me"
+ * and add the results into a list
+ * @param list the list to fill into
+ * @param s the line
+ */
+ private static void parseArgsLine(List<String> list, String s)
+ throws IOException, PropertyExpander.ExpandException {
+ StreamTokenizer st = new StreamTokenizer(new StringReader(s));
+
+ st.resetSyntax();
+ st.whitespaceChars(0x00, 0x20);
+ st.wordChars(0x21, 0xFF);
+ // Everything is a word char except for quotation and apostrophe
+ st.quoteChar('"');
+ st.quoteChar('\'');
+
+ while (true) {
+ if (st.nextToken() == StreamTokenizer.TT_EOF) {
+ break;
+ }
+ list.add(PropertyExpander.expand(st.sval));
+ }
+ }
+
+ /**
+ * Prepends matched options from a pre-configured options file.
+ * @param tool the name of the tool, can be "keytool" or "jarsigner"
+ * @param file the pre-configured options file
+ * @param c1 the name of the command, with the "-" prefix,
+ * must not be null
+ * @param c2 the alternative command name, with the "-" prefix,
+ * null if none. For example, "genkey" is alt name for
+ * "genkeypair". A command can only have one alt name now.
+ * @param args existing arguments
+ * @return arguments combined
+ * @throws IOException if there is a file I/O or format error
+ * @throws PropertyExpander.ExpandException
+ * if there is a property expansion error
+ */
+ public static String[] expandArgs(String tool, String file,
+ String c1, String c2, String[] args)
+ throws IOException, PropertyExpander.ExpandException {
+
+ List<String> result = new ArrayList<>();
+ Properties p = new Properties();
+ p.load(new FileInputStream(file));
+
+ String s = p.getProperty(tool + ".all");
+ if (s != null) {
+ parseArgsLine(result, s);
+ }
+
+ // Cannot provide both -genkey and -genkeypair
+ String s1 = p.getProperty(tool + "." + c1.substring(1));
+ String s2 = null;
+ if (c2 != null) {
+ s2 = p.getProperty(tool + "." + c2.substring(1));
+ }
+ if (s1 != null && s2 != null) {
+ throw new IOException("Cannot have both " + c1 + " and "
+ + c2 + " as pre-configured options");
+ }
+ if (s1 == null) {
+ s1 = s2;
+ }
+ if (s1 != null) {
+ parseArgsLine(result, s1);
+ }
+
+ if (result.isEmpty()) {
+ return args;
+ } else {
+ result.addAll(Arrays.asList(args));
+ return result.toArray(new String[result.size()]);
+ }
+ }
}
--- a/jdk/src/share/classes/sun/security/tools/jarsigner/Main.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/tools/jarsigner/Main.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, 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
@@ -178,7 +178,7 @@
public void run(String args[]) {
try {
- parseArgs(args);
+ args = parseArgs(args);
// Try to load and install the specified providers
if (providers != null) {
@@ -282,11 +282,39 @@
/*
* Parse command line arguments.
*/
- void parseArgs(String args[]) {
+ String[] parseArgs(String args[]) throws Exception {
/* parse flags */
int n = 0;
if (args.length == 0) fullusage();
+
+ String confFile = null;
+ String command = "-sign";
+ for (n=0; n < args.length; n++) {
+ if (collator.compare(args[n], "-verify") == 0) {
+ command = "-verify";
+ } else if (collator.compare(args[n], "-conf") == 0) {
+ if (n == args.length - 1) {
+ usageNoArg();
+ }
+ confFile = args[++n];
+ }
+ }
+
+ if (confFile != null) {
+ args = KeyStoreUtil.expandArgs(
+ "jarsigner", confFile, command, null, args);
+ }
+
+ debug = Arrays.stream(args).anyMatch(
+ x -> collator.compare(x, "-debug") == 0);
+
+ if (debug) {
+ // No need to localize debug output
+ System.out.println("Command line args: " +
+ Arrays.toString(args));
+ }
+
for (n=0; n < args.length; n++) {
String flags = args[n];
@@ -307,6 +335,8 @@
alias = flags;
ckaliases.add(alias);
}
+ } else if (collator.compare(flags, "-conf") == 0) {
+ if (++n == args.length) usageNoArg();
} else if (collator.compare(flags, "-keystore") == 0) {
if (++n == args.length) usageNoArg();
keystore = args[n];
@@ -347,7 +377,7 @@
if (++n == args.length) usageNoArg();
tSADigestAlg = args[n];
} else if (collator.compare(flags, "-debug") ==0) {
- debug = true;
+ // Already processed
} else if (collator.compare(flags, "-keypass") ==0) {
if (++n == args.length) usageNoArg();
keypass = getPass(modifier, args[n]);
@@ -466,6 +496,7 @@
usage();
}
}
+ return args;
}
static char[] getPass(String modifier, String arg) {
@@ -568,6 +599,9 @@
System.out.println(rb.getString
(".strict.treat.warnings.as.errors"));
System.out.println();
+ System.out.println(rb.getString
+ (".conf.url.specify.a.pre.configured.options.file"));
+ System.out.println();
System.exit(0);
}
@@ -694,7 +728,7 @@
output.put(label, new ArrayList<String>());
}
- StringBuffer fb = new StringBuffer();
+ StringBuilder fb = new StringBuilder();
String s = Long.toString(je.getSize());
for (int i = 6 - s.length(); i > 0; --i) {
fb.append(' ');
@@ -1538,25 +1572,25 @@
if (cacheForSignerInfo.containsKey(signer)) {
return cacheForSignerInfo.get(signer);
}
- StringBuffer s = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
List<? extends Certificate> certs = signer.getSignerCertPath().getCertificates();
// display the signature timestamp, if present
Date timestamp;
Timestamp ts = signer.getTimestamp();
if (ts != null) {
- s.append(printTimestamp(tab, ts));
- s.append('\n');
+ sb.append(printTimestamp(tab, ts));
+ sb.append('\n');
timestamp = ts.getTimestamp();
} else {
timestamp = null;
noTimestamp = true;
}
- // display the certificate(s). The first one is end-entity cert and
+ // display the certificate(sb). The first one is end-entity cert and
// its KeyUsage should be checked.
boolean first = true;
for (Certificate c : certs) {
- s.append(printCert(tab, c, true, timestamp, first));
- s.append('\n');
+ sb.append(printCert(tab, c, true, timestamp, first));
+ sb.append('\n');
first = false;
}
try {
@@ -1571,11 +1605,11 @@
// No more warning, we alreay have hasExpiredCert or notYetValidCert
} else {
chainNotValidated = true;
- s.append(tab + rb.getString(".CertPath.not.validated.") +
+ sb.append(tab + rb.getString(".CertPath.not.validated.") +
e.getLocalizedMessage() + "]\n"); // TODO
}
}
- String result = s.toString();
+ String result = sb.toString();
cacheForSignerInfo.put(signer, result);
return result;
}
--- a/jdk/src/share/classes/sun/security/tools/jarsigner/Resources.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/tools/jarsigner/Resources.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -108,6 +108,8 @@
" [-providerArg <arg>]] ... master class file and constructor argument"},
{".strict.treat.warnings.as.errors",
"[-strict] treat warnings as errors"},
+ {".conf.url.specify.a.pre.configured.options.file",
+ "[-conf <url>] specify a pre-configured options file"},
{"Option.lacks.argument", "Option lacks argument"},
{"Please.type.jarsigner.help.for.usage", "Please type jarsigner -help for usage"},
{"Please.specify.jarfile.name", "Please specify jarfile name"},
--- a/jdk/src/share/classes/sun/security/tools/keytool/Main.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/tools/keytool/Main.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, 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,7 +38,6 @@
import java.security.Timestamp;
import java.security.UnrecoverableEntryException;
import java.security.UnrecoverableKeyException;
-import java.security.NoSuchAlgorithmException;
import java.security.Principal;
import java.security.Provider;
import java.security.cert.Certificate;
@@ -64,6 +63,7 @@
import java.security.cert.X509CRLSelector;
import javax.security.auth.x500.X500Principal;
import java.util.Base64;
+
import sun.security.util.ObjectIdentifier;
import sun.security.pkcs10.PKCS10;
import sun.security.pkcs10.PKCS10Attribute;
@@ -242,16 +242,44 @@
final String description;
final Option[] options;
+ final String name;
+
+ String altName; // "genkey" is altName for "genkeypair"
+
Command(String d, Option... o) {
description = d;
options = o;
+ name = "-" + name().toLowerCase(Locale.ENGLISH);
}
@Override
public String toString() {
- return "-" + name().toLowerCase(Locale.ENGLISH);
+ return name;
+ }
+ public String getAltName() {
+ return altName;
+ }
+ public void setAltName(String altName) {
+ this.altName = altName;
+ }
+ public static Command getCommand(String cmd) {
+ for (Command c: Command.values()) {
+ if (collator.compare(cmd, c.name) == 0
+ || (c.altName != null
+ && collator.compare(cmd, c.altName) == 0)) {
+ return c;
+ }
+ }
+ return null;
}
};
+ static {
+ Command.GENKEYPAIR.setAltName("-genkey");
+ Command.IMPORTCERT.setAltName("-import");
+ Command.EXPORTCERT.setAltName("-export");
+ Command.IMPORTPASS.setAltName("-importpassword");
+ }
+
enum Option {
ALIAS("alias", "<alias>", "alias.name.of.the.entry.to.process"),
DESTALIAS("destalias", "<destalias>", "destination.alias"),
@@ -335,7 +363,7 @@
private void run(String[] args, PrintStream out) throws Exception {
try {
- parseArgs(args);
+ args = parseArgs(args);
if (command != null) {
doCommands(out);
}
@@ -366,11 +394,43 @@
/**
* Parse command line arguments.
*/
- void parseArgs(String[] args) {
+ String[] parseArgs(String[] args) throws Exception {
int i=0;
boolean help = args.length == 0;
+ String confFile = null;
+
+ for (i=0; i < args.length; i++) {
+ String flags = args[i];
+ if (flags.startsWith("-")) {
+ if (collator.compare(flags, "-conf") == 0) {
+ if (i == args.length - 1) {
+ errorNeedArgument(flags);
+ }
+ confFile = args[++i];
+ } else {
+ Command c = Command.getCommand(flags);
+ if (c != null) command = c;
+ }
+ }
+ }
+
+ if (confFile != null && command != null) {
+ args = KeyStoreUtil.expandArgs("keytool", confFile,
+ command.toString(),
+ command.getAltName(), args);
+ }
+
+ debug = Arrays.stream(args).anyMatch(
+ x -> collator.compare(x, "-debug") == 0);
+
+ if (debug) {
+ // No need to localize debug output
+ System.out.println("Command line args: " +
+ Arrays.toString(args));
+ }
+
for (i=0; (i < args.length) && args[i].startsWith("-"); i++) {
String flags = args[i];
@@ -395,34 +455,18 @@
modifier = flags.substring(pos+1);
flags = flags.substring(0, pos);
}
+
/*
* command modes
*/
- boolean isCommand = false;
- for (Command c: Command.values()) {
- if (collator.compare(flags, c.toString()) == 0) {
- command = c;
- isCommand = true;
- break;
- }
- }
-
- if (isCommand) {
- // already recognized as a command
- } else if (collator.compare(flags, "-export") == 0) {
- command = EXPORTCERT;
- } else if (collator.compare(flags, "-genkey") == 0) {
- command = GENKEYPAIR;
- } else if (collator.compare(flags, "-import") == 0) {
- command = IMPORTCERT;
- } else if (collator.compare(flags, "-importpassword") == 0) {
- command = IMPORTPASS;
- }
- /*
- * Help
- */
- else if (collator.compare(flags, "-help") == 0) {
+ Command c = Command.getCommand(flags);
+
+ if (c != null) {
+ command = c;
+ } else if (collator.compare(flags, "-help") == 0) {
help = true;
+ } else if (collator.compare(flags, "-conf") == 0) {
+ i++;
}
/*
@@ -522,7 +566,7 @@
else if (collator.compare(flags, "-v") == 0) {
verbose = true;
} else if (collator.compare(flags, "-debug") == 0) {
- debug = true;
+ // Already processed
} else if (collator.compare(flags, "-rfc") == 0) {
rfc = true;
} else if (collator.compare(flags, "-noprompt") == 0) {
@@ -556,6 +600,8 @@
usage();
command = null;
}
+
+ return args;
}
boolean isKeyStoreRelated(Command cmd) {
@@ -3618,7 +3664,7 @@
.startsWith(s.toLowerCase(Locale.ENGLISH))) {
match[nmatch++] = i;
} else {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
boolean first = true;
for (char c: one.toCharArray()) {
if (first) {
@@ -3644,7 +3690,7 @@
if (match[1] > experiment) {
return match[0];
}
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
MessageFormat form = new MessageFormat(rb.getString
("command.{0}.is.ambiguous."));
Object[] source = {s};
--- a/jdk/src/share/classes/sun/security/tools/keytool/Resources.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -48,7 +48,8 @@
"Key and Certificate Management Tool"},
{"Commands.", "Commands:"},
{"Use.keytool.command.name.help.for.usage.of.command.name",
- "Use \"keytool -command_name -help\" for usage of command_name"},
+ "Use \"keytool -command_name -help\" for usage of command_name.\n" +
+ "Use the -conf <url> option to specify a pre-configured options file."},
// keytool: help: commands
{"Generates.a.certificate.request",
"Generates a certificate request"}, //-certreq
--- a/jdk/src/share/classes/sun/security/tools/policytool/PolicyTool.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/tools/policytool/PolicyTool.java Wed Jun 18 13:14:15 2014 -0700
@@ -975,16 +975,16 @@
String result = "";
if ((grantEntry.principals != null) &&
(!grantEntry.principals.isEmpty())) {
- StringBuffer buffer = new StringBuffer(200);
+ StringBuilder sb = new StringBuilder(200);
ListIterator<PolicyParser.PrincipalEntry> list =
grantEntry.principals.listIterator();
while (list.hasNext()) {
PolicyParser.PrincipalEntry pppe = list.next();
- buffer.append(" Principal " + pppe.getDisplayClass() + " " +
+ sb.append(" Principal " + pppe.getDisplayClass() + " " +
pppe.getDisplayName(true));
- if (list.hasNext()) buffer.append(", ");
+ if (list.hasNext()) sb.append(", ");
}
- result = buffer.toString();
+ result = sb.toString();
}
return result;
}
--- a/jdk/src/share/classes/sun/security/util/Debug.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/util/Debug.java Wed Jun 18 13:14:15 2014 -0700
@@ -188,13 +188,13 @@
*/
public static String toHexString(BigInteger b) {
String hexValue = b.toString(16);
- StringBuffer buf = new StringBuffer(hexValue.length()*2);
+ StringBuilder sb = new StringBuilder(hexValue.length()*2);
if (hexValue.startsWith("-")) {
- buf.append(" -");
+ sb.append(" -");
hexValue = hexValue.substring(1);
} else {
- buf.append(" "); // four spaces
+ sb.append(" "); // four spaces
}
if ((hexValue.length()%2) != 0) {
// add back the leading 0
@@ -203,17 +203,17 @@
int i=0;
while (i < hexValue.length()) {
// one byte at a time
- buf.append(hexValue.substring(i, i+2));
+ sb.append(hexValue.substring(i, i + 2));
i+=2;
if (i!= hexValue.length()) {
if ((i%64) == 0) {
- buf.append("\n "); // line after eight words
+ sb.append("\n "); // line after eight words
} else if (i%8 == 0) {
- buf.append(" "); // space between words
+ sb.append(" "); // space between words
}
}
}
- return buf.toString();
+ return sb.toString();
}
/**
@@ -221,7 +221,7 @@
*/
private static String marshal(String args) {
if (args != null) {
- StringBuffer target = new StringBuffer();
+ StringBuilder target = new StringBuilder();
StringBuffer source = new StringBuffer(args);
// obtain the "permission=<classname>" options
--- a/jdk/src/share/classes/sun/security/util/ManifestEntryVerifier.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/util/ManifestEntryVerifier.java Wed Jun 18 13:14:15 2014 -0700
@@ -238,7 +238,7 @@
static String toHex(byte[] data) {
- StringBuffer sb = new StringBuffer(data.length*2);
+ StringBuilder sb = new StringBuilder(data.length*2);
for (int i=0; i<data.length; i++) {
sb.append(hexc[(data[i] >>4) & 0x0f]);
--- a/jdk/src/share/classes/sun/security/util/ObjectIdentifier.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/util/ObjectIdentifier.java Wed Jun 18 13:14:15 2014 -0700
@@ -418,7 +418,7 @@
String s = stringForm;
if (s == null) {
int length = encoding.length;
- StringBuffer sb = new StringBuffer(length * 4);
+ StringBuilder sb = new StringBuilder(length * 4);
int fromPos = 0;
for (int i = 0; i < length; i++) {
--- a/jdk/src/share/classes/sun/security/util/PropertyExpander.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/util/PropertyExpander.java Wed Jun 18 13:14:15 2014 -0700
@@ -67,7 +67,7 @@
// no special characters
if (p == -1) return value;
- StringBuffer sb = new StringBuffer(value.length());
+ StringBuilder sb = new StringBuilder(value.length());
int max = value.length();
int i = 0; // index of last character we copied
--- a/jdk/src/share/classes/sun/security/util/SignatureFileVerifier.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/util/SignatureFileVerifier.java Wed Jun 18 13:14:15 2014 -0700
@@ -552,7 +552,7 @@
static String toHex(byte[] data) {
- StringBuffer sb = new StringBuffer(data.length*2);
+ StringBuilder sb = new StringBuilder(data.length*2);
for (int i=0; i<data.length; i++) {
sb.append(hexc[(data[i] >>4) & 0x0f]);
--- a/jdk/src/share/classes/sun/security/x509/X509CRLImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/security/x509/X509CRLImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -536,7 +536,7 @@
* @return value of this CRL in a printable form.
*/
public String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("X.509 CRL v" + (version+1) + "\n");
if (sigAlgId != null)
sb.append("Signature Algorithm: " + sigAlgId.toString() +
--- a/jdk/src/share/classes/sun/swing/SwingUtilities2.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/swing/SwingUtilities2.java Wed Jun 18 13:14:15 2014 -0700
@@ -1431,7 +1431,7 @@
}
public static String displayPropertiesToCSS(Font font, Color fg) {
- StringBuffer rule = new StringBuffer("body {");
+ StringBuilder rule = new StringBuilder("body {");
if (font != null) {
rule.append(" font-family: ");
rule.append(font.getFamily());
--- a/jdk/src/share/classes/sun/swing/plaf/synth/DefaultSynthStyle.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/swing/plaf/synth/DefaultSynthStyle.java Wed Jun 18 13:14:15 2014 -0700
@@ -673,33 +673,33 @@
public String toString() {
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buf.append(super.toString()).append(',');
+ sb.append(super.toString()).append(',');
- buf.append("data=").append(data).append(',');
+ sb.append("data=").append(data).append(',');
- buf.append("font=").append(font).append(',');
+ sb.append("font=").append(font).append(',');
- buf.append("insets=").append(insets).append(',');
+ sb.append("insets=").append(insets).append(',');
- buf.append("synthGraphics=").append(synthGraphics).append(',');
+ sb.append("synthGraphics=").append(synthGraphics).append(',');
- buf.append("painter=").append(painter).append(',');
+ sb.append("painter=").append(painter).append(',');
StateInfo[] states = getStateInfo();
if (states != null) {
- buf.append("states[");
+ sb.append("states[");
for (StateInfo state : states) {
- buf.append(state.toString()).append(',');
+ sb.append(state.toString()).append(',');
}
- buf.append(']').append(',');
+ sb.append(']').append(',');
}
// remove last newline
- buf.deleteCharAt(buf.length() - 1);
+ sb.deleteCharAt(sb.length() - 1);
- return buf.toString();
+ return sb.toString();
}
@@ -909,19 +909,19 @@
}
public String toString() {
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
- buf.append(super.toString()).append(',');
+ sb.append(super.toString()).append(',');
- buf.append("state=").append(Integer.toString(state)).append(',');
+ sb.append("state=").append(Integer.toString(state)).append(',');
- buf.append("font=").append(font).append(',');
+ sb.append("font=").append(font).append(',');
if (colors != null) {
- buf.append("colors=").append(Arrays.asList(colors)).
+ sb.append("colors=").append(Arrays.asList(colors)).
append(',');
}
- return buf.toString();
+ return sb.toString();
}
}
}
--- a/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -439,20 +439,20 @@
}
private String fileNameString(File[] files) {
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; files != null && i < files.length; i++) {
if (i > 0) {
- buf.append(" ");
+ sb.append(" ");
}
if (files.length > 1) {
- buf.append("\"");
+ sb.append("\"");
}
- buf.append(fileNameString(files[i]));
+ sb.append(fileNameString(files[i]));
if (files.length > 1) {
- buf.append("\"");
+ sb.append("\"");
}
}
- return buf.toString();
+ return sb.toString();
}
public void uninstallUI(JComponent c) {
--- a/jdk/src/share/classes/sun/text/normalizer/UTF16.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/text/normalizer/UTF16.java Wed Jun 18 13:14:15 2014 -0700
@@ -530,7 +530,7 @@
return String.valueOf((char)ch);
}
- StringBuffer result = new StringBuffer();
+ StringBuilder result = new StringBuilder();
result.append(getLeadSurrogate(ch));
result.append(getTrailSurrogate(ch));
return result.toString();
--- a/jdk/src/share/classes/sun/tools/attach/HotSpotVirtualMachine.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/attach/HotSpotVirtualMachine.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
import java.io.InputStream;
import java.io.IOException;
import java.util.Properties;
-import java.util.Map;
+import java.util.stream.Collectors;
/*
* The HotSpot implementation of com.sun.tools.attach.VirtualMachine.
@@ -161,6 +161,50 @@
return props;
}
+ private static final String MANAGMENT_PREFIX = "com.sun.management.";
+
+ private static boolean checkedKeyName(Object key) {
+ if (!(key instanceof String)) {
+ throw new IllegalArgumentException("Invalid option (not a String): "+key);
+ }
+ if (!((String)key).startsWith(MANAGMENT_PREFIX)) {
+ throw new IllegalArgumentException("Invalid option: "+key);
+ }
+ return true;
+ }
+
+ private static String stripKeyName(Object key) {
+ return ((String)key).substring(MANAGMENT_PREFIX.length());
+ }
+
+ @Override
+ public void startManagementAgent(Properties agentProperties) throws IOException {
+ if (agentProperties == null) {
+ throw new NullPointerException("agentProperties cannot be null");
+ }
+ // Convert the arguments into arguments suitable for the Diagnostic Command:
+ // "ManagementAgent.start jmxremote.port=5555 jmxremote.authenticate=false"
+ String args = agentProperties.entrySet().stream()
+ .filter(entry -> checkedKeyName(entry.getKey()))
+ .map(entry -> stripKeyName(entry.getKey()) + "=" + escape(entry.getValue()))
+ .collect(Collectors.joining(" "));
+ executeJCmd("ManagementAgent.start " + args);
+ }
+
+ private String escape(Object arg) {
+ String value = arg.toString();
+ if (value.contains(" ")) {
+ return "'" + value + "'";
+ }
+ return value;
+ }
+
+ @Override
+ public String startLocalManagementAgent() throws IOException {
+ executeJCmd("ManagementAgent.start_local");
+ return getAgentProperties().getProperty("com.sun.management.jmxremote.localConnectorAddress");
+ }
+
// --- HotSpot specific methods ---
// same as SIGQUIT
--- a/jdk/src/share/classes/sun/tools/java/MemberDefinition.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/java/MemberDefinition.java Wed Jun 18 13:14:15 2014 -0700
@@ -919,18 +919,18 @@
if (isInitializer()) {
return isStatic() ? "static {}" : "instance {}";
} else if (isConstructor()) {
- StringBuffer buf = new StringBuffer();
- buf.append(name);
- buf.append('(');
+ StringBuilder sb = new StringBuilder();
+ sb.append(name);
+ sb.append('(');
Type argTypes[] = getType().getArgumentTypes();
for (int i = 0 ; i < argTypes.length ; i++) {
if (i > 0) {
- buf.append(',');
+ sb.append(',');
}
- buf.append(argTypes[i].toString());
+ sb.append(argTypes[i].toString());
}
- buf.append(')');
- return buf.toString();
+ sb.append(')');
+ return sb.toString();
} else if (isInnerClass()) {
return getInnerClass().toString();
}
--- a/jdk/src/share/classes/sun/tools/java/MethodSet.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/java/MethodSet.java Wed Jun 18 13:14:15 2014 -0700
@@ -261,18 +261,18 @@
*/
public String toString() {
int len = size();
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
Iterator all = iterator();
- buf.append("{");
+ sb.append("{");
while (all.hasNext()) {
- buf.append(all.next().toString());
+ sb.append(all.next().toString());
len--;
if (len > 0) {
- buf.append(", ");
+ sb.append(", ");
}
}
- buf.append("}");
- return buf.toString();
+ sb.append("}");
+ return sb.toString();
}
}
--- a/jdk/src/share/classes/sun/tools/java/MethodType.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/java/MethodType.java Wed Jun 18 13:14:15 2014 -0700
@@ -91,17 +91,17 @@
}
public String typeString(String id, boolean abbrev, boolean ret) {
- StringBuffer buf = new StringBuffer();
- buf.append(id);
- buf.append('(');
+ StringBuilder sb = new StringBuilder();
+ sb.append(id);
+ sb.append('(');
for (int i = 0 ; i < argTypes.length ; i++) {
if (i > 0) {
- buf.append(", ");
+ sb.append(", ");
}
- buf.append(argTypes[i].typeString("", abbrev, ret));
+ sb.append(argTypes[i].typeString("", abbrev, ret));
}
- buf.append(')');
+ sb.append(')');
- return ret ? getReturnType().typeString(buf.toString(), abbrev, ret) : buf.toString();
+ return ret ? getReturnType().typeString(sb.toString(), abbrev, ret) : sb.toString();
}
}
--- a/jdk/src/share/classes/sun/tools/java/Parser.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/java/Parser.java Wed Jun 18 13:14:15 2014 -0700
@@ -1395,24 +1395,24 @@
return res;
}
- StringBuffer buf = new StringBuffer(res.id.toString());
+ StringBuilder sb = new StringBuilder(res.id.toString());
while (token == FIELD) {
scan();
if ((token == MUL) && star) {
scan();
- buf.append(".*");
+ sb.append(".*");
break;
}
- buf.append('.');
+ sb.append('.');
if (token == IDENT) {
- buf.append(scanner.idValue);
+ sb.append(scanner.idValue);
}
expect(IDENT);
}
- res.id = Identifier.lookup(buf.toString());
+ res.id = Identifier.lookup(sb.toString());
return res;
}
/**
--- a/jdk/src/share/classes/sun/tools/java/Type.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/java/Type.java Wed Jun 18 13:14:15 2014 -0700
@@ -274,15 +274,15 @@
* Create a method type with arguments.
*/
public static synchronized Type tMethod(Type returnType, Type argTypes[]) {
- StringBuffer buf = new StringBuffer();
- buf.append(SIG_METHOD);
+ StringBuilder sb = new StringBuilder();
+ sb.append(SIG_METHOD);
for (int i = 0 ; i < argTypes.length ; i++) {
- buf.append(argTypes[i].getTypeSignature());
+ sb.append(argTypes[i].getTypeSignature());
}
- buf.append(SIG_ENDMETHOD);
- buf.append(returnType.getTypeSignature());
+ sb.append(SIG_ENDMETHOD);
+ sb.append(returnType.getTypeSignature());
- String sig = buf.toString();
+ String sig = sb.toString();
Type t = (Type)typeHash.get(sig);
if (t == null) {
t = new MethodType(sig, returnType, argTypes);
--- a/jdk/src/share/classes/sun/tools/jconsole/Formatter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jconsole/Formatter.java Wed Jun 18 13:14:15 2014 -0700
@@ -232,15 +232,15 @@
}
static String justify(String str, int size) {
- StringBuffer buf = new StringBuffer();
- buf.append("<TT>");
+ StringBuilder sb = new StringBuilder();
+ sb.append("<TT>");
int n = size - str.length();
for (int i = 0; i < n; i++) {
- buf.append(" ");
+ sb.append(" ");
}
- buf.append(str);
- buf.append("</TT>");
- return buf.toString();
+ sb.append(str);
+ sb.append("</TT>");
+ return sb.toString();
}
static String newRow(String label, String value) {
--- a/jdk/src/share/classes/sun/tools/jconsole/LocalVirtualMachine.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jconsole/LocalVirtualMachine.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -32,8 +32,6 @@
// Sun specific
import com.sun.tools.attach.VirtualMachine;
import com.sun.tools.attach.VirtualMachineDescriptor;
-import com.sun.tools.attach.AgentInitializationException;
-import com.sun.tools.attach.AgentLoadException;
import com.sun.tools.attach.AttachNotSupportedException;
// Sun private
@@ -238,35 +236,7 @@
throw ioe;
}
- String home = vm.getSystemProperties().getProperty("java.home");
-
- // Normally in ${java.home}/jre/lib/management-agent.jar but might
- // be in ${java.home}/lib in build environments.
-
- String agent = home + File.separator + "jre" + File.separator +
- "lib" + File.separator + "management-agent.jar";
- File f = new File(agent);
- if (!f.exists()) {
- agent = home + File.separator + "lib" + File.separator +
- "management-agent.jar";
- f = new File(agent);
- if (!f.exists()) {
- throw new IOException("Management agent not found");
- }
- }
-
- agent = f.getCanonicalPath();
- try {
- vm.loadAgent(agent, "com.sun.management.jmxremote");
- } catch (AgentLoadException x) {
- IOException ioe = new IOException(x.getMessage());
- ioe.initCause(x);
- throw ioe;
- } catch (AgentInitializationException x) {
- IOException ioe = new IOException(x.getMessage());
- ioe.initCause(x);
- throw ioe;
- }
+ vm.startLocalManagementAgent();
// get the connector address
Properties agentProps = vm.getAgentProperties();
--- a/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java Wed Jun 18 13:14:15 2014 -0700
@@ -954,7 +954,7 @@
final InvocationHandler ih = new SnapshotInvocationHandler(mbsc);
return (SnapshotMBeanServerConnection) Proxy.newProxyInstance(
Snapshot.class.getClassLoader(),
- new Class[] {SnapshotMBeanServerConnection.class},
+ new Class<?>[] {SnapshotMBeanServerConnection.class},
ih);
}
}
--- a/jdk/src/share/classes/sun/tools/jconsole/TimeComboBox.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jconsole/TimeComboBox.java Wed Jun 18 13:14:15 2014 -0700
@@ -37,7 +37,7 @@
* them.
*/
@SuppressWarnings("serial")
-public class TimeComboBox extends JComboBox implements ItemListener, PropertyChangeListener {
+public class TimeComboBox extends JComboBox<String> implements ItemListener, PropertyChangeListener {
private ArrayList<Plotter> plotters = new ArrayList<Plotter>();
public TimeComboBox(Plotter... plotterArray) {
--- a/jdk/src/share/classes/sun/tools/jconsole/inspector/OperationEntry.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/OperationEntry.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,6 @@
@SuppressWarnings("serial")
public class OperationEntry extends JPanel {
private MBeanOperationInfo operation;
- private JComboBox sigs;
private XTextField inputs[];
public OperationEntry (MBeanOperationInfo operation,
--- a/jdk/src/share/classes/sun/tools/jconsole/inspector/TableSorter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/TableSorter.java Wed Jun 18 13:14:15 2014 -0700
@@ -146,7 +146,7 @@
// update row heights in XMBeanAttributes (required by expandable cells)
if (attrs != null) {
for (int i = 0; i < getRowCount(); i++) {
- Vector data = (Vector) dataVector.elementAt(i);
+ Vector<?> data = (Vector) dataVector.elementAt(i);
attrs.updateRowHeight(data.elementAt(1), i);
}
}
@@ -217,17 +217,17 @@
}
}
- private Vector getRow(int row) {
+ private Vector<?> getRow(int row) {
return (Vector) dataVector.elementAt(row);
}
@SuppressWarnings("unchecked")
- private void setRow(Vector data, int row) {
+ private void setRow(Vector<?> data, int row) {
dataVector.setElementAt(data,row);
}
private void swap(int i, int j, int column) {
- Vector data = getRow(i);
+ Vector<?> data = getRow(i);
setRow(getRow(j),i);
setRow(data,j);
--- a/jdk/src/share/classes/sun/tools/jmap/JMap.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jmap/JMap.java Wed Jun 18 13:14:15 2014 -0700
@@ -194,7 +194,7 @@
}
// invoke the main method with the arguments
- Class[] argTypes = { String[].class } ;
+ Class<?>[] argTypes = { String[].class } ;
Method m = c.getDeclaredMethod("main", argTypes);
Object[] invokeArgs = { args };
--- a/jdk/src/share/classes/sun/tools/jstack/JStack.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jstack/JStack.java Wed Jun 18 13:14:15 2014 -0700
@@ -133,7 +133,7 @@
args = prepend("-l", args);
}
- Class[] argTypes = { String[].class };
+ Class<?>[] argTypes = { String[].class };
Method m = cl.getDeclaredMethod("main", argTypes);
Object[] invokeArgs = { args };
--- a/jdk/src/share/classes/sun/tools/jstat/Alignment.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jstat/Alignment.java Wed Jun 18 13:14:15 2014 -0700
@@ -110,7 +110,7 @@
*
* @return Set of Key Words for this enumeration.
*/
- public static Set keySet() {
+ public static Set<String> keySet() {
return map.keySet();
}
--- a/jdk/src/share/classes/sun/tools/jstat/ColumnFormat.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jstat/ColumnFormat.java Wed Jun 18 13:14:15 2014 -0700
@@ -143,8 +143,8 @@
+ ";format=" + format + ";width=" + width
+ ";scale=" + scale.toString() + ";align=" + align.toString());
- for (Iterator i = children.iterator(); i.hasNext(); /* empty */) {
- OptionFormat of = (OptionFormat)i.next();
+ for (Iterator<OptionFormat> i = children.iterator(); i.hasNext(); /* empty */) {
+ OptionFormat of = i.next();
of.printFormat(indentLevel+1);
}
--- a/jdk/src/share/classes/sun/tools/jstat/Jstat.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jstat/Jstat.java Wed Jun 18 13:14:15 2014 -0700
@@ -116,8 +116,8 @@
Collections.sort(logged, arguments.comparator());
List<Monitor> constants = new ArrayList<Monitor>();
- for (Iterator i = logged.iterator(); i.hasNext(); /* empty */) {
- Monitor m = (Monitor)i.next();
+ for (Iterator<Monitor> i = logged.iterator(); i.hasNext(); /* empty */) {
+ Monitor m = i.next();
if (!(m.isSupported() || arguments.showUnsupported())) {
i.remove();
continue;
--- a/jdk/src/share/classes/sun/tools/jstat/Operator.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jstat/Operator.java Wed Jun 18 13:14:15 2014 -0700
@@ -105,7 +105,7 @@
* @param s an string to match against Operator objects.
* @return The Operator object matching the given string.
*/
- protected static Set keySet() {
+ protected static Set<?> keySet() {
return map.keySet();
}
}
--- a/jdk/src/share/classes/sun/tools/jstat/OptionFormat.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jstat/OptionFormat.java Wed Jun 18 13:14:15 2014 -0700
@@ -77,13 +77,13 @@
public void apply(Closure c) throws MonitorException {
- for (Iterator i = children.iterator(); i.hasNext(); /* empty */) {
- OptionFormat o = (OptionFormat)i.next();
+ for (Iterator<OptionFormat> i = children.iterator(); i.hasNext(); /* empty */) {
+ OptionFormat o = i.next();
c.visit(o, i.hasNext());
}
- for (Iterator i = children.iterator(); i.hasNext(); /* empty */) {
- OptionFormat o = (OptionFormat)i.next();
+ for (Iterator <OptionFormat>i = children.iterator(); i.hasNext(); /* empty */) {
+ OptionFormat o = i.next();
o.apply(c);
}
}
--- a/jdk/src/share/classes/sun/tools/jstat/Parser.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jstat/Parser.java Wed Jun 18 13:14:15 2014 -0700
@@ -63,8 +63,8 @@
private static final String START = OPTION;
- private static final Set scaleKeyWords = Scale.keySet();
- private static final Set alignKeyWords = Alignment.keySet();
+ private static final Set<String> scaleKeyWords = Scale.keySet();
+ private static final Set<String> alignKeyWords = Alignment.keySet();
private static String[] otherKeyWords = {
OPTION, COLUMN, DATA, HEADER, WIDTH, FORMAT, ALIGN, SCALE
};
@@ -141,7 +141,7 @@
* token is assumed to be of type TT_WORD, and the set is assumed
* to contain String objects.
*/
- private Token matchOne(Set keyWords) throws ParserException, IOException {
+ private Token matchOne(Set<String> keyWords) throws ParserException, IOException {
if ((lookahead.ttype == StreamTokenizer.TT_WORD)
&& keyWords.contains(lookahead.sval)) {
Token t = lookahead;
--- a/jdk/src/share/classes/sun/tools/jstat/RawOutputFormatter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jstat/RawOutputFormatter.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,11 +35,11 @@
* @since 1.5
*/
public class RawOutputFormatter implements OutputFormatter {
- private List logged;
+ private List<Monitor> logged;
private String header;
private boolean printStrings;
- public RawOutputFormatter(List logged, boolean printStrings) {
+ public RawOutputFormatter(List<Monitor> logged, boolean printStrings) {
this.logged = logged;
this.printStrings = printStrings;
}
@@ -48,8 +48,8 @@
if (header == null) {
// build the header string and prune out any unwanted monitors
StringBuilder headerBuilder = new StringBuilder();
- for (Iterator i = logged.iterator(); i.hasNext(); /* empty */ ) {
- Monitor m = (Monitor)i.next();
+ for (Iterator<Monitor> i = logged.iterator(); i.hasNext(); /* empty */ ) {
+ Monitor m = i.next();
headerBuilder.append(m.getName() + " ");
}
header = headerBuilder.toString();
@@ -60,8 +60,8 @@
public String getRow() throws MonitorException {
StringBuilder row = new StringBuilder();
int count = 0;
- for (Iterator i = logged.iterator(); i.hasNext(); /* empty */ ) {
- Monitor m = (Monitor)i.next();
+ for (Iterator<Monitor> i = logged.iterator(); i.hasNext(); /* empty */ ) {
+ Monitor m = i.next();
if (count++ > 0) {
row.append(" ");
}
--- a/jdk/src/share/classes/sun/tools/jstat/Scale.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jstat/Scale.java Wed Jun 18 13:14:15 2014 -0700
@@ -175,7 +175,7 @@
* @param s an string to match against Scale objects.
* @return The Scale object matching the given string.
*/
- protected static Set keySet() {
+ protected static Set<String> keySet() {
return map.keySet();
}
--- a/jdk/src/share/classes/sun/tools/jstat/SyntaxException.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jstat/SyntaxException.java Wed Jun 18 13:14:15 2014 -0700
@@ -62,14 +62,14 @@
+ ", Found " + found.toMessage();
}
- public SyntaxException(int lineno, Set expected, Token found) {
+ public SyntaxException(int lineno, Set<String> expected, Token found) {
StringBuilder msg = new StringBuilder();
msg.append("Syntax error at line " + lineno + ": Expected one of \'");
boolean first = true;
- for (Iterator i = expected.iterator(); i.hasNext(); /* empty */) {
- String keyWord = (String)i.next();
+ for (Iterator<String> i = expected.iterator(); i.hasNext(); /* empty */) {
+ String keyWord = i.next();
if (first) {
msg.append(keyWord);
first = false;
--- a/jdk/src/share/classes/sun/tools/jstatd/RemoteHostImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jstatd/RemoteHostImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -64,7 +64,7 @@
throws RemoteException, MonitorException {
Integer v = new Integer(lvmid);
RemoteVm stub = null;
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("local://").append(lvmid).append("@localhost");
if (mode != null) {
--- a/jdk/src/share/classes/sun/tools/native2ascii/N2AFilter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/native2ascii/N2AFilter.java Wed Jun 18 13:14:15 2014 -0700
@@ -58,7 +58,7 @@
out.write('u');
String hex =
Integer.toHexString(buf[i]);
- StringBuffer hex4 = new StringBuffer(hex);
+ StringBuilder hex4 = new StringBuilder(hex);
hex4.reverse();
int length = 4 - hex4.length();
for (int j = 0; j < length; j++) {
--- a/jdk/src/share/classes/sun/tools/serialver/SerialVer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/serialver/SerialVer.java Wed Jun 18 13:14:15 2014 -0700
@@ -85,7 +85,7 @@
/* Class not found so far */
}
if (!classFound) {
- StringBuffer workBuffer = new StringBuffer(classname);
+ StringBuilder workBuffer = new StringBuilder(classname);
String workName = workBuffer.toString();
int i;
while ((i = workName.lastIndexOf('.')) != -1 && !classFound) {
--- a/jdk/src/share/classes/sun/tools/tree/FieldExpression.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/tree/FieldExpression.java Wed Jun 18 13:14:15 2014 -0700
@@ -79,21 +79,21 @@
* Convert an '.' expression to a qualified identifier
*/
static public Identifier toIdentifier(Expression e) {
- StringBuffer buf = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
while (e.op == FIELD) {
FieldExpression fe = (FieldExpression)e;
if (fe.id == idThis || fe.id == idClass) {
return null;
}
- buf.insert(0, fe.id);
- buf.insert(0, '.');
+ sb.insert(0, fe.id);
+ sb.insert(0, '.');
e = fe.right;
}
if (e.op != IDENT) {
return null;
}
- buf.insert(0, ((IdentifierExpression)e).id);
- return Identifier.lookup(buf.toString());
+ sb.insert(0, ((IdentifierExpression) e).id);
+ return Identifier.lookup(sb.toString());
}
/**
--- a/jdk/src/share/classes/sun/tools/tree/Vset.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/tree/Vset.java Wed Jun 18 13:14:15 2014 -0700
@@ -495,7 +495,7 @@
public String toString() {
if (this == DEAD_END)
return "{DEAD_END}";
- StringBuffer sb = new StringBuffer("{");
+ StringBuilder sb = new StringBuilder("{");
int maxVar = VBITS * (1 + (x.length+1)/2);
for (int i = 0; i < maxVar; i++) {
if (!testVarUnassigned(i)) {
--- a/jdk/src/share/classes/sun/tracing/PrintStreamProviderFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/classes/sun/tracing/PrintStreamProviderFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -99,7 +99,7 @@
}
public void uncheckedTrigger(Object[] args) {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append(provider.getName());
sb.append(".");
sb.append(name);
--- a/jdk/src/share/demo/jvmti/hprof/hprof.h Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/demo/jvmti/hprof/hprof.h Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -67,10 +67,6 @@
#include "classfile_constants.h"
#include "jvm_md.h"
-#ifndef SKIP_NPT
-#include "npt.h" /* To get NptEnv for doing character conversions */
-#endif
-
/* Macros to extract the upper and lower 32 bits of a jlong */
#define jlong_high(a) ((jint)((a)>>32))
@@ -207,9 +203,6 @@
jvmtiEnv *jvmti; /* JVMTI env for this session */
JavaVM *jvm; /* JavaVM* for this session */
-#ifndef SKIP_NPT
- NptEnv *npt; /* NptEnv* for this session, see npt.h */
-#endif
jint cachedJvmtiVersion; /* JVMTI version number */
char *header; /* "JAVA PROFILE 1.0.[12]" */
--- a/jdk/src/share/demo/jvmti/hprof/hprof_init.c Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/demo/jvmti/hprof/hprof_init.c Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -740,16 +740,11 @@
}
if ( gdata->utf8_output_filename != NULL ) {
- /* UTF-8 to platform encoding (fill in gdata->output_filename) */
+ // Don't attempt to convert output filename.
+ // If fileystem uses the same encoding as the rest of the OS it will work as is.
ulen = (int)strlen(gdata->utf8_output_filename);
gdata->output_filename = (char*)HPROF_MALLOC(ulen*3+3);
-#ifdef SKIP_NPT
(void)strcpy(gdata->output_filename, gdata->utf8_output_filename);
-#else
- (void)(gdata->npt->utf8ToPlatform)
- (gdata->npt->utf, (jbyte*)gdata->utf8_output_filename, ulen,
- gdata->output_filename, ulen*3+3);
-#endif
}
/* By default we turn on gdata->alloc_sites and gdata->heap_dump */
@@ -1949,7 +1944,6 @@
Agent_OnLoad(JavaVM *vm, char *options, void *reserved)
{
char *boot_path = NULL;
- char npt_lib[JVM_MAXPATHLEN];
/* See if it's already loaded */
if ( gdata!=NULL && gdata->isLoaded==JNI_TRUE ) {
@@ -1970,24 +1964,6 @@
/* Get the JVMTI environment */
getJvmti();
-#ifndef SKIP_NPT
- getSystemProperty("sun.boot.library.path", &boot_path);
- /* Load in NPT library for character conversions */
- md_build_library_name(npt_lib, sizeof(npt_lib), boot_path, NPT_LIBNAME);
- if ( strlen(npt_lib) == 0 ) {
- HPROF_ERROR(JNI_TRUE, "Could not find npt library");
- }
- jvmtiDeallocate(boot_path);
- NPT_INITIALIZE(npt_lib, &(gdata->npt), NPT_VERSION, NULL);
- if ( gdata->npt == NULL ) {
- HPROF_ERROR(JNI_TRUE, "Cannot load npt library");
- }
- gdata->npt->utf = (gdata->npt->utfInitialize)(NULL);
- if ( gdata->npt->utf == NULL ) {
- HPROF_ERROR(JNI_TRUE, "Cannot initialize npt utf functions");
- }
-#endif
-
/* Lock needed to protect debug_malloc() code, which is not MT safe */
#ifdef DEBUG
gdata->debug_malloc_lock = createRawMonitor("HPROF debug_malloc lock");
--- a/jdk/src/share/native/sun/security/ec/impl/mpi.c Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/native/sun/security/ec/impl/mpi.c Wed Jun 18 13:14:15 2014 -0700
@@ -3376,7 +3376,7 @@
#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_DIV_WORD)
mp_word w = 0, q;
#else
- mp_digit w, q;
+ mp_digit w = 0, q;
#endif
int ix;
mp_err res;
--- a/jdk/src/share/native/sun/security/krb5/nativeccache.c Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/share/native/sun/security/krb5/nativeccache.c Wed Jun 18 13:14:15 2014 -0700
@@ -82,9 +82,6 @@
printf("Couldn't find %s\n", className);
return NULL;
}
-#ifdef DEBUG
- printf("Found %s\n", className);
-#endif /* DEBUG */
jobject returnValue = (*env)->NewWeakGlobalRef(env,cls);
return returnValue;
@@ -136,85 +133,54 @@
printf("Couldn't find DerValue constructor\n");
return JNI_ERR;
}
-#ifdef DEBUG
- printf("Found DerValue constructor\n");
-#endif /* DEBUG */
ticketConstructor = (*env)->GetMethodID(env, ticketClass, "<init>", "(Lsun/security/util/DerValue;)V");
if (ticketConstructor == 0) {
printf("Couldn't find Ticket constructor\n");
return JNI_ERR;
}
-#ifdef DEBUG
- printf("Found Ticket constructor\n");
-#endif /* DEBUG */
principalNameConstructor = (*env)->GetMethodID(env, principalNameClass, "<init>", "(Ljava/lang/String;I)V");
if (principalNameConstructor == 0) {
printf("Couldn't find PrincipalName constructor\n");
return JNI_ERR;
}
-#ifdef DEBUG
- printf("Found PrincipalName constructor\n");
-#endif /* DEBUG */
encryptionKeyConstructor = (*env)->GetMethodID(env, encryptionKeyClass, "<init>", "(I[B)V");
if (encryptionKeyConstructor == 0) {
printf("Couldn't find EncryptionKey constructor\n");
return JNI_ERR;
}
-#ifdef DEBUG
- printf("Found EncryptionKey constructor\n");
-#endif /* DEBUG */
ticketFlagsConstructor = (*env)->GetMethodID(env, ticketFlagsClass, "<init>", "(I[B)V");
if (ticketFlagsConstructor == 0) {
printf("Couldn't find TicketFlags constructor\n");
return JNI_ERR;
}
-#ifdef DEBUG
- printf("Found TicketFlags constructor\n");
-#endif /* DEBUG */
kerberosTimeConstructor = (*env)->GetMethodID(env, kerberosTimeClass, "<init>", "(J)V");
if (kerberosTimeConstructor == 0) {
printf("Couldn't find KerberosTime constructor\n");
return JNI_ERR;
}
-#ifdef DEBUG
- printf("Found KerberosTime constructor\n");
-#endif /* DEBUG */
integerConstructor = (*env)->GetMethodID(env, javaLangIntegerClass, "<init>", "(I)V");
if (integerConstructor == 0) {
printf("Couldn't find Integer constructor\n");
return JNI_ERR;
}
-#ifdef DEBUG
- printf("Found Integer constructor\n");
-#endif /* DEBUG */
hostAddressConstructor = (*env)->GetMethodID(env, hostAddressClass, "<init>", "(I[B)V");
if (hostAddressConstructor == 0) {
printf("Couldn't find HostAddress constructor\n");
return JNI_ERR;
}
-#ifdef DEBUG
- printf("Found HostAddress constructor\n");
-#endif /* DEBUG */
hostAddressesConstructor = (*env)->GetMethodID(env, hostAddressesClass, "<init>", "([Lsun/security/krb5/internal/HostAddress;)V");
if (hostAddressesConstructor == 0) {
printf("Couldn't find HostAddresses constructor\n");
return JNI_ERR;
}
-#ifdef DEBUG
- printf("Found HostAddresses constructor\n");
-#endif /* DEBUG */
-
-#ifdef DEBUG
- printf("Finished OnLoad processing\n");
-#endif /* DEBUG */
return JNI_VERSION_1_2;
}
--- a/jdk/src/share/npt/README.txt Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-
-README: For NPT Library.
-------------------------
-
-To use this Native Platform Toolkit library, you need to add
--Isrc/share/npt and -I/src/${platform}/npt (platform is solaris or windows)
-to your compilation lines.
-
-To initialize/use the library:
-
- #include "npt.h"
-
- NptEnv *npt;
-
- NPT_INITIALIZE(&npt, NPT_VERSION, NULL);
- if (npt == NULL) {
- FATAL_ERROR_MESSAGE(("Unable to gain access to Npt library"));
- }
-
- /* To use the npt utf functions, they require initialization */
- npt->utf = (npt->utfInitialize)(NULL);
- if (npt->utf == NULL) {
- FATAL_ERROR_MESSAGE(("Unable to gain access to Npt utf functions"));
- }
-
- ...
-
-
- /* After all uses is done, it can be terminated, however, if the
- * process will be exiting anyway it isn't necessary, and if
- * you have other threads running that might use these handles
- * you will need to wait here until all those threads have terminated.
- * So in general, termination can be a pain and slow your process
- * termination down.
- */
- (npt->utfTerminate)(npt->utf,NULL);
- NPT_TERMINATE(&npt, NULL);
-
-
--- a/jdk/src/share/npt/npt.c Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "jni.h"
-
-#include "npt.h"
-
-#include "utf.h"
-
-static int
-version_check(char *version)
-{
- if ( version==NULL || strcmp(version, NPT_VERSION)!=0 ) {
- return 1;
- }
- return 0;
-}
-
-JNIEXPORT void JNICALL
-nptInitialize(NptEnv **pnpt, char *nptVersion, char *options)
-{
- NptEnv *npt;
-
- (*pnpt) = NULL;
-
- if ( version_check(nptVersion) ) {
- NPT_ERROR("NPT version doesn't match");
- return;
- }
-
- npt = (NptEnv*)calloc(sizeof(NptEnv), 1);
- if ( npt == NULL ) {
- NPT_ERROR("Cannot allocate calloc space for NptEnv*");
- return;
- }
-
- if ( options != NULL ) {
- npt->options = strdup(options);
- }
- npt->utfInitialize = &utfInitialize;
- npt->utfTerminate = &utfTerminate;
- npt->utf8ToPlatform = &utf8ToPlatform;
- npt->utf8FromPlatform = &utf8FromPlatform;
- npt->utf8ToUtf16 = &utf8ToUtf16;
- npt->utf16ToUtf8m = &utf16ToUtf8m;
- npt->utf16ToUtf8s = &utf16ToUtf8s;
- npt->utf8sToUtf8mLength = &utf8sToUtf8mLength;
- npt->utf8sToUtf8m = &utf8sToUtf8m;
- npt->utf8mToUtf8sLength = &utf8mToUtf8sLength;
- npt->utf8mToUtf8s = &utf8mToUtf8s;
-
- (*pnpt) = npt;
-}
-
-JNIEXPORT void JNICALL
-nptTerminate(NptEnv* npt, char *options)
-{
-
- /* FIXUP: options? Check memory or something? */
- if ( npt->options != NULL ) {
- (void)free(npt->options);
- }
- (void)free(npt);
-}
--- a/jdk/src/share/npt/npt.h Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/*
- * 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
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* Native Platform Toolkit */
-
-#ifndef _NPT_H
-#define _NPT_H
-
-#define NPT_VERSION "0.0.0"
-
-#include <stdio.h>
-
-#include "jni.h"
-
-#include "npt_md.h"
-#include "utf.h"
-
-#define NPT_ERROR(s) { (void)fprintf(stderr, "NPT ERROR: %s\n", s); exit(1); }
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct {
-
- /* Used to save handle to our own dynamicly loaded library */
- void *libhandle;
-
- /* Copy of the options sent in at initialization */
- char *options;
-
- /* Can be used to save the UtfInst handle */
- struct UtfInst *utf;
-
- /* UTF interfaces, see utf.c */
- struct UtfInst* (JNICALL *utfInitialize)
- (char *options);
- void (JNICALL *utfTerminate)
- (struct UtfInst *utf, char *options);
- int (JNICALL *utf8ToPlatform)
- (struct UtfInst *utf, jbyte *utf8, int len,
- char *output, int outputMaxLen);
- int (JNICALL *utf8FromPlatform)
- (struct UtfInst *utf, char *str, int len,
- jbyte *output, int outputMaxLen);
- int (JNICALL *utf8ToUtf16)
- (struct UtfInst *utf, jbyte *utf8, int len,
- jchar *output, int outputMaxLen);
- int (JNICALL *utf16ToUtf8m)
- (struct UtfInst *utf, jchar *utf16, int len,
- jbyte *output, int outputMaxLen);
- int (JNICALL *utf16ToUtf8s)
- (struct UtfInst *utf, jchar *utf16, int len,
- jbyte *output, int outputMaxLen);
- int (JNICALL *utf8sToUtf8mLength)
- (struct UtfInst *utf, jbyte *string, int length);
- void (JNICALL *utf8sToUtf8m)
- (struct UtfInst *utf, jbyte *string, int length,
- jbyte *newString, int newLength);
- int (JNICALL *utf8mToUtf8sLength)
- (struct UtfInst *utf, jbyte *string, int length);
- void (JNICALL *utf8mToUtf8s)
- (struct UtfInst *utf, jbyte *string, int length,
- jbyte *newString, int newLength);
-
-} NptEnv;
-
-/* Typedefs for the only 2 'extern' functions in npt library:
- * nptInitialize and nptTerminate
- * See NPT_INITIALIZE() and NPT_TERMINATE() in npt_md.h.
- */
-
-JNIEXPORT void JNICALL nptInitialize
- (NptEnv **pnpt, char *nptVersion, char *options);
-typedef void (JNICALL *NptInitialize)
- (NptEnv **pnpt, char *nptVersion, char *options);
-
-JNIEXPORT void JNICALL nptTerminate
- (NptEnv* npt, char *options);
-typedef void (JNICALL *NptTerminate)
- (NptEnv* npt, char *options);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* __cplusplus */
-
-#endif
--- a/jdk/src/share/npt/utf.c Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,500 +0,0 @@
-/*
- * 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
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* Misc functions for conversion of Unicode and UTF-8 and platform encoding */
-
-#include <stdio.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "jni.h"
-
-#include "utf.h"
-
-/*
- * Error handler
- */
-void
-utfError(char *file, int line, char *message)
-{
- (void)fprintf(stderr, "UTF ERROR [\"%s\":%d]: %s\n", file, line, message);
- abort();
-}
-
-/*
- * Convert UTF-8 to UTF-16
- * Returns length or -1 if output overflows.
- */
-int JNICALL
-utf8ToUtf16(struct UtfInst *ui, jbyte *utf8, int len, unsigned short *output, int outputMaxLen)
-{
- int outputLen;
- int i;
-
- UTF_ASSERT(utf8);
- UTF_ASSERT(len>=0);
- UTF_ASSERT(output);
- UTF_ASSERT(outputMaxLen>0);
-
- i = 0;
- outputLen = 0;
- while ( i<len ) {
- unsigned code, x, y, z;
-
- if ( outputLen >= outputMaxLen ) {
- return -1;
- }
- x = (unsigned char)utf8[i++];
- code = x;
- if ( (x & 0xE0)==0xE0 ) {
- y = (unsigned char)utf8[i++];
- z = (unsigned char)utf8[i++];
- code = ((x & 0xF)<<12) + ((y & 0x3F)<<6) + (z & 0x3F);
- } else if ( (x & 0xC0)==0xC0 ) {
- y = (unsigned char)utf8[i++];
- code = ((x & 0x1F)<<6) + (y & 0x3F);
- }
- output[outputLen++] = code;
- }
- return outputLen;
-}
-
-/*
- * Convert UTF-16 to UTF-8 Modified
- * Returns length or -1 if output overflows.
- */
-int JNICALL
-utf16ToUtf8m(struct UtfInst *ui, unsigned short *utf16, int len, jbyte *output, int outputMaxLen)
-{
- int i;
- int outputLen;
-
- UTF_ASSERT(utf16);
- UTF_ASSERT(len>=0);
- UTF_ASSERT(output);
- UTF_ASSERT(outputMaxLen>0);
-
- outputLen = 0;
- for (i = 0; i < len; i++) {
- unsigned code;
-
- code = utf16[i];
- if ( code >= 0x0001 && code <= 0x007F ) {
- if ( outputLen + 1 >= outputMaxLen ) {
- return -1;
- }
- output[outputLen++] = code;
- } else if ( code == 0 || ( code >= 0x0080 && code <= 0x07FF ) ) {
- if ( outputLen + 2 >= outputMaxLen ) {
- return -1;
- }
- output[outputLen++] = ((code>>6) & 0x1F) | 0xC0;
- output[outputLen++] = (code & 0x3F) | 0x80;
- } else if ( code >= 0x0800 && code <= 0xFFFF ) {
- if ( outputLen + 3 >= outputMaxLen ) {
- return -1;
- }
- output[outputLen++] = ((code>>12) & 0x0F) | 0xE0;
- output[outputLen++] = ((code>>6) & 0x3F) | 0x80;
- output[outputLen++] = (code & 0x3F) | 0x80;
- }
- }
- output[outputLen] = 0;
- return outputLen;
-}
-
-int JNICALL
-utf16ToUtf8s(struct UtfInst *ui, unsigned short *utf16, int len, jbyte *output, int outputMaxLen)
-{
- return -1; /* FIXUP */
-}
-
-/* Determine length of this Standard UTF-8 in Modified UTF-8.
- * Validation is done of the basic UTF encoding rules, returns
- * length (no change) when errors are detected in the UTF encoding.
- *
- * Note: Accepts Modified UTF-8 also, no verification on the
- * correctness of Standard UTF-8 is done. e,g, 0xC080 input is ok.
- */
-int JNICALL
-utf8sToUtf8mLength(struct UtfInst *ui, jbyte *string, int length)
-{
- int newLength;
- int i;
-
- newLength = 0;
- for ( i = 0 ; i < length ; i++ ) {
- unsigned byte;
-
- byte = (unsigned char)string[i];
- if ( (byte & 0x80) == 0 ) { /* 1byte encoding */
- newLength++;
- if ( byte == 0 ) {
- newLength++; /* We gain one byte in length on NULL bytes */
- }
- } else if ( (byte & 0xE0) == 0xC0 ) { /* 2byte encoding */
- /* Check encoding of following bytes */
- if ( (i+1) >= length || (string[i+1] & 0xC0) != 0x80 ) {
- break; /* Error condition */
- }
- i++; /* Skip next byte */
- newLength += 2;
- } else if ( (byte & 0xF0) == 0xE0 ) { /* 3byte encoding */
- /* Check encoding of following bytes */
- if ( (i+2) >= length || (string[i+1] & 0xC0) != 0x80
- || (string[i+2] & 0xC0) != 0x80 ) {
- break; /* Error condition */
- }
- i += 2; /* Skip next two bytes */
- newLength += 3;
- } else if ( (byte & 0xF8) == 0xF0 ) { /* 4byte encoding */
- /* Check encoding of following bytes */
- if ( (i+3) >= length || (string[i+1] & 0xC0) != 0x80
- || (string[i+2] & 0xC0) != 0x80
- || (string[i+3] & 0xC0) != 0x80 ) {
- break; /* Error condition */
- }
- i += 3; /* Skip next 3 bytes */
- newLength += 6; /* 4byte encoding turns into 2 3byte ones */
- } else {
- break; /* Error condition */
- }
- }
- if ( i != length ) {
- /* Error in finding new length, return old length so no conversion */
- /* FIXUP: ERROR_MESSAGE? */
- return length;
- }
- return newLength;
-}
-
-/* Convert Standard UTF-8 to Modified UTF-8.
- * Assumes the UTF-8 encoding was validated by utf8mLength() above.
- *
- * Note: Accepts Modified UTF-8 also, no verification on the
- * correctness of Standard UTF-8 is done. e,g, 0xC080 input is ok.
- */
-void JNICALL
-utf8sToUtf8m(struct UtfInst *ui, jbyte *string, int length, jbyte *newString, int newLength)
-{
- int i;
- int j;
-
- j = 0;
- for ( i = 0 ; i < length ; i++ ) {
- unsigned byte1;
-
- byte1 = (unsigned char)string[i];
-
- /* NULL bytes and bytes starting with 11110xxx are special */
- if ( (byte1 & 0x80) == 0 ) { /* 1byte encoding */
- if ( byte1 == 0 ) {
- /* Bits out: 11000000 10000000 */
- newString[j++] = (jbyte)0xC0;
- newString[j++] = (jbyte)0x80;
- } else {
- /* Single byte */
- newString[j++] = byte1;
- }
- } else if ( (byte1 & 0xE0) == 0xC0 ) { /* 2byte encoding */
- newString[j++] = byte1;
- newString[j++] = string[++i];
- } else if ( (byte1 & 0xF0) == 0xE0 ) { /* 3byte encoding */
- newString[j++] = byte1;
- newString[j++] = string[++i];
- newString[j++] = string[++i];
- } else if ( (byte1 & 0xF8) == 0xF0 ) { /* 4byte encoding */
- /* Beginning of 4byte encoding, turn into 2 3byte encodings */
- unsigned byte2, byte3, byte4, u21;
-
- /* Bits in: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
- byte2 = (unsigned char)string[++i];
- byte3 = (unsigned char)string[++i];
- byte4 = (unsigned char)string[++i];
- /* Reconstruct full 21bit value */
- u21 = (byte1 & 0x07) << 18;
- u21 += (byte2 & 0x3F) << 12;
- u21 += (byte3 & 0x3F) << 6;
- u21 += (byte4 & 0x3F);
- /* Bits out: 11101101 1010xxxx 10xxxxxx */
- newString[j++] = (jbyte)0xED;
- newString[j++] = (jbyte)(0xA0 + (((u21 >> 16) - 1) & 0x0F));
- newString[j++] = (jbyte)(0x80 + ((u21 >> 10) & 0x3F));
- /* Bits out: 11101101 1011xxxx 10xxxxxx */
- newString[j++] = (jbyte)0xED;
- newString[j++] = (jbyte)(0xB0 + ((u21 >> 6) & 0x0F));
- newString[j++] = byte4;
- }
- }
- UTF_ASSERT(i==length);
- UTF_ASSERT(j==newLength);
- newString[j] = (jbyte)0;
-}
-
-/* Given a Modified UTF-8 string, calculate the Standard UTF-8 length.
- * Basic validation of the UTF encoding rules is done, and length is
- * returned (no change) when errors are detected.
- *
- * Note: No validation is made that this is indeed Modified UTF-8 coming in.
- *
- */
-int JNICALL
-utf8mToUtf8sLength(struct UtfInst *ui, jbyte *string, int length)
-{
- int newLength;
- int i;
-
- newLength = 0;
- for ( i = 0 ; i < length ; i++ ) {
- unsigned byte1, byte2, byte3, byte4, byte5, byte6;
-
- byte1 = (unsigned char)string[i];
- if ( (byte1 & 0x80) == 0 ) { /* 1byte encoding */
- newLength++;
- } else if ( (byte1 & 0xE0) == 0xC0 ) { /* 2byte encoding */
- /* Check encoding of following bytes */
- if ( (i+1) >= length || (string[i+1] & 0xC0) != 0x80 ) {
- break; /* Error condition */
- }
- byte2 = (unsigned char)string[++i];
- if ( byte1 != 0xC0 || byte2 != 0x80 ) {
- newLength += 2; /* Normal 2byte encoding, not 0xC080 */
- } else {
- newLength++; /* We will turn 0xC080 into 0 */
- }
- } else if ( (byte1 & 0xF0) == 0xE0 ) { /* 3byte encoding */
- /* Check encoding of following bytes */
- if ( (i+2) >= length || (string[i+1] & 0xC0) != 0x80
- || (string[i+2] & 0xC0) != 0x80 ) {
- break; /* Error condition */
- }
- byte2 = (unsigned char)string[++i];
- byte3 = (unsigned char)string[++i];
- newLength += 3;
- /* Possible process a second 3byte encoding */
- if ( (i+3) < length && byte1 == 0xED && (byte2 & 0xF0) == 0xA0 ) {
- /* See if this is a pair of 3byte encodings */
- byte4 = (unsigned char)string[i+1];
- byte5 = (unsigned char)string[i+2];
- byte6 = (unsigned char)string[i+3];
- if ( byte4 == 0xED && (byte5 & 0xF0) == 0xB0 ) {
- /* Check encoding of 3rd byte */
- if ( (byte6 & 0xC0) != 0x80 ) {
- break; /* Error condition */
- }
- newLength++; /* New string will have 4byte encoding */
- i += 3; /* Skip next 3 bytes */
- }
- }
- } else {
- break; /* Error condition */
- }
- }
- if ( i != length ) {
- /* Error in UTF encoding */
- /* FIXUP: ERROR_MESSAGE()? */
- return length;
- }
- return newLength;
-}
-
-/* Convert a Modified UTF-8 string into a Standard UTF-8 string
- * It is assumed that this string has been validated in terms of the
- * basic UTF encoding rules by utf8Length() above.
- *
- * Note: No validation is made that this is indeed Modified UTF-8 coming in.
- *
- */
-void JNICALL
-utf8mToUtf8s(struct UtfInst *ui, jbyte *string, int length, jbyte *newString, int newLength)
-{
- int i;
- int j;
-
- j = 0;
- for ( i = 0 ; i < length ; i++ ) {
- unsigned byte1, byte2, byte3, byte4, byte5, byte6;
-
- byte1 = (unsigned char)string[i];
- if ( (byte1 & 0x80) == 0 ) { /* 1byte encoding */
- /* Single byte */
- newString[j++] = byte1;
- } else if ( (byte1 & 0xE0) == 0xC0 ) { /* 2byte encoding */
- byte2 = (unsigned char)string[++i];
- if ( byte1 != 0xC0 || byte2 != 0x80 ) {
- newString[j++] = byte1;
- newString[j++] = byte2;
- } else {
- newString[j++] = 0;
- }
- } else if ( (byte1 & 0xF0) == 0xE0 ) { /* 3byte encoding */
- byte2 = (unsigned char)string[++i];
- byte3 = (unsigned char)string[++i];
- if ( i+3 < length && byte1 == 0xED && (byte2 & 0xF0) == 0xA0 ) {
- /* See if this is a pair of 3byte encodings */
- byte4 = (unsigned char)string[i+1];
- byte5 = (unsigned char)string[i+2];
- byte6 = (unsigned char)string[i+3];
- if ( byte4 == 0xED && (byte5 & 0xF0) == 0xB0 ) {
- unsigned u21;
-
- /* Bits in: 11101101 1010xxxx 10xxxxxx */
- /* Bits in: 11101101 1011xxxx 10xxxxxx */
- i += 3;
-
- /* Reconstruct 21 bit code */
- u21 = ((byte2 & 0x0F) + 1) << 16;
- u21 += (byte3 & 0x3F) << 10;
- u21 += (byte5 & 0x0F) << 6;
- u21 += (byte6 & 0x3F);
-
- /* Bits out: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
-
- /* Convert to 4byte encoding */
- newString[j++] = 0xF0 + ((u21 >> 18) & 0x07);
- newString[j++] = 0x80 + ((u21 >> 12) & 0x3F);
- newString[j++] = 0x80 + ((u21 >> 6) & 0x3F);
- newString[j++] = 0x80 + (u21 & 0x3F);
- continue;
- }
- }
- /* Normal 3byte encoding */
- newString[j++] = byte1;
- newString[j++] = byte2;
- newString[j++] = byte3;
- }
- }
- UTF_ASSERT(i==length);
- UTF_ASSERT(j==newLength);
- newString[j] = 0;
-}
-
-/* ================================================================= */
-
-#ifdef COMPILE_WITH_UTF_TEST /* Test program */
-
-/*
- * Convert any byte array into a printable string.
- * Returns length or -1 if output overflows.
- */
-static int
-bytesToPrintable(struct UtfInst *ui, char *bytes, int len, char *output, int outputMaxLen)
-{
- int outputLen;
- int i;
-
- UTF_ASSERT(bytes);
- UTF_ASSERT(len>=0);
- UTF_ASSERT(output);
- UTF_ASSERT(outputMaxLen>=0);
-
- outputLen = 0;
- for ( i=0; i<len ; i++ ) {
- unsigned byte;
-
- byte = bytes[i];
- if ( byte <= 0x7f && isprint(byte) && !iscntrl(byte) ) {
- if ( outputLen + 1 >= outputMaxLen ) {
- return -1;
- }
- output[outputLen++] = (char)byte;
- } else {
- if ( outputLen + 4 >= outputMaxLen ) {
- return -1;
- }
- (void)sprintf(output+outputLen,"\\x%02x",byte);
- outputLen += 4;
- }
- }
- output[outputLen] = 0;
- return outputLen;
-}
-
-static void
-test(void)
-{
- static char *strings[] = {
- "characters",
- "abcdefghijklmnopqrstuvwxyz",
- "0123456789",
- "!@#$%^&*()_+=-{}[]:;",
- NULL };
- int i;
- struct UtfInst *ui;
-
- ui = utfInitialize(NULL);
-
- i = 0;
- while ( strings[i] != NULL ) {
- char *str;
- #define MAX 1024
- char buf0[MAX];
- char buf1[MAX];
- char buf2[MAX];
- unsigned short buf3[MAX];
- int len1;
- int len2;
- int len3;
-
- str = strings[i];
-
- (void)bytesToPrintable(ui, str, (int)strlen(str), buf0, 1024);
-
- len1 = utf8FromPlatform(ui, str, (int)strlen(str), (jbyte*)buf1, 1024);
-
- UTF_ASSERT(len1==(int)strlen(str));
-
- len3 = utf8ToUtf16(ui, (jbyte*)buf1, len1, (jchar*)buf3, 1024);
-
- UTF_ASSERT(len3==len1);
-
- len1 = utf16ToUtf8m(ui, (jchar*)buf3, len3, (jbyte*)buf1, 1024);
-
- UTF_ASSERT(len1==len3);
- UTF_ASSERT(strcmp(str, buf1) == 0);
-
- len2 = utf8ToPlatform(ui, (jbyte*)buf1, len1, buf2, 1024);
-
- UTF_ASSERT(len2==len1);
- UTF_ASSERT(strcmp(str, buf2) == 0);
-
- i++;
- }
-
- utfTerminate(ui, NULL);
-
-}
-
-int
-main(int argc, char **argv)
-{
- test();
- return 0;
-}
-
-#endif
--- a/jdk/src/share/npt/utf.h Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* Routines for various UTF conversions */
-
-#ifndef _UTF_H
-#define _UTF_H
-
-#include <stdio.h>
-
-#include "jni.h"
-#include "utf_md.h"
-
-/* Use THIS_FILE when it is available. */
-#ifndef THIS_FILE
- #define THIS_FILE __FILE__
-#endif
-
-/* Error and assert macros */
-#define UTF_ERROR(m) utfError(THIS_FILE, __LINE__, m)
-#define UTF_ASSERT(x) ( (x)==0 ? UTF_ERROR("ASSERT ERROR " #x) : (void)0 )
-
-void utfError(char *file, int line, char *message);
-
-struct UtfInst* JNICALL utfInitialize
- (char *options);
-void JNICALL utfTerminate
- (struct UtfInst *ui, char *options);
-int JNICALL utf8ToPlatform
- (struct UtfInst *ui, jbyte *utf8,
- int len, char *output, int outputMaxLen);
-int JNICALL utf8FromPlatform
- (struct UtfInst *ui, char *str, int len,
- jbyte *output, int outputMaxLen);
-int JNICALL utf8ToUtf16
- (struct UtfInst *ui, jbyte *utf8, int len,
- jchar *output, int outputMaxLen);
-int JNICALL utf16ToUtf8m
- (struct UtfInst *ui, jchar *utf16, int len,
- jbyte *output, int outputMaxLen);
-int JNICALL utf16ToUtf8s
- (struct UtfInst *ui, jchar *utf16, int len,
- jbyte *output, int outputMaxLen);
-int JNICALL utf8sToUtf8mLength
- (struct UtfInst *ui, jbyte *string, int length);
-void JNICALL utf8sToUtf8m
- (struct UtfInst *ui, jbyte *string, int length,
- jbyte *new_string, int new_length);
-int JNICALL utf8mToUtf8sLength
- (struct UtfInst *ui, jbyte *string, int length);
-void JNICALL utf8mToUtf8s
- (struct UtfInst *ui, jbyte *string, int length,
- jbyte *new_string, int new_length);
-
-#endif
--- a/jdk/src/solaris/classes/java/io/FileDescriptor.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/solaris/classes/java/io/FileDescriptor.java Wed Jun 18 13:14:15 2014 -0700
@@ -41,7 +41,7 @@
* @author Pavani Diwanji
* @see java.io.FileInputStream
* @see java.io.FileOutputStream
- * @since JDK1.0
+ * @since 1.0
*/
public final class FileDescriptor {
@@ -126,7 +126,7 @@
* Thrown when the buffers cannot be flushed,
* or because the system cannot guarantee that all the
* buffers have been synchronized with physical media.
- * @since JDK1.1
+ * @since 1.1
*/
public native void sync() throws SyncFailedException;
--- a/jdk/src/solaris/classes/sun/awt/X11/XAtom.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/solaris/classes/sun/awt/X11/XAtom.java Wed Jun 18 13:14:15 2014 -0700
@@ -52,7 +52,7 @@
* XAtom xa = new XAtom(display,XAtom.XA_CUT_BUFFER0);<p>
* String selection = xa.getProperty(root_window);<p></code>
* @author Bino George
- * @since JDK1.5
+ * @since 1.5
*/
import sun.misc.Unsafe;
--- a/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java Wed Jun 18 13:14:15 2014 -0700
@@ -677,7 +677,7 @@
* @see #getPeer
* @see java.awt.peer.ComponentPeer#getFontMetrics(Font)
* @see Toolkit#getFontMetrics(Font)
- * @since JDK1.0
+ * @since 1.0
*/
public FontMetrics getFontMetrics(Font font) {
if (fontLog.isLoggable(PlatformLogger.Level.FINE)) {
--- a/jdk/src/solaris/classes/sun/awt/X11InputMethodDescriptor.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/solaris/classes/sun/awt/X11InputMethodDescriptor.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,7 +40,7 @@
* to enable selection and loading of that input method.
* The input method itself is only loaded when it is actually used.
*
- * @since JDK1.3
+ * @since 1.3
*/
public abstract class X11InputMethodDescriptor implements InputMethodDescriptor {
--- a/jdk/src/solaris/classes/sun/net/www/protocol/jar/JarFileFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/solaris/classes/sun/net/www/protocol/jar/JarFileFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -38,7 +38,7 @@
* and cache Jar files.
*
* @author Benjamin Renaud
- * @since JDK1.2
+ * @since 1.2
*/
class JarFileFactory implements URLJarFile.URLJarFileCloseController {
--- a/jdk/src/solaris/demo/jni/Poller/Poller.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/solaris/demo/jni/Poller/Poller.java Wed Jun 18 13:14:15 2014 -0700
@@ -58,7 +58,7 @@
* @see java.io.FileDescriptor
* @see java.net.Socket
* @see attached README.txt
- * @since JDK1.2
+ * @since 1.2
*/
public class Poller {
--- a/jdk/src/solaris/native/java/net/ExtendedOptionsImpl.c Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/solaris/native/java/net/ExtendedOptionsImpl.c Wed Jun 18 13:14:15 2014 -0700
@@ -218,6 +218,9 @@
if (errno == ENOPROTOOPT) {
JNU_ThrowByName(env, "java/lang/UnsupportedOperationException",
"unsupported socket option");
+ } else if (errno == EACCES || errno == EPERM) {
+ NET_ERROR(env, JNU_JAVANETPKG "SocketException",
+ "Permission denied");
} else {
NET_ERROR(env, JNU_JAVANETPKG "SocketException",
"set option SO_FLOW_SLA failed");
@@ -251,6 +254,9 @@
if (errno == ENOPROTOOPT) {
JNU_ThrowByName(env, "java/lang/UnsupportedOperationException",
"unsupported socket option");
+ } else if (errno == EACCES || errno == EPERM) {
+ NET_ERROR(env, JNU_JAVANETPKG "SocketException",
+ "Permission denied");
} else {
NET_ERROR(env, JNU_JAVANETPKG "SocketException",
"set option SO_FLOW_SLA failed");
--- a/jdk/src/solaris/npt/npt_md.h Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* Native Platform Toolkit */
-
-#ifndef _NPT_MD_H
-#define _NPT_MD_H
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <dlfcn.h>
-#include <jvm_md.h>
-
-#define NPT_LIBNAME "npt"
-
-#define NPT_INITIALIZE(path,pnpt,version,options) \
- { \
- void *_handle; \
- void *_sym; \
- \
- if ( (pnpt) == NULL ) NPT_ERROR("NptEnv* is NULL"); \
- *(pnpt) = NULL; \
- _handle = dlopen(path, RTLD_LAZY); \
- if ( _handle == NULL ) NPT_ERROR("Cannot open library"); \
- _sym = dlsym(_handle, "nptInitialize"); \
- if ( _sym == NULL ) NPT_ERROR("Cannot find nptInitialize"); \
- ((NptInitialize)_sym)((pnpt), version, (options)); \
- if ( (*(pnpt)) == NULL ) NPT_ERROR("Cannot initialize NptEnv"); \
- (*(pnpt))->libhandle = _handle; \
- }
-
-#define NPT_TERMINATE(npt,options) \
- { \
- void *_handle; \
- void *_sym; \
- \
- if ( (npt) == NULL ) NPT_ERROR("NptEnv* is NULL"); \
- _handle = (npt)->libhandle; \
- _sym = dlsym(_handle, "nptTerminate"); \
- if ( _sym == NULL ) NPT_ERROR("Cannot find nptTerminate"); \
- ((NptTerminate)_sym)((npt), (options)); \
- if ( _handle != NULL ) (void)dlclose(_handle); \
- }
-
-
-#endif
--- a/jdk/src/solaris/npt/utf_md.c Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <locale.h>
-#include <langinfo.h>
-#include <iconv.h>
-
-#include "utf.h"
-
-/* Global variables */
-
-/*
- * Initialize all utf processing.
- */
-struct UtfInst *JNICALL
-utfInitialize(char *options)
-{
- struct UtfInst *ui;
- char *codeset;
-
- ui = (struct UtfInst*)calloc(sizeof(struct UtfInst), 1);
- ui->iconvToPlatform = (void *)-1;
- ui->iconvFromPlatform = (void *)-1;
-
- /* Set the locale from the environment */
- (void)setlocale(LC_ALL, "");
-
- /* Get the codeset name */
- codeset = (char*)nl_langinfo(CODESET);
- if ( codeset == NULL || codeset[0] == 0 ) {
- return ui;
- }
-
- /* If we don't need this, skip it */
- if (strcmp(codeset, "UTF-8") == 0 || strcmp(codeset, "utf8") == 0 ) {
- return ui;
- }
-
- /* Open conversion descriptors */
- ui->iconvToPlatform = iconv_open(codeset, "UTF-8");
- if ( ui->iconvToPlatform == (void *)-1 ) {
- UTF_ERROR("Failed to complete iconv_open() setup");
- }
- ui->iconvFromPlatform = iconv_open("UTF-8", codeset);
- if ( ui->iconvFromPlatform == (void *)-1 ) {
- UTF_ERROR("Failed to complete iconv_open() setup");
- }
- return ui;
-}
-
-/*
- * Terminate all utf processing
- */
-void JNICALL
-utfTerminate(struct UtfInst *ui, char *options)
-{
- if ( ui->iconvFromPlatform != (void *)-1 ) {
- (void)iconv_close(ui->iconvFromPlatform);
- }
- if ( ui->iconvToPlatform != (void *)-1 ) {
- (void)iconv_close(ui->iconvToPlatform);
- }
- ui->iconvToPlatform = (void *)-1;
- ui->iconvFromPlatform = (void *)-1;
- (void)free(ui);
-}
-
-/*
- * Do iconv() conversion.
- * Returns length or -1 if output overflows.
- */
-static int
-iconvConvert(iconv_t ic, char *bytes, int len, char *output, int outputMaxLen)
-{
- int outputLen = 0;
-
- UTF_ASSERT(bytes);
- UTF_ASSERT(len>=0);
- UTF_ASSERT(output);
- UTF_ASSERT(outputMaxLen>len);
-
- output[0] = 0;
- outputLen = 0;
-
- if ( ic != (iconv_t)(void *)-1 ) {
- int returnValue;
- size_t inLeft;
- size_t outLeft;
- char *inbuf;
- char *outbuf;
-
- inbuf = bytes;
- outbuf = output;
- inLeft = len;
- outLeft = outputMaxLen;
- returnValue = iconv(ic, (void*)&inbuf, &inLeft, &outbuf, &outLeft);
- if ( returnValue >= 0 && inLeft==0 ) {
- outputLen = outputMaxLen-outLeft;
- output[outputLen] = 0;
- return outputLen;
- }
-
- /* Failed to do the conversion */
- return -1;
- }
-
- /* Just copy bytes */
- outputLen = len;
- (void)memcpy(output, bytes, len);
- output[len] = 0;
- return outputLen;
-}
-
-/*
- * Convert UTF-8 to Platform Encoding.
- * Returns length or -1 if output overflows.
- */
-int JNICALL
-utf8ToPlatform(struct UtfInst*ui, jbyte *utf8, int len, char *output, int outputMaxLen)
-{
- /* Negative length is an error */
- if ( len < 0 ) {
- return -1;
- }
-
- /* Zero length is ok, but we don't need to do much */
- if ( len == 0 ) {
- output[0] = 0;
- return 0;
- }
-
- return iconvConvert(ui->iconvToPlatform, (char*)utf8, len, output, outputMaxLen);
-}
-
-/*
- * Convert Platform Encoding to UTF-8.
- * Returns length or -1 if output overflows.
- */
-int JNICALL
-utf8FromPlatform(struct UtfInst*ui, char *str, int len, jbyte *output, int outputMaxLen)
-{
- /* Negative length is an error */
- if ( len < 0 ) {
- return -1;
- }
-
- /* Zero length is ok, but we don't need to do much */
- if ( len == 0 ) {
- output[0] = 0;
- return 0;
- }
-
- return iconvConvert(ui->iconvFromPlatform, str, len, (char*)output, outputMaxLen);
-}
--- a/jdk/src/solaris/npt/utf_md.h Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-#ifndef _UTF_MD_H
-#define _UTF_MD_H
-
-struct UtfInst {
- void *iconvToPlatform;
- void *iconvFromPlatform;
-};
-
-#endif
--- a/jdk/src/windows/classes/java/io/FileDescriptor.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/windows/classes/java/io/FileDescriptor.java Wed Jun 18 13:14:15 2014 -0700
@@ -38,7 +38,7 @@
* <p>Applications should not create their own file descriptors.
*
* @author Pavani Diwanji
- * @since JDK1.0
+ * @since 1.0
*/
public final class FileDescriptor {
@@ -149,7 +149,7 @@
* Thrown when the buffers cannot be flushed,
* or because the system cannot guarantee that all the
* buffers have been synchronized with physical media.
- * @since JDK1.1
+ * @since 1.1
*/
public native void sync() throws SyncFailedException;
--- a/jdk/src/windows/classes/sun/awt/windows/WClipboard.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/windows/classes/sun/awt/windows/WClipboard.java Wed Jun 18 13:14:15 2014 -0700
@@ -45,7 +45,7 @@
* @author Danila Sinopalnikov
* @author Alexander Gerasimov
*
- * @since JDK1.1
+ * @since 1.1
*/
final class WClipboard extends SunClipboard {
--- a/jdk/src/windows/classes/sun/awt/windows/WDragSourceContextPeer.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/windows/classes/sun/awt/windows/WDragSourceContextPeer.java Wed Jun 18 13:14:15 2014 -0700
@@ -48,7 +48,7 @@
* TBC
* </p>
*
- * @since JDK1.2
+ * @since 1.2
*
*/
--- a/jdk/src/windows/classes/sun/awt/windows/WInputMethodDescriptor.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/windows/classes/sun/awt/windows/WInputMethodDescriptor.java Wed Jun 18 13:14:15 2014 -0700
@@ -37,7 +37,7 @@
* to enable selection and loading of that input method.
* The input method itself is only loaded when it is actually used.
*
- * @since JDK1.3
+ * @since 1.3
*/
final class WInputMethodDescriptor implements InputMethodDescriptor {
--- a/jdk/src/windows/classes/sun/awt/windows/WPathGraphics.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/windows/classes/sun/awt/windows/WPathGraphics.java Wed Jun 18 13:14:15 2014 -0700
@@ -120,7 +120,7 @@
* a copy of this <code>Graphics</code> object.
* @return a new graphics context that is a copy of
* this graphics context.
- * @since JDK1.0
+ * @since 1.0
*/
@Override
public Graphics create() {
@@ -253,7 +253,7 @@
* @param y the <i>y</i> coordinate.
* @see java.awt.Graphics#drawBytes
* @see java.awt.Graphics#drawChars
- * @since JDK1.0
+ * @since 1.0
*/
@Override
public void drawString(String str, int x, int y) {
--- a/jdk/src/windows/classes/sun/awt/windows/WPrinterJob.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/windows/classes/sun/awt/windows/WPrinterJob.java Wed Jun 18 13:14:15 2014 -0700
@@ -419,7 +419,7 @@
* @exception HeadlessException if GraphicsEnvironment.isHeadless()
* returns true.
* @see java.awt.GraphicsEnvironment#isHeadless
- * @since JDK1.2
+ * @since 1.2
*/
@Override
public PageFormat pageDialog(PageFormat page) throws HeadlessException {
--- a/jdk/src/windows/classes/sun/net/www/protocol/jar/JarFileFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/windows/classes/sun/net/www/protocol/jar/JarFileFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -38,7 +38,7 @@
* and cache Jar files.
*
* @author Benjamin Renaud
- * @since JDK1.2
+ * @since 1.2
*/
class JarFileFactory implements URLJarFile.URLJarFileCloseController {
--- a/jdk/src/windows/native/sun/security/provider/WinCAPISeedGenerator.c Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/src/windows/native/sun/security/provider/WinCAPISeedGenerator.c Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, 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
@@ -59,11 +59,16 @@
numBytes = (*env)->GetArrayLength(env, randArray);
randBytes = (*env)->GetByteArrayElements(env, randArray, NULL);
+ if (randBytes == NULL) {
+ goto cleanup;
+ }
+
if (CryptGenRandom(hCryptProv, numBytes, randBytes)) {
result = JNI_TRUE;
}
(*env)->ReleaseByteArrayElements(env, randArray, randBytes, 0);
+cleanup:
CryptReleaseContext(hCryptProv, 0);
return result;
--- a/jdk/src/windows/npt/npt_md.h Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* Native Platform Toolkit */
-
-#ifndef _NPT_MD_H
-#define _NPT_MD_H
-
-#include <windows.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#define NPT_LIBNAME "npt"
-
-#define NPT_INITIALIZE(path,pnpt,version,options) \
- { \
- void *_handle; \
- void *_sym; \
- \
- if ( (pnpt) == NULL ) NPT_ERROR("NptEnv* is NULL"); \
- *(pnpt) = NULL; \
- _handle = LoadLibrary(path); \
- if ( _handle == NULL ) NPT_ERROR("Cannot open library"); \
- _sym = GetProcAddress(_handle, "nptInitialize"); \
- if ( _sym == NULL ) NPT_ERROR("Cannot find nptInitialize"); \
- ((NptInitialize)_sym)((pnpt), version, (options)); \
- if ( *(pnpt) == NULL ) NPT_ERROR("Cannot initialize NptEnv"); \
- (*(pnpt))->libhandle = _handle; \
- }
-
-#define NPT_TERMINATE(npt,options) \
- { \
- void *_handle; \
- void *_sym; \
- \
- if ( (npt) == NULL ) NPT_ERROR("NptEnv* is NULL"); \
- _handle = (npt)->libhandle; \
- if ( _handle == NULL ) NPT_ERROR("npt->libhandle is NULL"); \
- _sym = GetProcAddress(_handle, "nptTerminate"); \
- if ( _sym == NULL ) NPT_ERROR("Cannot find nptTerminate"); \
- ((NptTerminate)_sym)((npt), (options)); \
- (void)FreeLibrary(_handle); \
- }
-
-#endif
--- a/jdk/src/windows/npt/utf_md.c Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,172 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-#include "utf.h"
-
-#include <windows.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-/*
- * Initialize all utf processing.
- */
-struct UtfInst * JNICALL
-utfInitialize(char *options)
-{
- struct UtfInst *ui;
- LANGID langID;
- LCID localeID;
- TCHAR strCodePage[7]; // ANSI code page id
-
- ui = (struct UtfInst*)calloc(sizeof(struct UtfInst), 1);
-
- /*
- * Get the code page for this locale
- */
- langID = LANGIDFROMLCID(GetUserDefaultLCID());
- localeID = MAKELCID(langID, SORT_DEFAULT);
- if (GetLocaleInfo(localeID, LOCALE_IDEFAULTANSICODEPAGE,
- strCodePage, sizeof(strCodePage)/sizeof(TCHAR)) > 0 ) {
- ui->platformCodePage = atoi(strCodePage);
- } else {
- ui->platformCodePage = GetACP();
- }
- return ui;
-}
-
-/*
- * Terminate all utf processing
- */
-void JNICALL
-utfTerminate(struct UtfInst *ui, char *options)
-{
- (void)free(ui);
-}
-
-/*
- * Get wide string (assumes len>0)
- */
-static WCHAR*
-getWideString(UINT codePage, char* str, int len, int *pwlen)
-{
- int wlen;
- WCHAR* wstr;
-
- /* Convert the string to WIDE string */
- wlen = MultiByteToWideChar(codePage, 0, str, len, NULL, 0);
- *pwlen = wlen;
- if (wlen <= 0) {
- UTF_ERROR(("Can't get WIDE string length"));
- return NULL;
- }
- wstr = (WCHAR*)malloc(wlen * sizeof(WCHAR));
- if (wstr == NULL) {
- UTF_ERROR(("Can't malloc() any space"));
- return NULL;
- }
- if (MultiByteToWideChar(codePage, 0, str, len, wstr, wlen) == 0) {
- UTF_ERROR(("Can't get WIDE string"));
- return NULL;
- }
- return wstr;
-}
-
-/*
- * Convert UTF-8 to a platform string
- */
-int JNICALL
-utf8ToPlatform(struct UtfInst *ui, jbyte *utf8, int len, char* output, int outputMaxLen)
-{
- int wlen;
- int plen;
- WCHAR* wstr;
-
- /* Negative length is an error */
- if ( len < 0 ) {
- return -1;
- }
-
- /* Zero length is ok, but we don't need to do much */
- if ( len == 0 ) {
- output[0] = 0;
- return 0;
- }
-
- /* Get WIDE string version (assumes len>0) */
- wstr = getWideString(CP_UTF8, (char*)utf8, len, &wlen);
- if ( wstr == NULL ) {
- return -1;
- }
-
- /* Convert WIDE string to MultiByte string */
- plen = WideCharToMultiByte(ui->platformCodePage, 0, wstr, wlen,
- output, outputMaxLen, NULL, NULL);
- free(wstr);
- if (plen <= 0) {
- UTF_ERROR(("Can't convert WIDE string to multi-byte"));
- return -1;
- }
- output[plen] = '\0';
- return plen;
-}
-
-/*
- * Convert Platform Encoding to UTF-8.
- */
-int JNICALL
-utf8FromPlatform(struct UtfInst *ui, char *str, int len, jbyte *output, int outputMaxLen)
-{
- int wlen;
- int plen;
- WCHAR* wstr;
-
- /* Negative length is an error */
- if ( len < 0 ) {
- return -1;
- }
-
- /* Zero length is ok, but we don't need to do much */
- if ( len == 0 ) {
- output[0] = 0;
- return 0;
- }
-
- /* Get WIDE string version (assumes len>0) */
- wstr = getWideString(ui->platformCodePage, str, len, &wlen);
- if ( wstr == NULL ) {
- return -1;
- }
-
- /* Convert WIDE string to UTF-8 string */
- plen = WideCharToMultiByte(CP_UTF8, 0, wstr, wlen,
- (char*)output, outputMaxLen, NULL, NULL);
- free(wstr);
- if (plen <= 0) {
- UTF_ERROR(("Can't convert WIDE string to multi-byte"));
- return -1;
- }
- output[plen] = '\0';
- return plen;
-}
--- a/jdk/src/windows/npt/utf_md.h Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-#ifndef _UTF_MD_H
-#define _UTF_MD_H
-
-struct UtfInst {
- unsigned int platformCodePage;
-};
-
-#endif
--- a/jdk/test/ProblemList.txt Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/ProblemList.txt Wed Jun 18 13:14:15 2014 -0700
@@ -124,6 +124,10 @@
# jdk_management
+# 8046351
+com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationContentTest.java generic-all
+com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationTest.java generic-all
+
############################################################################
# jdk_jmx
@@ -264,7 +268,6 @@
# 8044419
com/sun/jdi/JdbReadTwiceTest.sh generic-all
-
############################################################################
# jdk_util
@@ -292,4 +295,10 @@
# 8037285
sun/tools/jstatd/TestJstatdServer.java generic-all
+# 8046355
+sun/tools/jstatd/TestJstatdExternalRegistry.java generic-all
+
+# 8046352
+com/sun/tools/attach/TempDirTest.java generic-all
+
############################################################################
--- a/jdk/test/com/sun/jdi/AccessSpecifierTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/AccessSpecifierTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g AccessSpecifierTest.java
- * @run main AccessSpecifierTest
+ * @run driver AccessSpecifierTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/AfterThreadDeathTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/AfterThreadDeathTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g AfterThreadDeathTest.java
- * @run main AfterThreadDeathTest
+ * @run driver AfterThreadDeathTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/AllLineLocations.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/AllLineLocations.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* @run compile -g RefTypes.java
* @run build AllLineLocations
*
- * @run main AllLineLocations RefTypes
+ * @run driver AllLineLocations RefTypes
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/AnyDebuggeeTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/AnyDebuggeeTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g AnyDebuggeeTest.java
- * @run main AnyDebuggeeeTest
+ * @run driver AnyDebuggeeeTest
*
* This test is intended to be run manually to investigate behaviors;
* it is not an actual test of any specific functionality, it just
--- a/jdk/test/com/sun/jdi/ArgumentValuesTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ArgumentValuesTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -7,7 +7,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile ArgumentValuesTest.java
- * @run main ArgumentValuesTest
+ * @run driver ArgumentValuesTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/ArrayRangeTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ArrayRangeTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g ArrayRangeTest.java
- * @run main ArrayRangeTest
+ * @run driver ArrayRangeTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/BacktraceFieldTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/BacktraceFieldTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g BacktraceFieldTest.java
- * @run main BacktraceFieldTest
+ * @run driver BacktraceFieldTest
*/
/*
--- a/jdk/test/com/sun/jdi/BadHandshakeTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/BadHandshakeTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -27,7 +27,7 @@
* @library /lib/testlibrary
*
* @build jdk.testlibrary.* VMConnection BadHandshakeTest Exit0
- * @run main BadHandshakeTest
+ * @run driver BadHandshakeTest
*
*/
import java.net.Socket;
--- a/jdk/test/com/sun/jdi/BreakpointTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/BreakpointTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g BreakpointTest.java
- * @run main BreakpointTest
+ * @run driver BreakpointTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/ClassLoaderClassesTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ClassLoaderClassesTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g ClassLoaderClassesTest.java
- * @run main ClassLoaderClassesTest
+ * @run driver ClassLoaderClassesTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/ClassesByName.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ClassesByName.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
* @summary ClassesByName verifies that all the classes in the
* loaded class list can be found with classesByName..
*
- * @run main ClassesByName HelloWorld
+ * @run driver ClassesByName HelloWorld
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/ClassesByName2Test.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ClassesByName2Test.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g ClassesByName2Test.java
- * @run main ClassesByName2Test
+ * @run driver ClassesByName2Test
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/ConnectedVMs.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ConnectedVMs.java Wed Jun 18 13:14:15 2014 -0700
@@ -28,10 +28,10 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g InstTarg.java
- * @run main ConnectedVMs Kill
- * @run main ConnectedVMs Resume-to-exit
- * @run main ConnectedVMs dispose()
- * @run main ConnectedVMs exit()
+ * @run driver ConnectedVMs Kill
+ * @run driver ConnectedVMs Resume-to-exit
+ * @run driver ConnectedVMs dispose()
+ * @run driver ConnectedVMs exit()
*
* @summary ConnectedVMs checks the method
* VirtualMachineManager.connectedVirtualMachines()
--- a/jdk/test/com/sun/jdi/ConstantPoolInfo.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ConstantPoolInfo.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection
* @run compile -g ConstantPoolInfo.java
- * @run main ConstantPoolInfo
+ * @run driver ConstantPoolInfo
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/CountEvent.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/CountEvent.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @run build TestScaffold VMConnection TargetAdapter TargetListener
* @run compile -g CountEvent.java
- * @run main CountEvent
+ * @run driver CountEvent
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/CountFilterTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/CountFilterTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g CountFilterTest.java
- * @run main CountFilterTest
+ * @run driver CountFilterTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/DataModelTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/DataModelTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g DataModelTest.java
- * @run main DataModelTest
+ * @run driver DataModelTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/DebuggerThreadTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/DebuggerThreadTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g DebuggerThreadTest.java
- * @run main DebuggerThreadTest
+ * @run driver DebuggerThreadTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/DeleteAllBkptsTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/DeleteAllBkptsTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* @library ..
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g DeleteAllBkptsTest.java
- * @run main DeleteAllBkptsTest
+ * @run driver DeleteAllBkptsTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/DeleteEventRequestsTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/DeleteEventRequestsTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g DeleteEventRequestsTest.java
- * @run main DeleteEventRequestsTest
+ * @run driver DeleteEventRequestsTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/DoubleAgentTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/DoubleAgentTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -26,14 +26,13 @@
* @summary Check that a double agent request fails
*
* @build VMConnection DoubleAgentTest Exit0
- * @run main DoubleAgentTest
+ * @run driver DoubleAgentTest
*
*/
import java.io.InputStream;
import java.io.IOException;
import java.io.File;
import java.net.ServerSocket;
-import java.net.Socket;
public class DoubleAgentTest {
--- a/jdk/test/com/sun/jdi/EarlyReturnNegativeTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/EarlyReturnNegativeTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g EarlyReturnNegativeTest.java
- * @run main EarlyReturnNegativeTest
+ * @run driver EarlyReturnNegativeTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/EarlyReturnTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/EarlyReturnTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -36,7 +36,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g EarlyReturnTest.java
- * @run main EarlyReturnTest
+ * @run driver EarlyReturnTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/EnumTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/EnumTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g EnumTest.java
- * @run main EnumTest
+ * @run driver EnumTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/EventQueueDisconnectTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/EventQueueDisconnectTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -28,7 +28,7 @@
*
* @run build VMConnection
* @run compile -g EventQueueDisconnectTest.java
- * @run main EventQueueDisconnectTest
+ * @run driver EventQueueDisconnectTest
*
* @summary EventQueueDisconnectTest checks to see that
* VMDisconnectedException is never thrown before VMDisconnectEvent.
@@ -64,7 +64,7 @@
"com.sun.jdi.CommandLineLaunch:",
VirtualMachine.TRACE_NONE);
connection.setConnectorArg("main", "EventQueueDisconnectTarg");
- String debuggeeVMOptions = connection.getDebuggeeVMOptions();
+ String debuggeeVMOptions = VMConnection.getDebuggeeVMOptions();
if (!debuggeeVMOptions.equals("")) {
if (connection.connectorArg("options").length() > 0) {
throw new IllegalArgumentException("VM options in two places");
--- a/jdk/test/com/sun/jdi/ExceptionEvents.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ExceptionEvents.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,32 +32,32 @@
* @run build TestScaffold VMConnection
* @run compile -g ExceptionEvents.java
*
- * @run main/othervm ExceptionEvents N A StackOverflowCaughtTarg java.lang.Exception
- * @run main/othervm ExceptionEvents C A StackOverflowCaughtTarg null
- * @run main/othervm ExceptionEvents C A StackOverflowCaughtTarg java.lang.Error
- * @run main/othervm ExceptionEvents C A StackOverflowCaughtTarg java.lang.StackOverflowError
- * @run main/othervm ExceptionEvents N A StackOverflowCaughtTarg java.lang.NullPointerException
+ * @run driver ExceptionEvents N A StackOverflowCaughtTarg java.lang.Exception
+ * @run driver ExceptionEvents C A StackOverflowCaughtTarg null
+ * @run driver ExceptionEvents C A StackOverflowCaughtTarg java.lang.Error
+ * @run driver ExceptionEvents C A StackOverflowCaughtTarg java.lang.StackOverflowError
+ * @run driver ExceptionEvents N A StackOverflowCaughtTarg java.lang.NullPointerException
- * @run main/othervm ExceptionEvents N T StackOverflowCaughtTarg java.lang.Exception
- * @run main/othervm ExceptionEvents C T StackOverflowCaughtTarg null
- * @run main/othervm ExceptionEvents C T StackOverflowCaughtTarg java.lang.Error
- * @run main/othervm ExceptionEvents C T StackOverflowCaughtTarg java.lang.StackOverflowError
- * @run main/othervm ExceptionEvents N T StackOverflowCaughtTarg java.lang.NullPointerException
+ * @run driver ExceptionEvents N T StackOverflowCaughtTarg java.lang.Exception
+ * @run driver ExceptionEvents C T StackOverflowCaughtTarg null
+ * @run driver ExceptionEvents C T StackOverflowCaughtTarg java.lang.Error
+ * @run driver ExceptionEvents C T StackOverflowCaughtTarg java.lang.StackOverflowError
+ * @run driver ExceptionEvents N T StackOverflowCaughtTarg java.lang.NullPointerException
- * @run main/othervm ExceptionEvents N N StackOverflowCaughtTarg java.lang.Exception
- * @run main/othervm ExceptionEvents C N StackOverflowCaughtTarg null
- * @run main/othervm ExceptionEvents C N StackOverflowCaughtTarg java.lang.Error
- * @run main/othervm ExceptionEvents C N StackOverflowCaughtTarg java.lang.StackOverflowError
- * @run main/othervm ExceptionEvents N N StackOverflowCaughtTarg java.lang.NullPointerException
+ * @run driver ExceptionEvents N N StackOverflowCaughtTarg java.lang.Exception
+ * @run driver ExceptionEvents C N StackOverflowCaughtTarg null
+ * @run driver ExceptionEvents C N StackOverflowCaughtTarg java.lang.Error
+ * @run driver ExceptionEvents C N StackOverflowCaughtTarg java.lang.StackOverflowError
+ * @run driver ExceptionEvents N N StackOverflowCaughtTarg java.lang.NullPointerException
- * @run main/othervm ExceptionEvents N A StackOverflowUncaughtTarg java.lang.Exception
- * @run main/othervm ExceptionEvents U A StackOverflowUncaughtTarg null
- * @run main/othervm ExceptionEvents U A StackOverflowUncaughtTarg java.lang.Error
- * @run main/othervm ExceptionEvents U A StackOverflowUncaughtTarg java.lang.StackOverflowError
- * @run main/othervm ExceptionEvents N A StackOverflowUncaughtTarg java.lang.NullPointerException
+ * @run driver ExceptionEvents N A StackOverflowUncaughtTarg java.lang.Exception
+ * @run driver ExceptionEvents U A StackOverflowUncaughtTarg null
+ * @run driver ExceptionEvents U A StackOverflowUncaughtTarg java.lang.Error
+ * @run driver ExceptionEvents U A StackOverflowUncaughtTarg java.lang.StackOverflowError
+ * @run driver ExceptionEvents N A StackOverflowUncaughtTarg java.lang.NullPointerException
- * @run main/othervm ExceptionEvents N T StackOverflowUncaughtTarg java.lang.NullPointerException
- * @run main/othervm ExceptionEvents N N StackOverflowUncaughtTarg java.lang.NullPointerException
+ * @run driver ExceptionEvents N T StackOverflowUncaughtTarg java.lang.NullPointerException
+ * @run driver ExceptionEvents N N StackOverflowUncaughtTarg java.lang.NullPointerException
*/
import com.sun.jdi.*;
--- a/jdk/test/com/sun/jdi/ExclusiveBind.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ExclusiveBind.java Wed Jun 18 13:14:15 2014 -0700
@@ -28,7 +28,7 @@
* @library /lib/testlibrary
*
* @build jdk.testlibrary.* VMConnection ExclusiveBind HelloWorld
- * @run main ExclusiveBind
+ * @run driver ExclusiveBind
*/
import java.net.ServerSocket;
import com.sun.jdi.Bootstrap;
--- a/jdk/test/com/sun/jdi/ExpiredRequestDeletionTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ExpiredRequestDeletionTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g ExpiredRequestDeletionTest.java
- * @run main ExpiredRequestDeletionTest
+ * @run driver ExpiredRequestDeletionTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/FetchLocals.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/FetchLocals.java Wed Jun 18 13:14:15 2014 -0700
@@ -7,7 +7,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g FetchLocals.java
- * @run main FetchLocals
+ * @run driver FetchLocals
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/FieldWatchpoints.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/FieldWatchpoints.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g FieldWatchpoints.java
- * @run main/othervm FieldWatchpoints
+ * @run driver FieldWatchpoints
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/FilterMatch.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/FilterMatch.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* @library scaffold
* @run build JDIScaffold VMConnection
* @run compile -g HelloWorld.java
- * @run main/othervm FilterMatch
+ * @run driver FilterMatch
*/
/* Look at patternMatch in JDK file:
--- a/jdk/test/com/sun/jdi/FilterNoMatch.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/FilterNoMatch.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* @library scaffold
* @run build JDIScaffold VMConnection
* @run compile -g HelloWorld.java
- * @run main/othervm FilterNoMatch
+ * @run driver FilterNoMatch
*/
/* This tests the patternMatch function in JDK file:
--- a/jdk/test/com/sun/jdi/FinalLocalsTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/FinalLocalsTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g FinalLocalsTest.java
- * @run main FinalLocalsTest
+ * @run driver FinalLocalsTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/FinalizerTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/FinalizerTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g FinalizerTest.java
*
- * @run main FinalizerTest
+ * @run driver FinalizerTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/FramesTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/FramesTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g FramesTest.java
- * @run main FramesTest
+ * @run driver FramesTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/GenericsTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/GenericsTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g GenericsTest.java
- * @run main GenericsTest
+ * @run driver GenericsTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/GetLocalVariables.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/GetLocalVariables.java Wed Jun 18 13:14:15 2014 -0700
@@ -7,7 +7,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g GetLocalVariables.java
- * @run main GetLocalVariables
+ * @run driver GetLocalVariables
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/GetLocalVariables2Test.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/GetLocalVariables2Test.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g GetLocalVariables2Test.java
- * @run main GetLocalVariables2Test
+ * @run driver GetLocalVariables2Test
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/GetSetLocalTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/GetSetLocalTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -7,7 +7,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g GetSetLocalTest.java
- * @run main GetSetLocalTest
+ * @run driver GetSetLocalTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/GetUninitializedStringValue.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/GetUninitializedStringValue.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g GetUninitializedStringValue.java
- * @run main GetUninitializedStringValue
+ * @run driver GetUninitializedStringValue
*/
import com.sun.jdi.ReferenceType;
import com.sun.jdi.StackFrame;
--- a/jdk/test/com/sun/jdi/HomeTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/HomeTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g HomeTest.java
- * @run main HomeTest
+ * @run driver HomeTest
*/
import com.sun.jdi.*;
import com.sun.jdi.connect.*;
--- a/jdk/test/com/sun/jdi/InstanceFilter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/InstanceFilter.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @run build TestScaffold VMConnection TargetAdapter TargetListener
* @run compile -g InstanceFilter.java
- * @run main/othervm InstanceFilter
+ * @run driver InstanceFilter
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/InstancesTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/InstancesTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g InstancesTest.java
- * @run main InstancesTest
+ * @run driver InstancesTest
*/
/*
--- a/jdk/test/com/sun/jdi/InterfaceMethodsTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/InterfaceMethodsTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -28,7 +28,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run build InterfaceMethodsTest
- * @run main InterfaceMethodsTest
+ * @run driver InterfaceMethodsTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/InterruptHangTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/InterruptHangTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -7,7 +7,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g InterruptHangTest.java
- * @run main InterruptHangTest
+ * @run driver InterruptHangTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/InvokeHangTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/InvokeHangTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g InvokeHangTest.java
- * @run main InvokeHangTest
+ * @run driver InvokeHangTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/InvokeTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/InvokeTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* @library ..
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g InvokeTest.java
- * @run main InvokeTest
+ * @run driver InvokeTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/JITDebug.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/JITDebug.java Wed Jun 18 13:14:15 2014 -0700
@@ -46,7 +46,7 @@
* assure that launching on uncaught exception works
*
* @author Robert Field
- * @run main/othervm JITDebug
+ * @run driver JITDebug
*/
import com.sun.jdi.*;
--- a/jdk/test/com/sun/jdi/Java_gTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/Java_gTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g Java_gTest.java
- * @run main Java_gTest
+ * @run driver Java_gTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/LambdaBreakpointTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/LambdaBreakpointTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g LambdaBreakpointTest.java
- * @run main LambdaBreakpointTest
+ * @run driver LambdaBreakpointTest
*/
import java.util.List;
--- a/jdk/test/com/sun/jdi/LambdaStepTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/LambdaStepTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g LambdaStepTest.java
- * @run main LambdaStepTest
+ * @run driver LambdaStepTest
*/
import com.sun.jdi.LocalVariable;
import com.sun.jdi.ObjectReference;
--- a/jdk/test/com/sun/jdi/LaunchCommandLine.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/LaunchCommandLine.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* @run compile -g HelloWorld.java
* @run build LaunchCommandLine
*
- * @run main LaunchCommandLine
+ * @run driver LaunchCommandLine
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/LineNumberInfo.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/LineNumberInfo.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g LineNumberInfo.java ControlFlow.java
*
- * @run main LineNumberInfo
+ * @run driver LineNumberInfo
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/LineNumberOnBraceTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/LineNumberOnBraceTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -7,7 +7,7 @@
*
* @run build VMConnection TargetListener TargetAdapter
* @run compile -g LineNumberOnBraceTest.java
- * @run main LineNumberOnBraceTest
+ * @run driver LineNumberOnBraceTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/LocalVariableEqual.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/LocalVariableEqual.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g LocalVariableEqual.java
- * @run main LocalVariableEqual
+ * @run driver LocalVariableEqual
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/LocationTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/LocationTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g LocationTest.java
- * @run main LocationTest
+ * @run driver LocationTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/MethodEntryExitEvents.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/MethodEntryExitEvents.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,9 +29,9 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g MethodEntryExitEvents.java
- * @run main MethodEntryExitEvents SUSPEND_EVENT_THREAD MethodEntryExitEventsDebugee
- * @run main MethodEntryExitEvents SUSPEND_NONE MethodEntryExitEventsDebugee
- * @run main MethodEntryExitEvents SUSPEND_ALL MethodEntryExitEventsDebugee
+ * @run driver MethodEntryExitEvents SUSPEND_EVENT_THREAD MethodEntryExitEventsDebugee
+ * @run driver MethodEntryExitEvents SUSPEND_NONE MethodEntryExitEventsDebugee
+ * @run driver MethodEntryExitEvents SUSPEND_ALL MethodEntryExitEventsDebugee
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/MethodExitReturnValuesTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/MethodExitReturnValuesTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g MethodExitReturnValuesTest.java
- * @run main MethodExitReturnValuesTest
+ * @run driver MethodExitReturnValuesTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/ModificationWatchpoints.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ModificationWatchpoints.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,7 +32,7 @@
* @library scaffold
* @run build JDIScaffold VMConnection
* @run compile -g ModificationWatchpoints.java
- * @run main/othervm ModificationWatchpoints
+ * @run driver ModificationWatchpoints
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/MonitorEventTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/MonitorEventTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g MonitorEventTest.java
- * @run main MonitorEventTest
+ * @run driver MonitorEventTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/MonitorFrameInfo.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/MonitorFrameInfo.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g MonitorFrameInfo.java
- * @run main MonitorFrameInfo
+ * @run driver MonitorFrameInfo
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/MultiBreakpointsTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/MultiBreakpointsTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g MultiBreakpointsTest.java
- * @run main MultiBreakpointsTest
+ * @run driver MultiBreakpointsTest
*/
/*
--- a/jdk/test/com/sun/jdi/NativeInstanceFilter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/NativeInstanceFilter.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* @library scaffold
* @run build JDIScaffold VMConnection
* @compile -XDignore.symbol.file NativeInstanceFilterTarg.java
- * @run main/othervm NativeInstanceFilter
+ * @run driver NativeInstanceFilter
*/
/*
--- a/jdk/test/com/sun/jdi/NewInstanceTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/NewInstanceTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g NewInstanceTest.java
- * @run main NewInstanceTest
+ * @run driver NewInstanceTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/NoLaunchOptionTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/NoLaunchOptionTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
*
* @run compile -g NoLaunchOptionTest.java
* @build VMConnection
- * @run main/othervm NoLaunchOptionTest
+ * @run driver NoLaunchOptionTest
*/
import java.net.ServerSocket;
--- a/jdk/test/com/sun/jdi/NoLocInfoTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/NoLocInfoTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g:none NoLocInfoTest.java
- * @run main NoLocInfoTest
+ * @run driver NoLocInfoTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/NullThreadGroupNameTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/NullThreadGroupNameTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -27,7 +27,7 @@
* @summary Ensure that JDWP doesn't crash with a null thread group name
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
- * @run main NullThreadGroupNameTest
+ * @run driver NullThreadGroupNameTest
*/
import com.sun.jdi.*;
import com.sun.jdi.connect.*;
--- a/jdk/test/com/sun/jdi/OnThrowTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/OnThrowTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* @run compile -g OnThrowTest.java
* @run compile -g OnThrowTarget.java
* @run compile -g VMConnection.java
- * @run main/othervm OnThrowTest
+ * @run driver OnThrowTest
*/
import java.io.File;
--- a/jdk/test/com/sun/jdi/OptionTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/OptionTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* @run compile -g OptionTest.java
* @run compile -g HelloWorld.java
* @run compile -g VMConnection.java
- * @run main/othervm OptionTest
+ * @run driver OptionTest
*/
import java.net.ServerSocket;
--- a/jdk/test/com/sun/jdi/PopAndInvokeTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/PopAndInvokeTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g PopAndInvokeTest.java
- * @run main PopAndInvokeTest
+ * @run driver PopAndInvokeTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/PopAndStepTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/PopAndStepTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -10,7 +10,7 @@
* @library ..
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g PopAndStepTest.java
- * @run main PopAndStepTest
+ * @run driver PopAndStepTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/PopAsynchronousTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/PopAsynchronousTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g PopAsynchronousTest.java
- * @run main PopAsynchronousTest
+ * @run driver PopAsynchronousTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/PopSynchronousTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/PopSynchronousTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g PopSynchronousTest.java
- * @run main PopSynchronousTest
+ * @run driver PopSynchronousTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/RedefineCrossEvent.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/RedefineCrossEvent.java Wed Jun 18 13:14:15 2014 -0700
@@ -46,26 +46,26 @@
* @run compile -g RepStepTarg.java
* @run compile -g RequestReflectionTest.java
*
- * @run main AccessSpecifierTest -redefstart -redefevent
- * @run main AfterThreadDeathTest -redefstart -redefevent
- * @run main ArrayRangeTest -redefstart -redefevent
- * @run main BacktraceFieldTest -redefstart -redefevent
- * @run main ClassesByName2Test -redefstart -redefevent
- * @run main DebuggerThreadTest -redefstart -redefevent
- * @run main DeleteEventRequestsTest -redefstart -redefevent
- * @run main/othervm ExceptionEvents -redefstart -redefevent N A StackOverflowCaughtTarg java.lang.Exception
- * @run main/othervm ExceptionEvents -redefstart -redefevent C A StackOverflowCaughtTarg null
- * @run main/othervm ExceptionEvents -redefstart -redefevent C A StackOverflowCaughtTarg java.lang.StackOverflowError
- * @run main/othervm ExceptionEvents -redefstart -redefevent N A StackOverflowCaughtTarg java.lang.NullPointerException
- * @run main/othervm ExceptionEvents -redefstart -redefevent C T StackOverflowCaughtTarg java.lang.Error
- * @run main/othervm ExceptionEvents -redefstart -redefevent N T StackOverflowCaughtTarg java.lang.NullPointerException
- * @run main/othervm ExceptionEvents -redefstart -redefevent N N StackOverflowCaughtTarg java.lang.Exception
- * @run main/othervm ExceptionEvents -redefstart -redefevent C N StackOverflowCaughtTarg java.lang.Error
- * @run main/othervm ExceptionEvents -redefstart -redefevent N A StackOverflowUncaughtTarg java.lang.Exception
- * @run main ExpiredRequestDeletionTest -redefstart -redefevent
- * @run main/othervm FieldWatchpoints -redefstart -redefevent
- * @run main/othervm InstanceFilter -redefstart -redefevent
- * @run main LocationTest -redefstart -redefevent
- * @run main NewInstanceTest -redefstart -redefevent
- * @run main RequestReflectionTest -redefstart -redefevent
+ * @run driver AccessSpecifierTest -redefstart -redefevent
+ * @run driver AfterThreadDeathTest -redefstart -redefevent
+ * @run driver ArrayRangeTest -redefstart -redefevent
+ * @run driver BacktraceFieldTest -redefstart -redefevent
+ * @run driver ClassesByName2Test -redefstart -redefevent
+ * @run driver DebuggerThreadTest -redefstart -redefevent
+ * @run driver DeleteEventRequestsTest -redefstart -redefevent
+ * @run driver ExceptionEvents -redefstart -redefevent N A StackOverflowCaughtTarg java.lang.Exception
+ * @run driver ExceptionEvents -redefstart -redefevent C A StackOverflowCaughtTarg null
+ * @run driver ExceptionEvents -redefstart -redefevent C A StackOverflowCaughtTarg java.lang.StackOverflowError
+ * @run driver ExceptionEvents -redefstart -redefevent N A StackOverflowCaughtTarg java.lang.NullPointerException
+ * @run driver ExceptionEvents -redefstart -redefevent C T StackOverflowCaughtTarg java.lang.Error
+ * @run driver ExceptionEvents -redefstart -redefevent N T StackOverflowCaughtTarg java.lang.NullPointerException
+ * @run driver ExceptionEvents -redefstart -redefevent N N StackOverflowCaughtTarg java.lang.Exception
+ * @run driver ExceptionEvents -redefstart -redefevent C N StackOverflowCaughtTarg java.lang.Error
+ * @run driver ExceptionEvents -redefstart -redefevent N A StackOverflowUncaughtTarg java.lang.Exception
+ * @run driver ExpiredRequestDeletionTest -redefstart -redefevent
+ * @run driver FieldWatchpoints -redefstart -redefevent
+ * @run driver InstanceFilter -redefstart -redefevent
+ * @run driver LocationTest -redefstart -redefevent
+ * @run driver NewInstanceTest -redefstart -redefevent
+ * @run driver RequestReflectionTest -redefstart -redefevent
*/
--- a/jdk/test/com/sun/jdi/RedefineCrossStart.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/RedefineCrossStart.java Wed Jun 18 13:14:15 2014 -0700
@@ -37,13 +37,13 @@
* @run compile -g FramesTest.java
* @run compile -g InvokeTest.java
*
- * @run main CountEvent -redefstart
- * @run main CountFilterTest -redefstart
- * @run main FramesTest -redefstart
- * @run main InvokeTest -redefstart
+ * @run driver CountEvent -redefstart
+ * @run driver CountFilterTest -redefstart
+ * @run driver FramesTest -redefstart
+ * @run driver InvokeTest -redefstart
*
- * @run main/othervm ExceptionEvents -redefstart U A StackOverflowUncaughtTarg null
- * @run main/othervm ExceptionEvents -redefstart U A StackOverflowUncaughtTarg java.lang.Error
- * @run main/othervm ExceptionEvents -redefstart U A StackOverflowUncaughtTarg java.lang.StackOverflowError
- * @run main PopSynchronousTest -redefstart
+ * @run driver ExceptionEvents -redefstart U A StackOverflowUncaughtTarg null
+ * @run driver ExceptionEvents -redefstart U A StackOverflowUncaughtTarg java.lang.Error
+ * @run driver ExceptionEvents -redefstart U A StackOverflowUncaughtTarg java.lang.StackOverflowError
+ * @run driver PopSynchronousTest -redefstart
*/
--- a/jdk/test/com/sun/jdi/ReferrersTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ReferrersTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g ReferrersTest.java
- * @run main ReferrersTest
+ * @run driver ReferrersTest
*/
/*
--- a/jdk/test/com/sun/jdi/RepStep.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/RepStep.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
* @run compile -g RepStepTarg.java
* @run build VMConnection RepStep
*
- * @run main/othervm RepStep
+ * @run driver RepStep
*
* @summary RepStep detects missed step events due to lack of
* frame pop events (in back-end).
--- a/jdk/test/com/sun/jdi/RequestReflectionTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/RequestReflectionTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -28,7 +28,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g RequestReflectionTest.java
- * @run main RequestReflectionTest
+ * @run driver RequestReflectionTest
*
* @summary RequestReflectionTest checks to see that reflective
* accessors on EventRequests return what they are given.
--- a/jdk/test/com/sun/jdi/ResumeOneThreadTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ResumeOneThreadTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g ResumeOneThreadTest.java
- * @run main ResumeOneThreadTest
+ * @run driver ResumeOneThreadTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/RunToExit.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/RunToExit.java Wed Jun 18 13:14:15 2014 -0700
@@ -26,7 +26,7 @@
* @summary Test that with server=y, when VM runs to System.exit() no error happens
*
* @build VMConnection RunToExit Exit0
- * @run main/othervm RunToExit
+ * @run driver RunToExit
*/
import java.io.InputStream;
import java.io.IOException;
--- a/jdk/test/com/sun/jdi/SDENullTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/SDENullTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g SDENullTest.java
- * @run main SDENullTest
+ * @run driver SDENullTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/SimulResumerTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/SimulResumerTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g SimulResumerTest.java
- * @run main/othervm SimulResumerTest
+ * @run driver SimulResumerTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/SourceNameFilterTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/SourceNameFilterTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,9 +30,9 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g SourceNameFilterTest.java
- * @run main SourceNameFilterTest
+ * @run driver SourceNameFilterTest
* @run compile -g:none SourceNameFilterTest.java
- * @run main SourceNameFilterTest
+ * @run driver SourceNameFilterTest
*/
// The compile -g:none suppresses the lineNumber table to trigger bug 6646613.
--- a/jdk/test/com/sun/jdi/StepTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/StepTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -51,15 +51,15 @@
* | | | +--- Debuggee command Line
* V V V V Workaround-----+
* V
- * @run main StepTest 2 line 2 MethodCalls
- * @run main StepTest 3 line 14 MethodCalls
+ * @run driver StepTest 2 line 2 MethodCalls
+ * @run driver StepTest 3 line 14 MethodCalls
*
- * @run main StepTest 2 line 18 MethodCallsReflection 12
+ * @run driver StepTest 2 line 18 MethodCallsReflection 12
*
- * @run main StepTest 2 min 4 MethodCalls
- * @run main StepTest 3 min 43 MethodCalls
+ * @run driver StepTest 2 min 4 MethodCalls
+ * @run driver StepTest 3 min 43 MethodCalls
*
- * @run main StepTest 2 line 65 ControlFlow 64
+ * @run driver StepTest 2 line 65 ControlFlow 64
*/
/*
--- a/jdk/test/com/sun/jdi/SuspendThreadTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/SuspendThreadTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g SuspendThreadTest.java
- * @run main SuspendThreadTest
+ * @run driver SuspendThreadTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/TemplateTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/TemplateTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g TemplateTest.java
- * @run main TemplateTest
+ * @run driver TemplateTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/ThreadGroupTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/ThreadGroupTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile ThreadGroupTest.java
- * @run main ThreadGroupTest
+ * @run driver ThreadGroupTest
*/
import com.sun.jdi.*;
import com.sun.jdi.connect.*;
--- a/jdk/test/com/sun/jdi/TwoThreadsTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/TwoThreadsTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g TwoThreadsTest.java
- * @run main TwoThreadsTest
+ * @run driver TwoThreadsTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/UTF8Test.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/UTF8Test.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g UTF8Test.java
- * @run main UTF8Test
+ * @run driver UTF8Test
*/
/*
--- a/jdk/test/com/sun/jdi/UnpreparedByName.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/UnpreparedByName.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
* @run compile -g InnerTarg.java
* @run build UnpreparedByName
*
- * @run main UnpreparedByName InnerTarg
+ * @run driver UnpreparedByName InnerTarg
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/UnpreparedClasses.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/UnpreparedClasses.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,7 +33,7 @@
* @run compile -g InnerTarg.java
* @run build UnpreparedClasses
*
- * @run main UnpreparedClasses InnerTarg
+ * @run driver UnpreparedClasses InnerTarg
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/VMConnection.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/VMConnection.java Wed Jun 18 13:14:15 2014 -0700
@@ -52,61 +52,23 @@
// When we run under jtreg, test.classes contains the pathname of
// the dir in which the .class files will be placed.
- BufferedReader reader;
String testClasses = System.getProperty("test.classes");
if (testClasses == null) {
return retVal;
}
- retVal += "-classpath " + testClasses + " ";
- File myFile = new File(testClasses, "@debuggeeVMOptions");
+ retVal += "-classpath " + testClasses;
- if (!myFile.canRead()) {
- // Not there - look in parent (in case we are in a subdir)
- myFile = new File(testClasses);
- String parentDir = myFile.getParent();
- if (parentDir != null) {
- myFile = new File(parentDir, "@debuggeeVMOptions");
- if (!myFile.canRead()) {
- return retVal;
- }
- }
+ String vmOpts = System.getProperty("test.vm.opts");
+ System.out.println("vmOpts: "+vmOpts);
+ if (vmOpts != null) {
+ retVal += " " + vmOpts;
}
- String wholePath = myFile.getPath();
- try {
- reader = new BufferedReader(new FileReader(myFile));
- } catch (FileNotFoundException ee) {
- System.out.println("-- Error 2 trying to access file " +
- wholePath + ": " + ee);
- return retVal;
+ String javaOpts = System.getProperty("test.java.opts");
+ System.out.println("javaOpts: "+javaOpts);
+ if (javaOpts != null) {
+ retVal += " " + javaOpts;
}
- String line;
- while (true) {
- try {
- line = reader.readLine();
- } catch (IOException ee) {
- System.out.println("-- Error reading options from file " +
- wholePath + ": " + ee);
- break;
- }
- if (line == null) {
- System.out.println("-- No debuggee VM options found in file " +
- wholePath);
- break;
- }
- line = line.trim();
- if (line.length() != 0 && !line.startsWith("#")) {
- System.out.println("-- Added debuggeeVM options from file " +
- wholePath + ": " + line);
- retVal += line;
- break;
- }
- // Else, read he next line.
- }
- try {
- reader.close();
- } catch (IOException ee) {
- }
return retVal;
}
--- a/jdk/test/com/sun/jdi/VMDeathLastTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/VMDeathLastTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,7 +31,7 @@
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g HelloWorld.java
* @run build VMDeathLastTest
- * @run main VMDeathLastTest
+ * @run driver VMDeathLastTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/VMDeathRequestTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/VMDeathRequestTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,7 +29,7 @@
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g HelloWorld.java
* @run build VMDeathRequestTest
- * @run main VMDeathRequestTest
+ * @run driver VMDeathRequestTest
*
* @summary VMDeathRequestTest checks to see that
* VMDisconnectedException is never thrown before VMDisconnectEvent.
--- a/jdk/test/com/sun/jdi/VarargsTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/VarargsTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g VarargsTest.java
- * @run main VarargsTest
+ * @run driver VarargsTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/Vars.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/Vars.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
* @library scaffold
* @run build JDIScaffold VMConnection
* @run compile -g Vars.java
- * @run main/othervm Vars
+ * @run driver Vars
*/
import com.sun.jdi.*;
--- a/jdk/test/com/sun/jdi/VisibleMethods.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/VisibleMethods.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,7 +30,7 @@
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g VisibleMethods.java
- * @run main VisibleMethods
+ * @run driver VisibleMethods
*/
import com.sun.jdi.Method;
import com.sun.jdi.ReferenceType;
--- a/jdk/test/com/sun/jdi/redefine/RedefineTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/redefine/RedefineTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -34,7 +34,7 @@
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g RedefineTest.java
* @run shell RedefineSetUp.sh
- * @run main/othervm RedefineTest
+ * @run driver RedefineTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/redefineMethod/RedefineTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/redefineMethod/RedefineTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -32,8 +32,8 @@
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g RedefineTest.java
* @run shell RedefineSetUp.sh
- * @run main RedefineTest -repeat 3
- * @run main RedefineTest
+ * @run driver RedefineTest -repeat 3
+ * @run driver RedefineTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/sde/FilterMangleTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/sde/FilterMangleTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -9,21 +9,21 @@
* @run build TestScaffold VMConnection TargetListener TargetAdapter InstallSDE
* @run compile FilterMangleTest.java
* @run compile -g onion/pickle/Mangle.java
- * @run main FilterMangleTest
- * @run main FilterMangleTest SDE-pMangle.java*
- * @run main FilterMangleTest SDE-pMangle.jav*
- * @run main FilterMangleTest SDE-pMangle.j*
- * @run main FilterMangleTest SDE-p*Mangle.java
- * @run main FilterMangleTest SDE-p*angle.java
- * @run main FilterMangleTest SDE-p*java
- * @run main FilterMangleTest SDE-pMangle.xyz
- * @run main FilterMangleTest SDE-pIncl.rats*
- * @run main FilterMangleTest SDE-pIncl.rat*
- * @run main FilterMangleTest SDE-p*angle.rats
- * @run main FilterMangleTest SDE-f*Incl.rat
- * @run main FilterMangleTest SDE-ffred
- * @run main FilterMangleTest SDE-f*ratsx
- * @run main FilterMangleTest SDE-fMangle.javax*
+ * @run driver FilterMangleTest
+ * @run driver FilterMangleTest SDE-pMangle.java*
+ * @run driver FilterMangleTest SDE-pMangle.jav*
+ * @run driver FilterMangleTest SDE-pMangle.j*
+ * @run driver FilterMangleTest SDE-p*Mangle.java
+ * @run driver FilterMangleTest SDE-p*angle.java
+ * @run driver FilterMangleTest SDE-p*java
+ * @run driver FilterMangleTest SDE-pMangle.xyz
+ * @run driver FilterMangleTest SDE-pIncl.rats*
+ * @run driver FilterMangleTest SDE-pIncl.rat*
+ * @run driver FilterMangleTest SDE-p*angle.rats
+ * @run driver FilterMangleTest SDE-f*Incl.rat
+ * @run driver FilterMangleTest SDE-ffred
+ * @run driver FilterMangleTest SDE-f*ratsx
+ * @run driver FilterMangleTest SDE-fMangle.javax*
*/
/*
--- a/jdk/test/com/sun/jdi/sde/MangleStepTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/sde/MangleStepTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -10,11 +10,11 @@
* @run build TestScaffold VMConnection TargetListener TargetAdapter InstallSDE
* @run compile MangleStepTest.java
* @run compile -g onion/pickle/Mangle.java
- * @run main/othervm MangleStepTest unset
- * @run main/othervm MangleStepTest Java
- * @run main/othervm MangleStepTest XYZ
- * @run main/othervm MangleStepTest Rats
- * @run main/othervm MangleStepTest bogus
+ * @run driver MangleStepTest unset
+ * @run driver MangleStepTest Java
+ * @run driver MangleStepTest XYZ
+ * @run driver MangleStepTest Rats
+ * @run driver MangleStepTest bogus
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
@@ -82,7 +82,6 @@
}
BreakpointEvent bpe = resumeTo(targetName, "main",
"([Ljava/lang/String;)V");
- waitForInput();
ThreadReference thread = bpe.thread();
--- a/jdk/test/com/sun/jdi/sde/MangleTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/sde/MangleTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -10,7 +10,7 @@
* @run build TestScaffold VMConnection TargetListener TargetAdapter InstallSDE
* @run compile MangleTest.java
* @run compile -g onion/pickle/Mangle.java
- * @run main MangleTest
+ * @run driver MangleTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/sde/SourceDebugExtensionTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/sde/SourceDebugExtensionTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -10,7 +10,7 @@
* @run build TestScaffold VMConnection TargetListener TargetAdapter InstallSDE
* @run compile SourceDebugExtensionTest.java
* @run compile -g SourceDebugExtensionTarg.java
- * @run main SourceDebugExtensionTest
+ * @run driver SourceDebugExtensionTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/jdi/sde/TemperatureTableTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/jdi/sde/TemperatureTableTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -10,7 +10,7 @@
* @run build TestScaffold VMConnection TargetListener TargetAdapter InstallSDE HelloWorld
* @run compile TemperatureTableTest.java
* @run compile -g TemperatureTableServlet.java
- * @run main TemperatureTableTest
+ * @run driver TemperatureTableTest
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
--- a/jdk/test/com/sun/tools/attach/SimpleProvider.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/com/sun/tools/attach/SimpleProvider.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -100,4 +100,12 @@
public void dataDumpRequest() throws IOException {
}
+
+ public String startLocalManagementAgent() {
+ return null;
+ }
+
+ public void startManagementAgent(Properties agentProperties) {
+ }
+
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/com/sun/tools/attach/StartManagementAgent.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,211 @@
+/*
+ * Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import com.sun.tools.attach.AttachOperationFailedException;
+import com.sun.tools.attach.VirtualMachine;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.util.Properties;
+import java.util.HashMap;
+
+import javax.management.remote.JMXServiceURL;
+import javax.management.remote.JMXConnector;
+import javax.management.remote.JMXConnectorFactory;
+
+import jdk.testlibrary.ProcessThread;
+import jdk.testlibrary.Utils;
+
+/*
+ * @test
+ * @summary Test for VirtualMachine.startManagementAgent and VirtualMachine.startLocalManagementAgent
+ * @library /lib/testlibrary
+ * @run build Application Shutdown
+ * @run main StartManagementAgent
+ */
+
+/*
+ * This test is not meant to test all possible configuration parameters to
+ * the JMX agent, there are other tests for that. This test makes sure it is
+ * possible to start the agent via attach.
+ */
+public class StartManagementAgent {
+ public static void main(String[] args) throws Throwable {
+ final String pidFile = "StartManagementAgent.Application.pid";
+ ProcessThread processThread = null;
+ RunnerUtil.ProcessInfo info = null;
+ try {
+ processThread = RunnerUtil.startApplication(pidFile);
+ info = RunnerUtil.readProcessInfo(pidFile);
+ runTests(info.pid);
+ } catch (Throwable t) {
+ System.out.println("StartManagementAgent got unexpected exception: " + t);
+ t.printStackTrace();
+ throw t;
+ } finally {
+ // Make sure the Application process is stopped.
+ RunnerUtil.stopApplication(info.shutdownPort, processThread);
+ }
+ }
+
+ private static void basicTests(VirtualMachine vm) throws Exception {
+
+ // Try calling with null argument
+ boolean exception = false;
+ try {
+ vm.startManagementAgent(null);
+ } catch (NullPointerException e) {
+ exception = true;
+ }
+ if (!exception) {
+ throw new Exception("startManagementAgent(null) should throw NPE");
+ }
+
+ // Try calling with a property value with a space in it
+ Properties p = new Properties();
+ File f = new File("file with space");
+ try (FileWriter fw = new FileWriter(f)) {
+ fw.write("com.sun.management.jmxremote.port=apa");
+ }
+ p.put("com.sun.management.config.file", f.getAbsolutePath());
+ try {
+ vm.startManagementAgent(p);
+ } catch(AttachOperationFailedException ex) {
+ // We expect parsing of "apa" above to fail, but if the file path
+ // can't be read we get a different exception message
+ if (!ex.getMessage().contains("Invalid com.sun.management.jmxremote.port number")) {
+ throw ex;
+ }
+ }
+ }
+
+ private static final String LOCAL_CONNECTOR_ADDRESS_PROP =
+ "com.sun.management.jmxremote.localConnectorAddress";
+
+ private static final int MAX_RETRIES = 10;
+
+ public static void runTests(int pid) throws Exception {
+ VirtualMachine vm = VirtualMachine.attach(""+pid);
+ try {
+
+ basicTests(vm);
+
+ testLocalAgent(vm);
+
+ // we retry the remote case several times in case the error
+ // was caused by a port conflict
+ int i = 0;
+ boolean success = false;
+ do {
+ try {
+ System.err.println("Trying remote agent. Try #" + i);
+ testRemoteAgent(vm);
+ success = true;
+ } catch(Exception ex) {
+ System.err.println("testRemoteAgent failed with exception:");
+ ex.printStackTrace();
+ System.err.println("Retrying.");
+ }
+ i++;
+ } while(!success && i < MAX_RETRIES);
+ if (!success) {
+ throw new Exception("testRemoteAgent failed after " + MAX_RETRIES + " tries");
+ }
+ } finally {
+ vm.detach();
+ }
+ }
+
+ public static void testLocalAgent(VirtualMachine vm) throws Exception {
+ Properties agentProps = vm.getAgentProperties();
+ String address = (String) agentProps.get(LOCAL_CONNECTOR_ADDRESS_PROP);
+ if (address != null) {
+ throw new Exception("Local management agent already started");
+ }
+
+ String result = vm.startLocalManagementAgent();
+
+ // try to parse the return value as a JMXServiceURL
+ new JMXServiceURL(result);
+
+ agentProps = vm.getAgentProperties();
+ address = (String) agentProps.get(LOCAL_CONNECTOR_ADDRESS_PROP);
+ if (address == null) {
+ throw new Exception("Local management agent could not be started");
+ }
+ }
+
+ public static void testRemoteAgent(VirtualMachine vm) throws Exception {
+ int port = Utils.getFreePort();
+
+ // try to connect - should fail
+ tryConnect(port, false);
+
+ // start agent
+ System.out.println("Starting agent on port: " + port);
+ Properties mgmtProps = new Properties();
+ mgmtProps.put("com.sun.management.jmxremote.port", port);
+ mgmtProps.put("com.sun.management.jmxremote.authenticate", "false");
+ mgmtProps.put("com.sun.management.jmxremote.ssl", "false");
+ vm.startManagementAgent(mgmtProps);
+
+ // try to connect - should work
+ tryConnect(port, true);
+
+ // try to start again - should fail
+ boolean exception = false;
+ try {
+ vm.startManagementAgent(mgmtProps);
+ } catch(AttachOperationFailedException ex) {
+ // expected
+ exception = true;
+ }
+ if (!exception) {
+ throw new Exception("Expected the second call to vm.startManagementAgent() to fail");
+ }
+ }
+
+ private static void tryConnect(int port, boolean shouldSucceed) throws Exception {
+ String jmxUrlStr =
+ String.format(
+ "service:jmx:rmi:///jndi/rmi://localhost:%d/jmxrmi",
+ port);
+ JMXServiceURL url = new JMXServiceURL(jmxUrlStr);
+ HashMap<String, ?> env = new HashMap<>();
+
+ boolean succeeded;
+ try {
+ JMXConnector c = JMXConnectorFactory.connect(url, env);
+ c.getMBeanServerConnection();
+ succeeded = true;
+ } catch(Exception ex) {
+ succeeded = false;
+ }
+ if (succeeded && !shouldSucceed) {
+ throw new Exception("Could connect to agent, but should not have been possible");
+ }
+ if (!succeeded && shouldSucceed) {
+ throw new Exception("Could not connect to agent");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/invoke/VMAnonymousClass.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8046903
+ * @summary VM anonymous class members can't be statically invocable
+ * @run junit test.java.lang.invoke.VMAnonymousClass
+ */
+package test.java.lang.invoke;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.lang.reflect.Field;
+import org.junit.Test;
+import sun.misc.Unsafe;
+import jdk.internal.org.objectweb.asm.*;
+import static jdk.internal.org.objectweb.asm.Opcodes.*;
+
+public class VMAnonymousClass {
+ public static void main(String[] args) throws Throwable {
+ VMAnonymousClass test = new VMAnonymousClass();
+ test.testJavaLang();
+ test.testJavaUtil();
+ test.testSunMisc();
+ test.testJavaLangInvoke();
+ System.out.println("TEST PASSED");
+ }
+
+ // Test VM anonymous classes from different packages
+ // (see j.l.i.InvokerBytecodeGenerator::isStaticallyInvocable).
+ @Test public void testJavaLang() throws Throwable { test("java/lang"); }
+ @Test public void testJavaUtil() throws Throwable { test("java/util"); }
+ @Test public void testSunMisc() throws Throwable { test("sun/misc"); }
+ @Test public void testJavaLangInvoke() throws Throwable { test("java/lang/invoke"); }
+
+ private static Unsafe unsafe = getUnsafe();
+
+ private static void test(String pkg) throws Throwable {
+ byte[] bytes = dumpClass(pkg);
+ // Define VM anonymous class in privileged context (on BCP).
+ Class anonClass = unsafe.defineAnonymousClass(Object.class, bytes, null);
+
+ MethodType t = MethodType.methodType(Object.class, int.class);
+ MethodHandle target = MethodHandles.lookup().findStatic(anonClass, "get", t);
+
+ // Wrap target into LF (convert) to get "target" referenced from LF
+ MethodHandle wrappedMH = target.asType(MethodType.methodType(Object.class, Integer.class));
+
+ // Invoke enough times to provoke LF compilation to bytecode.
+ for (int i = 0; i<100; i++) {
+ Object r = wrappedMH.invokeExact((Integer)1);
+ }
+ }
+
+ /*
+ * Constructs bytecode for the following class:
+ * public class pkg.MyClass {
+ * MyClass() {}
+ * public Object get(int i) { return null; }
+ * }
+ */
+ public static byte[] dumpClass(String pkg) {
+ ClassWriter cw = new ClassWriter(0);
+ MethodVisitor mv;
+
+ cw.visit(52, ACC_SUPER | ACC_PUBLIC, pkg+"/MyClass", null, "java/lang/Object", null);
+ {
+ mv = cw.visitMethod(0, "<init>", "()V", null, null);
+ mv.visitCode();
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
+ mv.visitInsn(RETURN);
+ mv.visitMaxs(1, 1);
+ mv.visitEnd();
+ }
+ {
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "get", "(I)Ljava/lang/Object;", null, null);
+ mv.visitCode();
+ mv.visitInsn(ACONST_NULL);
+ mv.visitInsn(ARETURN);
+ mv.visitMaxs(1, 1);
+ mv.visitEnd();
+ }
+ cw.visitEnd();
+ return cw.toByteArray();
+ }
+
+ private static synchronized Unsafe getUnsafe() {
+ try {
+ Field f = Unsafe.class.getDeclaredField("theUnsafe");
+ f.setAccessible(true);
+ return (Unsafe) f.get(null);
+ } catch (NoSuchFieldException | IllegalAccessException e) {
+ throw new RuntimeException("Unable to get Unsafe instance.", e);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/reflect/DefaultMethodMembers/FilterNotMostSpecific.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,691 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8029674
+ * @summary Verify that the right interface methods are returned by
+ * Class.getMethod() and Class.getMethods()
+ * @run testng FilterNotMostSpecific
+ */
+
+import java.lang.reflect.*;
+import java.lang.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import static org.testng.Assert.*;
+
+public class FilterNotMostSpecific {
+
+ @Test(dataProvider="getCases")
+ public void testGetMethod(Class<?> iface) {
+ boolean match = false;
+ MethodDesc[] expectedMethods = iface.getAnnotationsByType(MethodDesc.class);
+
+ for (MethodDesc expected : expectedMethods) {
+ if (expected.isGetMethodReturn()) {
+ try {
+ Method m = iface.getMethod(expected.name());
+ if (!assertMatch(expected, m))
+ fail(failMsg(expected, m, iface));
+ else
+ match = true;
+ } catch (NoSuchMethodException e) {
+ fail("expected: " + toMethodString(expected), e);
+ }
+ }
+ }
+ assert(match);
+ }
+
+ @Test(dataProvider="getCases")
+ public void testGetMethods(Class<?> iface) {
+ List<Method> foundMethods = filterObjectMethods(iface.getMethods());
+ MethodDesc[] expectedMethods = iface.getAnnotationsByType(MethodDesc.class);
+ Set<Method> used = new HashSet<>();
+
+ for (MethodDesc expected : expectedMethods) {
+ boolean found = false;
+
+ for (Method m : foundMethods) {
+ if (used.contains(m))
+ continue;
+
+ if(expected.name().equals(m.getName()) &&
+ expected.declaringClass() ==m.getDeclaringClass()) {
+
+ found = true;
+ assertMatch(expected, m);
+ used.add(m);
+ break;
+ }
+ }
+ if (! found)
+ fail("On: "+ iface +"\nDid not find " + toMethodString(expected) + " among " + foundMethods);
+ }
+ assertEquals(foundMethods.size(), expectedMethods.length,
+ "\non: " + iface +
+ "\nexpected: " + toMethodStrings(expectedMethods) +
+ "\nfound: " + foundMethods + "\n");
+ }
+
+ private boolean assertMatch(MethodDesc expected, Method m) {
+ if (!expected.name().equals(m.getName()))
+ return false;
+ if (expected.declaringClass() != m.getDeclaringClass())
+ return false;
+
+ if (expected.kind() == MethodKind.ABSTRACT)
+ assertTrue(Modifier.isAbstract(m.getModifiers()), m + " should be ABSTRACT");
+ else if (expected.kind() == MethodKind.CONCRETE)
+ assertTrue(!Modifier.isAbstract(m.getModifiers()) && !m.isDefault(), m + " should be CONCRETE");
+ else if (expected.kind() == MethodKind.DEFAULT)
+ assertTrue(m.isDefault(), m + " should be DEFAULT");
+
+ return true;
+ }
+
+ private String failMsg(MethodDesc expected, Method m, Class<?> iface) {
+ return "\nOn interface: " + iface +
+ "\nexpected: " + toMethodString(expected) +
+ "\nfound: " + m;
+ }
+
+ private static List<Method> filterObjectMethods(Method[] in) {
+ return Arrays.stream(in).
+ filter(m -> (m.getDeclaringClass() != java.lang.Object.class)).
+ collect(Collectors.toList());
+ }
+
+ private String toMethodString(MethodDesc m) {
+ return m.declaringClass().getSimpleName().toString() + "." +
+ m.name() + "()";
+ }
+
+ private List<String> toMethodStrings(MethodDesc[] m) {
+ return Arrays.stream(m).
+ map(this::toMethodString)
+ .collect(Collectors.toList());
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Repeatable(MethodDescs.class)
+ public @interface MethodDesc {
+ String name();
+ Class<?> declaringClass();
+ MethodKind kind() default MethodKind.ABSTRACT;
+ boolean isGetMethodReturn() default false;
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ public @interface MethodDescs {
+ MethodDesc[] value();
+ }
+
+ public static enum MethodKind {
+ ABSTRACT,
+ CONCRETE,
+ DEFAULT,
+ }
+ // base interfaces
+ interface I { void nonDefault(); }
+ interface J extends I { void nonDefault(); }
+
+ interface Jprim extends I {}
+ interface Jbis extends Jprim { void nonDefault(); }
+
+ // interesting cases
+
+ @MethodDesc(name="nonDefault", declaringClass=Jbis.class,
+ isGetMethodReturn=true)
+ interface P1 extends Jbis {}
+
+ @MethodDesc(name="nonDefault", declaringClass=Jbis.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=I.class)
+ interface P2 extends Jbis, Jprim {}
+
+ @MethodDesc(name="nonDefault", declaringClass=Jbis.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=I.class)
+ interface P3 extends Jbis, Jprim, I {}
+
+ @MethodDesc(name="nonDefault", declaringClass=I.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=J.class)
+ interface P4 extends I, J {}
+
+ @MethodDesc(name="nonDefault", declaringClass=J.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=I.class)
+ interface P5 extends J, I {}
+
+ @MethodDesc(name="nonDefault", declaringClass=J.class,
+ isGetMethodReturn=true)
+ interface K1 extends J {}
+
+ @MethodDesc(name="nonDefault", declaringClass=K1M.class,
+ isGetMethodReturn=true)
+ interface K1M extends J { void nonDefault(); }
+
+ @MethodDesc(name="nonDefault", declaringClass=I.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=J.class)
+ interface K2 extends I, J {}
+
+ @MethodDesc(name="nonDefault", declaringClass=J.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=I.class)
+ interface K2O extends J, I {}
+
+ @MethodDesc(name="nonDefault", declaringClass=K2M.class,
+ isGetMethodReturn=true)
+ interface K2M extends J, I { void nonDefault(); }
+
+ // base interfaces default methods
+ interface L { default void isDefault() {} void nonDefault(); }
+ interface M extends L { default void isDefault() {} void nonDefault(); }
+
+ // test cases default methods
+
+ @MethodDesc(name="nonDefault", declaringClass=M.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="isDefault", declaringClass=M.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ interface N1 extends M {}
+
+ @MethodDesc(name="isDefault", declaringClass=N1D.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=M.class,
+ isGetMethodReturn=true)
+ interface N1D extends M { default void isDefault() {}}
+
+ @MethodDesc(name="nonDefault", declaringClass=N1N.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="isDefault", declaringClass=M.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ interface N1N extends M { void nonDefault(); }
+
+ @MethodDesc(name="isDefault", declaringClass=N1DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=N1DN.class,
+ isGetMethodReturn=true)
+ interface N1DN extends M { default void isDefault() {} void nonDefault(); }
+
+ @MethodDesc(name="isDefault", declaringClass=M.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=L.class)
+ @MethodDesc(name="nonDefault", declaringClass=M.class,
+ isGetMethodReturn=true)
+ interface N2 extends M, L {}
+
+ @MethodDesc(name="isDefault", declaringClass=M.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=L.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=M.class)
+ interface N22 extends L, M {}
+
+ @MethodDesc(name="isDefault", declaringClass=N2D.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=L.class)
+ @MethodDesc(name="nonDefault", declaringClass=M.class,
+ isGetMethodReturn=true)
+ interface N2D extends M, L { default void isDefault() {}}
+
+ @MethodDesc(name="isDefault", declaringClass=M.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=N2N.class,
+ isGetMethodReturn=true)
+ interface N2N extends M, L { void nonDefault(); }
+
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class,
+ isGetMethodReturn=true)
+ interface N2DN extends M, L { default void isDefault() {} void nonDefault(); }
+
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=L.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=M.class)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class)
+ interface O1 extends L, M, N2DN {}
+
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=L.class)
+ @MethodDesc(name="nonDefault", declaringClass=M.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class)
+ interface O2 extends M, N2DN, L {}
+
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=L.class)
+ @MethodDesc(name="nonDefault", declaringClass=M.class)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class,
+ isGetMethodReturn=true)
+ interface O3 extends N2DN, L, M {}
+
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=L.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=M.class)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class)
+ abstract class C1 implements L, M, N2DN {}
+
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=L.class)
+ @MethodDesc(name="nonDefault", declaringClass=M.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class)
+ abstract class C2 implements M, N2DN, L {}
+
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=L.class)
+ @MethodDesc(name="nonDefault", declaringClass=M.class)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class,
+ isGetMethodReturn=true)
+ abstract class C3 implements N2DN, L, M {}
+
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=C4.class,
+ kind=MethodKind.CONCRETE, isGetMethodReturn=true)
+ class C4 implements L, M, N2DN { public void nonDefault() {} }
+
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=C5.class,
+ kind=MethodKind.CONCRETE, isGetMethodReturn=true)
+ class C5 implements M, N2DN, L { public void nonDefault() {} }
+
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=C6.class,
+ kind=MethodKind.CONCRETE, isGetMethodReturn=true)
+ class C6 implements N2DN, L, M { public void nonDefault() {} }
+
+ // reabstraction
+
+ @MethodDesc(name="isDefault", declaringClass=R1.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=L.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=M.class)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class)
+ interface R1 extends L, M, N2DN { void isDefault(); }
+
+ @MethodDesc(name="isDefault", declaringClass=R2.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=L.class)
+ @MethodDesc(name="nonDefault", declaringClass=M.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class)
+ interface R2 extends M, N2DN, L { void isDefault(); }
+
+ @MethodDesc(name="isDefault", declaringClass=R3.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=L.class)
+ @MethodDesc(name="nonDefault", declaringClass=M.class)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class,
+ isGetMethodReturn=true)
+ interface R3 extends N2DN, L, M { void isDefault(); }
+
+ // this one is strange but logical, getMethod finds N2DN first, which is
+ // default but not the most specific
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="isDefault", declaringClass=R1.class)
+ @MethodDesc(name="nonDefault", declaringClass=L.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=M.class)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class)
+ interface R4 extends L, M, N2DN, R1 {}
+
+ // this one is strange but logical, getMethod finds N2DN first, which is
+ // default but not the most specific
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="isDefault", declaringClass=R2.class)
+ @MethodDesc(name="nonDefault", declaringClass=L.class)
+ @MethodDesc(name="nonDefault", declaringClass=M.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class)
+ interface R5 extends M, N2DN, R2, L {}
+
+ // this one is strange but logical, getMethod finds N2DN first, which is
+ // default but not the most specific
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="isDefault", declaringClass=R3.class)
+ @MethodDesc(name="nonDefault", declaringClass=L.class)
+ @MethodDesc(name="nonDefault", declaringClass=M.class)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class,
+ isGetMethodReturn=true)
+ interface R6 extends N2DN, R3, L, M {}
+
+ // the following three finds the "right" one
+ @MethodDesc(name="isDefault", declaringClass=R1.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT)
+ @MethodDesc(name="nonDefault", declaringClass=L.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=M.class)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class)
+ interface R7 extends L, M, R1, N2DN {}
+
+ @MethodDesc(name="isDefault", declaringClass=R2.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT)
+ @MethodDesc(name="nonDefault", declaringClass=L.class)
+ @MethodDesc(name="nonDefault", declaringClass=M.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class)
+ interface R8 extends M, R2, N2DN, L {}
+
+ @MethodDesc(name="isDefault", declaringClass=R3.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="isDefault", declaringClass=N2DN.class,
+ kind=MethodKind.DEFAULT)
+ @MethodDesc(name="nonDefault", declaringClass=L.class)
+ @MethodDesc(name="nonDefault", declaringClass=M.class)
+ @MethodDesc(name="nonDefault", declaringClass=N2DN.class,
+ isGetMethodReturn=true)
+ interface R9 extends R3, N2DN, L, M {}
+
+ // More reabstraction
+ interface Z1 { void z(); }
+ interface Z2 extends Z1 { default void z() {} }
+
+ @MethodDesc(name="z", declaringClass=Z2.class,
+ isGetMethodReturn=true, kind=MethodKind.DEFAULT)
+ interface Z31 extends Z1, Z2 {}
+
+ @MethodDesc(name="z", declaringClass=Z2.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ interface Z32 extends Z2, Z1 {}
+
+ interface Z3 extends Z2, Z1 { void z(); }
+
+ @MethodDesc(name="z", declaringClass=Z2.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="z", declaringClass=Z3.class)
+ interface Z41 extends Z1, Z2, Z3 { }
+
+ @MethodDesc(name="z", declaringClass=Z2.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="z", declaringClass=Z3.class)
+ interface Z42 extends Z2, Z3, Z1 { }
+
+ @MethodDesc(name="z", declaringClass=Z3.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="z", declaringClass=Z2.class,
+ kind=MethodKind.DEFAULT)
+ interface Z43 extends Z3, Z1, Z2 { }
+
+ @MethodDesc(name="z", declaringClass=Z2.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="z", declaringClass=Z3.class)
+ abstract class ZC41 implements Z1, Z2, Z3 { }
+
+ @MethodDesc(name="z", declaringClass=Z2.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="z", declaringClass=Z3.class)
+ abstract class ZC42 implements Z2, Z3, Z1 { }
+
+ @MethodDesc(name="z", declaringClass=Z3.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="z", declaringClass=Z2.class,
+ kind=MethodKind.DEFAULT)
+ abstract class ZC43 implements Z3, Z1, Z2 { }
+
+ // More reabstraction + concretization
+ interface X1 { default void x() {} }
+ interface X2 extends X1 { void x(); }
+
+ @MethodDesc(name="x", declaringClass=X1.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ @MethodDesc(name="x", declaringClass=X2.class)
+ interface X31 extends X1, X2 {}
+
+ @MethodDesc(name="x", declaringClass=X2.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="x", declaringClass=X1.class,
+ kind=MethodKind.DEFAULT)
+ interface X32 extends X2, X1 {}
+
+ @MethodDesc(name="x", declaringClass=X3.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ interface X3 extends X2, X1 { default void x() {} }
+
+ // order shouldn't matter here
+ @MethodDesc(name="x", declaringClass=X3.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ interface X41 extends X1, X2, X3 { }
+
+ @MethodDesc(name="x", declaringClass=X3.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ interface X42 extends X2, X3, X1 { }
+
+ @MethodDesc(name="x", declaringClass=X3.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ interface X43 extends X3, X1, X2 { }
+
+ // order shouldn't matter here
+ @MethodDesc(name="x", declaringClass=X3.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ abstract class XC41 implements X1, X2, X3 { }
+
+ @MethodDesc(name="x", declaringClass=X3.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ abstract class XC42 implements X2, X3, X1 { }
+
+ @MethodDesc(name="x", declaringClass=X3.class,
+ kind=MethodKind.DEFAULT, isGetMethodReturn=true)
+ abstract class XC43 implements X3, X1, X2 { }
+
+ interface K extends I, J { void nonDefault(); }
+
+ @MethodDesc(name="nonDefault", declaringClass=I.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=J.class)
+ @MethodDesc(name="nonDefault", declaringClass=K.class)
+ abstract class ZZ1 implements I, J, K {}
+
+ @MethodDesc(name="nonDefault", declaringClass=I.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=J.class)
+ @MethodDesc(name="nonDefault", declaringClass=K.class)
+ abstract class ZZ2 extends ZZ1 implements K, I, J {}
+
+ @MethodDesc(name="nonDefault", declaringClass=I.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="nonDefault", declaringClass=J.class)
+ @MethodDesc(name="nonDefault", declaringClass=K.class)
+ abstract class ZZ3 extends ZZ2 implements J, K, I {}
+
+ // bridges
+ interface B1A { Object m(); }
+ interface B1B extends B1A { Map m(); }
+
+ @MethodDesc(name="m", declaringClass=B1C.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="m", declaringClass=B1C.class,
+ kind=MethodKind.DEFAULT)
+ @MethodDesc(name="m", declaringClass=B1C.class,
+ kind=MethodKind.DEFAULT)
+ interface B1C extends B1B { HashMap m(); }
+
+ @MethodDesc(name="m", declaringClass=B2.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="m", declaringClass=B2.class,
+ kind=MethodKind.DEFAULT)
+ @MethodDesc(name="m", declaringClass=B2.class,
+ kind=MethodKind.DEFAULT)
+ interface B2 extends B1C { HashMap m(); }
+
+ @MethodDesc(name="m", declaringClass=B2.class, //HahsMap
+ isGetMethodReturn=true)
+ @MethodDesc(name="m", declaringClass=B2.class, //Map
+ kind=MethodKind.DEFAULT)
+ @MethodDesc(name="m", declaringClass=B2.class, //Object
+ kind=MethodKind.DEFAULT)
+ interface B3A extends B2, B1A {}
+
+ // this one is funny since HashMap isn't a bridge thus not a default
+ @MethodDesc(name="m", declaringClass=B2.class, //HashMap
+ isGetMethodReturn=true)
+ @MethodDesc(name="m", declaringClass=B2.class, //Map
+ kind=MethodKind.DEFAULT)
+ @MethodDesc(name="m", declaringClass=B2.class, //Object
+ kind=MethodKind.DEFAULT)
+ @MethodDesc(name="m", declaringClass=B1C.class) //HashMap
+ interface B3B extends B2, B1C {}
+
+ // same name different params type
+ interface A1 { void m(); void m(int i); void m(int i, int j); }
+ interface A2A extends A1 { void m(); void m(int i); void m(int i, int j); }
+ interface A2B extends A1 { void m(); void m(int i); default void m(int i, int j) {} }
+
+ @MethodDesc(name="m", declaringClass=A1.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="m", declaringClass=A1.class)
+ @MethodDesc(name="m", declaringClass=A1.class)
+ @MethodDesc(name="m", declaringClass=A2A.class)
+ @MethodDesc(name="m", declaringClass=A2A.class)
+ @MethodDesc(name="m", declaringClass=A2A.class)
+ interface A3A extends A1, A2A {}
+
+ @MethodDesc(name="m", declaringClass=A1.class,
+ isGetMethodReturn=true)
+ @MethodDesc(name="m", declaringClass=A1.class)
+ @MethodDesc(name="m", declaringClass=A2B.class)
+ @MethodDesc(name="m", declaringClass=A2B.class)
+ @MethodDesc(name="m", declaringClass=A2B.class,
+ kind=MethodKind.DEFAULT)
+ interface A3B extends A1, A2B {}
+
+ @DataProvider
+ public Object[][] getCases() { return CASES; }
+ public static final Class<?>[][] CASES = {
+ { K1.class },
+ { K1M.class },
+ { K2.class },
+ { K2O.class },
+ { K2M.class },
+
+ { N1.class },
+ { N1D.class },
+ { N1N.class },
+ { N1DN.class },
+
+ { N2.class },
+ { N22.class },
+ { N2D.class },
+ { N2N.class },
+ { N2DN.class },
+
+ { P1.class },
+ { P2.class },
+ { P3.class },
+ { P4.class },
+ { P5.class },
+
+ { O1.class },
+ { O2.class },
+ { O3.class },
+
+ { C1.class },
+ { C2.class },
+ { C3.class },
+
+ { C4.class },
+ { C5.class },
+ { C6.class },
+
+ { R1.class },
+ { R2.class },
+ { R3.class },
+
+ { R4.class },
+ { R5.class },
+ { R6.class },
+
+ { R7.class },
+ { R8.class },
+ { R9.class },
+
+ { Z31.class },
+ { Z32.class },
+
+ { Z41.class },
+ { Z42.class },
+ { Z43.class },
+
+ { ZC41.class },
+ { ZC42.class },
+ { ZC43.class },
+
+ { ZZ1.class },
+ { ZZ2.class },
+ { ZZ3.class },
+
+ { X3.class },
+ { X31.class },
+ { X32.class },
+
+ { X41.class },
+ { X42.class },
+ { X43.class },
+
+ { XC41.class },
+ { XC42.class },
+ { XC43.class },
+
+ { B1C.class },
+ { B2.class },
+ { B3A.class },
+ { B3B.class },
+
+ { A3A.class },
+ { A3B.class },
+ };
+}
--- a/jdk/test/java/time/tck/java/time/format/TCKDateTimeParseResolver.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/java/time/tck/java/time/format/TCKDateTimeParseResolver.java Wed Jun 18 13:14:15 2014 -0700
@@ -76,6 +76,7 @@
import static java.time.temporal.ChronoField.ERA;
import static java.time.temporal.ChronoField.HOUR_OF_AMPM;
import static java.time.temporal.ChronoField.HOUR_OF_DAY;
+import static java.time.temporal.ChronoField.INSTANT_SECONDS;
import static java.time.temporal.ChronoField.MICRO_OF_DAY;
import static java.time.temporal.ChronoField.MICRO_OF_SECOND;
import static java.time.temporal.ChronoField.MILLI_OF_DAY;
@@ -93,11 +94,13 @@
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.fail;
+import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Period;
import java.time.ZoneId;
+import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.chrono.ChronoLocalDate;
import java.time.chrono.ChronoLocalDateTime;
@@ -1159,4 +1162,102 @@
}
};
+ //-------------------------------------------------------------------------
+ // SPEC: ChronoField.INSTANT_SECONDS
+ @Test
+ public void test_parse_fromField_InstantSeconds() {
+ DateTimeFormatter fmt = new DateTimeFormatterBuilder()
+ .appendValue(INSTANT_SECONDS).toFormatter();
+ TemporalAccessor acc = fmt.parse("86402");
+ Instant expected = Instant.ofEpochSecond(86402);
+ assertEquals(acc.isSupported(INSTANT_SECONDS), true);
+ assertEquals(acc.isSupported(NANO_OF_SECOND), true);
+ assertEquals(acc.isSupported(MICRO_OF_SECOND), true);
+ assertEquals(acc.isSupported(MILLI_OF_SECOND), true);
+ assertEquals(acc.getLong(INSTANT_SECONDS), 86402L);
+ assertEquals(acc.getLong(NANO_OF_SECOND), 0L);
+ assertEquals(acc.getLong(MICRO_OF_SECOND), 0L);
+ assertEquals(acc.getLong(MILLI_OF_SECOND), 0L);
+ assertEquals(Instant.from(acc), expected);
+ }
+
+ @Test
+ public void test_parse_fromField_InstantSeconds_NanoOfSecond() {
+ DateTimeFormatter fmt = new DateTimeFormatterBuilder()
+ .appendValue(INSTANT_SECONDS).appendLiteral('.').appendValue(NANO_OF_SECOND).toFormatter();
+ TemporalAccessor acc = fmt.parse("86402.123456789");
+ Instant expected = Instant.ofEpochSecond(86402, 123456789);
+ assertEquals(acc.isSupported(INSTANT_SECONDS), true);
+ assertEquals(acc.isSupported(NANO_OF_SECOND), true);
+ assertEquals(acc.isSupported(MICRO_OF_SECOND), true);
+ assertEquals(acc.isSupported(MILLI_OF_SECOND), true);
+ assertEquals(acc.getLong(INSTANT_SECONDS), 86402L);
+ assertEquals(acc.getLong(NANO_OF_SECOND), 123456789L);
+ assertEquals(acc.getLong(MICRO_OF_SECOND), 123456L);
+ assertEquals(acc.getLong(MILLI_OF_SECOND), 123L);
+ assertEquals(Instant.from(acc), expected);
+ }
+
+ // SPEC: ChronoField.SECOND_OF_DAY
+ @Test
+ public void test_parse_fromField_SecondOfDay() {
+ DateTimeFormatter fmt = new DateTimeFormatterBuilder()
+ .appendValue(SECOND_OF_DAY).toFormatter();
+ TemporalAccessor acc = fmt.parse("864");
+ assertEquals(acc.isSupported(SECOND_OF_DAY), true);
+ assertEquals(acc.isSupported(NANO_OF_SECOND), true);
+ assertEquals(acc.isSupported(MICRO_OF_SECOND), true);
+ assertEquals(acc.isSupported(MILLI_OF_SECOND), true);
+ assertEquals(acc.getLong(SECOND_OF_DAY), 864L);
+ assertEquals(acc.getLong(NANO_OF_SECOND), 0L);
+ assertEquals(acc.getLong(MICRO_OF_SECOND), 0L);
+ assertEquals(acc.getLong(MILLI_OF_SECOND), 0L);
+ }
+
+ @Test
+ public void test_parse_fromField_SecondOfDay_NanoOfSecond() {
+ DateTimeFormatter fmt = new DateTimeFormatterBuilder()
+ .appendValue(SECOND_OF_DAY).appendLiteral('.').appendValue(NANO_OF_SECOND).toFormatter();
+ TemporalAccessor acc = fmt.parse("864.123456789");
+ assertEquals(acc.isSupported(SECOND_OF_DAY), true);
+ assertEquals(acc.isSupported(NANO_OF_SECOND), true);
+ assertEquals(acc.isSupported(MICRO_OF_SECOND), true);
+ assertEquals(acc.isSupported(MILLI_OF_SECOND), true);
+ assertEquals(acc.getLong(SECOND_OF_DAY), 864L);
+ assertEquals(acc.getLong(NANO_OF_SECOND), 123456789L);
+ assertEquals(acc.getLong(MICRO_OF_SECOND), 123456L);
+ assertEquals(acc.getLong(MILLI_OF_SECOND), 123L);
+ }
+
+ // SPEC: ChronoField.SECOND_OF_MINUTE
+ @Test
+ public void test_parse_fromField_SecondOfMinute() {
+ DateTimeFormatter fmt = new DateTimeFormatterBuilder()
+ .appendValue(SECOND_OF_MINUTE).toFormatter();
+ TemporalAccessor acc = fmt.parse("32");
+ assertEquals(acc.isSupported(SECOND_OF_MINUTE), true);
+ assertEquals(acc.isSupported(NANO_OF_SECOND), true);
+ assertEquals(acc.isSupported(MICRO_OF_SECOND), true);
+ assertEquals(acc.isSupported(MILLI_OF_SECOND), true);
+ assertEquals(acc.getLong(SECOND_OF_MINUTE), 32L);
+ assertEquals(acc.getLong(NANO_OF_SECOND), 0L);
+ assertEquals(acc.getLong(MICRO_OF_SECOND), 0L);
+ assertEquals(acc.getLong(MILLI_OF_SECOND), 0L);
+ }
+
+ @Test
+ public void test_parse_fromField_SecondOfMinute_NanoOfSecond() {
+ DateTimeFormatter fmt = new DateTimeFormatterBuilder()
+ .appendValue(SECOND_OF_MINUTE).appendLiteral('.').appendValue(NANO_OF_SECOND).toFormatter();
+ TemporalAccessor acc = fmt.parse("32.123456789");
+ assertEquals(acc.isSupported(SECOND_OF_MINUTE), true);
+ assertEquals(acc.isSupported(NANO_OF_SECOND), true);
+ assertEquals(acc.isSupported(MICRO_OF_SECOND), true);
+ assertEquals(acc.isSupported(MILLI_OF_SECOND), true);
+ assertEquals(acc.getLong(SECOND_OF_MINUTE), 32L);
+ assertEquals(acc.getLong(NANO_OF_SECOND), 123456789L);
+ assertEquals(acc.getLong(MICRO_OF_SECOND), 123456L);
+ assertEquals(acc.getLong(MILLI_OF_SECOND), 123L);
+ }
+
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/time/test/java/time/format/TestDateTimeParsing.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+/*
+ * This file is available under and governed by the GNU General Public
+ * License version 2 only, as published by the Free Software Foundation.
+ * However, the following notice accompanied the original version of this
+ * file:
+ *
+ * Copyright (c) 2014, Stephen Colebourne & Michael Nascimento Santos
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * * Neither the name of JSR-310 nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package test.java.time.format;
+
+import static java.time.temporal.ChronoField.EPOCH_DAY;
+import static java.time.temporal.ChronoField.INSTANT_SECONDS;
+import static java.time.temporal.ChronoField.MICRO_OF_SECOND;
+import static java.time.temporal.ChronoField.MILLI_OF_SECOND;
+import static java.time.temporal.ChronoField.NANO_OF_SECOND;
+import static java.time.temporal.ChronoField.OFFSET_SECONDS;
+import static java.time.temporal.ChronoField.SECOND_OF_DAY;
+import static org.testng.Assert.assertEquals;
+
+import java.time.DateTimeException;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.temporal.TemporalAccessor;
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+/**
+ * Test parsing of edge cases.
+ */
+@Test
+public class TestDateTimeParsing {
+
+ private static final ZoneId PARIS = ZoneId.of("Europe/Paris");
+ private static final ZoneOffset OFFSET_0230 = ZoneOffset.ofHoursMinutes(2, 30);
+
+ private static final DateTimeFormatter LOCALFIELDS = new DateTimeFormatterBuilder()
+ .appendPattern("yyyy-MM-dd HH:mm:ss").toFormatter();
+ private static final DateTimeFormatter LOCALFIELDS_ZONEID = new DateTimeFormatterBuilder()
+ .appendPattern("yyyy-MM-dd HH:mm:ss ").appendZoneId().toFormatter();
+ private static final DateTimeFormatter LOCALFIELDS_OFFSETID = new DateTimeFormatterBuilder()
+ .appendPattern("yyyy-MM-dd HH:mm:ss ").appendOffsetId().toFormatter();
+ private static final DateTimeFormatter LOCALFIELDS_WITH_PARIS = LOCALFIELDS.withZone(PARIS);
+ private static final DateTimeFormatter LOCALFIELDS_WITH_0230 = LOCALFIELDS.withZone(OFFSET_0230);
+ private static final DateTimeFormatter INSTANT = new DateTimeFormatterBuilder()
+ .appendInstant().toFormatter();
+ private static final DateTimeFormatter INSTANT_WITH_PARIS = INSTANT.withZone(PARIS);
+ private static final DateTimeFormatter INSTANT_WITH_0230 = INSTANT.withZone(OFFSET_0230);
+ private static final DateTimeFormatter INSTANT_OFFSETID = new DateTimeFormatterBuilder()
+ .appendInstant().appendLiteral(' ').appendOffsetId().toFormatter();
+ private static final DateTimeFormatter INSTANT_OFFSETSECONDS = new DateTimeFormatterBuilder()
+ .appendInstant().appendLiteral(' ').appendValue(OFFSET_SECONDS).toFormatter();
+ private static final DateTimeFormatter INSTANTSECONDS = new DateTimeFormatterBuilder()
+ .appendValue(INSTANT_SECONDS).toFormatter();
+ private static final DateTimeFormatter INSTANTSECONDS_WITH_PARIS = INSTANTSECONDS.withZone(PARIS);
+ private static final DateTimeFormatter INSTANTSECONDS_NOS = new DateTimeFormatterBuilder()
+ .appendValue(INSTANT_SECONDS).appendLiteral('.').appendValue(NANO_OF_SECOND).toFormatter();
+ private static final DateTimeFormatter INSTANTSECONDS_NOS_WITH_PARIS = INSTANTSECONDS_NOS.withZone(PARIS);
+ private static final DateTimeFormatter INSTANTSECONDS_OFFSETSECONDS = new DateTimeFormatterBuilder()
+ .appendValue(INSTANT_SECONDS).appendLiteral(' ').appendValue(OFFSET_SECONDS).toFormatter();
+
+ @DataProvider(name = "instantZones")
+ Object[][] data_instantZones() {
+ return new Object[][] {
+ {LOCALFIELDS_ZONEID, "2014-06-30 01:02:03 Europe/Paris", ZonedDateTime.of(2014, 6, 30, 1, 2, 3, 0, PARIS)},
+ {LOCALFIELDS_ZONEID, "2014-06-30 01:02:03 +02:30", ZonedDateTime.of(2014, 6, 30, 1, 2, 3, 0, OFFSET_0230)},
+ {LOCALFIELDS_OFFSETID, "2014-06-30 01:02:03 +02:30", ZonedDateTime.of(2014, 6, 30, 1, 2, 3, 0, OFFSET_0230)},
+ {LOCALFIELDS_WITH_PARIS, "2014-06-30 01:02:03", ZonedDateTime.of(2014, 6, 30, 1, 2, 3, 0, PARIS)},
+ {LOCALFIELDS_WITH_0230, "2014-06-30 01:02:03", ZonedDateTime.of(2014, 6, 30, 1, 2, 3, 0, OFFSET_0230)},
+ {INSTANT_WITH_PARIS, "2014-06-30T01:02:03Z", ZonedDateTime.of(2014, 6, 30, 1, 2, 3, 0, ZoneOffset.UTC).withZoneSameInstant(PARIS)},
+ {INSTANT_WITH_0230, "2014-06-30T01:02:03Z", ZonedDateTime.of(2014, 6, 30, 1, 2, 3, 0, ZoneOffset.UTC).withZoneSameInstant(OFFSET_0230)},
+ {INSTANT_OFFSETID, "2014-06-30T01:02:03Z +02:30", ZonedDateTime.of(2014, 6, 30, 1, 2, 3, 0, ZoneOffset.UTC).withZoneSameInstant(OFFSET_0230)},
+ {INSTANT_OFFSETSECONDS, "2014-06-30T01:02:03Z 9000", ZonedDateTime.of(2014, 6, 30, 1, 2, 3, 0, ZoneOffset.UTC).withZoneSameInstant(OFFSET_0230)},
+ {INSTANTSECONDS_WITH_PARIS, "86402", Instant.ofEpochSecond(86402).atZone(PARIS)},
+ {INSTANTSECONDS_NOS_WITH_PARIS, "86402.123456789", Instant.ofEpochSecond(86402, 123456789).atZone(PARIS)},
+ {INSTANTSECONDS_OFFSETSECONDS, "86402 9000", Instant.ofEpochSecond(86402).atZone(OFFSET_0230)},
+ };
+ }
+
+ @Test(dataProvider = "instantZones")
+ public void test_parse_instantZones_ZDT(DateTimeFormatter formatter, String text, ZonedDateTime expected) {
+ TemporalAccessor actual = formatter.parse(text);
+ assertEquals(ZonedDateTime.from(actual), expected);
+ }
+
+ @Test(dataProvider = "instantZones")
+ public void test_parse_instantZones_LDT(DateTimeFormatter formatter, String text, ZonedDateTime expected) {
+ TemporalAccessor actual = formatter.parse(text);
+ assertEquals(LocalDateTime.from(actual), expected.toLocalDateTime());
+ }
+
+ @Test(dataProvider = "instantZones")
+ public void test_parse_instantZones_Instant(DateTimeFormatter formatter, String text, ZonedDateTime expected) {
+ TemporalAccessor actual = formatter.parse(text);
+ assertEquals(Instant.from(actual), expected.toInstant());
+ }
+
+ @Test(dataProvider = "instantZones")
+ public void test_parse_instantZones_supported(DateTimeFormatter formatter, String text, ZonedDateTime expected) {
+ TemporalAccessor actual = formatter.parse(text);
+ assertEquals(actual.isSupported(INSTANT_SECONDS), true);
+ assertEquals(actual.isSupported(EPOCH_DAY), true);
+ assertEquals(actual.isSupported(SECOND_OF_DAY), true);
+ assertEquals(actual.isSupported(NANO_OF_SECOND), true);
+ assertEquals(actual.isSupported(MICRO_OF_SECOND), true);
+ assertEquals(actual.isSupported(MILLI_OF_SECOND), true);
+ }
+
+ //-----------------------------------------------------------------------
+ @DataProvider(name = "instantNoZone")
+ Object[][] data_instantNoZone() {
+ return new Object[][] {
+ {INSTANT, "2014-06-30T01:02:03Z", ZonedDateTime.of(2014, 6, 30, 1, 2, 3, 0, ZoneOffset.UTC).toInstant()},
+ {INSTANTSECONDS, "86402", Instant.ofEpochSecond(86402)},
+ {INSTANTSECONDS_NOS, "86402.123456789", Instant.ofEpochSecond(86402, 123456789)},
+ };
+ }
+
+ @Test(dataProvider = "instantNoZone", expectedExceptions = DateTimeException.class)
+ public void test_parse_instantNoZone_ZDT(DateTimeFormatter formatter, String text, Instant expected) {
+ TemporalAccessor actual = formatter.parse(text);
+ ZonedDateTime.from(actual);
+ }
+
+ @Test(dataProvider = "instantNoZone", expectedExceptions = DateTimeException.class)
+ public void test_parse_instantNoZone_LDT(DateTimeFormatter formatter, String text, Instant expected) {
+ TemporalAccessor actual = formatter.parse(text);
+ LocalDateTime.from(actual);
+ }
+
+ @Test(dataProvider = "instantNoZone")
+ public void test_parse_instantNoZone_Instant(DateTimeFormatter formatter, String text, Instant expected) {
+ TemporalAccessor actual = formatter.parse(text);
+ assertEquals(Instant.from(actual), expected);
+ }
+
+ @Test(dataProvider = "instantNoZone")
+ public void test_parse_instantNoZone_supported(DateTimeFormatter formatter, String text, Instant expected) {
+ TemporalAccessor actual = formatter.parse(text);
+ assertEquals(actual.isSupported(INSTANT_SECONDS), true);
+ assertEquals(actual.isSupported(EPOCH_DAY), false);
+ assertEquals(actual.isSupported(SECOND_OF_DAY), false);
+ assertEquals(actual.isSupported(NANO_OF_SECOND), true);
+ assertEquals(actual.isSupported(MICRO_OF_SECOND), true);
+ assertEquals(actual.isSupported(MILLI_OF_SECOND), true);
+ }
+
+}
--- a/jdk/test/java/util/Timer/Args.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/java/util/Timer/Args.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,96 +29,137 @@
import java.util.*;
import java.util.concurrent.*;
+import static java.util.concurrent.TimeUnit.*;
public class Args {
+ static final long DELAY_MS = 30 * 1000L;
+
void schedule(final Timer t, final TimerTask task, final Date d) {
t.schedule(task, d);
- THROWS(IllegalStateException.class,
- new F(){void f(){ t.schedule(task, d); }});
+ assertThrows
+ (IllegalStateException.class,
+ () -> t.schedule(task, d));
}
- void schedule(final Timer t, final TimerTask task, final Date d, final long period) {
+ void schedule(final Timer t, final TimerTask task, final Date d, final
+long period) {
t.schedule(task, d, period);
- THROWS(IllegalStateException.class,
- new F(){void f(){ t.schedule(task, d, period); }});
+ assertThrows
+ (IllegalStateException.class,
+ () -> t.schedule(task, d, period));
}
- void scheduleAtFixedRate(final Timer t, final TimerTask task, final Date d, final long period) {
+ void scheduleAtFixedRate(final Timer t, final TimerTask task, final
+Date d, final long period) {
t.scheduleAtFixedRate(task, d, period);
- THROWS(IllegalStateException.class,
- new F(){void f(){ t.scheduleAtFixedRate(task, d, period); }});
+ assertThrows
+ (IllegalStateException.class,
+ () -> t.scheduleAtFixedRate(task, d, period));
}
TimerTask counter(final CountDownLatch latch) {
return new TimerTask() { public void run() {
- check(latch.getCount() > 0);
+ if (latch.getCount() == 0)
+ fail(String.format("Latch counted down too many times: " +
+latch));
latch.countDown();
}};
}
+ TimerTask nop() {
+ return new TimerTask() { public void run() { }};
+ }
+
void test(String[] args) throws Throwable {
final Timer t = new Timer();
- final TimerTask x = new TimerTask() { public void run() {}};
- THROWS(IllegalArgumentException.class,
- new F(){void f(){ t.schedule(x, -42); }},
- new F(){void f(){ t.schedule(x, new Date(-42)); }},
+ try {
+ test(t);
+ } finally {
+ // Ensure this test doesn't interfere with subsequent
+ // tests even in case of failure.
+ t.cancel();
+ }
+
+ // Attempts to schedule tasks on a cancelled Timer result in ISE.
- new F(){void f(){ t.schedule(x, Long.MAX_VALUE); }},
- new F(){void f(){ t.schedule(x, -42, 42); }},
- new F(){void f(){ t.schedule(x, new Date(-42), 42); }},
- new F(){void f(){ t.schedule(x, Long.MAX_VALUE, 42); }},
- new F(){void f(){ t.schedule(x, 42, 0); }},
- new F(){void f(){ t.schedule(x, new Date(42), 0); }},
- new F(){void f(){ t.schedule(x, 42, -42); }},
- new F(){void f(){ t.schedule(x, new Date(42), -42); }},
+ final Date past = new Date(System.currentTimeMillis() - DELAY_MS);
+ final Date future = new Date(System.currentTimeMillis() + DELAY_MS);
+ assertThrows
+ (IllegalStateException.class,
+ () -> t.schedule(nop(), 42),
+ () -> t.schedule(nop(), 42),
+ () -> t.schedule(nop(), past),
+ () -> t.schedule(nop(), 42, 42),
+ () -> t.schedule(nop(), past, 42),
+ () -> t.scheduleAtFixedRate(nop(), 42, 42),
+ () -> t.scheduleAtFixedRate(nop(), past, 42),
+ () -> t.scheduleAtFixedRate(nop(), future, 42));
+ }
+
+ void test(Timer t) throws Throwable {
+ final TimerTask x = new TimerTask() { public void run() {}};
+ assertThrows
+ (IllegalArgumentException.class,
+ () -> t.schedule(x, -42),
+ () -> t.schedule(x, new Date(-42)),
- new F(){void f(){ t.scheduleAtFixedRate(x, -42, 42); }},
- new F(){void f(){ t.scheduleAtFixedRate(x, new Date(-42), 42); }},
- new F(){void f(){ t.scheduleAtFixedRate(x, Long.MAX_VALUE, 42); }},
- new F(){void f(){ t.scheduleAtFixedRate(x, 42, 0); }},
- new F(){void f(){ t.scheduleAtFixedRate(x, new Date(42), 0); }},
- new F(){void f(){ t.scheduleAtFixedRate(x, 42, -42); }},
- new F(){void f(){ t.scheduleAtFixedRate(x, new Date(42), -42); }}
- );
+ () -> t.schedule(x, Long.MAX_VALUE),
+ () -> t.schedule(x, -42, 42),
+ () -> t.schedule(x, new Date(-42), 42),
+ () -> t.schedule(x, Long.MAX_VALUE, 42),
+ () -> t.schedule(x, 42, 0),
+ () -> t.schedule(x, new Date(42), 0),
+ () -> t.schedule(x, 42, -42),
+ () -> t.schedule(x, new Date(42), -42),
- THROWS(NullPointerException.class,
- new F(){void f(){ t.schedule(null, 42); }},
- new F(){void f(){ t.schedule(x, (Date)null); }},
+ () -> t.scheduleAtFixedRate(x, -42, 42),
+ () -> t.scheduleAtFixedRate(x, new Date(-42), 42),
+ () -> t.scheduleAtFixedRate(x, Long.MAX_VALUE, 42),
+ () -> t.scheduleAtFixedRate(x, 42, 0),
+ () -> t.scheduleAtFixedRate(x, new Date(42), 0),
+ () -> t.scheduleAtFixedRate(x, 42, -42),
+ () -> t.scheduleAtFixedRate(x, new Date(42), -42));
+
+ assertThrows
+ (NullPointerException.class,
+ () -> t.schedule(null, 42),
+ () -> t.schedule(x, (Date)null),
- new F(){void f(){ t.schedule(null, 42, 42); }},
- new F(){void f(){ t.schedule(x, (Date)null, 42); }},
+ () -> t.schedule(null, 42, 42),
+ () -> t.schedule(x, (Date)null, 42),
+
+ () -> t.scheduleAtFixedRate(null, 42, 42),
+ () -> t.scheduleAtFixedRate(x, (Date)null, 42));
- new F(){void f(){ t.scheduleAtFixedRate(null, 42, 42); }},
- new F(){void f(){ t.scheduleAtFixedRate(x, (Date)null, 42); }}
- );
+ // Create local classes for clearer diagnostics in case of failure
+ class OneShotLatch extends CountDownLatch {
+ OneShotLatch() { super(1); }
+ }
+ class FixedDelayLatch extends CountDownLatch {
+ FixedDelayLatch() { super(1); }
+ }
+ class FixedRateLatch extends CountDownLatch {
+ FixedRateLatch() { super(11); }
+ }
+ final CountDownLatch y1 = new OneShotLatch();
+ final CountDownLatch y2 = new FixedDelayLatch();
+ final CountDownLatch y3 = new FixedRateLatch();
- final CountDownLatch y1 = new CountDownLatch(1);
- final CountDownLatch y2 = new CountDownLatch(1);
- final CountDownLatch y3 = new CountDownLatch(11);
final long start = System.currentTimeMillis();
- final Date past = new Date(start - 10500);
+ final Date past = new Date(start - (10 * DELAY_MS + DELAY_MS / 2));
schedule( t, counter(y1), past);
- schedule( t, counter(y2), past, 1000);
- scheduleAtFixedRate(t, counter(y3), past, 1000);
- y3.await();
- y1.await();
- y2.await();
+ schedule( t, counter(y2), past, DELAY_MS);
+ scheduleAtFixedRate(t, counter(y3), past, DELAY_MS);
+
+ check(y1.await(DELAY_MS / 4, MILLISECONDS));
+ check(y2.await(DELAY_MS / 4, MILLISECONDS));
+ check(y3.await(DELAY_MS / 4, MILLISECONDS));
final long elapsed = System.currentTimeMillis() - start;
- System.out.printf("elapsed=%d%n", elapsed);
- check(elapsed < 500);
-
- t.cancel();
-
- THROWS(IllegalStateException.class,
- new F(){void f(){ t.schedule(x, 42); }},
- new F(){void f(){ t.schedule(x, past); }},
- new F(){void f(){ t.schedule(x, 42, 42); }},
- new F(){void f(){ t.schedule(x, past, 42); }},
- new F(){void f(){ t.scheduleAtFixedRate(x, 42, 42); }},
- new F(){void f(){ t.scheduleAtFixedRate(x, past, 42); }});
-
+ if (elapsed >= DELAY_MS / 2)
+ fail(String.format("Test took too long: elapsed=%d%n",
+elapsed));
}
//--------------------- Infrastructure ---------------------------
@@ -137,11 +178,12 @@
try {test(args);} catch (Throwable t) {unexpected(t);}
System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
if (failed > 0) throw new AssertionError("Some tests failed");}
- abstract class F {abstract void f() throws Throwable;}
- void THROWS(Class<? extends Throwable> k, F... fs) {
+ interface F { void f() throws Throwable; }
+ void assertThrows(Class<? extends Throwable> k, F... fs) {
for (F f : fs)
try {f.f(); fail("Expected " + k.getName() + " not thrown");}
catch (Throwable t) {
if (k.isAssignableFrom(t.getClass())) pass();
else unexpected(t);}}
}
+
--- a/jdk/test/jdk/net/Sockets/Test.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/jdk/net/Sockets/Test.java Wed Jun 18 13:14:15 2014 -0700
@@ -30,8 +30,10 @@
*/
import java.net.*;
+import java.io.IOException;
import java.nio.channels.*;
import java.util.concurrent.*;
+import java.util.Set;
import jdk.net.*;
public class Test {
@@ -75,6 +77,13 @@
DatagramSocket dg = new DatagramSocket(0);
final int udp_port = dg.getLocalPort();
+ // If option not available, end test
+ Set<SocketOption<?>> options = dg.supportedOptions();
+ if (!options.contains(ExtendedSocketOptions.SO_FLOW_SLA)) {
+ System.out.println("SO_FLOW_SLA not supported");
+ return;
+ }
+
final Socket s = new Socket("127.0.0.1", tcp_port);
final SocketChannel sc = SocketChannel.open();
sc.connect (new InetSocketAddress("127.0.0.1", tcp_port));
@@ -125,6 +134,13 @@
if (success) {
throw new RuntimeException("Test failed");
}
- } catch (UnsupportedOperationException e) {}
+ } catch (UnsupportedOperationException e) {
+ System.out.println (e);
+ } catch (IOException e) {
+ // Probably a permission error, but we're not
+ // going to check unless a specific permission exception
+ // is defined.
+ System.out.println (e);
+ }
}
}
--- a/jdk/test/sun/management/jmxremote/bootstrap/JvmstatCountersTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/sun/management/jmxremote/bootstrap/JvmstatCountersTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -143,9 +143,12 @@
String vmid = name.substring(0, name.indexOf("@"));
System.out.println("vmid = " + vmid);
VirtualMachine vm = VirtualMachine.attach(vmid);
- String agent = vm.getSystemProperties().getProperty("java.home") +
- File.separator + "lib" + File.separator + "management-agent.jar";
- vm.loadAgent(agent, "com.sun.management.jmxremote.port=0,com.sun.management.jmxremote.authenticate=false,com.sun.management.jmxremote.ssl=false");
+ Properties p = new Properties();
+ p.put("com.sun.management.jmxremote.port", "0");
+ p.put("com.sun.management.jmxremote.authenticate", "false");
+ p.put("com.sun.management.jmxremote.ssl", "false");
+ vm.startManagementAgent(p);
+ vm.startLocalManagementAgent();
vm.detach();
String localAddress2 = ConnectorAddressLink.importFrom(0);
if (localAddress2 == null) {
--- a/jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,13 +22,8 @@
*/
import java.io.File;
-import java.io.IOException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
-import java.nio.file.FileSystem;
-import java.nio.file.FileSystems;
-import java.nio.file.Files;
-import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -47,19 +42,12 @@
*/
import jdk.testlibrary.ProcessTools;
-import jdk.testlibrary.Utils;
public class LocalManagementTest {
private static final String TEST_CLASSPATH = System.getProperty("test.class.path");
private static final String TEST_JDK = System.getProperty("test.jdk");
- private static int MAX_GET_FREE_PORT_TRIES = 10;
public static void main(String[] args) throws Exception {
- try {
- MAX_GET_FREE_PORT_TRIES = Integer.parseInt(System.getProperty("test.getfreeport.max.tries", "10"));
- } catch (NumberFormatException ex) {
- }
-
int failures = 0;
for(Method m : LocalManagementTest.class.getDeclaredMethods()) {
if (Modifier.isStatic(m.getModifiers()) &&
@@ -84,110 +72,27 @@
}
}
+ @SuppressWarnings("unused")
private static boolean test1() throws Exception {
return doTest("1", "-Dcom.sun.management.jmxremote");
}
- private static boolean test2() throws Exception {
- Path agentPath = findAgent();
- if (agentPath != null) {
- String agent = agentPath.toString();
- return doTest("2", "-javaagent:" + agent);
- } else {
- return false;
- }
- }
-
/**
* no args (blank) - manager should attach and start agent
*/
+ @SuppressWarnings("unused")
private static boolean test3() throws Exception {
return doTest("3", null);
}
/**
- * sanity check arguments to management-agent.jar
- */
- private static boolean test4() throws Exception {
- Path agentPath = findAgent();
- if (agentPath != null) {
-
- for (int i = 0; i < MAX_GET_FREE_PORT_TRIES; ++i) {
- ProcessBuilder builder = ProcessTools.createJavaProcessBuilder(
- "-javaagent:" + agentPath.toString() +
- "=com.sun.management.jmxremote.port=" + Utils.getFreePort() + "," +
- "com.sun.management.jmxremote.authenticate=false," +
- "com.sun.management.jmxremote.ssl=false",
- "-cp",
- TEST_CLASSPATH,
- "TestApplication",
- "-exit"
- );
-
- Process prc = null;
- final AtomicReference<Boolean> isBindExceptionThrown = new AtomicReference<>();
- isBindExceptionThrown.set(new Boolean(false));
- try {
- prc = ProcessTools.startProcess(
- "TestApplication",
- builder,
- (String line) -> {
- if (line.contains("Exception thrown by the agent : " +
- "java.rmi.server.ExportException: Port already in use")) {
- isBindExceptionThrown.set(new Boolean(true));
- }
- });
-
- prc.waitFor();
-
- if (prc.exitValue() == 0) {
- return true;
- }
-
- if (isBindExceptionThrown.get().booleanValue()) {
- System.out.println("'Port already in use' error detected. Try again");
- } else {
- return false;
- }
- } finally {
- if (prc != null) {
- prc.destroy();
- prc.waitFor();
- }
- }
- }
- }
- return false;
- }
-
- /**
* use DNS-only name service
*/
+ @SuppressWarnings("unused")
private static boolean test5() throws Exception {
return doTest("5", "-Dsun.net.spi.namservice.provider.1=\"dns,sun\"");
}
- private static Path findAgent() {
- FileSystem FS = FileSystems.getDefault();
- Path agentPath = FS.getPath(
- TEST_JDK, "jre", "lib", "management-agent.jar"
- );
- if (!isFileOk(agentPath)) {
- agentPath = FS.getPath(
- TEST_JDK, "lib", "management-agent.jar"
- );
- }
- if (!isFileOk(agentPath)) {
- System.err.println("Can not locate management-agent.jar");
- return null;
- }
- return agentPath;
- }
-
- private static boolean isFileOk(Path path) {
- return Files.isRegularFile(path) && Files.isReadable(path);
- }
-
private static boolean doTest(String testId, String arg) throws Exception {
List<String> args = new ArrayList<>();
args.add("-cp");
@@ -267,4 +172,4 @@
}
}
}
-}
\ No newline at end of file
+}
--- a/jdk/test/sun/management/jmxremote/bootstrap/TestManager.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/sun/management/jmxremote/bootstrap/TestManager.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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,7 +40,6 @@
import static java.lang.management.ManagementFactory.*;
import java.net.Socket;
import java.net.InetSocketAddress;
-import java.io.File;
import java.io.IOException;
// Sun specific
@@ -55,28 +54,8 @@
* Starts the management agent in the target VM
*/
private static void startManagementAgent(String pid) throws IOException {
- /*
- * JAR file normally in ${java.home}/jre/lib but may be in ${java.home}/lib
- * with development/non-images builds
- */
- String home = System.getProperty("java.home");
- String agent = home + File.separator + "jre" + File.separator + "lib"
- + File.separator + "management-agent.jar";
- File f = new File(agent);
- if (!f.exists()) {
- agent = home + File.separator + "lib" + File.separator +
- "management-agent.jar";
- f = new File(agent);
- if (!f.exists()) {
- throw new RuntimeException("management-agent.jar missing");
- }
- }
- agent = f.getCanonicalPath();
-
- System.out.println("Loading " + agent + " into target VM ...");
-
try {
- VirtualMachine.attach(pid).loadAgent(agent);
+ VirtualMachine.attach(pid).startLocalManagementAgent();
} catch (Exception x) {
throw new IOException(x.getMessage());
}
@@ -122,8 +101,7 @@
if (agentPropLocalConnectorAddress == null &&
jvmstatLocalConnectorAddress == null) {
- // No JMX Connector address so attach to VM, and load
- // management-agent.jar
+ // No JMX Connector address so attach to VM, and start local agent
startManagementAgent(pid);
agentPropLocalConnectorAddress = (String)
vm.getAgentProperties().get(LOCAL_CONNECTOR_ADDRESS_PROP);
--- a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -31,16 +31,13 @@
import java.rmi.registry.Registry;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import javax.management.*;
@@ -60,7 +57,6 @@
* JCMD achieves the desired results
*/
public class JMXStartStopTest {
- private static final String TEST_JDK = System.getProperty("test.jdk");
private static final String TEST_SRC = System.getProperty("test.src");
private static final boolean verbose = false;
@@ -117,8 +113,8 @@
QueryExp query)
throws Exception {
- Set names = server.queryNames(pattern,query);
- for (Iterator i=names.iterator(); i.hasNext(); ) {
+ Set<ObjectName> names = server.queryNames(pattern,query);
+ for (Iterator<ObjectName> i = names.iterator(); i.hasNext(); ) {
ObjectName name = (ObjectName)i.next();
MBeanInfo info = server.getMBeanInfo(name);
dbg_print("Got MBean: " + name);
@@ -128,7 +124,7 @@
continue;
for (MBeanAttributeInfo attr : attrs) {
if (attr.isReadable()) {
- Object o = server.getAttribute(name, attr.getName());
+ server.getAttribute(name, attr.getName());
}
}
}
@@ -149,9 +145,8 @@
}
JMXServiceURL url = new JMXServiceURL(jmxUrlStr);
- Map m = new HashMap();
- JMXConnector c = JMXConnectorFactory.connect(url,m);
+ JMXConnector c = JMXConnectorFactory.connect(url, null);
MBeanServerConnection conn = c.getMBeanServerConnection();
ObjectName pattern = new ObjectName("java.lang:type=Memory,*");
@@ -221,9 +216,8 @@
port);
JMXServiceURL url = new JMXServiceURL(jmxUrlStr);
- Map m = new HashMap();
- JMXConnector c = JMXConnectorFactory.connect(url,m);
+ JMXConnector c = JMXConnectorFactory.connect(url, null);
MBeanServerConnection conn = c.getMBeanServerConnection();
ObjectName pattern = new ObjectName("java.lang:type=Memory,*");
@@ -314,25 +308,6 @@
}
}
- /**
- * Retrieves the PID of the test application using JCMD
- * @return The PID of the test application
- * @throws InterruptedException
- * @throws IOException
- */
- private static String getPID() throws InterruptedException, IOException {
- final AtomicReference<String> pid = new AtomicReference<>();
- jcmd(
- null,
- line -> {
- if (line.endsWith("JMXStartStopDoSomething")) {
- pid.set(line.split(" ")[0]);
- }
- }
- );
- return pid.get();
- }
-
private static class Something {
private Process p;
private final ProcessBuilder pb;
@@ -473,7 +448,7 @@
private static final String CMD_START= "ManagementAgent.start";
private static final String CMD_START_LOCAL = "ManagementAgent.start_local";
- private static void test_01() throws Exception {
+ static void test_01() throws Exception {
// Run an app with JMX enabled stop it and
// restart on other port
@@ -499,7 +474,7 @@
}
}
- private static void test_02() throws Exception {
+ static void test_02() throws Exception {
// Run an app without JMX enabled
// start JMX by jcmd
@@ -520,7 +495,7 @@
}
}
- private static void test_03() throws Exception {
+ static void test_03() throws Exception {
// Run an app without JMX enabled
// start JMX by jcmd on one port than on other one
@@ -550,7 +525,7 @@
}
}
- private static void test_04() throws Exception {
+ static void test_04() throws Exception {
// Run an app without JMX enabled
// start JMX by jcmd on one port, specify rmi port explicitly
@@ -571,7 +546,7 @@
}
}
- private static void test_05() throws Exception {
+ static void test_05() throws Exception {
// Run an app without JMX enabled, it will enable local server
// but should leave remote server disabled
@@ -589,7 +564,7 @@
}
}
- private static void test_06() throws Exception {
+ static void test_06() throws Exception {
// Run an app without JMX enabled
// start JMX by jcmd on one port, specify rmi port explicitly
// attempt to start it again
@@ -636,38 +611,39 @@
jcmd(CMD_STOP);
jcmd(CMD_STOP);
- ServerSocket ss = new ServerSocket(0);
+ try (ServerSocket ss = new ServerSocket(0))
+ {
+ jcmd(
+ line -> {
+ if (line.contains("Port already in use: " + ss.getLocalPort())) {
+ checks[2] = true;
+ }
+ },
+ CMD_START,
+ "jmxremote.port=" + ss.getLocalPort(),
+ "jmxremote.rmi.port=" + pa.getPort2(),
+ "jmxremote.authenticate=false",
+ "jmxremote.ssl=false");
- jcmd(
- line -> {
- if (line.contains("Port already in use: " + ss.getLocalPort())) {
- checks[2] = true;
- }
- },
- CMD_START,
- "jmxremote.port=" + ss.getLocalPort(),
- "jmxremote.rmi.port=" + pa.getPort2(),
- "jmxremote.authenticate=false",
- "jmxremote.ssl=false");
-
- if (!checks[0]) {
- throw new Exception("Starting agent on port " + pa.getPort1() + " should " +
- "report an invalid agent state");
- }
- if (!checks[1]) {
- throw new Exception("Starting agent on poprt " + pa.getPort2() + " should " +
- "report an invalid agent state");
- }
- if (!checks[2]) {
- throw new Exception("Starting agent on port " + ss.getLocalPort() + " should " +
- "report port in use");
+ if (!checks[0]) {
+ throw new Exception("Starting agent on port " + pa.getPort1() + " should " +
+ "report an invalid agent state");
+ }
+ if (!checks[1]) {
+ throw new Exception("Starting agent on poprt " + pa.getPort2() + " should " +
+ "report an invalid agent state");
+ }
+ if (!checks[2]) {
+ throw new Exception("Starting agent on port " + ss.getLocalPort() + " should " +
+ "report port in use");
+ }
}
} finally {
s.stop();
}
}
- private static void test_07() throws Exception {
+ static void test_07() throws Exception {
// Run an app without JMX enabled, but with some properties set
// in command line.
// make sure these properties overridden corectly
@@ -694,7 +670,7 @@
}
}
- private static void test_08() throws Exception {
+ static void test_08() throws Exception {
// Run an app with JMX enabled and with some properties set
// in command line.
// stop JMX agent and then start it again with different property values
@@ -729,7 +705,7 @@
}
}
- private static void test_09() throws Exception {
+ static void test_09() throws Exception {
// Run an app with JMX enabled and with some properties set
// in command line.
// stop JMX agent and then start it again with different property values
@@ -766,7 +742,7 @@
}
}
- private static void test_10() throws Exception {
+ static void test_10() throws Exception {
// Run an app with JMX enabled and with some properties set
// in command line.
// stop JMX agent and then start it again with different property values
@@ -803,7 +779,7 @@
}
}
- private static void test_11() throws Exception {
+ static void test_11() throws Exception {
// Run an app with JMX enabled
// stop remote agent
// make sure local agent is not affected
@@ -825,7 +801,7 @@
}
}
- private static void test_12() throws Exception {
+ static void test_12() throws Exception {
// Run an app with JMX disabled
// start local agent only
@@ -845,28 +821,4 @@
}
}
- private static void test_13() throws Exception {
- // Run an app with -javaagent make sure it works as expected -
- // system properties are ignored
-
- System.out.println("**** Test thirteen ****");
- PortAllocator pa = new PortAllocator();
-
- String agent = TEST_JDK + "/jre/lib/management-agent.jar";
- if (!new File(agent).exists()) {
- agent = TEST_JDK + "/lib/management-agent.jar";
- }
-
- Something s = doSomething("test_14",
- "-javaagent:" + agent + "=com.sun.management.jmxremote.port=" +
- pa.getPort1() + ",com.sun.management.jmxremote.authenticate=false",
- "-Dcom.sun.management.jmxremote.ssl=false"
- );
-
- try {
- testNoConnect(pa.port1);
- } finally {
- s.stop();
- }
- }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/www/protocol/http/ZoneId.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8027308
+ * @summary verifies that HttpURLConnection does not send the zone id in the
+ * 'Host' field of the header:
+ * Host: [fe80::a00:27ff:aaaa:aaaa] instead of
+ * Host: [fe80::a00:27ff:aaaa:aaaa%eth0]"
+ */
+
+import com.sun.net.httpserver.Headers;
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import com.sun.net.httpserver.HttpServer;
+
+import java.io.IOException;
+import java.net.*;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+
+public class ZoneId {
+
+ public static void main(String[] args) throws Exception {
+
+ InetAddress address = getAppropriateIPv6Address();
+
+ if (address == null) {
+ System.out.println(
+ "The test will be skipped as not a single " +
+ "appropriate IPv6 address was found on this machine");
+ return;
+ }
+ String ip6_literal = address.getHostAddress();
+
+ System.out.println("Found an appropriate IPv6 address: " + address);
+
+ System.out.println("Starting http server...");
+ HttpServer server =
+ HttpServer.create(new InetSocketAddress(address, 0), 0);
+ CompletableFuture<Headers> headers = new CompletableFuture<>();
+ server.createContext("/", createCapturingHandler(headers));
+ server.start();
+ System.out.println("Started at " + server.getAddress());
+ try {
+ String spec = "http://[" + address.getHostAddress() + "]:" + server.getAddress().getPort();
+ System.out.println("Client is connecting to: " + spec);
+ URLConnection urlConnection = new URL(spec).openConnection();
+ ((sun.net.www.protocol.http.HttpURLConnection) urlConnection)
+ .getResponseCode();
+ } finally {
+ System.out.println("Shutting down the server...");
+ server.stop(0);
+ }
+
+ int idx = ip6_literal.lastIndexOf('%');
+ String ip6_address = ip6_literal.substring(0, idx);
+ List<String> hosts = headers.get().get("Host");
+
+ System.out.println("Host: " + hosts);
+
+ if (hosts.size() != 1 || hosts.get(0).contains("%") ||
+ !hosts.get(0).contains(ip6_address)) {
+ throw new RuntimeException("FAIL");
+ }
+ }
+
+ private static InetAddress getAppropriateIPv6Address() throws SocketException {
+ System.out.println("Searching through the network interfaces...");
+ Enumeration<NetworkInterface> is = NetworkInterface.getNetworkInterfaces();
+ while (is.hasMoreElements()) {
+ NetworkInterface i = is.nextElement();
+ System.out.println("\tinterface: " + i);
+
+ // just a "good enough" marker that the interface
+ // does not support a loopback and therefore should not be used
+ if ( i.getHardwareAddress() == null) continue;
+ if (!i.isUp()) continue;
+
+ Enumeration<InetAddress> as = i.getInetAddresses();
+ while (as.hasMoreElements()) {
+ InetAddress a = as.nextElement();
+ System.out.println("\t\taddress: " + a.getHostAddress());
+ if ( !(a instanceof Inet6Address &&
+ a.toString().contains("%")) ) {
+ continue;
+ }
+ return a;
+ }
+ }
+ return null;
+ }
+
+ private static HttpHandler createCapturingHandler(CompletableFuture<Headers> headers) {
+ return new HttpHandler() {
+ @Override
+ public void handle(HttpExchange exchange) throws IOException {
+ headers.complete(exchange.getRequestHeaders());
+ exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, -1);
+ exchange.close();
+ }
+ };
+ }
+}
--- a/jdk/test/sun/security/pkcs11/KeyStore/SecretKeysBasic.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/sun/security/pkcs11/KeyStore/SecretKeysBasic.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2014, 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
@@ -139,6 +139,13 @@
}
private static void doTest() throws Exception {
+ // Make sure both NSS libraries are the same version.
+ if (isNSS(provider) &&
+ (getLibsoftokn3Version() != getLibnss3Version())) {
+ System.out.println("libsoftokn3 and libnss3 versions do not match. Aborting test...");
+ return;
+ }
+
if (ks == null) {
ks = KeyStore.getInstance(KS_TYPE, provider);
ks.load(null, tokenPwd);
--- a/jdk/test/sun/security/pkcs11/PKCS11Test.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/sun/security/pkcs11/PKCS11Test.java Wed Jun 18 13:14:15 2014 -0700
@@ -66,6 +66,11 @@
// The other is "libnss3.so", listed as "nss3".
static String nss_library = "softokn3";
+ // NSS versions of each library. It is simplier to keep nss_version
+ // for quick checking for generic testing than many if-else statements.
+ static double softoken3_version = -1;
+ static double nss3_version = -1;
+
static Provider getSunPKCS11(String config) throws Exception {
Class clazz = Class.forName("sun.security.pkcs11.SunPKCS11");
Constructor cons = clazz.getConstructor(new Class[] {String.class});
@@ -175,6 +180,10 @@
}
public static String getNSSLibDir() throws Exception {
+ return getNSSLibDir(nss_library);
+ }
+
+ static String getNSSLibDir(String library) throws Exception {
Properties props = System.getProperties();
String osName = props.getProperty("os.name");
if (osName.startsWith("Win")) {
@@ -195,7 +204,7 @@
String nssLibDir = null;
for (String dir : nssLibDirs) {
if (new File(dir).exists() &&
- new File(dir + System.mapLibraryName(nss_library)).exists()) {
+ new File(dir + System.mapLibraryName(library)).exists()) {
nssLibDir = dir;
System.setProperty("pkcs11test.nss.libdir", nssLibDir);
break;
@@ -241,16 +250,37 @@
return nss_ecc_status;
}
+ public static double getLibsoftokn3Version() {
+ if (softoken3_version == -1)
+ return getNSSInfo("softokn3");
+ return softoken3_version;
+ }
+
+ public static double getLibnss3Version() {
+ if (nss3_version == -1)
+ return getNSSInfo("nss3");
+ return nss3_version;
+ }
+
/* Read the library to find out the verison */
static void getNSSInfo() {
+ getNSSInfo(nss_library);
+ }
+
+ static double getNSSInfo(String library) {
String nssHeader = "$Header: NSS";
boolean found = false;
String s = null;
int i = 0;
String libfile = "";
+ if (library.compareTo("softokn3") == 0 && softoken3_version > -1)
+ return softoken3_version;
+ if (library.compareTo("nss3") == 0 && nss3_version > -1)
+ return nss3_version;
+
try {
- libfile = getNSSLibDir() + System.mapLibraryName(nss_library);
+ libfile = getNSSLibDir() + System.mapLibraryName(library);
FileInputStream is = new FileInputStream(libfile);
byte[] data = new byte[1000];
int read = 0;
@@ -284,9 +314,10 @@
}
if (!found) {
- System.out.println("NSS version not found, set to 0.0: "+libfile);
+ System.out.println("lib" + library +
+ " version not found, set to 0.0: " + libfile);
nss_version = 0.0;
- return;
+ return nss_version;
}
// the index after whitespace after nssHeader
@@ -306,11 +337,12 @@
try {
nss_version = Double.parseDouble(version);
} catch (NumberFormatException e) {
- System.out.println("Failed to parse NSS version. Set to 0.0");
+ System.out.println("Failed to parse lib" + library +
+ " version. Set to 0.0");
e.printStackTrace();
}
- System.out.print("NSS version = "+version+". ");
+ System.out.print("lib" + library + " version = "+version+". ");
// Check for ECC
if (s.indexOf("Basic") > 0) {
@@ -319,7 +351,17 @@
} else if (s.indexOf("Extended") > 0) {
nss_ecc_status = ECCState.Extended;
System.out.println("ECC Extended.");
+ } else {
+ System.out.println("ECC None.");
}
+
+ if (library.compareTo("softokn3") == 0) {
+ softoken3_version = nss_version;
+ } else if (library.compareTo("nss3") == 0) {
+ nss3_version = nss_version;
+ }
+
+ return nss_version;
}
// Used to set the nss_library file to search for libsoftokn3.so
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/freebl3.chk has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/freebl3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nss3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nss3.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssckbi.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssdbm3.chk has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssdbm3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssutil3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssutil3.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/softokn3.chk has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/softokn3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/sqlite3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/ssl3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/ssl3.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/freebl3.chk has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/freebl3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nss3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nss3.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssckbi.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssdbm3.chk has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssdbm3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssutil3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssutil3.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/softokn3.chk has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/softokn3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/sqlite3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/ssl3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/ssl3.lib has changed
--- a/jdk/test/sun/security/pkcs11/nss/src/MD5SUMS Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-1390c8a35c667e05e542 nss-3.13.1.tar.gz
--- a/jdk/test/sun/security/pkcs11/nss/src/SHA1SUMS Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-d8e7ee9f9f1e0bfa2ea8b72d25727634fea130a6 nss-3.13.1.tar.gz
Binary file jdk/test/sun/security/pkcs11/nss/src/nss-3.13.1.tar.gz has changed
Binary file jdk/test/sun/security/pkcs11/nss/src/nss-3.16_nspr-4.10_src.tar.gz has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/pkcs11/nss/src/nss-3.16_nspr-4.10_src.tar.gz.sha256 Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,1 @@
+d2374795528f9cf36de07bf7c77d8c8414bb5b4da12ee7c78a57ec90d68e3706 nss-3.16_nspr-4.10_src.tar.gz
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/tools/keytool/default_options.sh Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,118 @@
+#
+# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# @test
+# @bug 8023197
+# @summary Pre-configured command line options for keytool and jarsigner
+#
+
+if [ "${TESTJAVA}" = "" ] ; then
+ JAVAC_CMD=`which javac`
+ TESTJAVA=`dirname $JAVAC_CMD`/..
+fi
+
+KS=ks
+KEYTOOL="$TESTJAVA/bin/keytool ${TESTTOOLVMOPTS}"
+JAR="$TESTJAVA/bin/jar ${TESTTOOLVMOPTS}"
+JARSIGNER="$TESTJAVA/bin/jarsigner ${TESTTOOLVMOPTS}"
+
+rm $KS 2> /dev/null
+
+PASS=changeit
+export PASS
+
+# keytool
+
+cat <<EOF > kt.conf
+# A Pre-configured options file
+keytool.all = -storepass:env PASS -keypass:env PASS -keystore \${user.dir}/$KS -debug
+keytool.genkey = -keyalg ec -ext bc
+keytool.delete = -keystore nothing
+EOF
+
+# kt.conf is read
+$KEYTOOL -conf kt.conf -genkeypair -dname CN=A -alias a || exit 1
+$KEYTOOL -conf kt.conf -list -alias a -v > a_certinfo || exit 2
+grep "Signature algorithm name" a_certinfo | grep ECDSA || exit 3
+grep "BasicConstraints" a_certinfo || exit 4
+
+# kt.conf is read, and dup multi-valued options processed as expected
+$KEYTOOL -conf kt.conf -genkeypair -dname CN=B -alias b -ext ku=ds \
+ || exit 11
+$KEYTOOL -conf kt.conf -list -alias b -v > b_certinfo || exit 12
+grep "BasicConstraints" b_certinfo || exit 14
+grep "DigitalSignature" b_certinfo || exit 15
+
+# Single-valued option in command section override all
+$KEYTOOL -conf kt.conf -delete -alias a && exit 16
+
+# Single-valued option on command line overrides again
+$KEYTOOL -conf kt.conf -delete -alias b -keystore $KS || exit 17
+
+# jarsigner
+
+cat <<EOF > js.conf
+jarsigner.all = -keystore \${user.dir}/$KS -storepass:env PASS -debug -strict
+jarsigner.sign = -digestalg SHA1
+jarsigner.verify = -verbose:summary
+
+EOF
+
+$JAR cvf a.jar ks js.conf kt.conf
+
+$JARSIGNER -conf js.conf a.jar a || exit 21
+$JARSIGNER -conf js.conf -verify a.jar > jarsigner.out || exit 22
+grep "and 2 more" jarsigner.out || exit 23
+$JAR xvf a.jar META-INF/MANIFEST.MF
+grep "SHA1-Digest" META-INF/MANIFEST.MF || exit 24
+
+# Error cases
+
+# File does not exist
+$KEYTOOL -conf no-such-file -help -list && exit 31
+
+# Cannot have both standard name (-genkeypair) and legacy name (-genkey)
+cat <<EOF > bad.conf
+keytool.all = -storepass:env PASS -keypass:env PASS -keystore ks
+keytool.genkeypair = -keyalg rsa
+keytool.genkey = -keyalg ec
+EOF
+
+$KEYTOOL -conf bad.conf -genkeypair -alias me -dname "cn=me" && exit 32
+
+# Unknown options are rejected by tool
+cat <<EOF > bad.conf
+keytool.all=-unknown
+EOF
+
+$KEYTOOL -conf bad.conf -help -list && exit 33
+
+# System property must be present
+cat <<EOF > bad.conf
+keytool.all = -keystore \${no.such.prop}
+EOF
+
+$KEYTOOL -conf bad.conf -help -list && exit 34
+
+echo Done
+exit 0
--- a/jdk/test/sun/tools/jhat/HatHeapDump1Test.java Wed Jun 11 10:53:27 2014 +0400
+++ b/jdk/test/sun/tools/jhat/HatHeapDump1Test.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -21,31 +21,68 @@
* questions.
*/
+import java.io.File;
+import java.util.Arrays;
-/* @test HatHeapDump1Test.java
+import jdk.testlibrary.Asserts;
+import jdk.testlibrary.JDKToolLauncher;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.ProcessTools;
+
+/* @test
* @bug 5102009
- * @summary Test jhat
- *
- * @compile -g HelloWorld.java HatRun.java
- * @build HatHeapDump1Test
- * @run main HatHeapDump1Test HelloWorld
+ * @summary Sanity test of jhat functionality
+ * @library /lib/testlibrary
+ * @build jdk.testlibarary.*
+ * @compile -g HelloWorld.java
+ * @run main HatHeapDump1Test
*/
+public class HatHeapDump1Test {
-public class HatHeapDump1Test {
+ private static final String TEST_CLASSES = System.getProperty("test.classes", ".");
public static void main(String args[]) throws Exception {
- HatRun run;
+ String className = "HelloWorld";
+ File dumpFile = new File(className + ".hdump");
+
+ // Generate a heap dump
+ ProcessBuilder processBuilder = ProcessTools.createJavaProcessBuilder("-cp",
+ TEST_CLASSES,
+ "-Xcheck:jni",
+ "-Xverify:all",
+ "-agentlib:hprof=heap=dump,format=b,file=" + dumpFile.getAbsolutePath(),
+ className);
+ OutputAnalyzer output = new OutputAnalyzer(processBuilder.start());
+ System.out.println(output.getOutput());
+ output.shouldHaveExitValue(0);
+ output.shouldContain("Dumping Java heap ... done");
+ Asserts.assertTrue(dumpFile.exists() && dumpFile.isFile(), "Invalid dump file " + dumpFile.getAbsolutePath());
- /* Run hprof and jhat */
- run = new HatRun("heap=dump", "");
- run.runit(args[0]);
+ // Run jhat to analyze the heap dump
+ output = jhat("-debug", "2", dumpFile.getAbsolutePath());
+ output.shouldHaveExitValue(0);
+ output.shouldContain("Snapshot resolved");
+ output.shouldContain("-debug 2 was used");
+ output.shouldNotContain("ERROR");
- /* Make sure patterns in output look ok */
- if (run.output_contains("ERROR")) {
- throw new RuntimeException("Test failed - ERROR seen in output");
+ dumpFile.delete();
+ }
+
+ private static OutputAnalyzer jhat(String... toolArgs) throws Exception {
+ JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("jhat");
+ if (toolArgs != null) {
+ for (String toolArg : toolArgs) {
+ launcher.addToolArg(toolArg);
+ }
}
- /* Must be a pass. */
- System.out.println("Test passed - cleanly terminated");
+ ProcessBuilder processBuilder = new ProcessBuilder();
+ processBuilder.command(launcher.getCommand());
+ System.out.println(Arrays.toString(processBuilder.command().toArray()).replace(",", ""));
+ OutputAnalyzer output = new OutputAnalyzer(processBuilder.start());
+ System.out.println(output.getOutput());
+
+ return output;
}
+
}
--- a/jdk/test/sun/tools/jhat/HatRun.java Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,226 +0,0 @@
-/*
- * 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
- * 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.
- */
-
-
-/*
- *
- * Support classes for running jhat tests
- *
- */
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.BufferedInputStream;
-import java.io.PrintStream;
-
-/*
- * Helper class to direct process output to a StringBuffer
- */
-class MyInputStream implements Runnable {
- private String name;
- private BufferedInputStream in;
- private StringBuffer buffer;
-
- /* Create MyInputStream that saves all output to a StringBuffer */
- MyInputStream(String name, InputStream in) {
- this.name = name;
- this.in = new BufferedInputStream(in);
- buffer = new StringBuffer(4096);
- Thread thr = new Thread(this);
- thr.setDaemon(true);
- thr.start();
- }
-
- /* Dump the buffer */
- void dump(PrintStream x) {
- String str = buffer.toString();
- x.println("<beginning of " + name + " buffer>");
- x.println(str);
- x.println("<end of buffer>");
- }
-
- /* Check to see if a pattern is inside the output. */
- boolean contains(String pattern) {
- String str = buffer.toString();
- return str.contains(pattern);
- }
-
- /* Runs as a separate thread capturing all output in a StringBuffer */
- public void run() {
- try {
- byte b[] = new byte[100];
- for (;;) {
- int n = in.read(b);
- String str;
- if (n < 0) {
- break;
- }
- str = new String(b, 0, n);
- buffer.append(str);
- System.out.print(str);
- }
- } catch (IOException ioe) { /* skip */ }
- }
-}
-
-/*
- * Main jhat run
- */
-public class HatRun {
-
- private String all_hprof_options;
- private String all_hat_options;
- private String dumpfile;
- private MyInputStream output;
- private MyInputStream error;
-
- /* Create a Hat run process */
- public HatRun(String hprof_options, String hat_options)
- {
- all_hprof_options = hprof_options;
- all_hat_options = hat_options;
- }
-
- /*
- * Execute a process with an -agentpath or -agentlib command option
- */
- public void runit(String class_name)
- {
- runit(class_name, null);
- }
-
- /*
- * Execute a command.
- */
- private void execute(String cmd[])
- {
- /* Begin process */
- Process p;
- String cmdLine = "";
- int i;
-
- for ( i = 0 ; i < cmd.length; i++ ) {
- cmdLine += cmd[i];
- cmdLine += " ";
- }
- System.out.println("Starting: " + cmdLine);
-
- try {
- p = Runtime.getRuntime().exec(cmd);
- } catch ( IOException e ) {
- throw new RuntimeException("Test failed - exec got IO exception");
- }
-
- /* Save process output in StringBuffers */
- output = new MyInputStream("Input Stream", p.getInputStream());
- error = new MyInputStream("Error Stream", p.getErrorStream());
-
- /* Wait for process to complete, and if exit code is non-zero we fail */
- try {
- int exitStatus;
- exitStatus = p.waitFor();
- if ( exitStatus != 0) {
- System.out.println("Exit code is " + exitStatus);
- error.dump(System.out);
- output.dump(System.out);
- throw new RuntimeException("Test failed - " +
- "exit return code non-zero " +
- "(exitStatus==" + exitStatus + ")");
- }
- } catch ( InterruptedException e ) {
- throw new RuntimeException("Test failed - process interrupted");
- }
- System.out.println("Completed: " + cmdLine);
- }
-
- /*
- * Execute a process with an -agentpath or -agentlib command option
- * plus any set of other java options.
- */
- public void runit(String class_name, String vm_options[])
- {
- String jre_home = System.getProperty("java.home");
- String sdk_home = (jre_home.endsWith("jre") ?
- (jre_home + File.separator + "..") :
- jre_home );
- String cdir = System.getProperty("test.classes", ".");
- String os_arch = System.getProperty("os.arch");
- String os_name = System.getProperty("os.name");
- String java = jre_home
- + File.separator + "bin"
- + File.separator + "java";
- String jhat = sdk_home + File.separator + "bin"
- + File.separator + "jhat";
- /* Array of strings to be passed in for exec:
- * 1. java
- * 2. -Dtest.classes=.
- * 3. -Xcheck:jni (Just because it finds bugs)
- * 4. -Xverify:all (Make sure verification is on full blast)
- * 5. -agent
- * vm_options
- * 6+i. classname
- */
- int nvm_options = 0;
- if ( vm_options != null ) nvm_options = vm_options.length;
- String cmd[] = new String[1 + 7 + nvm_options];
- int i,j;
-
- i = 0;
- cmd[i++] = java;
- cmd[i++] = "-cp";
- cmd[i++] = cdir;
- cmd[i++] = "-Dtest.classes=" + cdir;
- cmd[i++] = "-Xcheck:jni";
- cmd[i++] = "-Xverify:all";
- dumpfile= cdir + File.separator + class_name + ".hdump";
- cmd[i++] = "-agentlib:hprof=" + all_hprof_options
- + ",format=b,file=" + dumpfile;
- /* Add any special VM options */
- for ( j = 0; j < nvm_options; j++ ) {
- cmd[i++] = vm_options[j];
- }
- /* Add classname */
- cmd[i++] = class_name;
-
- /* Execute process */
- execute(cmd);
-
- /* Run jhat */
- String jhat_cmd[] = new String[4];
- jhat_cmd[0] = jhat;
- jhat_cmd[1] = "-debug";
- jhat_cmd[2] = "2";
- jhat_cmd[3] = dumpfile;
-
- /* Execute process */
- execute(jhat_cmd);
-
- }
-
- /* Does the pattern appear in the output of this process */
- public boolean output_contains(String pattern)
- {
- return output.contains(pattern) || error.contains(pattern);
- }
-}
--- a/langtools/.hgtags Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/.hgtags Wed Jun 18 13:14:15 2014 -0700
@@ -259,3 +259,5 @@
1df3f53b9d980b66739f05e14053381ffb0f38ee jdk9-b14
8666a9611eb8ba711b001bf8d942282e3e2d8e3d jdk9-b15
7d67ebd3e35c3c36ad2caee482a84f8310d2f838 jdk9-b16
+b64f8d5b97faa29e4d629bf4e56ebe0e26c40ecc jdk9-b17
+fd8da51c5df4546995c360fc49f0b985cbf8fbd3 jdk9-b18
--- a/langtools/src/share/classes/com/sun/source/util/TaskEvent.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/source/util/TaskEvent.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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,7 +68,15 @@
/**
* For events relating to an individual annotation processing round.
**/
- ANNOTATION_PROCESSING_ROUND
+ ANNOTATION_PROCESSING_ROUND,
+ /**
+ * Sent before parsing first source file, and after writing the last output file.
+ * This event is not sent when using {@link JavacTask#parse()},
+ * {@link JavacTask#analyze()} or {@link JavacTask#generate()}.
+ *
+ * @since 1.9
+ */
+ COMPILATION,
}
public TaskEvent(Kind kind) {
--- a/langtools/src/share/classes/com/sun/tools/javac/api/ClientCodeWrapper.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/api/ClientCodeWrapper.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -202,9 +202,6 @@
// <editor-fold defaultstate="collapsed" desc="Wrapper classes">
- // FIXME: all these classes should be converted to use multi-catch when
- // that is available in the bootstrap compiler.
-
protected class WrappedJavaFileManager implements JavaFileManager {
protected JavaFileManager clientJavaFileManager;
WrappedJavaFileManager(JavaFileManager clientJavaFileManager) {
--- a/langtools/src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java Wed Jun 18 13:14:15 2014 -0700
@@ -161,6 +161,15 @@
compilerMain.log = Log.instance(context);
compilerMain.setOptions(Options.instance(context));
compilerMain.filenames = new LinkedHashSet<>();
+ compilerMain.deferredFileManagerOptions = new LinkedHashMap<>();
+ // The following line is conceptually wrong. It should not refer to args
+ // which may include inappropriate file manager options.
+ // (Ideally, args should not even be passed into JavacTaskImpl at all.)
+ // The "no filenames in args" check should have been handled by the use of
+ // the GrumpyHelper in JavacTool.getTask, but processArgs also has some
+ // additional checking, which should be factored out and called separately.
+ // If we fix this, then filenames and deferredFileManagerOptions in Main
+ // can revert to being protected or private, not public.
Collection<File> filenames = compilerMain.processArgs(CommandLine.parse(args), classNames);
if (filenames != null && !filenames.isEmpty())
throw new IllegalArgumentException("Malformed arguments " + toString(filenames, " "));
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Attribute.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Attribute.java Wed Jun 18 13:14:15 2014 -0700
@@ -142,7 +142,7 @@
* access this attribute.
*/
public final List<Pair<MethodSymbol,Attribute>> values;
- public TypeAnnotationPosition position;
+ public final TypeAnnotationPosition position;
private boolean synthesized = false;
@@ -170,53 +170,9 @@
@Override
public TypeAnnotationPosition getPosition() {
- if (hasUnknownPosition()) {
- if (values.size() != 0) {
- Name valueName = values.head.fst.name.table.names.value;
- Pair<MethodSymbol, Attribute> res = getElemPair(valueName);
- position = res == null ? null : res.snd.getPosition();
- }
- }
return position;
}
- public boolean isContainerTypeCompound() {
- if (isSynthesized() && values.size() == 1)
- return getFirstEmbeddedTC() != null;
- return false;
- }
-
- private Compound getFirstEmbeddedTC() {
- if (values.size() == 1) {
- Pair<MethodSymbol, Attribute> val = values.get(0);
- if (val.fst.getSimpleName().contentEquals("value")
- && val.snd instanceof Array) {
- Array arr = (Array) val.snd;
- if (arr.values.length != 0
- && arr.values[0] instanceof Attribute.TypeCompound)
- return (Attribute.TypeCompound) arr.values[0];
- }
- }
- return null;
- }
-
- public boolean tryFixPosition() {
- if (!isContainerTypeCompound())
- return false;
-
- Compound from = getFirstEmbeddedTC();
- if (from != null && from.position != null &&
- from.position.type != TargetType.UNKNOWN) {
- position = from.position;
- return true;
- }
- return false;
- }
-
- public boolean hasUnknownPosition() {
- return position.type == TargetType.UNKNOWN;
- }
-
public void accept(Visitor v) { v.visitCompound(this); }
/**
@@ -280,6 +236,12 @@
valmap.put(value.fst, value.snd);
return valmap;
}
+
+ public TypeCompound toTypeCompound() {
+ // It is safe to alias the position.
+ return new TypeCompound(this, this.position);
+ }
+
}
public static class TypeCompound extends Compound {
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Flags.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Flags.java Wed Jun 18 13:14:15 2014 -0700
@@ -296,7 +296,8 @@
ModifierFlags = ((long)StandardFlags & ~INTERFACE) | DEFAULT,
InterfaceMethodMask = ABSTRACT | STATIC | PUBLIC | STRICTFP | DEFAULT,
AnnotationTypeElementMask = ABSTRACT | PUBLIC,
- LocalVarFlags = FINAL | PARAMETER;
+ LocalVarFlags = FINAL | PARAMETER,
+ ReceiverParamFlags = PARAMETER;
public static Set<Modifier> asModifierSet(long flags) {
--- a/langtools/src/share/classes/com/sun/tools/javac/code/TargetType.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/TargetType.java Wed Jun 18 13:14:15 2014 -0700
@@ -107,10 +107,7 @@
CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT(0x4A, true),
/** For annotations on a type argument of a method reference. */
- METHOD_REFERENCE_TYPE_ARGUMENT(0x4B, true),
-
- /** For annotations with an unknown target. */
- UNKNOWN(0xFF);
+ METHOD_REFERENCE_TYPE_ARGUMENT(0x4B, true);
private static final int MAXIMUM_TARGET_TYPE_VALUE = 0x4B;
@@ -150,26 +147,15 @@
targets = new TargetType[MAXIMUM_TARGET_TYPE_VALUE + 1];
TargetType[] alltargets = values();
for (TargetType target : alltargets) {
- if (target.targetTypeValue != UNKNOWN.targetTypeValue)
targets[target.targetTypeValue] = target;
}
- for (int i = 0; i <= MAXIMUM_TARGET_TYPE_VALUE; ++i) {
- if (targets[i] == null)
- targets[i] = UNKNOWN;
- }
}
public static boolean isValidTargetTypeValue(int tag) {
- if (tag == UNKNOWN.targetTypeValue)
- return true;
-
return (tag >= 0 && tag < targets.length);
}
public static TargetType fromTargetTypeValue(int tag) {
- if (tag == UNKNOWN.targetTypeValue)
- return UNKNOWN;
-
if (tag < 0 || tag >= targets.length)
Assert.error("Unknown TargetType: " + tag);
return targets[tag];
--- a/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java Wed Jun 18 13:14:15 2014 -0700
@@ -259,9 +259,6 @@
case METHOD_RETURN:
case FIELD:
break;
- case UNKNOWN:
- sb.append(", position UNKNOWN!");
- break;
default:
Assert.error("Unknown target type: " + type);
}
@@ -428,7 +425,7 @@
}
/**
- * Create a {@code TypeAnnotationPosition} for a method receiver.
+ * Create a {@code TypeAnnotationPosition} for a method receiver parameter.
*
* @param location The type path.
* @param onLambda The lambda for this parameter.
@@ -445,7 +442,7 @@
}
/**
- * Create a {@code TypeAnnotationPosition} for a method receiver.
+ * Create a {@code TypeAnnotationPosition} for a method receiver parameter.
*
* @param location The type path.
*/
@@ -455,7 +452,7 @@
}
/**
- * Create a {@code TypeAnnotationPosition} for a method receiver.
+ * Create a {@code TypeAnnotationPosition} for a method receiver parameter.
*
* @param pos The position from the associated tree node.
*/
@@ -664,10 +661,11 @@
public static TypeAnnotationPosition
exceptionParameter(final List<TypePathEntry> location,
final JCLambda onLambda,
+ final int type_index,
final int pos) {
return new TypeAnnotationPosition(TargetType.EXCEPTION_PARAMETER, pos,
Integer.MIN_VALUE, onLambda,
- Integer.MIN_VALUE, Integer.MIN_VALUE,
+ type_index, Integer.MIN_VALUE,
location);
}
@@ -680,7 +678,7 @@
public static TypeAnnotationPosition
exceptionParameter(final JCLambda onLambda,
final int pos) {
- return exceptionParameter(emptyPath, onLambda, pos);
+ return exceptionParameter(emptyPath, onLambda, Integer.MIN_VALUE, pos);
}
/**
@@ -690,7 +688,7 @@
*/
public static TypeAnnotationPosition
exceptionParameter(final List<TypePathEntry> location) {
- return exceptionParameter(location, null, -1);
+ return exceptionParameter(location, null, Integer.MIN_VALUE, -1);
}
@@ -1204,12 +1202,4 @@
return methodTypeParameterBound(location, null, parameter_index,
bound_index, -1);
}
-
- // Consider this deprecated on arrival. We eventually want to get
- // rid of this value altogether. Do not use it for anything new.
- public static final TypeAnnotationPosition unknown =
- new TypeAnnotationPosition(TargetType.UNKNOWN, -1,
- Integer.MIN_VALUE, null,
- Integer.MIN_VALUE, Integer.MIN_VALUE,
- emptyPath);
}
--- a/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java Wed Jun 11 10:53:27 2014 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1397 +0,0 @@
-/*
- * Copyright (c) 2009, 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.javac.code;
-
-import javax.lang.model.element.Element;
-import javax.lang.model.element.ElementKind;
-import javax.lang.model.type.TypeKind;
-
-import javax.tools.JavaFileObject;
-
-import com.sun.tools.javac.code.Attribute.TypeCompound;
-import com.sun.tools.javac.code.Type.ArrayType;
-import com.sun.tools.javac.code.Type.CapturedType;
-import com.sun.tools.javac.code.Type.ClassType;
-import com.sun.tools.javac.code.Type.ErrorType;
-import com.sun.tools.javac.code.Type.ForAll;
-import com.sun.tools.javac.code.Type.MethodType;
-import com.sun.tools.javac.code.Type.PackageType;
-import com.sun.tools.javac.code.Type.TypeVar;
-import com.sun.tools.javac.code.Type.UndetVar;
-import com.sun.tools.javac.code.Type.Visitor;
-import com.sun.tools.javac.code.Type.WildcardType;
-import com.sun.tools.javac.code.TypeAnnotationPosition.TypePathEntry;
-import com.sun.tools.javac.code.TypeAnnotationPosition.TypePathEntryKind;
-import com.sun.tools.javac.code.Symbol.VarSymbol;
-import com.sun.tools.javac.code.Symbol.MethodSymbol;
-import com.sun.tools.javac.comp.Annotate;
-import com.sun.tools.javac.comp.Annotate.Worker;
-import com.sun.tools.javac.comp.Attr;
-import com.sun.tools.javac.comp.AttrContext;
-import com.sun.tools.javac.comp.Env;
-import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.TreeInfo;
-import com.sun.tools.javac.tree.JCTree.JCBlock;
-import com.sun.tools.javac.tree.JCTree.JCClassDecl;
-import com.sun.tools.javac.tree.JCTree.JCExpression;
-import com.sun.tools.javac.tree.JCTree.JCLambda;
-import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
-import com.sun.tools.javac.tree.JCTree.JCMethodInvocation;
-import com.sun.tools.javac.tree.JCTree.JCNewClass;
-import com.sun.tools.javac.tree.JCTree.JCTypeApply;
-import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
-import com.sun.tools.javac.tree.TreeScanner;
-import com.sun.tools.javac.tree.JCTree.*;
-import com.sun.tools.javac.util.Assert;
-import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.List;
-import com.sun.tools.javac.util.ListBuffer;
-import com.sun.tools.javac.util.Log;
-import com.sun.tools.javac.util.Names;
-import com.sun.tools.javac.util.Options;
-
-/**
- * Contains operations specific to processing type annotations.
- * This class has two functions:
- * separate declaration from type annotations and insert the type
- * annotations to their types;
- * and determine the TypeAnnotationPositions for all type annotations.
- */
-public class TypeAnnotations {
- protected static final Context.Key<TypeAnnotations> typeAnnosKey = new Context.Key<>();
-
- public static TypeAnnotations instance(Context context) {
- TypeAnnotations instance = context.get(typeAnnosKey);
- if (instance == null)
- instance = new TypeAnnotations(context);
- return instance;
- }
-
- final Log log;
- final Names names;
- final Symtab syms;
- final Annotate annotate;
- final Attr attr;
-
- protected TypeAnnotations(Context context) {
- context.put(typeAnnosKey, this);
- names = Names.instance(context);
- log = Log.instance(context);
- syms = Symtab.instance(context);
- annotate = Annotate.instance(context);
- attr = Attr.instance(context);
- Options options = Options.instance(context);
- }
-
- /**
- * Separate type annotations from declaration annotations and
- * determine the correct positions for type annotations.
- * This version only visits types in signatures and should be
- * called from MemberEnter.
- * The method takes the Annotate object as parameter and
- * adds an Annotate.Worker to the correct Annotate queue for
- * later processing.
- */
- public void organizeTypeAnnotationsSignatures(final Env<AttrContext> env, final JCClassDecl tree) {
- annotate.afterRepeated( new Worker() {
- @Override
- public void run() {
- JavaFileObject oldSource = log.useSource(env.toplevel.sourcefile);
-
- try {
- new TypeAnnotationPositions(true).scan(tree);
- } finally {
- log.useSource(oldSource);
- }
- }
- } );
- }
-
- public void validateTypeAnnotationsSignatures(final Env<AttrContext> env, final JCClassDecl tree) {
- annotate.validate(new Worker() { //validate annotations
- @Override
- public void run() {
- JavaFileObject oldSource = log.useSource(env.toplevel.sourcefile);
-
- try {
- attr.validateTypeAnnotations(tree, true);
- } finally {
- log.useSource(oldSource);
- }
- }
- } );
- }
-
- /**
- * This version only visits types in bodies, that is, field initializers,
- * top-level blocks, and method bodies, and should be called from Attr.
- */
- public void organizeTypeAnnotationsBodies(JCClassDecl tree) {
- new TypeAnnotationPositions(false).scan(tree);
- }
-
- public enum AnnotationType { DECLARATION, TYPE, BOTH }
-
- /**
- * Determine whether an annotation is a declaration annotation,
- * a type annotation, or both.
- */
- public AnnotationType annotationType(Attribute.Compound a, Symbol s) {
- Attribute.Compound atTarget =
- a.type.tsym.attribute(syms.annotationTargetType.tsym);
- if (atTarget == null) {
- return inferTargetMetaInfo(a, s);
- }
- Attribute atValue = atTarget.member(names.value);
- if (!(atValue instanceof Attribute.Array)) {
- Assert.error("annotationType(): bad @Target argument " + atValue +
- " (" + atValue.getClass() + ")");
- return AnnotationType.DECLARATION; // error recovery
- }
- Attribute.Array arr = (Attribute.Array) atValue;
- boolean isDecl = false, isType = false;
- for (Attribute app : arr.values) {
- if (!(app instanceof Attribute.Enum)) {
- Assert.error("annotationType(): unrecognized Attribute kind " + app +
- " (" + app.getClass() + ")");
- isDecl = true;
- continue;
- }
- Attribute.Enum e = (Attribute.Enum) app;
- if (e.value.name == names.TYPE) {
- if (s.kind == Kinds.TYP)
- isDecl = true;
- } else if (e.value.name == names.FIELD) {
- if (s.kind == Kinds.VAR &&
- s.owner.kind != Kinds.MTH)
- isDecl = true;
- } else if (e.value.name == names.METHOD) {
- if (s.kind == Kinds.MTH &&
- !s.isConstructor())
- isDecl = true;
- } else if (e.value.name == names.PARAMETER) {
- if (s.kind == Kinds.VAR &&
- s.owner.kind == Kinds.MTH &&
- (s.flags() & Flags.PARAMETER) != 0)
- isDecl = true;
- } else if (e.value.name == names.CONSTRUCTOR) {
- if (s.kind == Kinds.MTH &&
- s.isConstructor())
- isDecl = true;
- } else if (e.value.name == names.LOCAL_VARIABLE) {
- if (s.kind == Kinds.VAR &&
- s.owner.kind == Kinds.MTH &&
- (s.flags() & Flags.PARAMETER) == 0)
- isDecl = true;
- } else if (e.value.name == names.ANNOTATION_TYPE) {
- if (s.kind == Kinds.TYP &&
- (s.flags() & Flags.ANNOTATION) != 0)
- isDecl = true;
- } else if (e.value.name == names.PACKAGE) {
- if (s.kind == Kinds.PCK)
- isDecl = true;
- } else if (e.value.name == names.TYPE_USE) {
- if (s.kind == Kinds.TYP ||
- s.kind == Kinds.VAR ||
- (s.kind == Kinds.MTH && !s.isConstructor() &&
- !s.type.getReturnType().hasTag(TypeTag.VOID)) ||
- (s.kind == Kinds.MTH && s.isConstructor()))
- isType = true;
- } else if (e.value.name == names.TYPE_PARAMETER) {
- /* Irrelevant in this case */
- // TYPE_PARAMETER doesn't aid in distinguishing between
- // Type annotations and declaration annotations on an
- // Element
- } else {
- Assert.error("annotationType(): unrecognized Attribute name " + e.value.name +
- " (" + e.value.name.getClass() + ")");
- isDecl = true;
- }
- }
- if (isDecl && isType) {
- return AnnotationType.BOTH;
- } else if (isType) {
- return AnnotationType.TYPE;
- } else {
- return AnnotationType.DECLARATION;
- }
- }
-
- /** Infer the target annotation kind, if none is give.
- * We only infer declaration annotations.
- */
- private static AnnotationType inferTargetMetaInfo(Attribute.Compound a, Symbol s) {
- return AnnotationType.DECLARATION;
- }
-
-
- private class TypeAnnotationPositions extends TreeScanner {
-
- private final boolean sigOnly;
-
- TypeAnnotationPositions(boolean sigOnly) {
- this.sigOnly = sigOnly;
- }
-
- /*
- * When traversing the AST we keep the "frames" of visited
- * trees in order to determine the position of annotations.
- */
- private ListBuffer<JCTree> frames = new ListBuffer<>();
-
- protected void push(JCTree t) { frames = frames.prepend(t); }
- protected JCTree pop() { return frames.next(); }
- // could this be frames.elems.tail.head?
- private JCTree peek2() { return frames.toList().tail.head; }
-
- @Override
- public void scan(JCTree tree) {
- push(tree);
- super.scan(tree);
- pop();
- }
-
- /**
- * Separates type annotations from declaration annotations.
- * This step is needed because in certain locations (where declaration
- * and type annotations can be mixed, e.g. the type of a field)
- * we never build an JCAnnotatedType. This step finds these
- * annotations and marks them as if they were part of the type.
- */
- private void separateAnnotationsKinds(JCTree typetree, Type type, Symbol sym,
- TypeAnnotationPosition pos) {
- List<Attribute.Compound> annotations = sym.getRawAttributes();
- ListBuffer<Attribute.Compound> declAnnos = new ListBuffer<>();
- ListBuffer<Attribute.TypeCompound> typeAnnos = new ListBuffer<>();
- ListBuffer<Attribute.TypeCompound> onlyTypeAnnos = new ListBuffer<>();
-
- for (Attribute.Compound a : annotations) {
- switch (annotationType(a, sym)) {
- case DECLARATION:
- declAnnos.append(a);
- break;
- case BOTH: {
- declAnnos.append(a);
- Attribute.TypeCompound ta = toTypeCompound(a, pos);
- typeAnnos.append(ta);
- break;
- }
- case TYPE: {
- Attribute.TypeCompound ta = toTypeCompound(a, pos);
- typeAnnos.append(ta);
- // Also keep track which annotations are only type annotations
- onlyTypeAnnos.append(ta);
- break;
- }
- }
- }
-
- sym.resetAnnotations();
- sym.setDeclarationAttributes(declAnnos.toList());
-
- if (typeAnnos.isEmpty()) {
- return;
- }
-
- List<Attribute.TypeCompound> typeAnnotations = typeAnnos.toList();
-
- if (type == null) {
- // When type is null, put the type annotations to the symbol.
- // This is used for constructor return annotations, for which
- // we use the type of the enclosing class.
- type = sym.getEnclosingElement().asType();
-
- // Declaration annotations are always allowed on constructor returns.
- // Therefore, use typeAnnotations instead of onlyTypeAnnos.
- type = typeWithAnnotations(typetree, type, typeAnnotations, typeAnnotations);
- // Note that we don't use the result, the call to
- // typeWithAnnotations side-effects the type annotation positions.
- // This is important for constructors of nested classes.
- sym.appendUniqueTypeAttributes(typeAnnotations);
- return;
- }
-
- // type is non-null and annotations are added to that type
- type = typeWithAnnotations(typetree, type, typeAnnotations, onlyTypeAnnos.toList());
-
- if (sym.getKind() == ElementKind.METHOD) {
- sym.type.asMethodType().restype = type;
- } else if (sym.getKind() == ElementKind.PARAMETER) {
- sym.type = type;
- if (sym.getQualifiedName().equals(names._this)) {
- sym.owner.type.asMethodType().recvtype = type;
- // note that the typeAnnotations will also be added to the owner below.
- } else {
- MethodType methType = sym.owner.type.asMethodType();
- List<VarSymbol> params = ((MethodSymbol)sym.owner).params;
- List<Type> oldArgs = methType.argtypes;
- ListBuffer<Type> newArgs = new ListBuffer<>();
- while (params.nonEmpty()) {
- if (params.head == sym) {
- newArgs.add(type);
- } else {
- newArgs.add(oldArgs.head);
- }
- oldArgs = oldArgs.tail;
- params = params.tail;
- }
- methType.argtypes = newArgs.toList();
- }
- } else {
- sym.type = type;
- }
-
- sym.appendUniqueTypeAttributes(typeAnnotations);
-
- if (sym.getKind() == ElementKind.PARAMETER ||
- sym.getKind() == ElementKind.LOCAL_VARIABLE ||
- sym.getKind() == ElementKind.RESOURCE_VARIABLE ||
- sym.getKind() == ElementKind.EXCEPTION_PARAMETER) {
- // Make sure all type annotations from the symbol are also
- // on the owner.
- sym.owner.appendUniqueTypeAttributes(sym.getRawTypeAttributes());
- }
- }
-
- // This method has a similar purpose as
- // {@link com.sun.tools.javac.parser.JavacParser.insertAnnotationsToMostInner(JCExpression, List<JCTypeAnnotation>, boolean)}
- // We found a type annotation in a declaration annotation position,
- // for example, on the return type.
- // Such an annotation is _not_ part of an JCAnnotatedType tree and we therefore
- // need to set its position explicitly.
- // The method returns a copy of type that contains these annotations.
- //
- // As a side effect the method sets the type annotation position of "annotations".
- // Note that it is assumed that all annotations share the same position.
- private Type typeWithAnnotations(final JCTree typetree, final Type type,
- final List<Attribute.TypeCompound> annotations,
- final List<Attribute.TypeCompound> onlyTypeAnnotations) {
- //System.err.printf("typeWithAnnotations(typetree: %s, type: %s, annotations: %s, onlyTypeAnnotations: %s)%n",
- // typetree, type, annotations, onlyTypeAnnotations);
- if (annotations.isEmpty()) {
- return type;
- }
- if (type.hasTag(TypeTag.ARRAY)) {
- Type.ArrayType arType = (Type.ArrayType) type;
- Type.ArrayType tomodify = new Type.ArrayType(null, arType.tsym,
- Type.noAnnotations);
- Type toreturn;
- if (type.isAnnotated()) {
- toreturn = tomodify.annotatedType(type.getAnnotationMirrors());
- } else {
- toreturn = tomodify;
- }
-
- JCArrayTypeTree arTree = arrayTypeTree(typetree);
-
- ListBuffer<TypePathEntry> depth = new ListBuffer<>();
- depth = depth.append(TypePathEntry.ARRAY);
- while (arType.elemtype.hasTag(TypeTag.ARRAY)) {
- if (arType.elemtype.isAnnotated()) {
- Type aelemtype = arType.elemtype;
- arType = (Type.ArrayType) aelemtype;
- ArrayType prevToMod = tomodify;
- tomodify = new Type.ArrayType(null, arType.tsym,
- Type.noAnnotations);
- prevToMod.elemtype = tomodify.annotatedType(arType.elemtype.getAnnotationMirrors());
- } else {
- arType = (Type.ArrayType) arType.elemtype;
- tomodify.elemtype = new Type.ArrayType(null, arType.tsym,
- Type.noAnnotations);
- tomodify = (Type.ArrayType) tomodify.elemtype;
- }
- arTree = arrayTypeTree(arTree.elemtype);
- depth = depth.append(TypePathEntry.ARRAY);
- }
- Type arelemType = typeWithAnnotations(arTree.elemtype, arType.elemtype, annotations, onlyTypeAnnotations);
- tomodify.elemtype = arelemType;
- {
- // All annotations share the same position; modify the first one.
- Attribute.TypeCompound a = annotations.get(0);
- TypeAnnotationPosition p = a.position;
- p.location = p.location.prependList(depth.toList());
- }
- typetree.type = toreturn;
- return toreturn;
- } else if (type.hasTag(TypeTag.TYPEVAR)) {
- // Nothing to do for type variables.
- return type;
- } else if (type.getKind() == TypeKind.UNION) {
- // There is a TypeKind, but no TypeTag.
- JCTypeUnion tutree = (JCTypeUnion) typetree;
- JCExpression fst = tutree.alternatives.get(0);
- Type res = typeWithAnnotations(fst, fst.type, annotations, onlyTypeAnnotations);
- fst.type = res;
- // TODO: do we want to set res as first element in uct.alternatives?
- // UnionClassType uct = (com.sun.tools.javac.code.Type.UnionClassType)type;
- // Return the un-annotated union-type.
- return type;
- } else {
- Type enclTy = type;
- Element enclEl = type.asElement();
- JCTree enclTr = typetree;
-
- while (enclEl != null &&
- enclEl.getKind() != ElementKind.PACKAGE &&
- enclTy != null &&
- enclTy.getKind() != TypeKind.NONE &&
- enclTy.getKind() != TypeKind.ERROR &&
- (enclTr.getKind() == JCTree.Kind.MEMBER_SELECT ||
- enclTr.getKind() == JCTree.Kind.PARAMETERIZED_TYPE ||
- enclTr.getKind() == JCTree.Kind.ANNOTATED_TYPE)) {
- // Iterate also over the type tree, not just the type: the type is already
- // completely resolved and we cannot distinguish where the annotation
- // belongs for a nested type.
- if (enclTr.getKind() == JCTree.Kind.MEMBER_SELECT) {
- // only change encl in this case.
- enclTy = enclTy.getEnclosingType();
- enclEl = enclEl.getEnclosingElement();
- enclTr = ((JCFieldAccess)enclTr).getExpression();
- } else if (enclTr.getKind() == JCTree.Kind.PARAMETERIZED_TYPE) {
- enclTr = ((JCTypeApply)enclTr).getType();
- } else {
- // only other option because of while condition
- enclTr = ((JCAnnotatedType)enclTr).getUnderlyingType();
- }
- }
-
- /** We are trying to annotate some enclosing type,
- * but nothing more exists.
- */
- if (enclTy != null &&
- enclTy.hasTag(TypeTag.NONE)) {
- switch (onlyTypeAnnotations.size()) {
- case 0:
- // Don't issue an error if all type annotations are
- // also declaration annotations.
- // If the annotations are also declaration annotations, they are
- // illegal as type annotations but might be legal as declaration annotations.
- // The normal declaration annotation checks make sure that the use is valid.
- break;
- case 1:
- log.error(typetree.pos(), "cant.type.annotate.scoping.1",
- onlyTypeAnnotations);
- break;
- default:
- log.error(typetree.pos(), "cant.type.annotate.scoping",
- onlyTypeAnnotations);
- }
- return type;
- }
-
- // At this point we have visited the part of the nested
- // type that is written in the source code.
- // Now count from here to the actual top-level class to determine
- // the correct nesting.
-
- // The genericLocation for the annotation.
- ListBuffer<TypePathEntry> depth = new ListBuffer<>();
-
- Type topTy = enclTy;
- while (enclEl != null &&
- enclEl.getKind() != ElementKind.PACKAGE &&
- topTy != null &&
- topTy.getKind() != TypeKind.NONE &&
- topTy.getKind() != TypeKind.ERROR) {
- topTy = topTy.getEnclosingType();
- enclEl = enclEl.getEnclosingElement();
-
- if (topTy != null && topTy.getKind() != TypeKind.NONE) {
- // Only count enclosing types.
- depth = depth.append(TypePathEntry.INNER_TYPE);
- }
- }
-
- if (depth.nonEmpty()) {
- // Only need to change the annotation positions
- // if they are on an enclosed type.
- // All annotations share the same position; modify the first one.
- Attribute.TypeCompound a = annotations.get(0);
- TypeAnnotationPosition p = a.position;
- p.location = p.location.appendList(depth.toList());
- }
-
- Type ret = typeWithAnnotations(type, enclTy, annotations);
- typetree.type = ret;
- return ret;
- }
- }
-
- private JCArrayTypeTree arrayTypeTree(JCTree typetree) {
- if (typetree.getKind() == JCTree.Kind.ARRAY_TYPE) {
- return (JCArrayTypeTree) typetree;
- } else if (typetree.getKind() == JCTree.Kind.ANNOTATED_TYPE) {
- return (JCArrayTypeTree) ((JCAnnotatedType)typetree).underlyingType;
- } else {
- Assert.error("Could not determine array type from type tree: " + typetree);
- return null;
- }
- }
-
- /** Return a copy of the first type that only differs by
- * inserting the annotations to the left-most/inner-most type
- * or the type given by stopAt.
- *
- * We need the stopAt parameter to know where on a type to
- * put the annotations.
- * If we have nested classes Outer > Middle > Inner, and we
- * have the source type "@A Middle.Inner", we will invoke
- * this method with type = Outer.Middle.Inner,
- * stopAt = Middle.Inner, and annotations = @A.
- *
- * @param type The type to copy.
- * @param stopAt The type to stop at.
- * @param annotations The annotations to insert.
- * @return A copy of type that contains the annotations.
- */
- private Type typeWithAnnotations(final Type type,
- final Type stopAt,
- final List<Attribute.TypeCompound> annotations) {
- //System.err.println("typeWithAnnotations " + type + " " + annotations + " stopAt " + stopAt);
- Visitor<Type, List<TypeCompound>> visitor =
- new Type.Visitor<Type, List<Attribute.TypeCompound>>() {
- @Override
- public Type visitClassType(ClassType t, List<TypeCompound> s) {
- // assert that t.constValue() == null?
- if (t == stopAt ||
- t.getEnclosingType() == Type.noType) {
- return t.annotatedType(s);
- } else {
- ClassType ret = new ClassType(t.getEnclosingType().accept(this, s),
- t.typarams_field, t.tsym,
- t.getAnnotationMirrors());
- ret.all_interfaces_field = t.all_interfaces_field;
- ret.allparams_field = t.allparams_field;
- ret.interfaces_field = t.interfaces_field;
- ret.rank_field = t.rank_field;
- ret.supertype_field = t.supertype_field;
- return ret;
- }
- }
-
- @Override
- public Type visitWildcardType(WildcardType t, List<TypeCompound> s) {
- return t.annotatedType(s);
- }
-
- @Override
- public Type visitArrayType(ArrayType t, List<TypeCompound> s) {
- ArrayType ret = new ArrayType(t.elemtype.accept(this, s), t.tsym,
- t.getAnnotationMirrors());
- return ret;
- }
-
- @Override
- public Type visitMethodType(MethodType t, List<TypeCompound> s) {
- // Impossible?
- return t;
- }
-
- @Override
- public Type visitPackageType(PackageType t, List<TypeCompound> s) {
- // Impossible?
- return t;
- }
-
- @Override
- public Type visitTypeVar(TypeVar t, List<TypeCompound> s) {
- return t.annotatedType(s);
- }
-
- @Override
- public Type visitCapturedType(CapturedType t, List<TypeCompound> s) {
- return t.annotatedType(s);
- }
-
- @Override
- public Type visitForAll(ForAll t, List<TypeCompound> s) {
- // Impossible?
- return t;
- }
-
- @Override
- public Type visitUndetVar(UndetVar t, List<TypeCompound> s) {
- // Impossible?
- return t;
- }
-
- @Override
- public Type visitErrorType(ErrorType t, List<TypeCompound> s) {
- return t.annotatedType(s);
- }
-
- @Override
- public Type visitType(Type t, List<TypeCompound> s) {
- return t.annotatedType(s);
- }
- };
-
- return type.accept(visitor, annotations);
- }
-
- private Attribute.TypeCompound toTypeCompound(Attribute.Compound a, TypeAnnotationPosition p) {
- // It is safe to alias the position.
- return new Attribute.TypeCompound(a, p);
- }
-
-
- /* This is the beginning of the second part of organizing
- * type annotations: determine the type annotation positions.
- */
-
- // This method is considered deprecated, and will be removed
- // in the near future. Don't use it for anything new.
- private TypeAnnotationPosition
- resolveFrame(JCTree tree,
- JCTree frame,
- List<JCTree> path,
- JCLambda currentLambda,
- int outer_type_index,
- ListBuffer<TypePathEntry> location) {
- /*
- System.out.println("Resolving tree: " + tree + " kind: " + tree.getKind());
- System.out.println(" Framing tree: " + frame + " kind: " + frame.getKind());
- */
-
- // Note that p.offset is set in
- // com.sun.tools.javac.jvm.Gen.setTypeAnnotationPositions(int)
-
- switch (frame.getKind()) {
- case TYPE_CAST:
- return TypeAnnotationPosition.typeCast(location.toList(),
- currentLambda,
- outer_type_index,
- frame.pos);
-
- case INSTANCE_OF:
- return TypeAnnotationPosition.instanceOf(location.toList(),
- currentLambda,
- frame.pos);
-
- case NEW_CLASS:
- final JCNewClass frameNewClass = (JCNewClass) frame;
- if (frameNewClass.def != null) {
- // Special handling for anonymous class instantiations
- final JCClassDecl frameClassDecl = frameNewClass.def;
- if (frameClassDecl.extending == tree) {
- return TypeAnnotationPosition
- .classExtends(location.toList(), currentLambda,
- frame.pos);
- } else if (frameClassDecl.implementing.contains(tree)) {
- final int type_index =
- frameClassDecl.implementing.indexOf(tree);
- return TypeAnnotationPosition
- .classExtends(location.toList(), currentLambda,
- type_index, frame.pos);
- } else {
- // In contrast to CLASS below, typarams cannot occur here.
- throw new AssertionError("Could not determine position of tree " + tree +
- " within frame " + frame);
- }
- } else if (frameNewClass.typeargs.contains(tree)) {
- final int type_index =
- frameNewClass.typeargs.indexOf(tree);
- return TypeAnnotationPosition
- .constructorInvocationTypeArg(location.toList(),
- currentLambda,
- type_index,
- frame.pos);
- } else {
- return TypeAnnotationPosition
- .newObj(location.toList(), currentLambda,
- frame.pos);
- }
-
- case NEW_ARRAY:
- return TypeAnnotationPosition
- .newObj(location.toList(), currentLambda, frame.pos);
-
- case ANNOTATION_TYPE:
- case CLASS:
- case ENUM:
- case INTERFACE:
- if (((JCClassDecl)frame).extending == tree) {
- return TypeAnnotationPosition
- .classExtends(location.toList(), currentLambda,
- frame.pos);
- } else if (((JCClassDecl)frame).implementing.contains(tree)) {
- final int type_index =
- ((JCClassDecl)frame).implementing.indexOf(tree);
- return TypeAnnotationPosition
- .classExtends(location.toList(), currentLambda,
- type_index, frame.pos);
- } else if (((JCClassDecl)frame).typarams.contains(tree)) {
- final int parameter_index =
- ((JCClassDecl)frame).typarams.indexOf(tree);
- return TypeAnnotationPosition
- .typeParameter(location.toList(), currentLambda,
- parameter_index, frame.pos);
- } else {
- throw new AssertionError("Could not determine position of tree " +
- tree + " within frame " + frame);
- }
-
- case METHOD: {
- final JCMethodDecl frameMethod = (JCMethodDecl) frame;
- if (frameMethod.thrown.contains(tree)) {
- final int type_index = frameMethod.thrown.indexOf(tree);
- return TypeAnnotationPosition
- .methodThrows(location.toList(), currentLambda,
- type_index, frame.pos);
- } else if (frameMethod.restype == tree) {
- return TypeAnnotationPosition
- .methodReturn(location.toList(), currentLambda,
- frame.pos);
- } else if (frameMethod.typarams.contains(tree)) {
- final int parameter_index =
- frameMethod.typarams.indexOf(tree);
- return TypeAnnotationPosition
- .methodTypeParameter(location.toList(),
- currentLambda,
- parameter_index, frame.pos);
- } else {
- throw new AssertionError("Could not determine position of tree " + tree +
- " within frame " + frame);
- }
- }
-
- case PARAMETERIZED_TYPE: {
- List<JCTree> newPath = path.tail;
-
- if (((JCTypeApply)frame).clazz == tree) {
- // generic: RAW; noop
- } else if (((JCTypeApply)frame).arguments.contains(tree)) {
- JCTypeApply taframe = (JCTypeApply) frame;
- int arg = taframe.arguments.indexOf(tree);
- location = location.prepend(
- new TypePathEntry(TypePathEntryKind.TYPE_ARGUMENT,
- arg));
-
- Type typeToUse;
- if (newPath.tail != null &&
- newPath.tail.head.hasTag(Tag.NEWCLASS)) {
- // If we are within an anonymous class
- // instantiation, use its type, because it
- // contains a correctly nested type.
- typeToUse = newPath.tail.head.type;
- } else {
- typeToUse = taframe.type;
- }
-
- location = locateNestedTypes(typeToUse, location);
- } else {
- throw new AssertionError("Could not determine type argument position of tree " + tree +
- " within frame " + frame);
- }
-
- return resolveFrame(newPath.head, newPath.tail.head,
- newPath, currentLambda,
- outer_type_index, location);
- }
-
- case MEMBER_REFERENCE: {
- JCMemberReference mrframe = (JCMemberReference) frame;
-
- if (mrframe.expr == tree) {
- switch (mrframe.mode) {
- case INVOKE:
- return TypeAnnotationPosition
- .methodRef(location.toList(), currentLambda,
- frame.pos);
- case NEW:
- return TypeAnnotationPosition
- .constructorRef(location.toList(),
- currentLambda,
- frame.pos);
- default:
- throw new AssertionError("Unknown method reference mode " + mrframe.mode +
- " for tree " + tree + " within frame " + frame);
- }
- } else if (mrframe.typeargs != null &&
- mrframe.typeargs.contains(tree)) {
- final int type_index = mrframe.typeargs.indexOf(tree);
- switch (mrframe.mode) {
- case INVOKE:
- return TypeAnnotationPosition
- .methodRefTypeArg(location.toList(),
- currentLambda,
- type_index, frame.pos);
- case NEW:
- return TypeAnnotationPosition
- .constructorRefTypeArg(location.toList(),
- currentLambda,
- type_index, frame.pos);
- default:
- throw new AssertionError("Unknown method reference mode " + mrframe.mode +
- " for tree " + tree + " within frame " + frame);
- }
- } else {
- throw new AssertionError("Could not determine type argument position of tree " + tree +
- " within frame " + frame);
- }
- }
-
- case ARRAY_TYPE: {
- location = location.prepend(TypePathEntry.ARRAY);
- List<JCTree> newPath = path.tail;
- while (true) {
- JCTree npHead = newPath.tail.head;
- if (npHead.hasTag(JCTree.Tag.TYPEARRAY)) {
- newPath = newPath.tail;
- location = location.prepend(TypePathEntry.ARRAY);
- } else if (npHead.hasTag(JCTree.Tag.ANNOTATED_TYPE)) {
- newPath = newPath.tail;
- } else {
- break;
- }
- }
- return resolveFrame(newPath.head, newPath.tail.head,
- newPath, currentLambda,
- outer_type_index, location);
- }
-
- case TYPE_PARAMETER:
- if (path.tail.tail.head.hasTag(JCTree.Tag.CLASSDEF)) {
- final JCClassDecl clazz =
- (JCClassDecl)path.tail.tail.head;
- final int parameter_index =
- clazz.typarams.indexOf(path.tail.head);
- final int bound_index =
- ((JCTypeParameter)frame).bounds.get(0)
- .type.isInterface() ?
- ((JCTypeParameter)frame).bounds.indexOf(tree) + 1:
- ((JCTypeParameter)frame).bounds.indexOf(tree);
- return TypeAnnotationPosition
- .typeParameterBound(location.toList(),
- currentLambda,
- parameter_index, bound_index,
- frame.pos);
- } else if (path.tail.tail.head.hasTag(JCTree.Tag.METHODDEF)) {
- final JCMethodDecl method =
- (JCMethodDecl)path.tail.tail.head;
- final int parameter_index =
- method.typarams.indexOf(path.tail.head);
- final int bound_index =
- ((JCTypeParameter)frame).bounds.get(0)
- .type.isInterface() ?
- ((JCTypeParameter)frame).bounds.indexOf(tree) + 1:
- ((JCTypeParameter)frame).bounds.indexOf(tree);
- return TypeAnnotationPosition
- .methodTypeParameterBound(location.toList(),
- currentLambda,
- parameter_index,
- bound_index,
- frame.pos);
- } else {
- throw new AssertionError("Could not determine position of tree " + tree +
- " within frame " + frame);
- }
-
- case VARIABLE:
- VarSymbol v = ((JCVariableDecl)frame).sym;
- if (v.getKind() != ElementKind.FIELD) {
- v.owner.appendUniqueTypeAttributes(v.getRawTypeAttributes());
- }
- switch (v.getKind()) {
- case LOCAL_VARIABLE:
- return TypeAnnotationPosition
- .localVariable(location.toList(), currentLambda,
- frame.pos);
- case FIELD:
- return TypeAnnotationPosition.field(location.toList(),
- currentLambda,
- frame.pos);
- case PARAMETER:
- if (v.getQualifiedName().equals(names._this)) {
- return TypeAnnotationPosition
- .methodReceiver(location.toList(),
- currentLambda,
- frame.pos);
- } else {
- final int parameter_index =
- methodParamIndex(path, frame);
- return TypeAnnotationPosition
- .methodParameter(location.toList(),
- currentLambda,
- parameter_index,
- frame.pos);
- }
- case EXCEPTION_PARAMETER:
- return TypeAnnotationPosition
- .exceptionParameter(location.toList(),
- currentLambda,
- frame.pos);
- case RESOURCE_VARIABLE:
- return TypeAnnotationPosition
- .resourceVariable(location.toList(),
- currentLambda,
- frame.pos);
- default:
- throw new AssertionError("Found unexpected type annotation for variable: " + v + " with kind: " + v.getKind());
- }
-
- case ANNOTATED_TYPE: {
- if (frame == tree) {
- // This is only true for the first annotated type we see.
- // For any other annotated types along the path, we do
- // not care about inner types.
- JCAnnotatedType atypetree = (JCAnnotatedType) frame;
- final Type utype = atypetree.underlyingType.type;
- Assert.checkNonNull(utype);
- Symbol tsym = utype.tsym;
- if (tsym.getKind().equals(ElementKind.TYPE_PARAMETER) ||
- utype.getKind().equals(TypeKind.WILDCARD) ||
- utype.getKind().equals(TypeKind.ARRAY)) {
- // Type parameters, wildcards, and arrays have the declaring
- // class/method as enclosing elements.
- // There is actually nothing to do for them.
- } else {
- location = locateNestedTypes(utype, location);
- }
- }
- List<JCTree> newPath = path.tail;
- return resolveFrame(newPath.head, newPath.tail.head,
- newPath, currentLambda,
- outer_type_index, location);
- }
-
- case UNION_TYPE: {
- List<JCTree> newPath = path.tail;
- return resolveFrame(newPath.head, newPath.tail.head,
- newPath, currentLambda,
- outer_type_index, location);
- }
-
- case INTERSECTION_TYPE: {
- JCTypeIntersection isect = (JCTypeIntersection)frame;
- final List<JCTree> newPath = path.tail;
- return resolveFrame(newPath.head, newPath.tail.head,
- newPath, currentLambda,
- isect.bounds.indexOf(tree), location);
- }
-
- case METHOD_INVOCATION: {
- JCMethodInvocation invocation = (JCMethodInvocation)frame;
- if (!invocation.typeargs.contains(tree)) {
- throw new AssertionError("{" + tree + "} is not an argument in the invocation: " + invocation);
- }
- MethodSymbol exsym = (MethodSymbol) TreeInfo.symbol(invocation.getMethodSelect());
- final int type_index = invocation.typeargs.indexOf(tree);
- if (exsym == null) {
- throw new AssertionError("could not determine symbol for {" + invocation + "}");
- } else if (exsym.isConstructor()) {
- return TypeAnnotationPosition
- .constructorInvocationTypeArg(location.toList(),
- currentLambda,
- type_index,
- invocation.pos);
- } else {
- return TypeAnnotationPosition
- .methodInvocationTypeArg(location.toList(),
- currentLambda,
- type_index,
- invocation.pos);
- }
- }
-
- case EXTENDS_WILDCARD:
- case SUPER_WILDCARD: {
- // Annotations in wildcard bounds
- final List<JCTree> newPath = path.tail;
- return resolveFrame(newPath.head, newPath.tail.head,
- newPath, currentLambda,
- outer_type_index,
- location.prepend(TypePathEntry.WILDCARD));
- }
-
- case MEMBER_SELECT: {
- final List<JCTree> newPath = path.tail;
- return resolveFrame(newPath.head, newPath.tail.head,
- newPath, currentLambda,
- outer_type_index, location);
- }
-
- default:
- throw new AssertionError("Unresolved frame: " + frame +
- " of kind: " + frame.getKind() +
- "\n Looking for tree: " + tree);
- }
- }
-
- private ListBuffer<TypePathEntry>
- locateNestedTypes(Type type,
- ListBuffer<TypePathEntry> depth) {
- Type encl = type.getEnclosingType();
- while (encl != null &&
- encl.getKind() != TypeKind.NONE &&
- encl.getKind() != TypeKind.ERROR) {
- depth = depth.prepend(TypePathEntry.INNER_TYPE);
- encl = encl.getEnclosingType();
- }
- return depth;
- }
-
- private int methodParamIndex(List<JCTree> path, JCTree param) {
- List<JCTree> curr = path;
- while (curr.head.getTag() != Tag.METHODDEF &&
- curr.head.getTag() != Tag.LAMBDA) {
- curr = curr.tail;
- }
- if (curr.head.getTag() == Tag.METHODDEF) {
- JCMethodDecl method = (JCMethodDecl)curr.head;
- return method.params.indexOf(param);
- } else if (curr.head.getTag() == Tag.LAMBDA) {
- JCLambda lambda = (JCLambda)curr.head;
- return lambda.params.indexOf(param);
- } else {
- Assert.error("methodParamIndex expected to find method or lambda for param: " + param);
- return -1;
- }
- }
-
- // Each class (including enclosed inner classes) is visited separately.
- // This flag is used to prevent from visiting inner classes.
- private boolean isInClass = false;
-
- @Override
- public void visitClassDef(JCClassDecl tree) {
- if (isInClass)
- return;
- isInClass = true;
-
- if (sigOnly) {
- scan(tree.mods);
- scan(tree.typarams);
- scan(tree.extending);
- scan(tree.implementing);
- }
- scan(tree.defs);
- }
-
- /**
- * Resolve declaration vs. type annotations in methods and
- * then determine the positions.
- */
- @Override
- public void visitMethodDef(final JCMethodDecl tree) {
- if (tree.sym == null) {
- Assert.error("Visiting tree node before memberEnter");
- }
- if (sigOnly) {
- if (!tree.mods.annotations.isEmpty()) {
- if (tree.sym.isConstructor()) {
- final TypeAnnotationPosition pos =
- TypeAnnotationPosition.methodReturn(tree.pos);
- // Use null to mark that the annotations go
- // with the symbol.
- separateAnnotationsKinds(tree, null, tree.sym, pos);
- } else {
- final TypeAnnotationPosition pos =
- TypeAnnotationPosition.methodReturn(tree.restype.pos);
- separateAnnotationsKinds(tree.restype,
- tree.sym.type.getReturnType(),
- tree.sym, pos);
- }
- }
- if (tree.recvparam != null && tree.recvparam.sym != null &&
- !tree.recvparam.mods.annotations.isEmpty()) {
- // Nothing to do for separateAnnotationsKinds if
- // there are no annotations of either kind.
- // TODO: make sure there are no declaration annotations.
- final TypeAnnotationPosition pos =
- TypeAnnotationPosition.methodReceiver(tree.recvparam.vartype.pos);
- separateAnnotationsKinds(tree.recvparam.vartype,
- tree.recvparam.sym.type,
- tree.recvparam.sym, pos);
- }
- int i = 0;
- for (JCVariableDecl param : tree.params) {
- if (!param.mods.annotations.isEmpty()) {
- // Nothing to do for separateAnnotationsKinds if
- // there are no annotations of either kind.
- final TypeAnnotationPosition pos =
- TypeAnnotationPosition.methodParameter(i, param.vartype.pos);
- separateAnnotationsKinds(param.vartype,
- param.sym.type,
- param.sym, pos);
- }
- ++i;
- }
- }
-
- push(tree);
- // super.visitMethodDef(tree);
- if (sigOnly) {
- scan(tree.mods);
- scan(tree.restype);
- scan(tree.typarams);
- scan(tree.recvparam);
- scan(tree.params);
- scan(tree.thrown);
- } else {
- scan(tree.defaultValue);
- scan(tree.body);
- }
- pop();
- }
-
- /* Store a reference to the current lambda expression, to
- * be used by all type annotations within this expression.
- */
- private JCLambda currentLambda = null;
-
- public void visitLambda(JCLambda tree) {
- JCLambda prevLambda = currentLambda;
- try {
- currentLambda = tree;
-
- int i = 0;
- for (JCVariableDecl param : tree.params) {
- if (!param.mods.annotations.isEmpty()) {
- // Nothing to do for separateAnnotationsKinds if
- // there are no annotations of either kind.
- final TypeAnnotationPosition pos =
- TypeAnnotationPosition.methodParameter(tree, i,
- param.vartype.pos);
- separateAnnotationsKinds(param.vartype, param.sym.type, param.sym, pos);
- }
- ++i;
- }
-
- push(tree);
- scan(tree.body);
- scan(tree.params);
- pop();
- } finally {
- currentLambda = prevLambda;
- }
- }
-
- /**
- * Resolve declaration vs. type annotations in variable declarations and
- * then determine the positions.
- */
- @Override
- public void visitVarDef(final JCVariableDecl tree) {
- if (tree.mods.annotations.isEmpty()) {
- // Nothing to do for separateAnnotationsKinds if
- // there are no annotations of either kind.
- } else if (tree.sym == null) {
- Assert.error("Visiting tree node before memberEnter");
- } else if (tree.sym.getKind() == ElementKind.PARAMETER) {
- // Parameters are handled in visitMethodDef or visitLambda.
- } else if (tree.sym.getKind() == ElementKind.FIELD) {
- if (sigOnly) {
- TypeAnnotationPosition pos =
- TypeAnnotationPosition.field(tree.pos);
- separateAnnotationsKinds(tree.vartype, tree.sym.type, tree.sym, pos);
- }
- } else if (tree.sym.getKind() == ElementKind.LOCAL_VARIABLE) {
- final TypeAnnotationPosition pos =
- TypeAnnotationPosition.localVariable(currentLambda,
- tree.pos);
- separateAnnotationsKinds(tree.vartype, tree.sym.type, tree.sym, pos);
- } else if (tree.sym.getKind() == ElementKind.EXCEPTION_PARAMETER) {
- final TypeAnnotationPosition pos =
- TypeAnnotationPosition.exceptionParameter(currentLambda,
- tree.pos);
- separateAnnotationsKinds(tree.vartype, tree.sym.type, tree.sym, pos);
- } else if (tree.sym.getKind() == ElementKind.RESOURCE_VARIABLE) {
- final TypeAnnotationPosition pos =
- TypeAnnotationPosition.resourceVariable(currentLambda,
- tree.pos);
- separateAnnotationsKinds(tree.vartype, tree.sym.type, tree.sym, pos);
- } else if (tree.sym.getKind() == ElementKind.ENUM_CONSTANT) {
- // No type annotations can occur here.
- } else {
- // There is nothing else in a variable declaration that needs separation.
- Assert.error("Unhandled variable kind: " + tree + " of kind: " + tree.sym.getKind());
- }
-
- push(tree);
- // super.visitVarDef(tree);
- scan(tree.mods);
- scan(tree.vartype);
- if (!sigOnly) {
- scan(tree.init);
- }
- pop();
- }
-
- @Override
- public void visitBlock(JCBlock tree) {
- // Do not descend into top-level blocks when only interested
- // in the signature.
- if (!sigOnly) {
- scan(tree.stats);
- }
- }
-
- @Override
- public void visitAnnotatedType(JCAnnotatedType tree) {
- push(tree);
- findPosition(tree, tree, tree.annotations);
- pop();
- super.visitAnnotatedType(tree);
- }
-
- @Override
- public void visitTypeParameter(JCTypeParameter tree) {
- findPosition(tree, peek2(), tree.annotations);
- super.visitTypeParameter(tree);
- }
-
- private void copyNewClassAnnotationsToOwner(JCNewClass tree) {
- Symbol sym = tree.def.sym;
- final TypeAnnotationPosition pos =
- TypeAnnotationPosition.newObj(tree.pos);
- ListBuffer<Attribute.TypeCompound> newattrs = new ListBuffer<>();
-
- for (Attribute.TypeCompound old : sym.getRawTypeAttributes()) {
- newattrs.append(new Attribute.TypeCompound(old.type, old.values,
- pos));
- }
-
- sym.owner.appendUniqueTypeAttributes(newattrs.toList());
- }
-
- @Override
- public void visitNewClass(JCNewClass tree) {
- if (tree.def != null &&
- !tree.def.mods.annotations.isEmpty()) {
- JCClassDecl classdecl = tree.def;
- TypeAnnotationPosition pos;
-
- if (classdecl.extending == tree.clazz) {
- pos = TypeAnnotationPosition.classExtends(tree.pos);
- } else if (classdecl.implementing.contains(tree.clazz)) {
- final int index = classdecl.implementing.indexOf(tree.clazz);
- pos = TypeAnnotationPosition.classExtends(index, tree.pos);
- } else {
- // In contrast to CLASS elsewhere, typarams cannot occur here.
- throw new AssertionError("Could not determine position of tree " + tree);
- }
- Type before = classdecl.sym.type;
- separateAnnotationsKinds(classdecl, tree.clazz.type, classdecl.sym, pos);
- copyNewClassAnnotationsToOwner(tree);
- // classdecl.sym.type now contains an annotated type, which
- // is not what we want there.
- // TODO: should we put this type somewhere in the superclass/interface?
- classdecl.sym.type = before;
- }
-
- scan(tree.encl);
- scan(tree.typeargs);
- scan(tree.clazz);
- scan(tree.args);
-
- // The class body will already be scanned.
- // scan(tree.def);
- }
-
- @Override
- public void visitNewArray(JCNewArray tree) {
- findPosition(tree, tree, tree.annotations);
- int dimAnnosCount = tree.dimAnnotations.size();
- ListBuffer<TypePathEntry> depth = new ListBuffer<>();
-
- // handle annotations associated with dimensions
- for (int i = 0; i < dimAnnosCount; ++i) {
- ListBuffer<TypePathEntry> location =
- new ListBuffer<TypePathEntry>();
- if (i != 0) {
- depth = depth.append(TypePathEntry.ARRAY);
- location = location.appendList(depth.toList());
- }
- final TypeAnnotationPosition p =
- TypeAnnotationPosition.newObj(location.toList(),
- currentLambda,
- tree.pos);
-
- setTypeAnnotationPos(tree.dimAnnotations.get(i), p);
- }
-
- // handle "free" annotations
- // int i = dimAnnosCount == 0 ? 0 : dimAnnosCount - 1;
- // TODO: is depth.size == i here?
- JCExpression elemType = tree.elemtype;
- depth = depth.append(TypePathEntry.ARRAY);
- while (elemType != null) {
- if (elemType.hasTag(JCTree.Tag.ANNOTATED_TYPE)) {
- JCAnnotatedType at = (JCAnnotatedType)elemType;
- final ListBuffer<TypePathEntry> locationbuf =
- locateNestedTypes(elemType.type,
- new ListBuffer<TypePathEntry>());
- final List<TypePathEntry> location =
- locationbuf.toList().prependList(depth.toList());
- final TypeAnnotationPosition p =
- TypeAnnotationPosition.newObj(location, currentLambda,
- tree.pos);
- setTypeAnnotationPos(at.annotations, p);
- elemType = at.underlyingType;
- } else if (elemType.hasTag(JCTree.Tag.TYPEARRAY)) {
- depth = depth.append(TypePathEntry.ARRAY);
- elemType = ((JCArrayTypeTree)elemType).elemtype;
- } else if (elemType.hasTag(JCTree.Tag.SELECT)) {
- elemType = ((JCFieldAccess)elemType).selected;
- } else {
- break;
- }
- }
- scan(tree.elems);
- }
-
- private void findPosition(JCTree tree, JCTree frame, List<JCAnnotation> annotations) {
- if (!annotations.isEmpty()) {
- /*
- System.err.println("Finding pos for: " + annotations);
- System.err.println(" tree: " + tree + " kind: " + tree.getKind());
- System.err.println(" frame: " + frame + " kind: " + frame.getKind());
- */
- final TypeAnnotationPosition p =
- resolveFrame(tree, frame, frames.toList(), currentLambda, 0,
- new ListBuffer<TypePathEntry>());
- setTypeAnnotationPos(annotations, p);
- }
- }
-
- private void setTypeAnnotationPos(List<JCAnnotation> annotations,
- TypeAnnotationPosition position) {
- for (JCAnnotation anno : annotations) {
- // attribute might be null during DeferredAttr;
- // we will be back later.
- if (anno.attribute != null) {
- ((Attribute.TypeCompound) anno.attribute).position = position;
- }
- }
- }
-
- @Override
- public String toString() {
- return super.toString() + ": sigOnly: " + sigOnly;
- }
- }
-}
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Wed Jun 18 13:14:15 2014 -0700
@@ -1212,17 +1212,38 @@
TypeRelation isSameTypeLoose = new LooseSameTypeVisitor();
private class LooseSameTypeVisitor extends SameTypeVisitor {
+
+ /** cache of the type-variable pairs being (recursively) tested. */
+ private Set<TypePair> cache = new HashSet<>();
+
@Override
boolean sameTypeVars(TypeVar tv1, TypeVar tv2) {
- return tv1.tsym == tv2.tsym && visit(tv1.getUpperBound(), tv2.getUpperBound());
+ return tv1.tsym == tv2.tsym && checkSameBounds(tv1, tv2);
}
@Override
protected boolean containsTypes(List<Type> ts1, List<Type> ts2) {
return containsTypeEquivalent(ts1, ts2);
}
- }
-
- /**
+
+ /**
+ * Since type-variable bounds can be recursive, we need to protect against
+ * infinite loops - where the same bounds are checked over and over recursively.
+ */
+ private boolean checkSameBounds(TypeVar tv1, TypeVar tv2) {
+ TypePair p = new TypePair(tv1, tv2, true);
+ if (cache.add(p)) {
+ try {
+ return visit(tv1.getUpperBound(), tv2.getUpperBound());
+ } finally {
+ cache.remove(p);
+ }
+ } else {
+ return false;
+ }
+ }
+ };
+
+ /**
* Strict type-equality relation - type variables are considered
* equals if they share the same object identity.
*/
@@ -3396,9 +3417,16 @@
class TypePair {
final Type t1;
final Type t2;
+ boolean strict;
+
TypePair(Type t1, Type t2) {
+ this(t1, t2, false);
+ }
+
+ TypePair(Type t1, Type t2, boolean strict) {
this.t1 = t1;
this.t2 = t2;
+ this.strict = strict;
}
@Override
public int hashCode() {
@@ -3409,8 +3437,8 @@
if (!(obj instanceof TypePair))
return false;
TypePair typePair = (TypePair)obj;
- return isSameType(t1, typePair.t1)
- && isSameType(t2, typePair.t2);
+ return isSameType(t1, typePair.t1, strict)
+ && isSameType(t2, typePair.t2, strict);
}
}
Set<TypePair> mergeCache = new HashSet<>();
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Annotate.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Annotate.java Wed Jun 18 13:14:15 2014 -0700
@@ -29,12 +29,15 @@
import java.util.LinkedHashMap;
import java.util.Map;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.type.TypeKind;
import javax.tools.JavaFileObject;
import com.sun.tools.javac.util.*;
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
import com.sun.tools.javac.code.*;
import com.sun.tools.javac.code.Symbol.*;
+import com.sun.tools.javac.code.TypeAnnotationPosition.*;
import com.sun.tools.javac.tree.*;
import com.sun.tools.javac.tree.JCTree.*;
@@ -259,36 +262,78 @@
* Compute an attribute from its annotation.
*********************************************************************/
- /** Process a single compound annotation, returning its
- * Attribute. Used from MemberEnter for attaching the attributes
- * to the annotated symbol.
+ /**
+ * Enter (and attribute) a single regular annotation, returning
+ * its Attribute. We give these annotations a position in case we
+ * end up creating a type annotation from using toTypeCompound.
+ *
+ * In some cases, namely on annotations that can never be type
+ * annotations (like package annotations), the position can be
+ * null; however, if this annotation is in a place where it might
+ * possibly denote a type annotation, it will have a non-null
+ * position.
+ *
+ * @param a Annotation to attribute.
+ * @param expected Expected annotation type.
+ * @param env The environment.
+ * @param position The type annotation position this will have if
+ * it's converted to a type annotation.
+ * @return The Attribute.Compound representing this annotation.
*/
Attribute.Compound enterAnnotation(JCAnnotation a,
Type expected,
- Env<AttrContext> env) {
- List<Pair<MethodSymbol,Attribute>> elems =
- enterAttributeValues(a, expected, env);
- Attribute.Compound ac = new Attribute.Compound(a.type, elems);
+ Env<AttrContext> env,
+ TypeAnnotationPosition position) {
+ List<Pair<MethodSymbol,Attribute>> buf =
+ enterAttributeValues(a, expected, env, position);
+ Attribute.Compound ac =
+ new Attribute.Compound(a.type, buf, position);
a.attribute = ac;
return ac;
}
+ /**
+ * Enter (and attribute) a single type annotation, returning its
+ * Attribute.
+ *
+ * Things are a bit complicated, though, because a single source
+ * annotation (JCAnnotation) might give rise to several bytecode
+ * annotations (Attribute.TypeCompound), but we can only associate
+ * a source annotation with one bytecode annotation. Thus, we
+ * have to distinguish between the "primary" (which will be stored
+ * to the JCAnnotation) and "secondary" (which won't) annotations.
+ * The primary place this gets used is for anonymous classes.
+ *
+ * The annotations we generate for the new instruction are the
+ * primary, and the ones we generate for the class are the
+ * secondaries. (Note: this choice is arbitrary, and it does not
+ * appear to cause any problems if these roles are reversed)
+ *
+ * @param a The annotation to attribute.
+ * @param expected The expected annotation type.
+ * @param env The environment.
+ * @param position The type annotation position to give the type
+ * annotation.
+ * @param secondaryAttr Whether or not this is a secondary (ie
+ * will ignore the .attribute field on a).
+ * @return The Attribute.TypeCompound representing the annotation.
+ */
Attribute.TypeCompound enterTypeAnnotation(JCAnnotation a,
Type expected,
- Env<AttrContext> env) {
- List<Pair<MethodSymbol,Attribute>> elems =
- enterAttributeValues(a, expected, env);
-
- if (a.attribute == null || !(a.attribute instanceof Attribute.TypeCompound)) {
- // Create a new TypeCompound
+ Env<AttrContext> env,
+ TypeAnnotationPosition position,
+ boolean secondaryAttr) {
+ List<Pair<MethodSymbol,Attribute>> buf =
+ enterAttributeValues(a, expected, env, position);
+ // Secondary attr means we do not set the .attribute field of
+ // the JCAnnotation, nor do we pay attention to it.
+ if (!secondaryAttr || a.attribute == null ||
+ !(a.attribute instanceof Attribute.TypeCompound)) {
+ // Create a new TypeCompound
Attribute.TypeCompound tc =
- new Attribute.TypeCompound(a.type, elems,
- // TODO: Eventually, we will get rid of this use of
- // unknown, because we'll get a position from
- // MemberEnter (task 8027262).
- TypeAnnotationPosition.unknown);
+ new Attribute.TypeCompound(a.type, buf, position);
a.attribute = tc;
return tc;
} else {
@@ -297,10 +342,12 @@
}
}
+ // Attribute all the annotation's values.
private List<Pair<MethodSymbol,Attribute>>
enterAttributeValues(JCAnnotation a,
Type expected,
- Env<AttrContext> env) {
+ Env<AttrContext> env,
+ TypeAnnotationPosition position) {
// The annotation might have had its type attributed (but not
// checked) by attr.attribAnnotationTypes during MemberEnter,
// in which case we do not need to do it again.
@@ -325,13 +372,13 @@
JCExpression t = tl.head;
if (!t.hasTag(ASSIGN)) {
log.error(t.pos(), "annotation.value.must.be.name.value");
- enterAttributeValue(t.type = syms.errType, t, env);
+ enterAttributeValue(t.type = syms.errType, t, env, position);
continue;
}
JCAssign assign = (JCAssign)t;
if (!assign.lhs.hasTag(IDENT)) {
log.error(t.pos(), "annotation.value.must.be.name.value");
- enterAttributeValue(t.type = syms.errType, t, env);
+ enterAttributeValue(t.type = syms.errType, t, env, position);
continue;
}
JCIdent left = (JCIdent)assign.lhs;
@@ -346,7 +393,7 @@
if (method.owner != a.type.tsym && !isError)
log.error(left.pos(), "no.annotation.member", left.name, a.type);
Type result = method.type.getReturnType();
- Attribute value = enterAttributeValue(result, assign.rhs, env);
+ Attribute value = enterAttributeValue(result, assign.rhs, env, position);
if (!method.type.isErroneous())
buf.append(new Pair<>((MethodSymbol)method, value));
t.type = result;
@@ -357,6 +404,13 @@
Attribute enterAttributeValue(Type expected,
JCExpression tree,
Env<AttrContext> env) {
+ return enterAttributeValue(expected, tree, env, null);
+ }
+
+ Attribute enterAttributeValue(Type expected,
+ JCExpression tree,
+ Env<AttrContext> env,
+ TypeAnnotationPosition position) {
//first, try completing the attribution value sym - if a completion
//error is thrown, we should recover gracefully, and display an
//ordinary resolution diagnostic.
@@ -378,8 +432,7 @@
ListBuffer<Attribute> buf = new ListBuffer<>();
for (List<JCExpression> l = na.elems; l.nonEmpty(); l=l.tail) {
buf.append(enterAttributeValue(types.elemtype(expected),
- l.head,
- env));
+ l.head, env, position));
}
na.type = expected;
return new Attribute.
@@ -393,15 +446,13 @@
log.error(na.elemtype.pos(), "new.not.allowed.in.annotation");
}
for (List<JCExpression> l = na.elems; l.nonEmpty(); l=l.tail) {
- enterAttributeValue(syms.errType,
- l.head,
- env);
+ enterAttributeValue(syms.errType, l.head, env, position);
}
return new Attribute.Error(syms.errType);
}
if ((expected.tsym.flags() & Flags.ANNOTATION) != 0) {
if (tree.hasTag(ANNOTATION)) {
- return enterAnnotation((JCAnnotation)tree, expected, env);
+ return enterAnnotation((JCAnnotation)tree, expected, env, position);
} else {
log.error(tree.pos(), "annotation.value.must.be.annotation");
expected = syms.errType;
@@ -410,7 +461,7 @@
if (tree.hasTag(ANNOTATION)) { //error recovery
if (!expected.isErroneous())
log.error(tree.pos(), "annotation.not.valid.for.type", expected);
- enterAnnotation((JCAnnotation)tree, syms.errType, env);
+ enterAnnotation((JCAnnotation)tree, syms.errType, env, position);
return new Attribute.Error(((JCAnnotation)tree).annotationType.type);
}
if (expected.isPrimitive() ||
@@ -477,9 +528,11 @@
* synthesized container annotation or null IFF all repeating
* annotation are invalid. This method reports errors/warnings.
*/
- private <T extends Attribute.Compound> T processRepeatedAnnotations(List<T> annotations,
+ private <T extends Attribute.Compound> T processRepeatedAnnotations(
+ List<T> annotations,
AnnotationContext<T> ctx,
- Symbol on) {
+ Symbol on,
+ TypeAnnotationPosition position) {
T firstOccurrence = annotations.head;
List<Attribute> repeated = List.nil();
Type origAnnoType = null;
@@ -491,12 +544,8 @@
!annotations.tail.isEmpty()); // i.e. size() > 1
int count = 0;
- for (List<T> al = annotations;
- !al.isEmpty();
- al = al.tail)
- {
+ for (List<T> al = annotations; !al.isEmpty(); al = al.tail) {
count++;
-
// There must be more than a single anno in the annotation list
Assert.check(count > 1 || !al.tail.isEmpty());
@@ -536,26 +585,16 @@
new Pair<MethodSymbol, Attribute>(containerValueSymbol,
new Attribute.Array(arrayOfOrigAnnoType, repeated));
if (ctx.isTypeCompound) {
- /* TODO: the following code would be cleaner:
- Attribute.TypeCompound at = new Attribute.TypeCompound(targetContainerType, List.of(p),
- ((Attribute.TypeCompound)annotations.head).position);
- JCTypeAnnotation annoTree = m.TypeAnnotation(at);
- at = enterTypeAnnotation(annoTree, targetContainerType, ctx.env);
- */
- // However, we directly construct the TypeCompound to keep the
- // direct relation to the contained TypeCompounds.
- Attribute.TypeCompound at = new Attribute.TypeCompound(targetContainerType, List.of(p),
- ((Attribute.TypeCompound)annotations.head).position);
-
- // TODO: annotation applicability checks from below?
-
+ Attribute.TypeCompound at = new Attribute.TypeCompound(targetContainerType, List.of(p), position);
at.setSynthesized(true);
@SuppressWarnings("unchecked")
T x = (T) at;
return x;
} else {
- Attribute.Compound c = new Attribute.Compound(targetContainerType, List.of(p));
+ Attribute.Compound c = new Attribute.Compound(targetContainerType,
+ List.of(p),
+ position);
JCAnnotation annoTree = m.Annotation(c);
if (!chk.annotationApplicable(annoTree, on))
@@ -564,7 +603,7 @@
if (!chk.validateAnnotationDeferErrors(annoTree))
log.error(annoTree.pos(), "duplicate.annotation.invalid.repeated", origAnnoType);
- c = enterAnnotation(annoTree, targetContainerType, ctx.env);
+ c = enterAnnotation(annoTree, targetContainerType, ctx.env, position);
c.setSynthesized(true);
@SuppressWarnings("unchecked")
@@ -576,6 +615,7 @@
}
}
+
/** Fetches the actual Type that should be the containing annotation. */
private Type getContainingType(Attribute.Compound currentAnno,
DiagnosticPosition pos,
@@ -705,31 +745,53 @@
return fatalError ? null : containerValueSymbol;
}
+ /**
+ * First step of repeating annotations handling: go through a list
+ * of annotations, and gather up all the repeated ones into a map,
+ * which we use to build an AnnotationContext.
+ *
+ * Because we do this, we need to get all the annotations for a
+ * given AST node at once (ie. if we have "@A @B @A int foo;", we
+ * have to get "@A @B @A" at the same time).
+ *
+ * @param annotations The annotations being attached.
+ * @param env The environment.
+ * @param sym The symbol to which the annotations will be attached.
+ * @param creator The attribute creator used to enter the annotations.
+ * @param position The position for any type annotations.
+ * @return The AnnotaionContext for use in the next phase.
+ */
private <T extends Attribute.Compound> AnnotationContext<T>
prepareEnterAnnotations(List<JCAnnotation> annotations,
Env<AttrContext> env,
Symbol sym,
AttributeCreator<T> creator,
- boolean isTypeCompound) {
+ TypeAnnotationPosition position) {
Map<TypeSymbol, ListBuffer<T>> annotated = new LinkedHashMap<>();
Map<T, DiagnosticPosition> pos = new HashMap<>();
+ // Go through the annotation list, build up a map from
+ // annotation types to lists of annotations.
for (List<JCAnnotation> al = annotations; !al.isEmpty(); al = al.tail) {
JCAnnotation a = al.head;
- T c = creator.create(a, syms.annotationType, env);
+ T c = creator.create(a, syms.annotationType, env, position);
Assert.checkNonNull(c, "Failed to create annotation");
if (annotated.containsKey(a.type.tsym)) {
+ // Make sure we even allow repeating annotations.
if (!allowRepeatedAnnos) {
log.error(a.pos(), "repeatable.annotations.not.supported.in.source");
allowRepeatedAnnos = true;
}
+ // Append the annotation to the list for this kind of
+ // annotation.
ListBuffer<T> l = annotated.get(a.type.tsym);
l = l.append(c);
annotated.put(a.type.tsym, l);
pos.put(c, a.pos());
} else {
+ // We are seeing the first annotation of this kind.
annotated.put(a.type.tsym, ListBuffer.of(c));
pos.put(c, a.pos());
}
@@ -743,25 +805,54 @@
}
return new AnnotationContext<>(env, annotated, pos,
- isTypeCompound);
+ creator.createsTypeCompound());
}
- // Gather up annotations into a map from type symbols to lists of
- // Compound attributes, then continue on with repeating
- // annotations processing
+ /**
+ * Entry-point for repeating annotations handling. At this point,
+ * we should know the type annotation position, and we should have
+ * all the annotations for a given source location.
+ *
+ * We first gather up all the repeated annotations and build an
+ * AnnotationContext. Then create Placeholder's for any repeated
+ * annotations and send them further down the pipeline.
+ *
+ * Something to keep in mind here is that even if we are handling
+ * "declaration" annotations, it is still possible that those
+ * might turn into type annotations (consider "@A @B int foo;",
+ * for example).
+ *
+ * The pipeline uses a sort of continuation-passing like style,
+ * with creator and attacher. This allows two things. First, it
+ * allows for a single pipeline for repeating annotations,
+ * regardless of what eventually happens to the annotations.
+ * Second, it allows us to avoid some unsafe casts we would
+ * otherwise have to make.
+ *
+ * @param annotations The annotations to handle.
+ * @param env The environment.
+ * @param sym The symbol to which to attach annotations.
+ * @param position The position for type annotations.
+ * @param creator The creator to use to enter annotations.
+ * @param attacher The attacher to use to attach annotations.
+ */
private <T extends Attribute.Compound>
void attachAttributesLater(final List<JCAnnotation> annotations,
final Env<AttrContext> env,
final Symbol sym,
- final boolean isTypeCompound,
+ final TypeAnnotationPosition position,
final AttributeCreator<T> creator,
final AttributeAttacher<T> attacher) {
+ // First, gather up all the repeated annotations.
final AnnotationContext<T> ctx =
- prepareEnterAnnotations(annotations, env, sym, creator, isTypeCompound);
+ prepareEnterAnnotations(annotations, env, sym, creator, position);
final Map<Symbol.TypeSymbol, ListBuffer<T>> annotated =
ctx.annotated;
boolean hasRepeated = false;
+ // Now run through all the annotation types in the
+ // AnnotationContext. If there are any that have more than
+ // one entry, then we set up a Placeholder for them.
List<T> buf = List.<T>nil();
for (ListBuffer<T> lb : annotated.values()) {
if (lb.size() == 1) {
@@ -776,14 +867,62 @@
final List<T> attrs = buf.reverse();
- if (!isTypeCompound) {
+ if (!creator.createsTypeCompound()) {
// Attach declaration attributes early, so
// that @Repeatable and other annotations get attached.
// Since the attacher uses setDeclarationAttributes, this
// will be overwritten later.
- attacher.attach(sym, attrs);
+ //
+ // The root cause of this is that annotations are
+ // themselves defined using annotations. However, it is
+ // never the case that a type annotation affects the
+ // definition of an annotation, so we don't have to do
+ // this.
+ //
+ // We really should find a better way to do this.
+ @SuppressWarnings("unchecked")
+ List<Attribute.Compound> tempattrs = (List<Attribute.Compound>) attrs;
+ sym.setDeclarationAttributes(tempattrs);
}
+
if (hasRepeated) {
+ // If we have repeated annotations, then we go to the next
+ // pipeline step, which replaces all the placeholders.
+ replacePlaceholdersAndAttach(attrs, ctx, env, sym, attacher);
+ } else {
+ // If we don't have repeated annotations, then we still
+ // have to run the annotations through the rest of the
+ // pipeline.
+ //
+ // For type annotations, we might have error-reporting to
+ // do, and the attacher might end up attaching the
+ // annotation to the symbol's owner as well.
+ //
+ // For regular annotations, we might have a
+ // classifyingAttacher, in which case we have to pull the
+ // annotations off the symbol, classify them, and then put
+ // them in the right place.
+ attachAttributesAfterRepeated(attrs, env, attacher);
+ }
+ }
+
+ /**
+ * Next pipeline step for repeated annotations: replate all the
+ * placeholders, and then send the result further down the pipe.
+ *
+ * @param attrs The Attributes representing the annotations.
+ * @param ctx The AnnotationContext being used.
+ * @param env The environment.
+ * @param sym The symbol to which to attach annotations.
+ * @param attacher The attacher to use to attach annotations.
+ */
+ private <T extends Attribute.Compound>
+ void replacePlaceholdersAndAttach(final List<T> attrs,
+ final AnnotationContext<T> ctx,
+ final Env<AttrContext> env,
+ final Symbol sym,
+ final AttributeAttacher<T> attacher) {
+ // Set up a Worker.
repeated(new Annotate.Worker() {
@Override
public String toString() {
@@ -795,38 +934,493 @@
JavaFileObject oldSource =
log.useSource(env.toplevel.sourcefile);
try {
- attacher.attach(sym, replacePlaceholders(attrs, ctx, sym));
+ // Replace placeholders
+ final List<T> replaced =
+ replacePlaceholders(attrs, ctx, sym);
+ // Then send the result to the final pipeline stage.
+ attachAttributesAfterRepeated(replaced, env, attacher);
} finally {
log.useSource(oldSource);
}
}
});
+ }
+
+ /**
+ * Final pipeline stage. Simply use the attacher to deal with the
+ * annotations however we want to deal with them. Note that
+ * attachers may do a number of things, like attach annotations to
+ * other symbols (as is the case with some type annotations, which
+ * get attached to their symbol's owner as well), report errors,
+ * or even create copies (as is the case with classifyingAttacher)
+ *
+ * At this point, we have to be able to guarantee that we don't
+ * see any Placeholders.
+ *
+ * @param attrs The Attributes representing the annotations.
+ * @param env The environment.
+ * @param attacher The attacher we use to finish handling the
+ * annotations.
+ */
+ private <T extends Attribute.Compound>
+ void attachAttributesAfterRepeated(final List<T> attrs,
+ final Env<AttrContext> env,
+ final AttributeAttacher<T> attacher) {
+ // Set up a Worker that just calls the attacher.
+ afterRepeated(new Worker() {
+ @Override
+ public String toString() {
+ return "attach pass for: " + attrs;
+ }
+
+ @Override
+ public void run() {
+ JavaFileObject oldSource =
+ log.useSource(env.toplevel.sourcefile);
+ try {
+ attacher.attach(attrs);
+ } finally {
+ log.useSource(oldSource);
+ }
+ }
+ });
+ }
+
+ /**
+ * AttributeAttachers are similar to continuations. That contains
+ * the behavior of the final stage of the annotation pipeline,
+ * when we've creted Attributes (which have a type annotation
+ * position), and we've dealt with repeating annotations. Once we
+ * have done all that, we simply hand off the list of attributes
+ * to the attacher and let it do its work.
+ *
+ * If we didn't have the multiple deferred steps, we could
+ * implement this by returning a list of Attributes from a
+ * top-level method representing the entire repeating annotations
+ * pipeline. Since we have to handle annotations in multiple
+ * steps, we can't do that. Therefore, in this light, we can
+ * think of an attacher as being essentially a return
+ * continuation.
+ *
+ * We also have ways to "build" more complex attachers out of
+ * simple ones, such as classifyingAttacher. This allows us
+ * considerable flexibility in how we deal with annotations at the
+ * end of the pipeline (which is necessary, because there are a
+ * lot of cases).
+ */
+ public interface AttributeAttacher<T extends Attribute.Compound> {
+ public void attach(List<T> attrs);
+ }
+
+ /**
+ * An interface for describing error reporting behaviors for
+ * type-only annotations. Sometimes, we need to report errors if
+ * any annotations wind up being type-only annotations (the best
+ * example being for illegal scoping). But at the point where we
+ * know this, we don't always know if a given annotation will be a
+ * type-only annotation, a regular annotation, or both. So we
+ * have to defer the error-reporting until we do know.
+ */
+ public interface Reporter<T extends Attribute.Compound> {
+ public void report(List<T> attrs);
+ }
+
+ public enum AnnotationKind { DECLARATION, TYPE, BOTH }
+
+ public Attribute[] getTargetTypes(Attribute.Compound a) {
+ Attribute.Compound atTarget =
+ a.type.tsym.attribute(syms.annotationTargetType.tsym);
+ if (atTarget == null) {
+ return null;
+ }
+ Attribute atValue = atTarget.member(names.value);
+ Assert.check(atValue instanceof Attribute.Array);
+ return ((Attribute.Array) atValue).values;
+ }
+
+ public boolean hasTypeUseTarget(Attribute.Compound a,
+ boolean isTypeParameter) {
+ Attribute[] targets = getTargetTypes(a);
+ if (targets != null) {
+ for (Attribute app : targets) {
+ Assert.check(app instanceof Attribute.Enum);
+ Attribute.Enum e = (Attribute.Enum) app;
+ if (e.value.name == names.TYPE_USE ||
+ (isTypeParameter && e.value.name == names.TYPE_PARAMETER)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Determine whether an annotation is a declaration annotation,
+ * a type annotation, or both.
+ */
+ public AnnotationKind annotationKind(Attribute.Compound a, Symbol s) {
+ Attribute[] targets = getTargetTypes(a);
+ if (targets == null) {
+ return AnnotationKind.DECLARATION;
+ }
+ boolean isDecl = false, isType = false;
+ for (Attribute app : targets) {
+ Assert.check(app instanceof Attribute.Enum);
+ Attribute.Enum e = (Attribute.Enum) app;
+ if (e.value.name == names.TYPE) {
+ if (s.kind == Kinds.TYP) {
+ ElementKind skind = s.getKind();
+ // The only symbols we should see here correspond
+ // to definitions.
+ Assert.check(skind == ElementKind.ANNOTATION_TYPE ||
+ skind == ElementKind.INTERFACE ||
+ skind == ElementKind.ENUM ||
+ skind == ElementKind.CLASS);
+ isDecl = true;
+ }
+ } else if (e.value.name == names.FIELD) {
+ if (s.kind == Kinds.VAR &&
+ s.owner.kind != Kinds.MTH)
+ isDecl = true;
+ } else if (e.value.name == names.METHOD) {
+ if (s.kind == Kinds.MTH &&
+ !s.isConstructor())
+ isDecl = true;
+ } else if (e.value.name == names.PARAMETER) {
+ if (s.kind == Kinds.VAR &&
+ s.owner.kind == Kinds.MTH &&
+ (s.flags() & Flags.PARAMETER) != 0)
+ isDecl = true;
+ } else if (e.value.name == names.CONSTRUCTOR) {
+ if (s.kind == Kinds.MTH &&
+ s.isConstructor())
+ isDecl = true;
+ } else if (e.value.name == names.LOCAL_VARIABLE) {
+ if (s.kind == Kinds.VAR &&
+ s.owner.kind == Kinds.MTH &&
+ (s.flags() & Flags.PARAMETER) == 0)
+ isDecl = true;
+ } else if (e.value.name == names.ANNOTATION_TYPE) {
+ if (s.kind == Kinds.TYP &&
+ (s.flags() & Flags.ANNOTATION) != 0)
+ isDecl = true;
+ } else if (e.value.name == names.PACKAGE) {
+ if (s.kind == Kinds.PCK)
+ isDecl = true;
+ } else if (e.value.name == names.TYPE_USE) {
+ if (s.kind == Kinds.TYP ||
+ s.kind == Kinds.VAR ||
+ (s.kind == Kinds.MTH && !s.isConstructor() &&
+ !s.type.getReturnType().hasTag(TypeTag.VOID)) ||
+ (s.kind == Kinds.MTH && s.isConstructor()))
+ isType = true;
+ } else if (e.value.name == names.TYPE_PARAMETER) {
+ /* Irrelevant in this case: we will never see symbols
+ * that are type parameters, as we never attach
+ * declaration annotations to them. */
+ Assert.check(s.getKind() != ElementKind.TYPE_PARAMETER);
+ } else {
+ Assert.error("annotationKind(): unrecognized Attribute name " + e.value.name +
+ " (" + e.value.name.getClass() + ")");
+ }
+ }
+ if (isDecl && isType) {
+ return AnnotationKind.BOTH;
+ } else if (isType) {
+ return AnnotationKind.TYPE;
} else {
- attacher.attach(sym, attrs);
+ return AnnotationKind.DECLARATION;
}
}
- private interface AttributeAttacher<T extends Attribute.Compound> {
- public void attach(Symbol sym, List<T> attrs);
- }
+ /**
+ * An attacher that just attaches annotations as declaration
+ * annotations. This is used in places where we know for a fact
+ * that type annotations cannot occur.
+ */
+ private AttributeAttacher<Attribute.Compound>
+ declAnnotationsAttacher(final Symbol sym) {
+ return new AttributeAttacher<Attribute.Compound>() {
+ @Override
+ public String toString() {
+ return "Attacher for strictly declaration annotations, for " +
+ sym;
+ }
- private final AttributeAttacher<Attribute.Compound> declAnnotationsAttacher =
- new AttributeAttacher<Attribute.Compound>() {
@Override
- public void attach(Symbol sym, List<Attribute.Compound> attrs) {
+ public void attach(List<Attribute.Compound> attrs) {
sym.resetAnnotations();
sym.setDeclarationAttributes(attrs);
}
};
+ }
- private final AttributeAttacher<Attribute.TypeCompound> typeAnnotationsAttacher =
- new AttributeAttacher<Attribute.TypeCompound>() {
+ /**
+ * An attacher that just attaches annotations as type annotations.
+ * We use this in places where only type annotations can occur.
+ * The most common use for this is any annotation where we have to
+ * "parse" a type (arrays, inner classes, type arguments, bounds,
+ * etc.). We also use this for base types for non-declarations
+ * (ie. casts, instanceofs, etc). A more subtle case is for
+ * anonymous classes and receiver parameters, both of which cannot
+ * have regular annotations.
+ */
+ private AttributeAttacher<Attribute.TypeCompound>
+ typeAnnotationsAttacher(final Symbol sym) {
+ return new AttributeAttacher<Attribute.TypeCompound>() {
+ @Override
+ public String toString() {
+ return "Attacher for strictly type annotations, for " + sym;
+ }
+
+ @Override
+ public void attach(List<Attribute.TypeCompound> attrs) {
+ if (!attrs.isEmpty()) {
+ attachTypeAnnotations(sym, attrs);
+ }
+ }
+ };
+ }
+
+ /**
+ * Attach type-only annotations using an attacher, and run a
+ * reporter. Either the reporter or the attacher may be null, in
+ * which case we skip that step.
+ */
+ private AttributeAttacher<Attribute.TypeCompound>
+ reportingTypeAnnotationsAttacher(final AttributeAttacher<Attribute.TypeCompound> attacher,
+ final Reporter<Attribute.TypeCompound> reporter) {
+ return new AttributeAttacher<Attribute.TypeCompound>() {
+ @Override
+ public String toString() {
+ return "Error-reporting type annotation, attacher is: " + attacher +
+ "\n reporter is: " + reporter;
+ }
+
@Override
- public void attach(Symbol sym, List<Attribute.TypeCompound> attrs) {
- sym.appendUniqueTypeAttributes(attrs);
+ public void attach(List<Attribute.TypeCompound> attrs) {
+ if (attacher != null)
+ attacher.attach(attrs);
+
+ if (reporter != null)
+ reporter.report(attrs);
+ }
+ };
+ }
+
+ /**
+ * Attach type-only annotations to a symbol and also update the
+ * .type field on a tree (unless it is a package type). This is
+ * used to put annotations on to a type as well as a symbol.
+ */
+ private AttributeAttacher<Attribute.TypeCompound>
+ typeUpdatingTypeAnnotationsAttacher(final AttributeAttacher<Attribute.TypeCompound> attacher,
+ final JCTree tree) {
+ return new AttributeAttacher<Attribute.TypeCompound>() {
+ @Override
+ public String toString() {
+ return "Type-updating type annotation attacher, attacher is: " + attacher +
+ "\n tree is: " + tree;
+ }
+
+ @Override
+ public void attach(List<Attribute.TypeCompound> attrs) {
+ if (null != attacher)
+ attacher.attach(attrs);
+
+ if (!attrs.isEmpty() && !tree.type.hasTag(TypeTag.PACKAGE)) {
+ tree.type = tree.type.annotatedType(attrs);
+ }
+ }
+ };
+ }
+
+ /**
+ * A Reporter for illegal scoping. We set one of these up in
+ * TypeAnnotate whenever we are in a place that corresponds to a
+ * package or static class that cannot be annotated.
+ */
+ private void reportIllegalScoping(List<Attribute.TypeCompound> attrs,
+ int pos) {
+ switch (attrs.size()) {
+ case 0:
+ // Don't issue an error if all type annotations are
+ // also declaration annotations.
+ // If the annotations are also declaration annotations, they are
+ // illegal as type annotations but might be legal as declaration annotations.
+ // The normal declaration annotation checks make sure that the use is valid.
+ break;
+ case 1:
+ log.error(pos, "cant.type.annotate.scoping.1", attrs);
+ break;
+ default:
+ log.error(pos, "cant.type.annotate.scoping", attrs);
+ }
+ }
+
+ private Reporter<Attribute.TypeCompound>
+ illegalScopingReporter(final int pos) {
+ return new Reporter<Attribute.TypeCompound>() {
+ @Override
+ public String toString() {
+ return "Illegal scoping reporter at position " + pos;
+ }
+
+ @Override
+ public void report(List<Attribute.TypeCompound> attrs) {
+ reportIllegalScoping(attrs, pos);
}
};
+ }
+ // Create the "simple case": just attach type and regular
+ // annotations, no reporting.
+ private AttributeAttacher<Attribute.Compound>
+ classifyingAttacher(final Symbol sym) {
+ return classifyingAttacher(sym, declAnnotationsAttacher(sym),
+ typeAnnotationsAttacher(sym),
+ null);
+ }
+
+
+ /**
+ * Build an attacher for handling the case where we have
+ * annotations, but we don't know for sure whether they are
+ * declaration annotations, type annotations, or both.
+ *
+ * We do this by taking an attacher for declaration annotations,
+ * another one for type annotations, and (possibly) a reporter for
+ * type-only annotations. We then use the logic from
+ * annotationKind to figure out what kind each annotation is and
+ * deal with it accordingly.
+ *
+ * Any of the declAttacher, the typeAttacher, or the Reporter can
+ * be null, in which case we skip it.
+ *
+ * We have to have the reporter *separate* from the type
+ * annotation attacher, because we might be attaching type
+ * annotations that are also declaration annotations. But the
+ * semantics of reporters are that they get called for type-only
+ * annotations. For an example of where this matters, consider
+ * "@A java.lang.Object foo;", where @A can annotate packages and
+ * type uses. We would create the classifyingAttacher with null
+ * for the type attacher and an illegal scoping reporter. Both
+ * attachers would end up getting called on @A (which, we'd skip
+ * the type attacher, because it's null), the result being that @A
+ * goes on foo as a declaration annotation. The reporter would
+ * not get called, because there are no type-only annotations.
+ * However, if @A can only annotate type uses, then it's a
+ * type-only annotation, and we report an illegal scoping error.
+ *
+ * Note: there is a case where we want both attachers to be null:
+ * speculative attribution.
+ *
+ * @param sym The symbol to which to attach annotations.
+ * @param declAttacher The attacher to use for declaration (and
+ * both) annotations, or null.
+ * @param typeAttacher The attacher to use for type (and both)
+ * annotations, or null.
+ * @param reporter The reporter to use for type-only annotations, or null.
+ * @return The created attacher.
+ */
+ private AttributeAttacher<Attribute.Compound>
+ classifyingAttacher(final Symbol sym,
+ final AttributeAttacher<Attribute.Compound> declAttacher,
+ final AttributeAttacher<Attribute.TypeCompound> typeAttacher,
+ final Reporter<Attribute.TypeCompound> reporter) {
+ return new AttributeAttacher<Attribute.Compound>() {
+ @Override
+ public String toString() {
+ return "Classifying attacher, attaching to " + sym +
+ "\n declaration annotation attacher is: " + declAttacher +
+ "\n type annotation attacher is: " + typeAttacher +
+ "\n reporter for strictly type annotations is: " + reporter;
+ }
+
+ @Override
+ public void attach(List<Attribute.Compound> attrs) {
+ // We sort annotations into "buckets" based on what
+ // kind they are.
+ ListBuffer<Attribute.Compound> declAnnos = new ListBuffer<>();
+ ListBuffer<Attribute.TypeCompound> typeAnnos = new ListBuffer<>();
+ // We also need to keep track of the type-only
+ // annotations, in case we have a reporting action.
+ ListBuffer<Attribute.TypeCompound> onlyTypeAnnos = new ListBuffer<>();
+
+ for (Attribute.Compound a : attrs) {
+ Assert.check(!(a instanceof Placeholder),
+ "Placeholders found in annotations being attached!");
+ switch (annotationKind(a, sym)) {
+ case DECLARATION:
+ declAnnos.append(a);
+ break;
+ case BOTH: {
+ declAnnos.append(a);
+ Attribute.TypeCompound ta = a.toTypeCompound();
+ Assert.checkNonNull(ta.position);
+ typeAnnos.append(ta);
+ break;
+ }
+ case TYPE: {
+ Attribute.TypeCompound ta = a.toTypeCompound();
+ Assert.checkNonNull(ta.position);
+ typeAnnos.append(ta);
+ // Also keep track which annotations are only type annotations
+ onlyTypeAnnos.append(ta);
+ break;
+ }
+ default:
+ throw new AssertionError("Unknown annotation type");
+ }
+ }
+
+ if (declAttacher != null)
+ declAttacher.attach(declAnnos.toList());
+
+ if (typeAttacher != null)
+ typeAttacher.attach(typeAnnos.toList());
+
+ if (reporter != null)
+ reporter.report(onlyTypeAnnos.toList());
+ }
+ };
+ }
+
+ /**
+ * Actually attach a list of type annotations to a symbol. For
+ * variables defined in methods, we need to attach to both the
+ * variable symbol, as well as the method symbol. This takes care
+ * of that.
+ *
+ * @param sym The symbol to which to attach.
+ * @param attrs The annotations to attach.
+ */
+ public void attachTypeAnnotations(Symbol sym, List<Attribute.TypeCompound> attrs) {
+ sym.appendUniqueTypeAttributes(attrs);
+
+ // For type annotations on variables in methods, make
+ // sure they are attached to the owner too.
+ switch(sym.getKind()) {
+ case PARAMETER:
+ case LOCAL_VARIABLE:
+ case RESOURCE_VARIABLE:
+ case EXCEPTION_PARAMETER:
+ // Make sure all type annotations from the symbol are also
+ // on the owner.
+ sym.owner.appendUniqueTypeAttributes(attrs);
+ break;
+ }
+ }
+
+ /**
+ * Final task for repeating annotations: go through a list of
+ * Attributes and replace all the placeholders with containers.
+ *
+ * @param buf The list of Attributes.
+ * @param ctx The AnnotationContext.
+ * @param sym The symbol to which we are attaching.
+ * @return The list of attributes with all placeholders replaced.
+ */
private <T extends Attribute.Compound> List<T>
replacePlaceholders(List<T> buf,
Annotate.AnnotationContext<T> ctx,
@@ -848,13 +1442,16 @@
return result.reverse();
}
+ /**
+ * Replace one placeholder with a container.
+ */
private <T extends Attribute.Compound> T replaceOne(Placeholder<T> placeholder,
Annotate.AnnotationContext<T> ctx,
Symbol sym) {
// Process repeated annotations
T validRepeated =
processRepeatedAnnotations(placeholder.getPlaceholderFor(),
- ctx, sym);
+ ctx, sym, placeholder.position);
if (validRepeated != null) {
// Check that the container isn't manually
@@ -875,16 +1472,65 @@
* Annotation processing
*********************************************************************/
- /** Queue annotations for later processing. */
+ /**
+ * Run a list of annotations through the repeating annotations
+ * pipeline, and attach them. We don't have any diagnostic
+ * position.
+ */
+ void annotateLater(final List<JCAnnotation> annotations,
+ final Env<AttrContext> localEnv,
+ final Symbol s) {
+ annotateLater(annotations, localEnv, s, null);
+ }
+
+ /**
+ * Run a list of annotations through the repeating annotations
+ * pipeline and attach them. This is for when we have annotations
+ * that cannot possibly be type annotations (thus, we have no type
+ * annotation position).
+ */
void annotateLater(final List<JCAnnotation> annotations,
final Env<AttrContext> localEnv,
final Symbol s,
final DiagnosticPosition deferPos) {
+ // Only attach declaration annotations.
+ doAnnotateLater(annotations, localEnv, s, deferPos, null,
+ declAnnotationsAttacher(s));
+ }
+
+ /**
+ * Run a list of annotations through the repeating annotation
+ * pipeline, and then classify and attach them. This is used
+ * whenever we have annotations that might be regular annotations,
+ * type annotations, or both.
+ */
+ void annotateWithClassifyLater(final List<JCAnnotation> annotations,
+ final Env<AttrContext> localEnv,
+ final Symbol s,
+ final DiagnosticPosition deferPos,
+ final TypeAnnotationPosition tapos) {
+ // Set up just the basic classifying attacher.
+ doAnnotateLater(annotations, localEnv, s, deferPos, tapos,
+ classifyingAttacher(s));
+ }
+
+ /**
+ * Set up a worker for handling annotations without parsing a type tree.
+ */
+ private void doAnnotateLater(final List<JCAnnotation> annotations,
+ final Env<AttrContext> localEnv,
+ final Symbol s,
+ final DiagnosticPosition deferPos,
+ final TypeAnnotationPosition tapos,
+ final AttributeAttacher<Attribute.Compound> attacher) {
if (annotations.isEmpty()) {
return;
}
+ // Mark annotations as incomplete for now.
+ //
+ // This should probably get redesigned at some point.
if (s.kind != PCK) {
- s.resetAnnotations(); // mark Annotations as incomplete for now
+ s.resetAnnotations();
}
normal(new Annotate.Worker() {
@Override
@@ -894,12 +1540,44 @@
@Override
public void run() {
+ annotateNow(annotations, localEnv, s, deferPos,
+ tapos, attacher);
+ }
+ });
+
+ validate(annotationValidator(annotations, localEnv, s));
+ }
+
+ /**
+ * Run a list of declaration (meaning they are in a declaration
+ * position) annotations through the repeating annotations
+ * pipeline.
+ *
+ * Note that in some cases, these annotations might end up being
+ * type annotations, or both declaration and type annotations.
+ *
+ * @param annotations The annotations to handle.
+ * @param localEnv the environment.
+ * @param s The symbol to which to attach.
+ * @param deferPos The diagnostic position to use.
+ * @param position The type annotation position to use if some of
+ * the annotations end up being type annotations.
+ * @param attacher The attacher to use.
+ */
+ private void annotateNow(final List<JCAnnotation> annotations,
+ final Env<AttrContext> localEnv,
+ final Symbol s,
+ final DiagnosticPosition deferPos,
+ final TypeAnnotationPosition position,
+ final AttributeAttacher<Attribute.Compound> attacher) {
+ if (annotations.isEmpty()) {
+ return;
+ }
Assert.check(s.kind == PCK || s.annotationsPendingCompletion());
JavaFileObject prev = log.useSource(localEnv.toplevel.sourcefile);
- DiagnosticPosition prevLintPos =
- deferPos != null
- ? deferredLintHandler.setPos(deferPos)
- : deferredLintHandler.immediate();
+ DiagnosticPosition prevLintPos = deferPos != null ?
+ deferredLintHandler.setPos(deferPos) :
+ deferredLintHandler.immediate();
Lint prevLint = deferPos != null ? null : chk.setLint(lint);
try {
if (s.hasAnnotations() &&
@@ -907,7 +1585,7 @@
log.error(annotations.head.pos,
"already.annotated",
kindName(s), s);
- actualEnterAnnotations(annotations, localEnv, s);
+ actualEnterAnnotations(annotations, localEnv, s, position, attacher);
} finally {
if (prevLint != null)
chk.setLint(prevLint);
@@ -915,9 +1593,12 @@
log.useSource(prev);
}
}
- });
- validate(new Annotate.Worker() { //validate annotations
+ // Set up a validator to enforce some rules on regular annotations.
+ private Annotate.Worker annotationValidator(final List<JCAnnotation> annotations,
+ final Env<AttrContext> localEnv,
+ final Symbol s) {
+ return new Annotate.Worker() { //validate annotations
@Override
public void run() {
JavaFileObject prev = log.useSource(localEnv.toplevel.sourcefile);
@@ -927,52 +1608,140 @@
log.useSource(prev);
}
}
- });
+ };
+ }
+
+ private void checkForDeclarationAnnotations(List<? extends JCAnnotation> annotations,
+ boolean isTypeParameter) {
+ // Ensure that no declaration annotations are present.
+ // Note that a tree type might be an AnnotatedType with
+ // empty annotations, if only declaration annotations were given.
+ // This method will raise an error for such a type.
+ for (JCAnnotation ai : annotations) {
+ Assert.checkNonNull(ai.type);
+ Assert.checkNonNull(ai.attribute);
+
+ if (!ai.type.isErroneous() &&
+ !hasTypeUseTarget(ai.attribute, isTypeParameter)) {
+ log.error(ai.pos(), "annotation.type.not.applicable");
+ }
+ }
}
- private interface AttributeCreator<T extends Attribute.Compound> {
- public T create(JCAnnotation a, Type expected, Env<AttrContext> env);
+ // Set up a validator to enforce some rules on type annotations.
+ // In addition to those enforced by Check.validateTypeAnnotations,
+ // this enforces that declaration annotations cannot occur on type
+ // parameters.
+ private Annotate.Worker typeAnnotationValidator(final List<JCAnnotation> annotations,
+ final Env<AttrContext> localEnv,
+ final boolean isTypeParameter) {
+ return new Annotate.Worker() { //validate annotations
+ @Override
+ public void run() {
+ JavaFileObject prev = log.useSource(localEnv.toplevel.sourcefile);
+ try {
+ checkForDeclarationAnnotations(annotations, isTypeParameter);
+ chk.validateTypeAnnotations(annotations, isTypeParameter);
+ } finally {
+ log.useSource(prev);
+ }
+ }
+ };
}
- // TODO: When SE8 features can be used, these can go away and be
- // replaced by method refs.
+ /**
+ * This is an interface that wraps up the functionality of
+ * enterAnnotations and enterTypeAnnotations. This allows some
+ * code duplication to be removed from the original repeating
+ * annotations pipeline. It also allows for some unsafe casts to
+ * be eliminated.
+ *
+ * Note: when Lambdas can be used in the compiler, we can just use
+ * method refs for enterAnnotations and enterTypeAnnotations.
+ */
+ private interface AttributeCreator<T extends Attribute.Compound> {
+ public T create(JCAnnotation a,
+ Type expected,
+ Env<AttrContext> env,
+ TypeAnnotationPosition position);
+ public abstract boolean createsTypeCompound();
+ }
+
+ // Note: try to avoid doing anything that makes these any more
+ // than just the equivalent of method refs in a pre-lambda
+ // setting. That way, they can go away when we are allowed to use
+ // lambda.
private final AttributeCreator<Attribute.Compound> enterAnnotationsCreator =
new AttributeCreator<Attribute.Compound>() {
@Override
+ public String toString() {
+ return "Attribute creator for regular declaration annotations";
+ }
+
+ @Override
public Attribute.Compound create(JCAnnotation a,
Type expected,
- Env<AttrContext> env) {
- return enterAnnotation(a, syms.annotationType, env);
+ Env<AttrContext> env,
+ TypeAnnotationPosition position) {
+ return enterAnnotation(a, syms.annotationType, env, position);
}
+
+ @Override
+ public boolean createsTypeCompound() { return false; }
};
- private final AttributeCreator<Attribute.TypeCompound> enterTypeAnnotationsCreator =
- new AttributeCreator<Attribute.TypeCompound>() {
+
+ private AttributeCreator<Attribute.TypeCompound>
+ enterTypeAnnotationsCreator(final boolean secondaryAttr) {
+ return new AttributeCreator<Attribute.TypeCompound>() {
+ @Override
+ public String toString() {
+ if (!secondaryAttr) {
+ return "Attribute creator for regular type annotations";
+ } else {
+ return "Attribute creator for regular type annotations, ignores cached attributes";
+ }
+ }
+
@Override
public Attribute.TypeCompound create(JCAnnotation a,
Type expected,
- Env<AttrContext> env) {
- return enterTypeAnnotation(a, syms.annotationType, env);
+ Env<AttrContext> env,
+ TypeAnnotationPosition position) {
+ return enterTypeAnnotation(a, syms.annotationType,
+ env, position, secondaryAttr);
}
- };
- /** Enter a set of annotations. */
+ @Override
+ public boolean createsTypeCompound() { return true; }
+ };
+ }
+
+ /**
+ * Send a list of annotations (which occurred in a declaration
+ * position) into the repeating annotations pipeline.
+ */
private void actualEnterAnnotations(List<JCAnnotation> annotations,
Env<AttrContext> env,
- Symbol s) {
- Assert.checkNonNull(s, "Symbol argument to actualEnterAnnotations is null");
- attachAttributesLater(annotations, env, s, false,
- enterAnnotationsCreator,
- declAnnotationsAttacher);
+ Symbol s,
+ TypeAnnotationPosition position,
+ AttributeAttacher<Attribute.Compound> attacher) {
+ Assert.checkNonNull(s);
+ attachAttributesLater(annotations, env, s, position,
+ enterAnnotationsCreator, attacher);
}
- /*
- * If the symbol is non-null, attach the type annotation to it.
+ /**
+ * Send a list of annotations (which occurred in a type-use
+ * position) into the repeating annotations pipeline.
*/
private void actualEnterTypeAnnotations(final List<JCAnnotation> annotations,
final Env<AttrContext> env,
final Symbol s,
- final DiagnosticPosition deferPos) {
- Assert.checkNonNull(s, "Symbol argument to actualEnterTypeAnnotations is nul/");
+ final DiagnosticPosition deferPos,
+ final boolean secondaryAttr,
+ final TypeAnnotationPosition position,
+ final AttributeAttacher<Attribute.TypeCompound> attacher) {
+ Assert.checkNonNull(s);
JavaFileObject prev = log.useSource(env.toplevel.sourcefile);
DiagnosticPosition prevLintPos = null;
@@ -980,9 +1749,9 @@
prevLintPos = deferredLintHandler.setPos(deferPos);
}
try {
- attachAttributesLater(annotations, env, s, true,
- enterTypeAnnotationsCreator,
- typeAnnotationsAttacher);
+ attachAttributesLater(annotations, env, s, position,
+ enterTypeAnnotationsCreator(secondaryAttr),
+ attacher);
} finally {
if (prevLintPos != null)
deferredLintHandler.setPos(prevLintPos);
@@ -990,11 +1759,114 @@
}
}
+ /**
+ * Given a type tree, walk down it and handle any annotations we
+ * find.
+ *
+ * @param tree The type tree to scan.
+ * @param env The environment.
+ * @param sym The symbol to which to attach any annotations we
+ * might find.
+ * @param deferPos The diagnostic position to use.
+ * @param creator The creator to use for making positions.
+ */
public void annotateTypeLater(final JCTree tree,
final Env<AttrContext> env,
final Symbol sym,
- final DiagnosticPosition deferPos) {
+ final DiagnosticPosition deferPos,
+ final PositionCreator creator) {
+ doAnnotateTypeLater(tree, List.<JCAnnotation>nil(), env,
+ sym, deferPos, creator, false, false);
+ }
+
+ /**
+ * Given a type tree, walk down it and handle any annotations we
+ * find. We also have a set of base-type annotations (which
+ * occurred in a declaration position in source), which may either
+ * be declaration annotations or annotations on the base type.
+ * For an example, in "@A int @B []", we would have the type tree
+ * "int @B []" with base-type annotations "@A".
+ *
+ * @param tree The type tree to scan.
+ * @param baseTypeAnnos The base-type annotations.
+ * @param env The environment.
+ * @param sym The symbol to which to attach any annotations we
+ * might find.
+ * @param deferPos The diagnostic position to use.
+ * @param creator The creator to use for making positions.
+ */
+ public void annotateTypeLater(final JCTree tree,
+ final List<JCAnnotation> baseTypeAnnos,
+ final Env<AttrContext> env,
+ final Symbol sym,
+ final DiagnosticPosition deferPos,
+ final PositionCreator creator) {
+ doAnnotateTypeLater(tree, baseTypeAnnos, env, sym, deferPos,
+ creator, false, false);
+ }
+
+ /**
+ * Given a type tree, walk down it and handle any annotations we
+ * find. We also have a set of base-type annotations (which
+ * occurred in a declaration position in source), which must be
+ * type annotations on the base type.
+ *
+ * @param tree The type tree to scan.
+ * @param baseTypeAnnos The base-type annotations.
+ * @param env The environment.
+ * @param sym The symbol to which to attach any annotations we
+ * might find.
+ * @param deferPos The diagnostic position to use.
+ * @param creator The creator to use for making positions.
+ */
+ public void annotateStrictTypeLater(final JCTree tree,
+ final List<JCAnnotation> baseTypeAnnos,
+ final Env<AttrContext> env,
+ final Symbol sym,
+ final DiagnosticPosition deferPos,
+ final PositionCreator creator) {
+ doAnnotateTypeLater(tree, baseTypeAnnos, env, sym, deferPos,
+ creator, true, false);
+ }
+
+ /**
+ * Given a type tree representing an anonymous class' supertype,
+ * walk down it and handle any annotations we find. We also have
+ * a set of base-type annotations (which occurred in a declaration
+ * position in source), which must be type annotations on the base
+ * type.
+ *
+ * @param tree The type tree to scan.
+ * @param baseTypeAnnos The base-type annotations.
+ * @param env The environment.
+ * @param sym The symbol to which to attach any annotations we
+ * might find.
+ * @param deferPos The diagnostic position to use.
+ * @param creator The creator to use for making positions.
+ */
+ public void annotateAnonClassDefLater(final JCTree tree,
+ final List<JCAnnotation> baseTypeAnnos,
+ final Env<AttrContext> env,
+ final Symbol sym,
+ final DiagnosticPosition deferPos,
+ final PositionCreator creator) {
+ doAnnotateTypeLater(tree, baseTypeAnnos, env, sym, deferPos,
+ creator, true, true);
+ }
+
+ // The combined worker function for the annotateTypeLater family.
+ public void doAnnotateTypeLater(final JCTree tree,
+ final List<JCAnnotation> baseTypeAnnos,
+ final Env<AttrContext> env,
+ final Symbol sym,
+ final DiagnosticPosition deferPos,
+ final PositionCreator creator,
+ final boolean onlyTypeAnnos,
+ final boolean secondaryAttr) {
Assert.checkNonNull(sym);
+ Assert.checkNonNull(baseTypeAnnos);
+ Assert.checkNonNull(creator);
+
normal(new Annotate.Worker() {
@Override
public String toString() {
@@ -1002,93 +1874,912 @@
}
@Override
public void run() {
- tree.accept(new TypeAnnotate(env, sym, deferPos));
+ if (!baseTypeAnnos.isEmpty()) {
+ sym.resetAnnotations(); // mark Annotations as incomplete for now
+ }
+
+ tree.accept(typeAnnotator(baseTypeAnnos, sym, env, deferPos,
+ creator, onlyTypeAnnos,
+ secondaryAttr));
}
});
}
/**
- * We need to use a TreeScanner, because it is not enough to visit the top-level
- * annotations. We also need to visit type arguments, etc.
+ * A client passed into various visitors that takes a type path as
+ * an argument and performs an action (typically creating a
+ * TypeAnnotationPosition and then creating a {@code Worker} and
+ * adding it to a queue.
*/
- private class TypeAnnotate extends TreeScanner {
- private final Env<AttrContext> env;
- private final Symbol sym;
- private DiagnosticPosition deferPos;
+ public abstract class PositionCreator {
+ public abstract TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex);
+ }
- public TypeAnnotate(final Env<AttrContext> env,
- final Symbol sym,
- final DiagnosticPosition deferPos) {
+ // For when we don't have a creator. Throws an exception.
+ public final PositionCreator noCreator =
+ new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Sentinel null position creator";
+ }
- this.env = env;
- this.sym = sym;
- this.deferPos = deferPos;
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ throw new AssertionError("No annotation position creator registered");
+ }
+ };
+
+ // For when we are creating annotations that will inevitably
+ // trigger errors. Creates null.
+ public final PositionCreator errorCreator =
+ new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for annotations that represent errors";
}
@Override
- public void visitAnnotatedType(final JCAnnotatedType tree) {
- actualEnterTypeAnnotations(tree.annotations, env, sym, deferPos);
- super.visitAnnotatedType(tree);
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return null;
+ }
+ };
+
+ // Create class extension positions
+ public final PositionCreator extendsCreator =
+ new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for extends";
}
@Override
- public void visitTypeParameter(final JCTypeParameter tree) {
- actualEnterTypeAnnotations(tree.annotations, env, sym, deferPos);
- super.visitTypeParameter(tree);
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.classExtends(path, lambda, -1);
+ }
+ };
+
+ // Create interface implementation positions
+ public PositionCreator implementsCreator(final int idx) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for implements, index " + idx;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.classExtends(path, lambda, idx, -1);
+ }
+ };
+ }
+
+ // Create method parameter positions
+ public final PositionCreator paramCreator(final int idx) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for parameter " + idx;
}
@Override
- public void visitNewArray(final JCNewArray tree) {
- actualEnterTypeAnnotations(tree.annotations, env, sym, deferPos);
- for (List<JCAnnotation> dimAnnos : tree.dimAnnotations)
- actualEnterTypeAnnotations(dimAnnos, env, sym, deferPos);
- super.visitNewArray(tree);
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.methodParameter(path, lambda, idx, -1);
+ }
+ };
+ }
+
+ // Create class type parameter positions
+ public PositionCreator typeParamCreator(final int idx) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for class type parameter " + idx;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.typeParameter(path, lambda, idx, -1);
+ }
+ };
+ }
+
+ public PositionCreator typeParamBoundCreator(final JCTypeParameter typaram,
+ final int param_idx,
+ final int bound_idx) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for class type parameter " + param_idx +
+ ", bound " + bound_idx;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ final int real_bound_idx =
+ typaram.bounds.head.type.isInterface() ? bound_idx + 1 : bound_idx;
+ return TypeAnnotationPosition
+ .typeParameterBound(path, lambda, param_idx, real_bound_idx, -1);
+ }
+ };
+ }
+
+ // Create field positions
+ public final PositionCreator fieldCreator =
+ new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for field declaration";
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.field(path, lambda, -1);
+ }
+ };
+
+ // Create local variable positions
+ public PositionCreator localVarCreator(final int pos) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for local variable declaration at " +
+ pos;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.localVariable(path, lambda, pos);
+ }
+ };
+ }
+
+ // Create resource variable positions.
+ public PositionCreator resourceVarCreator(final int pos) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for resource variable declaration at " +
+ pos;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.resourceVariable(path, lambda, pos);
+ }
+ };
+ }
+
+ // Create exception parameter positions.
+ public PositionCreator exceptionParamCreator(final int pos) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for exception param declaration at " +
+ pos;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.exceptionParameter(path, lambda,
+ typeIndex, pos);
+ }
+ };
+ }
+
+ // Create constructor reference type argument positions.
+ public PositionCreator constructorRefTypeArgCreator(final int idx,
+ final int pos) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for constructor reference type argument " + idx +
+ " at " + pos;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition
+ .constructorRefTypeArg(path, lambda, idx, pos);
+ }
+ };
+ }
+
+ public PositionCreator methodInvokeTypeArgCreator(final int idx,
+ final int pos) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for method invoke type argument " + idx +
+ " at " + pos;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.methodInvocationTypeArg(path, lambda, idx, pos);
+ }
+ };
+ }
+
+ public PositionCreator methodTypeParamCreator(final int idx) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for method type parameter " + idx;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.methodTypeParameter(path, lambda, idx, -1);
+ }
+ };
+ }
+
+ public PositionCreator methodTypeParamBoundCreator(final JCTypeParameter typaram,
+ final int param_idx,
+ final int bound_idx) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for method type parameter " + param_idx +
+ " bound " + bound_idx;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ final int real_bound_idx =
+ typaram.bounds.head.type.isInterface() ? bound_idx + 1 : bound_idx;
+ return TypeAnnotationPosition
+ .methodTypeParameterBound(path, lambda, param_idx, real_bound_idx, -1);
+ }
+ };
+ }
+
+ public PositionCreator throwCreator(final int idx) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for throw, type index " + idx;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.methodThrows(path, lambda, idx, -1);
+ }
+ };
+ }
+
+ public final PositionCreator returnCreator =
+ new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for method return type";
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.methodReturn(path, lambda, -1);
+ }
+ };
+
+ public PositionCreator receiverCreator =
+ new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for method receiver parameter type";
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.methodReceiver(path, lambda, -1);
+ }
+ };
+
+ public PositionCreator methodRefCreator(final int pos) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for method reference at " + pos;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.methodRef(path, lambda, pos);
+ }
+ };
+ }
+
+ public PositionCreator methodRefTypeArgCreator(final int idx,
+ final int pos) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for method reference type argument " + idx +
+ " at " + pos;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.methodRefTypeArg(path, lambda, idx, pos);
+ }
+ };
+ }
+
+ public PositionCreator constructorRefCreator(final int pos) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for constructor reference at " + pos;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.constructorRef(path, lambda, pos);
+ }
+ };
+ }
+
+ public PositionCreator constructorInvokeTypeArgCreator(final int idx,
+ final int pos) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for constructor invoke type argument " + idx +
+ " at " + pos;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.constructorInvocationTypeArg(path, lambda, idx, pos);
+ }
+ };
+ }
+
+ public PositionCreator instanceOfCreator(final int pos) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for instanceof at " + pos;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.instanceOf(path, lambda, pos);
+ }
+ };
+ }
+
+ public PositionCreator newObjCreator(final int pos) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for new at " + pos;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.newObj(path, lambda, pos);
+ }
+ };
+ }
+
+ public PositionCreator castCreator(final int pos) {
+ return new PositionCreator() {
+ @Override
+ public String toString() {
+ return "Position creator for cast at " + pos;
+ }
+
+ @Override
+ public TypeAnnotationPosition create(List<TypePathEntry> path,
+ JCLambda lambda,
+ int typeIndex) {
+ return TypeAnnotationPosition.typeCast(path, lambda, typeIndex, pos);
+ }
+ };
+ }
+
+ public static List<TypePathEntry> makeInners(Type type) {
+ return addInners(type, List.<TypePathEntry>nil());
+ }
+
+ private static List<TypePathEntry> addInners(Type type,
+ List<TypePathEntry> typepath) {
+ Type encl = type.getEnclosingType();
+ while (encl != null && encl.getKind() != TypeKind.NONE &&
+ encl.getKind() != TypeKind.ERROR) {
+ typepath = typepath.append(TypePathEntry.INNER_TYPE);
+ encl = encl.getEnclosingType();
+ }
+ return typepath;
+ }
+
+ /**
+ * Set up the visitor to scan the type tree and handle any
+ * annotations we find. If we are in speculative attribution, we
+ * will not actually attach anything, we will just enter the
+ * annotations and run them through the pipeline to pick up any
+ * errors that might occur.
+ *
+ * @param baseTypeAnnos Annotations on the base type, which need
+ * to be classified if onlyTypeAnnos is false.
+ * @param sym The symbol to which to attach.
+ * @param env The environment.
+ * @param creator The position creator to use.
+ * @param onlyTypeAnnos Whether or not baseTypeAnnos can represent
+ * declaration annotations.
+ * @param secondaryAttr Whether or not we are creating secondary
+ * attributes (see enterTypeAnnotations).
+ */
+ public TypeAnnotate typeAnnotator(final List<JCAnnotation> baseTypeAnnos,
+ final Symbol sym,
+ final Env<AttrContext> env,
+ final DiagnosticPosition deferPos,
+ final PositionCreator creator,
+ final boolean onlyTypeAnnos,
+ final boolean secondaryAttr) {
+ if (!env.info.isSpeculative) {
+ return new TypeAnnotate(baseTypeAnnos, sym, env, deferPos, creator,
+ declAnnotationsAttacher(sym),
+ typeAnnotationsAttacher(sym),
+ onlyTypeAnnos, secondaryAttr);
+ } else {
+ return new TypeAnnotate(baseTypeAnnos, sym, env, deferPos, creator,
+ null, null, onlyTypeAnnos, secondaryAttr);
+ }
+ }
+
+ /**
+ * A visitor that scans a type tree and handles an annotations it finds.
+ *
+ */
+ private class TypeAnnotate extends TreeScanner {
+ // The creator we use to create positions.
+ protected PositionCreator creator;
+ // The current type path
+ private List<TypePathEntry> typepath = List.nil();
+ // The current innermost lambda
+ private JCLambda currentLambda;
+ // The current type index, if we are looking at an
+ // intersection type.
+ private int type_index = 0;
+ // Whether or not we are looking at the innermost type. This
+ // gets used to figure out where to attach base type
+ // annotations.
+ private boolean innermost;
+ // The attachers and reporter we use.
+ private AttributeAttacher<Attribute.Compound> declAttacher;
+ private AttributeAttacher<Attribute.TypeCompound> typeAttacher;
+ private Reporter<Attribute.TypeCompound> reporter;
+ // The symbol to which we are attaching.
+ private final Symbol sym;
+ // The diagnostic position we use.
+ private final DiagnosticPosition deferPos;
+ // The environment
+ private final Env<AttrContext> env;
+ private final List<JCAnnotation> baseTypeAnnos;
+ // Whether or not baseTypeAnnos can be declaration
+ // annotations, or just strictly type annotations.
+ private final boolean onlyTypeAnnos;
+ // Whether or not we are creating secondary attributes (see
+ // enterTypeAnnotations).
+ private final boolean secondaryAttr;
+
+ public TypeAnnotate(final List<JCAnnotation> baseTypeAnnos,
+ final Symbol sym,
+ final Env<AttrContext> env,
+ final DiagnosticPosition deferPos,
+ final PositionCreator creator,
+ final AttributeAttacher<Attribute.Compound> declAttacher,
+ final AttributeAttacher<Attribute.TypeCompound> typeAttacher,
+ final boolean onlyTypeAnnos,
+ final boolean secondaryAttr) {
+ this.baseTypeAnnos = baseTypeAnnos;
+ this.sym = sym;
+ this.env = env;
+ this.deferPos = deferPos;
+ this.currentLambda = env.getLambda();
+ this.creator = creator;
+ this.innermost = true;
+ this.declAttacher = declAttacher;
+ this.typeAttacher = typeAttacher;
+ this.reporter = null;
+ this.onlyTypeAnnos = onlyTypeAnnos;
+ this.secondaryAttr = secondaryAttr;
}
- @Override
- public void visitMethodDef(final JCMethodDecl tree) {
- scan(tree.mods);
- scan(tree.restype);
- scan(tree.typarams);
- scan(tree.recvparam);
- scan(tree.params);
- scan(tree.thrown);
- scan(tree.defaultValue);
- // Do not annotate the body, just the signature.
- // scan(tree.body);
+ // Deal with the base-type annotations. This should only get
+ // called when we are at the inner-most type.
+ private void doBaseTypeAnnos() {
+ if (onlyTypeAnnos) {
+ // If the base type annotations can only be type
+ // annotations, then handle them as such.
+ doTypeAnnos(baseTypeAnnos, false);
+ } else if (!baseTypeAnnos.isEmpty()) {
+ // Otherwise, send them into the repeating annotations
+ // pipeline with a classifying attacher we build based
+ // on the current state.
+ final TypeAnnotationPosition tapos =
+ creator.create(typepath, currentLambda, type_index);
+ annotateNow(baseTypeAnnos, env, sym, deferPos, tapos,
+ classifyingAttacher(sym, declAttacher,
+ typeAttacher, reporter));
+ // Also set up a validator.
+ validate(annotationValidator(baseTypeAnnos, env, sym));
+ }
}
- @Override
- public void visitVarDef(final JCVariableDecl tree) {
- DiagnosticPosition prevPos = deferPos;
- deferPos = tree.pos();
- try {
- if (sym != null && sym.kind == Kinds.VAR) {
- // Don't visit a parameter once when the sym is the method
- // and once when the sym is the parameter.
- scan(tree.mods);
- scan(tree.vartype);
- }
- scan(tree.init);
- } finally {
- deferPos = prevPos;
+ // Deal with type annotations we found while scanning the tree.
+ private void doTypeAnnos(List<JCAnnotation> annos,
+ boolean isTypeParameter) {
+ if (!annos.isEmpty()) {
+ // Grab the reporter and the type attacher (which,
+ // it's ok for either to be null), and combine them
+ // into a reporting attacher.
+ final AttributeAttacher<Attribute.TypeCompound> attacher =
+ reportingTypeAnnotationsAttacher(typeAttacher, reporter);
+ // Create the position using the current type path and
+ // type index.
+ final TypeAnnotationPosition tapos =
+ creator.create(typepath, currentLambda, type_index);
+ // Send the annotations into the repeating annotations
+ // pipeline, and set up a validator.
+ actualEnterTypeAnnotations(annos, env, sym, deferPos, secondaryAttr,
+ tapos, attacher);
+ validate(typeAnnotationValidator(annos, env, isTypeParameter));
}
}
@Override
+ public void visitTypeIdent(final JCPrimitiveTypeTree tree) {
+ // This is one place that can represent the base type.
+ // But we need to make sure we're actually in the
+ // innermost type (ie not a type argument or something).
+ if (innermost) {
+ final AttributeAttacher<Attribute.TypeCompound> oldTypeAttacher = typeAttacher;
+ // We want to update the Type to have annotations.
+ typeAttacher = typeUpdatingTypeAnnotationsAttacher(oldTypeAttacher,
+ tree);
+ // We can't possibly have any INNER_TYPE type path
+ // elements, because these are all primitives.
+ doBaseTypeAnnos();
+ typeAttacher = oldTypeAttacher;
+ }
+ }
+
+ @Override
+ public void visitIdent(final JCIdent tree) {
+ // This is one place that can represent the base type.
+ // But we need to make sure we're actually in the
+ // innermost type (ie not a type argument or something).
+ if (innermost) {
+ final AttributeAttacher<Attribute.TypeCompound> oldTypeAttacher = typeAttacher;
+ // Set up an attacher that updates the Type, so we get
+ // the annotations.
+ typeAttacher = typeUpdatingTypeAnnotationsAttacher(oldTypeAttacher,
+ tree);
+ // Add any INNER_TYPE type path elements we might need.
+ if (tree.type != null) {
+ final List<TypePathEntry> oldpath = typepath;
+ typepath = addInners(tree.type, typepath);
+ doBaseTypeAnnos();
+ typepath = oldpath;
+ } else {
+ doBaseTypeAnnos();
+ }
+ typeAttacher = oldTypeAttacher;
+ }
+ }
+
+ @Override
+ public void visitAnnotatedType(JCAnnotatedType tree) {
+ // This is one place where we run into pure type
+ // annotations.
+ Assert.checkNonNull(tree.getUnderlyingType().type);
+ final boolean oldinnermost = innermost;
+ // Make sure we don't consider ourselves "innermost" when
+ // scanning the annotations.
+ innermost = false;
+ scan(tree.annotations);
+ innermost = oldinnermost;
+ scan(tree.underlyingType);
+ final List<TypePathEntry> oldpath = typepath;
+ typepath = addInners(tree.getUnderlyingType().type, typepath);
+ doTypeAnnos(tree.annotations, false);
+ typepath = oldpath;
+ }
+
+ @Override
+ public void visitTypeArray(JCArrayTypeTree tree) {
+ // This case is simple: just add an ARRAY to the type path.
+ final List<TypePathEntry> oldpath = typepath;
+ typepath = typepath.append(TypePathEntry.ARRAY);
+ super.visitTypeArray(tree);
+ typepath = oldpath;
+ }
+
+ @Override
+ public void visitTypeApply(JCTypeApply tree) {
+ // Handle type arguments
+ Assert.checkNonNull(tree.getType().type);
+ final List<TypePathEntry> oldpath = typepath;
+ // First, look at the base type.
+ scan(tree.clazz);
+
+ // Add any INNER_TYPE path elements we need first
+ if (tree.getType() != null && tree.getType().type != null) {
+ typepath = addInners(tree.getType().type, typepath);
+ }
+ // Make sure we're not considering ourselves innermost
+ // when looking at type arguments.
+ final boolean oldinnermost = innermost;
+ innermost = false;
+ // For each type argument, add a TYPE_ARGUMENT path
+ // element for the right index.
+ int i = 0;
+ for (List<JCExpression> l = tree.arguments; l.nonEmpty();
+ l = l.tail, i++) {
+ final JCExpression arg = l.head;
+ final List<TypePathEntry> noargpath = typepath;
+ typepath = typepath.append(new TypePathEntry(TypePathEntryKind.TYPE_ARGUMENT, i));
+ scan(arg);
+ typepath = noargpath;
+ }
+ typepath = oldpath;
+ innermost = oldinnermost;
+ }
+
+ @Override
+ public void visitNewArray(JCNewArray tree) {
+ // We can also run into type annotations here, on dimAnnos.
+ final List<TypePathEntry> oldpath = typepath;
+ final PositionCreator oldcreator = creator;
+ creator = newObjCreator(tree.pos);
+ doTypeAnnos(tree.annotations, false);
+
+ // Go through the dimensions, set up the type path, and
+ // handle any annetations we find.
+ for (int i = 0; i < tree.dimAnnotations.size(); i++) {
+ final List<JCAnnotation> dimAnnos = tree.dimAnnotations.get(i);
+ doTypeAnnos(dimAnnos, false);
+ // This is right. As per the type annotations spec,
+ // the first array dimension has no arrays in the type
+ // path, the second has one, and so on, and the
+ // element type has n for n dimensions.
+ typepath = typepath.append(TypePathEntry.ARRAY);
+ }
+
+ // The element type is sometimes null, in the case of
+ // array literals.
+ scan(tree.elemtype);
+ typepath = oldpath;
+ creator = oldcreator;
+ }
+
+ @Override
+ public void visitWildcard(JCWildcard tree) {
+ // Simple: add a WILDCARD type path element and continue.
+ final List<TypePathEntry> oldpath = typepath;
+ typepath = typepath.append(TypePathEntry.WILDCARD);
+ super.visitWildcard(tree);
+ typepath = oldpath;
+ }
+
+ @Override
+ public void visitTypeParameter(JCTypeParameter tree) {
+ // This is another place where we can run into pure type
+ // annotations.
+ scan(tree.annotations);
+ Assert.checkNonNull(tree.type);
+ doTypeAnnos(tree.annotations, true);
+ }
+
+ @Override
+ public void visitLambda(JCLambda tree) {
+ // If we run into a lambda, set the current lambda to it.
+ final JCLambda oldLambda = currentLambda;
+ currentLambda = tree;
+ scan(tree.body);
+ scan(tree.params);
+ currentLambda = oldLambda;
+ }
+
+ @Override
+ public void visitTypeIntersection(JCTypeIntersection tree) {
+ final boolean oldinnermost = innermost;
+ // Run through the options, and update the type_index
+ // accordingly.
+ for (List<JCExpression> l = tree.bounds; l.nonEmpty();
+ l = l.tail, type_index++) {
+ scan(l.head);
+ // Set innermost to false after the first element
+ innermost = false;
+ }
+ innermost = oldinnermost;
+ }
+
+ @Override
+ public void visitTypeUnion(JCTypeUnion tree) {
+ final boolean oldinnermost = innermost;
+ // Run through the options, and update the type_index
+ // accordingly.
+ for (List<JCExpression> l = tree.alternatives; l.nonEmpty();
+ l = l.tail, type_index++) {
+ scan(l.head);
+ // Set innermost to false after the first element
+ innermost = false;
+ }
+ innermost = oldinnermost;
+ }
+
+ @Override
+ public void visitSelect(JCFieldAccess tree) {
+ // In this case, we need to possibly set up an
+ // illegalScopingReporter, if the selected type cannot be
+ // annotated.
+ Symbol sym = tree.sym;
+ final AttributeAttacher<Attribute.TypeCompound> oldTypeAttacher = typeAttacher;
+ final Reporter<Attribute.TypeCompound> oldReporter = reporter;
+ // If we're selecting from an interface or a static class,
+ // set up attachers that will only attach declaration
+ // annotations and will report type annotations as errors.
+ Type selectedTy = tree.selected.type;
+ if ((sym != null && (sym.isStatic() || sym.isInterface() ||
+ selectedTy.hasTag(TypeTag.PACKAGE))) ||
+ tree.name == names._class) {
+ typeAttacher = null;
+ reporter = illegalScopingReporter(tree.pos);
+ }
+ super.visitSelect(tree);
+ typeAttacher = oldTypeAttacher;
+ reporter = oldReporter;
+ }
+
+ // These methods stop the visitor from continuing on when it
+ // sees a definition.
+ @Override
+ public void visitVarDef(final JCVariableDecl tree) {
+ }
+
+ @Override
public void visitClassDef(JCClassDecl tree) {
- // We can only hit a classdef if it is declared within
- // a method. Ignore it - the class will be visited
- // separately later.
}
@Override
public void visitNewClass(JCNewClass tree) {
- if (tree.def == null) {
- // For an anonymous class instantiation the class
- // will be visited separately.
- super.visitNewClass(tree);
+
}
}
+
+ // A derived TypeAnnotate visitor that also scans expressions
+ // within Deferred attribution.
+ private class TypeAnnotateExpr extends TypeAnnotate {
+ // This constructor creates an instance suitable for deferred
+ // attribution.
+ public TypeAnnotateExpr(final Symbol sym,
+ final Env<AttrContext> env,
+ final DiagnosticPosition deferPos,
+ final PositionCreator creator) {
+ super(List.<JCAnnotation>nil(), sym, env, deferPos,
+ creator, null, null, false, false);
+ }
+
+ @Override
+ public void visitTypeCast(final JCTypeCast tree) {
+ final PositionCreator oldcreator = creator;
+ creator = castCreator(tree.pos);
+ super.visitTypeCast(tree);
+ creator = oldcreator;
+ }
+
+ @Override
+ public void visitTypeTest(JCInstanceOf tree) {
+ final PositionCreator oldcreator = creator;
+ creator = instanceOfCreator(tree.pos);
+ super.visitTypeTest(tree);
+ creator = oldcreator;
+ }
+
+ @Override
+ public void visitReference(JCMemberReference that) {
+ final boolean isConstructor = that.getName() == names.init;
+ final PositionCreator oldcreator = creator;
+ creator = isConstructor ? constructorRefCreator(that.pos) :
+ methodRefCreator(that.pos);
+ scan(that.expr);
+
+ if (null != that.typeargs) {
+ int i = 0;
+ for (List<JCExpression> l = that.typeargs;
+ l.nonEmpty(); l = l.tail, i++) {
+ final Annotate.PositionCreator typeArgCreator =
+ isConstructor ? constructorRefTypeArgCreator(i, that.pos) :
+ methodRefTypeArgCreator(i, that.pos);
+ final JCExpression arg = l.head;
+ scan(that.expr);
+ }
+ }
+
+ creator = oldcreator;
+ }
+
+ @Override
+ public void visitNewClass(JCNewClass tree) {
+ // This will be visited by Attr later, so don't do
+ // anything.
+ }
+ }
+
+ /**
+ * Set up a visitor to scan an expression and handle any type
+ * annotations it finds, within a deferred attribution context.
+ */
+ public void typeAnnotateExprLater(final JCTree tree,
+ final Env<AttrContext> env,
+ final Symbol sym,
+ final DiagnosticPosition deferPos,
+ final PositionCreator creator) {
+ Assert.checkNonNull(sym);
+ Assert.checkNonNull(creator);
+
+ normal(new Annotate.Worker() {
+ @Override
+ public String toString() {
+ return "type annotate " + tree + " onto " + sym + " in " + sym.owner;
+ }
+ @Override
+ public void run() {
+ tree.accept(new TypeAnnotateExpr(sym, env, deferPos, creator));
+ }
+ });
}
}
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java Wed Jun 18 13:14:15 2014 -0700
@@ -91,7 +91,6 @@
final Types types;
final JCDiagnostic.Factory diags;
final Annotate annotate;
- final TypeAnnotations typeAnnotations;
final DeferredLintHandler deferredLintHandler;
public static Attr instance(Context context) {
@@ -120,7 +119,6 @@
types = Types.instance(context);
diags = JCDiagnostic.Factory.instance(context);
annotate = Annotate.instance(context);
- typeAnnotations = TypeAnnotations.instance(context);
deferredLintHandler = DeferredLintHandler.instance(context);
Options options = Options.instance(context);
@@ -137,6 +135,7 @@
allowTypeAnnos = source.allowTypeAnnotations();
allowLambda = source.allowLambda();
allowDefaultMethods = source.allowDefaultMethods();
+ allowStaticInterfaceMethods = source.allowStaticInterfaceMethods();
sourceName = source.name;
relax = (options.isSet("-retrofit") ||
options.isSet("-relax"));
@@ -194,6 +193,10 @@
*/
boolean allowDefaultMethods;
+ /** Switch: static interface methods enabled?
+ */
+ boolean allowStaticInterfaceMethods;
+
/** Switch: allow references to surrounding object from anonymous
* objects during constructor call?
*/
@@ -434,8 +437,7 @@
public Type attribImportQualifier(JCImport tree, Env<AttrContext> env) {
// Attribute qualifying package or class.
JCFieldAccess s = (JCFieldAccess)tree.qualid;
- return attribTree(s.selected,
- env,
+ return attribTree(s.selected, env,
new ResultInfo(tree.staticImport ? TYP : (TYP | PCK),
Type.noType));
}
@@ -638,7 +640,8 @@
/** Derived visitor method: attribute an expression tree.
*/
public Type attribExpr(JCTree tree, Env<AttrContext> env, Type pt) {
- return attribTree(tree, env, new ResultInfo(VAL, !pt.hasTag(ERROR) ? pt : Type.noType));
+ return attribTree(tree, env,
+ new ResultInfo(VAL, !pt.hasTag(ERROR) ? pt : Type.noType));
}
/** Derived visitor method: attribute an expression tree with
@@ -650,6 +653,7 @@
/** Derived visitor method: attribute a type tree.
*/
+
public Type attribType(JCTree tree, Env<AttrContext> env) {
Type result = attribType(tree, env, Type.noType);
return result;
@@ -664,6 +668,7 @@
/** Derived visitor method: attribute a statement or definition tree.
*/
+
public Type attribStat(JCTree tree, Env<AttrContext> env) {
return attribTree(tree, env, statInfo);
}
@@ -731,7 +736,8 @@
a.tsym.flags_field |= UNATTRIBUTED;
a.bound = Type.noType;
if (!tvar.bounds.isEmpty()) {
- List<Type> bounds = List.of(attribType(tvar.bounds.head, env));
+ List<Type> bounds =
+ List.of(attribType(tvar.bounds.head, env));
for (JCExpression bound : tvar.bounds.tail)
bounds = bounds.prepend(attribType(bound, env));
types.setBounds(a, bounds.reverse());
@@ -765,7 +771,7 @@
* @param type The expected type, or null
* @see VarSymbol#setLazyConstValue
*/
- public Object attribLazyConstantValue(Env<AttrContext> env,
+ public Object attribLazyConstantValue(final Env<AttrContext> env,
JCVariableDecl variable,
Type type) {
@@ -884,6 +890,7 @@
c.flags_field |= NOOUTERTHIS;
}
attribClass(tree.pos(), c);
+
result = tree.type = c.type;
}
}
@@ -1021,10 +1028,6 @@
}
}
- // Attribute all type annotations in the body
- annotate.annotateTypeLater(tree.body, localEnv, m, null);
- annotate.flush();
-
// Attribute method body.
attribStat(tree.body, localEnv);
}
@@ -1038,21 +1041,59 @@
}
}
- public void visitVarDef(JCVariableDecl tree) {
+ public Annotate.PositionCreator getVarCreator(final JCVariableDecl tree) {
+ // Form the enclosing tree node, figure out what kind
+ // of definition we are looking at.
+ switch(env.tree.getTag()) {
+ case TRY:
+ // If it's a try, then we have a resource variable
+ return annotate.resourceVarCreator(tree.pos);
+ case CATCH:
+ // If it's a catch, then we have an exception parameter
+ return annotate.exceptionParamCreator(tree.pos);
+ case LAMBDA: {
+ // If it's a lambda, then we could have a local
+ // variable or a parameter.
+ final JCLambda lambda = (JCLambda) env.tree;
+ // We have to figure out what the index of the
+ // parameter is, and unfortunately, the visitor
+ // and tree APIs don't help us much here. If we
+ // don't find the declaration in the parameter
+ // list, then it must be a local variable.
+ //
+ // This could easily be replaced by an index
+ // parameter, which is -1 for non-indexed
+ // definitions.
+ int index = -1;
+ int i = 0;
+ for (List<JCVariableDecl> l = lambda.params;
+ l.nonEmpty(); l = l.tail, i++) {
+ if (l.head == tree) {
+ index = i;
+ break;
+ }
+ }
+ if (index == -1) {
+ return annotate.localVarCreator(tree.pos);
+ } else {
+ return annotate.paramCreator(index);
+ }
+ }
+ default:
+ // The default case is to treat any declaration as a local
+ // variable.
+ return annotate.localVarCreator(tree.pos);
+ }
+ }
+
+ public void visitVarDef(final JCVariableDecl tree) {
// Local variables have not been entered yet, so we need to do it now:
if (env.info.scope.owner.kind == MTH) {
if (tree.sym != null) {
// parameters have already been entered
env.info.scope.enter(tree.sym);
} else {
- memberEnter.memberEnter(tree, env);
- annotate.flush();
- }
- } else {
- if (tree.init != null) {
- // Field initializer expression need to be entered.
- annotate.annotateTypeLater(tree.init, env, tree.sym, tree.pos());
- annotate.flush();
+ memberEnter.memberEnter(tree, env, getVarCreator(tree));
}
}
@@ -1103,17 +1144,15 @@
// Block is a static or instance initializer;
// let the owner of the environment be a freshly
// created BLOCK-method.
- Env<AttrContext> localEnv =
+ final Env<AttrContext> localEnv =
env.dup(tree, env.info.dup(env.info.scope.dupUnshared()));
localEnv.info.scope.owner =
new MethodSymbol(tree.flags | BLOCK |
env.info.scope.owner.flags() & STRICTFP, names.empty, null,
env.info.scope.owner);
+
if ((tree.flags & STATIC) != 0) localEnv.info.staticLevel++;
-
- // Attribute all type annotations in the block
- annotate.annotateTypeLater(tree, localEnv, localEnv.info.scope.owner, null);
- annotate.flush();
+ attribStats(tree.stats, localEnv);
{
// Store init and clinit type annotations with the ClassSymbol
@@ -1126,8 +1165,6 @@
cs.appendInitTypeAttributes(tas);
}
}
-
- attribStats(tree.stats, localEnv);
} else {
// Create a new local environment with a local scope.
Env<AttrContext> localEnv =
@@ -1481,17 +1518,21 @@
isBooleanOrNumeric(env, condTree.falsepart);
case APPLY:
JCMethodInvocation speculativeMethodTree =
- (JCMethodInvocation)deferredAttr.attribSpeculative(tree, env, unknownExprInfo);
+ (JCMethodInvocation)deferredAttr.attribSpeculative(tree, env, unknownExprInfo,
+ annotate.noCreator);
Type owntype = TreeInfo.symbol(speculativeMethodTree.meth).type.getReturnType();
return types.unboxedTypeOrType(owntype).isPrimitive();
case NEWCLASS:
JCExpression className =
removeClassParams.translate(((JCNewClass)tree).clazz);
JCExpression speculativeNewClassTree =
- (JCExpression)deferredAttr.attribSpeculative(className, env, unknownTypeInfo);
+ (JCExpression)deferredAttr.attribSpeculative(className,
+ env,
+ unknownTypeInfo,
+ annotate.newObjCreator(tree.pos));
return types.unboxedTypeOrType(speculativeNewClassTree.type).isPrimitive();
default:
- Type speculativeType = deferredAttr.attribSpeculative(tree, env, unknownExprInfo).type;
+ Type speculativeType = deferredAttr.attribSpeculative(tree, env, unknownExprInfo, annotate.noCreator).type;
speculativeType = types.unboxedTypeOrType(speculativeType);
return speculativeType.isPrimitive();
}
@@ -1754,7 +1795,28 @@
// Attribute arguments, yielding list of argument types.
attribArgs(tree.args, localEnv, argtypesBuf);
argtypes = argtypesBuf.toList();
- typeargtypes = attribTypes(tree.typeargs, localEnv);
+
+ // Attribute and annotate the type arguments
+ ListBuffer<Type> typeargtypesbuf = new ListBuffer<>();
+ int i = 0;
+
+ for (List<JCExpression> l = tree.typeargs;
+ l.nonEmpty(); l = l.tail, i++) {
+ final JCExpression arg = l.head;
+ try {
+ annotate.enterStart();
+ typeargtypesbuf.append(attribType(arg, localEnv));
+ annotate.annotateTypeLater(arg, localEnv,
+ localEnv.info.scope.owner,
+ tree.pos(),
+ annotate.constructorInvokeTypeArgCreator(i, tree.pos));
+ } finally {
+ annotate.enterDone();
+ }
+ }
+
+ typeargtypes =
+ chk.checkRefTypes(tree.typeargs, typeargtypesbuf.toList());
// Variable `site' points to the class in which the called
// constructor is defined.
@@ -1827,7 +1889,27 @@
// Attribute the arguments, yielding list of argument types, ...
int kind = attribArgs(tree.args, localEnv, argtypesBuf);
argtypes = argtypesBuf.toList();
- typeargtypes = attribAnyTypes(tree.typeargs, localEnv);
+
+ // Attribute and annotate the type arguments
+ ListBuffer<Type> typeargtypesbuf = new ListBuffer<>();
+ int i = 0;
+
+ for (List<JCExpression> l = tree.typeargs;
+ l.nonEmpty(); l = l.tail, i++) {
+ final JCExpression arg = l.head;
+ try {
+ annotate.enterStart();
+ typeargtypesbuf.append(attribType(arg, localEnv));
+ annotate.annotateTypeLater(arg, localEnv,
+ localEnv.info.scope.owner,
+ tree.pos(),
+ annotate.methodInvokeTypeArgCreator(i, tree.pos));
+ } finally {
+ annotate.enterDone();
+ }
+ }
+
+ typeargtypes = typeargtypesbuf.toList();
// ... and attribute the method using as a prototype a methodtype
// whose formal argument types is exactly the list of actual
@@ -1852,6 +1934,7 @@
// current context. Also, capture the return type
result = check(tree, capture(restype), VAL, resultInfo);
}
+
chk.validate(tree.typeargs, localEnv);
}
//where
@@ -1927,14 +2010,12 @@
annoclazzid = (JCAnnotatedType) clazzid;
clazzid = annoclazzid.underlyingType;
}
- } else {
- if (clazz.hasTag(ANNOTATED_TYPE)) {
+ } else if (clazz.hasTag(ANNOTATED_TYPE)) {
annoclazzid = (JCAnnotatedType) clazz;
clazzid = annoclazzid.underlyingType;
} else {
clazzid = clazz;
}
- }
JCExpression clazzid1 = clazzid; // The same in fully qualified form
@@ -1956,11 +2037,12 @@
EndPosTable endPosTable = this.env.toplevel.endPositions;
endPosTable.storeEnd(clazzid1, tree.getEndPosition(endPosTable));
- if (clazz.hasTag(ANNOTATED_TYPE)) {
- JCAnnotatedType annoType = (JCAnnotatedType) clazz;
- List<JCAnnotation> annos = annoType.annotations;
-
- if (annoType.underlyingType.hasTag(TYPEAPPLY)) {
+ if (annoclazzid != null) {
+ JCAnnotatedType annoType = annoclazzid;
+ List<JCAnnotation> annos = annoclazzid.annotations;
+
+ if (clazz.hasTag(TYPEAPPLY)) {
+
clazzid1 = make.at(tree.pos).
TypeApply(clazzid1,
((JCTypeApply) clazz).arguments);
@@ -1977,12 +2059,32 @@
clazz = clazzid1;
}
+ Type clazztype;
+
+ try {
+ annotate.enterStart();
// Attribute clazz expression and store
// symbol + type back into the attributed tree.
- Type clazztype = TreeInfo.isEnumInit(env.tree) ?
+ clazztype = TreeInfo.isEnumInit(env.tree) ?
attribIdentAsEnumType(env, (JCIdent)clazz) :
attribType(clazz, env);
+ if (cdef != null) {
+ // If we are looking at an anonymous class creation, then
+ // we are not allowed to have declaration annotations on
+ // the base type.
+ annotate.annotateStrictTypeLater(clazz, cdef.mods.annotations, localEnv,
+ env.info.scope.owner, tree.pos(),
+ annotate.newObjCreator(tree.pos));
+ } else {
+ // Otherwise, we are.
+ annotate.annotateTypeLater(clazz, localEnv, env.info.scope.owner,
+ tree.pos(), annotate.newObjCreator(tree.pos));
+ }
+ } finally {
+ annotate.enterDone();
+ }
+
clazztype = chk.checkDiamond(tree, clazztype);
chk.validate(clazz, localEnv);
if (tree.encl != null) {
@@ -2011,7 +2113,29 @@
ListBuffer<Type> argtypesBuf = new ListBuffer<>();
int pkind = attribArgs(tree.args, localEnv, argtypesBuf);
List<Type> argtypes = argtypesBuf.toList();
- List<Type> typeargtypes = attribTypes(tree.typeargs, localEnv);
+ List<Type> typeargtypes;
+
+ // Attribute and annotate the type arguments
+ ListBuffer<Type> typeargtypesbuf = new ListBuffer<>();
+ int i = 0;
+
+ for (List<JCExpression> l = tree.typeargs;
+ l.nonEmpty(); l = l.tail, i++) {
+ final JCExpression arg = l.head;
+ try {
+ annotate.enterStart();
+ typeargtypesbuf.append(attribType(arg, localEnv));
+ annotate.annotateTypeLater(arg, localEnv,
+ localEnv.info.scope.owner,
+ tree.pos(),
+ annotate.constructorInvokeTypeArgCreator(i, tree.pos));
+ } finally {
+ annotate.enterDone();
+ }
+ }
+
+ typeargtypes =
+ chk.checkRefTypes(tree.typeargs, typeargtypesbuf.toList());
// If we have made no mistakes in the class type...
if (clazztype.hasTag(CLASS)) {
@@ -2194,7 +2318,9 @@
ta.arguments = List.nil();
ResultInfo findDiamondResult = new ResultInfo(VAL,
resultInfo.checkContext.inferenceContext().free(resultInfo.pt) ? Type.noType : pt());
- Type inferred = deferredAttr.attribSpeculative(tree, env, findDiamondResult).type;
+ Type inferred = deferredAttr.attribSpeculative(tree, env,
+ findDiamondResult,
+ annotate.newObjCreator(tree.pos)).type;
Type polyPt = allowPoly ?
syms.objectType :
clazztype;
@@ -2256,8 +2382,20 @@
Type owntype = types.createErrorType(tree.type);
Env<AttrContext> localEnv = env.dup(tree);
Type elemtype;
+
+ for(List<JCAnnotation> dim : tree.dimAnnotations) {
+ this.attribAnnotationTypes(dim, localEnv);
+ }
+
if (tree.elemtype != null) {
+ try {
+ annotate.enterStart();
elemtype = attribType(tree.elemtype, localEnv);
+ annotate.annotateTypeLater(tree, env, env.info.scope.owner, tree.pos(),
+ annotate.newObjCreator(tree.pos));
+ } finally {
+ annotate.enterDone();
+ }
chk.validate(tree.elemtype, localEnv);
owntype = elemtype;
for (List<JCExpression> l = tree.dims; l.nonEmpty(); l = l.tail) {
@@ -2278,6 +2416,7 @@
elemtype = types.createErrorType(pt());
}
}
+
if (tree.elems != null) {
attribExprs(tree.elems, localEnv, elemtype);
owntype = new ArrayType(elemtype, syms.arrayClass,
@@ -2672,6 +2811,8 @@
@Override
public void visitReference(final JCMemberReference that) {
+ final boolean isConstructor = that.getName() == names.init;
+
if (pt().isErroneous() || (pt().hasTag(NONE) && pt() != Type.recoveryType)) {
if (pt().hasTag(NONE)) {
//method reference only allowed in assignment or method invocation/cast context
@@ -2682,9 +2823,20 @@
}
final Env<AttrContext> localEnv = env.dup(that);
try {
+ Type exprType;
+ try {
+ annotate.enterStart();
//attribute member reference qualifier - if this is a constructor
//reference, the expected kind must be a type
- Type exprType = attribTree(that.expr, env, memberReferenceQualifierResult(that));
+ exprType = attribTree(that.expr, env, memberReferenceQualifierResult(that));
+ final Annotate.PositionCreator creator =
+ isConstructor ? annotate.constructorRefCreator(that.pos) :
+ annotate.methodRefCreator(that.pos);
+ annotate.annotateTypeLater(that.expr, localEnv, env.info.scope.owner,
+ that.pos(), creator);
+ } finally {
+ annotate.enterDone();
+ }
if (that.getMode() == JCMemberReference.ReferenceMode.NEW) {
exprType = chk.checkConstructorRefType(that.expr, exprType);
@@ -2714,7 +2866,24 @@
//attrib type-arguments
List<Type> typeargtypes = List.nil();
if (that.typeargs != null) {
+ try {
+ annotate.enterStart();
typeargtypes = attribTypes(that.typeargs, localEnv);
+
+ // Annotate type arguments
+ int i = 0;
+ for (List<JCExpression> l = that.typeargs;
+ l.nonEmpty(); l = l.tail, i++) {
+ final Annotate.PositionCreator typeArgCreator =
+ isConstructor ? annotate.constructorRefTypeArgCreator(i, that.pos) :
+ annotate.methodRefTypeArgCreator(i, that.pos);
+ final JCExpression arg = l.head;
+ annotate.annotateTypeLater(arg, env, env.info.scope.owner,
+ that.pos(), typeArgCreator);
+ }
+ } finally {
+ annotate.enterDone();
+ }
}
Type desc;
@@ -3088,7 +3257,15 @@
}
public void visitTypeCast(final JCTypeCast tree) {
- Type clazztype = attribType(tree.clazz, env);
+ Type clazztype;
+ try {
+ annotate.enterStart();
+ clazztype = attribType(tree.clazz, env);
+ annotate.annotateTypeLater(tree.clazz, env, env.info.scope.owner,
+ tree.pos(), annotate.castCreator(tree.pos));
+ } finally {
+ annotate.enterDone();
+ }
chk.validate(tree.clazz, env, false);
//a fresh environment is required for 292 inference to work properly ---
//see Infer.instantiatePolymorphicSignatureInstance()
@@ -3121,7 +3298,16 @@
public void visitTypeTest(JCInstanceOf tree) {
Type exprtype = chk.checkNullOrRefType(
tree.expr.pos(), attribExpr(tree.expr, env));
- Type clazztype = attribType(tree.clazz, env);
+ Type clazztype;
+ try {
+ annotate.enterStart();
+ clazztype = attribType(tree.clazz, env);
+ annotate.annotateTypeLater(tree.clazz, env, env.info.scope.owner, tree.pos(),
+ annotate.instanceOfCreator(tree.pos));
+ } finally {
+ annotate.enterDone();
+ }
+
if (!clazztype.hasTag(TYPEVAR)) {
clazztype = chk.checkClassOrArrayType(tree.clazz.pos(), clazztype);
}
@@ -3250,9 +3436,12 @@
if ((pkind() & (PCK | TYP)) == 0)
site = capture(site); // Capture field access
+ if (skind == TYP) {
+ // If the qualifier is a type, annotate it
+ annotate.annotateTypeLater(tree, env, env.info.scope.owner,
+ tree.pos(), annotate.errorCreator);
+ Type elt = site;
// don't allow T.class T[].class, etc
- if (skind == TYP) {
- Type elt = site;
while (elt.hasTag(ARRAY))
elt = ((ArrayType)elt).elemtype;
if (elt.hasTag(TYPEVAR)) {
@@ -3334,6 +3523,10 @@
tree.pos(), site, sym.name, true);
}
}
+ if (!allowStaticInterfaceMethods && sitesym.isInterface() &&
+ sym.isStatic() && sym.kind == MTH) {
+ log.error(tree.pos(), "static.intf.method.invoke.not.supported.in.source", sourceName);
+ }
} else if (sym.kind != ERR && (sym.flags() & STATIC) != 0 && sym.name != names._class) {
// If the qualified item is not a type and the selected item is static, report
// a warning. Make allowance for the class of an array type e.g. Object[].class)
@@ -4081,8 +4274,13 @@
Assert.error("should be handled in Annotate");
}
+ /* This needs to be removed or otherwise changed, as it implicitly
+ * relies on the annotated types having previously been visited by
+ * Annotate.TypeAnnotate.
+ */
public void visitAnnotatedType(JCAnnotatedType tree) {
- Type underlyingType = attribType(tree.getUnderlyingType(), env);
+ Type underlyingType = attribTree(tree.getUnderlyingType(), env,
+ resultInfo);
this.attribAnnotationTypes(tree.annotations, env);
annotateType(tree, tree.annotations);
result = tree.type = underlyingType;
@@ -4101,8 +4299,10 @@
public void run() {
List<Attribute.TypeCompound> compounds = fromAnnotations(annotations);
Assert.check(annotations.size() == compounds.size());
+ if (!tree.type.hasTag(TypeTag.PACKAGE)) {
tree.type = tree.type.annotatedType(compounds);
}
+ }
});
}
@@ -4353,13 +4553,6 @@
checkForSerial(c)) {
checkSerialVersionUID(tree, c);
}
- if (allowTypeAnnos) {
- // Correctly organize the postions of the type annotations
- typeAnnotations.organizeTypeAnnotationsBodies(tree);
-
- // Check type annotations applicability rules
- validateTypeAnnotations(tree, false);
- }
}
// where
boolean checkForSerial(ClassSymbol c) {
@@ -4433,233 +4626,6 @@
return types.capture(type);
}
- public void validateTypeAnnotations(JCTree tree, boolean sigOnly) {
- tree.accept(new TypeAnnotationsValidator(sigOnly));
- }
- //where
- private final class TypeAnnotationsValidator extends TreeScanner {
-
- private final boolean sigOnly;
- public TypeAnnotationsValidator(boolean sigOnly) {
- this.sigOnly = sigOnly;
- }
-
- public void visitAnnotation(JCAnnotation tree) {
- chk.validateTypeAnnotation(tree, false);
- super.visitAnnotation(tree);
- }
- public void visitAnnotatedType(JCAnnotatedType tree) {
- if (!tree.underlyingType.type.isErroneous()) {
- super.visitAnnotatedType(tree);
- }
- }
- public void visitTypeParameter(JCTypeParameter tree) {
- chk.validateTypeAnnotations(tree.annotations, true);
- scan(tree.bounds);
- // Don't call super.
- // This is needed because above we call validateTypeAnnotation with
- // false, which would forbid annotations on type parameters.
- // super.visitTypeParameter(tree);
- }
- public void visitMethodDef(JCMethodDecl tree) {
- if (tree.recvparam != null &&
- !tree.recvparam.vartype.type.isErroneous()) {
- checkForDeclarationAnnotations(tree.recvparam.mods.annotations,
- tree.recvparam.vartype.type.tsym);
- }
- if (tree.restype != null && tree.restype.type != null) {
- validateAnnotatedType(tree.restype, tree.restype.type);
- }
- if (sigOnly) {
- scan(tree.mods);
- scan(tree.restype);
- scan(tree.typarams);
- scan(tree.recvparam);
- scan(tree.params);
- scan(tree.thrown);
- } else {
- scan(tree.defaultValue);
- scan(tree.body);
- }
- }
- public void visitVarDef(final JCVariableDecl tree) {
- //System.err.println("validateTypeAnnotations.visitVarDef " + tree);
- if (tree.sym != null && tree.sym.type != null)
- validateAnnotatedType(tree.vartype, tree.sym.type);
- scan(tree.mods);
- scan(tree.vartype);
- if (!sigOnly) {
- scan(tree.init);
- }
- }
- public void visitTypeCast(JCTypeCast tree) {
- if (tree.clazz != null && tree.clazz.type != null)
- validateAnnotatedType(tree.clazz, tree.clazz.type);
- super.visitTypeCast(tree);
- }
- public void visitTypeTest(JCInstanceOf tree) {
- if (tree.clazz != null && tree.clazz.type != null)
- validateAnnotatedType(tree.clazz, tree.clazz.type);
- super.visitTypeTest(tree);
- }
- public void visitNewClass(JCNewClass tree) {
- if (tree.clazz.hasTag(ANNOTATED_TYPE)) {
- checkForDeclarationAnnotations(((JCAnnotatedType) tree.clazz).annotations,
- tree.clazz.type.tsym);
- }
- if (tree.def != null) {
- checkForDeclarationAnnotations(tree.def.mods.annotations, tree.clazz.type.tsym);
- }
- if (tree.clazz.type != null) {
- validateAnnotatedType(tree.clazz, tree.clazz.type);
- }
- super.visitNewClass(tree);
- }
- public void visitNewArray(JCNewArray tree) {
- if (tree.elemtype != null && tree.elemtype.type != null) {
- if (tree.elemtype.hasTag(ANNOTATED_TYPE)) {
- checkForDeclarationAnnotations(((JCAnnotatedType) tree.elemtype).annotations,
- tree.elemtype.type.tsym);
- }
- validateAnnotatedType(tree.elemtype, tree.elemtype.type);
- }
- super.visitNewArray(tree);
- }
- public void visitClassDef(JCClassDecl tree) {
- //System.err.println("validateTypeAnnotations.visitClassDef " + tree);
- if (sigOnly) {
- scan(tree.mods);
- scan(tree.typarams);
- scan(tree.extending);
- scan(tree.implementing);
- }
- for (JCTree member : tree.defs) {
- if (member.hasTag(Tag.CLASSDEF)) {
- continue;
- }
- scan(member);
- }
- }
- public void visitBlock(JCBlock tree) {
- if (!sigOnly) {
- scan(tree.stats);
- }
- }
-
- /* I would want to model this after
- * com.sun.tools.javac.comp.Check.Validator.visitSelectInternal(JCFieldAccess)
- * and override visitSelect and visitTypeApply.
- * However, we only set the annotated type in the top-level type
- * of the symbol.
- * Therefore, we need to override each individual location where a type
- * can occur.
- */
- private void validateAnnotatedType(final JCTree errtree, final Type type) {
- //System.err.println("Attr.validateAnnotatedType: " + errtree + " type: " + type);
-
- if (type.isPrimitiveOrVoid()) {
- return;
- }
-
- JCTree enclTr = errtree;
- Type enclTy = type;
-
- boolean repeat = true;
- while (repeat) {
- if (enclTr.hasTag(TYPEAPPLY)) {
- List<Type> tyargs = enclTy.getTypeArguments();
- List<JCExpression> trargs = ((JCTypeApply)enclTr).getTypeArguments();
- if (trargs.length() > 0) {
- // Nothing to do for diamonds
- if (tyargs.length() == trargs.length()) {
- for (int i = 0; i < tyargs.length(); ++i) {
- validateAnnotatedType(trargs.get(i), tyargs.get(i));
- }
- }
- // If the lengths don't match, it's either a diamond
- // or some nested type that redundantly provides
- // type arguments in the tree.
- }
-
- // Look at the clazz part of a generic type
- enclTr = ((JCTree.JCTypeApply)enclTr).clazz;
- }
-
- if (enclTr.hasTag(SELECT)) {
- enclTr = ((JCTree.JCFieldAccess)enclTr).getExpression();
- if (enclTy != null &&
- !enclTy.hasTag(NONE)) {
- enclTy = enclTy.getEnclosingType();
- }
- } else if (enclTr.hasTag(ANNOTATED_TYPE)) {
- JCAnnotatedType at = (JCTree.JCAnnotatedType) enclTr;
- if (enclTy == null || enclTy.hasTag(NONE)) {
- if (at.getAnnotations().size() == 1) {
- log.error(at.underlyingType.pos(), "cant.type.annotate.scoping.1", at.getAnnotations().head.attribute);
- } else {
- ListBuffer<Attribute.Compound> comps = new ListBuffer<>();
- for (JCAnnotation an : at.getAnnotations()) {
- comps.add(an.attribute);
- }
- log.error(at.underlyingType.pos(), "cant.type.annotate.scoping", comps.toList());
- }
- repeat = false;
- }
- enclTr = at.underlyingType;
- // enclTy doesn't need to be changed
- } else if (enclTr.hasTag(IDENT)) {
- repeat = false;
- } else if (enclTr.hasTag(JCTree.Tag.WILDCARD)) {
- JCWildcard wc = (JCWildcard) enclTr;
- if (wc.getKind() == JCTree.Kind.EXTENDS_WILDCARD) {
- validateAnnotatedType(wc.getBound(), ((WildcardType)enclTy).getExtendsBound());
- } else if (wc.getKind() == JCTree.Kind.SUPER_WILDCARD) {
- validateAnnotatedType(wc.getBound(), ((WildcardType)enclTy).getSuperBound());
- } else {
- // Nothing to do for UNBOUND
- }
- repeat = false;
- } else if (enclTr.hasTag(TYPEARRAY)) {
- JCArrayTypeTree art = (JCArrayTypeTree) enclTr;
- validateAnnotatedType(art.getType(), ((ArrayType)enclTy).getComponentType());
- repeat = false;
- } else if (enclTr.hasTag(TYPEUNION)) {
- JCTypeUnion ut = (JCTypeUnion) enclTr;
- for (JCTree t : ut.getTypeAlternatives()) {
- validateAnnotatedType(t, t.type);
- }
- repeat = false;
- } else if (enclTr.hasTag(TYPEINTERSECTION)) {
- JCTypeIntersection it = (JCTypeIntersection) enclTr;
- for (JCTree t : it.getBounds()) {
- validateAnnotatedType(t, t.type);
- }
- repeat = false;
- } else if (enclTr.getKind() == JCTree.Kind.PRIMITIVE_TYPE ||
- enclTr.getKind() == JCTree.Kind.ERRONEOUS) {
- repeat = false;
- } else {
- Assert.error("Unexpected tree: " + enclTr + " with kind: " + enclTr.getKind() +
- " within: "+ errtree + " with kind: " + errtree.getKind());
- }
- }
- }
-
- private void checkForDeclarationAnnotations(List<? extends JCAnnotation> annotations,
- Symbol sym) {
- // Ensure that no declaration annotations are present.
- // Note that a tree type might be an AnnotatedType with
- // empty annotations, if only declaration annotations were given.
- // This method will raise an error for such a type.
- for (JCAnnotation ai : annotations) {
- if (!ai.type.isErroneous() &&
- typeAnnotations.annotationType(ai.attribute, sym) == TypeAnnotations.AnnotationType.DECLARATION) {
- log.error(ai.pos(), "annotation.type.not.applicable");
- }
- }
- }
- }
-
// <editor-fold desc="post-attribution visitor">
/**
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/AttrContext.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/AttrContext.java Wed Jun 18 13:14:15 2014 -0700
@@ -58,6 +58,11 @@
*/
boolean isSerializable = false;
+ /**
+ * Are we doing speculative attribution?
+ */
+ boolean isSpeculative = false;
+
/** Are arguments to current function applications boxed into an array for varargs?
*/
Resolve.MethodResolutionPhase pendingResolutionPhase = null;
@@ -94,6 +99,7 @@
info.returnResult = returnResult;
info.defaultSuperCallSite = defaultSuperCallSite;
info.isSerializable = isSerializable;
+ info.isSpeculative = isSpeculative;
return info;
}
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Wed Jun 18 13:14:15 2014 -0700
@@ -1041,7 +1041,9 @@
switch (sym.kind) {
case VAR:
- if (sym.owner.kind != TYP)
+ if (TreeInfo.isReceiverParam(tree))
+ mask = ReceiverParamFlags;
+ else if (sym.owner.kind != TYP)
mask = LocalVarFlags;
else if ((sym.owner.flags_field & INTERFACE) != 0)
mask = implicit = InterfaceVarFlags;
@@ -1818,6 +1820,11 @@
Type t1,
Type t2,
Type site) {
+ if ((site.tsym.flags() & COMPOUND) != 0) {
+ // special case for intersections: need to eliminate wildcards in supertypes
+ t1 = types.capture(t1);
+ t2 = types.capture(t2);
+ }
return firstIncompatibility(pos, t1, t2, site) == null;
}
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,6 +25,7 @@
package com.sun.tools.javac.comp;
+import com.sun.source.tree.*;
import com.sun.source.tree.LambdaExpressionTree.BodyKind;
import com.sun.tools.javac.code.*;
import com.sun.tools.javac.tree.*;
@@ -76,6 +77,7 @@
final Types types;
final Flow flow;
final Names names;
+ final Annotate annotate;
public static DeferredAttr instance(Context context) {
DeferredAttr instance = context.get(deferredAttrKey);
@@ -99,6 +101,7 @@
flow = Flow.instance(context);
names = Names.instance(context);
stuckTree = make.Ident(names.empty).setType(Type.stuckType);
+ annotate = Annotate.instance(context);
emptyDeferredAttrContext =
new DeferredAttrContext(AttrMode.CHECK, null, MethodResolutionPhase.BOX, infer.emptyContext, null, null) {
@Override
@@ -133,7 +136,8 @@
AttrMode mode;
SpeculativeCache speculativeCache;
- DeferredType(JCExpression tree, Env<AttrContext> env) {
+ DeferredType(JCExpression tree,
+ Env<AttrContext> env) {
super(null, noAnnotations);
this.tree = tree;
this.env = attr.copyEnv(env);
@@ -277,12 +281,18 @@
//Note: if a symbol is imported twice we might do two identical
//speculative rounds...
Assert.check(dt.mode == null || dt.mode == AttrMode.SPECULATIVE);
- JCTree speculativeTree = attribSpeculative(dt.tree, dt.env, resultInfo);
+ JCTree speculativeTree = attribSpeculative(dt.tree, dt.env,
+ resultInfo,
+ annotate.noCreator);
dt.speculativeCache.put(speculativeTree, resultInfo);
return speculativeTree.type;
case CHECK:
Assert.check(dt.mode != null);
- return attr.attribTree(dt.tree, dt.env, resultInfo);
+ final boolean oldSpeculative = dt.env.info.isSpeculative;
+ dt.env.info.isSpeculative = false;
+ Type out = attr.attribTree(dt.tree, dt.env, resultInfo);
+ dt.env.info.isSpeculative = oldSpeculative;
+ return out;
}
Assert.error();
return null;
@@ -359,9 +369,13 @@
* restored after type-checking. All diagnostics (but critical ones) are
* disabled during speculative type-checking.
*/
- JCTree attribSpeculative(JCTree tree, Env<AttrContext> env, ResultInfo resultInfo) {
+ JCTree attribSpeculative(JCTree tree,
+ Env<AttrContext> env,
+ ResultInfo resultInfo,
+ Annotate.PositionCreator creator) {
final JCTree newTree = new TreeCopier<>(make).copy(tree);
Env<AttrContext> speculativeEnv = env.dup(newTree, env.info.dup(env.info.scope.dupUnshared()));
+ speculativeEnv.info.isSpeculative = true;
speculativeEnv.info.scope.owner = env.info.scope.owner;
Log.DeferredDiagnosticHandler deferredDiagnosticHandler =
new Log.DeferredDiagnosticHandler(log, new Filter<JCDiagnostic>() {
@@ -385,6 +399,9 @@
});
try {
attr.attribTree(newTree, speculativeEnv, resultInfo);
+ annotate.typeAnnotateExprLater(newTree, speculativeEnv,
+ speculativeEnv.info.scope.owner,
+ newTree.pos(), creator);
unenterScanner.scan(newTree);
return newTree;
} finally {
@@ -741,8 +758,11 @@
checkContext.report(null, ex.getDiagnostic());
}
Env<AttrContext> localEnv = env.dup(tree);
- JCExpression exprTree = (JCExpression)attribSpeculative(tree.getQualifierExpression(), localEnv,
- attr.memberReferenceQualifierResult(tree));
+ JCExpression exprTree =
+ (JCExpression)attribSpeculative(tree.getQualifierExpression(),
+ localEnv,
+ attr.memberReferenceQualifierResult(tree),
+ annotate.methodRefCreator(tree.pos));
ListBuffer<Type> argtypes = new ListBuffer<>();
for (Type t : types.findDescriptorType(pt).getParameterTypes()) {
argtypes.append(Type.noType);
@@ -1164,8 +1184,11 @@
public void visitReference(JCMemberReference tree) {
//perform arity-based check
Env<AttrContext> localEnv = env.dup(tree);
- JCExpression exprTree = (JCExpression)attribSpeculative(tree.getQualifierExpression(), localEnv,
- attr.memberReferenceQualifierResult(tree));
+ JCExpression exprTree =
+ (JCExpression)attribSpeculative(tree.getQualifierExpression(),
+ localEnv,
+ attr.memberReferenceQualifierResult(tree),
+ annotate.methodRefCreator(tree.pos));
JCMemberReference mref2 = new TreeCopier<Void>(make).copy(tree);
mref2.expr = exprTree;
Symbol res =
@@ -1309,7 +1332,7 @@
return null;
site = resolvedReturnType.type;
} else {
- site = attribSpeculative(rec, env, attr.unknownTypeExprInfo).type;
+ site = attribSpeculative(rec, env, attr.unknownTypeExprInfo, annotate.noCreator).type;
}
} else {
site = env.enclClass.sym.type;
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Env.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Env.java Wed Jun 18 13:14:15 2014 -0700
@@ -26,6 +26,7 @@
package com.sun.tools.javac.comp;
import com.sun.tools.javac.tree.*;
+import com.sun.tools.javac.tree.JCTree.JCLambda;
import java.util.Iterator;
import java.util.NoSuchElementException;
@@ -156,4 +157,10 @@
}
};
}
+
+ public JCLambda getLambda() {
+ Env<A> out = enclosing(JCTree.Tag.LAMBDA);
+
+ return out != null ? (JCLambda) out.tree : null;
+ }
}
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,8 +35,9 @@
import com.sun.tools.javac.tree.*;
import com.sun.tools.javac.util.*;
+import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.code.Type.*;
-import com.sun.tools.javac.code.Symbol.*;
+import com.sun.tools.javac.code.TypeAnnotationPosition.*;
import com.sun.tools.javac.tree.JCTree.*;
import static com.sun.tools.javac.code.Flags.*;
@@ -75,7 +76,6 @@
private final TreeMaker make;
private final Todo todo;
private final Annotate annotate;
- private final TypeAnnotations typeAnnotations;
private final Types types;
private final JCDiagnostic.Factory diags;
private final Source source;
@@ -101,7 +101,6 @@
make = TreeMaker.instance(context);
todo = Todo.instance(context);
annotate = Annotate.instance(context);
- typeAnnotations = TypeAnnotations.instance(context);
types = Types.instance(context);
diags = JCDiagnostic.Factory.instance(context);
source = Source.instance(context);
@@ -131,6 +130,13 @@
*/
boolean completionEnabled = true;
+ /** The creator that will be used for any varDef's we visit. This
+ * is used to create the position for any type annotations (or
+ * annotations that potentially are type annotations) that we
+ * encounter.
+ */
+ Annotate.PositionCreator creator;
+
/* ---------- Processing import clauses ----------------
*/
@@ -348,6 +354,7 @@
}
/** Construct method type from method signature.
+ * @param msym The MethodSymbol for the method.
* @param typarams The method's type parameters.
* @param params The method's value parameters.
* @param res The method's result type,
@@ -356,33 +363,89 @@
* null if none given; TODO: or already set here?
* @param thrown The method's thrown exceptions.
* @param env The method's (local) environment.
+ * @param declAnnos The annotations on the method declaration,
+ * some of which may be type annotations on
+ * the return type.
+ * @param deferPos The deferred diagnostic position for error
+ * reporting.
*/
- Type signature(MethodSymbol msym,
- List<JCTypeParameter> typarams,
- List<JCVariableDecl> params,
- JCTree res,
- JCVariableDecl recvparam,
- List<JCExpression> thrown,
- Env<AttrContext> env) {
+ Type signature(final MethodSymbol msym,
+ final List<JCTypeParameter> typarams,
+ final List<JCVariableDecl> params,
+ final JCTree res,
+ final JCVariableDecl recvparam,
+ final List<JCExpression> thrown,
+ final Env<AttrContext> env,
+ final List<JCAnnotation> declAnnos,
+ final DiagnosticPosition deferPos) {
+ int i;
// Enter and attribute type parameters.
List<Type> tvars = enter.classEnter(typarams, env);
attr.attribTypeVariables(typarams, env);
- // Enter and attribute value parameters.
+ // Handle type annotations on type parameters.
+ i = 0;
+ for (List<JCTypeParameter> l = typarams; l.nonEmpty();
+ l = l.tail, i++) {
+ final JCTypeParameter param = l.head;
+ annotate.annotateTypeLater(param, env, msym, deferPos,
+ annotate.methodTypeParamCreator(i));
+ // ...and bounds on type parameters.
+ int j = 0;
+ for (List<JCExpression> bounds = param.bounds;
+ bounds.nonEmpty(); bounds = bounds.tail, j++) {
+ annotate.annotateTypeLater(bounds.head, env, msym, deferPos,
+ annotate.methodTypeParamBoundCreator(param, i, j));
+ }
+ }
+
+ // Enter and attribute value parameters. Type annotations get
+ // METHOD_FORMAL_PARAMETER positions.
ListBuffer<Type> argbuf = new ListBuffer<>();
- for (List<JCVariableDecl> l = params; l.nonEmpty(); l = l.tail) {
- memberEnter(l.head, env);
+ i = 0;
+ for (List<JCVariableDecl> l = params; l.nonEmpty(); l = l.tail, i++) {
+ // The types will get annotated by visitVarDef
+ memberEnter(l.head, env, annotate.paramCreator(i));
argbuf.append(l.head.vartype.type);
}
// Attribute result type, if one is given.
- Type restype = res == null ? syms.voidType : attr.attribType(res, env);
+ Type restype;
+
+ if (res != null) {
+ // If we have any declaration annotations, they might
+ // be/also be type annotations on the return type. We
+ // pass them in, so they get classified and then attached
+ // to the method, or the return type, or both.
+ restype = attr.attribType(res, env);
+ annotate.annotateTypeLater(res, declAnnos, env, msym, deferPos,
+ annotate.returnCreator);
+ } else {
+ // For constructors, we don't actually have a type, so we
+ // can't have a type path (except for INNER_TYPE), and we
+ // don't have annotations on arrays, type arguments, and
+ // the like.
+
+ // The only type path we have is if we are in an inner type.
+ List<TypePathEntry> typepath = Annotate.makeInners(msym.owner.type);
+ TypeAnnotationPosition tapos =
+ TypeAnnotationPosition.methodReturn(typepath, env.getLambda(), -1);
+
+ // We don't have to walk down a type. We just have to do
+ // repeating annotation handling, then classify and attach
+ // the annotations.
+ annotate.annotateWithClassifyLater(declAnnos, env, msym,
+ deferPos, tapos);
+ restype = syms.voidType;
+ }
+
// Attribute receiver type, if one is given.
Type recvtype;
if (recvparam!=null) {
- memberEnter(recvparam, env);
+ // The type will get annotated by visitVarDef
+ memberEnter(recvparam, env, annotate.receiverCreator);
recvtype = recvparam.vartype.type;
} else {
recvtype = null;
@@ -390,8 +453,12 @@
// Attribute thrown exceptions.
ListBuffer<Type> thrownbuf = new ListBuffer<>();
- for (List<JCExpression> l = thrown; l.nonEmpty(); l = l.tail) {
+ i = 0;
+ for (List<JCExpression> l = thrown; l.nonEmpty(); l = l.tail, i++) {
Type exc = attr.attribType(l.head, env);
+ // Annotate each exception type.
+ annotate.annotateTypeLater(l.head, env, msym, deferPos,
+ annotate.throwCreator(i));
if (!exc.hasTag(TYPEVAR)) {
exc = chk.checkClassType(l.head.pos(), exc);
} else if (exc.tsym.owner == msym) {
@@ -420,33 +487,49 @@
/** Enter field and method definitions and process import
* clauses, catching any completion failure exceptions.
*/
- protected void memberEnter(JCTree tree, Env<AttrContext> env) {
+ protected void memberEnter(JCTree tree, Env<AttrContext> env,
+ Annotate.PositionCreator creator) {
Env<AttrContext> prevEnv = this.env;
+ Annotate.PositionCreator prevCreator = this.creator;
try {
this.env = env;
+ this.creator = creator;
tree.accept(this);
} catch (CompletionFailure ex) {
chk.completionError(tree.pos(), ex);
} finally {
+ this.creator = prevCreator;
this.env = prevEnv;
}
}
+
+ protected void memberEnter(JCTree tree, Env<AttrContext> env) {
+ memberEnter(tree, env, annotate.noCreator);
+ }
+
/** Enter members from a list of trees.
*/
- void memberEnter(List<? extends JCTree> trees, Env<AttrContext> env) {
+ void memberEnter(List<? extends JCTree> trees,
+ Env<AttrContext> env,
+ Annotate.PositionCreator creator) {
for (List<? extends JCTree> l = trees; l.nonEmpty(); l = l.tail)
- memberEnter(l.head, env);
+ memberEnter(l.head, env, creator);
+ }
+
+ void memberEnter(List<? extends JCTree> trees,
+ Env<AttrContext> env) {
+ memberEnter(trees, env, annotate.noCreator);
}
/** Enter members for a class.
*/
- void finishClass(JCClassDecl tree, Env<AttrContext> env) {
+ void finishClass(final JCClassDecl tree, final Env<AttrContext> env) {
if ((tree.mods.flags & Flags.ENUM) != 0 &&
(types.supertype(tree.sym.type).tsym.flags() & Flags.ENUM) == 0) {
addEnumMembers(tree, env);
}
- memberEnter(tree.defs, env);
+ memberEnter(tree.defs, env, annotate.fieldCreator);
}
/** Add the implicit members for an enum type
@@ -521,7 +604,7 @@
}
}
// process package annotations
- annotate.annotateLater(tree.annotations, env, env.toplevel.packge, null);
+ annotate.annotateLater(tree.annotations, env, env.toplevel.packge);
}
// process the non-static imports and the static imports of types.
@@ -567,15 +650,13 @@
Env<AttrContext> localEnv = methodEnv(tree, env);
- annotate.enterStart();
- try {
DiagnosticPosition prevLintPos = deferredLintHandler.setPos(tree.pos());
try {
// Compute the method type
m.type = signature(m, tree.typarams, tree.params,
tree.restype, tree.recvparam,
- tree.thrown,
- localEnv);
+ tree.thrown, localEnv,
+ tree.mods.annotations, tree.pos());
} finally {
deferredLintHandler.setPos(prevLintPos);
}
@@ -602,16 +683,9 @@
enclScope.enter(m);
}
- annotate.annotateLater(tree.mods.annotations, localEnv, m, tree.pos());
- // Visit the signature of the method. Note that
- // TypeAnnotate doesn't descend into the body.
- annotate.annotateTypeLater(tree, localEnv, m, tree.pos());
-
if (tree.defaultValue != null)
- annotateDefaultValueLater(tree.defaultValue, localEnv, m);
- } finally {
- annotate.enterDone();
- }
+ annotateDefaultValueLater(tree.defaultValue, localEnv,
+ m, annotate.noCreator);
}
/** Create a fresh environment for method bodies.
@@ -646,22 +720,8 @@
attr.attribIdentAsEnumType(localEnv, (JCIdent)tree.vartype);
} else {
attr.attribType(tree.vartype, localEnv);
- if (tree.nameexpr != null) {
- attr.attribExpr(tree.nameexpr, localEnv);
- MethodSymbol m = localEnv.enclMethod.sym;
- if (m.isConstructor()) {
- Type outertype = m.owner.owner.type;
- if (outertype.hasTag(TypeTag.CLASS)) {
- checkType(tree.vartype, outertype, "incorrect.constructor.receiver.type");
- checkType(tree.nameexpr, outertype, "incorrect.constructor.receiver.name");
- } else {
- log.error(tree, "receiver.parameter.not.applicable.constructor.toplevel.class");
- }
- } else {
- checkType(tree.vartype, m.owner.type, "incorrect.receiver.type");
- checkType(tree.nameexpr, m.owner.type, "incorrect.receiver.name");
- }
- }
+ if (TreeInfo.isReceiverParam(tree))
+ checkReceiver(tree, localEnv);
}
} finally {
deferredLintHandler.setPos(prevLintPos);
@@ -695,8 +755,18 @@
chk.checkTransparentVar(tree.pos(), v, enclScope);
enclScope.enter(v);
}
- annotate.annotateLater(tree.mods.annotations, localEnv, v, tree.pos());
- annotate.annotateTypeLater(tree.vartype, env, v, tree.pos());
+ if (TreeInfo.isReceiverParam(tree)) {
+ // If we are dealing with a receiver parameter, then
+ // we only allow base type annotations to be type
+ // annotations. Receivers are not allowed to have
+ // declaration annotations.
+ annotate.annotateStrictTypeLater(tree.vartype, tree.mods.annotations,
+ localEnv, v, tree.pos(), creator);
+ } else {
+ // Otherwise, we annotate the type.
+ annotate.annotateTypeLater(tree.vartype, tree.mods.annotations,
+ localEnv, v, tree.pos(), creator);
+ }
v.pos = tree.pos;
} finally {
annotate.enterDone();
@@ -708,6 +778,26 @@
log.error(tree, diag, type, tree.type);
}
}
+ void checkReceiver(JCVariableDecl tree, Env<AttrContext> localEnv) {
+ attr.attribExpr(tree.nameexpr, localEnv);
+ MethodSymbol m = localEnv.enclMethod.sym;
+ if (m.isConstructor()) {
+ Type outertype = m.owner.owner.type;
+ if (outertype.hasTag(TypeTag.METHOD)) {
+ // we have a local inner class
+ outertype = m.owner.owner.owner.type;
+ }
+ if (outertype.hasTag(TypeTag.CLASS)) {
+ checkType(tree.vartype, outertype, "incorrect.constructor.receiver.type");
+ checkType(tree.nameexpr, outertype, "incorrect.constructor.receiver.name");
+ } else {
+ log.error(tree, "receiver.parameter.not.applicable.constructor.toplevel.class");
+ }
+ } else {
+ checkType(tree.vartype, m.owner.type, "incorrect.receiver.type");
+ checkType(tree.nameexpr, m.owner.type, "incorrect.receiver.name");
+ }
+ }
public boolean needsLazyConstValue(JCTree tree) {
InitTreeVisitor initTreeVisitor = new InitTreeVisitor();
@@ -849,7 +939,8 @@
/** Queue processing of an attribute default value. */
void annotateDefaultValueLater(final JCExpression defaultValue,
final Env<AttrContext> localEnv,
- final MethodSymbol m) {
+ final MethodSymbol m,
+ final Annotate.PositionCreator creator) {
annotate.normal(new Annotate.Worker() {
@Override
public String toString() {
@@ -936,22 +1027,44 @@
// create an environment for evaluating the base clauses
Env<AttrContext> baseEnv = baseEnv(tree, env);
- if (tree.extending != null)
- annotate.annotateTypeLater(tree.extending, baseEnv, sym, tree.pos());
- for (JCExpression impl : tree.implementing)
- annotate.annotateTypeLater(impl, baseEnv, sym, tree.pos());
- annotate.flush();
+ // Annotations.
+ // In general, we cannot fully process annotations yet, but we
+ // can attribute the annotation types and then check to see if the
+ // @Deprecated annotation is present.
+ attr.attribAnnotationTypes(tree.mods.annotations, baseEnv);
+ if (hasDeprecatedAnnotation(tree.mods.annotations))
+ c.flags_field |= DEPRECATED;
+
+ // Don't attach declaration annotations to anonymous
+ // classes, they get handled specially below.
+ if (!sym.isAnonymous()) {
+ annotate.annotateLater(tree.mods.annotations, baseEnv,
+ c, tree.pos());
+ }
// Determine supertype.
- Type supertype =
- (tree.extending != null)
- ? attr.attribBase(tree.extending, baseEnv, true, false, true)
- : ((tree.mods.flags & Flags.ENUM) != 0)
+ Type supertype;
+
+ if (tree.extending != null) {
+ supertype = attr.attribBase(tree.extending, baseEnv,
+ true, false, true);
+ if (sym.isAnonymous()) {
+ annotate.annotateAnonClassDefLater(tree.extending,
+ tree.mods.annotations,
+ baseEnv, sym, tree.pos(),
+ annotate.extendsCreator);
+ } else {
+ annotate.annotateTypeLater(tree.extending, baseEnv, sym,
+ tree.pos(), annotate.extendsCreator);
+ }
+ } else {
+ supertype = ((tree.mods.flags & Flags.ENUM) != 0)
? attr.attribBase(enumBase(tree.pos, c), baseEnv,
true, false, false)
: (c.fullname == names.java_lang_Object)
? Type.noType
: syms.objectType;
+ }
ct.supertype_field = modelMissingTypes(supertype, tree.extending, false);
// Determine interfaces.
@@ -959,18 +1072,33 @@
ListBuffer<Type> all_interfaces = null; // lazy init
Set<Type> interfaceSet = new HashSet<>();
List<JCExpression> interfaceTrees = tree.implementing;
+ int i = 0;
for (JCExpression iface : interfaceTrees) {
- Type i = attr.attribBase(iface, baseEnv, false, true, true);
- if (i.hasTag(CLASS)) {
- interfaces.append(i);
- if (all_interfaces != null) all_interfaces.append(i);
- chk.checkNotRepeated(iface.pos(), types.erasure(i), interfaceSet);
+ Type it = attr.attribBase(iface, baseEnv, false, true, true);
+ if (it.hasTag(CLASS)) {
+ interfaces.append(it);
+ if (all_interfaces != null) all_interfaces.append(it);
+ chk.checkNotRepeated(iface.pos(), types.erasure(it), interfaceSet);
} else {
if (all_interfaces == null)
all_interfaces = new ListBuffer<Type>().appendList(interfaces);
- all_interfaces.append(modelMissingTypes(i, iface, true));
+ all_interfaces.append(modelMissingTypes(it, iface, true));
+
}
+ if (sym.isAnonymous()) {
+ // Note: if an anonymous class ever has more than
+ // one supertype for some reason, this will
+ // incorrectly attach tree.mods.annotations to ALL
+ // supertypes, not just the first.
+ annotate.annotateAnonClassDefLater(iface, tree.mods.annotations,
+ baseEnv, sym, tree.pos(),
+ annotate.implementsCreator(i++));
+ } else {
+ annotate.annotateTypeLater(iface, baseEnv, sym, tree.pos(),
+ annotate.implementsCreator(i++));
}
+ }
+
if ((c.flags_field & ANNOTATION) != 0) {
ct.interfaces_field = List.of(syms.annotationType);
ct.all_interfaces_field = ct.interfaces_field;
@@ -993,22 +1121,28 @@
}
}
- // Annotations.
- // In general, we cannot fully process annotations yet, but we
- // can attribute the annotation types and then check to see if the
- // @Deprecated annotation is present.
- attr.attribAnnotationTypes(tree.mods.annotations, baseEnv);
- if (hasDeprecatedAnnotation(tree.mods.annotations))
- c.flags_field |= DEPRECATED;
- annotate.annotateLater(tree.mods.annotations, baseEnv, c, tree.pos());
// class type parameters use baseEnv but everything uses env
chk.checkNonCyclicDecl(tree);
attr.attribTypeVariables(tree.typarams, baseEnv);
// Do this here, where we have the symbol.
- for (JCTypeParameter tp : tree.typarams)
- annotate.annotateTypeLater(tp, baseEnv, sym, tree.pos());
+ int j = 0;
+ for (List<JCTypeParameter> l = tree.typarams; l.nonEmpty();
+ l = l.tail, j++) {
+ final JCTypeParameter typaram = l.head;
+ annotate.annotateTypeLater(typaram, baseEnv, sym, tree.pos(),
+ annotate.typeParamCreator(j));
+
+ int k = 0;
+ for(List<JCExpression> b = typaram.bounds; b.nonEmpty();
+ b = b.tail, k++) {
+ final JCExpression bound = b.head;
+ annotate.annotateTypeLater(bound, baseEnv, sym, tree.pos(),
+ annotate.typeParamBoundCreator(typaram, j, k));
+ }
+
+ }
// Add default constructor if needed.
if ((c.flags() & INTERFACE) == 0 &&
@@ -1088,10 +1222,6 @@
while (halfcompleted.nonEmpty()) {
Env<AttrContext> toFinish = halfcompleted.next();
finish(toFinish);
- if (allowTypeAnnos) {
- typeAnnotations.organizeTypeAnnotationsSignatures(toFinish, (JCClassDecl)toFinish.tree);
- typeAnnotations.validateTypeAnnotationsSignatures(toFinish, (JCClassDecl)toFinish.tree);
- }
}
} finally {
isFirst = true;
--- a/langtools/src/share/classes/com/sun/tools/javac/file/JavacFileManager.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/file/JavacFileManager.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -158,11 +158,6 @@
symbolFileEnabled = b;
}
- @Override
- public boolean isDefaultBootClassPath() {
- return locations.isDefaultBootClassPath();
- }
-
public JavaFileObject getFileForInput(String name) {
return getRegularFile(new File(name));
}
@@ -579,15 +574,6 @@
}
}
- private String defaultEncodingName;
- private String getDefaultEncodingName() {
- if (defaultEncodingName == null) {
- defaultEncodingName =
- new OutputStreamWriter(new ByteArrayOutputStream()).getEncoding();
- }
- return defaultEncodingName;
- }
-
public ClassLoader getClassLoader(Location location) {
nullCheck(location);
Iterable<? extends File> path = getLocation(location);
--- a/langtools/src/share/classes/com/sun/tools/javac/file/Locations.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/file/Locations.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,12 +22,10 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package com.sun.tools.javac.file;
+import java.io.File;
import java.io.FileNotFoundException;
-import java.util.Iterator;
-import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
@@ -38,64 +36,72 @@
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.zip.ZipFile;
+
+import javax.tools.JavaFileManager;
import javax.tools.JavaFileManager.Location;
+import javax.tools.StandardJavaFileManager;
import javax.tools.StandardLocation;
import com.sun.tools.javac.code.Lint;
import com.sun.tools.javac.main.Option;
import com.sun.tools.javac.util.ListBuffer;
import com.sun.tools.javac.util.Log;
-import com.sun.tools.javac.util.Options;
import com.sun.tools.javac.util.StringUtils;
-import javax.tools.JavaFileManager;
-import javax.tools.StandardJavaFileManager;
-import static javax.tools.StandardLocation.*;
-import static com.sun.tools.javac.main.Option.*;
+import static javax.tools.StandardLocation.CLASS_PATH;
+import static javax.tools.StandardLocation.PLATFORM_CLASS_PATH;
+import static javax.tools.StandardLocation.SOURCE_PATH;
-/** This class converts command line arguments, environment variables
- * and system properties (in File.pathSeparator-separated String form)
- * into a boot class path, user class path, and source path (in
- * {@code Collection<String>} form).
+import static com.sun.tools.javac.main.Option.BOOTCLASSPATH;
+import static com.sun.tools.javac.main.Option.DJAVA_ENDORSED_DIRS;
+import static com.sun.tools.javac.main.Option.DJAVA_EXT_DIRS;
+import static com.sun.tools.javac.main.Option.ENDORSEDDIRS;
+import static com.sun.tools.javac.main.Option.EXTDIRS;
+import static com.sun.tools.javac.main.Option.XBOOTCLASSPATH;
+import static com.sun.tools.javac.main.Option.XBOOTCLASSPATH_APPEND;
+import static com.sun.tools.javac.main.Option.XBOOTCLASSPATH_PREPEND;
+
+/**
+ * This class converts command line arguments, environment variables and system properties (in
+ * File.pathSeparator-separated String form) into a boot class path, user class path, and source
+ * path (in {@code Collection<String>} form).
*
- * <p><b>This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own risk.
- * This code and its internal interfaces are subject to change or
- * deletion without notice.</b>
+ * <p>
+ * <b>This is NOT part of any supported API. If you write code that depends on this, you do so at
+ * your own risk. This code and its internal interfaces are subject to change or deletion without
+ * notice.</b>
*/
public class Locations {
- /** The log to use for warning output */
+ /**
+ * The log to use for warning output
+ */
private Log log;
- /** Collection of command-line options */
- private Options options;
-
- /** Handler for -Xlint options */
- private Lint lint;
-
- /** Access to (possibly cached) file info */
+ /**
+ * Access to (possibly cached) file info
+ */
private FSInfo fsInfo;
- /** Whether to warn about non-existent path elements */
+ /**
+ * Whether to warn about non-existent path elements
+ */
private boolean warn;
- // TODO: remove need for this
- private boolean inited = false; // TODO? caching bad?
-
public Locations() {
initHandlers();
}
- public void update(Log log, Options options, Lint lint, FSInfo fsInfo) {
+ // could replace Lint by "boolean warn"
+ public void update(Log log, Lint lint, FSInfo fsInfo) {
this.log = log;
- this.options = options;
- this.lint = lint;
+ warn = lint.isEnabled(Lint.LintCategory.PATH);
this.fsInfo = fsInfo;
}
@@ -104,14 +110,14 @@
}
public boolean isDefaultBootClassPath() {
- BootClassPathLocationHandler h =
- (BootClassPathLocationHandler) getHandler(PLATFORM_CLASS_PATH);
+ BootClassPathLocationHandler h
+ = (BootClassPathLocationHandler) getHandler(PLATFORM_CLASS_PATH);
return h.isDefault();
}
boolean isDefaultBootClassPathRtJar(File file) {
- BootClassPathLocationHandler h =
- (BootClassPathLocationHandler) getHandler(PLATFORM_CLASS_PATH);
+ BootClassPathLocationHandler h
+ = (BootClassPathLocationHandler) getHandler(PLATFORM_CLASS_PATH);
return h.isDefaultRtJar(file);
}
@@ -127,6 +133,7 @@
/**
* Split a path into its elements. Empty path elements will be ignored.
+ *
* @param path The path to be split
* @return The elements of the path
*/
@@ -135,12 +142,13 @@
}
/**
- * Split a path into its elements. If emptyPathDefault is not null, all
- * empty elements in the path, including empty elements at either end of
- * the path, will be replaced with the value of emptyPathDefault.
+ * Split a path into its elements. If emptyPathDefault is not null, all empty elements in the
+ * path, including empty elements at either end of the path, will be replaced with the value of
+ * emptyPathDefault.
+ *
* @param path The path to be split
- * @param emptyPathDefault The value to substitute for empty path elements,
- * or null, to ignore empty path elements
+ * @param emptyPathDefault The value to substitute for empty path elements, or null, to ignore
+ * empty path elements
* @return The elements of the path
*/
private static Iterable<File> getPathEntries(String path, File emptyPathDefault) {
@@ -148,33 +156,38 @@
int start = 0;
while (start <= path.length()) {
int sep = path.indexOf(File.pathSeparatorChar, start);
- if (sep == -1)
+ if (sep == -1) {
sep = path.length();
- if (start < sep)
+ }
+ if (start < sep) {
entries.add(new File(path.substring(start, sep)));
- else if (emptyPathDefault != null)
+ } else if (emptyPathDefault != null) {
entries.add(emptyPathDefault);
+ }
start = sep + 1;
}
return entries;
}
/**
- * Utility class to help evaluate a path option.
- * Duplicate entries are ignored, jar class paths can be expanded.
+ * Utility class to help evaluate a path option. Duplicate entries are ignored, jar class paths
+ * can be expanded.
*/
private class Path extends LinkedHashSet<File> {
+
private static final long serialVersionUID = 0;
private boolean expandJarClassPaths = false;
- private Set<File> canonicalValues = new HashSet<>();
+ private final Set<File> canonicalValues = new HashSet<>();
public Path expandJarClassPaths(boolean x) {
expandJarClassPaths = x;
return this;
}
- /** What to use when path element is the empty string */
+ /**
+ * What to use when path element is the empty string
+ */
private File emptyPathDefault = null;
public Path emptyPathDefault(File x) {
@@ -182,15 +195,15 @@
return this;
}
- public Path() { super(); }
-
public Path addDirectories(String dirs, boolean warn) {
boolean prev = expandJarClassPaths;
expandJarClassPaths = true;
try {
- if (dirs != null)
- for (File dir : getPathEntries(dirs))
+ if (dirs != null) {
+ for (File dir : getPathEntries(dirs)) {
addDirectory(dir, warn);
+ }
+ }
return this;
} finally {
expandJarClassPaths = prev;
@@ -203,19 +216,22 @@
private void addDirectory(File dir, boolean warn) {
if (!dir.isDirectory()) {
- if (warn)
+ if (warn) {
log.warning(Lint.LintCategory.PATH,
"dir.path.element.not.found", dir);
+ }
return;
}
File[] files = dir.listFiles();
- if (files == null)
+ if (files == null) {
return;
+ }
for (File direntry : files) {
- if (isArchive(direntry))
+ if (isArchive(direntry)) {
addFile(direntry, warn);
+ }
}
}
@@ -232,8 +248,9 @@
public Path addFiles(Iterable<? extends File> files, boolean warn) {
if (files != null) {
- for (File file: files)
+ for (File file : files) {
addFile(file, warn);
+ }
}
return this;
}
@@ -248,7 +265,7 @@
return;
}
- if (! fsInfo.exists(file)) {
+ if (!fsInfo.exists(file)) {
/* No such file or directory exists */
if (warn) {
log.warning(Lint.LintCategory.PATH,
@@ -288,12 +305,13 @@
}
/* Now what we have left is either a directory or a file name
- conforming to archive naming convention */
+ conforming to archive naming convention */
super.add(file);
canonicalValues.add(canonFile);
- if (expandJarClassPaths && fsInfo.isFile(file))
+ if (expandJarClassPaths && fsInfo.isFile(file)) {
addJarClassPath(file, warn);
+ }
}
// Adds referenced classpath elements from a jar's Class-Path
@@ -302,7 +320,7 @@
// filenames, but if we do, we should redo all path-related code.
private void addJarClassPath(File jarFile, boolean warn) {
try {
- for (File f: fsInfo.getJarClassPath(jarFile)) {
+ for (File f : fsInfo.getJarClassPath(jarFile)) {
addFile(f, warn);
}
} catch (IOException e) {
@@ -312,53 +330,56 @@
}
/**
- * Base class for handling support for the representation of Locations.
- * Implementations are responsible for handling the interactions between
- * the command line options for a location, and API access via setLocation.
+ * Base class for handling support for the representation of Locations. Implementations are
+ * responsible for handling the interactions between the command line options for a location,
+ * and API access via setLocation.
+ *
* @see #initHandlers
* @see #getHandler
*/
protected abstract class LocationHandler {
+
final Location location;
final Set<Option> options;
/**
- * Create a handler. The location and options provide a way to map
- * from a location or an option to the corresponding handler.
+ * Create a handler. The location and options provide a way to map from a location or an
+ * option to the corresponding handler.
+ *
+ * @param location the location for which this is the handler
+ * @param options the options affecting this location
* @see #initHandlers
*/
protected LocationHandler(Location location, Option... options) {
this.location = location;
- this.options = options.length == 0 ?
- EnumSet.noneOf(Option.class):
- EnumSet.copyOf(Arrays.asList(options));
+ this.options = options.length == 0
+ ? EnumSet.noneOf(Option.class)
+ : EnumSet.copyOf(Arrays.asList(options));
}
- // TODO: TEMPORARY, while Options still used for command line options
- void update(Options optionTable) {
- for (Option o: options) {
- String v = optionTable.get(o);
- if (v != null) {
- handleOption(o, v);
- }
- }
- }
+ /**
+ * @see JavaFileManager#handleOption
+ */
+ abstract boolean handleOption(Option option, String value);
- /** @see JavaFileManager#handleOption */
- abstract boolean handleOption(Option option, String value);
- /** @see StandardJavaFileManager#getLocation */
+ /**
+ * @see StandardJavaFileManager#getLocation
+ */
abstract Collection<File> getLocation();
- /** @see StandardJavaFileManager#setLocation */
+
+ /**
+ * @see StandardJavaFileManager#setLocation
+ */
abstract void setLocation(Iterable<? extends File> files) throws IOException;
}
/**
- * General purpose implementation for output locations,
- * such as -d/CLASS_OUTPUT and -s/SOURCE_OUTPUT.
- * All options are treated as equivalent (i.e. aliases.)
- * The value is a single file, possibly null.
+ * General purpose implementation for output locations, such as -d/CLASS_OUTPUT and
+ * -s/SOURCE_OUTPUT. All options are treated as equivalent (i.e. aliases.) The value is a single
+ * file, possibly null.
*/
private class OutputLocationHandler extends LocationHandler {
+
private File outputDir;
OutputLocationHandler(Location location, Option... options) {
@@ -367,14 +388,15 @@
@Override
boolean handleOption(Option option, String value) {
- if (!options.contains(option))
+ if (!options.contains(option)) {
return false;
+ }
// TODO: could/should validate outputDir exists and is a directory
// need to decide how best to report issue for benefit of
// direct API call on JavaFileManager.handleOption(specifies IAE)
// vs. command line decoding.
- outputDir = new File(value);
+ outputDir = (value == null) ? null : new File(value);
return true;
}
@@ -389,27 +411,30 @@
outputDir = null;
} else {
Iterator<? extends File> pathIter = files.iterator();
- if (!pathIter.hasNext())
+ if (!pathIter.hasNext()) {
throw new IllegalArgumentException("empty path for directory");
+ }
File dir = pathIter.next();
- if (pathIter.hasNext())
+ if (pathIter.hasNext()) {
throw new IllegalArgumentException("path too long for directory");
- if (!dir.exists())
+ }
+ if (!dir.exists()) {
throw new FileNotFoundException(dir + ": does not exist");
- else if (!dir.isDirectory())
+ } else if (!dir.isDirectory()) {
throw new IOException(dir + ": not a directory");
+ }
outputDir = dir;
}
}
}
/**
- * General purpose implementation for search path locations,
- * such as -sourcepath/SOURCE_PATH and -processorPath/ANNOTATION_PROCESS_PATH.
- * All options are treated as equivalent (i.e. aliases.)
+ * General purpose implementation for search path locations, such as -sourcepath/SOURCE_PATH and
+ * -processorPath/ANNOTATION_PROCESS_PATH. All options are treated as equivalent (i.e. aliases.)
* The value is an ordered set of files and/or directories.
*/
private class SimpleLocationHandler extends LocationHandler {
+
protected Collection<File> searchPath;
SimpleLocationHandler(Location location, Option... options) {
@@ -418,10 +443,11 @@
@Override
boolean handleOption(Option option, String value) {
- if (!options.contains(option))
+ if (!options.contains(option)) {
return false;
- searchPath = value == null ? null :
- Collections.unmodifiableCollection(createPath().addFiles(value));
+ }
+ searchPath = value == null ? null
+ : Collections.unmodifiableCollection(createPath().addFiles(value));
return true;
}
@@ -451,11 +477,11 @@
}
/**
- * Subtype of SimpleLocationHandler for -classpath/CLASS_PATH.
- * If no value is given, a default is provided, based on system properties
- * and other values.
+ * Subtype of SimpleLocationHandler for -classpath/CLASS_PATH. If no value is given, a default
+ * is provided, based on system properties and other values.
*/
private class ClassPathLocationHandler extends SimpleLocationHandler {
+
ClassPathLocationHandler() {
super(StandardLocation.CLASS_PATH,
Option.CLASSPATH, Option.CP);
@@ -472,15 +498,20 @@
String cp = value;
// CLASSPATH environment variable when run from `javac'.
- if (cp == null) cp = System.getProperty("env.class.path");
+ if (cp == null) {
+ cp = System.getProperty("env.class.path");
+ }
// If invoked via a java VM (not the javac launcher), use the
// platform class path
- if (cp == null && System.getProperty("application.home") == null)
+ if (cp == null && System.getProperty("application.home") == null) {
cp = System.getProperty("java.class.path");
+ }
// Default to current working directory.
- if (cp == null) cp = ".";
+ if (cp == null) {
+ cp = ".";
+ }
return createPath().addFiles(cp);
}
@@ -488,38 +519,37 @@
@Override
protected Path createPath() {
return new Path()
- .expandJarClassPaths(true) // Only search user jars for Class-Paths
- .emptyPathDefault(new File(".")); // Empty path elt ==> current directory
+ .expandJarClassPaths(true) // Only search user jars for Class-Paths
+ .emptyPathDefault(new File(".")); // Empty path elt ==> current directory
}
private void lazy() {
- if (searchPath == null)
+ if (searchPath == null) {
setLocation(null);
+ }
}
}
/**
- * Custom subtype of LocationHandler for PLATFORM_CLASS_PATH.
- * Various options are supported for different components of the
- * platform class path.
- * Setting a value with setLocation overrides all existing option values.
- * Setting any option overrides any value set with setLocation, and reverts
- * to using default values for options that have not been set.
- * Setting -bootclasspath or -Xbootclasspath overrides any existing
- * value for -Xbootclasspath/p: and -Xbootclasspath/a:.
+ * Custom subtype of LocationHandler for PLATFORM_CLASS_PATH. Various options are supported for
+ * different components of the platform class path. Setting a value with setLocation overrides
+ * all existing option values. Setting any option overrides any value set with setLocation, and
+ * reverts to using default values for options that have not been set. Setting -bootclasspath or
+ * -Xbootclasspath overrides any existing value for -Xbootclasspath/p: and -Xbootclasspath/a:.
*/
private class BootClassPathLocationHandler extends LocationHandler {
+
private Collection<File> searchPath;
final Map<Option, String> optionValues = new EnumMap<>(Option.class);
/**
- * rt.jar as found on the default bootclasspath.
- * If the user specified a bootclasspath, null is used.
+ * rt.jar as found on the default bootclasspath. If the user specified a bootclasspath, null
+ * is used.
*/
private File defaultBootClassPathRtJar = null;
/**
- * Is bootclasspath the default?
+ * Is bootclasspath the default?
*/
private boolean isDefaultBootClassPath;
@@ -544,8 +574,9 @@
@Override
boolean handleOption(Option option, String value) {
- if (!options.contains(option))
+ if (!options.contains(option)) {
return false;
+ }
option = canonicalize(option);
optionValues.put(option, value);
@@ -557,20 +588,20 @@
return true;
}
// where
- // TODO: would be better if option aliasing was handled at a higher
- // level
- private Option canonicalize(Option option) {
- switch (option) {
- case XBOOTCLASSPATH:
- return Option.BOOTCLASSPATH;
- case DJAVA_ENDORSED_DIRS:
- return Option.ENDORSEDDIRS;
- case DJAVA_EXT_DIRS:
- return Option.EXTDIRS;
- default:
- return option;
- }
+ // TODO: would be better if option aliasing was handled at a higher
+ // level
+ private Option canonicalize(Option option) {
+ switch (option) {
+ case XBOOTCLASSPATH:
+ return Option.BOOTCLASSPATH;
+ case DJAVA_ENDORSED_DIRS:
+ return Option.ENDORSEDDIRS;
+ case DJAVA_EXT_DIRS:
+ return Option.EXTDIRS;
+ default:
+ return option;
}
+ }
@Override
Collection<File> getLocation() {
@@ -602,10 +633,11 @@
String xbootclasspathAppendOpt = optionValues.get(XBOOTCLASSPATH_APPEND);
path.addFiles(xbootclasspathPrependOpt);
- if (endorseddirsOpt != null)
+ if (endorseddirsOpt != null) {
path.addDirectories(endorseddirsOpt);
- else
+ } else {
path.addDirectories(System.getProperty("java.endorsed.dirs"), false);
+ }
if (bootclasspathOpt != null) {
path.addFiles(bootclasspathOpt);
@@ -615,8 +647,9 @@
path.addFiles(files, false);
File rt_jar = new File("rt.jar");
for (File file : getPathEntries(files)) {
- if (new File(file.getName()).equals(rt_jar))
+ if (new File(file.getName()).equals(rt_jar)) {
defaultBootClassPathRtJar = file;
+ }
}
}
@@ -625,22 +658,24 @@
// Strictly speaking, standard extensions are not bootstrap
// classes, but we treat them identically, so we'll pretend
// that they are.
- if (extdirsOpt != null)
+ if (extdirsOpt != null) {
path.addDirectories(extdirsOpt);
- else
+ } else {
path.addDirectories(System.getProperty("java.ext.dirs"), false);
+ }
- isDefaultBootClassPath =
- (xbootclasspathPrependOpt == null) &&
- (bootclasspathOpt == null) &&
- (xbootclasspathAppendOpt == null);
+ isDefaultBootClassPath
+ = (xbootclasspathPrependOpt == null)
+ && (bootclasspathOpt == null)
+ && (xbootclasspathAppendOpt == null);
return path;
}
private void lazy() {
- if (searchPath == null)
+ if (searchPath == null) {
searchPath = Collections.unmodifiableCollection(computePath());
+ }
}
}
@@ -661,14 +696,15 @@
new OutputLocationHandler((StandardLocation.NATIVE_HEADER_OUTPUT), Option.H)
};
- for (LocationHandler h: handlers) {
+ for (LocationHandler h : handlers) {
handlersForLocation.put(h.location, h);
- for (Option o: h.options)
+ for (Option o : h.options) {
handlersForOption.put(o, h);
+ }
}
}
- boolean handleOption(Option option, String value) {
+ public boolean handleOption(Option option, String value) {
LocationHandler h = handlersForOption.get(option);
return (h == null ? false : h.handleOption(option, value));
}
@@ -679,8 +715,9 @@
}
File getOutputLocation(Location location) {
- if (!location.isOutputLocation())
+ if (!location.isOutputLocation()) {
throw new IllegalArgumentException();
+ }
LocationHandler h = getHandler(location);
return ((OutputLocationHandler) h).outputDir;
}
@@ -688,10 +725,11 @@
void setLocation(Location location, Iterable<? extends File> files) throws IOException {
LocationHandler h = getHandler(location);
if (h == null) {
- if (location.isOutputLocation())
+ if (location.isOutputLocation()) {
h = new OutputLocationHandler(location);
- else
+ } else {
h = new SimpleLocationHandler(location);
+ }
handlersForLocation.put(location, h);
}
h.setLocation(files);
@@ -699,33 +737,21 @@
protected LocationHandler getHandler(Location location) {
location.getClass(); // null check
- lazy();
return handlersForLocation.get(location);
}
-// TOGO
- protected void lazy() {
- if (!inited) {
- warn = lint.isEnabled(Lint.LintCategory.PATH);
-
- for (LocationHandler h: handlersForLocation.values()) {
- h.update(options);
- }
-
- inited = true;
- }
- }
-
- /** Is this the name of an archive file? */
+ /**
+ * Is this the name of an archive file?
+ */
private boolean isArchive(File file) {
String n = StringUtils.toLowerCase(file.getName());
return fsInfo.isFile(file)
- && (n.endsWith(".jar") || n.endsWith(".zip"));
+ && (n.endsWith(".jar") || n.endsWith(".zip"));
}
/**
- * Utility method for converting a search path string to an array
- * of directory and JAR file URLs.
+ * Utility method for converting a search path string to an array of directory and JAR file
+ * URLs.
*
* Note that this method is called by apt and the DocletInvoker.
*
@@ -747,8 +773,7 @@
}
/**
- * Returns the directory or JAR file URL corresponding to the specified
- * local file name.
+ * Returns the directory or JAR file URL corresponding to the specified local file name.
*
* @param file the File object
* @return the resulting directory or JAR file URL, or null if unknown
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Wed Jun 18 13:14:15 2014 -0700
@@ -1611,8 +1611,6 @@
return TypeAnnotationPosition.methodReturn(readTypePath());
case FIELD:
return TypeAnnotationPosition.field(readTypePath());
- case UNKNOWN:
- throw new AssertionError("jvm.ClassReader: UNKNOWN target type should never occur!");
default:
throw new AssertionError("jvm.ClassReader: Unknown target type for position: " + type);
}
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Wed Jun 18 13:14:15 2014 -0700
@@ -768,25 +768,13 @@
ListBuffer<Attribute.TypeCompound> invisibles = new ListBuffer<>();
for (Attribute.TypeCompound tc : typeAnnos) {
- if (tc.hasUnknownPosition()) {
- boolean fixed = tc.tryFixPosition();
-
- // Could we fix it?
- if (!fixed) {
- // This happens for nested types like @A Outer. @B Inner.
- // For method parameters we get the annotation twice! Once with
- // a valid position, once unknown.
- // TODO: find a cleaner solution.
- PrintWriter pw = log.getWriter(Log.WriterKind.ERROR);
- pw.println("ClassWriter: Position UNKNOWN in type annotation: " + tc);
+ Assert.checkNonNull(tc.position);
+ if (tc.position.type.isLocal() != inCode) {
continue;
}
+ if (!tc.position.emitToClassfile()) {
+ continue;
}
-
- if (tc.position.type.isLocal() != inCode)
- continue;
- if (!tc.position.emitToClassfile())
- continue;
switch (types.getRetention(tc)) {
case SOURCE: break;
case CLASS: invisibles.append(tc); break;
@@ -967,8 +955,6 @@
case METHOD_RETURN:
case FIELD:
break;
- case UNKNOWN:
- throw new AssertionError("jvm.ClassWriter: UNKNOWN target type should never occur!");
default:
throw new AssertionError("jvm.ClassWriter: Unknown target type for position: " + p);
}
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java Wed Jun 18 13:14:15 2014 -0700
@@ -557,7 +557,6 @@
ListBuffer<Attribute.TypeCompound> fieldTAs = new ListBuffer<>();
ListBuffer<Attribute.TypeCompound> nonfieldTAs = new ListBuffer<>();
for (TypeCompound ta : tas) {
- Assert.check(ta.getPosition().type != TargetType.UNKNOWN);
if (ta.getPosition().type == TargetType.FIELD) {
fieldTAs.add(ta);
} else {
@@ -1931,10 +1930,7 @@
|| code.meth.getKind() == javax.lang.model.element.ElementKind.STATIC_INIT;
for (Attribute.TypeCompound ta : meth.getRawTypeAttributes()) {
- if (ta.hasUnknownPosition())
- ta.tryFixPosition();
-
- if (ta.position.matchesPos(treePos))
+ if (ta.position != null && ta.position.matchesPos(treePos))
ta.position.updatePosOffset(code.cp);
}
@@ -1942,10 +1938,7 @@
return;
for (Attribute.TypeCompound ta : meth.owner.getRawTypeAttributes()) {
- if (ta.hasUnknownPosition())
- ta.tryFixPosition();
-
- if (ta.position.matchesPos(treePos))
+ if (ta.position != null && ta.position.matchesPos(treePos))
ta.position.updatePosOffset(code.cp);
}
@@ -1955,10 +1948,7 @@
continue;
for (Attribute.TypeCompound ta : s.getRawTypeAttributes()) {
- if (ta.hasUnknownPosition())
- ta.tryFixPosition();
-
- if (ta.position.matchesPos(treePos))
+ if (ta.position != null && ta.position.matchesPos(treePos))
ta.position.updatePosOffset(code.cp);
}
}
@@ -2330,8 +2320,8 @@
}
public void visitTypeTest(JCInstanceOf tree) {
+ genExpr(tree.expr, tree.expr.type).load();
setTypeAnnotationPositions(tree.pos);
- genExpr(tree.expr, tree.expr.type).load();
code.emitop2(instanceof_, makeRef(tree.pos(), tree.clazz.type));
result = items.makeStackItem(syms.booleanType);
}
--- a/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Wed Jun 18 13:14:15 2014 -0700
@@ -394,6 +394,7 @@
processPcks = options.isSet("process.packages");
werror = options.isSet(WERROR);
+ // Should this be with other option checking, in Main
if (source.compareTo(Source.DEFAULT) < 0) {
if (options.isUnset(XLINT_CUSTOM, "-" + LintCategory.OPTIONS.option)) {
if (fileManager instanceof BaseFileManager) {
@@ -403,6 +404,7 @@
}
}
+ // Should this be with other option checking, in Main
checkForObsoleteOptions(target);
verboseCompilePolicy = options.isSet("verboseCompilePolicy");
@@ -434,6 +436,7 @@
log.setDiagnosticFormatter(RichDiagnosticFormatter.instance(context));
}
+ // Should this be with other option checking, in Main
private void checkForObsoleteOptions(Target target) {
// Unless lint checking on options is disabled, check for
// obsolete source and target options.
@@ -829,6 +832,10 @@
List<String> classnames,
Iterable<? extends Processor> processors)
{
+ if (!taskListener.isEmpty()) {
+ taskListener.started(new TaskEvent(TaskEvent.Kind.COMPILATION));
+ }
+
if (processors != null && processors.iterator().hasNext())
explicitAnnotationProcessingRequested = true;
// as a JavaCompiler can only be used once, throw an exception if
@@ -902,6 +909,9 @@
printCount("error", errorCount());
printCount("warn", warningCount());
}
+ if (!taskListener.isEmpty()) {
+ taskListener.finished(new TaskEvent(TaskEvent.Kind.COMPILATION));
+ }
close();
if (procEnvImpl != null)
procEnvImpl.close();
--- a/langtools/src/share/classes/com/sun/tools/javac/main/Main.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/Main.java Wed Jun 18 13:14:15 2014 -0700
@@ -33,8 +33,9 @@
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
+import java.util.Map;
import java.util.Set;
import javax.annotation.processing.Processor;
@@ -56,6 +57,7 @@
import com.sun.tools.javac.util.Log.PrefixKind;
import com.sun.tools.javac.util.Log.WriterKind;
import com.sun.tools.javac.util.ServiceLoader;
+
import static com.sun.tools.javac.main.Option.*;
/** This class provides a command line interface to the javac compiler.
@@ -121,6 +123,13 @@
}
@Override
+ public boolean handleFileManagerOption(Option option, String value) {
+ options.put(option.getText(), value);
+ deferredFileManagerOptions.put(option, value);
+ return true;
+ }
+
+ @Override
public void remove(String name) {
options.remove(name);
}
@@ -172,11 +181,13 @@
/** The list of source files to process
*/
- public Set<File> filenames = null; // XXX sb protected
+ public Set<File> filenames = null; // XXX should be protected or private
/** List of class files names passed on the command line
*/
- public ListBuffer<String> classnames = null; // XXX sb protected
+ protected ListBuffer<String> classnames = null;
+
+ public Map<Option, String> deferredFileManagerOptions; // XXX should be protected or private
/** Report a usage error.
*/
@@ -395,6 +406,7 @@
filenames = new LinkedHashSet<>();
classnames = new ListBuffer<>();
+ deferredFileManagerOptions = new LinkedHashMap<>();
JavaCompiler comp = null;
/*
* TODO: Logic below about what is an acceptable command line
@@ -446,6 +458,11 @@
if (batchMode)
CacheFSInfo.preRegister(context);
+ fileManager = context.get(JavaFileManager.class);
+ if (fileManager instanceof BaseFileManager) {
+ ((BaseFileManager) fileManager).handleOptions(deferredFileManagerOptions);
+ }
+
// FIXME: this code will not be invoked if using JavacTask.parse/analyze/generate
// invoke any available plugins
String plugins = options.get(PLUGIN);
@@ -511,8 +528,6 @@
comp.closeables = comp.closeables.prepend(log.getWriter(WriterKind.NOTICE));
}
- fileManager = context.get(JavaFileManager.class);
-
if (!files.isEmpty()) {
// add filenames to fileObjects
comp = JavaCompiler.instance(context);
--- a/langtools/src/share/classes/com/sun/tools/javac/main/Option.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/Option.java Wed Jun 18 13:14:15 2014 -0700
@@ -83,6 +83,7 @@
XLINT_CUSTOM("-Xlint:", EXTENDED, BASIC, ANYOF, getXLintChoices()) {
private static final String LINT_KEY_FORMAT = " %-19s %s";
+ @Override
void help(Log log, OptionKind kind) {
if (this.kind != kind)
return;
@@ -667,6 +668,8 @@
}
}
helper.put(option, arg);
+ if (group == OptionGroup.FILEMANAGER)
+ helper.handleFileManagerOption(this, arg);
return false;
}
--- a/langtools/src/share/classes/com/sun/tools/javac/main/OptionHelper.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/OptionHelper.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2014, 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
@@ -50,6 +50,9 @@
/** Remove any prior value for an option. */
public abstract void remove(String name);
+ /** Handle a file manager option. */
+ public abstract boolean handleFileManagerOption(Option option, String value);
+
/** Get access to the Log for the compilation. */
public abstract Log getLog();
@@ -99,6 +102,11 @@
}
@Override
+ public boolean handleFileManagerOption(Option option, String value) {
+ throw new IllegalArgumentException();
+ }
+
+ @Override
void error(String key, Object... args) {
throw new IllegalArgumentException(log.localize(PrefixKind.JAVAC, key, args));
}
--- a/langtools/src/share/classes/com/sun/tools/javac/nio/JavacPathFileManager.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/nio/JavacPathFileManager.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2014, 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
@@ -167,11 +167,6 @@
return getClassLoader(lb.toArray(new URL[lb.size()]));
}
- @Override
- public boolean isDefaultBootClassPath() {
- return locations.isDefaultBootClassPath();
- }
-
// <editor-fold defaultstate="collapsed" desc="Location handling">
public boolean hasLocation(Location location) {
--- a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties Wed Jun 18 13:14:15 2014 -0700
@@ -2404,6 +2404,11 @@
static interface methods are not supported in -source {0}\n\
(use -source 8 or higher to enable static interface methods)
+# 0: string
+compiler.err.static.intf.method.invoke.not.supported.in.source=\
+ static interface method invocations are not supported in -source {0}\n\
+ (use -source 8 or higher to enable static interface method invocations)
+
########################################
# Diagnostics for verbose resolution
# used by Resolve (debug only)
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Wed Jun 18 13:14:15 2014 -0700
@@ -135,6 +135,14 @@
}
}
+ public static boolean isReceiverParam(JCTree tree) {
+ if (tree.hasTag(VARDEF)) {
+ return ((JCVariableDecl)tree).nameexpr != null;
+ } else {
+ return false;
+ }
+ }
+
/** Is there a constructor declaration in the given list of trees?
*/
public static boolean hasConstructors(List<JCTree> trees) {
--- a/langtools/src/share/classes/com/sun/tools/javac/util/BaseFileManager.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/util/BaseFileManager.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2014, 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,6 @@
package com.sun.tools.javac.util;
import java.io.ByteArrayOutputStream;
-import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
@@ -47,6 +46,8 @@
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+
+import javax.tools.JavaFileManager;
import javax.tools.JavaFileObject;
import javax.tools.JavaFileObject.Kind;
@@ -64,7 +65,7 @@
* There are no references here to file-system specific objects such as
* java.io.File or java.nio.file.Path.
*/
-public abstract class BaseFileManager {
+public abstract class BaseFileManager implements JavaFileManager {
protected BaseFileManager(Charset charset) {
this.charset = charset;
byteBufferCache = new ByteBufferCache();
@@ -73,12 +74,13 @@
/**
* Set the context for JavacPathFileManager.
+ * @param context the context containing items to be associated with the file manager
*/
public void setContext(Context context) {
log = Log.instance(context);
options = Options.instance(context);
classLoaderClass = options.get("procloader");
- locations.update(log, options, Lint.instance(context), FSInfo.instance(context));
+ locations.update(log, Lint.instance(context), FSInfo.instance(context));
}
protected Locations createLocations() {
@@ -123,14 +125,19 @@
Class<?>[] constrArgTypes = { URL[].class, ClassLoader.class };
Constructor<? extends ClassLoader> constr = loader.getConstructor(constrArgTypes);
return constr.newInstance(urls, thisClassLoader);
- } catch (Throwable t) {
+ } catch (ReflectiveOperationException t) {
// ignore errors loading user-provided class loader, fall through
}
}
return new URLClassLoader(urls, thisClassLoader);
}
+ public boolean isDefaultBootClassPath() {
+ return locations.isDefaultBootClassPath();
+ }
+
// <editor-fold defaultstate="collapsed" desc="Option handling">
+ @Override
public boolean handleOption(String current, Iterator<String> remaining) {
OptionHelper helper = new GrumpyHelper(log) {
@Override
@@ -147,7 +154,13 @@
public void remove(String name) {
options.remove(name);
}
+
+ @Override
+ public boolean handleFileManagerOption(Option option, String value) {
+ return handleOption(option, value);
+ }
};
+
for (Option o: javacFileManagerOptions) {
if (o.matches(current)) {
if (o.hasArg()) {
@@ -159,7 +172,7 @@
if (!o.process(helper, current))
return true;
}
- // operand missing, or process returned false
+ // operand missing, or process returned true
throw new IllegalArgumentException(current);
}
}
@@ -170,6 +183,7 @@
private static final Set<Option> javacFileManagerOptions =
Option.getJavacFileManagerOptions();
+ @Override
public int isSupportedOption(String option) {
for (Option o : javacFileManagerOptions) {
if (o.matches(option))
@@ -178,7 +192,27 @@
return -1;
}
- public abstract boolean isDefaultBootClassPath();
+ /**
+ * Common back end for OptionHelper handleFileManagerOption.
+ * @param option the option whose value to be set
+ * @param value the value for the option
+ * @return true if successful, and false otherwise
+ */
+ public boolean handleOption(Option option, String value) {
+ return locations.handleOption(option, value);
+ }
+
+ /**
+ * Call handleOption for collection of options and corresponding values.
+ * @param map a collection of options and corresponding values
+ * @return true if all the calls are successful
+ */
+ public boolean handleOptions(Map<Option, String> map) {
+ boolean ok = true;
+ for (Map.Entry<Option, String> e: map.entrySet())
+ ok = ok & handleOption(e.getKey(), e.getValue());
+ return ok;
+ }
// </editor-fold>
@@ -205,10 +239,7 @@
CharsetDecoder decoder;
try {
decoder = getDecoder(encodingName, ignoreEncodingErrors);
- } catch (IllegalCharsetNameException e) {
- log.error("unsupported.encoding", encodingName);
- return (CharBuffer)CharBuffer.allocate(1).flip();
- } catch (UnsupportedCharsetException e) {
+ } catch (IllegalCharsetNameException | UnsupportedCharsetException e) {
log.error("unsupported.encoding", encodingName);
return (CharBuffer)CharBuffer.allocate(1).flip();
}
@@ -286,6 +317,9 @@
// <editor-fold defaultstate="collapsed" desc="ByteBuffers">
/**
* Make a byte buffer from an input stream.
+ * @param in the stream
+ * @return a byte buffer containing the contents of the stream
+ * @throws IOException if an error occurred while reading the stream
*/
public ByteBuffer makeByteBuffer(InputStream in)
throws IOException {
--- a/langtools/src/share/classes/com/sun/tools/javadoc/Start.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/Start.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, 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
@@ -32,18 +32,23 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Map;
import javax.tools.JavaFileManager;
import javax.tools.JavaFileObject;
import com.sun.javadoc.*;
+import com.sun.tools.javac.file.JavacFileManager;
import com.sun.tools.javac.main.CommandLine;
+import com.sun.tools.javac.main.Option;
+import com.sun.tools.javac.util.BaseFileManager;
import com.sun.tools.javac.util.ClientCodeException;
import com.sun.tools.javac.util.Context;
import com.sun.tools.javac.util.List;
import com.sun.tools.javac.util.ListBuffer;
import com.sun.tools.javac.util.Log;
import com.sun.tools.javac.util.Options;
+
import static com.sun.tools.javac.code.Flags.*;
/**
@@ -71,7 +76,7 @@
private static final String standardDocletClassName =
"com.sun.tools.doclets.standard.Standard";
- private long defaultFilter = PUBLIC | PROTECTED;
+ private final long defaultFilter = PUBLIC | PROTECTED;
private final Messager messager;
@@ -324,6 +329,15 @@
javaNames.append(arg);
}
}
+
+ if (fileManager == null) {
+ JavacFileManager.preRegister(context);
+ fileManager = context.get(JavaFileManager.class);
+ }
+ if (fileManager instanceof BaseFileManager) {
+ ((BaseFileManager) fileManager).handleOptions(fileManagerOpts);
+ }
+
compOpts.notifyListeners();
if (javaNames.isEmpty() && subPackages.isEmpty() && isEmpty(fileObjects)) {
--- a/langtools/src/share/classes/com/sun/tools/javadoc/ToolOption.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/ToolOption.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,10 +25,14 @@
package com.sun.tools.javadoc;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.StringTokenizer;
+
import com.sun.tools.javac.code.Flags;
+import com.sun.tools.javac.main.Option;
import com.sun.tools.javac.util.ListBuffer;
import com.sun.tools.javac.util.Options;
-import java.util.StringTokenizer;
/**
@@ -45,42 +49,42 @@
BOOTCLASSPATH("-bootclasspath", true) {
@Override
public void process(Helper helper, String arg) {
- helper.setCompilerOpt(opt, arg);
+ helper.setFileManagerOpt(Option.BOOTCLASSPATH, arg);
}
},
CLASSPATH("-classpath", true) {
@Override
public void process(Helper helper, String arg) {
- helper.setCompilerOpt(opt, arg);
+ helper.setFileManagerOpt(Option.CLASSPATH, arg);
}
},
CP("-cp", true) {
@Override
public void process(Helper helper, String arg) {
- helper.setCompilerOpt(opt, arg);
+ helper.setFileManagerOpt(Option.CP, arg);
}
},
EXTDIRS("-extdirs", true) {
@Override
public void process(Helper helper, String arg) {
- helper.setCompilerOpt(opt, arg);
+ helper.setFileManagerOpt(Option.EXTDIRS, arg);
}
},
SOURCEPATH("-sourcepath", true) {
@Override
public void process(Helper helper, String arg) {
- helper.setCompilerOpt(opt, arg);
+ helper.setFileManagerOpt(Option.SOURCEPATH, arg);
}
},
SYSCLASSPATH("-sysclasspath", true) {
@Override
public void process(Helper helper, String arg) {
- helper.setCompilerOpt("-bootclasspath", arg);
+ helper.setFileManagerOpt(Option.BOOTCLASSPATH, arg);
}
},
@@ -274,6 +278,9 @@
/** Excluded packages, from -exclude. */
final ListBuffer<String> excludedPackages = new ListBuffer<>();
+ // File manager options
+ final Map<Option, String> fileManagerOpts = new LinkedHashMap<>();
+
/** javac options, set by various options. */
Options compOpts; // = Options.instance(context)
@@ -306,7 +313,7 @@
abstract void usageError(String msg, Object... args);
- protected void addToList(ListBuffer<String> list, String str){
+ void addToList(ListBuffer<String> list, String str){
StringTokenizer st = new StringTokenizer(str, ":");
String current;
while(st.hasMoreTokens()){
@@ -315,18 +322,22 @@
}
}
- protected void setFilter(long filterBits) {
+ void setFilter(long filterBits) {
if (showAccess != null) {
usageError("main.incompatible.access.flags");
}
showAccess = new ModifierFilter(filterBits);
}
- private void setCompilerOpt(String opt, String arg) {
+ void setCompilerOpt(String opt, String arg) {
if (compOpts.get(opt) != null) {
usageError("main.option.already.seen", opt);
}
compOpts.put(opt, arg);
}
+
+ void setFileManagerOpt(Option opt, String arg) {
+ fileManagerOpts.put(opt, arg);
+ }
}
}
--- a/langtools/test/tools/javac/T6358024.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/T6358024.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2014, 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
@@ -54,13 +54,13 @@
test(fm, f,
new Option[] { new Option("-d", ".")},
- 7);
+ 8);
test(fm, f,
new Option[] { new XOption("-XprintRounds"),
new Option("-processorpath", "."),
new Option("-processor", self) },
- 12);
+ 13);
}
static void test(JavacFileManager fm, JavaFileObject f, Option[] opts, int expect) throws Throwable {
--- a/langtools/test/tools/javac/T6358166.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/T6358166.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2014, 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
@@ -57,12 +57,8 @@
static void test(JavacFileManager fm, JavaFileObject f, String... args) throws Throwable {
Context context = new Context();
- fm.setContext(context);
- Main compilerMain = new Main("javac", new PrintWriter(System.err, true));
- compilerMain.setOptions(Options.instance(context));
- compilerMain.filenames = new LinkedHashSet<File>();
- compilerMain.processArgs(args);
+ Main compilerMain = initCompilerMain(context, fm, args);
JavaCompiler c = JavaCompiler.instance(context);
@@ -76,6 +72,19 @@
throw new AssertionError("elapsed time is suspect: " + msec);
}
+ static Main initCompilerMain(Context context, JavacFileManager fm, String... args) {
+ fm.setContext(context);
+ context.put(JavaFileManager.class, fm);
+
+ Main compilerMain = new Main("javac", new PrintWriter(System.err, true));
+ compilerMain.setOptions(Options.instance(context));
+ compilerMain.filenames = new LinkedHashSet<File>();
+ compilerMain.deferredFileManagerOptions = new LinkedHashMap<>();
+ compilerMain.processArgs(args);
+ fm.handleOptions(compilerMain.deferredFileManagerOptions);
+ return compilerMain;
+ }
+
public boolean process(Set<? extends TypeElement> tes, RoundEnvironment renv) {
return true;
}
--- a/langtools/test/tools/javac/T6358168.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/T6358168.java Wed Jun 18 13:14:15 2014 -0700
@@ -68,12 +68,9 @@
static void testNoAnnotationProcessing(JavacFileManager fm, JavaFileObject f) throws Throwable {
Context context = new Context();
- fm.setContext(context);
- Main compilerMain = new Main("javac", new PrintWriter(System.err, true));
- compilerMain.setOptions(Options.instance(context));
- compilerMain.filenames = new LinkedHashSet<File>();
- compilerMain.processArgs(new String[] { "-d", "." });
+ String[] args = { "-d", "." };
+ Main compilerMain = initCompilerMain(context, fm, args);
JavaCompiler compiler = JavaCompiler.instance(context);
compiler.compile(List.of(f));
@@ -87,16 +84,14 @@
static void testAnnotationProcessing(JavacFileManager fm, JavaFileObject f) throws Throwable {
Context context = new Context();
- fm.setContext(context);
- Main compilerMain = new Main("javac", new PrintWriter(System.err, true));
- compilerMain.setOptions(Options.instance(context));
- compilerMain.filenames = new LinkedHashSet<File>();
- compilerMain.processArgs(new String[] {
- "-XprintRounds",
- "-processorpath", testClasses,
- "-processor", self,
- "-d", "."});
+ String[] args = {
+ "-XprintRounds",
+ "-processorpath", testClasses,
+ "-processor", self,
+ "-d", "."
+ };
+ Main compilerMain = initCompilerMain(context, fm, args);
JavaCompiler compiler = JavaCompiler.instance(context);
compiler.compile(List.of(f));
@@ -108,6 +103,19 @@
}
}
+ static Main initCompilerMain(Context context, JavacFileManager fm, String... args) {
+ fm.setContext(context);
+ context.put(JavaFileManager.class, fm);
+
+ Main compilerMain = new Main("javac", new PrintWriter(System.err, true));
+ compilerMain.setOptions(Options.instance(context));
+ compilerMain.filenames = new LinkedHashSet<File>();
+ compilerMain.deferredFileManagerOptions = new LinkedHashMap<>();
+ compilerMain.processArgs(args);
+ fm.handleOptions(compilerMain.deferredFileManagerOptions);
+ return compilerMain;
+ }
+
public boolean process(Set<? extends TypeElement> tes, RoundEnvironment renv) {
return true;
}
--- a/langtools/test/tools/javac/T6395974.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/T6395974.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2014, 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,8 +29,11 @@
import java.io.*;
import java.util.*;
+
import javax.tools.*;
+
import com.sun.source.util.*;
+import com.sun.source.util.TaskEvent.Kind;
import com.sun.tools.javac.api.*;
@@ -59,16 +62,13 @@
task.setTaskListener(tl);
task.call();
-
- if (tl.event != null)
- throw new AssertionError("Unexpected TaskListener event: " + tl.event);
}
static class MyTaskListener implements TaskListener {
public void started(TaskEvent e) {
- System.err.println("Started: " + e);
- if (event == null)
- event = e;
+ if (e.getKind() != Kind.COMPILATION) {
+ throw new AssertionError("Unexpected TaskListener event: " + e);
+ }
}
public void finished(TaskEvent e) {
}
--- a/langtools/test/tools/javac/T6403466.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/T6403466.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,3 +1,4 @@
+Started TaskEvent[COMPILATION,null,null]
Started TaskEvent[ANNOTATION_PROCESSING,null,null]
Started TaskEvent[PARSE,T6403466.java,null]
Finished TaskEvent[PARSE,T6403466.java,null]
@@ -40,3 +41,4 @@
Finished TaskEvent[ANALYZE,T6403466Wrapper.java,T6403466Wrapper]
Started TaskEvent[GENERATE,T6403466Wrapper.java,T6403466Wrapper]
Finished TaskEvent[GENERATE,T6403466Wrapper.java,T6403466Wrapper]
+Finished TaskEvent[COMPILATION,null,null]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/annotations/FinalReceiverTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,14 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8027886
+ * @summary Receiver parameters must not be final
+ * @compile/fail/ref=FinalReceiverTest.out -XDrawDiagnostics FinalReceiverTest.java
+ */
+
+class FinalReceiverTest {
+ void m() {
+ class Inner {
+ Inner(final FinalReceiverTest FinalReceiverTest.this) {}
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/annotations/FinalReceiverTest.out Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,2 @@
+FinalReceiverTest.java:11:43: compiler.err.mod.not.allowed.here: final
+1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/annotations/LocalInnerReceiverTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8029042
+ * @summary Receiver parameter not supported on local class constructor
+ * @compile LocalInnerReceiverTest.java
+ */
+
+class LocalInnerReceiverTest {
+ void m() {
+ class Inner {
+ Inner(LocalInnerReceiverTest LocalInnerReceiverTest.this) {}
+ }
+ }
+}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/TargetTypes.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/TargetTypes.java Wed Jun 18 13:14:15 2014 -0700
@@ -35,9 +35,41 @@
* @compile TargetTypes.java
*/
-@Target({TYPE_USE, TYPE_PARAMETER, TYPE})
-@Retention(RetentionPolicy.RUNTIME)
-@interface A {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface A {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface B {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface C {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface D {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface E {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface F {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface G {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface H {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface I {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface J {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface K {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface L {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface M {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface N {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface O {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface P {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface Q {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface R {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface S {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface U {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface V {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface W {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface X {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface Y {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface Z {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AA {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AB {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AC {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AD {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AE {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AF {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AG {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AH {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AI {}
+@Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AJ {}
/** wildcard bound */
class T0x1C {
@@ -46,75 +78,75 @@
/** wildcard bound generic/array */
class T0x1D<T> {
- void m0x1D(List<? extends @A List<int[]>> lst) {}
+ void m0x1D(List<? extends @B List<int[]>> lst) {}
}
/** typecast */
class T0x00 {
void m0x00(Long l1) {
- Object l2 = (@A Long) l1;
+ Object l2 = (@C Long) l1;
}
}
/** typecast generic/array */
class T0x01<T> {
void m0x01(List<T> list) {
- List<T> l = (List<@A T>) list;
+ List<T> l = (List<@D T>) list;
}
}
/** instanceof */
class T0x02 {
boolean m0x02(String s) {
- return (s instanceof @A String);
+ return (s instanceof @E String);
}
}
/** object creation (new) */
class T0x04 {
void m0x04() {
- new @A ArrayList<String>();
+ new @F ArrayList<String>();
}
}
/** local variable */
class T0x08 {
void m0x08() {
- @A String s = null;
+ @G String s = null;
}
}
/** method parameter generic/array */
class T0x0D {
- void m0x0D(HashMap<@A Object, List<@A List<@A Class>>> s1) {}
+ void m0x0D(HashMap<@H Object, List<@I List<@J Class>>> s1) {}
}
/** method receiver */
class T0x06 {
- void m0x06(@A T0x06 this) {}
+ void m0x06(@K T0x06 this) {}
}
/** method return type generic/array */
class T0x0B {
- Class<@A Object> m0x0B() { return null; }
+ Class<@L Object> m0x0B() { return null; }
}
/** field generic/array */
class T0x0F {
- HashMap<@A Object, @A Object> c1;
+ HashMap<@M Object, @N Object> c1;
}
/** method type parameter */
class T0x20<T, U> {
- <@A T, @A U> void m0x20() {}
+ <@O T, @P U> void m0x20() {}
}
/** class type parameter */
-class T0x22<@A T, @A U> {
+class T0x22<@Q T, @R U> {
}
/** class type parameter bound */
-class T0x10<T extends @A Object> {
+class T0x10<T extends @S Object> {
}
/** method type parameter bound */
@@ -123,43 +155,43 @@
}
/** class type parameter bound generic/array */
-class T0x11<T extends List<@A T>> {
+class T0x11<T extends List<@U T>> {
}
/** method type parameter bound generic/array */
class T0x13 {
- static <T extends Comparable<@A T>> T m0x13() {
+ static <T extends Comparable<@V T>> T m0x13() {
return null;
}
}
/** class extends/implements generic/array */
-class T0x15<T> extends ArrayList<@A T> {
+class T0x15<T> extends ArrayList<@W T> {
}
/** type test (instanceof) generic/array */
class T0x03<T> {
void m0x03(T typeObj, Object obj) {
- boolean ok = obj instanceof String @A [];
+ boolean ok = obj instanceof String @X [];
}
}
/** object creation (new) generic/array */
class T0x05<T> {
void m0x05() {
- new ArrayList<@A T>();
+ new ArrayList<@Y T>();
}
}
/** local variable generic/array */
class T0x09<T> {
void g() {
- List<@A String> l = null;
+ List<@Z String> l = null;
}
void a() {
- String @A [] as = null;
+ String @AA [] as = null;
}
}
@@ -168,14 +200,14 @@
<T> T0x19() {}
void g() {
- new <List<@A String>> T0x19();
+ new <List<@AB String>> T0x19();
}
}
/** type argument in method call generic/array */
class T0x1B<T> {
void m0x1B() {
- Collections.<T @A []>emptyList();
+ Collections.<T @AC []>emptyList();
}
}
@@ -184,7 +216,7 @@
<T> T0x18() {}
void m() {
- new <@A Integer> T0x18();
+ new <@AD Integer> T0x18();
}
}
@@ -192,15 +224,15 @@
class T0x1A<T,U> {
public static <T, U> T m() { return null; }
static void m0x1A() {
- T0x1A.<@A Integer, @A Short>m();
+ T0x1A.<@AE Integer, @AF Short>m();
}
}
/** class extends/implements */
-class T0x14 extends @A Object implements @A Serializable, @A Cloneable {
+class T0x14 extends @AG Object implements @AH Serializable, @AI Cloneable {
}
/** exception type in throws */
class T0x16 {
- void m0x16() throws @A Exception {}
+ void m0x16() throws @AJ Exception {}
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/classfile/ClassfileTestHelper.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/classfile/ClassfileTestHelper.java Wed Jun 18 13:14:15 2014 -0700
@@ -36,8 +36,8 @@
//Makes debugging much easier. Set to 'false' for less output.
public Boolean verbose = true;
- void println(String msg) { if (verbose) System.out.println(msg); }
- void print(String msg) { if (verbose) System.out.print(msg); }
+ void println(String msg) { if (verbose) System.err.println(msg); }
+ void print(String msg) { if (verbose) System.err.print(msg); }
File writeTestFile(String fname, String source) throws IOException {
File f = new File(fname);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/AnnotatedClassExpr.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,17 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8027262
+ * @summary A class expression cannot be annotated.
+ * @compile/fail/ref=AnnotatedClassExpr.out -XDrawDiagnostics AnnotatedClassExpr.java
+ */
+import java.lang.annotation.*;
+import java.util.List;
+
+class AnnotatedClassExpr {
+ static void main() {
+ Object o1 = @A int.class;
+ }
+}
+
+@Target(ElementType.TYPE_USE)
+@interface A { }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/AnnotatedClassExpr.out Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,2 @@
+AnnotatedClassExpr.java:12:29: compiler.err.no.annotations.on.dot.class
+1 error
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/AnnotatedImport.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/AnnotatedImport.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,9 +1,8 @@
/*
* @test /nodynamiccopyright/
- * @bug 8006775
+ * @bug 8006775 8027262
* @summary Import clauses cannot use annotations.
* @author Werner Dietl
- * @ignore
* @compile/fail/ref=AnnotatedImport.out -XDrawDiagnostics AnnotatedImport.java
*/
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/AnnotatedImport.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/AnnotatedImport.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,7 +1,7 @@
-AnnotatedImport.java:9:13: compiler.err.expected: token.identifier
-AnnotatedImport.java:9:14: compiler.err.expected3: class, interface, enum
-AnnotatedImport.java:10:7: compiler.err.expected: token.identifier
-AnnotatedImport.java:10:10: compiler.err.expected: ';'
-AnnotatedImport.java:11:18: compiler.err.expected: token.identifier
-AnnotatedImport.java:11:19: compiler.err.expected3: class, interface, enum
+AnnotatedImport.java:10:13: compiler.err.expected: token.identifier
+AnnotatedImport.java:10:16: compiler.err.expected3: class, interface, enum
+AnnotatedImport.java:11:7: compiler.err.expected: token.identifier
+AnnotatedImport.java:11:11: compiler.err.expected3: class, interface, enum
+AnnotatedImport.java:12:18: compiler.err.expected: token.identifier
+AnnotatedImport.java:12:21: compiler.err.expected3: class, interface, enum
6 errors
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/AnnotatedPackage1.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/AnnotatedPackage1.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,9 +1,8 @@
/*
* @test /nodynamiccopyright/
- * @bug 8006775
+ * @bug 8006775 8027262
* @summary Package declarations cannot use annotations.
* @author Werner Dietl
- * @ignore
* @compile/fail/ref=AnnotatedPackage1.out -XDrawDiagnostics AnnotatedPackage1.java
*/
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/AnnotatedPackage1.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/AnnotatedPackage1.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,3 +1,3 @@
AnnotatedPackage1.java:9:14: compiler.err.expected: token.identifier
-AnnotatedPackage1.java:9:16: compiler.err.expected3: class, interface, enum
+AnnotatedPackage1.java:9:17: compiler.err.expected3: class, interface, enum
2 errors
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotatePackages.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotatePackages.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
-CantAnnotatePackages.java:19:14: compiler.err.cant.resolve.location: kindname.class, java, , , (compiler.misc.location: kindname.class, CantAnnotatePackages, null)
-CantAnnotatePackages.java:20:9: compiler.err.cant.resolve.location: kindname.class, lang, , , (compiler.misc.location: kindname.package, java, null)
-CantAnnotatePackages.java:21:14: compiler.err.cant.resolve.location: kindname.class, lang, , , (compiler.misc.location: kindname.package, java, null)
-CantAnnotatePackages.java:14:18: compiler.err.cant.type.annotate.scoping.1: @TA
-4 errors
\ No newline at end of file
+CantAnnotatePackages.java:14:13: compiler.err.cant.type.annotate.scoping.1: @TA
+CantAnnotatePackages.java:19:18: compiler.err.cant.type.annotate.scoping.1: @TA
+CantAnnotatePackages.java:20:19: compiler.err.cant.type.annotate.scoping.1: @TA
+CantAnnotatePackages.java:21:24: compiler.err.cant.type.annotate.scoping.1: @TA
+4 errors
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateScoping.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateScoping.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,12 +1,14 @@
-CantAnnotateScoping.java:61:9: compiler.err.cant.resolve.location: kindname.class, lang, , , (compiler.misc.location: kindname.package, java, null)
-CantAnnotateScoping.java:66:9: compiler.err.cant.resolve.location: kindname.class, XXX, , , (compiler.misc.location: kindname.package, java, null)
-CantAnnotateScoping.java:70:9: compiler.err.cant.resolve.location: kindname.class, lang, , , (compiler.misc.location: kindname.package, java, null)
+CantAnnotateScoping.java:66:18: compiler.err.doesnt.exist: java.XXX
CantAnnotateScoping.java:38:14: compiler.err.cant.type.annotate.scoping.1: @TA
-CantAnnotateScoping.java:47:18: compiler.err.cant.type.annotate.scoping.1: @TA
-CantAnnotateScoping.java:56:37: compiler.err.cant.type.annotate.scoping: @TA,@TA2
-CantAnnotateScoping.java:40:14: compiler.err.cant.type.annotate.scoping.1: @TA
-CantAnnotateScoping.java:42:34: compiler.err.cant.type.annotate.scoping: @TA,@DA,@TA2
+CantAnnotateScoping.java:40:19: compiler.err.cant.type.annotate.scoping.1: @TA
+CantAnnotateScoping.java:47:13: compiler.err.cant.type.annotate.scoping.1: @TA
+CantAnnotateScoping.java:56:32: compiler.err.cant.type.annotate.scoping: @TA,@TA2
+CantAnnotateScoping.java:61:19: compiler.err.cant.type.annotate.scoping.1: @DA
+CantAnnotateScoping.java:70:19: compiler.err.cant.type.annotate.scoping.1: @TA
+CantAnnotateScoping.java:61:11: compiler.err.annotation.type.not.applicable
+CantAnnotateScoping.java:66:11: compiler.err.annotation.type.not.applicable
+CantAnnotateScoping.java:42:39: compiler.err.cant.type.annotate.scoping: @TA,@DA,@TA2
CantAnnotateScoping.java:42:25: compiler.err.annotation.type.not.applicable
-CantAnnotateScoping.java:44:38: compiler.err.cant.type.annotate.scoping: @TA,@DA
+CantAnnotateScoping.java:44:43: compiler.err.cant.type.annotate.scoping: @TA,@DA
CantAnnotateScoping.java:44:34: compiler.err.annotation.type.not.applicable
-11 errors
+13 errors
\ No newline at end of file
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass.java Wed Jun 18 13:14:15 2014 -0700
@@ -12,14 +12,49 @@
import java.lang.annotation.*;
class Top {
- @Target(ElementType.TYPE_USE)
- @interface TA {}
-
- @Target(ElementType.TYPE_USE)
- @interface TB {}
-
- @Target(ElementType.TYPE_USE)
- @interface TC {}
+ @Target(ElementType.TYPE_USE) @interface TA {}
+ @Target(ElementType.TYPE_USE) @interface TB1 {}
+ @Target(ElementType.TYPE_USE) @interface TB2 {}
+ @Target(ElementType.TYPE_USE) @interface TB3 {}
+ @Target(ElementType.TYPE_USE) @interface TB4 {}
+ @Target(ElementType.TYPE_USE) @interface TB5 {}
+ @Target(ElementType.TYPE_USE) @interface TB6 {}
+ @Target(ElementType.TYPE_USE) @interface TB7 {}
+ @Target(ElementType.TYPE_USE) @interface TB8 {}
+ @Target(ElementType.TYPE_USE) @interface TB9 {}
+ @Target(ElementType.TYPE_USE) @interface TB10 {}
+ @Target(ElementType.TYPE_USE) @interface TB11 {}
+ @Target(ElementType.TYPE_USE) @interface TB12 {}
+ @Target(ElementType.TYPE_USE) @interface TB13 {}
+ @Target(ElementType.TYPE_USE) @interface TB14 {}
+ @Target(ElementType.TYPE_USE) @interface TB15 {}
+ @Target(ElementType.TYPE_USE) @interface TB16 {}
+ @Target(ElementType.TYPE_USE) @interface TB17 {}
+ @Target(ElementType.TYPE_USE) @interface TB18 {}
+ @Target(ElementType.TYPE_USE) @interface TB19 {}
+ @Target(ElementType.TYPE_USE) @interface TB20 {}
+ @Target(ElementType.TYPE_USE) @interface TB21 {}
+ @Target(ElementType.TYPE_USE) @interface TB22 {}
+ @Target(ElementType.TYPE_USE) @interface TB23 {}
+ @Target(ElementType.TYPE_USE) @interface TB24 {}
+ @Target(ElementType.TYPE_USE) @interface TB25 {}
+ @Target(ElementType.TYPE_USE) @interface TB26 {}
+ @Target(ElementType.TYPE_USE) @interface TB27 {}
+ @Target(ElementType.TYPE_USE) @interface TB28 {}
+ @Target(ElementType.TYPE_USE) @interface TB29 {}
+ @Target(ElementType.TYPE_USE) @interface TB30 {}
+ @Target(ElementType.TYPE_USE) @interface TB31 {}
+ @Target(ElementType.TYPE_USE) @interface TB32 {}
+ @Target(ElementType.TYPE_USE) @interface TB33 {}
+ @Target(ElementType.TYPE_USE) @interface TB34 {}
+ @Target(ElementType.TYPE_USE) @interface TB35 {}
+ @Target(ElementType.TYPE_USE) @interface TB36 {}
+ @Target(ElementType.TYPE_USE) @interface TB37 {}
+ @Target(ElementType.TYPE_USE) @interface TB38 {}
+ @Target(ElementType.TYPE_USE) @interface TB39 {}
+ @Target(ElementType.TYPE_USE) @interface TB40 {}
+ @Target(ElementType.TYPE_USE) @interface TB41 {}
+ @Target(ElementType.TYPE_USE) @interface TC {}
class Outer {
class Inner {
@@ -34,63 +69,63 @@
// All combinations are OK
- Top.@TB Outer f1;
- @TB Outer.Inner f1a;
+ Top.@TB1 Outer f1;
+ @TB2 Outer.Inner f1a;
Outer. @TC Inner f1b;
- @TB Outer. @TC Inner f1c;
+ @TB3 Outer. @TC Inner f1c;
- @TA Top. @TB Outer f2;
- @TA Top. @TB Outer.Inner f2a;
+ @TA Top. @TB4 Outer f2;
+ @TA Top. @TB5 Outer.Inner f2a;
@TA Top. Outer. @TC Inner f2b;
- @TA Top. @TB Outer. @TC Inner f2c;
+ @TA Top. @TB6 Outer. @TC Inner f2c;
- @TB Outer f1r() { return null; }
- @TB Outer.Inner f1ra() { return null; }
+ @TB7 Outer f1r() { return null; }
+ @TB8 Outer.Inner f1ra() { return null; }
Outer. @TC Inner f1rb() { return null; }
- @TB Outer. @TC Inner f1rc() { return null; }
+ @TB9 Outer. @TC Inner f1rc() { return null; }
- void f1param(@TB Outer p,
- @TB Outer.Inner p1,
+ void f1param(@TB41 Outer p,
+ @TB10 Outer.Inner p1,
Outer. @TC Inner p2,
- @TB Outer. @TC Inner p3) { }
+ @TB11 Outer. @TC Inner p3) { }
void f1cast(Object o) {
Object l;
- l = (@TB Outer) o;
- l = (@TB Outer.Inner) o;
+ l = (@TB12 Outer) o;
+ l = (@TB13 Outer.Inner) o;
l = (Outer. @TC Inner) o;
- l = (@TB Outer. @TC Inner) o;
+ l = (@TB14 Outer. @TC Inner) o;
}
- List<@TB Outer> g1;
- List<@TB Outer.Inner> g1a;
+ List<@TB15 Outer> g1;
+ List<@TB16 Outer.Inner> g1a;
List<Outer. @TC Inner> g1b;
- List<@TB Outer. @TC Inner> g1c;
+ List<@TB17 Outer. @TC Inner> g1c;
- List<@TA Top. @TB Outer> g2;
- List<@TA Top. @TB Outer.Inner> g2a;
+ List<@TA Top. @TB18 Outer> g2;
+ List<@TA Top. @TB19 Outer.Inner> g2a;
List<@TA Top. Outer. @TC Inner> g2b;
- List<@TA Top. @TB Outer. @TC Inner> g2c;
+ List<@TA Top. @TB20 Outer. @TC Inner> g2c;
- List<@TB Outer> g1r() { return null; }
- List<@TB Outer.Inner> g1ra() { return null; }
+ List<@TB21 Outer> g1r() { return null; }
+ List<@TB22 Outer.Inner> g1ra() { return null; }
List<Outer. @TC Inner> g1rb() { return null; }
- List<@TB Outer. @TC Inner> g1rc() { return null; }
+ List<@TB23 Outer. @TC Inner> g1rc() { return null; }
- void g1param(List<@TB Outer> p,
- List<@TB Outer.Inner> p1,
+ void g1param(List<@TB24 Outer> p,
+ List<@TB25 Outer.Inner> p1,
List<Outer. @TC Inner> p2,
- List<@TB Outer. @TC Inner> p3) { }
+ List<@TB26 Outer. @TC Inner> p3) { }
void g1new(Object o) {
Object l;
- l = new @TB ArrayList<@TB Outer>();
- l = new @TB ArrayList<@TB Outer.Inner>();
- l = new @TB HashMap<String, Outer. @TC Inner>();
- l = new @TB HashMap<String, @TB Outer. Inner>();
- l = new @TB HashMap<String, @TB Outer. @TC Inner>();
- l = new @TB HashMap<String, @TA Top. Outer. @TC Inner>();
- l = new @TB HashMap<String, @TA Top. @TB Outer. Inner>();
- l = new @TB HashMap<String, @TA Top. @TB Outer. @TC Inner>();
+ l = new @TB27 ArrayList<@TB28 Outer>();
+ l = new @TB29 ArrayList<@TB30 Outer.Inner>();
+ l = new @TB31 HashMap<String, Outer. @TC Inner>();
+ l = new @TB32 HashMap<String, @TB33 Outer. Inner>();
+ l = new @TB34 HashMap<String, @TB35 Outer. @TC Inner>();
+ l = new @TB36 HashMap<String, @TA Top. Outer. @TC Inner>();
+ l = new @TB37 HashMap<String, @TA Top. @TB38 Outer. Inner>();
+ l = new @TB39 HashMap<String, @TA Top. @TB40 Outer. @TC Inner>();
}
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass2.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass2.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,65 +1,72 @@
CantAnnotateStaticClass2.java:44:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
CantAnnotateStaticClass2.java:45:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:52:16: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:53:16: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:55:14: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:56:23: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:57:23: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:58:23: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:60:21: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:61:21: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:62:21: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:64:25: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:65:25: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:66:25: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:52:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:53:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:55:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:56:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:57:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:57:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:58:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:58:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:60:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:61:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:62:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:64:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:65:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:65:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:66:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:66:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
CantAnnotateStaticClass2.java:71:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
CantAnnotateStaticClass2.java:72:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:79:16: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:80:16: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:79:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:80:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
CantAnnotateStaticClass2.java:87:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:89:24: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:89:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
CantAnnotateStaticClass2.java:91:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:93:24: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:57:12: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:58:12: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:65:12: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:66:12: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:120:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:121:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:128:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:129:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:131:14: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:133:14: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:134:17: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:135:17: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:137:14: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:138:14: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:139:14: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:141:14: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:142:17: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:143:17: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:149:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:150:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:157:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:158:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:165:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:167:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:169:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:171:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:105:18: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:107:18: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:112:18: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:114:18: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:184:35: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:186:41: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:187:41: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:192:35: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:194:41: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:195:41: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:199:35: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:200:38: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:201:41: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass2.java:202:44: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:203:44: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass2.java:204:49: compiler.err.cant.type.annotate.scoping: @Top.TA,@Top.TB,@Top.TC
-64 errors
+CantAnnotateStaticClass2.java:93:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:120:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:121:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:128:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:129:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:131:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:133:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:134:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:134:28: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:135:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:135:28: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:137:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:138:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:139:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:141:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:142:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:142:28: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:143:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:143:28: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:149:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:150:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:157:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:158:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:165:27: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:167:27: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:169:27: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:171:27: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:105:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:107:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:112:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:114:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:184:40: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:186:46: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:187:46: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:192:40: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:194:46: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:195:46: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:199:38: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:200:38: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:200:49: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:201:44: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:202:44: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:202:55: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:203:44: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass2.java:203:55: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass2.java:204:52: compiler.err.cant.type.annotate.scoping: @Top.TA,@Top.TB,@Top.TC
+71 errors
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass3.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass3.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,9 +1,8 @@
/*
* @test /nodynamiccopyright/
- * @bug 8006733 8006775
+ * @bug 8006733 8006775 8027262
* @summary Ensure behavior for nested types is correct.
* @author Werner Dietl
- * @ignore
* @compile/fail/ref=CantAnnotateStaticClass3.out -XDrawDiagnostics CantAnnotateStaticClass3.java
*/
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass3.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass3.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,83 +1,92 @@
CantAnnotateStaticClass3.java:44:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
CantAnnotateStaticClass3.java:45:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
CantAnnotateStaticClass3.java:46:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:52:16: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:53:16: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:54:16: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:56:14: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:57:23: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:58:23: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:59:23: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:61:21: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:62:21: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:63:21: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:65:25: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:66:25: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:67:25: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:52:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:53:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:54:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:56:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:57:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:57:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:58:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:58:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:59:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:59:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:61:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:62:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:63:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:65:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:65:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:66:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:66:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:67:12: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:67:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
CantAnnotateStaticClass3.java:71:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
CantAnnotateStaticClass3.java:72:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
CantAnnotateStaticClass3.java:73:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:79:16: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:80:16: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:81:16: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:79:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:80:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:81:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
CantAnnotateStaticClass3.java:84:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:86:24: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:86:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
CantAnnotateStaticClass3.java:88:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:90:24: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:90:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
CantAnnotateStaticClass3.java:92:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:94:24: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:57:12: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:58:12: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:59:12: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:65:12: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:66:12: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:67:12: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:99:18: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:101:18: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:106:18: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:108:18: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:113:18: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:115:18: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:120:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:121:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:122:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:128:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:129:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:130:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:132:14: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:134:17: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:135:17: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:136:17: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:138:14: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:139:14: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:140:14: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:142:17: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:143:17: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:144:17: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:149:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:150:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:151:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:157:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:158:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:159:14: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:162:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:164:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:166:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:168:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:170:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:172:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:177:35: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:179:41: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:180:41: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:185:35: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:187:41: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:188:41: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:193:35: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:195:41: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:196:41: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:200:35: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:201:38: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:202:41: compiler.err.cant.type.annotate.scoping.1: @Top.TA
-CantAnnotateStaticClass3.java:203:44: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-CantAnnotateStaticClass3.java:204:44: compiler.err.cant.type.annotate.scoping.1: @Top.TB
-82 errors
\ No newline at end of file
+CantAnnotateStaticClass3.java:94:22: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:120:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:121:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:122:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:128:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:129:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:130:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:132:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:134:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:134:28: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:135:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:135:28: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:136:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:136:28: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:138:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:139:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:140:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:142:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:142:28: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:143:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:143:28: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:144:17: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:144:28: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:149:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:150:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:151:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:157:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:158:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:159:19: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:162:27: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:164:27: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:166:27: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:168:27: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:170:27: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:172:27: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:99:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:101:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:106:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:108:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:113:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:115:23: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:177:40: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:179:46: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:180:46: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:185:40: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:187:46: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:188:46: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:193:40: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:195:46: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:196:46: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:200:38: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:201:38: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:201:49: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:202:44: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:203:44: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:203:55: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+CantAnnotateStaticClass3.java:204:44: compiler.err.cant.type.annotate.scoping.1: @Top.TA
+CantAnnotateStaticClass3.java:204:55: compiler.err.cant.type.annotate.scoping.1: @Top.TB
+91 errors
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/arrays/DeclarationAnnotation.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/arrays/DeclarationAnnotation.java Wed Jun 18 13:14:15 2014 -0700
@@ -10,7 +10,7 @@
Object e1 = new @DA int[5];
Object e2 = new @DA String[42];
Object e3 = new @DA Object();
- Object ok = new @DA Object() { };
+ Object e4 = new @DA Object() { };
}
@interface DA { }
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/arrays/DeclarationAnnotation.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/arrays/DeclarationAnnotation.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
-DeclarationAnnotation.java:13:21: compiler.err.annotation.type.not.applicable
DeclarationAnnotation.java:10:21: compiler.err.annotation.type.not.applicable
DeclarationAnnotation.java:11:21: compiler.err.annotation.type.not.applicable
DeclarationAnnotation.java:12:21: compiler.err.annotation.type.not.applicable
+DeclarationAnnotation.java:13:21: compiler.err.annotation.type.not.applicable
4 errors
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/arrays/MissingAnnotationValue.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/arrays/MissingAnnotationValue.java Wed Jun 18 13:14:15 2014 -0700
@@ -5,10 +5,13 @@
* @author Mahmood Ali
* @compile/fail/ref=MissingAnnotationValue.out -XDrawDiagnostics MissingAnnotationValue.java
*/
+import java.lang.annotation.*;
+
class MissingAnnotationValue {
void test() {
String @A [] s;
}
}
+@Target(ElementType.TYPE_USE)
@interface A { int field(); }
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/arrays/MissingAnnotationValue.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/arrays/MissingAnnotationValue.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,2 +1,2 @@
-MissingAnnotationValue.java:10:12: compiler.err.annotation.missing.default.value: A, field
+MissingAnnotationValue.java:12:12: compiler.err.annotation.missing.default.value: A, field
1 error
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/innertypeparams/MissingAnnotationValue.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/innertypeparams/MissingAnnotationValue.java Wed Jun 18 13:14:15 2014 -0700
@@ -5,10 +5,13 @@
* @author Mahmood Ali
* @compile/fail/ref=MissingAnnotationValue.out -XDrawDiagnostics MissingAnnotationValue.java
*/
+import java.lang.annotation.*;
+
class MissingAnnotationValue {
void innermethod() {
class Inner<@A K> { }
}
}
+@Target(ElementType.TYPE_USE)
@interface A { int field(); }
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/innertypeparams/MissingAnnotationValue.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/innertypeparams/MissingAnnotationValue.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,2 +1,2 @@
-MissingAnnotationValue.java:10:17: compiler.err.annotation.missing.default.value: A, field
+MissingAnnotationValue.java:12:17: compiler.err.annotation.missing.default.value: A, field
1 error
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/newarray/MissingAnnotationValue.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/newarray/MissingAnnotationValue.java Wed Jun 18 13:14:15 2014 -0700
@@ -5,10 +5,13 @@
* @author Mahmood Ali
* @compile/fail/ref=MissingAnnotationValue.out -XDrawDiagnostics MissingAnnotationValue.java
*/
+import java.lang.annotation.*;
+
class MissingAnnotationValue {
void test() {
String[] a = new String @A [5];
}
}
+@Target(ElementType.TYPE_USE)
@interface A { int field(); }
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/newarray/MissingAnnotationValue.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/newarray/MissingAnnotationValue.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,2 +1,2 @@
-MissingAnnotationValue.java:10:29: compiler.err.annotation.missing.default.value: A, field
+MissingAnnotationValue.java:12:29: compiler.err.annotation.missing.default.value: A, field
1 error
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/receiver/MissingAnnotationValue.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/receiver/MissingAnnotationValue.java Wed Jun 18 13:14:15 2014 -0700
@@ -5,8 +5,13 @@
* @author Mahmood Ali
* @compile/fail/ref=MissingAnnotationValue.out -XDrawDiagnostics MissingAnnotationValue.java
*/
+import java.lang.annotation.*;
+import static java.lang.annotation.RetentionPolicy.*;
+import static java.lang.annotation.ElementType.*;
+
class MissingAnnotationValue {
void test(@A MissingAnnotationValue this) { }
}
+@Target({TYPE_USE})
@interface A { int field(); }
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/receiver/MissingAnnotationValue.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/receiver/MissingAnnotationValue.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,2 +1,2 @@
-MissingAnnotationValue.java:9:13: compiler.err.annotation.missing.default.value: A, field
+MissingAnnotationValue.java:13:13: compiler.err.annotation.missing.default.value: A, field
1 error
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeArgs/MissingAnnotationValue.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeArgs/MissingAnnotationValue.java Wed Jun 18 13:14:15 2014 -0700
@@ -5,8 +5,11 @@
* @author Mahmood Ali
* @compile/fail/ref=MissingAnnotationValue.out -XDrawDiagnostics MissingAnnotationValue.java
*/
+import java.lang.annotation.*;
+
class MissingAnnotationValue<K> {
MissingAnnotationValue<@A String> l;
}
+@Target(ElementType.TYPE_USE)
@interface A { int field(); }
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeArgs/MissingAnnotationValue.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeArgs/MissingAnnotationValue.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,2 +1,2 @@
-MissingAnnotationValue.java:9:26: compiler.err.annotation.missing.default.value: A, field
+MissingAnnotationValue.java:11:26: compiler.err.annotation.missing.default.value: A, field
1 error
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeparams/MissingAnnotationValue.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeparams/MissingAnnotationValue.java Wed Jun 18 13:14:15 2014 -0700
@@ -5,7 +5,10 @@
* @author Mahmood Ali
* @compile/fail/ref=MissingAnnotationValue.out -XDrawDiagnostics MissingAnnotationValue.java
*/
+import java.lang.annotation.*;
+
class MissingAnnotationValue<@A K> {
}
+@Target(ElementType.TYPE_USE)
@interface A { int field(); }
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeparams/MissingAnnotationValue.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeparams/MissingAnnotationValue.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,2 +1,2 @@
-MissingAnnotationValue.java:8:30: compiler.err.annotation.missing.default.value: A, field
+MissingAnnotationValue.java:10:30: compiler.err.annotation.missing.default.value: A, field
1 error
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/wildcards/MissingAnnotationValue.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/wildcards/MissingAnnotationValue.java Wed Jun 18 13:14:15 2014 -0700
@@ -5,8 +5,11 @@
* @author Mahmood Ali
* @compile/fail/ref=MissingAnnotationValue.out -XDrawDiagnostics MissingAnnotationValue.java
*/
+import java.lang.annotation.*;
+
class MissingAnnotationValue<K> {
MissingAnnotationValue<@A ?> l;
}
+@Target(ElementType.TYPE_USE)
@interface A { int field(); }
--- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/wildcards/MissingAnnotationValue.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/wildcards/MissingAnnotationValue.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,2 +1,2 @@
-MissingAnnotationValue.java:9:26: compiler.err.annotation.missing.default.value: A, field
+MissingAnnotationValue.java:11:26: compiler.err.annotation.missing.default.value: A, field
1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/newlocations/AllLocations.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,196 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8027262
+ * @summary Stress test for type annotatons
+ * @compile AllLocations.java
+ */
+
+import java.util.function.Function;
+import java.lang.annotation.*;
+import static java.lang.annotation.RetentionPolicy.*;
+import static java.lang.annotation.ElementType.*;
+import java.io.*;
+import java.lang.ref.WeakReference;
+
+public class AllLocations {
+
+ public class ParamStream<T> extends FileOutputStream {
+ public ParamStream(File f) throws FileNotFoundException { super(f); }
+ }
+
+ public class Inner<S> {
+ public Inner() {}
+ public <@A T> Inner(@B Object o) {}
+ public <@C T> Object g(Inner<@D S> this, Object @E [] o) {
+ return new @F int @G [5];
+ }
+ }
+
+ public <@H T extends @I Inner<@J ? extends @K String>> AllLocations(Object o) {}
+
+ public @L Object @M [] @N [] arr = new @O Object @P [5] @Q [5];
+
+ public Inner<@R ? extends @S Inner<@T ? extends @U Integer>> inner;
+
+ public Function func(@V AllLocations this) {
+ try (final ParamStream<@W Integer @X []> fs = new ParamStream<@Y Integer @Z []>(new File("testfile"))) {
+ return @AA AllLocations.Inner<@AB String>::<@AC Integer>new;
+ } catch(@AD Exception ex) {
+ return null;
+ }
+ }
+
+ public <@AE T extends @AF Inner<@AG Integer @AH []>> Function func2() {
+ arr[0][0] = new @AI Inner((@AJ Object) arr[0]);
+ return Ext.f((@AK Object) arr[0]) instanceof @AL Inner @AM [] @AN [] ?
+ @AO @AP Ext::<@AQ @AR Integer> f :
+ @AS @AT Ext::<@AU @AV Integer> f;
+ }
+
+ public Object func3(Object @AW [] arr) {
+ Inner<@AX ? extends @AY Inner<@AZ ? extends @BA Integer>> loc;
+ if (arr[0] instanceof @BB Inner @BC [] @BD [])
+ return this.<Inner<@BE Integer @BF []>> func4();
+ else
+ return new <@BG Inner<@BH Integer>> @BI Inner<@BJ Inner<@BK Integer>>(null);
+ }
+
+ public <@BL T extends @BO Inner<@BP Integer @BQ []>>
+ @BR Inner<@BS Inner<@BT String>> func4() {
+ return (@BU Inner<@BV Inner<@BW String>>)
+ new <@BX Inner<@BY Integer>> @BZ Inner<@CA Inner<@CB String>>(null) {};
+ }
+
+ { Inner<@CC ? extends @CD Inner<@CE ? extends @CF Integer>> loc =
+ new @CG Inner<@CH Inner<@CI Integer>>() {};
+ Ext.func(Ext.func(@CJ WeakReference::new));
+ Ext.func(Ext.func(@CK Ext::<@CL Integer>f));
+ Ext.func((@CM Object a) -> { @CN Object b = a; return b; });
+ }
+
+}
+
+class Ext {
+ public static <@CO T> Object f(Object o) {
+ return null;
+ }
+ public static Function func(Function f) { return f; }
+}
+
+
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface A { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface B { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface C { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface D { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface E { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface F { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface G { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface H { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface I { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface J { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface K { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface L { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface M { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface N { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface O { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface P { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface Q { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface R { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface S { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface T { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface U { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface V { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface W { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface X { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface Y { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface Z { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AA { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AB { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AC { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AD { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AE { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AF { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AG { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AH { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AI { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AJ { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AK { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AL { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AM { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AN { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AO { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AP { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AQ { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AR { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AS { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AT { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AU { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AV { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AW { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AX { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AY { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface AZ { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BA { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BB { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BC { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BD { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BE { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BF { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BG { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BH { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BI { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BJ { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BK { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BL { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BM { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BN { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BO { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BP { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BQ { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BR { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BS { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BT { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BU { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BV { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BW { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BX { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BY { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface BZ { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CA { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CB { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CC { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CD { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CE { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CF { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CG { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CH { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CI { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CJ { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CK { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CL { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CM { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CN { }
+@Retention(RUNTIME) @Target({TYPE_USE}) @interface CO { }
--- a/langtools/test/tools/javac/annotations/typeAnnotations/newlocations/Expressions.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/newlocations/Expressions.java Wed Jun 18 13:14:15 2014 -0700
@@ -52,28 +52,40 @@
}
void objectCreationArray() {
- Object a1 = new @A String [] [] { };
- Object a2 = new @A String [1] [];
- Object a3 = new @A String [1] [2];
+ Object a1 = new @C String [] [] { };
+ Object a2 = new @D String [1] [];
+ Object a3 = new @E String [1] [2];
- Object b1 = new @A String @B(0) [] [] { };
- Object b2 = new @A String @B(0) [1] [];
- Object b3 = new @A String @B(0) [1] [2];
+ Object b1 = new @F String @B(1) [] [] { };
+ Object b2 = new @G String @B(2) [1] [];
+ Object b3 = new @H String @B(3) [1] [2];
- Object c1 = new @A String [] @B(0) [] { };
- Object c2 = new @A String [1] @B(0) [];
- Object c3 = new @A String [1] @B(0) [2];
+ Object c1 = new @I String [] @B(4) [] { };
+ Object c2 = new @J String [1] @B(5) [];
+ Object c3 = new @K String [1] @B(6) [2];
- Object d1 = new @A String @B(0) [] @B(0) [] { };
- Object d2 = new @A String @B(0) [1] @B(0) [];
- Object d3 = new @A String @B(0) [1] @B(0) [2];
+ Object d1 = new @L String @B(7) [] @B(8) [] { };
+ Object d2 = new @M String @B(9) [1] @B(10) [];
+ Object d3 = new @N String @B(11) [1] @B(12) [2];
- Object rand = new @A String @B(value = 0) [1] @B(value = 0) [2];
+ Object rand = new @O String @B(value = 13) [1] @B(value = 14) [2];
}
}
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface A { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface C { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface D { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface E { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface F { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface G { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface H { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface I { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface J { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface K { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface L { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface M { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface N { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface O { }
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
-@interface A { }
-@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
-@interface B { int value(); }
+ @interface B { int value(); }
--- a/langtools/test/tools/javac/annotations/typeAnnotations/newlocations/NestedTypes.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/newlocations/NestedTypes.java Wed Jun 18 13:14:15 2014 -0700
@@ -128,6 +128,7 @@
MyList<Outer . @Cv("Data") Static> f9;
// Illegal:
// MyList<@A Outer . @Cv("Data") Static> f9;
+
}
class Test2 {
--- a/langtools/test/tools/javac/annotations/typeAnnotations/newlocations/Receivers.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/newlocations/Receivers.java Wed Jun 18 13:14:15 2014 -0700
@@ -54,14 +54,6 @@
<T extends Runnable> void accept(@B("m") WithValue this, T r) throws Exception { }
}
-class WithFinal {
- void plain(final @B("m") WithFinal this) { }
- <T> void generic(final @B("m") WithFinal this) { }
- void withException(final @B("m") WithFinal this) throws Exception { }
- String nonVoid(final @B("m") WithFinal this) { return null; }
- <T extends Runnable> void accept(final @B("m") WithFinal this, T r) throws Exception { }
-}
-
class WithBody {
Object f;
--- a/langtools/test/tools/javac/annotations/typeAnnotations/newlocations/RepeatingTypeAnnotations.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/newlocations/RepeatingTypeAnnotations.out Wed Jun 18 13:14:15 2014 -0700
@@ -17,12 +17,12 @@
RepeatingTypeAnnotations.java:89:33: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable
RepeatingTypeAnnotations.java:93:19: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable
RepeatingTypeAnnotations.java:93:35: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable
+RepeatingTypeAnnotations.java:97:19: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable
RepeatingTypeAnnotations.java:97:34: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable
-RepeatingTypeAnnotations.java:97:19: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable
+RepeatingTypeAnnotations.java:101:37: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable
RepeatingTypeAnnotations.java:101:26: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable
-RepeatingTypeAnnotations.java:101:37: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable
+RepeatingTypeAnnotations.java:101:56: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable
RepeatingTypeAnnotations.java:101:72: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable
-RepeatingTypeAnnotations.java:101:56: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable
- compiler.note.unchecked.filename: RepeatingTypeAnnotations.java
- compiler.note.unchecked.recompile
25 errors
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/ClassExtends.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/ClassExtends.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,72 +25,110 @@
/*
* @test
+ * @bug 8042451
* @summary Test population of reference info for class extends clauses
* @compile -g Driver.java ReferenceInfoUtil.java ClassExtends.java
* @run main Driver ClassExtends
*/
public class ClassExtends {
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1),
- @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
- })
+ @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1)
+ @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
public String regularClass() {
- return "class Test extends @TA Object implements Cloneable, @TB Runnable {"
+ return "class %TEST_CLASS_NAME% extends @TA Object implements Cloneable, @TB Runnable {"
+ " public void run() { } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1,
- genericLocation = { 3, 1 })
- })
- public String regularClassExtendsParametrized() {
- return "class Test extends HashMap<@TA String, String> implements Cloneable, Map<String, @TB String>{ } ";
+ @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = -1)
+ @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1)
+ public String regularClassRepeatableAnnotation() {
+ return "class %TEST_CLASS_NAME% extends @RTA @RTA Object implements Cloneable, @RTB @RTB Runnable {"
+ + " public void run() { } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1),
- @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
- })
+ @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1,
+ genericLocation = { 3, 1 })
+ public String regularClassExtendsParametrized() {
+ return "class %TEST_CLASS_NAME% extends HashMap<@TA String, String> implements Cloneable, Map<String, @TB String>{ } ";
+ }
+
+ @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = -1,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1,
+ genericLocation = { 3, 1 })
+ public String regularClassExtendsParametrizedRepeatableAnnotation() {
+ return "class %TEST_CLASS_NAME% extends HashMap<@RTA @RTA String, String> implements Cloneable, Map<String, @RTB @RTB String>{ } ";
+ }
+
+ @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1)
+ @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
public String abstractClass() {
- return "abstract class Test extends @TA Date implements Cloneable, @TB Runnable {"
+ return "abstract class %TEST_CLASS_NAME% extends @TA Date implements Cloneable, @TB Runnable {"
+ " public void run() { } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1,
- genericLocation = { 3, 1 })
- })
+ @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = -1)
+ @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1)
+ public String abstractClassRepeatableAnnotation() {
+ return "abstract class %TEST_CLASS_NAME% extends @RTA @RTA Date implements Cloneable, @RTB @RTB Runnable {"
+ + " public void run() { } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = -1,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1,
+ genericLocation = { 3, 1 })
public String abstractClassExtendsParametrized() {
- return "abstract class Test extends HashMap<@TA String, String> implements Cloneable, Map<String, @TB String>{ } ";
+ return "abstract class %TEST_CLASS_NAME% extends HashMap<@RTA @RTA String, String> implements Cloneable, Map<String, @RTB @RTB String>{ } ";
}
@TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
public String regularInterface() {
- return "interface Test extends Cloneable, @TB Runnable { }";
+ return "interface %TEST_CLASS_NAME% extends Cloneable, @TB Runnable { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = 1)
+ public String regularInterfaceRepetableAnnotation() {
+ return "interface %TEST_CLASS_NAME% extends Cloneable, @RTA @RTA Runnable { }";
}
@TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1,
genericLocation = { 3, 1 })
public String regularInterfaceExtendsParametrized() {
- return "interface Test extends Cloneable, Map<String, @TB String>{ } ";
+ return "interface %TEST_CLASS_NAME% extends Cloneable, Map<String, @TB String>{ } ";
+ }
+
+ @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1,
+ genericLocation = { 3, 1 })
+ public String regularInterfaceExtendsParametrizedRepeatableAnnotation() {
+ return "interface %TEST_CLASS_NAME% extends Cloneable, Map<String, @RTB @RTB String>{ } ";
}
@TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
public String regularEnum() {
- return "enum Test implements Cloneable, @TB Runnable { TEST; public void run() { } }";
+ return "enum %TEST_CLASS_NAME% implements Cloneable, @TB Runnable { TEST; public void run() { } }";
+ }
+
+ @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1)
+ public String regularEnumRepeatableAnnotation() {
+ return "enum %TEST_CLASS_NAME% implements Cloneable, @RTB @RTB Runnable { TEST; public void run() { } }";
}
@TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1,
genericLocation = { 3, 0 })
public String regularEnumExtendsParametrized() {
return
- "enum Test implements Cloneable, Comparator<@TB String> { TEST; "
+ "enum %TEST_CLASS_NAME% implements Cloneable, Comparator<@TB String> { TEST; "
+ "public int compare(String a, String b) { return 0; }}";
}
+ @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1,
+ genericLocation = { 3, 0 })
+ public String regularEnumExtendsParametrizedRepeatableAnnotation() {
+ return
+ "enum %TEST_CLASS_NAME% implements Cloneable, Comparator<@RTB @RTB String> { TEST; "
+ + "public int compare(String a, String b) { return 0; }}";
+ }
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/ClassTypeParam.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/ClassTypeParam.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,134 +25,232 @@
/*
* @test
+ * @bug 8042451
* @summary Test population of reference info for class type parameters
* @compile -g Driver.java ReferenceInfoUtil.java ClassTypeParam.java
* @run main Driver ClassTypeParam
*/
public class ClassTypeParam {
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1),
- @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
- @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
- })
- public String regularClass() {
- return "class Test<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> { }";
+ @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ public String regularClass1() {
+ return "class %TEST_CLASS_NAME%<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1),
- @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
- })
+ @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
public String regularClass2() {
- return "class Test<@TA K extends @TB Date, @TC V extends @TE Cloneable> { }";
+ return "class %TEST_CLASS_NAME%<@TA K extends @TB Date, @TC V extends @TE Cloneable> { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
- @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
- @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
- @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
- })
+ @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
public String regularClassParameterized() {
- return "class Test<K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> { }";
+ return "class %TEST_CLASS_NAME%<K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
- @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
- @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
- @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
- @TADescription(annotation = "TF", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
- @TADescription(annotation = "TG", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
- })
+ @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ @TADescription(annotation = "TF", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "TG", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
public String regularClassParameterized2() {
- return "class Test<K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> { }";
+ return "class %TEST_CLASS_NAME%<K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1),
- @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
- @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
- })
+ @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
public String abstractClass() {
- return "abstract class Test<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> { }";
+ return "abstract class %TEST_CLASS_NAME%<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
- @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
- @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
- @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
- @TADescription(annotation = "TF", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
- })
+ @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ @TADescription(annotation = "TF", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
public String abstractClassParameterized() {
- return "abstract class Test<K extends @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> { }";
+ return "abstract class %TEST_CLASS_NAME%<K extends @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1),
- @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
- @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
- })
+ @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
public String regularInterface() {
- return "interface Test<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> { }";
+ return "interface %TEST_CLASS_NAME%<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
- @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
- @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
- @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
- })
+ @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
public String regularInterfaceParameterized() {
- return "interface Test<K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> { }";
+ return "interface %TEST_CLASS_NAME%<K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
- @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
- @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
- @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
- @TADescription(annotation = "TF", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
- @TADescription(annotation = "TG", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
- })
+ @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ @TADescription(annotation = "TF", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "TG", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
public String regularInterfaceParameterized2() {
- return "interface Test<K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> { }";
+ return "interface %TEST_CLASS_NAME%<K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> { }";
}
@TADescription(annotation = "TA", type = METHOD_RETURN)
public String useInReturn1() {
- return "class Test<T> { @TA T m() { throw new RuntimeException(); } }";
+ return "class %TEST_CLASS_NAME%<T> { @TA T m() { throw new RuntimeException(); } }";
}
@TADescription(annotation = "TA", type = METHOD_RETURN, genericLocation = {3, 0})
public String useInReturn2() {
- return "class Test<T> { Class<@TA T> m() { throw new RuntimeException(); } }";
+ return "class %TEST_CLASS_NAME%<T> { Class<@TA T> m() { throw new RuntimeException(); } }";
}
@TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
paramIndex = 0, genericLocation = {3, 0})
public String useInParam1() {
- return "class Test<T> { void m(Class<@TA T> p) { throw new RuntimeException(); } }";
+ return "class %TEST_CLASS_NAME%<T> { void m(Class<@TA T> p) { throw new RuntimeException(); } }";
}
@TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
paramIndex = 0, genericLocation = {3, 0})
public String useInParam2() {
- return "class Test { void m(Class<@TA Object> p) { throw new RuntimeException(); } }";
+ return "class %TEST_CLASS_NAME% { void m(Class<@TA Object> p) { throw new RuntimeException(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ public String regularClassRepeatableAnnotation1() {
+ return "class %TEST_CLASS_NAME%<@RTA @RTA K extends @RTB @RTB Date, @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ public String regularClassRepeatableAnnotation2() {
+ return "class %TEST_CLASS_NAME%<@RTA @RTA K extends @RTB @RTB Date, @RTC @RTC V extends @RTE @RTE Cloneable> { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ public String regularClassParameterizedRepeatableAnnotation() {
+ return "class %TEST_CLASS_NAME%<K extends @RTA @RTA Map<String, @RTB @RTB String>," +
+ " V extends @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ @TADescription(annotation = "RTFs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "RTGs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ public String regularClassParameterizedRepeatableAnnotation2() {
+ return "class %TEST_CLASS_NAME%<K extends @RTG @RTG Object & @RTA @RTA Map<String, @RTB @RTB String>," +
+ " V extends @RTF @RTF Object & @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ public String abstractClassRepeatableAnnotation() {
+ return "abstract class %TEST_CLASS_NAME%<@RTA @RTA K extends @RTB @RTB Date," +
+ " @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> { }";
}
+
+ @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ @TADescription(annotation = "RTFs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ public String abstractClassParameterizedRepeatableAnnotation() {
+ return "abstract class %TEST_CLASS_NAME%<K extends @RTA @RTA Map<String, @RTB @RTB String>," +
+ " V extends @RTF @RTF Object & @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ public String regularInterfaceRepeatableAnnotation() {
+ return "interface %TEST_CLASS_NAME%<@RTA @RTA K extends @RTB @RTB Date," +
+ " @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ public String regularInterfaceParameterizedRepeatableAnnotation() {
+ return "interface %TEST_CLASS_NAME%<K extends @RTA @RTA Map<String, @RTB @RTB String>," +
+ " V extends @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ @TADescription(annotation = "RTFs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "RTGs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ public String regularInterfaceParameterizedRepeatableAnnotation2() {
+ return "interface %TEST_CLASS_NAME%<K extends @RTG @RTG Object & @RTA @RTA Map<String, @RTB @RTB String>," +
+ " V extends @RTF @RTF Object & @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+ public String useInReturnRepeatableAnnotation1() {
+ return "class %TEST_CLASS_NAME%<T> { @RTA @RTA T m() { throw new RuntimeException(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN, genericLocation = {3, 0})
+ public String useInReturnRepeatableAnnotation2() {
+ return "class %TEST_CLASS_NAME%<T> { Class<@RTA @RTA T> m() { throw new RuntimeException(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 0, genericLocation = {3, 0})
+ public String useInParamRepeatableAnnotation1() {
+ return "class %TEST_CLASS_NAME%<T> { void m(Class<@RTA @RTA T> p) { throw new RuntimeException(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 0, genericLocation = {3, 0})
+ public String useInParamRepeatableAnnotation2() {
+ return "class %TEST_CLASS_NAME% { void m(Class<@RTA @RTA Object> p) { throw new RuntimeException(); } }";
+ }
+
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/ConstructorInvocationTypeArgument.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2012, 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
+ * @bug 8042451
+ * @summary Test population of reference info for constructor invocation type argument
+ * @compile -g Driver.java ReferenceInfoUtil.java ConstructorInvocationTypeArgument.java
+ * @run main Driver ConstructorInvocationTypeArgument
+ */
+
+import static com.sun.tools.classfile.TypeAnnotation.TargetType.CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT;
+
+public class ConstructorInvocationTypeArgument {
+
+ @TADescription(annotation = "TA", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 0, offset = 4)
+ @TADescription(annotation = "TB", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 0, offset = 0)
+ public String generic1() {
+ return "class %TEST_CLASS_NAME% { <T> %TEST_CLASS_NAME%(int i) { new <@TA T>%TEST_CLASS_NAME%(); }" +
+ " <T> %TEST_CLASS_NAME%() { <@TB String>this(0); } }";
+ }
+
+ @TADescription(annotation = "TA", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 0, offset = 0)
+ public String generic2() {
+ return "class Super { <T> Super(int i) { } } " +
+ "class %TEST_CLASS_NAME% extends Super { <T> %TEST_CLASS_NAME%() { <@TA String>super(0); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 0, offset = 4)
+ @TADescription(annotation = "RTBs", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 0, offset = 0)
+ public String genericRepeatableAnnotation1() {
+ return "class %TEST_CLASS_NAME% { <T> %TEST_CLASS_NAME%(int i) { new <@RTA @RTA T>%TEST_CLASS_NAME%(); }" +
+ " <T> %TEST_CLASS_NAME%() { <@RTB @RTB String>this(0); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 0, offset = 0)
+ public String genericRepeatableAnnotation2() {
+ return "class Super { <T> Super(int i) { } } " +
+ "class %TEST_CLASS_NAME% extends Super { <T> %TEST_CLASS_NAME%() { <@RTA @RTA String>super(0); } }";
+ }
+}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Constructors.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Constructors.java Wed Jun 18 13:14:15 2014 -0700
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8026791
+ * @bug 8026791 8042451
* @summary Test population of reference info for constructor results
* @compile -g Driver.java ReferenceInfoUtil.java Constructors.java
* @run main Driver Constructors
@@ -33,52 +33,44 @@
public class Constructors {
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN),
- @TADescription(annotation = "TB", type = METHOD_RETURN),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
- })
+ @TADescription(annotation = "TA", type = METHOD_RETURN)
+ @TADescription(annotation = "TB", type = METHOD_RETURN)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
public String regularClass() {
- return "class Test { @TA Test() {}" +
- " @TB Test(@TC int b) {} }";
+ return "class %TEST_CLASS_NAME% { @TA %TEST_CLASS_NAME%() {}" +
+ " @TB %TEST_CLASS_NAME%(@TC int b) {} }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN, genericLocation = {1, 0}),
- @TADescription(annotation = "TB", type = METHOD_RETURN, genericLocation = {1, 0}),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
- })
- @TestClass("Test$Inner")
+ @TADescription(annotation = "TA", type = METHOD_RETURN, genericLocation = {1, 0})
+ @TADescription(annotation = "TB", type = METHOD_RETURN, genericLocation = {1, 0})
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TestClass("%TEST_CLASS_NAME%$Inner")
public String innerClass() {
- return "class Test { class Inner {" +
+ return "class %TEST_CLASS_NAME% { class Inner {" +
" @TA Inner() {}" +
" @TB Inner(@TC int b) {}" +
" } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RECEIVER),
- @TADescription(annotation = "TB", type = METHOD_RETURN, genericLocation = {1, 0}),
- @TADescription(annotation = "TC", type = METHOD_RECEIVER),
- @TADescription(annotation = "TD", type = METHOD_RETURN, genericLocation = {1, 0}),
- @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
- })
- @TestClass("Test$Inner")
+ @TADescription(annotation = "TA", type = METHOD_RECEIVER)
+ @TADescription(annotation = "TB", type = METHOD_RETURN, genericLocation = {1, 0})
+ @TADescription(annotation = "TC", type = METHOD_RECEIVER)
+ @TADescription(annotation = "TD", type = METHOD_RETURN, genericLocation = {1, 0})
+ @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TestClass("%TEST_CLASS_NAME%$Inner")
public String innerClass2() {
- return "class Test { class Inner {" +
- " @TB Inner(@TA Test Test.this) {}" +
- " @TD Inner(@TC Test Test.this, @TE int b) {}" +
+ return "class %TEST_CLASS_NAME% { class Inner {" +
+ " @TB Inner(@TA %TEST_CLASS_NAME% %TEST_CLASS_NAME%.this) {}" +
+ " @TD Inner(@TC %TEST_CLASS_NAME% %TEST_CLASS_NAME%.this, @TE int b) {}" +
" } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RECEIVER),
- @TADescription(annotation = "TB", type = METHOD_RECEIVER, genericLocation = {1, 0}),
- @TADescription(annotation = "TC", type = METHOD_RETURN, genericLocation = {1, 0, 1, 0}),
- @TADescription(annotation = "TD", type = METHOD_RECEIVER, genericLocation = {1, 0}),
- @TADescription(annotation = "TE", type = METHOD_RETURN, genericLocation = {1, 0, 1, 0}),
- @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
- })
+ @TADescription(annotation = "TA", type = METHOD_RECEIVER)
+ @TADescription(annotation = "TB", type = METHOD_RECEIVER, genericLocation = {1, 0})
+ @TADescription(annotation = "TC", type = METHOD_RETURN, genericLocation = {1, 0, 1, 0})
+ @TADescription(annotation = "TD", type = METHOD_RECEIVER, genericLocation = {1, 0})
+ @TADescription(annotation = "TE", type = METHOD_RETURN, genericLocation = {1, 0, 1, 0})
+ @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
@TestClass("Outer$Middle$Inner")
public String innerClass3() {
return "class Outer { class Middle { class Inner {" +
@@ -87,24 +79,49 @@
" } } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
- typeIndex = 0, offset = 4),
- @TADescription(annotation = "TB", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
- typeIndex = 0, offset = 0)
- })
- public String generic1() {
- return "class Test { <T> Test(int i) { new <@TA T>Test(); }" +
- " <T> Test() { <@TB String>this(0); } }";
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN)
+ @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ public String regularClassRepeatableAnnotation() {
+ return "class %TEST_CLASS_NAME% { @RTA @RTA %TEST_CLASS_NAME%() {}" +
+ " @RTB @RTB %TEST_CLASS_NAME%(@RTC @RTC int b) {} }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN, genericLocation = {1, 0})
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN, genericLocation = {1, 0})
+ @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TestClass("%TEST_CLASS_NAME%$Inner")
+ public String innerClassRepeatableAnnotation() {
+ return "class %TEST_CLASS_NAME% { class Inner {" +
+ " @RTA @RTA Inner() {}" +
+ " @RTB @RTB Inner(@RTC @RTC int b) {}" +
+ " } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
- typeIndex = 0, offset = 0)
- })
- public String generic2() {
- return "class Super { <T> Super(int i) { } } " +
- "class Test extends Super { <T> Test() { <@TA String>super(0); } }";
+ @TADescription(annotation = "RTAs", type = METHOD_RECEIVER)
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN, genericLocation = {1, 0})
+ @TADescription(annotation = "RTCs", type = METHOD_RECEIVER)
+ @TADescription(annotation = "RTDs", type = METHOD_RETURN, genericLocation = {1, 0})
+ @TADescription(annotation = "RTEs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TestClass("%TEST_CLASS_NAME%$Inner")
+ public String innerClassRepeatableAnnotation2() {
+ return "class %TEST_CLASS_NAME% { class Inner {" +
+ " @RTB @RTB Inner(@RTA @RTA %TEST_CLASS_NAME% %TEST_CLASS_NAME%.this) {}" +
+ " @RTD @RTD Inner(@RTC @RTC %TEST_CLASS_NAME% %TEST_CLASS_NAME%.this, @RTE @RTE int b) {}" +
+ " } }";
}
+ @TADescription(annotation = "RTAs", type = METHOD_RECEIVER)
+ @TADescription(annotation = "RTBs", type = METHOD_RECEIVER, genericLocation = {1, 0})
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN, genericLocation = {1, 0, 1, 0})
+ @TADescription(annotation = "RTDs", type = METHOD_RECEIVER, genericLocation = {1, 0})
+ @TADescription(annotation = "RTEs", type = METHOD_RETURN, genericLocation = {1, 0, 1, 0})
+ @TADescription(annotation = "RTFs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TestClass("Outer$Middle$Inner")
+ public String innerClassRepatableAnnotation3() {
+ return "class Outer { class Middle { class Inner {" +
+ " @RTC @RTC Inner(@RTA @RTA Outer. @RTB @RTB Middle Middle.this) {}" +
+ " @RTE @RTE Inner(@RTD @RTD Middle Outer.Middle.this, @RTF @RTF int b) {}" +
+ " } } }";
+ }
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Driver.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Driver.java Wed Jun 18 13:14:15 2014 -0700
@@ -40,51 +40,75 @@
import com.sun.tools.classfile.TypeAnnotation;
import com.sun.tools.classfile.TypeAnnotation.TargetType;
+import static java.lang.String.format;
+
public class Driver {
private static final PrintStream out = System.err;
+ private final Object testObject;
+
+ public Driver(Class<?> clazz) throws IllegalAccessException, InstantiationException {
+ testObject = clazz.newInstance();
+ }
+
public static void main(String[] args) throws Exception {
if (args.length == 0 || args.length > 1)
throw new IllegalArgumentException("Usage: java Driver <test-name>");
String name = args[0];
- Class<?> clazz = Class.forName(name);
- new Driver().runDriver(clazz.newInstance());
+ new Driver(Class.forName(name)).runDriver();
}
- String[][] extraParamsCombinations = new String[][] {
+ private final String[][] extraParamsCombinations = new String[][] {
new String[] { },
new String[] { "-g" },
};
- protected void runDriver(Object object) throws Exception {
+ private final String[] retentionPolicies = {RetentionPolicy.CLASS.toString(), RetentionPolicy.RUNTIME.toString()};
+
+ protected void runDriver() {
int passed = 0, failed = 0;
- Class<?> clazz = object.getClass();
+ Class<?> clazz = testObject.getClass();
out.println("Tests for " + clazz.getName());
// Find methods
for (Method method : clazz.getMethods()) {
- Map<String, TypeAnnotation.Position> expected = expectedOf(method);
- if (expected == null)
- continue;
- if (method.getReturnType() != String.class)
- throw new IllegalArgumentException("Test method needs to return a string: " + method);
- String testClass = testClassOf(method);
+ try {
+ Map<String, TypeAnnotation.Position> expected = expectedOf(method);
+ if (expected == null)
+ continue;
+ if (method.getReturnType() != String.class)
+ throw new IllegalArgumentException("Test method needs to return a string: " + method);
- for (String[] extraParams : extraParamsCombinations) {
- try {
- String compact = (String)method.invoke(object);
- String fullFile = wrap(compact);
- ClassFile cf = compileAndReturn(fullFile, testClass, extraParams);
- List<TypeAnnotation> actual = ReferenceInfoUtil.extendedAnnotationsOf(cf);
- ReferenceInfoUtil.compare(expected, actual, cf);
- out.println("PASSED: " + method.getName());
- ++passed;
- } catch (Throwable e) {
- out.println("FAILED: " + method.getName());
- out.println(" " + e.toString());
- ++failed;
+ String compact = (String) method.invoke(testObject);
+ for (String retentionPolicy : retentionPolicies) {
+ String testClassName = getTestClassName(method, retentionPolicy);
+ String testClass = testClassOf(method, testClassName);
+ String fullFile = wrap(compact, new HashMap<String, String>() {{
+ put("%RETENTION_POLICY%", retentionPolicy);
+ put("%TEST_CLASS_NAME%", testClassName);
+ }});
+ for (String[] extraParams : extraParamsCombinations) {
+ try {
+ ClassFile cf = compileAndReturn(fullFile, testClass, extraParams);
+ List<TypeAnnotation> actual = ReferenceInfoUtil.extendedAnnotationsOf(cf);
+ ReferenceInfoUtil.compare(expected, actual, cf);
+ out.format("PASSED: %s %s%n", testClassName, Arrays.toString(extraParams));
+ ++passed;
+ } catch (Throwable e) {
+ out.format("FAILED: %s %s%n", testClassName, Arrays.toString(extraParams));
+ out.println(fullFile);
+ out.println(" " + e.toString());
+ e.printStackTrace(out);
+ ++failed;
+ }
+ }
}
+ } catch (IllegalAccessException | InvocationTargetException e) {
+ out.println("FAILED: " + method.getName());
+ out.println(" " + e.toString());
+ e.printStackTrace(out);
+ ++failed;
}
}
@@ -106,7 +130,7 @@
return null;
Map<String, TypeAnnotation.Position> result =
- new HashMap<String, TypeAnnotation.Position>();
+ new HashMap<>();
if (ta != null)
result.putAll(expectedOf(ta));
@@ -149,33 +173,42 @@
}
private List<Integer> wrapIntArray(int[] ints) {
- List<Integer> list = new ArrayList<Integer>(ints.length);
+ List<Integer> list = new ArrayList<>(ints.length);
for (int i : ints)
list.add(i);
return list;
}
- private String testClassOf(Method m) {
+ private String getTestClassName(Method m, String retentionPolicy) {
+ return format("%s_%s_%s", testObject.getClass().getSimpleName(),
+ m.getName(), retentionPolicy);
+ }
+
+ private String testClassOf(Method m, String testClassName) {
TestClass tc = m.getAnnotation(TestClass.class);
if (tc != null) {
- return tc.value();
+ return tc.value().replace("%TEST_CLASS_NAME%", testClassName);
} else {
- return "Test";
+ return testClassName;
}
}
private ClassFile compileAndReturn(String fullFile, String testClass, String... extraParams) throws Exception {
- File source = writeTestFile(fullFile);
- File clazzFile = compileTestFile(source, testClass);
+ File source = writeTestFile(fullFile, testClass);
+ File clazzFile = compileTestFile(source, testClass, extraParams);
return ClassFile.read(clazzFile);
}
- protected File writeTestFile(String fullFile) throws IOException {
- File f = new File("Test.java");
- PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(f)));
- out.println(fullFile);
- out.close();
- return f;
+ protected File writeTestFile(String fullFile, String testClass) throws IOException {
+ File f = new File(getClassDir(), format("%s.java", testClass));
+ try (PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(f)))) {
+ out.println(fullFile);
+ return f;
+ }
+ }
+
+ private String getClassDir() {
+ return System.getProperty("test.classes", Driver.class.getResource(".").getPath());
}
protected File compileTestFile(File f, String testClass, String... extraParams) {
@@ -185,20 +218,15 @@
int rc = com.sun.tools.javac.Main.compile(options.toArray(new String[options.size()]));
if (rc != 0)
throw new Error("compilation failed. rc=" + rc);
- String path;
- if (f.getParent() != null) {
- path = f.getParent();
- } else {
- path = "";
- }
-
- return new File(path + testClass + ".class");
+ String path = f.getParent() != null ? f.getParent() : "";
+ return new File(path, format("%s.class", testClass));
}
- private String wrap(String compact) {
+ private String wrap(String compact, Map<String, String> replacements) {
StringBuilder sb = new StringBuilder();
// Automatically import java.util
+ sb.append("\nimport java.io.*;");
sb.append("\nimport java.util.*;");
sb.append("\nimport java.lang.annotation.*;");
@@ -208,7 +236,7 @@
&& !compact.contains("interface")
&& !compact.contains("enum");
if (isSnippet)
- sb.append("class Test {\n");
+ sb.append("class %TEST_CLASS_NAME% {\n");
sb.append(compact);
sb.append("\n");
@@ -224,41 +252,102 @@
}
// create A ... F annotation declarations
- sb.append("\n@interface A {}");
- sb.append("\n@interface B {}");
- sb.append("\n@interface C {}");
- sb.append("\n@interface D {}");
- sb.append("\n@interface E {}");
- sb.append("\n@interface F {}");
+ sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface A {}");
+ sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface B {}");
+ sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface C {}");
+ sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface D {}");
+ sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface E {}");
+ sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface F {}");
// create TA ... TF proper type annotations
sb.append("\n");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TA {}");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TB {}");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TC {}");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TD {}");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TE {}");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TF {}");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TG {}");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TH {}");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TI {}");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TJ {}");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TK {}");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TL {}");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TM {}");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ " @Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TA {}");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TB {}");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TC {}");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TD {}");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TE {}");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TF {}");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TG {}");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TH {}");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TI {}");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TJ {}");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TK {}");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TL {}");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TM {}");
- // create RTA, RTAs, RTB, RTBs for repeating type annotations
+ // create RT?, RT?s for repeating type annotations
sb.append("\n");
- sb.append("\n@Repeatable(RTAs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTA {}");
- sb.append("\n@Repeatable(RTBs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTB {}");
+ sb.append("\n@Repeatable(RTAs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTA {}");
+ sb.append("\n@Repeatable(RTBs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTB {}");
+ sb.append("\n@Repeatable(RTCs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTC {}");
+ sb.append("\n@Repeatable(RTDs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTD {}");
+ sb.append("\n@Repeatable(RTEs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTE {}");
+ sb.append("\n@Repeatable(RTFs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTF {}");
+ sb.append("\n@Repeatable(RTGs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTG {}");
+ sb.append("\n@Repeatable(RTHs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTH {}");
+ sb.append("\n@Repeatable(RTIs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTI {}");
+ sb.append("\n@Repeatable(RTJs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTJ {}");
+ sb.append("\n@Repeatable(RTKs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTK {}");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTAs { RTA[] value(); }");
- sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTBs { RTB[] value(); }");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTAs { RTA[] value(); }");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTBs { RTB[] value(); }");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTCs { RTC[] value(); }");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTDs { RTD[] value(); }");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTEs { RTE[] value(); }");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTFs { RTF[] value(); }");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTGs { RTG[] value(); }");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTHs { RTH[] value(); }");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTIs { RTI[] value(); }");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTJs { RTJ[] value(); }");
+ sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+ "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTKs { RTK[] value(); }");
- sb.append("\n@Target(value={ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER,ElementType.CONSTRUCTOR,ElementType.LOCAL_VARIABLE})");
- sb.append("\n@interface Decl {}");
+ sb.append("\n@Target(value={ElementType.TYPE,ElementType.FIELD,ElementType.METHOD," +
+ "ElementType.PARAMETER,ElementType.CONSTRUCTOR,ElementType.LOCAL_VARIABLE})");
+ sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface Decl {}");
- return sb.toString();
+ return replaceAll(sb.toString(), replacements);
+ }
+
+ private String replaceAll(String src, Map<String, String> replacements) {
+ for (Map.Entry<String, String> entry : replacements.entrySet()) {
+ src = src.replace(entry.getKey(), entry.getValue());
+ }
+ return src;
}
public static final int NOT_SET = -888;
@@ -267,6 +356,7 @@
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
+@Repeatable(TADescriptions.class)
@interface TADescription {
String annotation();
@@ -296,5 +386,5 @@
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface TestClass {
- String value() default "Test";
+ String value();
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/ExceptionParameters.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/ExceptionParameters.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,7 +25,7 @@
/*
* @test
- * @bug 8028576
+ * @bug 8028576 8042451
* @summary Test population of reference info for exception parameters
* @author Werner Dietl
* @compile -g Driver.java ReferenceInfoUtil.java ExceptionParameters.java
@@ -43,11 +43,9 @@
return "void finalException() { try { new Object(); } catch(final @TA Exception e) { } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0),
- @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1),
- @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
- })
+ @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+ @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+ @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
public String multipleExceptions1() {
return "void multipleExceptions() { " +
"try { new Object(); } catch(@TA Exception e) { }" +
@@ -56,11 +54,9 @@
" }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0),
- @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1),
- @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
- })
+ @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+ @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+ @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
public String multipleExceptions2() {
return "void multipleExceptions() { " +
" try { new Object(); " +
@@ -71,11 +67,9 @@
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0),
- @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1),
- @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
- })
+ @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+ @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+ @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
public String multipleExceptions3() {
return "void multipleExceptions() { " +
" try { new Object(); " +
@@ -87,4 +81,48 @@
" }" +
"}";
}
+
+ @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+ public String exceptionRepeatableAnnoation() {
+ return "void exception() { try { new Object(); } catch(@RTA @RTA Exception e) { } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+ @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+ @TADescription(annotation = "RTCs", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+ public String multipleExceptionsRepeatableAnnotation1() {
+ return "void multipleExceptions() { " +
+ "try { new Object(); } catch(@RTA @RTA Exception e) { }" +
+ "try { new Object(); } catch(@RTB @RTB Exception e) { }" +
+ "try { new Object(); } catch(@RTC @RTC Exception e) { }" +
+ " }";
+ }
+
+ @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+ @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+ @TADescription(annotation = "RTCs", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+ public String multipleExceptionsRepeatableAnnotation2() {
+ return "void multipleExceptions() { " +
+ " try { new Object(); " +
+ " try { new Object(); " +
+ " try { new Object(); } catch(@RTA @RTA Exception e) { }" +
+ " } catch(@RTB @RTB Exception e) { }" +
+ " } catch(@RTC @RTC Exception e) { }" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+ @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+ @TADescription(annotation = "RTCs", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+ public String multipleExceptionsRepeatableAnnotation3() {
+ return "void multipleExceptions() { " +
+ " try { new Object(); " +
+ " } catch(@RTA @RTA Exception e1) { "+
+ " try { new Object(); " +
+ " } catch(@RTB @RTB Exception e2) {" +
+ " try { new Object(); } catch(@RTC @RTC Exception e3) { }" +
+ " }" +
+ " }" +
+ "}";
+ }
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Fields.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Fields.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,12 +25,12 @@
/*
* @test
+ * @bug 8042451
* @summary Test population of reference info for field
* @compile -g Driver.java ReferenceInfoUtil.java Fields.java
* @run main Driver Fields
*/
public class Fields {
-
// field types
@TADescription(annotation = "TA", type = FIELD)
public String fieldAsPrimitive() {
@@ -42,37 +42,31 @@
return "@TA Object test;";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = FIELD),
- @TADescription(annotation = "TB", type = FIELD,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "TC", type = FIELD,
- genericLocation = { 3, 1 }),
- @TADescription(annotation = "TD", type = FIELD,
- genericLocation = { 3, 1, 3, 0 })
- })
+ @TADescription(annotation = "TA", type = FIELD)
+ @TADescription(annotation = "TB", type = FIELD,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "TC", type = FIELD,
+ genericLocation = { 3, 1 })
+ @TADescription(annotation = "TD", type = FIELD,
+ genericLocation = { 3, 1, 3, 0 })
public String fieldAsParametrized() {
return "@TA Map<@TB String, @TC List<@TD String>> test;";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = FIELD),
- @TADescription(annotation = "TB", type = FIELD,
- genericLocation = { 0, 0 }),
- @TADescription(annotation = "TC", type = FIELD,
- genericLocation = { 0, 0, 0, 0 })
- })
+ @TADescription(annotation = "TA", type = FIELD)
+ @TADescription(annotation = "TB", type = FIELD,
+ genericLocation = { 0, 0 })
+ @TADescription(annotation = "TC", type = FIELD,
+ genericLocation = { 0, 0, 0, 0 })
public String fieldAsArray() {
return "@TC String @TA [] @TB [] test;";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = FIELD),
- @TADescription(annotation = "TB", type = FIELD,
- genericLocation = { 0, 0 }),
- @TADescription(annotation = "TC", type = FIELD,
- genericLocation = { 0, 0, 0, 0 })
- })
+ @TADescription(annotation = "TA", type = FIELD)
+ @TADescription(annotation = "TB", type = FIELD,
+ genericLocation = { 0, 0 })
+ @TADescription(annotation = "TC", type = FIELD,
+ genericLocation = { 0, 0, 0, 0 })
public String fieldAsArrayOld() {
return "@TC String test @TA [] @TB [];";
}
@@ -89,40 +83,108 @@
// Smoke tests
@TADescription(annotation = "TA", type = FIELD)
- public String interfacefieldAsObject() {
- return "interface Test { @TA String test = null; }";
+ public String interfaceFieldAsObject() {
+ return "interface %TEST_CLASS_NAME% { @TA String test = null; }";
+ }
+
+ @TADescription(annotation = "TA", type = FIELD)
+ public String abstractFieldAsObject() {
+ return "abstract class %TEST_CLASS_NAME% { @TA String test; }";
}
@TADescription(annotation = "TA", type = FIELD)
- public String abstractfieldAsObject() {
- return "abstract class Test { @TA String test; }";
- }
-
- @TADescriptions({
- @TADescription(annotation = "TA", type = FIELD),
- @TADescription(annotation = "TB", type = FIELD,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "TC", type = FIELD,
- genericLocation = { 3, 1 }),
- @TADescription(annotation = "TD", type = FIELD,
- genericLocation = { 3, 1, 3, 0 })
- })
- public String interfacefieldAsParametrized() {
- return "interface Test { @TA Map<@TB String, @TC List<@TD String>> test = null; }";
+ @TADescription(annotation = "TB", type = FIELD,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "TC", type = FIELD,
+ genericLocation = { 3, 1 })
+ @TADescription(annotation = "TD", type = FIELD,
+ genericLocation = { 3, 1, 3, 0 })
+ public String interfaceFieldAsParametrized() {
+ return "interface %TEST_CLASS_NAME% { @TA Map<@TB String, @TC List<@TD String>> test = null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = FIELD),
- @TADescription(annotation = "TB", type = FIELD,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "TC", type = FIELD,
- genericLocation = { 3, 1 }),
- @TADescription(annotation = "TD", type = FIELD,
- genericLocation = { 3, 1, 3, 0 })
- })
+ @TADescription(annotation = "TA", type = FIELD)
+ @TADescription(annotation = "TB", type = FIELD,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "TC", type = FIELD,
+ genericLocation = { 3, 1 })
+ @TADescription(annotation = "TD", type = FIELD,
+ genericLocation = { 3, 1, 3, 0 })
public String staticFieldAsParametrized() {
return "static @TA Map<@TB String, @TC List<@TD String>> test;";
}
+ @TADescription(annotation = "RTAs", type = FIELD)
+ public String fieldAsPrimitiveRepeatableAnnotation() {
+ return "@RTA @RTA int test;";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD)
+ public String fieldAsObjectRepeatableAnnotation() {
+ return "@RTA @RTA Object test;";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD)
+ @TADescription(annotation = "RTBs", type = FIELD,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "RTCs", type = FIELD,
+ genericLocation = { 3, 1 })
+ @TADescription(annotation = "RTDs", type = FIELD,
+ genericLocation = { 3, 1, 3, 0 })
+ public String fieldAsParametrizedRepeatableAnnotation() {
+ return "@RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> test;";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD)
+ @TADescription(annotation = "RTBs", type = FIELD,
+ genericLocation = { 0, 0 })
+ @TADescription(annotation = "RTCs", type = FIELD,
+ genericLocation = { 0, 0, 0, 0 })
+ public String fieldAsArrayRepeatableAnnotation() {
+ return "@RTC @RTC String @RTA @RTA [] @RTB @RTB [] test;";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD)
+ @TADescription(annotation = "RTBs", type = FIELD,
+ genericLocation = { 0, 0 })
+ @TADescription(annotation = "RTCs", type = FIELD,
+ genericLocation = { 0, 0, 0, 0 })
+ public String fieldAsArrayOldRepeatableAnnotation() {
+ return "@RTC @RTC String test @RTA @RTA [] @RTB @RTB [];";
+ }
+
+ // Smoke tests
+ @TADescription(annotation = "RTAs", type = FIELD)
+ public String interfaceFieldAsObjectRepeatableAnnotation() {
+ return "interface %TEST_CLASS_NAME% { @RTA @RTA String test = null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD)
+ public String abstractFieldAsObjectRepeatableAnnotation() {
+ return "abstract class %TEST_CLASS_NAME% { @RTA @RTA String test; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD)
+ @TADescription(annotation = "RTBs", type = FIELD,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "RTCs", type = FIELD,
+ genericLocation = { 3, 1 })
+ @TADescription(annotation = "RTDs", type = FIELD,
+ genericLocation = { 3, 1, 3, 0 })
+ public String interfaceFieldAsParametrizedRepeatableAnnotation() {
+ return "interface %TEST_CLASS_NAME% { @RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> test = null; }";
+ }
+
+
+ @TADescription(annotation = "RTAs", type = FIELD)
+ @TADescription(annotation = "RTBs", type = FIELD,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "RTCs", type = FIELD,
+ genericLocation = { 3, 1 })
+ @TADescription(annotation = "RTDs", type = FIELD,
+ genericLocation = { 3, 1, 3, 0 })
+ public String staticFieldAsParametrizedRepeatableAnnotation() {
+ return "static @RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> test;";
+ }
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/FromSpecification.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/FromSpecification.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,98 +25,89 @@
/*
* @test
+ * @bug 8042451
* @summary Test that the examples from the manual are stored as expected
* @compile -g Driver.java ReferenceInfoUtil.java FromSpecification.java
* @run main Driver FromSpecification
*/
public class FromSpecification {
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0}, paramIndex = 0),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 2, 0}, paramIndex = 0),
- @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 1}, paramIndex = 0),
- @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 2, 0}, paramIndex = 0)
+ @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 1}, paramIndex = 0)
+ @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
genericLocation = {3, 1, 3, 0}, paramIndex = 0)
- })
public String testSpec1() {
return "void test(@TA Map<@TB ? extends @TC String, @TD List<@TE Object>> a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {0, 0}, paramIndex = 0),
- @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {0, 0, 0, 0}, paramIndex = 0),
- @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0}, paramIndex = 0)
+ @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
genericLocation = {0, 0, 0, 0, 0, 0}, paramIndex = 0)
- })
public String testSpec2() {
return "void test(@TI String @TF [] @TG [] @TH [] a) { }";
}
// Note first "1, 0" for top-level class Test.
- @TADescriptions({
- @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {1, 0, 1, 0, 1, 0, 1, 0}, paramIndex = 0),
- @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {1, 0, 1, 0, 1, 0}, paramIndex = 0),
- @TADescription(annotation = "TL", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {1, 0, 1, 0}, paramIndex = 0),
- @TADescription(annotation = "TM", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0, 1, 0, 1, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0, 1, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "TL", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "TM", type = METHOD_FORMAL_PARAMETER,
genericLocation = {1, 0}, paramIndex = 0)
- })
public String testSpec3() {
- return "class Test { class O1 { class O2 { class O3 { class NestedStatic {} } } }" +
+ return "class %TEST_CLASS_NAME% { class O1 { class O2 { class O3 { class NestedStatic {} } } }" +
"void test(@TM O1.@TL O2.@TK O3.@TJ NestedStatic a) { } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0}, paramIndex = 0),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 3, 0}, paramIndex = 0),
- @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 3, 0, 0, 0}, paramIndex = 0),
- @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0),
- @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 3, 0, 0, 0, 0, 0, 0, 0}, paramIndex = 0),
- @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 1}, paramIndex = 0),
- @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 3, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 3, 0, 0, 0, 0, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 1}, paramIndex = 0)
+ @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
genericLocation = {3, 1, 3, 0}, paramIndex = 0)
- })
public String testSpec4() {
return "void test(@TA Map<@TB Comparable<@TF Object @TC [] @TD [] @TE []>, @TG List<@TH String>> a) { }";
}
// Note first "1, 0" for top-level class Test.
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {1, 0, 1, 0, 1, 0, 1, 0}, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {1, 0, 1, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {1, 0, 1, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0),
- @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {1, 0, 1, 0, 1, 0}, paramIndex = 0),
- @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {1, 0, 1, 0}, paramIndex = 0),
- @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {1, 0, 1, 0, 3, 0}, paramIndex = 0),
- @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {1, 0, 1, 0, 3, 1}, paramIndex = 0),
- @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0, 1, 0, 1, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0, 1, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0, 1, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0)
+ @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0, 1, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0, 1, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0, 1, 0, 3, 1}, paramIndex = 0)
+ @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
genericLocation = {1, 0}, paramIndex = 0)
- })
public String testSpec5() {
- return "class Test { class O1 { class O2<A, B> { class O3 { class Nested<X, Y> {} } } }" +
+ return "class %TEST_CLASS_NAME% { class O1 { class O2<A, B> { class O3 { class Nested<X, Y> {} } } }" +
"void test(@TH O1.@TE O2<@TF String, @TG String>.@TD O3.@TA Nested<@TB String, @TC String> a) { } }";
}
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Initializers.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Initializers.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,7 +25,7 @@
/*
* @test
- * @bug 8013852
+ * @bug 8013852 8042451
* @summary Test population of reference info for instance and class initializers
* @author Werner Dietl
* @compile -g Driver.java ReferenceInfoUtil.java Initializers.java
@@ -33,63 +33,98 @@
*/
public class Initializers {
- @TADescriptions({
- @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = NEW,
+ @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = NEW,
genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
- public String instanceInit1() {
- return "class Test { { Object o = new @TA ArrayList<@TB String>(); } }";
+ public String instanceInit1() {
+ return "class %TEST_CLASS_NAME% { { Object o = new @TA ArrayList<@TB String>(); } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = NEW,
- genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TD", type = NEW,
+ @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = NEW,
genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
- public String instanceInit2() {
- return "class Test { Object f = new @TA ArrayList<@TB String>(); " +
+ @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TD", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String instanceInit2() {
+ return "class %TEST_CLASS_NAME% { Object f = new @TA ArrayList<@TB String>(); " +
" { Object o = new @TC ArrayList<@TD String>(); } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = NEW,
+ @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = NEW,
genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
- public String staticInit1() {
- return "class Test { static { Object o = new @TA ArrayList<@TB String>(); } }";
+ public String staticInit1() {
+ return "class %TEST_CLASS_NAME% { static { Object o = new @TA ArrayList<@TB String>(); } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = NEW,
- genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TD", type = NEW,
- genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TE", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TF", type = NEW,
+ @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TD", type = NEW,
genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
- public String staticInit2() {
- return "class Test { Object f = new @TA ArrayList<@TB String>(); " +
+ @TADescription(annotation = "TE", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TF", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String staticInit2() {
+ return "class %TEST_CLASS_NAME% { Object f = new @TA ArrayList<@TB String>(); " +
" static Object g = new @TC ArrayList<@TD String>(); " +
" static { Object o = new @TE ArrayList<@TF String>(); } }";
}
- // TODO: test interaction with several constructors, especially non-initial constuctors.
+ @TADescription(annotation = "TA", type = CAST,
+ typeIndex = 0, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String lazyConstantCast1() {
+ return "class %TEST_CLASS_NAME% { public static final Object o = (@TA Object) null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String instanceInitRepeatableAnnotation1() {
+ return "class %TEST_CLASS_NAME% { { Object o = new @RTA @RTA ArrayList<@RTB @RTB String>(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTCs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTDs", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String instanceInitRepeatableAnnotation2() {
+ return "class %TEST_CLASS_NAME% { Object f = new @RTA @RTA ArrayList<@RTB @RTB String>(); " +
+ " { Object o = new @RTC @RTC ArrayList<@RTD @RTD String>(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String staticInitRepeatableAnnotation1() {
+ return "class %TEST_CLASS_NAME% { static { Object o = new @RTA @RTA ArrayList<@RTB @RTB String>(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTCs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTDs", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTEs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTFs", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String staticInitRepeatableAnnotation2() {
+ return "class %TEST_CLASS_NAME% { Object f = new @RTA @RTA ArrayList<@RTB @RTB String>(); " +
+ " static Object g = new @RTC @RTC ArrayList<@RTD @RTD String>(); " +
+ " static { Object o = new @RTE @RTE ArrayList<@RTF @RTF String>(); } }";
+ }
+
+ // TODO: test interaction with several constructors, especially non-initial constructors.
// I don't think this kind of test is possible here.
- @TADescriptions({
- @TADescription(annotation = "TA", type = CAST,
- typeIndex = 0, offset = ReferenceInfoUtil.IGNORE_VALUE),
- })
- public String lazyConstantCast1() {
- return "class Test { public static final Object o = (@TA Object) null; }";
+ @TADescription(annotation = "RTAs", type = CAST,
+ typeIndex = 0, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String lazyConstantCastRepeatableAnnotation1() {
+ return "class %TEST_CLASS_NAME% { public static final Object o = (@RTA @RTA Object) null; }";
}
-
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Lambda.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Lambda.java Wed Jun 18 13:14:15 2014 -0700
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8008077 8029721
+ * @bug 8008077 8029721 8042451 8043974
* @summary Test population of reference info for lambda expressions
* javac crash for annotated parameter type of lambda in a field
* @compile -g Driver.java ReferenceInfoUtil.java Lambda.java
@@ -35,64 +35,58 @@
public class Lambda {
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_REFERENCE,
- offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = METHOD_REFERENCE,
+ @TADescription(annotation = "TA", type = METHOD_REFERENCE,
offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
+ @TADescription(annotation = "TB", type = METHOD_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE)
public String returnMethodRef1() {
return
"class Lambda {" +
" public String getName() { return \"Lambda!\"; }" +
"}" +
- "class Test {" +
+ "class %TEST_CLASS_NAME% {" +
" java.util.function.Function<Lambda, String> lambda() {" +
" return @TA @TB Lambda::getName;" +
" }" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_REFERENCE,
- offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = METHOD_REFERENCE,
+ @TADescription(annotation = "TA", type = METHOD_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = METHOD_REFERENCE,
offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "TC", type = METHOD_REFERENCE,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "TC", type = METHOD_REFERENCE,
offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "TD", type = METHOD_REFERENCE,
- offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = { 3, 1 }),
- @TADescription(annotation = "TE", type = METHOD_REFERENCE,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "TD", type = METHOD_REFERENCE,
offset = ReferenceInfoUtil.IGNORE_VALUE,
genericLocation = { 3, 1 })
- })
+ @TADescription(annotation = "TE", type = METHOD_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = { 3, 1})
public String returnMethodRef2() {
return
"class Lambda<S, T> {" +
" public String getName() { return \"Lambda!\"; }" +
"}" +
- "class Test {" +
+ "class %TEST_CLASS_NAME% {" +
" java.util.function.Function<Lambda<Integer, Float>, String> lambda() {" +
" return @TA Lambda<@TB @TC Integer, @TD @TE Float>::getName;" +
" }" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "CTA", type = METHOD_REFERENCE,
- offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "CTB", type = METHOD_REFERENCE,
+ @TADescription(annotation = "CTA", type = METHOD_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "CTB", type = METHOD_REFERENCE,
offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "CTC", type = METHOD_REFERENCE,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "CTC", type = METHOD_REFERENCE,
offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = { 3, 1 })
- })
+ genericLocation = { 3, 1 })
public String returnMethodRef3() {
return
"class Lambda<S, T> {" +
@@ -114,7 +108,7 @@
" String name();" +
"}" +
- "class Test {" +
+ "class %TEST_CLASS_NAME% {" +
" java.util.function.Function<Lambda<Integer, Float>, String> lambda() {" +
" return @CTA(\"x\") Lambda<@CTB(age = 5) Integer, @CTC(name = \"y\") Float>::getName;" +
" }" +
@@ -122,64 +116,58 @@
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE,
- offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE,
+ @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE,
offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
+ @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE)
public String returnConstructorRef1() {
return
"class Lambda {" +
" Lambda() { }" +
"}" +
- "class Test {" +
+ "class %TEST_CLASS_NAME% {" +
" Runnable lambda() {" +
" return @TA @TB Lambda::new;" +
" }" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE,
- offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE,
+ @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE,
offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "TC", type = CONSTRUCTOR_REFERENCE,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "TC", type = CONSTRUCTOR_REFERENCE,
offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "TD", type = CONSTRUCTOR_REFERENCE,
- offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = { 3, 1 }),
- @TADescription(annotation = "TE", type = CONSTRUCTOR_REFERENCE,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "TD", type = CONSTRUCTOR_REFERENCE,
offset = ReferenceInfoUtil.IGNORE_VALUE,
genericLocation = { 3, 1 })
- })
+ @TADescription(annotation = "TE", type = CONSTRUCTOR_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = { 3, 1 })
public String returnConstructorRef2() {
return
"class Lambda<S, T> {" +
" Lambda() { }" +
"}" +
- "class Test {" +
+ "class %TEST_CLASS_NAME% {" +
" Runnable lambda() {" +
" return @TA Lambda<@TB @TC Integer, @TD @TE Float>::new;" +
" }" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "CTA", type = CONSTRUCTOR_REFERENCE,
- offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "CTB", type = CONSTRUCTOR_REFERENCE,
+ @TADescription(annotation = "CTA", type = CONSTRUCTOR_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "CTB", type = CONSTRUCTOR_REFERENCE,
offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "CTC", type = CONSTRUCTOR_REFERENCE,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "CTC", type = CONSTRUCTOR_REFERENCE,
offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = { 3, 1 })
- })
+ genericLocation = { 3, 1 })
public String returnConstructorRef3() {
return
"class Lambda<S, T> {" +
@@ -201,7 +189,7 @@
" String name();" +
"}" +
- "class Test {" +
+ "class %TEST_CLASS_NAME% {" +
" Runnable lambda() {" +
" return @CTA(\"x\") Lambda<@CTB(age = 5) Integer, @CTC(name = \"y\") Float>::new;" +
" }" +
@@ -209,14 +197,12 @@
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_REFERENCE_TYPE_ARGUMENT,
+ @TADescription(annotation = "TA", type = METHOD_REFERENCE_TYPE_ARGUMENT,
offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_REFERENCE_TYPE_ARGUMENT,
+ typeIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_REFERENCE_TYPE_ARGUMENT,
offset = ReferenceInfoUtil.IGNORE_VALUE,
typeIndex = 1)
- })
public String returnMethodRefTA1() {
return
"interface Lambda {" +
@@ -227,21 +213,19 @@
" public <S, T> void generic(S p1, T p2) {}" +
"}" +
- "class Test {" +
+ "class %TEST_CLASS_NAME% {" +
" Lambda lambda(LambdaImpl r) {" +
" return r::<@TA Object, @TB Object>generic;" +
" }" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
+ @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0),
- @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
+ typeIndex = 0)
+ @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
offset = ReferenceInfoUtil.IGNORE_VALUE,
typeIndex = 1)
- })
public String returnConstructorRefTA2() {
return
"interface Lambda {" +
@@ -253,57 +237,222 @@
" public <S, T> void generic(S p1, T p2) {}" +
"}" +
- "class Test {" +
+ "class %TEST_CLASS_NAME% {" +
" Lambda lambda() {" +
" return LambdaImpl::<@TA Object, @TB Object>new;" +
" }" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- paramIndex = 1),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
- paramIndex = 1, genericLocation = { 3, 0 }),
- @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 1)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 1, genericLocation = { 3, 0 })
+ @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
- lvarIndex = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TE", type = CAST,
+ lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TE", type = CAST,
offset = ReferenceInfoUtil.IGNORE_VALUE,
typeIndex = 0)
- })
public String returnLambdaExpr1() {
return
"interface LambdaInt {" +
" void lambda(Object p1, List<Object> p2);" +
"}" +
- "class Test {" +
+ "class %TEST_CLASS_NAME% {" +
" LambdaInt getLambda() {" +
" return (@TA Object x, @TB List<@TC Object> y) -> { @TD Object l = null; System.out.println((@TE Object) l); };" +
" }" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- paramIndex = 0)})
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 0)
public String lambdaField1() {
return
- "class Test {" +
+ "class %TEST_CLASS_NAME% {" +
" java.util.function.IntUnaryOperator field = (@TA int y) -> 1;" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- paramIndex = 0)})
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 0)
public String lambdaField2() {
return
- "class Test {" +
+ "class %TEST_CLASS_NAME% {" +
" static java.util.function.IntUnaryOperator field = (@TA int y) -> 1;" +
"}";
}
+
+ @TADescription(annotation = "RTAs", type = METHOD_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String returnMethodRefRepeatableAnnotation1() {
+ return
+ "class Lambda {" +
+ " public String getName() { return \"Lambda!\"; }" +
+ "}" +
+
+ "class %TEST_CLASS_NAME% {" +
+ " java.util.function.Function<Lambda, String> lambda() {" +
+ " return @RTA @RTA Lambda::getName;" +
+ " }" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = METHOD_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "RTCs", type = METHOD_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "RTDs", type = METHOD_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = { 3, 1 })
+ @TADescription(annotation = "RTEs", type = METHOD_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = { 3, 1})
+ public String returnMethodRefRepeatableAnnotation2() {
+ return
+ "class Lambda<S, T> {" +
+ " public String getName() { return \"Lambda!\"; }" +
+ "}" +
+
+ "class %TEST_CLASS_NAME% {" +
+ " java.util.function.Function<Lambda<Integer, Float>, String> lambda() {" +
+ " return @RTA @RTA Lambda<@RTB @RTB @RTC @RTC Integer, @RTD @RTD @RTE @RTE Float>::getName;" +
+ " }" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = CONSTRUCTOR_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String returnConstructorRefRepeatable1() {
+ return
+ "class Lambda {" +
+ " Lambda() { }" +
+ "}" +
+
+ "class %TEST_CLASS_NAME% {" +
+ " Runnable lambda() {" +
+ " return @RTA @RTA Lambda::new;" +
+ " }" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = CONSTRUCTOR_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = CONSTRUCTOR_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "RTCs", type = CONSTRUCTOR_REFERENCE,
+ offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = { 3, 1 })
+ public String returnConstructorRefRepeatable2() {
+ return
+ "class Lambda<S, T> {" +
+ " Lambda() { }" +
+ "}" +
+
+ "class %TEST_CLASS_NAME% {" +
+ " Runnable lambda() {" +
+ " return @RTA @RTA Lambda<@RTB @RTB Integer, @RTC @RTC Float>::new;" +
+ " }" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_REFERENCE_TYPE_ARGUMENT,
+ offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_REFERENCE_TYPE_ARGUMENT,
+ offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 1)
+ public String returnMethodRefTARepeatableAnnotation1() {
+ return
+ "interface Lambda {" +
+ " <S, T> void generic(S p1, T p2);" +
+ "}" +
+
+ "class LambdaImpl implements Lambda {" +
+ " public <S, T> void generic(S p1, T p2) {}" +
+ "}" +
+
+ "class %TEST_CLASS_NAME% {" +
+ " Lambda lambda(LambdaImpl r) {" +
+ " return r::<@RTA @RTA Object, @RTB @RTB Object>generic;" +
+ " }" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
+ offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "RTBs", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
+ offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 1)
+ public String returnConstructorRefTARepeatableAnnotation2() {
+ return
+ "interface Lambda {" +
+ " <S, T> void generic(S p1, T p2);" +
+ "}" +
+
+ "class LambdaImpl implements Lambda {" +
+ " <S, T> LambdaImpl(S p1, T p2) {}" +
+ " public <S, T> void generic(S p1, T p2) {}" +
+ "}" +
+
+ "class %TEST_CLASS_NAME% {" +
+ " Lambda lambda() {" +
+ " return LambdaImpl::<@RTA @RTA Object, @RTB @RTB Object>new;" +
+ " }" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 1)
+ @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 1, genericLocation = { 3, 0 })
+ @TADescription(annotation = "RTDs", type = LOCAL_VARIABLE,
+ lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
+ lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
+ lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTEs", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String returnLambdaExprRepeatableAnnotation1() {
+ return
+ "interface LambdaInt {" +
+ " void lambda(Object p1, List<Object> p2);" +
+ "}" +
+ "class %TEST_CLASS_NAME% {" +
+ " LambdaInt getLambda() {" +
+ " return (@RTA @RTA Object x, @RTB @RTB List<@RTC @RTC Object> y) ->" +
+ " { @RTD @RTD Object l = null; System.out.println((@RTE @RTE Object) l); };" +
+ " }" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 0)
+ public String lambdaFieldRepeatableAnnotation1() {
+ return
+ "class %TEST_CLASS_NAME% {" +
+ " java.util.function.IntUnaryOperator field = (@RTA @RTA int y) -> 1;" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 0)
+ public String lambdaFieldRepeatableAnnotation2() {
+ return
+ "class %TEST_CLASS_NAME% {" +
+ " static java.util.function.IntUnaryOperator field = (@RTA @RTA int y) -> 1;" +
+ "}";
+ }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodInvocationTypeArgument.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2009, 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
+ * @bug 8042451
+ * @summary Test population of reference info for method invocation type arguments
+ * @compile -g Driver.java ReferenceInfoUtil.java MethodInvocationTypeArgument.java
+ * @run main Driver MethodInvocationTypeArgument
+ */
+
+import static com.sun.tools.classfile.TypeAnnotation.TargetType.METHOD_INVOCATION_TYPE_ARGUMENT;
+import static java.lang.System.lineSeparator;
+
+public class MethodInvocationTypeArgument {
+
+ @TADescription(annotation = "TA", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 0, offset = 4)
+ @TADescription(annotation = "TB", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 1, offset = 4)
+ @TADescription(annotation = "TC", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 2, offset = 4)
+ @TADescription(annotation = "TD", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 0, offset = 24)
+ @TADescription(annotation = "TE", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 1, offset = 24)
+ @TADescription(annotation = "TF", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 2, offset = 24)
+ public String genericMethod() {
+ return
+ "public <T1, T2, T3> void function(T1 t1, T2 t2, T3 t3) {}" + lineSeparator() +
+ "{ new %TEST_CLASS_NAME%().<@TA Integer, @TB String, @TC Double>function(0, \"\", 0.0); " + lineSeparator() +
+ " this.<@TD Integer, @TE String, @TF Double>function(0, \"\", 0.0); }";
+ }
+
+ @TADescription(annotation = "TA", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 0, offset = 0)
+ @TADescription(annotation = "TB", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 1, offset = 0)
+ @TADescription(annotation = "TC", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 2, offset = 0)
+ public String genericStaticMethod() {
+ return
+ "public static <T1, T2, T3> void staticFunction(T1 t1, T2 t2, T3 t3) {}" + lineSeparator() +
+ "static { %TEST_CLASS_NAME%.<@TA Integer, @TB String, @TC Double>staticFunction(0, \"\", 0.0); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 0, offset = 4)
+ @TADescription(annotation = "RTBs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 1, offset = 4)
+ @TADescription(annotation = "RTCs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 0, offset = 20)
+ @TADescription(annotation = "RTDs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 1, offset = 20)
+ public String genericMethodRepeatableAnnotation() {
+ return
+ "public <T1, T2> void function(T1 t1, T2 t2) {}" + lineSeparator() +
+ "{ new %TEST_CLASS_NAME%().<@RTA @RTA Integer, @RTB @RTB String>" +
+ "function(0, \"\"); " + lineSeparator() +
+ " this.<@RTC @RTC Integer, @RTD @RTD String>function(0, \"\"); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 0, offset = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 1, offset = 0)
+ @TADescription(annotation = "RTCs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+ typeIndex = 2, offset = 0)
+ public String genericStaticMethodRepeatableAnnotation() {
+ return
+ "public static <T1, T2, T3> void staticFunction(T1 t1, T2 t2, T3 t3) {}" + lineSeparator() +
+ "static { %TEST_CLASS_NAME%.<@RTA @RTA Integer, @RTB @RTB String, @RTC @RTC Double>staticFunction(0, \"\", 0.0); }";
+ }
+
+}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodParameters.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodParameters.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,6 +25,7 @@
/*
* @test
+ * @bug 8042451
* @summary Test population of reference info for method parameters
* @compile -g Driver.java ReferenceInfoUtil.java MethodParameters.java
* @run main Driver MethodParameters
@@ -41,97 +42,83 @@
return "void test(Object b, @TA Object a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 3, 0 }, paramIndex = 0),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 3, 1 }, paramIndex = 0),
- @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 0 }, paramIndex = 0)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1 }, paramIndex = 0)
+ @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
genericLocation = { 3, 1, 3, 0 }, paramIndex = 0)
- })
public String methodParamAsParametrized() {
return "void test(@TA Map<@TB String, @TC List<@TD String>> a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 3, 0 }, paramIndex = 0),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 3, 0, 2, 0 }, paramIndex = 0),
- @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 3, 1 }, paramIndex = 0),
- @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 3, 1, 3, 0 }, paramIndex = 0),
- @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 3, 1, 3, 0, 2, 0 }, paramIndex = 0),
- @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 3, 1, 3, 0, 2, 0, 3, 0 }, paramIndex = 0),
- @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 3, 1, 3, 0, 2, 0, 3, 0, 2, 0 }, paramIndex = 0),
- @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 3, 1, 3, 0, 2, 0, 3, 1 }, paramIndex = 0),
- @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 0 }, paramIndex = 0)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 0, 2, 0 }, paramIndex = 0)
+ @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1 }, paramIndex = 0)
+ @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1, 3, 0 }, paramIndex = 0)
+ @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1, 3, 0, 2, 0 }, paramIndex = 0)
+ @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1, 3, 0, 2, 0, 3, 0 }, paramIndex = 0)
+ @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1, 3, 0, 2, 0, 3, 0, 2, 0 }, paramIndex = 0)
+ @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1, 3, 0, 2, 0, 3, 1 }, paramIndex = 0)
+ @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER,
genericLocation = { 3, 1, 3, 0, 2, 0, 3, 1, 2, 0 }, paramIndex = 0)
- })
public String methodParamAsWildcard() {
return "void test(@TA Map<@TB ? extends @TC String," +
" @TD List<@TE ? extends @TF Map<@TG ? super @TH String," +
" @TI ? extends @TJ Object>>> a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 0, 0 }, paramIndex = 1),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0 }, paramIndex = 1)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
genericLocation = { 0, 0, 0, 0 }, paramIndex = 1)
- })
public String methodParamAsArray() {
return "void test(Object b, @TC String @TA [] @TB [] a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 0, 0 }, paramIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
genericLocation = { 0, 0 }, paramIndex = 1)
- })
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0 }, paramIndex = 1)
public String methodParamAsArray2() {
return "void test(Object b, @TA @TB String [] a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 0, 0 }, paramIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 0, 0 }, paramIndex = 1),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
genericLocation = { 0, 0 }, paramIndex = 1)
- })
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0 }, paramIndex = 1)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0 }, paramIndex = 1)
public String methodParamAsArray3() {
return "void test(Object b, @TA @TB @TC String [] a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 0, 0 }, paramIndex = 1),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0 }, paramIndex = 1)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
genericLocation = { 0, 0, 0, 0 }, paramIndex = 1)
- })
public String methodParamAsVararg() {
return "void test(Object b, @TC String @TA [] @TB ... a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 0, 0 }, paramIndex = 1),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0 }, paramIndex = 1)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
genericLocation = { 0, 0, 0, 0 }, paramIndex = 1)
- })
public String methodParamAsFQVararg() {
return "void test(Object b, java.lang.@TC String @TA [] @TB ... a) { }";
}
@@ -148,26 +135,125 @@
// Smoke tests
@TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
- public String interfacemethodParamAsObject() {
- return "interface Test { void test(@TA Object a); }";
+ public String interfaceMethodParamAsObject() {
+ return "interface %TEST_CLASS_NAME% { void test(@TA Object a); }";
}
@TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 2)
- public String abstractmethodParamAsObject() {
- return "abstract class Test { abstract void test(Object b, Object c, @TA Object a); }";
+ public String abstractMethodParamAsObject() {
+ return "abstract class %TEST_CLASS_NAME% { abstract void test(Object b, Object c, @TA Object a); }";
+ }
+
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 0 }, paramIndex = 0)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1 }, paramIndex = 0)
+ @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1, 3, 0 }, paramIndex = 0)
+ public String interfaceMethodParamAsParametrized() {
+ return "interface %TEST_CLASS_NAME% { void test(@TA Map<@TB String, @TC List<@TD String>> a); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ public String methodParamAsPrimitiveRepeatableAnnotation() {
+ return "void test(@RTA @RTA int a) { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+ public String methodParamAsObjectRepeatableAnnotation() {
+ return "void test(Object b, @RTA @RTA Object a) { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 0 }, paramIndex = 0)
+ @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1 }, paramIndex = 0)
+ @TADescription(annotation = "RTDs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1, 3, 0 }, paramIndex = 0)
+ public String methodParamAsParametrizedRepeatableAnnotation() {
+ return "void test(@RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> a) { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 0 }, paramIndex = 0)
+ @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 0, 2, 0 }, paramIndex = 0)
+ @TADescription(annotation = "RTDs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1 }, paramIndex = 0)
+ @TADescription(annotation = "RTEs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1, 3, 0 }, paramIndex = 0)
+ @TADescription(annotation = "RTFs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1, 3, 0, 2, 0 }, paramIndex = 0)
+ public String methodParamAsWildcardRepeatableAnnotation() {
+ return "void test(@RTA @RTA Map<@RTB @RTB ? extends @RTC @RTC String," +
+ " @RTD @RTD List<@RTE @RTE ? super @RTF @RTF String>> a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 3, 0 }, paramIndex = 0),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 3, 1 }, paramIndex = 0),
- @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
- genericLocation = { 3, 1, 3, 0 }, paramIndex = 0)
- })
- public String interfacemethodParamAsParametrized() {
- return "interface Test { void test(@TA Map<@TB String, @TC List<@TD String>> a); }";
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0 }, paramIndex = 1)
+ @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0, 0, 0 }, paramIndex = 1)
+ public String methodParamAsArrayRepeatableAnnotation() {
+ return "void test(Object b, @RTC @RTC String @RTA @RTA [] @RTB @RTB [] a) { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0 }, paramIndex = 1)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0 }, paramIndex = 1)
+ public String methodParamAsArrayRepeatableAnnotation2() {
+ return "void test(Object b, @RTA @RTA @RTB @RTB String [] a) { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0 }, paramIndex = 1)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0 }, paramIndex = 1)
+ public String methodParamAsArrayRepeatableAnnotation3() {
+ return "void test(Object b, @RTA @RTA @RTB @RTB String [] a) { }";
}
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0 }, paramIndex = 1)
+ @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0, 0, 0 }, paramIndex = 1)
+ public String methodParamAsVarargRepeatableAnnoattion() {
+ return "void test(Object b, @RTC @RTC String @RTA @RTA [] @RTB @RTB ... a) { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0 }, paramIndex = 1)
+ @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 0, 0, 0, 0 }, paramIndex = 1)
+ public String methodParamAsFQVarargRepeatableAnnotation() {
+ return "void test(Object b, java.lang.@RTC @RTC String @RTA @RTA [] @RTB @RTB ... a) { }";
+ }
+
+ // Smoke tests
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ public String interfaceMethodParamAsObjectRepeatableAnnotation() {
+ return "interface %TEST_CLASS_NAME% { void test(@RTA @RTA Object a); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 2)
+ public String abstractMethodParamAsObjectRepeatableAnnotation() {
+ return "abstract class %TEST_CLASS_NAME% { abstract void test(Object b, Object c, @RTA @RTA Object a); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 0 }, paramIndex = 0)
+ @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1 }, paramIndex = 0)
+ @TADescription(annotation = "RTDs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = { 3, 1, 3, 0 }, paramIndex = 0)
+ public String interfaceMethodParamAsParametrizedRepeatableAnnotation() {
+ return "interface %TEST_CLASS_NAME% { void test(@RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> a); }";
+ }
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodReceivers.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodReceivers.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,6 +25,7 @@
/*
* @test
+ * @bug 8042451
* @summary Test population of reference info for method receivers
* @compile -g Driver.java ReferenceInfoUtil.java MethodReceivers.java
* @run main Driver MethodReceivers
@@ -33,47 +34,87 @@
@TADescription(annotation = "TA", type = METHOD_RECEIVER)
public String regularMethod() {
- return "class Test { void test(@TA Test this) { } }";
+ return "class %TEST_CLASS_NAME% { void test(@TA %TEST_CLASS_NAME% this) { } }";
}
@TADescription(annotation = "TA", type = METHOD_RECEIVER)
public String abstractMethod() {
- return "abstract class Test { abstract void test(@TA Test this); }";
+ return "abstract class %TEST_CLASS_NAME% { abstract void test(@TA %TEST_CLASS_NAME% this); }";
}
@TADescription(annotation = "TA", type = METHOD_RECEIVER)
public String interfaceMethod() {
- return "interface Test { void test(@TA Test this); }";
+ return "interface %TEST_CLASS_NAME% { void test(@TA %TEST_CLASS_NAME% this); }";
}
@TADescription(annotation = "TA", type = METHOD_RECEIVER)
public String regularWithThrows() {
- return "class Test { void test(@TA Test this) throws Exception { } }";
+ return "class %TEST_CLASS_NAME% { void test(@TA %TEST_CLASS_NAME% this) throws Exception { } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RECEIVER,
- genericLocation = {}),
- @TADescription(annotation = "TB", type = METHOD_RECEIVER,
- genericLocation = {1, 0})
- })
- @TestClass("TestOuter$TestInner")
+ @TADescription(annotation = "TA", type = METHOD_RECEIVER,
+ genericLocation = {})
+ @TADescription(annotation = "TB", type = METHOD_RECEIVER,
+ genericLocation = {1, 0})
+ @TestClass("%TEST_CLASS_NAME%$TestInner")
public String nestedtypes1() {
- return "class TestOuter { class TestInner { void test(@TA TestOuter. @TB TestInner this) { } } }";
+ return "class %TEST_CLASS_NAME% { class TestInner { void test(@TA %TEST_CLASS_NAME%. @TB TestInner this) { } } }";
}
@TADescription(annotation = "TA", type = METHOD_RECEIVER,
genericLocation = {})
- @TestClass("TestOuter$TestInner")
+ @TestClass("%TEST_CLASS_NAME%$TestInner")
public String nestedtypes2() {
- return "class TestOuter { class TestInner { void test(@TA TestOuter.TestInner this) { } } }";
+ return "class %TEST_CLASS_NAME% { class TestInner { void test(@TA %TEST_CLASS_NAME%.TestInner this) { } } }";
}
@TADescription(annotation = "TB", type = METHOD_RECEIVER,
genericLocation = {1, 0})
- @TestClass("TestOuter$TestInner")
+ @TestClass("%TEST_CLASS_NAME%$TestInner")
public String nestedtypes3() {
- return "class TestOuter { class TestInner { void test(TestOuter. @TB TestInner this) { } } }";
+ return "class %TEST_CLASS_NAME% { class TestInner { void test(%TEST_CLASS_NAME%. @TB TestInner this) { } } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RECEIVER)
+ public String regularMethodRepeatableAnnotation() {
+ return "class %TEST_CLASS_NAME% { void test(@RTA @RTA %TEST_CLASS_NAME% this) { } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RECEIVER)
+ public String abstractMethodRepeatablaAnnotation() {
+ return "abstract class %TEST_CLASS_NAME% { abstract void test(@RTA @RTA %TEST_CLASS_NAME% this); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RECEIVER)
+ public String interfaceMethodRepeatableAnnotation() {
+ return "interface %TEST_CLASS_NAME% { void test(@RTA @RTA %TEST_CLASS_NAME% this); }";
}
+ @TADescription(annotation = "RTAs", type = METHOD_RECEIVER)
+ public String regularWithThrowsRepeatableAnnotation() {
+ return "class %TEST_CLASS_NAME% { void test(@RTA @RTA %TEST_CLASS_NAME% this) throws Exception { } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RECEIVER,
+ genericLocation = {})
+ @TADescription(annotation = "RTBs", type = METHOD_RECEIVER,
+ genericLocation = {1, 0})
+ @TestClass("%TEST_CLASS_NAME%$TestInner")
+ public String nestedtypesRepeatableAnnotation1() {
+ return "class %TEST_CLASS_NAME% { class TestInner { void test(@RTA @RTA %TEST_CLASS_NAME%. @RTB @RTB TestInner this) { } } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RECEIVER,
+ genericLocation = {})
+ @TestClass("%TEST_CLASS_NAME%$TestInner")
+ public String nestedtypesRepeatableAnnotation2() {
+ return "class %TEST_CLASS_NAME% { class TestInner { void test(@RTA @RTA %TEST_CLASS_NAME%.TestInner this) { } } }";
+ }
+
+ @TADescription(annotation = "RTBs", type = METHOD_RECEIVER,
+ genericLocation = {1, 0})
+ @TestClass("%TEST_CLASS_NAME%$TestInner")
+ public String nestedtypesRepeatableAnnotation3() {
+ return "class %TEST_CLASS_NAME% { class TestInner { void test(%TEST_CLASS_NAME%. @RTB @RTB TestInner this) { } } }";
+ }
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodReturns.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodReturns.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,6 +25,7 @@
/*
* @test
+ * @bug 8042451
* @summary Test population of reference info for method return
* @compile -g Driver.java ReferenceInfoUtil.java MethodReturns.java
* @run main Driver MethodReturns
@@ -42,37 +43,31 @@
return "@TA Object test() { return null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN),
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "TC", type = METHOD_RETURN,
- genericLocation = { 3, 1 }),
- @TADescription(annotation = "TD", type = METHOD_RETURN,
- genericLocation = { 3, 1, 3, 0 })
- })
+ @TADescription(annotation = "TA", type = METHOD_RETURN)
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "TC", type = METHOD_RETURN,
+ genericLocation = { 3, 1 })
+ @TADescription(annotation = "TD", type = METHOD_RETURN,
+ genericLocation = { 3, 1, 3, 0 })
public String methodReturnAsParametrized() {
return "@TA Map<@TB String, @TC List<@TD String>> test() { return null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN),
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = { 0, 0 }),
- @TADescription(annotation = "TC", type = METHOD_RETURN,
- genericLocation = { 0, 0, 0, 0 })
- })
+ @TADescription(annotation = "TA", type = METHOD_RETURN)
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = { 0, 0 })
+ @TADescription(annotation = "TC", type = METHOD_RETURN,
+ genericLocation = { 0, 0, 0, 0 })
public String methodReturnAsArray() {
return "@TC String @TA [] @TB [] test() { return null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN),
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = { 0, 0 }),
- @TADescription(annotation = "TC", type = METHOD_RETURN,
- genericLocation = { 0, 0, 0, 0 })
- })
+ @TADescription(annotation = "TA", type = METHOD_RETURN)
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = { 0, 0 })
+ @TADescription(annotation = "TC", type = METHOD_RETURN,
+ genericLocation = { 0, 0, 0, 0 })
public String methodReturnAsArrayOld() {
return "@TC String test() @TA [] @TB [] { return null; }";
}
@@ -90,97 +85,206 @@
// Smoke tests
@TADescription(annotation = "TA", type = METHOD_RETURN)
public String interfaceMethodReturnAsObject() {
- return "interface Test { @TA Object test(); }";
+ return "interface %TEST_CLASS_NAME% { @TA Object test(); }";
}
@TADescription(annotation = "TA", type = METHOD_RETURN)
public String abstractMethodReturnAsObject() {
- return "abstract class Test { abstract @TA Object test(); }";
+ return "abstract class %TEST_CLASS_NAME% { abstract @TA Object test(); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN),
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "TC", type = METHOD_RETURN,
- genericLocation = { 3, 1 }),
- @TADescription(annotation = "TD", type = METHOD_RETURN,
- genericLocation = { 3, 1, 3, 0 })
- })
+ @TADescription(annotation = "TA", type = METHOD_RETURN)
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "TC", type = METHOD_RETURN,
+ genericLocation = { 3, 1 })
+ @TADescription(annotation = "TD", type = METHOD_RETURN,
+ genericLocation = { 3, 1, 3, 0 })
public String interfaceMethodReturnAsParametrized() {
- return "interface Test { @TA Map<@TB String, @TC List<@TD String>> test(); }";
+ return "interface %TEST_CLASS_NAME% { @TA Map<@TB String, @TC List<@TD String>> test(); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN,
- genericLocation = { 3, 0 }),
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = { 3, 0, 2, 0 }),
- @TADescription(annotation = "TC", type = METHOD_RETURN,
- genericLocation = { 3, 0, 2, 0, 1, 0 }),
- @TADescription(annotation = "TD", type = METHOD_RETURN,
- genericLocation = { 3, 0, 2, 0, 1, 0, 3, 0 }),
- @TADescription(annotation = "TE", type = METHOD_RETURN,
- genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1 }),
- @TADescription(annotation = "TF", type = METHOD_RETURN,
- genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1, 2, 0 })
- })
+ @TADescription(annotation = "TA", type = METHOD_RETURN,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0 })
+ @TADescription(annotation = "TC", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0 })
+ @TADescription(annotation = "TD", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0, 3, 0 })
+ @TADescription(annotation = "TE", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1 })
+ @TADescription(annotation = "TF", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1, 2, 0 })
public String methodReturnAsNestedWildcard() {
return "Set<@TA ? extends @TB GOuter<String, String>. @TC GInner<@TD String, @TE ? super @TF Object>> entrySet() { return null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN,
- genericLocation = { 3, 0, 1, 0, 3, 0 }),
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = { 3, 0, 1, 0, 3, 1 }),
- @TADescription(annotation = "TC", type = METHOD_RETURN,
- genericLocation = { 3, 0, 1, 0, 3, 1, 2, 0 })
- })
+ @TADescription(annotation = "TA", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 1, 0, 3, 0 })
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 1, 0, 3, 1 })
+ @TADescription(annotation = "TC", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 1, 0, 3, 1, 2, 0 })
public String methodReturnAsNestedWildcard2() {
return "class GOuter<X, Y> { class GInner<X, Y> {} } " +
- "class Test<K> { Set<GOuter<String, String>.GInner<@TA K, @TB ? extends @TC Object>> entrySet() { return null; } }";
+ "class %TEST_CLASS_NAME%<K> { Set<GOuter<String, String>.GInner<@TA K, @TB ? extends @TC Object>> entrySet() { return null; } }";
}
- @TADescriptions({
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = { 3, 0, 2, 0 }),
- @TADescription(annotation = "TC", type = METHOD_RETURN,
- genericLocation = { 3, 0, 2, 0, 1, 0 }),
- })
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0 })
+ @TADescription(annotation = "TC", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0 })
public String methodReturnAsNestedWildcard3() {
return "Set<? extends @TB GOuter<String, String>. @TC GInner<String, Object>> entrySet() { return null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TC", type = METHOD_RETURN,
- genericLocation = { 3, 0, 2, 0, 1, 0 }),
- })
+ @TADescription(annotation = "TC", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0 })
public String methodReturnAsNestedWildcard4() {
return "Set<? extends GOuter<String, String>. @TC GInner<String, Object>> entrySet() { return null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = { 3, 0, 2, 0 }),
- @TADescription(annotation = "TC", type = METHOD_RETURN,
- genericLocation = { 3, 0, 2, 0, 1, 0 }),
- })
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0 })
+ @TADescription(annotation = "TC", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0 })
public String methodReturnAsNestedWildcard5() {
return "Set<? extends @TB Outer. @TC Inner> entrySet() { return null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN,
- genericLocation = { 3, 0, 2, 0, 1, 0, 3, 0 }),
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1 }),
- @TADescription(annotation = "TC", type = METHOD_RETURN,
- genericLocation = { 3, 0, 2, 0, 1, 0 }),
- })
+ @TADescription(annotation = "TA", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0, 3, 0 })
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1 })
+ @TADescription(annotation = "TC", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0 })
public String methodReturnAsNestedWildcard6() {
return "Set<? extends GOuter<String, String>. @TC GInner<@TA String, @TB Object>> entrySet() { return null; }";
}
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+ public String methodReturnAsPrimitiveRepeatableAnnotation() {
+ return "@RTA @RTA int test() { return 0; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+ public String methodReturnAsObjectRepeatableAnnotation() {
+ return "@RTA @RTA Object test() { return null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+ genericLocation = { 3, 1 })
+ @TADescription(annotation = "RTDs", type = METHOD_RETURN,
+ genericLocation = { 3, 1, 3, 0 })
+ public String methodReturnAsParametrizedRepeatableAnnotation() {
+ return "@RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> test() { return null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = { 0, 0 })
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+ genericLocation = { 0, 0, 0, 0 })
+ public String methodReturnAsArrayRepeatableAnnotation() {
+ return "@RTC @RTC String @RTA @RTA [] @RTB @RTB [] test() { return null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = { 0, 0 })
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+ genericLocation = { 0, 0, 0, 0 })
+ public String methodReturnAsArrayOldRepeatableAnnotation() {
+ return "@RTC @RTC String test() @RTA @RTA [] @RTB @RTB [] { return null; }";
+ }
+
+ // Smoke tests
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+ public String interfaceMethodReturnAsObjectRepeatableAnnotation() {
+ return "interface %TEST_CLASS_NAME% { @RTA @RTA Object test(); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+ public String abstractMethodReturnAsObjectRepeatableAnnotation() {
+ return "abstract class %TEST_CLASS_NAME% { abstract @RTA @RTA Object test(); }";
+ }
+
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+ genericLocation = { 3, 1 })
+ @TADescription(annotation = "RTDs", type = METHOD_RETURN,
+ genericLocation = { 3, 1, 3, 0 })
+ public String interfaceMethodReturnAsParametrizedRepeatableAnnotation() {
+ return "interface %TEST_CLASS_NAME% { @RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> test(); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+ genericLocation = { 3, 0 })
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0 })
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0 })
+ @TADescription(annotation = "RTDs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0, 3, 0 })
+ @TADescription(annotation = "RTEs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1 })
+ @TADescription(annotation = "RTFs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1, 2, 0 })
+ public String methodReturnAsNestedWildcardRepeatableAnnotation() {
+ return "Set<@RTA @RTA ? extends @RTB @RTB GOuter<String, String>. @RTC @RTC GInner<@RTD @RTD String," +
+ " @RTE @RTE ? super @RTF @RTF Object>> entrySet() { return null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 1, 0, 3, 0 })
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 1, 0, 3, 1 })
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 1, 0, 3, 1, 2, 0 })
+ public String methodReturnAsNestedWildcardRepeatableAnnotation2() {
+ return "class GOuter<X, Y> { class GInner<X, Y> {} } " +
+ "class %TEST_CLASS_NAME%<K> { Set<GOuter<String, String>.GInner<@RTA @RTA K," +
+ " @RTB @RTB ? extends @RTC @RTC Object>> entrySet() { return null; } }";
+ }
+
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0 })
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0 })
+ public String methodReturnAsNestedWildcardRepeatableAnnotation3() {
+ return "Set<? extends @RTB @RTB GOuter<String, String>. @RTC @RTC GInner<String, Object>> entrySet() { return null; }";
+ }
+
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0 })
+ public String methodReturnAsNestedWildcardRepeatableAnnotation4() {
+ return "Set<? extends GOuter<String, String>. @RTC @RTC GInner<String, Object>> entrySet() { return null; }";
+ }
+
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0 })
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0 })
+ public String methodReturnAsNestedWildcardRepeatableAnnotation5() {
+ return "Set<? extends @RTB @RTB Outer. @RTC @RTC Inner> entrySet() { return null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0, 3, 0 })
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1 })
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+ genericLocation = { 3, 0, 2, 0, 1, 0 })
+ public String methodReturnAsNestedWildcardRepeatableAnnotation6() {
+ return "Set<? extends GOuter<String, String>. @RTC @RTC GInner<@RTA @RTA String," +
+ " @RTB @RTB Object>> entrySet() { return null; }";
+ }
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodThrows.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodThrows.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,53 +25,46 @@
/*
* @test
+ * @bug 8042451
* @summary Test population of reference info for method exception clauses
* @compile -g Driver.java ReferenceInfoUtil.java MethodThrows.java
* @run main Driver MethodThrows
*/
public class MethodThrows {
- @TADescriptions({
- @TADescription(annotation = "TA", type = THROWS, typeIndex = 0),
- @TADescription(annotation = "TB", type = THROWS, typeIndex = 2)
- })
+ @TADescription(annotation = "TA", type = THROWS, typeIndex = 0)
+ @TADescription(annotation = "TB", type = THROWS, typeIndex = 2)
public String regularMethod() {
- return "class Test { void test() throws @TA RuntimeException, IllegalArgumentException, @TB Exception { } }";
+ return "class %TEST_CLASS_NAME% { void test() throws @TA RuntimeException, IllegalArgumentException, @TB Exception { } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = THROWS, typeIndex = 0),
- @TADescription(annotation = "TB", type = THROWS, typeIndex = 2)
- })
+ @TADescription(annotation = "TA", type = THROWS, typeIndex = 0)
+ @TADescription(annotation = "TB", type = THROWS, typeIndex = 2)
public String abstractMethod() {
- return "abstract class Test { abstract void test() throws @TA RuntimeException, IllegalArgumentException, @TB Exception; }";
+ return "abstract class %TEST_CLASS_NAME% { abstract void test() throws @TA RuntimeException, IllegalArgumentException, @TB Exception; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = THROWS, typeIndex = 0),
- @TADescription(annotation = "TB", type = THROWS, typeIndex = 2)
- })
+ @TADescription(annotation = "TA", type = THROWS, typeIndex = 0)
+ @TADescription(annotation = "TB", type = THROWS, typeIndex = 2)
public String interfaceMethod() {
- return "interface Test { void test() throws @TA RuntimeException, IllegalArgumentException, @TB Exception; }";
+ return "interface %TEST_CLASS_NAME% { void test() throws @TA RuntimeException, IllegalArgumentException, @TB Exception; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = THROWS, typeIndex = 0,
- genericLocation = {}),
- @TADescription(annotation = "TB", type = THROWS, typeIndex = 0,
- genericLocation = {1, 0}),
- @TADescription(annotation = "TC", type = THROWS, typeIndex = 0,
- genericLocation = {1, 0, 1, 0}),
- @TADescription(annotation = "TD", type = THROWS, typeIndex = 1,
- genericLocation = {}),
- @TADescription(annotation = "TE", type = THROWS, typeIndex = 1,
- genericLocation = {1, 0}),
- @TADescription(annotation = "TF", type = THROWS, typeIndex = 1,
- genericLocation = {1, 0, 1, 0})
- })
+ @TADescription(annotation = "TA", type = THROWS, typeIndex = 0,
+ genericLocation = {})
+ @TADescription(annotation = "TB", type = THROWS, typeIndex = 0,
+ genericLocation = {1, 0})
+ @TADescription(annotation = "TC", type = THROWS, typeIndex = 0,
+ genericLocation = {1, 0, 1, 0})
+ @TADescription(annotation = "TD", type = THROWS, typeIndex = 1,
+ genericLocation = {})
+ @TADescription(annotation = "TE", type = THROWS, typeIndex = 1,
+ genericLocation = {1, 0})
+ @TADescription(annotation = "TF", type = THROWS, typeIndex = 1,
+ genericLocation = {1, 0, 1, 0})
public String NestedTypes() {
return "class Outer { class Middle { class Inner1 extends Exception {}" +
" class Inner2 extends Exception{} } }" +
- "class Test { void test() throws @TA Outer.@TB Middle.@TC Inner1, @TD Outer.@TE Middle.@TF Inner2 { } }";
+ "class %TEST_CLASS_NAME% { void test() throws @TA Outer.@TB Middle.@TC Inner1, @TD Outer.@TE Middle.@TF Inner2 { } }";
}
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodTypeParam.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodTypeParam.java Wed Jun 18 13:14:15 2014 -0700
@@ -22,230 +22,387 @@
*/
import static com.sun.tools.classfile.TypeAnnotation.TargetType.*;
+import static java.lang.System.lineSeparator;
/*
* @test
+ * @bug 8042451
* @summary Test population of reference info for method type parameters
* @compile -g Driver.java ReferenceInfoUtil.java MethodTypeParam.java
* @run main Driver MethodTypeParam
*/
public class MethodTypeParam {
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
- @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
- @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
- })
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
public String regularClass() {
return "<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test() { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
- @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
- })
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
public String regularClass2() {
return "<@TA K extends @TB Date, @TC V extends @TE Cloneable> void test() { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
- @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
- @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
- @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
- })
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
public String regularClassParameterized() {
return "<K extends @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> void test() { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
- @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
- @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
- })
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
public String abstractClass() {
- return "abstract class Test { abstract <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }";
+ return "abstract class %TEST_CLASS_NAME% { abstract <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
- @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
- @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
- @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
- @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
- })
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
public String abstractClassParameterized() {
- return "abstract class Test { abstract <K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> void test(); }";
+ return "abstract class %TEST_CLASS_NAME% { abstract <K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> void test(); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
- @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
- @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
- })
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
public String abstractClassParameterized2() {
- return "abstract class Test { abstract <K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> void test(); }";
+ return "abstract class %TEST_CLASS_NAME% { abstract <K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> void test(); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
- })
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
public String abstractClassParameterized3() {
- return "abstract class Test { abstract <K extends @TA List<String>, V extends @TB List<Object>> void test(); }";
+ return "abstract class %TEST_CLASS_NAME% { abstract <K extends @TA List<String>, V extends @TB List<Object>> void test(); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
- @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
- @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
- })
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
public String regularInterface() {
- return "interface Test { <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }";
+ return "interface %TEST_CLASS_NAME% { <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
- @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
- @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
- @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
- @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
- })
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
public String regularInterfaceParameterized() {
- return "interface Test { <@TH K extends @TG Object & @TA Map<String, @TB String>, @TI V extends @TF Object & @TC List<@TD List<@TE Object>>> void test(); }";
+ return "interface %TEST_CLASS_NAME% { <@TH K extends @TG Object & @TA Map<String, @TB String>, @TI V extends @TF Object & @TC List<@TD List<@TE Object>>> void test(); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
- @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
- @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
- @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
- })
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
public String regularInterfaceParameterized2() {
- return "interface Test { <@TF K extends @TA Map<String, @TB String>, @TG V extends @TC List<@TD List<@TE Object>>> void test(); }";
+ return "interface %TEST_CLASS_NAME% { <@TF K extends @TA Map<String, @TB String>, @TG V extends @TC List<@TD List<@TE Object>>> void test(); }";
}
@TADescription(annotation = "TA", type = METHOD_RETURN)
public String useInReturn1() {
- return "class Test { <T> @TA T m() { throw new RuntimeException(); } }";
+ return "class %TEST_CLASS_NAME% { <T> @TA T m() { throw new RuntimeException(); } }";
}
@TADescription(annotation = "TA", type = METHOD_RETURN, genericLocation = {3, 0})
public String useInReturn2() {
- return "class Test { <T> Class<@TA T> m() { throw new RuntimeException(); } }";
+ return "class %TEST_CLASS_NAME% { <T> Class<@TA T> m() { throw new RuntimeException(); } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_RETURN)
- })
- public String useInReturn3() {
- return "class Test { <T extends @TA Object> @TB T m() { throw new RuntimeException(); } }";
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_RETURN)
+ public String useInReturn3() {
+ return "class %TEST_CLASS_NAME% { <T extends @TA Object> @TB T m() { throw new RuntimeException(); } }";
}
@TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
paramIndex = 0, genericLocation = {3, 0})
public String useInParam1() {
- return "class Test { <T> void m(Class<@TA T> p) { throw new RuntimeException(); } }";
+ return "class %TEST_CLASS_NAME% { <T> void m(Class<@TA T> p) { throw new RuntimeException(); } }";
}
@TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
paramIndex = 0, genericLocation = {3, 0})
public String useInParam2() {
- return "class Test { void m(Class<@TA Object> p) { throw new RuntimeException(); } }";
+ return "class %TEST_CLASS_NAME% { void m(Class<@TA Object> p) { throw new RuntimeException(); } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 2),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
- })
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 2)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
public String useInParam3() {
return "interface IA {} " +
"interface IB<XB> {} " +
"interface IC<XC> {} " +
- "class Test { <T extends @TA IB<IA> & @TB IC<IA>> void m(@TC T p) { throw new RuntimeException(); } }";
+ "class %TEST_CLASS_NAME% { <T extends @TA IB<IA> & @TB IC<IA>> void m(@TC T p) { throw new RuntimeException(); } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
paramIndex = 0, boundIndex = 1,
- genericLocation = {}),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {})
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
paramIndex = 0, boundIndex = 2,
- genericLocation = {}),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {})
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
paramIndex = 0)
- })
public String useInParam4() {
- return "class Test {" +
+ return "class %TEST_CLASS_NAME% {" +
" interface IA {} " +
" interface IB<XB> {} " +
" interface IC<XC> {} " +
" <T extends @TA IB<IA> & @TB IC<IA>> void m(@TC T p) { throw new RuntimeException(); } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
paramIndex = 0, boundIndex = 0,
- genericLocation = {}),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {})
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
paramIndex = 0, boundIndex = 0,
- genericLocation = {1, 0}),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {1, 0})
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
paramIndex = 0, boundIndex = 0,
- genericLocation = {1, 0, 3, 0}),
- })
- public String useInParam5() {
- return "class Test {" +
+ genericLocation = {1, 0, 3, 0})
+ public String useInParam5() {
+ return "class %TEST_CLASS_NAME% {" +
" interface IA {} " +
" class CB<XC> {} " +
- " <T extends @TA Test. @TB CB<@TC IA>> void m(T p) { throw new RuntimeException(); } }";
+ " <T extends @TA %TEST_CLASS_NAME%. @TB CB<@TC IA>> void m(T p) { throw new RuntimeException(); } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER,
- paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER,
+ paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
paramIndex = 0, boundIndex = 0,
- genericLocation = {}),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {})
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
paramIndex = 0, boundIndex = 0,
- genericLocation = {1, 0, 3, 0}),
- @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {1, 0, 3, 0})
+ @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
paramIndex = 0, boundIndex = 1,
- genericLocation = {}),
- @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {})
+ @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
paramIndex = 0, boundIndex = 1,
genericLocation = {3, 0})
- })
public String useInParam6() {
- return "class Test {" +
+ return "class %TEST_CLASS_NAME% {" +
" interface IA {} " +
" interface IB<XB> {} " +
" class CC<XC> {} " +
" interface ID<XD> {} " +
- " <@TA T extends @TB Test.CC<@TC IA> & Test. @TD ID<@TE IA>> void m(T p) { throw new RuntimeException(); } }";
+ " <@TA T extends @TB %TEST_CLASS_NAME%.CC<@TC IA> & %TEST_CLASS_NAME%. @TD ID<@TE IA>> void m(T p) { throw new RuntimeException(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ public String regularClassRepeatableAnnotation() {
+ return "<@RTA @RTA K extends @RTB @RTB Date, @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> void test() { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ public String regularClassRepeatableAnnotation2() {
+ return "<@RTA @RTA K extends @RTB @RTB Date, @RTC @RTC V extends @RTE @RTE Cloneable> void test() { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ public String regularClassParameterizedRepeatableAnnotation() {
+ return "<K extends @RTA @RTA Map<String, @RTB @RTB String>, V extends @RTF @RTF Object" +
+ " & @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> void test() { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ public String abstractClassRepeatableAnnotation() {
+ return "abstract class %TEST_CLASS_NAME% { abstract <@RTA @RTA K extends @RTB @RTB Date," +
+ " @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> void test(); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ public String abstractClassParameterizedRepeatableAnnotation() {
+ return "abstract class %TEST_CLASS_NAME% { abstract <K extends @RTE @RTE Object &" +
+ " @RTA @RTA Map<String, @RTB @RTB String>, V extends @RTF @RTF Object &" +
+ " @RTC @RTC List<@RTD @RTD Object>> void test(); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+ public String abstractClassParameterizedRepeatableAnnotation2() {
+ return "abstract class %TEST_CLASS_NAME% { abstract <K extends @RTA @RTA Map<String, @RTB @RTB String>," +
+ " V extends @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> void test(); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ public String abstractClassParameterizedRepeatableAnnotation3() {
+ return "abstract class %TEST_CLASS_NAME% { abstract <K extends @RTA @RTA List<String>," +
+ " V extends @RTB @RTB List<Object>> void test(); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+ @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ public String regularInterfaceRepeatableAnnotation() {
+ return "interface %TEST_CLASS_NAME% { <@RTA @RTA K extends @RTB @RTB Date," +
+ " @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> void test(); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+ @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+ @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+ @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+ @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+ public String regularInterfaceParameterizedRepeatableAnnotation() {
+ return "interface %TEST_CLASS_NAME% { <@RTF @RTF K extends @RTA @RTA Map<String, @RTB @RTB String>," +
+ " @RTE @RTE V extends @RTC @RTC List<@RTD @RTD Object>> void test(); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+ public String useInReturnRepeatableAnnotation1() {
+ return "class %TEST_CLASS_NAME% { <T> @RTA @RTA T m() { throw new RuntimeException(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN, genericLocation = {3, 0})
+ public String useInReturnRepeatableAnnotation2() {
+ return "class %TEST_CLASS_NAME% { <T> Class<@RTA @RTA T> m() { throw new RuntimeException(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN)
+ public String useInReturnRepeatableAnnotation3() {
+ return "class %TEST_CLASS_NAME% { <T extends @RTA @RTA Object> @RTB @RTB T m() { throw new RuntimeException(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 0, genericLocation = {3, 0})
+ public String useInParamRepeatableAnnotation1() {
+ return "class %TEST_CLASS_NAME% { <T> void m(Class<@RTA @RTA T> p) { throw new RuntimeException(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 0, genericLocation = {3, 0})
+ public String useInParamRepeatableAnnotation2() {
+ return "class %TEST_CLASS_NAME% { void m(Class<@RTA @RTA Object> p) { throw new RuntimeException(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 2)
+ @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ public String useInParamRepeatableAnnotation3() {
+ return "interface IA {} " +
+ "interface IB<XB> {} " +
+ "interface IC<XC> {} " +
+ "class %TEST_CLASS_NAME% { <T extends @RTA @RTA IB<IA> & @RTB @RTB IC<IA>>" +
+ " void m(@RTC @RTC T p) { throw new RuntimeException(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 1,
+ genericLocation = {})
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 2,
+ genericLocation = {})
+ @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+ paramIndex = 0)
+ public String useInParamRepeatableAnnotation4() {
+ return "class %TEST_CLASS_NAME% {" +
+ " interface IA {} " +
+ " interface IB<XB> {} " +
+ " interface IC<XC> {} " +
+ " <T extends @RTA @RTA IB<IA> & @RTB @RTB IC<IA>>" +
+ " void m(@RTC @RTC T p) { throw new RuntimeException(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 0,
+ genericLocation = {})
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 0,
+ genericLocation = {1, 0})
+ @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 0,
+ genericLocation = {1, 0, 3, 0})
+ public String useInParamRepeatableAnnotation5() {
+ return "class %TEST_CLASS_NAME% {" +
+ " interface IA {} " +
+ " class CB<XC> {} " +
+ " <T extends @RTA @RTA %TEST_CLASS_NAME%. @RTB @RTB" +
+ " CB<@RTC @RTC IA>> void m(T p) { throw new RuntimeException(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER,
+ paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 0,
+ genericLocation = {})
+ @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 0,
+ genericLocation = {1, 0, 3, 0})
+ @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 1,
+ genericLocation = {})
+ @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 1,
+ genericLocation = {3, 0})
+ public String useInParamRepeatableAnnotation6() {
+ return "class %TEST_CLASS_NAME% {" +
+ " interface IA {} " +
+ " interface IB<XB> {} " +
+ " class CC<XC> {} " +
+ " interface ID<XD> {} " +
+ " <@RTA @RTA T extends @RTB @RTB %TEST_CLASS_NAME%.CC<@RTC @RTC IA> &" +
+ " %TEST_CLASS_NAME%. @RTD @RTD ID<@RTE @RTE IA>> void m(T p) { throw new RuntimeException(); } }";
}
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/MultiCatch.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/MultiCatch.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,7 +25,7 @@
/*
* @test
- * @bug 8006732 8006775
+ * @bug 8006732 8006775 8042451
* @summary Test population of reference info for multicatch exception parameters
* @author Werner Dietl
* @compile -g Driver.java ReferenceInfoUtil.java MultiCatch.java
@@ -33,35 +33,59 @@
*/
public class MultiCatch {
- @TADescriptions({
- @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0),
- @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
- })
+ @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+ @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
public String multiCatch1() {
return "void multiCatch1() { " +
"try { new Object(); } catch (@TA NullPointerException | @TB IndexOutOfBoundsException e) { e.toString(); } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0),
- @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1),
- @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2),
- })
+ @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+ @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+ @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
public String multiCatch2() {
return "void multiCatch2() { " +
"try { new Object(); } catch (@TA NullPointerException | @TB IndexOutOfBoundsException | @TC IllegalArgumentException e) { e.toString(); } }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 1),
- @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1),
- @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2),
- @TADescription(annotation = "TD", type = EXCEPTION_PARAMETER, exceptionIndex = 2),
- @TADescription(annotation = "TE", type = EXCEPTION_PARAMETER, exceptionIndex = 3),
- })
+ @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+ @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+ @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+ @TADescription(annotation = "TD", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+ @TADescription(annotation = "TE", type = EXCEPTION_PARAMETER, exceptionIndex = 3)
public String multiCatch3() {
return "void multiCatch3() { " +
"try { new Object(); } catch (NullPointerException e1) {}" +
"try { new Object(); } catch (@TA @TB NullPointerException | @TC @TD IndexOutOfBoundsException | @TE IllegalArgumentException e2) { e2.toString(); } }";
}
+
+ @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+ @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+ public String multiCatchRepeatableAnnotation1() {
+ return "void multiCatch1() { " +
+ "try { new Object(); } catch (@RTA @RTA NullPointerException |" +
+ " @RTB @RTB IndexOutOfBoundsException e) { e.toString(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+ @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+ @TADescription(annotation = "RTCs", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+ public String multiCatchRepeatableAnnotation2() {
+ return "void multiCatch2() { " +
+ "try { new Object(); } catch (@RTA @RTA NullPointerException |" +
+ " @RTB @RTB IndexOutOfBoundsException | @RTC @RTC IllegalArgumentException e) { e.toString(); } }";
+ }
+
+ @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+ @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+ @TADescription(annotation = "RTCs", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+ @TADescription(annotation = "RTDs", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+ @TADescription(annotation = "RTEs", type = EXCEPTION_PARAMETER, exceptionIndex = 3)
+ public String multiCatchRepeatableAnnotation3() {
+ return "void multiCatch3() { " +
+ "try { new Object(); } catch (NullPointerException e1) {}" +
+ "try { new Object(); } catch (@RTA @RTA @RTB @RTB NullPointerException |" +
+ " @RTC @RTC @RTD @RTD IndexOutOfBoundsException |" +
+ " @RTE @RTE IllegalArgumentException e2) { e2.toString(); } }";
+ }
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/NestedTypes.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/NestedTypes.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,6 +25,7 @@
/*
* @test
+ * @bug 8042451 8044009 8044010
* @summary Test population of reference info for nested types
* @compile -g Driver.java ReferenceInfoUtil.java NestedTypes.java
* @run main Driver NestedTypes
@@ -33,22 +34,18 @@
// method parameters
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {}, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {1, 0}, paramIndex = 0)
- })
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {}, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0}, paramIndex = 0)
public String testParam1() {
return "void test(@TA Outer.@TB Inner a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0}, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 1, 0}, paramIndex = 0)
- })
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 1, 0}, paramIndex = 0)
public String testParam1b() {
return "void test(List<@TA Outer.@TB Inner> a) { }";
}
@@ -63,10 +60,9 @@
return "void test(java.util.@TA Map.Entry a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {}, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {}, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
genericLocation = {1, 0}, paramIndex = 0)
})
public String testParam1d() {
@@ -79,10 +75,9 @@
return "void test(List<java.util.@TA Map.Entry> a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0}, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
genericLocation = {3, 0, 1, 0}, paramIndex = 0)
})
public String testParam1f() {
@@ -96,89 +91,81 @@
return "void test(List<java.util.Map. @TB Entry> a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {}, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {1, 0}, paramIndex = 0)
- })
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {}, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0}, paramIndex = 0)
public String testParam2() {
return "void test(@TA GOuter<String,String>.@TB GInner<String,String> a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0}, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 1, 0}, paramIndex = 0)
- })
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 1, 0}, paramIndex = 0)
public String testParam2b() {
return "void test(List<@TA GOuter<String,String>.@TB GInner<String,String>> a) { }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {0, 0, 0, 0}, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {0, 0, 0, 0, 1, 0}, paramIndex = 0),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0),
- @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0),
- @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0),
- @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0),
- @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0),
- @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0),
- @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0),
- @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
- @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {0, 0}, paramIndex = 0)
- })
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0)
+ @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0}, paramIndex = 0)
public String testParam3() {
return "class Outer {\n" +
" class GInner<X> {\n" +
" class GInner2<Y, Z> {}\n" +
"}}\n\n" +
- "class Test {\n" +
+ "class %TEST_CLASS_NAME% {\n" +
" void test(@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[] a) { }\n" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 0, 0, 0, 0}, paramIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}, paramIndex = 0),
- @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0),
- @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0),
- @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0),
- @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0),
- @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0),
- @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0),
- @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0),
- @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0}, paramIndex = 0),
- @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
- genericLocation = {3, 0, 0, 0}, paramIndex = 0)
- })
+ @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0)
+ @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0}, paramIndex = 0)
+ @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0}, paramIndex = 0)
public String testParam4() {
return "class Outer {\n" +
" class GInner<X> {\n" +
" class GInner2<Y, Z> {}\n" +
"}}\n\n" +
- "class Test {\n" +
+ "class %TEST_CLASS_NAME% {\n" +
" void test(List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]> a) { }\n" +
"}";
}
@@ -186,14 +173,12 @@
// Local variables
- @TADescriptions({
- @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
- genericLocation = {},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
- genericLocation = {1, 0},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
- })
+ @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
+ genericLocation = {},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
+ genericLocation = {1, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
public String testLocal1a() {
return "void test() { @TA Outer.@TB Inner a = null; }";
}
@@ -212,104 +197,99 @@
return "void test() { Outer.@TB Inner a = null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
- genericLocation = {},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
- genericLocation = {1, 0},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
- })
+ @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
+ genericLocation = {},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
+ genericLocation = {1, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
public String testLocal2() {
return "void test() { @TA GOuter<String,String>.@TB GInner<String,String> a = null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
- genericLocation = {0, 0, 0, 0},
- lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
- genericLocation = {0, 0, 0, 0, 1, 0},
- lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0},
- lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
- lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TE", type = LOCAL_VARIABLE,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
- lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TF", type = LOCAL_VARIABLE,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
- lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TG", type = LOCAL_VARIABLE,
- genericLocation = {0, 0, 0, 0, 1, 0, 1, 0},
- lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TH", type = LOCAL_VARIABLE,
- genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
- lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TI", type = LOCAL_VARIABLE,
- genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
- lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TJ", type = LOCAL_VARIABLE,
- genericLocation = {},
- lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TK", type = LOCAL_VARIABLE,
- genericLocation = {0, 0},
- lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
- })
+ @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TE", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TF", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TG", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TH", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TI", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TJ", type = LOCAL_VARIABLE,
+ genericLocation = {},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TK", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
public String testLocal3() {
return "class Outer {\n" +
" class GInner<X> {\n" +
" class GInner2<Y, Z> {}\n" +
"}}\n\n" +
- "class Test {\n" +
+ "class %TEST_CLASS_NAME% {\n" +
" void test() { @TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[] a = null; }\n" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
- genericLocation = {3, 0, 0, 0, 0, 0},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TE", type = LOCAL_VARIABLE,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TF", type = LOCAL_VARIABLE,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TG", type = LOCAL_VARIABLE,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TH", type = LOCAL_VARIABLE,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TI", type = LOCAL_VARIABLE,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TJ", type = LOCAL_VARIABLE,
- genericLocation = {3, 0},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
- @TADescription(annotation = "TK", type = LOCAL_VARIABLE,
- genericLocation = {3, 0, 0, 0},
- lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
- })
+
+ @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TE", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TF", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TG", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TH", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TI", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TJ", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "TK", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
public String testLocal4() {
return "class Outer {\n" +
" class GInner<X> {\n" +
" class GInner2<Y, Z> {}\n" +
"}}\n\n" +
- "class Test {\n" +
+ "class %TEST_CLASS_NAME% {\n" +
" void test() { List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]> a = null; }\n" +
"}";
}
@@ -317,12 +297,10 @@
// fields
- @TADescriptions({
- @TADescription(annotation = "TA", type = FIELD,
- genericLocation = {}),
- @TADescription(annotation = "TB", type = FIELD,
- genericLocation = {1, 0})
- })
+ @TADescription(annotation = "TA", type = FIELD,
+ genericLocation = {})
+ @TADescription(annotation = "TB", type = FIELD,
+ genericLocation = {1, 0})
public String testField1a() {
return "@TA Outer.@TB Inner a;";
}
@@ -339,79 +317,73 @@
return "Outer.@TB Inner a;";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = FIELD,
- genericLocation = {}),
- @TADescription(annotation = "TB", type = FIELD,
- genericLocation = {1, 0})
- })
+ @TADescription(annotation = "TA", type = FIELD,
+ genericLocation = {})
+ @TADescription(annotation = "TB", type = FIELD,
+ genericLocation = {1, 0})
public String testField2() {
return "@TA GOuter<String,String>.@TB GInner<String,String> a;";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = FIELD,
- genericLocation = {0, 0, 0, 0}),
- @TADescription(annotation = "TB", type = FIELD,
- genericLocation = {0, 0, 0, 0, 1, 0}),
- @TADescription(annotation = "TC", type = FIELD,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0}),
- @TADescription(annotation = "TD", type = FIELD,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
- @TADescription(annotation = "TE", type = FIELD,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0}),
- @TADescription(annotation = "TF", type = FIELD,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
- @TADescription(annotation = "TG", type = FIELD,
- genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}),
- @TADescription(annotation = "TH", type = FIELD,
- genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0}),
- @TADescription(annotation = "TI", type = FIELD,
- genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1}),
- @TADescription(annotation = "TJ", type = FIELD),
- @TADescription(annotation = "TK", type = FIELD,
- genericLocation = {0, 0})
- })
+ @TADescription(annotation = "TA", type = FIELD,
+ genericLocation = {0, 0, 0, 0})
+ @TADescription(annotation = "TB", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "TC", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "TD", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "TE", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+ @TADescription(annotation = "TF", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+ @TADescription(annotation = "TG", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0})
+ @TADescription(annotation = "TH", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "TI", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+ @TADescription(annotation = "TJ", type = FIELD)
+ @TADescription(annotation = "TK", type = FIELD,
+ genericLocation = {0, 0})
public String testField3() {
return "class Outer {\n" +
" class GInner<X> {\n" +
" class GInner2<Y, Z> {}\n" +
"}}\n\n" +
- "class Test {\n" +
+ "class %TEST_CLASS_NAME% {\n" +
" @TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[] a;\n" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = FIELD,
- genericLocation = {3, 0, 0, 0, 0, 0}),
- @TADescription(annotation = "TB", type = FIELD,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}),
- @TADescription(annotation = "TC", type = FIELD,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0}),
- @TADescription(annotation = "TD", type = FIELD,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
- @TADescription(annotation = "TE", type = FIELD,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0}),
- @TADescription(annotation = "TF", type = FIELD,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
- @TADescription(annotation = "TG", type = FIELD,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}),
- @TADescription(annotation = "TH", type = FIELD,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0}),
- @TADescription(annotation = "TI", type = FIELD,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1}),
- @TADescription(annotation = "TJ", type = FIELD,
- genericLocation = {3, 0}),
- @TADescription(annotation = "TK", type = FIELD,
- genericLocation = {3, 0, 0, 0})
- })
+ @TADescription(annotation = "TA", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "TB", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "TC", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "TD", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "TE", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+ @TADescription(annotation = "TF", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+ @TADescription(annotation = "TG", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0})
+ @TADescription(annotation = "TH", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "TI", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+ @TADescription(annotation = "TJ", type = FIELD,
+ genericLocation = {3, 0})
+ @TADescription(annotation = "TK", type = FIELD,
+ genericLocation = {3, 0, 0, 0})
public String testField4() {
return "class Outer {\n" +
" class GInner<X> {\n" +
" class GInner2<Y, Z> {}\n" +
"}}\n\n" +
- "class Test {\n" +
+ "class %TEST_CLASS_NAME% {\n" +
" List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]> a;\n" +
"}";
}
@@ -419,121 +391,111 @@
// return types
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN,
- genericLocation = {}),
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = {1, 0})
- })
+ @TADescription(annotation = "TA", type = METHOD_RETURN,
+ genericLocation = {})
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = {1, 0})
public String testReturn1() {
return "@TA Outer.@TB Inner test() { return null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN,
- genericLocation = {}),
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = {1, 0})
- })
+ @TADescription(annotation = "TA", type = METHOD_RETURN,
+ genericLocation = {})
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = {1, 0})
public String testReturn2() {
return "@TA GOuter<String,String>.@TB GInner<String,String> test() { return null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN,
- genericLocation = {0, 0, 0, 0}),
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = {0, 0, 0, 0, 1, 0}),
- @TADescription(annotation = "TC", type = METHOD_RETURN,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0}),
- @TADescription(annotation = "TD", type = METHOD_RETURN,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
- @TADescription(annotation = "TE", type = METHOD_RETURN,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0}),
- @TADescription(annotation = "TF", type = METHOD_RETURN,
- genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
- @TADescription(annotation = "TG", type = METHOD_RETURN,
- genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}),
- @TADescription(annotation = "TH", type = METHOD_RETURN,
- genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0}),
- @TADescription(annotation = "TI", type = METHOD_RETURN,
- genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1}),
- @TADescription(annotation = "TJ", type = METHOD_RETURN),
- @TADescription(annotation = "TK", type = METHOD_RETURN,
- genericLocation = {0, 0})
- })
+ @TADescription(annotation = "TA", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0})
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "TC", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "TD", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "TE", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+ @TADescription(annotation = "TF", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+ @TADescription(annotation = "TG", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0})
+ @TADescription(annotation = "TH", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "TI", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+ @TADescription(annotation = "TJ", type = METHOD_RETURN)
+ @TADescription(annotation = "TK", type = METHOD_RETURN,
+ genericLocation = {0, 0})
public String testReturn3() {
return "class Outer {\n" +
" class GInner<X> {\n" +
" class GInner2<Y, Z> {}\n" +
"}}\n\n" +
- "class Test {\n" +
+ "class %TEST_CLASS_NAME% {\n" +
" @TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[] test() { return null; }\n" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN,
- genericLocation = {3, 0, 0, 0, 0, 0}),
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}),
- @TADescription(annotation = "TC", type = METHOD_RETURN,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0}),
- @TADescription(annotation = "TD", type = METHOD_RETURN,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
- @TADescription(annotation = "TE", type = METHOD_RETURN,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0}),
- @TADescription(annotation = "TF", type = METHOD_RETURN,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
- @TADescription(annotation = "TG", type = METHOD_RETURN,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}),
- @TADescription(annotation = "TH", type = METHOD_RETURN,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0}),
- @TADescription(annotation = "TI", type = METHOD_RETURN,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1}),
- @TADescription(annotation = "TJ", type = METHOD_RETURN,
- genericLocation = {3, 0}),
- @TADescription(annotation = "TK", type = METHOD_RETURN,
- genericLocation = {3, 0, 0, 0})
- })
+ @TADescription(annotation = "TA", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "TC", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "TD", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "TE", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+ @TADescription(annotation = "TF", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+ @TADescription(annotation = "TG", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0})
+ @TADescription(annotation = "TH", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "TI", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+ @TADescription(annotation = "TJ", type = METHOD_RETURN,
+ genericLocation = {3, 0})
+ @TADescription(annotation = "TK", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0})
public String testReturn4() {
return "class Outer {\n" +
" class GInner<X> {\n" +
" class GInner2<Y, Z> {}\n" +
"}}\n\n" +
- "class Test {\n" +
+ "class %TEST_CLASS_NAME% {\n" +
" List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]> test() { return null; }\n" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_RETURN,
- genericLocation = {3, 0}),
- @TADescription(annotation = "TB", type = METHOD_RETURN,
- genericLocation = {3, 0, 3, 0}),
- @TADescription(annotation = "TC", type = METHOD_RETURN,
- genericLocation = {3, 0, 3, 1}),
- @TADescription(annotation = "TD", type = METHOD_RETURN,
- genericLocation = {3, 0, 3, 1, 3, 0}),
- @TADescription(annotation = "TE", type = METHOD_RETURN,
- genericLocation = {3, 0, 1, 0}),
- @TADescription(annotation = "TF", type = METHOD_RETURN,
- genericLocation = {3, 0, 1, 0, 3, 0}),
- @TADescription(annotation = "TG", type = METHOD_RETURN,
- genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
- @TADescription(annotation = "TH", type = METHOD_RETURN,
- genericLocation = {3, 0, 1, 0, 3, 0, 3, 0}),
- @TADescription(annotation = "TI", type = METHOD_RETURN,
- genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
- @TADescription(annotation = "TJ", type = METHOD_RETURN,
- genericLocation = {3, 0, 1, 0, 1, 0}),
- })
+ @TADescription(annotation = "TA", type = METHOD_RETURN,
+ genericLocation = {3, 0})
+ @TADescription(annotation = "TB", type = METHOD_RETURN,
+ genericLocation = {3, 0, 3, 0})
+ @TADescription(annotation = "TC", type = METHOD_RETURN,
+ genericLocation = {3, 0, 3, 1})
+ @TADescription(annotation = "TD", type = METHOD_RETURN,
+ genericLocation = {3, 0, 3, 1, 3, 0})
+ @TADescription(annotation = "TE", type = METHOD_RETURN,
+ genericLocation = {3, 0, 1, 0})
+ @TADescription(annotation = "TF", type = METHOD_RETURN,
+ genericLocation = {3, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "TG", type = METHOD_RETURN,
+ genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "TH", type = METHOD_RETURN,
+ genericLocation = {3, 0, 1, 0, 3, 0, 3, 0})
+ @TADescription(annotation = "TI", type = METHOD_RETURN,
+ genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+ @TADescription(annotation = "TJ", type = METHOD_RETURN,
+ genericLocation = {3, 0, 1, 0, 1, 0})
public String testReturn5() {
return "class GOuter<A, B> {\n" +
" class GInner<X> {\n" +
" class GInner2<Y, Z> {}\n" +
"}}\n\n" +
- "class Test {\n" +
+ "class %TEST_CLASS_NAME% {\n" +
" List<@TA GOuter<@TB String, @TC List<@TD Object>> . @TE GInner<@TF List<@TG Object @TH[] @TI[]>>. @TJ GInner2<String, String>> test() { return null; }\n" +
"}";
}
@@ -541,138 +503,128 @@
// type parameters
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
- genericLocation = {}, paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {}, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {1, 0}, paramIndex = 0, boundIndex = 0)
- })
public String testTypeparam1() {
return "<X extends @TA Outer.@TB Inner> X test() { return null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
- genericLocation = {}, paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {}, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {1, 0}, paramIndex = 0, boundIndex = 0)
- })
public String testTypeparam2() {
return "<X extends @TA GOuter<String,String>.@TB GInner<String,String>> X test() { return null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {},
- paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {1, 0},
- paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {1, 0, 3, 0},
- paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
- paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {1, 0, 3, 0, 3, 0},
- paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {1, 0, 3, 0, 3, 0, 0, 0},
- paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {1, 0, 1, 0},
- paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {1, 0, 1, 0, 3, 0},
- paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {1, 0, 1, 0, 3, 1},
- paramIndex = 0, boundIndex = 0),
- })
+ paramIndex = 0, boundIndex = 0)
public String testTypeparam3() {
return "class Outer {\n" +
" class GInner<X> {\n" +
" class GInner2<Y, Z> {}\n" +
"}}\n\n" +
- "class Test {\n" +
+ "class %TEST_CLASS_NAME% {\n" +
" <X extends @TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object>> X test() { return null; }\n" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {3, 0, 0, 0, 0, 0},
- paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {3, 0, 0, 0, 0, 0, 1, 0},
- paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0},
- paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
- paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
- paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
- paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0},
- paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
- paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
- paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TJ", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TJ", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {3, 0},
- paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TK", type = METHOD_TYPE_PARAMETER_BOUND,
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TK", type = METHOD_TYPE_PARAMETER_BOUND,
genericLocation = {3, 0, 0, 0},
paramIndex = 0, boundIndex = 1)
- })
public String testTypeparam4() {
return "class Outer {\n" +
" class GInner<X> {\n" +
" class GInner2<Y, Z> {}\n" +
"}}\n\n" +
- "class Test {\n" +
+ "class %TEST_CLASS_NAME% {\n" +
" <X extends List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]>> X test() { return null; }\n" +
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
- genericLocation = {3, 0}, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
- genericLocation = {3, 0, 3, 0}, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
- genericLocation = {3, 0, 3, 1}, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
- genericLocation = {3, 0, 3, 1, 3, 0}, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
- genericLocation = {3, 0, 1, 0}, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
- genericLocation = {3, 0, 1, 0, 3, 0}, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
- genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
- genericLocation = {3, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
- genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0, boundIndex = 1),
- @TADescription(annotation = "TJ", type = METHOD_TYPE_PARAMETER_BOUND,
- genericLocation = {3, 0, 1, 0, 1, 0}, paramIndex = 0, boundIndex = 1),
- })
+ @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 3, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 3, 1}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 3, 1, 3, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 1, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 1, 0, 3, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "TJ", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 1, 0, 1, 0}, paramIndex = 0, boundIndex = 1)
public String testTypeparam5() {
return "class GOuter<A, B> {\n" +
" class GInner<X> {\n" +
" class GInner2<Y, Z> {}\n" +
"}}\n\n" +
- "class Test {\n" +
+ "class %TEST_CLASS_NAME% {\n" +
" <X extends List<@TA GOuter<@TB String, @TC List<@TD Object>> . @TE GInner<@TF List<@TG Object @TH[] @TI[]>>. @TJ GInner2<String, String>>> X test() { return null; }\n" +
"}";
}
@@ -680,91 +632,89 @@
@TADescription(annotation = "TA", type = FIELD,
genericLocation = {3, 0, 1, 0})
public String testUses1a() {
- return "class Test { class Inner {} List<@TA Inner> f; }";
+ return "class %TEST_CLASS_NAME% { class Inner {} List<@TA Inner> f; }";
}
@TADescription(annotation = "TA", type = FIELD,
genericLocation = {3, 0})
public String testUses1b() {
- return "class Test { class Inner {} List<@TA Test.Inner> f; }";
+ return "class %TEST_CLASS_NAME% { class Inner {} List<@TA %TEST_CLASS_NAME%.Inner> f; }";
}
@TADescription(annotation = "TA", type = FIELD,
genericLocation = {3, 0, 1, 0, 1, 0})
- @TestClass("Test$Inner")
+ @TestClass("%TEST_CLASS_NAME%$Inner")
public String testUses2a() {
- return "class Test { class Inner { class Inner2{} List<@TA Inner2> f; }}";
+ return "class %TEST_CLASS_NAME% { class Inner { class Inner2{} List<@TA Inner2> f; }}";
}
@TADescription(annotation = "TA", type = FIELD,
genericLocation = {3, 0, 1, 0})
- @TestClass("Test$Inner")
+ @TestClass("%TEST_CLASS_NAME%$Inner")
public String testUses2b() {
- return "class Test { class Inner { class Inner2{} List<@TA Inner.Inner2> f; }}";
+ return "class %TEST_CLASS_NAME% { class Inner { class Inner2{} List<@TA Inner.Inner2> f; }}";
}
@TADescription(annotation = "TA", type = FIELD,
genericLocation = {3, 0, 1, 0, 1, 0})
- @TestClass("Test$Inner")
+ @TestClass("%TEST_CLASS_NAME%$Inner")
public String testUses2c() {
- return "class Test { class Inner { class Inner2{} List<Inner.@TA Inner2> f; }}";
+ return "class %TEST_CLASS_NAME% { class Inner { class Inner2{} List<Inner.@TA Inner2> f; }}";
}
@TADescription(annotation = "TA", type = FIELD,
genericLocation = {3, 0})
- @TestClass("Test$Inner")
+ @TestClass("%TEST_CLASS_NAME%$Inner")
public String testUses2d() {
- return "class Test{ class Inner { class Inner2{} List<@TA Test.Inner.Inner2> f; }}";
+ return "class %TEST_CLASS_NAME%{ class Inner { class Inner2{} List<@TA %TEST_CLASS_NAME%.Inner.Inner2> f; }}";
}
@TADescription(annotation = "TA", type = FIELD,
genericLocation = {3, 0, 1, 0})
- @TestClass("Test$Inner")
+ @TestClass("%TEST_CLASS_NAME%$Inner")
public String testUses2e() {
- return "class Test { class Inner { class Inner2{} List<Test.@TA Inner.Inner2> f; }}";
+ return "class %TEST_CLASS_NAME% { class Inner { class Inner2{} List<%TEST_CLASS_NAME%.@TA Inner.Inner2> f; }}";
}
@TADescription(annotation = "TA", type = FIELD,
genericLocation = {3, 0, 1, 0, 1, 0})
- @TestClass("Test$Inner")
+ @TestClass("%TEST_CLASS_NAME%$Inner")
public String testUses2f() {
- return "class Test { class Inner { class Inner2{} List<Test.Inner.@TA Inner2> f; }}";
+ return "class %TEST_CLASS_NAME% { class Inner { class Inner2{} List<%TEST_CLASS_NAME%.Inner.@TA Inner2> f; }}";
}
@TADescription(annotation = "TA", type = FIELD,
genericLocation = {3, 0, 1, 0, 1, 0})
- @TestClass("Test$Inner")
+ @TestClass("%TEST_CLASS_NAME%$Inner")
public String testUses3a() {
- return "class Test { class Inner<A, B> { class Inner2<C, D>{}\n" +
- " List<Test.Inner.@TA Inner2> f; }}";
+ return "class %TEST_CLASS_NAME% { class Inner<A, B> { class Inner2<C, D>{}\n" +
+ " List<%TEST_CLASS_NAME%.Inner.@TA Inner2> f; }}";
}
@TADescription(annotation = "TA", type = FIELD,
genericLocation = {3, 0, 1, 0})
- @TestClass("Test$Inner")
+ @TestClass("%TEST_CLASS_NAME%$Inner")
public String testUses3b() {
- return "class Test { class Inner<A, B> { class Inner2<C, D>{}\n" +
- " List<Test.@TA Inner.Inner2> f; }}";
+ return "class %TEST_CLASS_NAME% { class Inner<A, B> { class Inner2<C, D>{}\n" +
+ " List<%TEST_CLASS_NAME%.@TA Inner.Inner2> f; }}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = FIELD,
- genericLocation = {}),
- @TADescription(annotation = "TB", type = FIELD,
+ @TADescription(annotation = "TA", type = FIELD,
+ genericLocation = {})
+ @TADescription(annotation = "TB", type = FIELD,
genericLocation = {3, 0})
- })
public String testUses4() {
- return "class Test { static class TInner {}\n" +
+ return "class %TEST_CLASS_NAME% { static class TInner {}\n" +
" @TA TInner f; \n" +
" List<@TB TInner> g; }";
}
@TADescription(annotation = "TA", type = FIELD,
genericLocation = {3, 0, 1, 0, 3, 1})
- @TestClass("Test$Inner")
+ @TestClass("%TEST_CLASS_NAME%$Inner")
public String testUses3c() {
- return "class Test { class Inner<A, B> { class Inner2<C, D>{}\n" +
- " List<Test.Inner<String, @TA Object>.Inner2<Test, Test>> f; }}";
+ return "class %TEST_CLASS_NAME% { class Inner<A, B> { class Inner2<C, D>{}\n" +
+ " List<%TEST_CLASS_NAME%.Inner<String, @TA Object>.Inner2<%TEST_CLASS_NAME%, %TEST_CLASS_NAME%>> f; }}";
}
@TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex=0)
@@ -778,24 +728,22 @@
return "void testme(List<java.security.@TA ProtectionDomain> protectionDomain) {}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
+ @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
genericLocation = {},
lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
- lvarIndex = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
+ lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
genericLocation = {1, 0},
lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
- lvarIndex = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
+ lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
// Only classes count, not methods.
genericLocation = {1, 0, 1, 0},
lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
- lvarIndex = ReferenceInfoUtil.IGNORE_VALUE),
- })
+ lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
@TestClass("Outer$Inner")
public String testMethodNesting1() {
return "class Outer {\n" +
@@ -808,18 +756,16 @@
"}}\n";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = NEW,
+ @TADescription(annotation = "TA", type = NEW,
genericLocation = {},
- offset = 0),
- @TADescription(annotation = "TB", type = NEW,
+ offset = 0)
+ @TADescription(annotation = "TB", type = NEW,
genericLocation = {1, 0},
- offset = 0),
- @TADescription(annotation = "TC", type = NEW,
+ offset = 0)
+ @TADescription(annotation = "TC", type = NEW,
// Only classes count, not methods.
genericLocation = {1, 0, 1, 0},
- offset = 12),
- })
+ offset = 12)
@TestClass("Outer$Inner")
public String testMethodNesting2() {
return "class Outer {\n" +
@@ -832,20 +778,18 @@
"}}\n";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_EXTENDS,
- genericLocation = {}, typeIndex = -1),
- @TADescription(annotation = "TB", type = CLASS_EXTENDS,
- genericLocation = {3, 0}, typeIndex = -1),
- @TADescription(annotation = "TC", type = CLASS_EXTENDS,
- genericLocation = {3, 1}, typeIndex = -1),
- @TADescription(annotation = "TD", type = CLASS_EXTENDS,
- genericLocation = {1, 0}, typeIndex = -1),
- @TADescription(annotation = "TE", type = CLASS_EXTENDS,
- genericLocation = {1, 0, 3, 0}, typeIndex = -1),
- @TADescription(annotation = "TF", type = CLASS_EXTENDS,
+ @TADescription(annotation = "TA", type = CLASS_EXTENDS,
+ genericLocation = {}, typeIndex = -1)
+ @TADescription(annotation = "TB", type = CLASS_EXTENDS,
+ genericLocation = {3, 0}, typeIndex = -1)
+ @TADescription(annotation = "TC", type = CLASS_EXTENDS,
+ genericLocation = {3, 1}, typeIndex = -1)
+ @TADescription(annotation = "TD", type = CLASS_EXTENDS,
+ genericLocation = {1, 0}, typeIndex = -1)
+ @TADescription(annotation = "TE", type = CLASS_EXTENDS,
+ genericLocation = {1, 0, 3, 0}, typeIndex = -1)
+ @TADescription(annotation = "TF", type = CLASS_EXTENDS,
genericLocation = {1, 0, 3, 1}, typeIndex = -1)
- })
@TestClass("GOuter$GInner$Test")
public String testExtends1() {
return "class GOuter<A, B> {\n" +
@@ -855,19 +799,17 @@
"}";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER,
- genericLocation = {}, paramIndex = 0),
- @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND,
- genericLocation = {}, paramIndex = 0, boundIndex = 0),
- @TADescription(annotation = "TC", type = FIELD,
- genericLocation = {}),
- @TADescription(annotation = "TD", type = FIELD,
+ @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER,
+ genericLocation = {}, paramIndex = 0)
+ @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND,
+ genericLocation = {}, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "TC", type = FIELD,
+ genericLocation = {})
+ @TADescription(annotation = "TD", type = FIELD,
genericLocation = {3, 0})
- })
- @TestClass("Test$1Nested")
+ @TestClass("%TEST_CLASS_NAME%$1Nested")
public String testNestedInMethod1() {
- return "class Test {\n" +
+ return "class %TEST_CLASS_NAME% {\n" +
" void foobar() {\n" +
" class Nested<@TA X extends @TB Object> {\n" +
" @TC List<@TD Object> f;\n" +
@@ -875,4 +817,781 @@
" }" +
"}";
}
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {}, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0}, paramIndex = 0)
+ public String testParamRepeatableAnnotation1() {
+ return "void test(@RTA @RTA Outer.@RTB @RTB Inner a) { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 1, 0}, paramIndex = 0)
+ public String testParamRepeatableAnnotation1b() {
+ return "void test(List<@RTA @RTA Outer.@RTB @RTB Inner> a) { }";
+ }
+
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0}, paramIndex = 0)
+ public String testParamRepeatableAnnotation1g() {
+ return "void test(List<java.util.Map. @RTB @RTB Entry> a) { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {}, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {1, 0}, paramIndex = 0)
+ public String testParamRepeatableAnnotation2() {
+ return "void test(@RTA @RTA GOuter<String,String>.@RTB @RTB GInner<String,String> a) { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 1, 0}, paramIndex = 0)
+ public String testParamRepeatableAnnotation2b() {
+ return "void test(List<@RTA @RTA GOuter<String,String>.@RTB @RTB GInner<String,String>> a) { }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTDs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTEs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTFs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTGs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTHs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTIs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0)
+ @TADescription(annotation = "RTJs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+ @TADescription(annotation = "RTKs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {0, 0}, paramIndex = 0)
+ public String testParamRepeatableAnnotation3() {
+ return "class Outer {\n" +
+ " class GInner<X> {\n" +
+ " class GInner2<Y, Z> {}\n" +
+ "}}\n\n" +
+ "class %TEST_CLASS_NAME% {\n" +
+ " void test(@RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+ " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer, @RTI @RTI Object>" +
+ " @RTJ @RTJ[] @RTK @RTK[] a) { }\n" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTDs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTEs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTFs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTGs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTHs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTIs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0)
+ @TADescription(annotation = "RTJs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0}, paramIndex = 0)
+ @TADescription(annotation = "RTKs", type = METHOD_FORMAL_PARAMETER,
+ genericLocation = {3, 0, 0, 0}, paramIndex = 0)
+ public String testParamRepeatableAnnotation4() {
+ return "class Outer {\n" +
+ " class GInner<X> {\n" +
+ " class GInner2<Y, Z> {}\n" +
+ "}}\n\n" +
+ "class %TEST_CLASS_NAME% {\n" +
+ " void test(List<@RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+ " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer," +
+ " @RTI @RTI Object> @RTJ @RTJ[] @RTK @RTK[]> a) { }\n" +
+ "}";
+ }
+
+ // Local variables
+
+ @TADescription(annotation = "RTAs", type = LOCAL_VARIABLE,
+ genericLocation = {},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTBs", type = LOCAL_VARIABLE,
+ genericLocation = {1, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ public String testLocalRepeatableAnnotation1a() {
+ return "void test() { @RTA @RTA Outer.@RTB @RTB Inner a = null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = LOCAL_VARIABLE,
+ genericLocation = {},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ public String testLocalRepeatableAnnotation1b() {
+ return "void test() { @RTA @RTA Outer.Inner a = null; }";
+ }
+
+ @TADescription(annotation = "RTBs", type = LOCAL_VARIABLE,
+ genericLocation = {1, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ public String testLocalRepeatableAnnotation1c() {
+ return "void test() { Outer.@RTB @RTB Inner a = null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = LOCAL_VARIABLE,
+ genericLocation = {},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTBs", type = LOCAL_VARIABLE,
+ genericLocation = {1, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ public String testLocalRepeatableAnnotation2() {
+ return "void test() { @RTA @RTA GOuter<String,String>.@RTB @RTB GInner<String,String> a = null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTBs", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTCs", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTDs", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTEs", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTFs", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTGs", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTHs", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTIs", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTJs", type = LOCAL_VARIABLE,
+ genericLocation = {},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTKs", type = LOCAL_VARIABLE,
+ genericLocation = {0, 0},
+ lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+ public String testLocalRepeatableAnnotation3() {
+ return "class Outer {\n" +
+ " class GInner<X> {\n" +
+ " class GInner2<Y, Z> {}\n" +
+ "}}\n\n" +
+ "class %TEST_CLASS_NAME% {\n" +
+ " void test() { @RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+ " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer, @RTI @RTI Object>" +
+ " @RTJ @RTJ[] @RTK @RTK[] a = null; }\n" +
+ "}";
+ }
+
+
+ @TADescription(annotation = "RTAs", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTBs", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTCs", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTDs", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTEs", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTFs", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTGs", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTHs", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTIs", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTJs", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ @TADescription(annotation = "RTKs", type = LOCAL_VARIABLE,
+ genericLocation = {3, 0, 0, 0},
+ lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+ public String testLocalRepeatableAnnotation4() {
+ return "class Outer {\n" +
+ " class GInner<X> {\n" +
+ " class GInner2<Y, Z> {}\n" +
+ "}}\n\n" +
+ "class %TEST_CLASS_NAME% {\n" +
+ " void test() { List<@RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD" +
+ " Object @RTE @RTE [] @RTF @RTF []>>. @RTG @RTG GInner2<@RTH @RTH" +
+ " Integer, @RTI @RTI Object> @RTJ @RTJ [] @RTK @RTK []> a = null; }\n" +
+ "}";
+ }
+
+
+ // fields
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {})
+ @TADescription(annotation = "RTBs", type = FIELD,
+ genericLocation = {1, 0})
+ public String testFieldRepeatableAnnotation1a() {
+ return "@RTA @RTA Outer.@RTB @RTB Inner a;";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {})
+ public String testFieldRepeatableAnnotation1b() {
+ return "@RTA @RTA Outer.Inner a;";
+ }
+
+ @TADescription(annotation = "RTBs", type = FIELD,
+ genericLocation = {1, 0})
+ public String testFieldRepeatableAnnotation1c() {
+ return "Outer.@RTB @RTB Inner a;";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {})
+ @TADescription(annotation = "RTBs", type = FIELD,
+ genericLocation = {1, 0})
+ public String testFieldRepeatableAnnotation2() {
+ return "@RTA @RTA GOuter<String,String>.@RTB @RTB GInner<String,String> a;";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {0, 0, 0, 0})
+ @TADescription(annotation = "RTBs", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "RTCs", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "RTDs", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "RTEs", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+ @TADescription(annotation = "RTFs", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+ @TADescription(annotation = "RTGs", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0})
+ @TADescription(annotation = "RTHs", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "RTIs", type = FIELD,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+ @TADescription(annotation = "RTJs", type = FIELD)
+ @TADescription(annotation = "RTKs", type = FIELD,
+ genericLocation = {0, 0})
+ public String testFieldRepeatableAnnotation3() {
+ return "class Outer {\n" +
+ " class GInner<X> {\n" +
+ " class GInner2<Y, Z> {}\n" +
+ "}}\n\n" +
+ "class %TEST_CLASS_NAME% {\n" +
+ " @RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object @RTE @RTE[] @RTF @RTF[]>>." +
+ " @RTG @RTG GInner2<@RTH @RTH Integer, @RTI @RTI Object> @RTJ @RTJ[] @RTK @RTK[] a;\n" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "RTBs", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "RTCs", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "RTDs", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "RTEs", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+ @TADescription(annotation = "RTFs", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+ @TADescription(annotation = "RTGs", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0})
+ @TADescription(annotation = "RTHs", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "RTIs", type = FIELD,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+ @TADescription(annotation = "RTJs", type = FIELD,
+ genericLocation = {3, 0})
+ @TADescription(annotation = "RTKs", type = FIELD,
+ genericLocation = {3, 0, 0, 0})
+ public String testFieldRepeatableAnnotation4() {
+ return "class Outer {\n" +
+ " class GInner<X> {\n" +
+ " class GInner2<Y, Z> {}\n" +
+ "}}\n\n" +
+ "class %TEST_CLASS_NAME% {\n" +
+ " List<@RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+ " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer," +
+ " @RTI @RTI Object> @RTJ @RTJ[] @RTK @RTK[]> a;\n" +
+ "}";
+ }
+
+
+ // return types
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+ genericLocation = {})
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = {1, 0})
+ public String testReturnRepeatableAnnotation1() {
+ return "@RTA @RTA Outer.@RTB @RTB Inner test() { return null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+ genericLocation = {})
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = {1, 0})
+ public String testReturnRepeatableAnnotation2() {
+ return "@RTA @RTA GOuter<String,String>." +
+ "@RTB @RTB GInner<String,String> test() { return null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0})
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "RTDs", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "RTEs", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+ @TADescription(annotation = "RTFs", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+ @TADescription(annotation = "RTGs", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0})
+ @TADescription(annotation = "RTHs", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "RTIs", type = METHOD_RETURN,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+ @TADescription(annotation = "RTJs", type = METHOD_RETURN)
+ @TADescription(annotation = "RTKs", type = METHOD_RETURN,
+ genericLocation = {0, 0})
+ public String testReturnRepeatableAnnotation3() {
+ return "class Outer {\n" +
+ " class GInner<X> {\n" +
+ " class GInner2<Y, Z> {}\n" +
+ "}}\n\n" +
+ "class %TEST_CLASS_NAME% {\n" +
+ " @RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object @RTE @RTE[]" +
+ " @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer," +
+ " @RTI @RTI Object> @RTJ @RTJ[] @RTK @RTK[] test() { return null; }\n" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "RTDs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "RTEs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+ @TADescription(annotation = "RTFs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+ @TADescription(annotation = "RTGs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0})
+ @TADescription(annotation = "RTHs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "RTIs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+ @TADescription(annotation = "RTJs", type = METHOD_RETURN,
+ genericLocation = {3, 0})
+ @TADescription(annotation = "RTKs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 0, 0})
+ public String testReturnRepeatableAnnotation4() {
+ return "class Outer {\n" +
+ " class GInner<X> {\n" +
+ " class GInner2<Y, Z> {}\n" +
+ "}}\n\n" +
+ "class %TEST_CLASS_NAME% {\n" +
+ " List<@RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+ " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer," +
+ " @RTI @RTI Object> @RTJ @RTJ[] @RTK @RTK[]> test() { return null; }\n" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+ genericLocation = {3, 0})
+ @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 3, 0})
+ @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 3, 1})
+ @TADescription(annotation = "RTDs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 3, 1, 3, 0})
+ @TADescription(annotation = "RTEs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 1, 0})
+ @TADescription(annotation = "RTFs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 1, 0, 3, 0})
+ @TADescription(annotation = "RTGs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "RTHs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 1, 0, 3, 0, 3, 0})
+ @TADescription(annotation = "RTIs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+ @TADescription(annotation = "RTJs", type = METHOD_RETURN,
+ genericLocation = {3, 0, 1, 0, 1, 0})
+ public String testReturnRepeatableAnnotation5() {
+ return "class GOuter<A, B> {\n" +
+ " class GInner<X> {\n" +
+ " class GInner2<Y, Z> {}\n" +
+ "}}\n\n" +
+ "class %TEST_CLASS_NAME% {\n" +
+ " List<@RTA @RTA GOuter<@RTB @RTB String, @RTC @RTC List<@RTD @RTD Object>> ." +
+ " @RTE @RTE GInner<@RTF @RTF List<@RTG @RTG Object @RTH @RTH[] @RTI @RTI[]>>." +
+ " @RTJ @RTJ GInner2<String, String>> test() { return null; }\n" +
+ "}";
+ }
+
+
+ // type parameters
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {}, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {1, 0}, paramIndex = 0, boundIndex = 0)
+ public String testTypeparamRepeatableAnnotation1() {
+ return "<X extends @RTA @RTA Outer.@RTB @RTB Inner> X test() { return null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {}, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {1, 0}, paramIndex = 0, boundIndex = 0)
+ public String testTypeparamRepeatableAnnotation2() {
+ return "<X extends @RTA @RTA GOuter<String,String>.@RTB @RTB GInner<String,String>> X test() { return null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {},
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {1, 0},
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {1, 0, 3, 0},
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {1, 0, 3, 0, 3, 0},
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {1, 0, 3, 0, 3, 0, 0, 0},
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTGs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {1, 0, 1, 0},
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTHs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {1, 0, 1, 0, 3, 0},
+ paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTIs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {1, 0, 1, 0, 3, 1},
+ paramIndex = 0, boundIndex = 0)
+ public String testTypeparamRepeatableAnnotation3() {
+ return "class Outer {\n" +
+ " class GInner<X> {\n" +
+ " class GInner2<Y, Z> {}\n" +
+ "}}\n\n" +
+ "class %TEST_CLASS_NAME% {\n" +
+ " <X extends @RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+ " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer," +
+ " @RTI @RTI Object>> X test() { return null; }\n" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 0, 0, 0, 0},
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0},
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0},
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTGs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0},
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTHs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTIs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTJs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0},
+ paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTKs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 0, 0},
+ paramIndex = 0, boundIndex = 1)
+ public String testTypeparamRepeatableAnnotation4() {
+ return "class Outer {\n" +
+ " class GInner<X> {\n" +
+ " class GInner2<Y, Z> {}\n" +
+ "}}\n\n" +
+ "class %TEST_CLASS_NAME% {\n" +
+ " <X extends List<@RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+ " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer," +
+ " @RTI @RTI Object> @RTJ @RTJ[] @RTK @RTK[]>> X test() { return null; }\n" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 3, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 3, 1}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 3, 1, 3, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 1, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 1, 0, 3, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTGs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTHs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTIs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0, boundIndex = 1)
+ @TADescription(annotation = "RTJs", type = METHOD_TYPE_PARAMETER_BOUND,
+ genericLocation = {3, 0, 1, 0, 1, 0}, paramIndex = 0, boundIndex = 1)
+ public String testTypeparamRepeatableAnnotation5() {
+ return "class GOuter<A, B> {\n" +
+ " class GInner<X> {\n" +
+ " class GInner2<Y, Z> {}\n" +
+ "}}\n\n" +
+ "class %TEST_CLASS_NAME% {\n" +
+ " <X extends List<@RTA @RTA GOuter<@RTB @RTB String, @RTC @RTC List<@RTD @RTD Object>> ." +
+ " @RTE @RTE GInner<@RTF @RTF List<@RTG @RTG Object @RTH @RTH[] @RTI @RTI[]>>." +
+ " @RTJ @RTJ GInner2<String, String>>> X test() { return null; }\n" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {3, 0, 1, 0})
+ public String testUsesRepeatableAnnotation1a() {
+ return "class %TEST_CLASS_NAME% { class Inner {} List<@RTA @RTA Inner> f; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {3, 0})
+ public String testUsesRepeatableAnnotation1b() {
+ return "class %TEST_CLASS_NAME% { class Inner {} List<@RTA @RTA %TEST_CLASS_NAME%.Inner> f; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {3, 0, 1, 0, 1, 0})
+ @TestClass("%TEST_CLASS_NAME%$Inner")
+ public String testUsesRepeatableAnnotation2a() {
+ return "class %TEST_CLASS_NAME% { class Inner { class Inner2{} List<@RTA @RTA Inner2> f; }}";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {3, 0, 1, 0})
+ @TestClass("%TEST_CLASS_NAME%$Inner")
+ public String testUsesRepeatableAnnotation2b() {
+ return "class %TEST_CLASS_NAME% { class Inner { class Inner2{} List<@RTA @RTA Inner.Inner2> f; }}";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {3, 0, 1, 0, 1, 0})
+ @TestClass("%TEST_CLASS_NAME%$Inner")
+ public String testUsesRepeatableAnnotation2c() {
+ return "class %TEST_CLASS_NAME% { class Inner { class Inner2{} List<Inner.@RTA @RTA Inner2> f; }}";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {3, 0})
+ @TestClass("%TEST_CLASS_NAME%$Inner")
+ public String testUsesRepeatableAnnotation2d() {
+ return "class %TEST_CLASS_NAME%{ class Inner { class Inner2{}" +
+ " List<@RTA @RTA %TEST_CLASS_NAME%.Inner.Inner2> f; }}";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {3, 0, 1, 0})
+ @TestClass("%TEST_CLASS_NAME%$Inner")
+ public String testUsesRepeatableAnnotation2e() {
+ return "class %TEST_CLASS_NAME% { class Inner { class Inner2{}" +
+ " List<%TEST_CLASS_NAME%.@RTA @RTA Inner.Inner2> f; }}";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {3, 0, 1, 0, 1, 0})
+ @TestClass("%TEST_CLASS_NAME%$Inner")
+ public String testUsesRepeatableAnnotation2f() {
+ return "class %TEST_CLASS_NAME% { class Inner { class Inner2{}" +
+ " List<%TEST_CLASS_NAME%.Inner.@RTA @RTA Inner2> f; }}";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {3, 0, 1, 0, 1, 0})
+ @TestClass("%TEST_CLASS_NAME%$Inner")
+ public String testUsesRepeatableAnnotation3a() {
+ return "class %TEST_CLASS_NAME% { class Inner<A, B> { class Inner2<C, D>{}\n" +
+ " List<%TEST_CLASS_NAME%.Inner.@RTA @RTA Inner2> f; }}";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {3, 0, 1, 0})
+ @TestClass("%TEST_CLASS_NAME%$Inner")
+ public String testUsesRepeatableAnnotation3b() {
+ return "class %TEST_CLASS_NAME% { class Inner<A, B> { class Inner2<C, D>{}\n" +
+ " List<%TEST_CLASS_NAME%.@RTA @RTA Inner.Inner2> f; }}";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {})
+ @TADescription(annotation = "RTBs", type = FIELD,
+ genericLocation = {3, 0})
+ public String testUsesRepeatableAnnotation4() {
+ return "class %TEST_CLASS_NAME% { static class TInner {}\n" +
+ " @RTA @RTA TInner f; \n" +
+ " List<@RTB @RTB TInner> g; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD,
+ genericLocation = {3, 0, 1, 0, 3, 1})
+ @TestClass("%TEST_CLASS_NAME%$Inner")
+ public String testUsesRepeatableAnnotation3c() {
+ return "class %TEST_CLASS_NAME% { class Inner<A, B> { class Inner2<C, D>{}\n" +
+ " List<%TEST_CLASS_NAME%.Inner<String," +
+ " @RTA @RTA Object>.Inner2<%TEST_CLASS_NAME%, %TEST_CLASS_NAME%>> f; }}";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex=0)
+ public String testFullyQualifiedRepeatableAnnotation1() {
+ return "void testme(java.security.@RTA @RTA ProtectionDomain protectionDomain) {}";
+ }
+
+ @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex=0,
+ genericLocation = {3, 0})
+ public String testFullyQualifiedRepeatableAnnotation2() {
+ return "void testme(List<java.security.@RTA @RTA ProtectionDomain> protectionDomain) {}";
+ }
+
+ @TADescription(annotation = "RTAs", type = LOCAL_VARIABLE,
+ genericLocation = {},
+ lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
+ lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
+ lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = LOCAL_VARIABLE,
+ genericLocation = {1, 0},
+ lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
+ lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
+ lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTCs", type = LOCAL_VARIABLE,
+ // Only classes count, not methods.
+ genericLocation = {1, 0, 1, 0},
+ lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
+ lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
+ lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+ @TestClass("Outer$Inner")
+ public String testMethodNestingRepeatableAnnotation1() {
+ return "class Outer {\n" +
+ " class Inner {\n" +
+ " void foo() {\n" +
+ " class MInner {}\n" +
+ " @RTA @RTA Outer . @RTB @RTB Inner l1 = null;\n" +
+ " @RTC @RTC MInner l2 = null;\n" +
+ " }\n" +
+ "}}\n";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW,
+ genericLocation = {},
+ offset = 0)
+ @TADescription(annotation = "RTBs", type = NEW,
+ genericLocation = {1, 0},
+ offset = 0)
+ @TADescription(annotation = "RTCs", type = NEW,
+ // Only classes count, not methods.
+ genericLocation = {1, 0, 1, 0},
+ offset = 12)
+ @TestClass("Outer$Inner")
+ public String testMethodNestingRepeatableAnnotation2() {
+ return "class Outer {\n" +
+ " class Inner {\n" +
+ " void foo() {\n" +
+ " class MInner {}\n" +
+ " Object o1 = new @RTA @RTA Outer . @RTB @RTB Inner();" +
+ " Object o2 = new @RTC @RTC MInner();\n" +
+ " }\n" +
+ "}}\n";
+ }
+
+ @TADescription(annotation = "RTAs", type = CLASS_EXTENDS,
+ genericLocation = {}, typeIndex = -1)
+ @TADescription(annotation = "RTBs", type = CLASS_EXTENDS,
+ genericLocation = {3, 0}, typeIndex = -1)
+ @TADescription(annotation = "RTCs", type = CLASS_EXTENDS,
+ genericLocation = {3, 1}, typeIndex = -1)
+ @TADescription(annotation = "RTDs", type = CLASS_EXTENDS,
+ genericLocation = {1, 0}, typeIndex = -1)
+ @TADescription(annotation = "RTEs", type = CLASS_EXTENDS,
+ genericLocation = {1, 0, 3, 0}, typeIndex = -1)
+ @TADescription(annotation = "RTFs", type = CLASS_EXTENDS,
+ genericLocation = {1, 0, 3, 1}, typeIndex = -1)
+ @TestClass("GOuter$GInner$Test")
+ public String testExtendsRepeatableAnnotation1() {
+ return "class GOuter<A, B> {\n" +
+ " class GInner<X, Y> {\n" +
+ " class Test extends @RTA @RTA GOuter<@RTB @RTB String," +
+ " @RTC @RTC String>.@RTD @RTD GInner<@RTE @RTE String, @RTF @RTF String> {}" +
+ " }" +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER,
+ genericLocation = {}, paramIndex = 0)
+ @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND,
+ genericLocation = {}, paramIndex = 0, boundIndex = 0)
+ @TADescription(annotation = "RTCs", type = FIELD,
+ genericLocation = {})
+ @TADescription(annotation = "RTDs", type = FIELD,
+ genericLocation = {3, 0})
+ @TestClass("%TEST_CLASS_NAME%$1Nested")
+ public String testNestedInMethodRepeatableAnnotation1() {
+ return "class %TEST_CLASS_NAME% {\n" +
+ " void foobar() {\n" +
+ " class Nested<@RTA @RTA X extends @RTB @RTB Object> {\n" +
+ " @RTC @RTC List<@RTD @RTD Object> f;\n" +
+ " }\n" +
+ " }" +
+ "}";
+ }
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/NewObjects.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/NewObjects.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,6 +25,7 @@
/*
* @test
+ * @bug 8042451
* @summary Test population of reference info for new object creations
* @compile -g Driver.java ReferenceInfoUtil.java NewObjects.java
* @run main Driver NewObjects
@@ -36,11 +37,9 @@
return "Object returnObject() { return new @TA String(); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = NEW,
- genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
+ @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
public String returnObjectGeneric() {
return "Object returnObjectGeneric() { return new @TA ArrayList<@TB String>(); }";
}
@@ -50,13 +49,11 @@
return "void initObject() { Object a = new @TA String(); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = NEW,
- genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TC", type = NEW,
- genericLocation = { 3, 1 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
+ @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TC", type = NEW,
+ genericLocation = { 3, 1 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
public String initObjectGeneric() {
return "void initObjectGeneric() { Object a = new @TA HashMap<@TB String, @TC String>(); }";
}
@@ -66,90 +63,182 @@
return "void eqtestObject() { if (null == new @TA String()); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = NEW,
- genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
+ @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
public String eqtestObjectGeneric() {
return "void eqtestObjectGeneric() { if (null == new @TA ArrayList<@TB String >()); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {0, 0}),
- @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
+ @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0})
+ @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
public String returnNewArray1() {
return "Object returnNewArray1() { return new @TA String @TB[1]; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {0, 0, 0, 0}),
- @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {0, 0}),
- })
+ @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0})
+ @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0})
public String returnNewArray2() {
return "Object returnNewArray2() { return new @TA String @TB [1] @TC [2]; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {0, 0, 0, 0}),
- @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {0, 0, 0, 0, 1, 0}),
- @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TD", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {0, 0}),
- })
+ @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0})
+ @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TD", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0})
public String returnNewArray3() {
return "Object returnNewArray3() { return new @TA Outer. @TB Inner @TC [1] @TD [2]; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {0, 0, 0, 0}),
- @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {0, 0, 0, 0, 1, 0}),
- @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}),
- @TADescription(annotation = "TD", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TE", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {0, 0}),
- })
+ @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0})
+ @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0})
+ @TADescription(annotation = "TD", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TE", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0})
public String returnNewArray4() {
return "Object returnNewArray4() { return new @TA Outer. @TB Middle. @TC MInner @TD [1] @TE [2]; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {3, 0, 0, 0, 0, 0}),
- @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}),
- @TADescription(annotation = "TD", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}),
- @TADescription(annotation = "TE", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {3, 0}),
- @TADescription(annotation = "TF", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {3, 0, 0, 0}),
- })
+ @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "TD", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0})
+ @TADescription(annotation = "TE", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {3, 0})
+ @TADescription(annotation = "TF", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {3, 0, 0, 0})
public String returnNewArray5() {
return "Object returnNewArray5() { return new @TA ArrayList<@TB Outer. @TC Middle. @TD MInner @TE [] @TF []>(); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {0, 0, 0, 0}),
- @TADescription(annotation = "TB", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {0, 0, 0, 0, 1, 0}),
- @TADescription(annotation = "TC", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TD", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
- genericLocation = {0, 0}),
- })
+ @TADescription(annotation = "TA", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0})
+ @TADescription(annotation = "TB", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "TC", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TD", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0})
public String arrayField() {
return "@TA Outer. @TB Inner @TC [] @TD [] f;";
}
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String returnObjectRepeatableAnnotation() {
+ return "Object returnObject() { return new @RTA @RTA String(); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String returnObjectGenericRepeatableAnnotation() {
+ return "Object returnObjectGeneric() { return new @RTA @RTA ArrayList<@RTB @RTB String>(); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String initObjectRepeatableAnnotation() {
+ return "void initObject() { Object a = new @RTA @RTA String(); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTCs", type = NEW,
+ genericLocation = { 3, 1 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String initObjectGenericRepeatableAnnotation() {
+ return "void initObjectGeneric() { Object a = new @RTA @RTA HashMap<@RTB @RTB String, @RTC @RTC String>(); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String eqtestObjectRepeatableAnnotation() {
+ return "void eqtestObject() { if (null == new @RTA @RTA String()); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = NEW,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String eqtestObjectGenericRepeatableAnnotation() {
+ return "void eqtestObjectGeneric() { if (null == new @RTA @RTA ArrayList<@RTB @RTB String >()); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0})
+ @TADescription(annotation = "RTBs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String returnNewArrayRepeatableAnnotation1() {
+ return "Object returnNewArray1() { return new @RTA @RTA String @RTB @RTB[1]; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0})
+ @TADescription(annotation = "RTBs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTCs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0})
+ public String returnNewArrayRepeatableAnnotation2() {
+ return "Object returnNewArray2() { return new @RTA @RTA String @RTB @RTB [1] @RTC @RTC [2]; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0})
+ @TADescription(annotation = "RTBs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "RTCs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTDs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0})
+ public String returnNewArrayRepeatableAnnotation3() {
+ return "Object returnNewArray3() { return new @RTA @RTA Outer. @RTB @RTB Inner @RTC @RTC [1] @RTD @RTD [2]; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0})
+ @TADescription(annotation = "RTBs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "RTCs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0, 1, 0, 1, 0})
+ @TADescription(annotation = "RTDs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTEs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0})
+ public String returnNewArrayRepeatableAnnotation4() {
+ return "Object returnNewArray4() { return new @RTA @RTA Outer." +
+ " @RTB @RTB Middle. @RTC @RTC MInner @RTD @RTD [1] @RTE @RTE [2]; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {3, 0, 0, 0, 0, 0})
+ @TADescription(annotation = "RTCs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "RTDs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0})
+ @TADescription(annotation = "RTEs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {3, 0})
+ @TADescription(annotation = "RTFs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {3, 0, 0, 0})
+ public String returnNewArrayRepeatableAnnotation5() {
+ return "Object returnNewArray5() { return new @RTA @RTA ArrayList<@RTB @RTB Outer." +
+ " @RTC @RTC Middle. @RTD @RTD MInner @RTE @RTE [] @RTF @RTF []>(); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0})
+ @TADescription(annotation = "RTBs", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0, 0, 0, 1, 0})
+ @TADescription(annotation = "RTCs", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTDs", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ genericLocation = {0, 0})
+ public String arrayFieldRepeatableAnnotation() {
+ return "@RTA @RTA Outer. @RTB @RTB Inner @RTC @RTC [] @RTD @RTD [] f;";
+ }
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/ReferenceInfoUtil.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/ReferenceInfoUtil.java Wed Jun 18 13:14:15 2014 -0700
@@ -41,7 +41,7 @@
public static final int IGNORE_VALUE = -321;
public static List<TypeAnnotation> extendedAnnotationsOf(ClassFile cf) {
- List<TypeAnnotation> annos = new ArrayList<TypeAnnotation>();
+ List<TypeAnnotation> annos = new ArrayList<>();
findAnnotations(cf, annos);
return annos;
}
@@ -119,128 +119,6 @@
}
}
- /////////////////// TA Position Builder ///////////////////////
- /* TODO: comment out this dead code. Was this unfinished code that was
- * supposed to be used somewhere? The tests pass without this.
- private static class TAPositionBuilder {
- private TypeAnnotation.Position pos = new TypeAnnotation.Position();
-
- private TAPositionBuilder() { }
-
- public TypeAnnotation.Position build() { return pos; }
-
- public static TAPositionBuilder ofType(TypeAnnotation.TargetType type) {
- TAPositionBuilder builder = new TAPositionBuilder();
- builder.pos.type = type;
- return builder;
- }
-
- public TAPositionBuilder atOffset(int offset) {
- switch (pos.type) {
- // type cast
- case TYPECAST:
- // instanceof
- case INSTANCEOF:
- // new expression
- case NEW:
- pos.offset = offset;
- break;
- default:
- throw new IllegalArgumentException("invalid field for given type: " + pos.type);
- }
- return this;
- }
-
- public TAPositionBuilder atLocalPosition(int offset, int length, int index) {
- switch (pos.type) {
- // local variable
- case LOCAL_VARIABLE:
- pos.lvarOffset = new int[] { offset };
- pos.lvarLength = new int[] { length };
- pos.lvarIndex = new int[] { index };
- break;
- default:
- throw new IllegalArgumentException("invalid field for given type: " + pos.type);
- }
- return this;
- }
-
- public TAPositionBuilder atParameterIndex(int index) {
- switch (pos.type) {
- // type parameters
- case CLASS_TYPE_PARAMETER:
- case METHOD_TYPE_PARAMETER:
- // method parameter
- case METHOD_FORMAL_PARAMETER:
- pos.parameter_index = index;
- break;
- default:
- throw new IllegalArgumentException("invalid field for given type: " + pos.type);
- }
- return this;
- }
-
- public TAPositionBuilder atParamBound(int param, int bound) {
- switch (pos.type) {
- // type parameters bounds
- case CLASS_TYPE_PARAMETER_BOUND:
- case METHOD_TYPE_PARAMETER_BOUND:
- pos.parameter_index = param;
- pos.bound_index = bound;
- break;
- default:
- throw new IllegalArgumentException("invalid field for given type: " + pos.type);
- }
- return this;
- }
-
- public TAPositionBuilder atWildcardPosition(TypeAnnotation.Position pos) {
- switch (pos.type) {
- // wildcards
- case WILDCARD_BOUND:
- pos.wildcard_position = pos;
- break;
- default:
- throw new IllegalArgumentException("invalid field for given type: " + pos.type);
- }
- return this;
- }
-
- public TAPositionBuilder atTypeIndex(int index) {
- switch (pos.type) {
- // class extends or implements clauses
- case CLASS_EXTENDS:
- // throws
- case THROWS:
- pos.type_index = index;
- break;
- default:
- throw new IllegalArgumentException("invalid field for given type: " + pos.type);
- }
- return this;
- }
-
- public TAPositionBuilder atOffsetWithIndex(int offset, int index) {
- switch (pos.type) {
- // method type argument: wasn't specified
- case NEW_TYPE_ARGUMENT:
- case METHOD_TYPE_ARGUMENT:
- pos.offset = offset;
- pos.type_index = index;
- break;
- default:
- throw new IllegalArgumentException("invalid field for given type: " + pos.type);
- }
- return this;
- }
-
- public TAPositionBuilder atGenericLocation(Integer ...loc) {
- pos.location = Arrays.asList(loc);
- pos.type = pos.type.getGenericComplement();
- return this;
- }
- }*/
-
/////////////////////// Equality testing /////////////////////
private static boolean areEquals(int a, int b) {
return a == b || a == IGNORE_VALUE || b == IGNORE_VALUE;
@@ -264,21 +142,18 @@
}
public static boolean areEquals(TypeAnnotation.Position p1, TypeAnnotation.Position p2) {
- if (p1 == p2)
- return true;
- if (p1 == null || p2 == null)
- return false;
+ return p1 == p2 || !(p1 == null || p2 == null) &&
+ p1.type == p2.type &&
+ (p1.location.equals(p2.location)) &&
+ areEquals(p1.offset, p2.offset) &&
+ areEquals(p1.lvarOffset, p2.lvarOffset) &&
+ areEquals(p1.lvarLength, p2.lvarLength) &&
+ areEquals(p1.lvarIndex, p2.lvarIndex) &&
+ areEquals(p1.bound_index, p2.bound_index) &&
+ areEquals(p1.parameter_index, p2.parameter_index) &&
+ areEquals(p1.type_index, p2.type_index) &&
+ areEquals(p1.exception_index, p2.exception_index);
- return ((p1.type == p2.type)
- && (p1.location.equals(p2.location))
- && areEquals(p1.offset, p2.offset)
- && areEquals(p1.lvarOffset, p2.lvarOffset)
- && areEquals(p1.lvarLength, p2.lvarLength)
- && areEquals(p1.lvarIndex, p2.lvarIndex)
- && areEquals(p1.bound_index, p2.bound_index)
- && areEquals(p1.parameter_index, p2.parameter_index)
- && areEquals(p1.type_index, p2.type_index)
- && areEquals(p1.exception_index, p2.exception_index));
}
private static TypeAnnotation findAnnotation(String name, List<TypeAnnotation> annotations, ClassFile cf) throws InvalidIndex, UnexpectedEntry {
@@ -306,9 +181,6 @@
if (actual == null)
throw new ComparisionException("Expected annotation not found: " + aName);
- // TODO: you currently get an exception if the test case does not use all necessary
- // annotation attributes, e.g. forgetting the offset for a local variable.
- // It would be nicer to give an understandable warning instead.
if (!areEquals(expected, actual.position)) {
throw new ComparisionException("Unexpected position for annotation : " + aName +
"\n Expected: " + expected.toString() +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/ResourceVariable.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2012, 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
+ * @bug 8042451
+ * @summary Test population of reference info for resource variable
+ * @compile -g Driver.java ReferenceInfoUtil.java ResourceVariable.java
+ * @run main Driver ResourceVariable
+ */
+
+import static com.sun.tools.classfile.TypeAnnotation.TargetType.RESOURCE_VARIABLE;
+import static java.lang.System.lineSeparator;
+
+public class ResourceVariable {
+
+ @TADescription(annotation = "TA", type = RESOURCE_VARIABLE,
+ lvarOffset = {10}, lvarLength = {118}, lvarIndex = {1})
+ @TADescription(annotation = "TB", type = RESOURCE_VARIABLE,
+ lvarOffset = {22}, lvarLength = {35}, lvarIndex = {3})
+ public String testResourceVariable() {
+ return
+ "public void f() throws IOException {" + lineSeparator() +
+ " try (@TA InputStream is1 = new FileInputStream(\"\")) {" + lineSeparator() +
+ " try (@TB InputStream is2 = new FileInputStream(\"\")) {}" + lineSeparator() +
+ " }" + lineSeparator() +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = RESOURCE_VARIABLE,
+ lvarOffset = {10}, lvarLength = {30}, lvarIndex = {1})
+ public String testRepeatedAnnotation1() {
+ return
+ "public void f() throws IOException {" + lineSeparator() +
+ " try (@RTA @RTA InputStream is1 = new FileInputStream(\"\")) {}" + lineSeparator() +
+ "}";
+ }
+
+ @TADescription(annotation = "RTAs", type = RESOURCE_VARIABLE,
+ lvarOffset = {10}, lvarLength = {30}, lvarIndex = {1})
+ public String testRepeatedAnnotation2() {
+ return
+ "public void f() throws IOException {" + lineSeparator() +
+ " try (@RTAs({@RTA, @RTA}) InputStream is1 = new FileInputStream(\"\")) {}" + lineSeparator() +
+ "}";
+ }
+
+ @TADescription(annotation = "TA", type = RESOURCE_VARIABLE,
+ lvarOffset = {10}, lvarLength = {118}, lvarIndex = {1})
+ @TADescription(annotation = "TB", type = RESOURCE_VARIABLE,
+ lvarOffset = {22}, lvarLength = {35}, lvarIndex = {3})
+ public String testSeveralVariablesInTryWithResources() {
+ return
+ "public void f() throws IOException {" + lineSeparator() +
+ " try (@TA InputStream is1 = new FileInputStream(\"\");" + lineSeparator() +
+ " @TB InputStream is2 = new FileInputStream(\"\")) {}" + lineSeparator() +
+ "}";
+ }
+}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/TypeCasts.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/TypeCasts.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,6 +25,7 @@
/*
* @test
+ * @bug 8042451
* @summary Test population of reference info for type casts
* @compile -g Driver.java ReferenceInfoUtil.java TypeCasts.java
* @run main Driver TypeCasts
@@ -37,27 +38,23 @@
return "Object returnObject() { return (@TA String)null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0),
- @TADescription(annotation = "TB", type = CAST,
- genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0),
- @TADescription(annotation = "TC", type = CAST,
- genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0)
- })
+ @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "TB", type = CAST,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "TC", type = CAST,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
public String returnObjectArray() {
return "Object returnObjectArray() { return (@TC String @TA [] @TB [])null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0),
- @TADescription(annotation = "TB", type = CAST,
- genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0)
- })
+ @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "TB", type = CAST,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
public String returnObjectGeneric() {
return "Object returnObjectGeneric() { return (@TA List<@TB String>)null; }";
}
@@ -68,13 +65,11 @@
return "Object returnPrim() { return (@TA int)0; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0),
- @TADescription(annotation = "TB", type = CAST,
- genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0)
- })
+ @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "TB", type = CAST,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
public String returnPrimArray() {
return "Object returnPrimArray() { return (@TB int @TA [])null; }";
}
@@ -85,24 +80,20 @@
return "void initObject() { Object a = (@TA String)null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0),
- @TADescription(annotation = "TB", type = CAST,
- genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0)
- })
+ @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "TB", type = CAST,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
public String initObjectArray() {
return "void initObjectArray() { Object a = (@TB String @TA [])null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0),
- @TADescription(annotation = "TB", type = CAST,
- genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0)
- })
+ @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "TB", type = CAST,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
public String initObjectGeneric() {
return "void initObjectGeneric() { Object a = (@TA List<@TB String>)null; }";
}
@@ -113,13 +104,11 @@
return "void initPrim() { Object a = (@TA int)0; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0),
- @TADescription(annotation = "TB", type = CAST,
- genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0)
- })
+ @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "TB", type = CAST,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
public String initPrimArray() {
return "void initPrimArray() { Object a = (@TB int @TA [])null; }";
}
@@ -130,24 +119,20 @@
return "void eqtestObject() { if (null == (@TA String)null); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0),
- @TADescription(annotation = "TB", type = CAST,
- genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0)
- })
+ @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "TB", type = CAST,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
public String eqtestObjectArray() {
return "void eqtestObjectArray() { if (null == (@TB String @TA [])null); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0),
- @TADescription(annotation = "TB", type = CAST,
- genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0)
- })
+ @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "TB", type = CAST,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
public String eqtestObjectGeneric() {
return "void eqtestObjectGeneric() { if (null == (@TA List<@TB String >)null); }";
}
@@ -159,42 +144,182 @@
return "void eqtestPrim(int a) { if (0 == (@TA int)a); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0),
- @TADescription(annotation = "TB", type = CAST,
- genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
- typeIndex = 0)
- })
+ @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "TB", type = CAST,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
public String eqtestPrimArray() {
return "void eqtestPrimArray() { if (null == (@TB int @TA [])null); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CAST,
- offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 0),
- @TADescription(annotation = "TB", type = CAST,
- offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1),
- @TADescription(annotation = "TC", type = CAST,
- offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1,
- genericLocation = {3, 0})
- })
+ @TADescription(annotation = "TA", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 0)
+ @TADescription(annotation = "TB", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1)
+ @TADescription(annotation = "TC", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1,
+ genericLocation = {3, 0})
public String intersection1() {
return "void intersection() { Object o = (@TA String & @TB Comparable<@TC String>) null; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = CAST,
- offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 0),
- @TADescription(annotation = "TB", type = CAST,
- offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1),
- @TADescription(annotation = "TC", type = CAST,
- offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1,
- genericLocation = {3, 0}),
- @TADescription(annotation = "TD", type = CAST,
- offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 2),
- })
+ @TADescription(annotation = "TA", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 0)
+ @TADescription(annotation = "TB", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1)
+ @TADescription(annotation = "TC", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1,
+ genericLocation = {3, 0})
+ @TADescription(annotation = "TD", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 2)
public String intersection2() {
return "void intersection() { Object o = (@TA String & @TB Comparable<@TC String> & @TD CharSequence) null; }";
}
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String returnObjectRepeatableAnnotation() {
+ return "Object returnObject() { return (@RTA @RTA String)null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "RTBs", type = CAST,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "RTCs", type = CAST,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String returnObjectArrayRepeatableAnnotation() {
+ return "Object returnObjectArray() { return (@RTC @RTC String @RTA @RTA [] @RTB @RTB [])null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "RTBs", type = CAST,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String returnObjectGenericRepeatableAnnotation() {
+ return "Object returnObjectGeneric() { return (@RTA @RTA List<@RTB @RTB String>)null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String returnPrimRepeatableAnnotation() {
+ return "Object returnPrim() { return (@RTA @RTA int)0; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "RTBs", type = CAST,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String returnPrimArrayRepeatableAnnotation() {
+ return "Object returnPrimArray() { return (@RTB @RTB int @RTA @RTA [])null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String initObjectRepeatableAnnotation() {
+ return "void initObject() { Object a = (@RTA @RTA String)null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "RTBs", type = CAST,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String initObjectArrayRepeatableAnnotation() {
+ return "void initObjectArray() { Object a = (@RTB @RTB String @RTA @RTA [])null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "RTBs", type = CAST,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String initObjectGenericRepeatableAnnotation() {
+ return "void initObjectGeneric() { Object a = (@RTA @RTA List<@RTB @RTB String>)null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String initPrimRepeatableAnnotation() {
+ return "void initPrim() { Object a = (@RTA @RTA int)0; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "RTBs", type = CAST,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String initPrimArrayRepeatableAnnotation() {
+ return "void initPrimArray() { Object a = (@RTB @RTB int @RTA @RTA [])null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String eqtestObjectRepeatableAnnotation() {
+ return "void eqtestObject() { if (null == (@RTA @RTA String)null); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "RTBs", type = CAST,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String eqtestObjectArrayRepeatableAnnotation() {
+ return "void eqtestObjectArray() { if (null == (@RTB @RTB String @RTA @RTA [])null); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "RTBs", type = CAST,
+ genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String eqtestObjectGenericRepeatableAnnotation() {
+ return "void eqtestObjectGeneric() { if (null == (@RTA @RTA List<@RTB @RTB String >)null); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ // compiler optimizes away compile time constants casts
+ public String eqtestPrimRepeatableAnnotation() {
+ return "void eqtestPrim(int a) { if (0 == (@RTA @RTA int)a); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ @TADescription(annotation = "RTBs", type = CAST,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+ typeIndex = 0)
+ public String eqtestPrimArrayRepeatableAnnotation() {
+ return "void eqtestPrimArray() { if (null == (@RTB @RTB int @RTA @RTA [])null); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 0)
+ @TADescription(annotation = "RTBs", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1)
+ @TADescription(annotation = "RTCs", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1,
+ genericLocation = {3, 0})
+ public String intersectionRepeatableAnnotation1() {
+ return "void intersection() { Object o = (@RTA @RTA String & @RTB @RTB Comparable<@RTC @RTC String>) null; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 0)
+ @TADescription(annotation = "RTBs", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1)
+ @TADescription(annotation = "RTCs", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1,
+ genericLocation = {3, 0})
+ @TADescription(annotation = "RTDs", type = CAST,
+ offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 2)
+ public String intersectionRepeatableAnnotation2() {
+ return "void intersection() { Object o = (@RTA @RTA String & @RTB @RTB Comparable<@RTC @RTC String> &" +
+ " @RTD @RTD CharSequence) null; }";
+ }
}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/TypeTests.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/TypeTests.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,6 +25,7 @@
/*
* @test
+ * @bug 8042451
* @summary Test population of reference info for class literals
* @compile -g Driver.java ReferenceInfoUtil.java TypeTests.java
* @run main Driver TypeTests
@@ -36,26 +37,22 @@
return "Object returnObject() { return null instanceof @TA String; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = INSTANCEOF,
- genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TC", type = INSTANCEOF,
- genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
+ @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = INSTANCEOF,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TC", type = INSTANCEOF,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
public String returnObjectArray() {
return "Object returnObjectArray() { return null instanceof @TC String @TA [] @TB []; }";
}
// no type test for primitives
- @TADescriptions({
- @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = INSTANCEOF,
- genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TC", type = INSTANCEOF,
- genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
+ @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = INSTANCEOF,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TC", type = INSTANCEOF,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
public String returnPrimArray() {
return "Object returnPrimArray() { return null instanceof @TC int @TA [] @TB []; }";
}
@@ -68,26 +65,22 @@
return "void initObject() { Object a = null instanceof @TA String; }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = INSTANCEOF,
- genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TC", type = INSTANCEOF,
- genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
+ @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = INSTANCEOF,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TC", type = INSTANCEOF,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
public String initObjectArray() {
return "void initObjectArray() { Object a = null instanceof @TC String @TA [] @TB []; }";
}
// no primitive instanceof
- @TADescriptions({
- @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = INSTANCEOF,
- genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TC", type = INSTANCEOF,
- genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
+ @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = INSTANCEOF,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TC", type = INSTANCEOF,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
public String initPrimArray() {
return "void initPrimArray() { Object a = null instanceof @TC int @TA [] @TB []; }";
}
@@ -100,26 +93,22 @@
return "void eqtestObject() { if (true == (null instanceof @TA String)); }";
}
- @TADescriptions({
- @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = INSTANCEOF,
- genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TC", type = INSTANCEOF,
- genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
+ @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = INSTANCEOF,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TC", type = INSTANCEOF,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
public String eqtestObjectArray() {
return "void eqtestObjectArray() { if (true == (null instanceof @TC String @TA [] @TB [])); }";
}
// no primitives
- @TADescriptions({
- @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TB", type = INSTANCEOF,
- genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
- @TADescription(annotation = "TC", type = INSTANCEOF,
- genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
- })
+ @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TB", type = INSTANCEOF,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "TC", type = INSTANCEOF,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
public String eqtestPrimArray() {
return "void eqtestPrimArray() { if (true == (null instanceof @TC int @TA [] @TB [])); }";
}
@@ -127,4 +116,72 @@
// no void
// no void array
+ @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String returnObjectRepeatableAnnotation() {
+ return "Object returnObject() { return null instanceof @RTA @RTA String; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = INSTANCEOF,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTCs", type = INSTANCEOF,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String returnObjectArrayRepeatableAnnotation() {
+ return "Object returnObjectArray() { return null instanceof @RTC @RTC String @RTA @RTA [] @RTB @RTB []; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = INSTANCEOF,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTCs", type = INSTANCEOF,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String returnPrimArrayRepeatableAnnotation() {
+ return "Object returnPrimArrayRepeatableAnnotation() { return null instanceof @RTC @RTC int @RTA @RTA [] @RTB @RTB []; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String initObjectRepeatableAnnotation() {
+ return "void initObject() { Object a = null instanceof @RTA @RTA String; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = INSTANCEOF,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTCs", type = INSTANCEOF,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String initObjectArrayRepeatableAnnotation() {
+ return "void initObjectArray() { Object a = null instanceof @RTC @RTC String @RTA @RTA [] @RTB @RTB []; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = INSTANCEOF,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTCs", type = INSTANCEOF,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String initPrimArrayRepeatableAnnotation() {
+ return "void initPrimArray() { Object a = null instanceof @RTC @RTC int @RTA @RTA [] @RTB @RTB []; }";
+ }
+
+ @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String eqtestObjectRepeatableAnnotation() {
+ return "void eqtestObject() { if (true == (null instanceof @RTA @RTA String)); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = INSTANCEOF,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTCs", type = INSTANCEOF,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String eqtestObjectArrayRepeatableAnnotation() {
+ return "void eqtestObjectArray() { if (true == (null instanceof @RTC @RTC String @RTA @RTA [] @RTB @RTB [])); }";
+ }
+
+ @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTBs", type = INSTANCEOF,
+ genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ @TADescription(annotation = "RTCs", type = INSTANCEOF,
+ genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+ public String eqtestPrimArrayRepeatableAnnotation() {
+ return "void eqtestPrimArray() { if (true == (null instanceof @RTC @RTC int @RTA @RTA [] @RTB @RTB [])); }";
+ }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/api/TestSearchPaths.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,632 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 7026941
+ * @summary path options ignored when reusing filemanager across tasks
+ */
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.net.URI;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.tools.JavaCompiler;
+import javax.tools.JavaCompiler.CompilationTask;
+import javax.tools.JavaFileObject;
+import javax.tools.SimpleJavaFileObject;
+import javax.tools.StandardJavaFileManager;
+import javax.tools.StandardLocation;
+import javax.tools.ToolProvider;
+
+import static javax.tools.StandardLocation.*;
+
+/**
+ * Test for combinations of using javac command-line options and fileManager setLocation
+ * calls to affect the locations available in the fileManager.
+ *
+ * Using a single Java compiler and file manager, for each of the standard locations,
+ * a series of operations is performed, using either compiler options or setLocation
+ * calls. Each operation includes a compilation, and then a check for the value of
+ * the standard location available in the file manager.
+ *
+ * The operations generate and use unique files to minimize the possibility of false
+ * positive results.
+ */
+public class TestSearchPaths {
+
+ public static void main(String... args) throws Exception {
+ TestSearchPaths t = new TestSearchPaths();
+ t.run();
+ }
+
+ void run() throws Exception {
+ compiler = ToolProvider.getSystemJavaCompiler();
+ fileManager = compiler.getStandardFileManager(null, null, null);
+
+ // basic output path
+ testClassOutput();
+
+ // basic search paths
+ testClassPath();
+ testSourcePath();
+ testPlatformClassPath();
+
+ // annotation processing
+ testAnnotationProcessorPath();
+ testSourceOutput();
+
+ // javah equivalent
+ testNativeHeaderOutput();
+
+ // future-proof: guard against new StandardLocations being added
+ if (!tested.equals(EnumSet.allOf(StandardLocation.class))) {
+ error("not all standard locations have been tested");
+ out.println("not yet tested: " + EnumSet.complementOf(tested));
+ }
+
+ if (errors > 0) {
+ throw new Exception(errors + " errors occurred");
+ }
+ }
+
+ void testClassOutput() throws IOException {
+ String test = "testClassOutput";
+
+ for (int i = 1; i <= 5; i++) {
+ File classes = createDir(test + "/" + i + "/classes");
+ List<String> options;
+ switch (i) {
+ default:
+ options = getOptions("-d", classes.getPath());
+ break;
+
+ case 3:
+ setLocation(CLASS_OUTPUT, classes);
+ options = null;
+ break;
+ }
+ List<JavaFileObject> sources = getSources("class C" + i + " { }");
+ callTask(options, sources);
+ checkPath(CLASS_OUTPUT, Mode.EQUALS, classes);
+ checkFile(CLASS_OUTPUT, "C" + i + ".class");
+ }
+
+ tested.add(CLASS_OUTPUT);
+ }
+
+ void testClassPath() throws IOException {
+ String test = "testClassPath";
+
+ for (int i = 1; i <= 5; i++) {
+ File classes = createDir(test + "/" + i + "/classes");
+ File classpath = new File("testClassOutput/" + i + "/classes");
+ List<String> options;
+ switch (i) {
+ default:
+ options = getOptions("-d", classes.getPath(), "-classpath", classpath.getPath());
+ break;
+
+ case 3:
+ setLocation(CLASS_PATH, classpath);
+ options = getOptions("-d", classes.getPath());
+ break;
+
+ case 4:
+ options = getOptions("-d", classes.getPath(), "-cp", classpath.getPath());
+ break;
+ }
+ List<JavaFileObject> sources = getSources("class D" + i + " { C" + i + " c; }");
+ callTask(options, sources);
+ checkPath(CLASS_PATH, Mode.EQUALS, classpath);
+ checkFile(CLASS_OUTPUT, "D" + i + ".class");
+ }
+
+ tested.add(CLASS_PATH);
+ }
+
+ void testSourcePath() throws IOException {
+ String test = "testSourcePath";
+ setLocation(CLASS_PATH); // empty
+
+ for (int i = 1; i <= 5; i++) {
+ File src = createDir(test + "/" + i + "/src");
+ writeFile(src, "C" + i + ".java", "class C" + i + "{ }");
+ File classes = createDir(test + "/" + i + "/classes");
+ File srcpath = src;
+ List<String> options;
+ switch (i) {
+ default:
+ options = getOptions("-d", classes.getPath(), "-sourcepath", srcpath.getPath());
+ break;
+
+ case 3:
+ setLocation(SOURCE_PATH, srcpath);
+ options = getOptions("-d", classes.getPath());
+ break;
+ }
+ List<JavaFileObject> sources = getSources("class D" + i + " { C" + i + " c; }");
+ callTask(options, sources);
+ checkPath(SOURCE_PATH, Mode.EQUALS, srcpath);
+ checkFile(CLASS_OUTPUT, "D" + i + ".class");
+ }
+
+ tested.add(SOURCE_PATH);
+ }
+
+ void testPlatformClassPath() throws IOException {
+ String test = "testPlatformClassPath";
+
+ List<File> defaultPath = getLocation(PLATFORM_CLASS_PATH);
+ StringBuilder sb = new StringBuilder();
+ for (File f: defaultPath) {
+ if (sb.length() > 0)
+ sb.append(File.pathSeparator);
+ sb.append(f);
+ }
+ String defaultPathString = sb.toString();
+
+ setLocation(CLASS_PATH); // empty
+ setLocation(SOURCE_PATH); // empty
+
+ for (int i = 1; i <= 10; i++) {
+ File classes = createDir(test + "/" + i + "/classes");
+ File testJars = createDir(test + "/" + i + "/testJars");
+ File testClasses = createDir(test + "/" + i + "/testClasses");
+ callTask(getOptions("-d", testClasses.getPath()), getSources("class C" + i + " { }"));
+
+ List<String> options;
+ Mode mode;
+ List<File> match;
+ String reference = "C" + i + " c;";
+
+ File jar;
+
+ switch (i) {
+ case 1:
+ options = getOptions("-d", classes.getPath(), "-Xbootclasspath/p:" + testClasses);
+ mode = Mode.STARTS_WITH;
+ match = Arrays.asList(testClasses);
+ break;
+
+ case 2:
+ // the default values for -extdirs and -endorseddirs come after the bootclasspath;
+ // so to check -Xbootclasspath/a: we specify empty values for those options.
+ options = getOptions("-d", classes.getPath(),
+ "-Xbootclasspath/a:" + testClasses,
+ "-extdirs", "",
+ "-endorseddirs", "");
+ mode = Mode.ENDS_WITH;
+ match = Arrays.asList(testClasses);
+ break;
+
+ case 3:
+ options = getOptions("-d", classes.getPath(), "-Xbootclasspath:" + defaultPathString);
+ mode = Mode.EQUALS;
+ match = defaultPath;
+ reference = "";
+ break;
+
+ case 4:
+ fileManager.setLocation(PLATFORM_CLASS_PATH, null);
+ jar = new File(testJars, "j" + i + ".jar");
+ writeJar(jar, testClasses, "C" + i + ".class");
+ options = getOptions("-d", classes.getPath(), "-endorseddirs", testJars.getPath());
+ mode = Mode.CONTAINS;
+ match = Arrays.asList(jar);
+ break;
+
+ case 5:
+ fileManager.setLocation(PLATFORM_CLASS_PATH, null);
+ jar = new File(testJars, "j" + i + ".jar");
+ writeJar(jar, testClasses, "C" + i + ".class");
+ options = getOptions("-d", classes.getPath(), "-Djava.endorsed.dirs=" + testJars.getPath());
+ mode = Mode.CONTAINS;
+ match = Arrays.asList(jar);
+ break;
+
+ case 6:
+ fileManager.setLocation(PLATFORM_CLASS_PATH, null);
+ jar = new File(testJars, "j" + i + ".jar");
+ writeJar(jar, testClasses, "C" + i + ".class");
+ options = getOptions("-d", classes.getPath(), "-extdirs", testJars.getPath());
+ mode = Mode.CONTAINS;
+ match = Arrays.asList(jar);
+ break;
+
+ case 7:
+ fileManager.setLocation(PLATFORM_CLASS_PATH, null);
+ jar = new File(testJars, "j" + i + ".jar");
+ writeJar(jar, testClasses, "C" + i + ".class");
+ options = getOptions("-d", classes.getPath(), "-Djava.ext.dirs=" + testJars.getPath());
+ mode = Mode.CONTAINS;
+ match = Arrays.asList(jar);
+ break;
+
+ case 8:
+ setLocation(PLATFORM_CLASS_PATH, defaultPath);
+ options = getOptions("-d", classes.getPath());
+ mode = Mode.EQUALS;
+ match = defaultPath;
+ reference = "";
+ break;
+
+ default:
+ options = getOptions("-d", classes.getPath(), "-bootclasspath", defaultPathString);
+ mode = Mode.EQUALS;
+ match = defaultPath;
+ reference = "";
+ break;
+ }
+ List<JavaFileObject> sources = getSources("class D" + i + " { " + reference + " }");
+
+ callTask(options, sources);
+ checkPath(PLATFORM_CLASS_PATH, mode, match);
+ checkFile(CLASS_OUTPUT, "D" + i + ".class");
+ }
+
+ tested.add(PLATFORM_CLASS_PATH);
+ }
+
+ void testAnnotationProcessorPath() throws IOException {
+ String test = "testAnnotationProcessorPath";
+
+ String template =
+ "import java.util.*;\n"
+ + "import javax.annotation.processing.*;\n"
+ + "import javax.lang.model.*;\n"
+ + "import javax.lang.model.element.*;\n"
+ + "@SupportedAnnotationTypes(\"*\")\n"
+ + "public class A%d extends AbstractProcessor {\n"
+ + " public boolean process(Set<? extends TypeElement> annos, RoundEnvironment rEnv) {\n"
+ + " return true;\n"
+ + " }\n"
+ + " public SourceVersion getSupportedSourceVersion() {\n"
+ + " return SourceVersion.latest();\n"
+ + " }\n"
+ + "}";
+
+ for (int i = 1; i <= 5; i++) {
+ File classes = createDir(test + "/" + i + "/classes");
+ File annodir = createDir(test + "/" + i + "/processors");
+ callTask(getOptions("-d", annodir.getPath()), getSources(String.format(template, i)));
+ File annopath = annodir;
+ List<String> options;
+ switch (i) {
+ default:
+ options = getOptions("-d", classes.getPath(),
+ "-processorpath", annopath.getPath(),
+ "-processor", "A" + i);
+ break;
+
+ case 3:
+ setLocation(ANNOTATION_PROCESSOR_PATH, annopath);
+ options = getOptions("-d", classes.getPath(),
+ "-processor", "A" + i);
+ break;
+ }
+ List<JavaFileObject> sources = getSources("class D" + i + " { }");
+ callTask(options, sources);
+ checkPath(ANNOTATION_PROCESSOR_PATH, Mode.EQUALS, annopath);
+ checkFile(CLASS_OUTPUT, "D" + i + ".class");
+ }
+
+ tested.add(ANNOTATION_PROCESSOR_PATH);
+ }
+
+ void testSourceOutput() throws IOException {
+ String test = "testAnnotationProcessorPath";
+
+ String source =
+ "import java.io.*;\n"
+ + "import java.util.*;\n"
+ + "import javax.annotation.processing.*;\n"
+ + "import javax.lang.model.*;\n"
+ + "import javax.lang.model.element.*;\n"
+ + "import javax.tools.*;\n"
+ + "@SupportedOptions(\"name\")\n"
+ + "@SupportedAnnotationTypes(\"*\")\n"
+ + "public class A extends AbstractProcessor {\n"
+ + " int round = 0;\n"
+ + " public boolean process(Set<? extends TypeElement> annos, RoundEnvironment rEnv) {\n"
+ + " if (round++ == 0) try {\n"
+ + " String name = processingEnv.getOptions().get(\"name\");\n"
+ + " JavaFileObject fo = processingEnv.getFiler().createSourceFile(name);\n"
+ + " try (Writer out = fo.openWriter()) {\n"
+ + " out.write(\"class \" + name + \" { }\");\n"
+ + " }\n"
+ + " } catch (IOException e) { throw new Error(e); }\n"
+ + " return true;\n"
+ + " }\n"
+ + " public SourceVersion getSupportedSourceVersion() {\n"
+ + " return SourceVersion.latest();\n"
+ + " }\n"
+ + "}";
+
+ File annodir = createDir(test + "/processors");
+ callTask(getOptions("-d", annodir.getPath()), getSources(source));
+ setLocation(ANNOTATION_PROCESSOR_PATH, annodir);
+
+ for (int i = 1; i <= 5; i++) {
+ File classes = createDir(test + "/" + i + "/classes");
+ File genSrc = createDir(test + "/" + "/genSrc");
+ List<String> options;
+ switch (i) {
+ default:
+ options = getOptions("-d", classes.getPath(),
+ "-processor", "A", "-Aname=G" + i,
+ "-s", genSrc.getPath());
+ break;
+
+ case 3:
+ setLocation(SOURCE_OUTPUT, genSrc);
+ options = getOptions("-d", classes.getPath(),
+ "-processor", "A", "-Aname=G" + i);
+ break;
+ }
+ List<JavaFileObject> sources = getSources("class D" + i + " { }");
+ callTask(options, sources);
+ checkPath(SOURCE_OUTPUT, Mode.EQUALS, genSrc);
+ checkFile(CLASS_OUTPUT, "D" + i + ".class");
+ checkFile(CLASS_OUTPUT, "G" + i + ".class");
+ }
+ tested.add(SOURCE_OUTPUT);
+ }
+
+ void testNativeHeaderOutput() throws IOException {
+ String test = "testNativeHeaderOutput";
+
+ for (int i = 1; i <= 5; i++) {
+ File classes = createDir(test + "/" + i + "/classes");
+ File headers = createDir(test + "/" + i + "/hdrs");
+ List<String> options;
+ switch (i) {
+ default:
+ options = getOptions("-d", classes.getPath(), "-h", headers.getPath());
+ break;
+
+ case 3:
+ setLocation(NATIVE_HEADER_OUTPUT, headers);
+ options = getOptions("-d", classes.getPath());
+ break;
+ }
+ List<JavaFileObject> sources = getSources("class C" + i + " { native void m(); }");
+ callTask(options, sources);
+ checkPath(NATIVE_HEADER_OUTPUT, Mode.EQUALS, headers);
+ checkFile(NATIVE_HEADER_OUTPUT, "C" + i + ".h");
+ }
+
+ tested.add(StandardLocation.NATIVE_HEADER_OUTPUT);
+ }
+
+ List<String> getOptions(String... args) {
+ return Arrays.asList(args);
+ }
+
+ List<JavaFileObject> getSources(String... sources) {
+ List<JavaFileObject> list = new ArrayList<>();
+ for (String s: sources)
+ list.add(getSource(s));
+ return list;
+ }
+
+ JavaFileObject getSource(final String source) {
+ return new SimpleJavaFileObject(getURIFromSource(source), JavaFileObject.Kind.SOURCE) {
+ @Override
+ public CharSequence getCharContent(boolean ignoreEncodingErrors) {
+ return source;
+ }
+ };
+ }
+
+ void callTask(List<String> options, List<JavaFileObject> files) {
+ out.print("compile: ");
+ if (options != null) {
+ for (String o: options) {
+ if (o.length() > 64) {
+ o = o.substring(0, 32) + "..." + o.substring(o.length() - 32);
+ }
+ out.print(" " + o);
+ }
+ }
+ for (JavaFileObject f: files)
+ out.print(" " + f.getName());
+ out.println();
+ CompilationTask t = compiler.getTask(out, fileManager, null, options, null, files);
+ boolean ok = t.call();
+ if (!ok)
+ error("compilation failed");
+ }
+
+ enum Mode { EQUALS, CONTAINS, STARTS_WITH, ENDS_WITH };
+
+ void checkFile(StandardLocation l, String path) {
+ if (!l.isOutputLocation()) {
+ error("Not an output location: " + l);
+ return;
+ }
+
+ List<File> files = getLocation(l);
+ if (files == null) {
+ error("location is unset: " + l);
+ return;
+ }
+
+ if (files.size() != 1)
+ error("unexpected number of entries on " + l + ": " + files.size());
+
+ File f = new File(files.get(0), path);
+ if (!f.exists())
+ error("file not found: " + f);
+ }
+
+ void checkPath(StandardLocation l, Mode m, File expect) {
+ checkPath(l, m, Arrays.asList(expect));
+ }
+
+ void checkPath(StandardLocation l, Mode m, List<File> expect) {
+ List<File> files = getLocation(l);
+ if (files == null) {
+ error("location is unset: " + l);
+ return;
+ }
+
+ switch (m) {
+ case EQUALS:
+ if (!Objects.equals(files, expect)) {
+ error("location does not match the expected files: " + l);
+ out.println("found: " + files);
+ out.println("expect: " + expect);
+ }
+ break;
+
+ case CONTAINS:
+ int containsIndex = Collections.indexOfSubList(files, expect);
+ if (containsIndex == -1) {
+ error("location does not contain the expected files: " + l);
+ out.println("found: " + files);
+ out.println("expect: " + expect);
+ }
+ break;
+
+ case STARTS_WITH:
+ int startsIndex = Collections.indexOfSubList(files, expect);
+ if (startsIndex != 0) {
+ error("location does not start with the expected files: " + l);
+ out.println("found: " + files);
+ out.println("expect: " + expect);
+ }
+ break;
+
+ case ENDS_WITH:
+ int endsIndex = Collections.lastIndexOfSubList(files, expect);
+ if (endsIndex != files.size() - expect.size()) {
+ error("location does not end with the expected files: " + l);
+ out.println("found: " + files);
+ out.println("expect: " + expect);
+ }
+ break;
+
+ }
+ }
+
+ List<File> getLocation(StandardLocation l) {
+ Iterable<? extends File> iter = fileManager.getLocation(l);
+ if (iter == null)
+ return null;
+ List<File> files = new ArrayList<>();
+ for (File f: iter)
+ files.add(f);
+ return files;
+ }
+
+ void setLocation(StandardLocation l, File... files) throws IOException {
+ fileManager.setLocation(l, Arrays.asList(files));
+ }
+
+ void setLocation(StandardLocation l, List<File> files) throws IOException {
+ fileManager.setLocation(l, files);
+ }
+
+ void writeFile(File dir, String path, String body) throws IOException {
+ try (FileWriter w = new FileWriter(new File(dir, path))) {
+ w.write(body);
+ }
+ }
+
+ void writeJar(File jar, File dir, String... entries) throws IOException {
+ try (JarOutputStream j = new JarOutputStream(Files.newOutputStream(jar.toPath()))) {
+ for (String entry: entries) {
+ j.putNextEntry(new JarEntry(entry));
+ j.write(Files.readAllBytes(dir.toPath().resolve(entry)));
+ }
+ }
+ }
+
+ private static final Pattern packagePattern
+ = Pattern.compile("package\\s+(((?:\\w+\\.)*)(?:\\w+))");
+ private static final Pattern classPattern
+ = Pattern.compile("(?:public\\s+)?(?:class|enum|interface)\\s+(\\w+)");
+
+
+ private static URI getURIFromSource(String source) {
+ String packageName = null;
+
+ Matcher matcher = packagePattern.matcher(source);
+ if (matcher.find()) {
+ packageName = matcher.group(1).replace(".", "/");
+ }
+
+ matcher = classPattern.matcher(source);
+ if (matcher.find()) {
+ String className = matcher.group(1);
+ String path = ((packageName == null) ? "" : packageName + "/") + className + ".java";
+ return URI.create("myfo:///" + path);
+ } else {
+ throw new Error("Could not extract the java class "
+ + "name from the provided source");
+ }
+ }
+
+ File createDir(String path) {
+ File dir = new File(path);
+ dir.mkdirs();
+ return dir;
+ }
+
+ JavaCompiler compiler;
+ StandardJavaFileManager fileManager;
+
+ /**
+ * Map for recording which standard locations have been tested.
+ */
+ EnumSet<StandardLocation> tested = EnumSet.noneOf(StandardLocation.class);
+
+ /**
+ * Logging stream. Used directly with test and for getTask calls.
+ */
+ final PrintWriter out = new PrintWriter(System.err, true);
+
+ /**
+ * Count of errors so far.
+ */
+ int errors;
+
+ void error(String message) {
+ errors++;
+ out.println("Error: " + message);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/api/taskListeners/CompileEvent.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8033414
+ * @summary Verify that the TaskEvent.COMPILATION is fired properly.
+ * @run main CompileEvent
+ */
+
+import java.io.*;
+import java.util.*;
+
+import javax.tools.*;
+
+import com.sun.source.util.*;
+import com.sun.tools.javac.Main;
+import com.sun.tools.javac.api.BasicJavacTask;
+import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.Log;
+import com.sun.tools.javac.util.Log.WriterKind;
+
+public class CompileEvent {
+
+ public static void main(String... args) throws IOException {
+ new CompileEvent().run();
+ }
+
+ void run() throws IOException {
+ String testClasses = System.getProperty("test.classes");
+ File pluginRegistration =
+ new File(testClasses + "/META-INF/services/com.sun.source.util.Plugin");
+ pluginRegistration.getParentFile().mkdirs();
+ try (Writer metaInfRegistration = new FileWriter(pluginRegistration)) {
+ metaInfRegistration.write("CompileEvent$PluginImpl");
+ }
+ File test = new File(testClasses + "/Test.java");
+ test.getParentFile().mkdirs();
+ try (Writer testFileWriter = new FileWriter(test)) {
+ testFileWriter.write("public class Test { }");
+ }
+
+ StringWriter out;
+
+ //test events fired to listeners registered from plugins
+ //when starting compiler using Main.compile
+ out = new StringWriter();
+ int mainResult = Main.compile(new String[] {
+ "-Xplugin:compile-event", "-processorpath", testClasses, test.getAbsolutePath()
+ }, new PrintWriter(out, true));
+ if (mainResult != 0)
+ throw new AssertionError("Compilation failed unexpectedly, exit code: " + mainResult);
+ assertOutput(out);
+
+ JavaCompiler comp = ToolProvider.getSystemJavaCompiler();
+ StandardJavaFileManager fm = comp.getStandardFileManager(null, null, null);
+ Iterable<? extends JavaFileObject> testFileObjects = fm.getJavaFileObjects(test);
+
+ //test events fired to listeners registered from plugins
+ //when starting compiler using JavaCompiler.getTak(...).call
+ List<String> options =
+ Arrays.asList("-Xplugin:compile-event", "-processorpath", testClasses);
+ out = new StringWriter();
+ boolean compResult = comp.getTask(out, null, null, options, null, testFileObjects).call();
+ if (!compResult)
+ throw new AssertionError("Compilation failed unexpectedly.");
+ assertOutput(out);
+ }
+
+ void assertOutput(StringWriter out) {
+ String lineSeparator = System.getProperty("line.separator");
+ if (!out.toString().trim().replace(lineSeparator, "\n").equals(EXPECTED)) {
+ throw new AssertionError("Unexpected events: " + out.toString());
+ }
+ }
+
+ private static final String EXPECTED =
+ "started(COMPILATION)\n" +
+ "started(PARSE:Test.java)\n" +
+ "finished(PARSE:Test.java)\n" +
+ "started(ENTER:Test.java)\n" +
+ "finished(ENTER:Test.java)\n" +
+ "started(ANALYZE:Test.java:Test)\n" +
+ "finished(ANALYZE:Test.java:Test)\n" +
+ "started(GENERATE:Test.java:Test)\n" +
+ "finished(GENERATE:Test.java:Test)\n" +
+ "finished(COMPILATION)";
+
+ private static class TaskListenerImpl implements TaskListener {
+ private final PrintWriter out;
+ public TaskListenerImpl(PrintWriter out) {
+ this.out = out;
+ }
+ @Override public void started(TaskEvent e) {
+ dumpTaskEvent("started", e);
+ }
+ @Override public void finished(TaskEvent e) {
+ dumpTaskEvent("finished", e);
+ }
+ private void dumpTaskEvent(String type, TaskEvent e) {
+ StringBuilder data = new StringBuilder();
+ data.append(type);
+ data.append("(");
+ data.append(e.getKind());
+ if (e.getSourceFile() != null) {
+ data.append(":");
+ data.append(new File(e.getSourceFile().getName()).getName());
+ }
+ if (e.getTypeElement()!= null) {
+ data.append(":");
+ data.append(e.getTypeElement().getQualifiedName());
+ }
+ data.append(")");
+ out.println(data);
+ }
+ }
+
+ public static final class PluginImpl implements Plugin {
+ @Override public String getName() {
+ return "compile-event";
+ }
+ @Override public void init(JavacTask task, String... args) {
+ Context context = ((BasicJavacTask) task).getContext();
+ Log log = Log.instance(context);
+ task.addTaskListener(new TaskListenerImpl(log.getWriter(WriterKind.NOTICE)));
+ }
+ }
+}
--- a/langtools/test/tools/javac/api/taskListeners/TestSimpleAddRemove.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/api/taskListeners/TestSimpleAddRemove.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2014, 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
@@ -287,10 +287,16 @@
found = "{}";
break;
case REMOVE_IN_PROCESSOR:
- found = "{PARSE=1:1, ENTER=2:2, ANNOTATION_PROCESSING=1:0, ANNOTATION_PROCESSING_ROUND=2:1}";
+ if (ck == CompileKind.CALL)
+ found = "{PARSE=1:1, ENTER=2:2, ANNOTATION_PROCESSING=1:0, ANNOTATION_PROCESSING_ROUND=2:1, COMPILATION=1:0}";
+ else
+ found = "{PARSE=1:1, ENTER=2:2, ANNOTATION_PROCESSING=1:0, ANNOTATION_PROCESSING_ROUND=2:1}";
break;
case REMOVE_IN_LISTENER:
- found = "{PARSE=1:1, ENTER=3:3, ANALYZE=1:1, GENERATE=1:0, ANNOTATION_PROCESSING=1:1, ANNOTATION_PROCESSING_ROUND=2:2}";
+ if (ck == CompileKind.CALL)
+ found = "{PARSE=1:1, ENTER=3:3, ANALYZE=1:1, GENERATE=1:0, ANNOTATION_PROCESSING=1:1, ANNOTATION_PROCESSING_ROUND=2:2, COMPILATION=1:0}";
+ else
+ found = "{PARSE=1:1, ENTER=3:3, ANALYZE=1:1, GENERATE=1:0, ANNOTATION_PROCESSING=1:1, ANNOTATION_PROCESSING_ROUND=2:2}";
break;
default:
throw new IllegalStateException();
@@ -302,7 +308,10 @@
switch (rk) {
// Remove will fail (too early), so events to end will be recorded
case REMOVE_IN_TASK:
- found = "{ENTER=2:2, ANALYZE=1:1, GENERATE=1:1, ANNOTATION_PROCESSING=0:1, ANNOTATION_PROCESSING_ROUND=1:2}";
+ if (ck == CompileKind.CALL)
+ found = "{ENTER=2:2, ANALYZE=1:1, GENERATE=1:1, ANNOTATION_PROCESSING=0:1, ANNOTATION_PROCESSING_ROUND=1:2, COMPILATION=0:1}";
+ else
+ found = "{ENTER=2:2, ANALYZE=1:1, GENERATE=1:1, ANNOTATION_PROCESSING=0:1, ANNOTATION_PROCESSING_ROUND=1:2}";
break;
case REMOVE_IN_PROCESSOR:
found = "{ENTER=1:1, ANNOTATION_PROCESSING_ROUND=1:1}";
@@ -321,7 +330,10 @@
// Remove will fail (too early, so events to end will be recorded
case REMOVE_IN_TASK:
case REMOVE_IN_PROCESSOR:
- found = "{ANALYZE=0:1, GENERATE=1:1}";
+ if (ck == CompileKind.CALL)
+ found = "{ANALYZE=0:1, GENERATE=1:1, COMPILATION=0:1}";
+ else
+ found = "{ANALYZE=0:1, GENERATE=1:1}";
break;
// Remove will succeed during "GENERATE.finished" event
case REMOVE_IN_LISTENER:
--- a/langtools/test/tools/javac/diags/ArgTypeCompilerFactory.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/diags/ArgTypeCompilerFactory.java Wed Jun 18 13:14:15 2014 -0700
@@ -105,14 +105,13 @@
Iterable<? extends JavaFileObject> fos = fm.getJavaFileObjectsFromFiles(files);
- Context c = new Context();
- ArgTypeMessages.preRegister(c);
- ArgTypeJavaCompiler.preRegister(c);
+ Context c = initContext();
JavacTaskImpl t = (JavacTaskImpl) tool.getTask(out, fm, null, opts, null, fos, c);
return t.call();
}
}
+
/**
* Run the test using the standard simple entry point.
*/
@@ -135,10 +134,8 @@
args.add(f.getPath());
Main main = new Main("javac", out);
- Context c = new Context();
+ Context c = initContext();
JavacFileManager.preRegister(c); // can't create it until Log has been set up
- ArgTypeJavaCompiler.preRegister(c);
- ArgTypeMessages.preRegister(c);
Main.Result result = main.compile(args.toArray(new String[args.size()]), c);
return result.isOK();
@@ -161,18 +158,25 @@
for (File f: files)
args.add(f.getPath());
- Context c = new Context();
+ Context c = initContext();
JavacFileManager.preRegister(c); // can't create it until Log has been set up
- ArgTypeJavaCompiler.preRegister(c);
- ArgTypeMessages.preRegister(c);
Main m = new Main("javac", out);
Main.Result result = m.compile(args.toArray(new String[args.size()]), c);
return result.isOK();
}
-
}
+ private static Context initContext() {
+ Context context = new Context();
+ ArgTypeMessages.preRegister(context);
+ Options options = Options.instance(context);
+ options.addListener(() -> {
+ Log log = Log.instance(context);
+ log.setDiagnosticFormatter(new ArgTypeDiagnosticFormatter(options));
+ });
+ return context;
+ }
// <editor-fold defaultstate="collapsed" desc="Custom Javac components">
@@ -228,29 +232,6 @@
}
/**
- * Trivial subtype of JavaCompiler to get access to the protected compilerKey field.
- * The factory is used to ensure that the log is initialized with an instance of
- * ArgTypeDiagnosticFormatter before we create the required JavaCompiler.
- */
- static class ArgTypeJavaCompiler extends JavaCompiler {
- static void preRegister(Context context) {
- context.put(compilerKey, new Context.Factory<JavaCompiler>() {
- public JavaCompiler make(Context c) {
- Log log = Log.instance(c);
- Options options = Options.instance(c);
- log.setDiagnosticFormatter(new ArgTypeDiagnosticFormatter(options));
- return new JavaCompiler(c);
- }
- });
- }
-
- // not used
- private ArgTypeJavaCompiler() {
- super(null);
- }
- }
-
- /**
* Diagnostic formatter which "localizes" a message as a line
* containing a key, and a possibly empty set of descriptive strings for the
* arg types.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/diags/examples/StaticIntfMethodInvokeNotSupported.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+// key: compiler.err.static.intf.method.invoke.not.supported.in.source
+// options: -source 7 -Xlint:-options
+import java.util.stream.Stream;
+
+class StaticIntfMethodInvokeNotSupported {
+ void test() {
+ Stream.empty();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/inference/8043725/T8043725.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8043725
+ * @summary javac fails with StackOverflowException
+ * @compile T8043725.java
+ */
+class T8043725 {
+ <T extends Comparable<T>> T m(T v) {
+ //this will generate two upper bounds, T and Comparable<T'> respectively
+ //causing infinite recursion in lub (because of JLS 18.3.1).
+ return m(v);
+ }
+}
--- a/langtools/test/tools/javac/generics/wildcards/7034495/T7034495.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/generics/wildcards/7034495/T7034495.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,2 +1,2 @@
-T7034495.java:40:17: compiler.err.types.incompatible.diff.ret: T7034495.B<?>, T7034495.A<?>, foo()
+T7034495.java:40:17: compiler.err.types.incompatible.diff.ret: T7034495.B<compiler.misc.type.captureof: 1, ?>, T7034495.A<compiler.misc.type.captureof: 2, ?>, foo()
1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/wildcards/T8015101.java Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8015101
+ * @summary Mishandling of wildcards in intersection member method check
+ * @compile T8015101.java
+ */
+class T8015101 {
+
+ public static class Bug<X extends Child<?, ?> & Runnable> {
+ }
+
+ interface Parent<C> {
+ public C get();
+ }
+
+ interface Child<C, S extends C> extends Parent<C> {
+ @Override
+ public S get();
+ }
+
+ }
--- a/langtools/test/tools/javac/lib/DPrinter.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/lib/DPrinter.java Wed Jun 18 13:14:15 2014 -0700
@@ -21,6 +21,12 @@
* questions.
*/
+/* @test
+ * @bug 8043484
+ * @summary Make sure DPrinter.java compiles
+ * @compile DPrinter.java
+ */
+
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
@@ -403,7 +409,7 @@
printType("type", sym.type, Details.SUMMARY);
printType("erasure", sym.erasure_field, Details.SUMMARY);
sym.accept(symVisitor, null);
- printAnnotations("annotations", sym.getAnnotations(), Details.SUMMARY);
+ printAnnotations("annotations", sym.getMetadata(), Details.SUMMARY);
indent(-1);
}
}
@@ -529,9 +535,13 @@
public class TreeVisitor extends JCTree.Visitor {
@Override
public void visitTopLevel(JCCompilationUnit tree) {
- printList("packageAnnotations", tree.packageAnnotations);
+ printList("packageAnnotations", tree.getPackageAnnotations());
+ printList("defs", tree.defs);
+ }
+
+ @Override
+ public void visitPackageDef(JCPackageDecl tree) {
printTree("pid", tree.pid);
- printList("defs", tree.defs);
}
@Override
@@ -945,12 +955,6 @@
* visit method for its superclass.
*/
public class TypeVisitor implements Type.Visitor<Void,Void> {
- public Void visitAnnotatedType(AnnotatedType type, Void ignore) {
- printList("typeAnnotations", type.getAnnotationMirrors());
- printType("underlyingType", type.unannotatedType(), Details.FULL);
- return visitType(type, null);
- }
-
public Void visitArrayType(ArrayType type, Void ignore) {
printType("elemType", type.elemtype, Details.FULL);
return visitType(type, null);
--- a/langtools/test/tools/javac/processing/6430209/T6430209.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/processing/6430209/T6430209.java Wed Jun 18 13:14:15 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2014, 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
@@ -55,7 +55,7 @@
// run annotation processor b6341534 so we can check diagnostics
// -proc:only -processor b6341534 -cp . ./src/*.java
String testSrc = System.getProperty("test.src", ".");
- String testClasses = System.getProperty("test.classes") + System.getProperty("path.separator") + "../../lib";
+ String testClassPath = System.getProperty("test.class.path");
JavacTool tool = JavacTool.create();
MyDiagListener dl = new MyDiagListener();
StandardJavaFileManager fm = tool.getStandardFileManager(dl, null, null);
@@ -64,7 +64,7 @@
new File(testSrc, "test0.java"), new File(testSrc, "test1.java")));
Iterable<String> opts = Arrays.asList("-proc:only",
"-processor", "b6341534",
- "-processorpath", testClasses);
+ "-processorpath", testClassPath);
StringWriter out = new StringWriter();
JavacTask task = tool.getTask(out, fm, dl, opts, null, files);
task.call();
--- a/langtools/test/tools/javac/processing/model/element/TestAnonClassNames.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/processing/model/element/TestAnonClassNames.java Wed Jun 18 13:14:15 2014 -0700
@@ -96,9 +96,10 @@
List<String> names = new ArrayList<String>();
for(Class<?> clazz : classes) {
String name = clazz.getName();
- System.out.format("%s is %s%n",
- clazz.getName(),
- clazz.getAnnotation(Nesting.class).value());
+ Nesting annotation = clazz.getAnnotation(Nesting.class);
+ NestingKind expected = annotation == null ?
+ NestingKind.ANONYMOUS : annotation.value();
+ System.out.format("%s is %s%n", name, expected);
testClassName(name);
names.add(name);
}
@@ -186,7 +187,11 @@
typeElt.getKind().toString(),
nestingKind.toString());
- if (typeElt.getAnnotation(Nesting.class).value() != nestingKind) {
+ Nesting annotation = typeElt.getAnnotation(Nesting.class);
+ NestingKind expected = annotation == null ?
+ NestingKind.ANONYMOUS : annotation.value();
+
+ if (expected != nestingKind) {
throw new RuntimeException("Mismatch of expected and reported nesting kind.");
}
}
--- a/langtools/test/tools/javac/tree/TreePosTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/tree/TreePosTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -367,7 +367,9 @@
// and because of inconsistent nesting of left and right of
// array declarations:
// e.g. int[][] a = new int[2][];
+ if (!(encl.tag == REFERENCE && self.tag == ANNOTATED_TYPE)) {
check("encl.start <= start", encl, self, encl.start <= self.start);
+ }
check("start <= pos", encl, self, self.start <= self.pos);
if (!( (self.tag == TYPEARRAY ||
isAnnotatedArray(self.tree))
@@ -377,6 +379,8 @@
isAnnotatedArray(encl.tree))
||
encl.tag == ANNOTATED_TYPE && self.tag == SELECT
+ ||
+ encl.tag == REFERENCE && self.tag == ANNOTATED_TYPE
)) {
check("encl.pos <= start || end <= encl.pos",
encl, self, encl.pos <= self.start || self.end <= encl.pos);
--- a/langtools/test/tools/javac/warnings/6747671/T6747671.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/warnings/6747671/T6747671.out Wed Jun 18 13:14:15 2014 -0700
@@ -8,5 +8,5 @@
T6747671.java:32:20: compiler.warn.raw.class.use: T6747671.A, T6747671<E>.A<X>
T6747671.java:33:16: compiler.warn.raw.class.use: T6747671.A.Z, T6747671<E>.A<X>.Z<Y>
T6747671.java:36:9: compiler.warn.raw.class.use: @T6747671.TA T6747671.B, T6747671.B<X>
-T6747671.java:36:27: compiler.warn.raw.class.use: T6747671.B, T6747671.B<X>
+T6747671.java:36:27: compiler.warn.raw.class.use: @T6747671.TA T6747671.B, T6747671.B<X>
11 warnings
--- a/langtools/test/tools/javac/warnings/suppress/T6480588.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/warnings/suppress/T6480588.out Wed Jun 18 13:14:15 2014 -0700
@@ -1,6 +1,6 @@
+T6480588.java:11:2: compiler.warn.has.been.deprecated: DeprecatedAnnotation, compiler.misc.unnamed.package
T6480588.java:12:24: compiler.warn.has.been.deprecated: DeprecatedClass, compiler.misc.unnamed.package
T6480588.java:12:51: compiler.warn.has.been.deprecated: DeprecatedInterface, compiler.misc.unnamed.package
-T6480588.java:11:2: compiler.warn.has.been.deprecated: DeprecatedAnnotation, compiler.misc.unnamed.package
T6480588.java:14:12: compiler.warn.has.been.deprecated: DeprecatedClass, compiler.misc.unnamed.package
T6480588.java:14:65: compiler.warn.has.been.deprecated: DeprecatedClass, compiler.misc.unnamed.package
T6480588.java:13:6: compiler.warn.has.been.deprecated: DeprecatedAnnotation, compiler.misc.unnamed.package
@@ -12,7 +12,7 @@
T6480588.java:26:5: compiler.warn.has.been.deprecated: DeprecatedClass, compiler.misc.unnamed.package
T6480588.java:25:6: compiler.warn.has.been.deprecated: DeprecatedAnnotation, compiler.misc.unnamed.package
T6480588.java:26:33: compiler.warn.has.been.deprecated: DeprecatedClass, compiler.misc.unnamed.package
+T6480588.java:28:6: compiler.warn.has.been.deprecated: DeprecatedAnnotation, compiler.misc.unnamed.package
T6480588.java:29:25: compiler.warn.has.been.deprecated: DeprecatedClass, compiler.misc.unnamed.package
T6480588.java:29:52: compiler.warn.has.been.deprecated: DeprecatedInterface, compiler.misc.unnamed.package
-T6480588.java:28:6: compiler.warn.has.been.deprecated: DeprecatedAnnotation, compiler.misc.unnamed.package
-17 warnings
\ No newline at end of file
+17 warnings
--- a/langtools/test/tools/javac/warnings/suppress/TypeAnnotations.out Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javac/warnings/suppress/TypeAnnotations.out Wed Jun 18 13:14:15 2014 -0700
@@ -5,28 +5,20 @@
TypeAnnotations.java:14:13: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:14:44: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:14:33: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
-TypeAnnotations.java:23:29: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
-TypeAnnotations.java:23:18: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:16:14: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
-TypeAnnotations.java:17:58: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:17:14: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:17:58: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:20:10: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
-TypeAnnotations.java:21:54: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:21:10: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:21:54: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:23:18: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:23:29: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:28:14: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
-TypeAnnotations.java:29:58: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:29:14: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:29:58: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:32:10: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
-TypeAnnotations.java:33:54: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:33:10: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:33:54: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
-TypeAnnotations.java:35:46: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
-TypeAnnotations.java:35:35: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:35:21: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:35:10: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:35:35: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
@@ -35,7 +27,6 @@
TypeAnnotations.java:38:6: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:38:43: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:38:32: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
-TypeAnnotations.java:38:32: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:42:40: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
TypeAnnotations.java:42:62: compiler.warn.has.been.deprecated: TA, compiler.misc.unnamed.package
-40 warnings
\ No newline at end of file
+31 warnings
--- a/langtools/test/tools/javap/output/RepeatingTypeAnnotations.java Wed Jun 11 10:53:27 2014 +0400
+++ b/langtools/test/tools/javap/output/RepeatingTypeAnnotations.java Wed Jun 18 13:14:15 2014 -0700
@@ -245,11 +245,11 @@
" @A @A @A String ls = (@B @B @B String) o;",
" }");
verify("RuntimeInvisibleTypeAnnotations",
- "0: #34(#35=[@#36(),@#36(),@#36()]): CAST, offset=4, type_index=0",
- "1: #37(#35=[@#38(),@#38(),@#38()]): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
+ "0: #34(#35=[@#36(),@#36(),@#36()]): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
+ "1: #37(#35=[@#38(),@#38(),@#38()]): CAST, offset=4, type_index=0",
"RuntimeInvisibleTypeAnnotations",
- "0: #37(#35=[@#38(),@#38(),@#38()]): METHOD_FORMAL_PARAMETER, param_index=0",
- "1: #38(): METHOD_FORMAL_PARAMETER, param_index=1");
+ "0: #36(): METHOD_FORMAL_PARAMETER, param_index=1",
+ "1: #34(#35=[@#36(),@#36(),@#36()]): METHOD_FORMAL_PARAMETER, param_index=0");
}
}
@@ -261,15 +261,15 @@
" @A @A @B String ls = (@B @A @B String) o;",
" }");
verify("RuntimeInvisibleTypeAnnotations",
- "0: #34(#35=[@#36(),@#36()]): CAST, offset=4, type_index=0",
- "1: #37(): CAST, offset=4, type_index=0",
- "2: #38(#35=[@#37(),@#37()]): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
- "3: #36(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
+ "0: #34(#35=[@#36(),@#36()]): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
+ "1: #37(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
+ "2: #38(#35=[@#37(),@#37()]): CAST, offset=4, type_index=0",
+ "3: #36(): CAST, offset=4, type_index=0",
"RuntimeInvisibleTypeAnnotations",
- "0: #38(#35=[@#37(),@#37()]): METHOD_FORMAL_PARAMETER, param_index=0",
- "1: #36(): METHOD_FORMAL_PARAMETER, param_index=0",
- "2: #37(): METHOD_FORMAL_PARAMETER, param_index=1",
- "3: #36(): METHOD_FORMAL_PARAMETER, param_index=1");
+ "0: #36(): METHOD_FORMAL_PARAMETER, param_index=1",
+ "1: #37(): METHOD_FORMAL_PARAMETER, param_index=1",
+ "2: #34(#35=[@#36(),@#36()]): METHOD_FORMAL_PARAMETER, param_index=0",
+ "3: #37(): METHOD_FORMAL_PARAMETER, param_index=0");
}
}
@@ -282,14 +282,14 @@
" }");
verify("RuntimeVisibleTypeAnnotations",
"RuntimeInvisibleTypeAnnotations",
- "0: #34(): CAST, offset=4, type_index=0",
- "1: #35(#36=[@#34(),@#34()]): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
- "0: #38(#36=[@#39(),@#39()]): CAST, offset=4, type_index=0",
- "1: #39(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
- "0: #35(#36=[@#34(),@#34()]): METHOD_FORMAL_PARAMETER, param_index=0",
- "0: #39(): METHOD_FORMAL_PARAMETER, param_index=0",
- "1: #39(): METHOD_FORMAL_PARAMETER, param_index=1",
- "2: #40(): METHOD_FORMAL_PARAMETER, param_index=1");
+ "0: #34(#35=[@#36(),@#36()]): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
+ "1: #36(): CAST, offset=4, type_index=0",
+ "0: #38(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
+ "1: #39(#35=[@#38(),@#38()]): CAST, offset=4, type_index=0",
+ "0: #34(#35=[@#36(),@#36()]): METHOD_FORMAL_PARAMETER, param_index=0",
+ "0: #38(): METHOD_FORMAL_PARAMETER, param_index=1",
+ "1: #40(): METHOD_FORMAL_PARAMETER, param_index=1",
+ "2: #38(): METHOD_FORMAL_PARAMETER, param_index=0");
}
}
@@ -301,13 +301,13 @@
" @A @B @C String ls = (@C @A @B String) o;",
" }");
verify("RuntimeVisibleTypeAnnotations",
- "0: #34(): CAST, offset=4, type_index=0",
- "1: #34(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
+ "0: #34(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
+ "1: #34(): CAST, offset=4, type_index=0",
"RuntimeInvisibleTypeAnnotations",
- "0: #36(): CAST, offset=4, type_index=0",
- "1: #37(): CAST, offset=4, type_index=0",
- "2: #36(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
- "3: #37(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
+ "0: #36(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
+ "1: #37(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
+ "2: #36(): CAST, offset=4, type_index=0",
+ "3: #37(): CAST, offset=4, type_index=0",
"0: #34(): METHOD_FORMAL_PARAMETER, param_index=0",
"1: #34(): METHOD_FORMAL_PARAMETER, param_index=1",
"0: #36(): METHOD_FORMAL_PARAMETER, param_index=0",
@@ -325,13 +325,14 @@
" return (@A @A @A String) o;",
" }");
verify("RuntimeInvisibleTypeAnnotations",
- "0: #36(#37=[@#38(),@#38(),@#38()]): CAST, offset=0, type_index=0",
- "1: #39(#37=[@#40(),@#40(),@#40()]): CAST, offset=6, type_index=0",
- "2: #39(#37=[@#40(),@#40(),@#40()]): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "0: #36(#37=[@#38(),@#38(),@#38()]): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "1: #39(#37=[@#40(),@#40(),@#40()]): CAST, offset=0, type_index=0",
+ "2: #36(#37=[@#38(),@#38(),@#38()]): CAST, offset=6, type_index=0",
"RuntimeInvisibleTypeAnnotations",
- "0: #39(#37=[@#40(),@#40(),@#40()]): METHOD_RETURN",
- "1: #39(#37=[@#40(),@#40(),@#40()]): METHOD_FORMAL_PARAMETER, param_index=0",
- "2: #40(): METHOD_FORMAL_PARAMETER, param_index=1");
+ "0: #38(): METHOD_FORMAL_PARAMETER, param_index=1",
+ "1: #36(#37=[@#38(),@#38(),@#38()]): METHOD_FORMAL_PARAMETER, param_index=0",
+ "2: #36(#37=[@#38(),@#38(),@#38()]): METHOD_RETURN"
+ );
}
}
@@ -345,19 +346,19 @@
" }");
verify(
"RuntimeInvisibleTypeAnnotations:",
- "0: #36(#37=[@#38(),@#38()]): CAST, offset=0, type_index=0",
- "1: #39(): CAST, offset=0, type_index=0",
- "2: #39(): CAST, offset=6, type_index=0",
- "3: #36(#37=[@#38(),@#38()]): CAST, offset=6, type_index=0",
- "4: #40(#37=[@#39(),@#39()]): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
- "5: #38(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "0: #36(#37=[@#38(),@#38()]): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "1: #39(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "2: #40(#37=[@#39(),@#39()]): CAST, offset=0, type_index=0",
+ "3: #38(): CAST, offset=0, type_index=0",
+ "4: #38(): CAST, offset=6, type_index=0",
+ "5: #40(#37=[@#39(),@#39()]): CAST, offset=6, type_index=0",
"RuntimeInvisibleTypeAnnotations:",
- "0: #39(): METHOD_RETURN",
- "1: #36(#37=[@#38(),@#38()]): METHOD_RETURN",
- "2: #40(#37=[@#39(),@#39()]): METHOD_FORMAL_PARAMETER, param_index=0",
- "3: #38(): METHOD_FORMAL_PARAMETER, param_index=0",
- "4: #39(): METHOD_FORMAL_PARAMETER, param_index=1",
- "5: #38(): METHOD_FORMAL_PARAMETER, param_index=1"
+ "0: #38(): METHOD_FORMAL_PARAMETER, param_index=1",
+ "1: #39(): METHOD_FORMAL_PARAMETER, param_index=1",
+ "2: #36(#37=[@#38(),@#38()]): METHOD_FORMAL_PARAMETER, param_index=0",
+ "3: #39(): METHOD_FORMAL_PARAMETER, param_index=0",
+ "4: #38(): METHOD_RETURN",
+ "5: #40(#37=[@#39(),@#39()]): METHOD_RETURN"
);
}
}
@@ -372,21 +373,21 @@
" }");
verify(
"RuntimeVisibleTypeAnnotations:",
- "0: #36(): CAST, offset=0, type_index=0",
- "1: #36(): CAST, offset=6, type_index=0",
- "2: #37(#38=[@#36(),@#36()]): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "0: #36(#37=[@#38(),@#38()]): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "1: #38(): CAST, offset=0, type_index=0",
+ "2: #38(): CAST, offset=6, type_index=0",
"RuntimeInvisibleTypeAnnotations:",
- "0: #40(#38=[@#41(),@#41()]): CAST, offset=0, type_index=0",
- "1: #42(#38=[@#43(),@#43()]): CAST, offset=6, type_index=0",
- "2: #41(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "0: #40(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "1: #41(#37=[@#40(),@#40()]): CAST, offset=0, type_index=0",
+ "2: #42(#37=[@#43(),@#43()]): CAST, offset=6, type_index=0",
"RuntimeVisibleTypeAnnotations:",
- "0: #36(): METHOD_RETURN",
- "1: #37(#38=[@#36(),@#36()]): METHOD_FORMAL_PARAMETER, param_index=0",
+ "0: #36(#37=[@#38(),@#38()]): METHOD_FORMAL_PARAMETER, param_index=0",
+ "1: #38(): METHOD_RETURN",
"RuntimeInvisibleTypeAnnotations:",
- "0: #40(#38=[@#41(),@#41()]): METHOD_RETURN",
- "1: #41(): METHOD_FORMAL_PARAMETER, param_index=0",
- "2: #41(): METHOD_FORMAL_PARAMETER, param_index=1",
- "3: #43(): METHOD_FORMAL_PARAMETER, param_index=1"
+ "0: #40(): METHOD_FORMAL_PARAMETER, param_index=1",
+ "1: #43(): METHOD_FORMAL_PARAMETER, param_index=1",
+ "2: #40(): METHOD_FORMAL_PARAMETER, param_index=0",
+ "3: #41(#37=[@#40(),@#40()]): METHOD_RETURN"
);
}
}
@@ -401,26 +402,26 @@
" }");
verify(
"RuntimeVisibleTypeAnnotations:",
- "0: #36(): CAST, offset=0, type_index=0",
- "1: #36(): CAST, offset=6, type_index=0",
- "2: #36(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "0: #36(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "1: #36(): CAST, offset=0, type_index=0",
+ "2: #36(): CAST, offset=6, type_index=0",
"RuntimeInvisibleTypeAnnotations:",
- "0: #38(): CAST, offset=0, type_index=0",
- "1: #39(): CAST, offset=0, type_index=0",
- "2: #39(): CAST, offset=6, type_index=0",
- "3: #38(): CAST, offset=6, type_index=0",
- "4: #38(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
- "5: #39(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "0: #38(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "1: #39(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
+ "2: #38(): CAST, offset=0, type_index=0",
+ "3: #39(): CAST, offset=0, type_index=0",
+ "4: #39(): CAST, offset=6, type_index=0",
+ "5: #38(): CAST, offset=6, type_index=0",
"RuntimeVisibleTypeAnnotations:",
- "0: #36(): METHOD_RETURN",
- "1: #36(): METHOD_FORMAL_PARAMETER, param_index=0",
- "2: #36(): METHOD_FORMAL_PARAMETER, param_index=1",
+ "0: #36(): METHOD_FORMAL_PARAMETER, param_index=0",
+ "1: #36(): METHOD_FORMAL_PARAMETER, param_index=1",
+ "2: #36(): METHOD_RETURN",
"RuntimeInvisibleTypeAnnotations:",
- "0: #38(): METHOD_RETURN",
- "1: #39(): METHOD_RETURN",
- "2: #38(): METHOD_FORMAL_PARAMETER, param_index=0",
- "3: #39(): METHOD_FORMAL_PARAMETER, param_index=0",
- "4: #38(): METHOD_FORMAL_PARAMETER, param_index=1"
+ "0: #38(): METHOD_FORMAL_PARAMETER, param_index=0",
+ "1: #39(): METHOD_FORMAL_PARAMETER, param_index=0",
+ "2: #38(): METHOD_FORMAL_PARAMETER, param_index=1",
+ "3: #38(): METHOD_RETURN",
+ "4: #39(): METHOD_RETURN"
);
}
}
--- a/make/jprt.properties Wed Jun 11 10:53:27 2014 +0400
+++ b/make/jprt.properties Wed Jun 18 13:14:15 2014 -0700
@@ -25,7 +25,7 @@
# Properties for jprt
-# Locked down to jdk8
+# Locked down to jdk9
jprt.tools.default.release=jdk9
# Unix toolkit to use for building on windows
@@ -36,8 +36,8 @@
# Standard list of jprt build targets for this source tree
jprt.build.targets= \
- solaris_sparcv9_5.10-{product|fastdebug}, \
- solaris_x64_5.10-{product|fastdebug}, \
+ solaris_sparcv9_5.11-{product|fastdebug}, \
+ solaris_x64_5.11-{product|fastdebug}, \
linux_i586_2.6-{product|fastdebug}, \
linux_x64_2.6-{product|fastdebug}, \
macosx_x64_10.7-{product|fastdebug}, \
@@ -49,8 +49,8 @@
# Test target list (no fastdebug & limited c2 testing)
jprt.my.test.target.set= \
- solaris_sparcv9_5.10-product-c2-TESTNAME, \
- solaris_x64_5.10-product-c2-TESTNAME, \
+ solaris_sparcv9_5.11-product-c2-TESTNAME, \
+ solaris_x64_5.11-product-c2-TESTNAME, \
linux_i586_2.6-product-{c1|c2}-TESTNAME, \
linux_x64_2.6-product-c2-TESTNAME, \
macosx_x64_10.7-product-c2-TESTNAME, \
@@ -131,8 +131,8 @@
# JCK test targets in test/Makefile (no windows)
jprt.my.jck.test.target.set= \
- solaris_sparcv9_5.10-product-c2-JCK7TESTRULE, \
- solaris_x64_5.10-product-c2-JCK7TESTRULE, \
+ solaris_sparcv9_5.11-product-c2-JCK7TESTRULE, \
+ solaris_x64_5.11-product-c2-JCK7TESTRULE, \
linux_i586_2.6-product-c1-JCK7TESTRULE, \
linux_x64_2.6-product-c2-JCK7TESTRULE
--- a/nashorn/.hgtags Wed Jun 11 10:53:27 2014 +0400
+++ b/nashorn/.hgtags Wed Jun 18 13:14:15 2014 -0700
@@ -250,3 +250,5 @@
806df06b6ac58d3e9c9c6a680dbdd7a6c94ca700 jdk9-b14
32b66f4661eac52f8b04fb3d7703feb2c96febb7 jdk9-b15
fed8c83dfba4dce94d2ae1cb82f026634ff2a3e4 jdk9-b16
+4a47b7cfecdf2a865811ab08a7ef49c942801d7c jdk9-b17
+893c337bc95fef3885baa3e4ffc30d68f62a829f jdk9-b18
--- a/nashorn/make/build.xml Wed Jun 11 10:53:27 2014 +0400
+++ b/nashorn/make/build.xml Wed Jun 18 13:14:15 2014 -0700
@@ -363,40 +363,32 @@
<echo message="WARNING: TestNG not available, will not run tests. Please copy testng.jar under test/lib directory."/>
</target>
- <target name="test" depends="jar, check-testng, check-external-tests, compile-test, generate-policy-file" if="testng.available">
- <delete dir="${build.dir}/nashorn_code_cache"/>
- <fileset id="test.classes" dir="${build.test.classes.dir}">
- <include name="**/api/javaaccess/*Test.class"/>
- <include name="**/api/scripting/*Test.class"/>
- <include name="**/codegen/*Test.class"/>
- <include name="**/parser/*Test.class"/>
- <include name="**/runtime/*Test.class"/>
- <include name="**/runtime/regexp/*Test.class"/>
- <include name="**/runtime/regexp/joni/*Test.class"/>
- <include name="**/framework/*Test.class"/>
- </fileset>
+ <!-- only to be invoked as dependency of "test" target -->
+ <target name="-test-classes-all" depends="jar" unless="test.class">
+ <fileset id="test.classes" dir="${build.test.classes.dir}">
+ <include name="**/api/javaaccess/*Test.class"/>
+ <include name="**/api/scripting/*Test.class"/>
+ <include name="**/codegen/*Test.class"/>
+ <include name="**/parser/*Test.class"/>
+ <include name="**/runtime/*Test.class"/>
+ <include name="**/runtime/regexp/*Test.class"/>
+ <include name="**/runtime/regexp/joni/*Test.class"/>
+ <include name="**/framework/*Test.class"/>
+ </fileset>
+ </target>
+ <!-- only to be invoked as dependency of "test" target -->
+ <target name="-test-classes-single" depends="jar" if="test.class">
+ <fileset id="test.classes" dir="${build.test.classes.dir}">
+ <include name="${test.class}*"/>
+ </fileset>
+ </target>
+
+ <!-- only to be invoked as dependency of "test" target -->
+ <target name="-test-nosecurity" unless="test.class">
<fileset id="test.nosecurity.classes" dir="${build.test.classes.dir}">
<include name="**/framework/ScriptTest.class"/>
</fileset>
-
- <testng outputdir="${build.test.results.dir}" classfilesetref="test.classes"
- verbose="${testng.verbose}" haltonfailure="true" useDefaultListeners="false" listeners="${testng.listeners}" workingDir="${basedir}">
- <jvmarg line="${ext.class.path}"/>
- <jvmarg line="${run.test.jvmargs} -Xmx${run.test.xmx} ${run.test.jvmsecurityargs}"/>
- <propertyset>
- <propertyref prefix="nashorn."/>
- </propertyset>
- <propertyset>
- <propertyref prefix="test-sys-prop."/>
- <mapper from="test-sys-prop.*" to="*" type="glob"/>
- </propertyset>
- <sysproperty key="test.js.excludes.file" value="${exclude.list}"/>
- <classpath>
- <pathelement path="${run.test.classpath}"/>
- </classpath>
- </testng>
-
<testng outputdir="${build.nosecurity.test.results.dir}" classfilesetref="test.nosecurity.classes"
verbose="${testng.verbose}" haltonfailure="true" useDefaultListeners="false" listeners="${testng.listeners}" workingDir="${basedir}">
<jvmarg line="${ext.class.path}"/>
@@ -414,6 +406,31 @@
</testng>
</target>
+ <!-- only to be invoked as dependency of "test" target -->
+ <target name="-test-security">
+ <delete dir="${build.dir}/nashorn_code_cache"/>
+ <property name="debug.test.jvmargs" value=""/>
+ <testng outputdir="${build.test.results.dir}" classfilesetref="test.classes"
+ verbose="${testng.verbose}" haltonfailure="true" useDefaultListeners="false" listeners="${testng.listeners}" workingDir="${basedir}">
+ <jvmarg line="${ext.class.path}"/>
+ <jvmarg line="${run.test.jvmargs} -Xmx${run.test.xmx} ${run.test.jvmsecurityargs}"/>
+ <jvmarg line="${debug.test.jvmargs}"/>
+ <propertyset>
+ <propertyref prefix="nashorn."/>
+ </propertyset>
+ <propertyset>
+ <propertyref prefix="test-sys-prop."/>
+ <mapper from="test-sys-prop.*" to="*" type="glob"/>
+ </propertyset>
+ <sysproperty key="test.js.excludes.file" value="${exclude.list}"/>
+ <classpath>
+ <pathelement path="${run.test.classpath}"/>
+ </classpath>
+ </testng>
+ </target>
+
+ <target name="test" depends="jar, -test-classes-all,-test-classes-single, check-testng, check-external-tests, compile-test, generate-policy-file, -test-security, -test-nosecurity" if="testng.available"/>
+
<target name="check-jemmy.jfx.testng" unless="jemmy.jfx.testng.available">
<echo message="WARNING: Jemmy or JavaFX or TestNG not available, will not run tests. Please copy testng.jar, JemmyCore.jar, JemmyFX.jar, JemmyAWTInput.jar under test${file.separator}lib directory. And make sure you have jfxrt.jar in ${java.home}${file.separator}lib${file.separator}ext dir."/>
</target>
--- a/nashorn/make/nbproject/ide-file-targets.xml Wed Jun 11 10:53:27 2014 +0400
+++ b/nashorn/make/nbproject/ide-file-targets.xml Wed Jun 18 13:14:15 2014 -0700
@@ -22,38 +22,14 @@
questions.
-->
<project basedir=".." name="nashorn-IDE">
- <property file="nbproject/nbjdk.properties"/>
- <property location="${netbeans.user}/build.properties" name="user.properties.file"/>
- <property file="${user.properties.file}"/>
- <import file="jdk.xml"/>
- <import file="${basedir}/build-init.xml"/>
- <!-- TODO: edit the following target according to your needs -->
- <!-- (more info: http://www.netbeans.org/kb/articles/freeform-config.html#runsingle) -->
- <target depends="-jdk-init, init" name="debug-selected-file-in-src">
- <fail unless="debug.class">Must set property 'debug.class'</fail>
- <ant antfile="build.xml" inheritall="false" target="jar"/>
+ <target name="debug-selected-file-in-src">
+ <fail unless="test.class">Must set property 'debug.class'</fail>
<nbjpdastart addressproperty="jpda.address" name="nashorn" transport="dt_socket">
<classpath path="${run.test.classpath}"/>
</nbjpdastart>
- <java classname="${debug.class}" fork="false">
- <classpath path="${run.test.classpath}"/>
- <jvmarg line="${boot.class.path}"/>
- <jvmarg value="-Xdebug"/>
- <jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/>
- <jvmarg line="${run.test.jvmargs}"/>
- <arg value="${debug.class}"/>
- </java>
- </target>
- <!-- TODO: edit the following target according to your needs -->
- <!-- (more info: http://www.netbeans.org/kb/articles/freeform-config.html#runsingle) -->
- <target depends="-jdk-init, init" name="run-selected-file-in-src">
- <fail unless="run.class">Must set property 'run.class'</fail>
- <ant antfile="build.xml" inheritall="false" target="jar"/>
- <java classname="${run.class}" failonerror="true" fork="false">
- <classpath path="${run.test.classpath}"/>
- <jvmarg line="${boot.class.path}"/>
- <jvmarg line="${run.test.jvmargs}"/>
- <arg value="${run.class}"/>
- </java>
+ <ant antfile="build.xml" inheritall="false" target="test">
+ <property name="test.class" value="${test.class}"/>
+ <property name="debug.test.jvmargs" value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/>
+ </ant>
</target>
</project>
--- a/nashorn/make/nbproject/project.xml Wed Jun 11 10:53:27 2014 +0400
+++ b/nashorn/make/nbproject/project.xml Wed Jun 18 13:14:15 2014 -0700
@@ -98,27 +98,27 @@
<script>nbproject/nbjdk.xml</script>
<target>debug-nb</target>
</action>
- <action name="debug.single">
- <script>nbproject/ide-file-targets.xml</script>
- <target>debug-selected-file-in-src</target>
+ <action name="run.single">
+ <script>build.xml</script>
+ <target>test</target>
<context>
- <property>debug.class</property>
- <folder>test/src</folder>
+ <property>test.class</property>
+ <folder>../test/src</folder>
<pattern>\.java$</pattern>
- <format>java-name</format>
+ <format>relative-path-noext</format>
<arity>
<one-file-only/>
</arity>
</context>
</action>
- <action name="run.single">
+ <action name="debug.single">
<script>nbproject/ide-file-targets.xml</script>
- <target>run-selected-file-in-src</target>
+ <target>debug-selected-file-in-src</target>
<context>
- <property>run.class</property>
- <folder>test/src</folder>
+ <property>test.class</property>
+ <folder>../test/src</folder>
<pattern>\.java$</pattern>
- <format>java-name</format>
+ <format>relative-path-noext</format>
<arity>
<one-file-only/>
</arity>
--- a/nashorn/src/jdk/nashorn/internal/runtime/AccessorProperty.java Wed Jun 11 10:53:27 2014 +0400
+++ b/nashorn/src/jdk/nashorn/internal/runtime/AccessorProperty.java Wed Jun 18 13:14:15 2014 -0700
@@ -550,8 +550,13 @@
"invalid getter type " + type + " for " + getKey();
//all this does is add a return value filter for object fields only
- if (GETTER_CACHE[i] == null) {
- GETTER_CACHE[i] = debug(
+ final MethodHandle[] getterCache = GETTER_CACHE;
+ final MethodHandle cachedGetter = getterCache[i];
+ final MethodHandle getter;
+ if (cachedGetter != null) {
+ getter = cachedGetter;
+ } else {
+ getter = debug(
createGetter(
getCurrentType(),
type,
@@ -561,9 +566,10 @@
getCurrentType(),
type,
"get");
+ getterCache[i] = getter;
}
- assert GETTER_CACHE[i].type().returnType() == type && GETTER_CACHE[i].type().parameterType(0) == Object.class;
- return GETTER_CACHE[i];
+ assert getter.type().returnType() == type && getter.type().parameterType(0) == Object.class;
+ return getter;
}
@Override
--- a/nashorn/src/jdk/nashorn/internal/runtime/Context.java Wed Jun 11 10:53:27 2014 +0400
+++ b/nashorn/src/jdk/nashorn/internal/runtime/Context.java Wed Jun 18 13:14:15 2014 -0700
@@ -1014,6 +1014,9 @@
}
private static ScriptFunction getProgramFunction(final Class<?> script, final ScriptObject scope) {
+ if (script == null) {
+ return null;
+ }
return invokeCreateProgramFunctionHandle(getCreateProgramFunctionHandle(script), scope);
}
--- a/nashorn/src/jdk/nashorn/internal/runtime/DebuggerSupport.java Wed Jun 11 10:53:27 2014 +0400
+++ b/nashorn/src/jdk/nashorn/internal/runtime/DebuggerSupport.java Wed Jun 18 13:14:15 2014 -0700
@@ -25,14 +25,21 @@
package jdk.nashorn.internal.runtime;
+import static jdk.nashorn.internal.codegen.CompilerConstants.SOURCE;
import static jdk.nashorn.internal.runtime.UnwarrantedOptimismException.INVALID_PROGRAM_POINT;
+import java.lang.invoke.MethodHandle;
+import java.lang.reflect.Field;
+import java.net.URL;
import java.util.HashSet;
import java.util.Set;
+import jdk.nashorn.internal.scripts.JS;
/**
* This class provides support for external debuggers. Its primary purpose is
* is to simplify the debugger tasks and provide better performance.
+ * Even though the methods are not public, there are still part of the
+ * external debugger interface.
*/
final class DebuggerSupport {
/**
@@ -49,6 +56,11 @@
@SuppressWarnings("unused")
final
DebuggerValueDesc forceLoad = new DebuggerValueDesc(null, false, null, null);
+
+ // Hook to force the loading of the SourceInfo class
+ @SuppressWarnings("unused")
+ final
+ SourceInfo srcInfo = new SourceInfo(null, 0, null, null);
}
/** This class is used to send a bulk description of a value. */
@@ -73,6 +85,54 @@
}
}
+ static class SourceInfo {
+ final String name;
+ final URL url;
+ final int hash;
+ final char[] content;
+
+ SourceInfo(final String name, final int hash, final URL url, final char[] content) {
+ this.name = name;
+ this.hash = hash;
+ this.url = url;
+ this.content = content;
+ }
+ }
+
+ /**
+ * Hook that is called just before invoking method handle
+ * from ScriptFunctionData via invoke, constructor method calls.
+ *
+ * @param mh script class method about to be invoked.
+ */
+ static void notifyInvoke(final MethodHandle mh) {
+ // Do nothing here. This is placeholder method on which a
+ // debugger can place a breakpoint so that it can access the
+ // (script class) method handle that is about to be invoked.
+ // See ScriptFunctionData.invoke and ScriptFunctionData.construct.
+ }
+
+ /**
+ * Return the script source info for the given script class.
+ *
+ * @param clazz compiled script class
+ * @return SourceInfo
+ */
+ static SourceInfo getSourceInfo(final Class<?> clazz) {
+ if (JS.class.isAssignableFrom(clazz)) {
+ try {
+ final Field sourceField = clazz.getDeclaredField(SOURCE.symbolName());
+ sourceField.setAccessible(true);
+ final Source src = (Source) sourceField.get(null);
+ return src.getSourceInfo();
+ } catch (final IllegalAccessException | NoSuchFieldException ignored) {
+ return null;
+ }
+ }
+
+ return null;
+ }
+
/**
* Return the current context global.
* @return context global.
@@ -87,7 +147,7 @@
* @param self Receiver to use.
* @param string String to evaluate.
* @param returnException true if exceptions are to be returned.
- * @return Result of eval as string, or, an exception or null depending on returnException.
+ * @return Result of eval, or, an exception or null depending on returnException.
*/
static Object eval(final ScriptObject scope, final Object self, final String string, final boolean returnException) {
final ScriptObject global = Context.getGlobal();
@@ -238,7 +298,7 @@
* @param value Arbitrary value to be displayed by the debugger.
* @return A string representation of the value or an array of DebuggerValueDesc.
*/
- private static String valueAsString(final Object value) {
+ static String valueAsString(final Object value) {
final JSType type = JSType.of(value);
switch (type) {
--- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java Wed Jun 11 10:53:27 2014 +0400
+++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java Wed Jun 18 13:14:15 2014 -0700
@@ -551,6 +551,8 @@
final Object selfObj = convertThisObject(self);
final Object[] args = arguments == null ? ScriptRuntime.EMPTY_ARRAY : arguments;
+ DebuggerSupport.notifyInvoke(mh);
+
if (isVarArg(mh)) {
if (needsCallee(mh)) {
return mh.invokeExact(fn, selfObj, args);
@@ -604,6 +606,8 @@
final MethodHandle mh = getGenericConstructor(fn.getScope());
final Object[] args = arguments == null ? ScriptRuntime.EMPTY_ARRAY : arguments;
+ DebuggerSupport.notifyInvoke(mh);
+
if (isVarArg(mh)) {
if (needsCallee(mh)) {
return mh.invokeExact(fn, args);
--- a/nashorn/src/jdk/nashorn/internal/runtime/Source.java Wed Jun 11 10:53:27 2014 +0400
+++ b/nashorn/src/jdk/nashorn/internal/runtime/Source.java Wed Jun 18 13:14:15 2014 -0700
@@ -126,6 +126,11 @@
}
}
+ /* package-private */
+ DebuggerSupport.SourceInfo getSourceInfo() {
+ return new DebuggerSupport.SourceInfo(getName(), data.hashCode(), data.url(), data.array());
+ }
+
// Wrapper to manage lazy loading
private static interface Data {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/JDK-8044798.js Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+/**
+ * JDK-8044798: API for debugging Nashorn
+ *
+ * @test
+ * @run
+ */
+
+// basic API exercise checks
+
+var Arrays = Java.type("java.util.Arrays");
+var CharArray = Java.type("char[]");
+var DebuggerSupport = Java.type("jdk.nashorn.internal.runtime.DebuggerSupport");
+var DebuggerValueDesc = Java.type("jdk.nashorn.internal.runtime.DebuggerSupport.DebuggerValueDesc");
+
+var valueDescFields = DebuggerValueDesc.class.declaredFields;
+Arrays.sort(valueDescFields, function(f1, f2) f1.name.compareTo(f2.name));
+for each (var f in valueDescFields) {
+ f.accessible = true;
+}
+
+var debuggerSupportMethods = DebuggerSupport.class.declaredMethods;
+
+// methods of DebuggerSupport that we use
+var evalMethod, valueInfoMethod, valueInfosMethod;
+var getSourceInfoMethod, valueAsStringMethod;
+
+for each (var m in debuggerSupportMethods) {
+ m.accessible = true;
+ switch (m.name) {
+ case "eval":
+ evalMethod = m;
+ break;
+ case "valueInfo":
+ if (m.parameterCount == 3) {
+ valueInfoMethod = m;
+ }
+ break;
+ case "valueInfos":
+ valueInfosMethod = m;
+ break;
+ case "valueAsString":
+ valueAsStringMethod = m;
+ break;
+ case "getSourceInfo":
+ getSourceInfoMethod = m;
+ break;
+ }
+}
+
+// eval
+var value = evalMethod.invoke(null, null, null, "33 + 55", false);
+print(value);
+
+// valueInfo
+var info = valueInfoMethod.invoke(null, "apply", Function, true);
+for each (var f in valueDescFields) {
+ print(f.name, "=", f.get(info));
+}
+
+// valueInfo - user defined object
+var info = valueInfoMethod.invoke(null, "foo", { foo: 343 }, true);
+for each (var f in valueDescFields) {
+ print(f.name, "=", f.get(info));
+}
+
+// valueInfos
+var infos = valueInfosMethod.invoke(null, Object, true);
+for each (var info in infos) {
+ for each (var f in valueDescFields) {
+ print(f.name, "=", f.get(info));
+ }
+}
+
+// valueInfos - user defined object
+var infos = valueInfosMethod.invoke(null, { foo: 34, bar: "hello" }, true);
+for each (var info in infos) {
+ for each (var f in valueDescFields) {
+ print(f.name, "=", f.get(info));
+ }
+}
+
+// valueAsString
+function printValue(value) {
+ print(valueAsStringMethod.invoke(null, value));
+}
+
+printValue(undefined);
+printValue(null);
+printValue("hello");
+printValue(Math.PI);
+printValue(this);
+
+// The below are not part of DebuggerSupport. But we need these to
+// test DebuggerSupport.getSourceInfo etc. which need compiled script class
+
+var Source = Java.type("jdk.nashorn.internal.runtime.Source");
+var Context = Java.type("jdk.nashorn.internal.runtime.Context");
+var sourceCls = Source.class;
+var errorMgrCls = Java.type("jdk.nashorn.internal.runtime.ErrorManager").class;
+var booleanCls = Java.type("java.lang.Boolean").TYPE;
+
+// private compile method of Context class
+var compileMethod = Context.class.getDeclaredMethod("compile",
+ sourceCls, errorMgrCls, booleanCls);
+compileMethod.accessible = true;
+
+var scriptCls = compileMethod.invoke(Context.context,
+ Source.sourceFor("test", "print('hello')"),
+ new Context.ThrowErrorManager(), false);
+
+var SCRIPT_CLASS_NAME_PREFIX = "jdk.nashorn.internal.scripts.Script$";
+print("script class name pattern satisfied? " +
+ scriptCls.name.startsWith(SCRIPT_CLASS_NAME_PREFIX));
+
+var srcInfo = getSourceInfoMethod.invoke(null, scriptCls);
+var srcInfoFields = srcInfo.class.declaredFields;
+Arrays.sort(srcInfoFields, function(f1, f2) f1.name.compareTo(f2.name));
+
+print("Source info");
+for each (var f in srcInfoFields) {
+ f.accessible = true;
+ var fieldValue = f.get(srcInfo);
+ if (fieldValue instanceof CharArray) {
+ fieldValue = new java.lang.String(fieldValue);
+ }
+
+ print(f.name, "=", fieldValue);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/JDK-8044798.js.EXPECTED Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,104 @@
+88
+expandable = false
+key = apply
+valueAsObject = function Function() { [native code] }
+valueAsString = function Function() { [native code] }
+expandable = true
+key = foo
+valueAsObject = [object Object]
+valueAsString = {foo: 343}
+expandable = false
+key = setIndexedPropertiesToExternalArrayData
+valueAsObject = function setIndexedPropertiesToExternalArrayData() { [native code] }
+valueAsString = function setIndexedPropertiesToExternalArrayData() { [native code] }
+expandable = false
+key = getPrototypeOf
+valueAsObject = function getPrototypeOf() { [native code] }
+valueAsString = function getPrototypeOf() { [native code] }
+expandable = false
+key = setPrototypeOf
+valueAsObject = function setPrototypeOf() { [native code] }
+valueAsString = function setPrototypeOf() { [native code] }
+expandable = false
+key = getOwnPropertyDescriptor
+valueAsObject = function getOwnPropertyDescriptor() { [native code] }
+valueAsString = function getOwnPropertyDescriptor() { [native code] }
+expandable = false
+key = getOwnPropertyNames
+valueAsObject = function getOwnPropertyNames() { [native code] }
+valueAsString = function getOwnPropertyNames() { [native code] }
+expandable = false
+key = create
+valueAsObject = function create() { [native code] }
+valueAsString = function create() { [native code] }
+expandable = false
+key = defineProperty
+valueAsObject = function defineProperty() { [native code] }
+valueAsString = function defineProperty() { [native code] }
+expandable = false
+key = defineProperties
+valueAsObject = function defineProperties() { [native code] }
+valueAsString = function defineProperties() { [native code] }
+expandable = false
+key = seal
+valueAsObject = function seal() { [native code] }
+valueAsString = function seal() { [native code] }
+expandable = false
+key = freeze
+valueAsObject = function freeze() { [native code] }
+valueAsString = function freeze() { [native code] }
+expandable = false
+key = preventExtensions
+valueAsObject = function preventExtensions() { [native code] }
+valueAsString = function preventExtensions() { [native code] }
+expandable = false
+key = isSealed
+valueAsObject = function isSealed() { [native code] }
+valueAsString = function isSealed() { [native code] }
+expandable = false
+key = isFrozen
+valueAsObject = function isFrozen() { [native code] }
+valueAsString = function isFrozen() { [native code] }
+expandable = false
+key = isExtensible
+valueAsObject = function isExtensible() { [native code] }
+valueAsString = function isExtensible() { [native code] }
+expandable = false
+key = keys
+valueAsObject = function keys() { [native code] }
+valueAsString = function keys() { [native code] }
+expandable = false
+key = bindProperties
+valueAsObject = function bindProperties() { [native code] }
+valueAsString = function bindProperties() { [native code] }
+expandable = false
+key = prototype
+valueAsObject = [object Object]
+valueAsString = {toString: function toString() { [native code] }, toLocaleString: function toLocaleString() { [native code] }, valueOf: function valueOf() { [native code] }, hasOwnProperty: function hasOwnProperty() { [native code] }, isPrototypeOf: function isPrototypeOf() { [native code] }, propertyIsEnumerable: function propertyIsEnumerable() { [native code] }, constructor: function Object() { [native code] }, __proto__: null}
+expandable = false
+key = length
+valueAsObject = 1
+valueAsString = 1
+expandable = false
+key = name
+valueAsObject = Object
+valueAsString = "Object"
+expandable = false
+key = foo
+valueAsObject = 34
+valueAsString = 34
+expandable = false
+key = bar
+valueAsObject = hello
+valueAsString = "hello"
+undefined
+null
+"hello"
+3.141592653589793
+[object global]
+script class name pattern satisfied? true
+Source info
+content = print('hello')
+hash = 1655359881
+name = test
+url = null
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/debuggersupportapi.js Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+/**
+ * JDK-8044798: API for debugging Nashorn
+ *
+ * @test
+ * @run
+ */
+
+// Basic API class, method, field existence checks.
+
+// The following classes and the associated methods and fields are used as
+// private debugger interface. Though private/implementation defined, nashorn
+// code should not be changed to remove these classes, fields and methods.
+// The test takes signatures of debugger interface and stores in .EXPECTED file.
+// If any incompatible change is made to nashorn to break any of these, this
+// test will fail.
+
+var Arrays = Java.type("java.util.Arrays");
+var DebuggerSupport = Java.type("jdk.nashorn.internal.runtime.DebuggerSupport");
+
+print(DebuggerSupport.class);
+print();
+var methods = DebuggerSupport.class.declaredMethods;
+Arrays.sort(methods, function(m1, m2) m1.name.compareTo(m2.name));
+for each (var mth in methods) {
+ switch (mth.name) {
+ case "eval":
+ case "notifyInvoke":
+ case "getSourceInfo":
+ case "valueAsString":
+ case "valueInfos":
+ print(mth);
+ break;
+ case "valueInfo":
+ if (mth.parameterCount == 3) {
+ print(mth);
+ }
+ break;
+ }
+}
+print();
+
+var DebuggerValueDesc = Java.type("jdk.nashorn.internal.runtime.DebuggerSupport.DebuggerValueDesc");
+print(DebuggerValueDesc.class);
+print();
+var fields = DebuggerValueDesc.class.declaredFields;
+Arrays.sort(fields, function(f1, f2) f1.name.compareTo(f2.name));
+for each (var fld in fields) {
+ switch (fld.name) {
+ case "key":
+ case "expandable":
+ case "valueAsObject":
+ case "valueAsString":
+ print(fld);
+ }
+}
+print();
+
+var SourceInfo = Java.type("jdk.nashorn.internal.runtime.DebuggerSupport.SourceInfo");
+print(SourceInfo.class);
+print();
+var fields = SourceInfo.class.declaredFields;
+Arrays.sort(fields, function(f1, f2) f1.name.compareTo(f2.name));
+for each (var fld in fields) {
+ switch (fld.name) {
+ case "name":
+ case "hash":
+ case "url":
+ case "content":
+ print(fld);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/debuggersupportapi.js.EXPECTED Wed Jun 18 13:14:15 2014 -0700
@@ -0,0 +1,22 @@
+class jdk.nashorn.internal.runtime.DebuggerSupport
+
+static java.lang.Object jdk.nashorn.internal.runtime.DebuggerSupport.eval(jdk.nashorn.internal.runtime.ScriptObject,java.lang.Object,java.lang.String,boolean)
+static jdk.nashorn.internal.runtime.DebuggerSupport$SourceInfo jdk.nashorn.internal.runtime.DebuggerSupport.getSourceInfo(java.lang.Class)
+static void jdk.nashorn.internal.runtime.DebuggerSupport.notifyInvoke(java.lang.invoke.MethodHandle)
+static java.lang.String jdk.nashorn.internal.runtime.DebuggerSupport.valueAsString(java.lang.Object)
+static jdk.nashorn.internal.runtime.DebuggerSupport$DebuggerValueDesc jdk.nashorn.internal.runtime.DebuggerSupport.valueInfo(java.lang.String,java.lang.Object,boolean)
+static jdk.nashorn.internal.runtime.DebuggerSupport$DebuggerValueDesc[] jdk.nashorn.internal.runtime.DebuggerSupport.valueInfos(java.lang.Object,boolean)
+
+class jdk.nashorn.internal.runtime.DebuggerSupport$DebuggerValueDesc
+
+final boolean jdk.nashorn.internal.runtime.DebuggerSupport$DebuggerValueDesc.expandable
+final java.lang.String jdk.nashorn.internal.runtime.DebuggerSupport$DebuggerValueDesc.key
+final java.lang.Object jdk.nashorn.internal.runtime.DebuggerSupport$DebuggerValueDesc.valueAsObject
+final java.lang.String jdk.nashorn.internal.runtime.DebuggerSupport$DebuggerValueDesc.valueAsString
+
+class jdk.nashorn.internal.runtime.DebuggerSupport$SourceInfo
+
+final char[] jdk.nashorn.internal.runtime.DebuggerSupport$SourceInfo.content
+final int jdk.nashorn.internal.runtime.DebuggerSupport$SourceInfo.hash
+final java.lang.String jdk.nashorn.internal.runtime.DebuggerSupport$SourceInfo.name
+final java.net.URL jdk.nashorn.internal.runtime.DebuggerSupport$SourceInfo.url
--- a/nashorn/test/src/jdk/nashorn/internal/runtime/ContextTest.java Wed Jun 11 10:53:27 2014 +0400
+++ b/nashorn/test/src/jdk/nashorn/internal/runtime/ContextTest.java Wed Jun 18 13:14:15 2014 -0700
@@ -28,6 +28,7 @@
import static jdk.nashorn.internal.runtime.Source.sourceFor;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
import java.util.Map;
import jdk.nashorn.internal.objects.Global;
@@ -60,6 +61,27 @@
}
}
+ // Make sure trying to compile an invalid script returns null - see JDK-8046215.
+ @Test
+ public void compileErrorTest() {
+ final Options options = new Options("");
+ final ErrorManager errors = new ErrorManager();
+ final Context cx = new Context(options, errors, Thread.currentThread().getContextClassLoader());
+ final Global oldGlobal = Context.getGlobal();
+ Context.setGlobal(cx.createGlobal());
+ try {
+ final ScriptFunction script = cx.compileScript(sourceFor("<evalCompileErrorTest>", "*/"), Context.getGlobal());
+ if (script != null) {
+ fail("Invalid script compiled without errors");
+ }
+ if (errors.getNumberOfErrors() != 1) {
+ fail("Wrong number of errors: " + errors.getNumberOfErrors());
+ }
+ } finally {
+ Context.setGlobal(oldGlobal);
+ }
+ }
+
// basic check for JS reflection access - java.util.Map-like access on ScriptObject
@Test
public void reflectionTest() {