--- a/.hgtags Thu Mar 10 14:56:11 2011 -0500
+++ b/.hgtags Wed Mar 16 10:47:45 2011 -0400
@@ -107,3 +107,4 @@
a36beda9b9de91231d92a2c529f21cc218fcf8d5 jdk7-b130
d8af56da89bc0fc02a6b6ad78f51157a46d665ab jdk7-b131
d61280d36755d1941fb487f554e8b7a6d0bca6a1 jdk7-b132
+fd444c61e7ed3d92b2a730da7c737b02191b682f jdk7-b133
--- a/.hgtags-top-repo Thu Mar 10 14:56:11 2011 -0500
+++ b/.hgtags-top-repo Wed Mar 16 10:47:45 2011 -0400
@@ -107,3 +107,4 @@
cc58c11af15411042719e9c82707fdbef60a9e0f jdk7-b130
5d86d951426aaf340b1ba84ae2d5ab5da65a71e2 jdk7-b131
0f62a65fb666b337caa585015ab6ea2e60e709ca jdk7-b132
+c6f380693342feadccc5fe2c5adf500e861361aa jdk7-b133
--- a/corba/.hgtags Thu Mar 10 14:56:11 2011 -0500
+++ b/corba/.hgtags Wed Mar 16 10:47:45 2011 -0400
@@ -107,3 +107,4 @@
563a8f8b5be3940e9346cffac4eff9ed02b3c69f jdk7-b130
9d6dd2cdfcb92612dbd836ecded87770d52b49db jdk7-b131
1b1e75e8f476e5c07f0d2b035993895e2603e1f0 jdk7-b132
+671fe2e623ffefb4b7c312be919fc71eb48c1df1 jdk7-b133
--- a/hotspot/.hgtags Thu Mar 10 14:56:11 2011 -0500
+++ b/hotspot/.hgtags Wed Mar 16 10:47:45 2011 -0400
@@ -153,3 +153,4 @@
e9aa2ca89ad6c53420623d579765f9706ec523d7 hs21-b02
0e531ab5ba04967a0e9aa6aef65e6eb3a0dcf632 jdk7-b132
a8d643a4db47c7b58e0bcb49c77b5c3610de86a8 hs21-b03
+1b3a350709e4325d759bb453ff3fb6a463270488 jdk7-b133
--- a/hotspot/src/share/vm/code/nmethod.cpp Thu Mar 10 14:56:11 2011 -0500
+++ b/hotspot/src/share/vm/code/nmethod.cpp Wed Mar 16 10:47:45 2011 -0400
@@ -170,7 +170,7 @@
int pc_desc_resets; // number of resets (= number of caches)
int pc_desc_queries; // queries to nmethod::find_pc_desc
int pc_desc_approx; // number of those which have approximate true
- int pc_desc_repeats; // number of _last_pc_desc hits
+ int pc_desc_repeats; // number of _pc_descs[0] hits
int pc_desc_hits; // number of LRU cache hits
int pc_desc_tests; // total number of PcDesc examinations
int pc_desc_searches; // total number of quasi-binary search steps
@@ -278,40 +278,44 @@
void PcDescCache::reset_to(PcDesc* initial_pc_desc) {
if (initial_pc_desc == NULL) {
- _last_pc_desc = NULL; // native method
+ _pc_descs[0] = NULL; // native method; no PcDescs at all
return;
}
NOT_PRODUCT(++nmethod_stats.pc_desc_resets);
// reset the cache by filling it with benign (non-null) values
assert(initial_pc_desc->pc_offset() < 0, "must be sentinel");
- _last_pc_desc = initial_pc_desc + 1; // first valid one is after sentinel
for (int i = 0; i < cache_size; i++)
_pc_descs[i] = initial_pc_desc;
}
PcDesc* PcDescCache::find_pc_desc(int pc_offset, bool approximate) {
NOT_PRODUCT(++nmethod_stats.pc_desc_queries);
- NOT_PRODUCT(if (approximate) ++nmethod_stats.pc_desc_approx);
+ NOT_PRODUCT(if (approximate) ++nmethod_stats.pc_desc_approx);
+
+ // Note: one might think that caching the most recently
+ // read value separately would be a win, but one would be
+ // wrong. When many threads are updating it, the cache
+ // line it's in would bounce between caches, negating
+ // any benefit.
// In order to prevent race conditions do not load cache elements
// repeatedly, but use a local copy:
PcDesc* res;
- // Step one: Check the most recently returned value.
- res = _last_pc_desc;
- if (res == NULL) return NULL; // native method; no PcDescs at all
+ // Step one: Check the most recently added value.
+ res = _pc_descs[0];
+ if (res == NULL) return NULL; // native method; no PcDescs at all
if (match_desc(res, pc_offset, approximate)) {
NOT_PRODUCT(++nmethod_stats.pc_desc_repeats);
return res;
}
- // Step two: Check the LRU cache.
- for (int i = 0; i < cache_size; i++) {
+ // Step two: Check the rest of the LRU cache.
+ for (int i = 1; i < cache_size; ++i) {
res = _pc_descs[i];
- if (res->pc_offset() < 0) break; // optimization: skip empty cache
+ if (res->pc_offset() < 0) break; // optimization: skip empty cache
if (match_desc(res, pc_offset, approximate)) {
NOT_PRODUCT(++nmethod_stats.pc_desc_hits);
- _last_pc_desc = res; // record this cache hit in case of repeat
return res;
}
}
@@ -322,24 +326,23 @@
void PcDescCache::add_pc_desc(PcDesc* pc_desc) {
NOT_PRODUCT(++nmethod_stats.pc_desc_adds);
- // Update the LRU cache by shifting pc_desc forward:
+ // Update the LRU cache by shifting pc_desc forward.
for (int i = 0; i < cache_size; i++) {
PcDesc* next = _pc_descs[i];
_pc_descs[i] = pc_desc;
pc_desc = next;
}
- // Note: Do not update _last_pc_desc. It fronts for the LRU cache.
}
// adjust pcs_size so that it is a multiple of both oopSize and
// sizeof(PcDesc) (assumes that if sizeof(PcDesc) is not a multiple
// of oopSize, then 2*sizeof(PcDesc) is)
-static int adjust_pcs_size(int pcs_size) {
+static int adjust_pcs_size(int pcs_size) {
int nsize = round_to(pcs_size, oopSize);
if ((nsize % sizeof(PcDesc)) != 0) {
nsize = pcs_size + sizeof(PcDesc);
}
- assert((nsize % oopSize) == 0, "correct alignment");
+ assert((nsize % oopSize) == 0, "correct alignment");
return nsize;
}
@@ -1180,14 +1183,17 @@
set_stack_traversal_mark(NMethodSweeper::traversal_count());
}
-// Tell if a non-entrant method can be converted to a zombie (i.e., there is no activations on the stack)
+// Tell if a non-entrant method can be converted to a zombie (i.e.,
+// there are no activations on the stack, not in use by the VM,
+// and not in use by the ServiceThread)
bool nmethod::can_not_entrant_be_converted() {
assert(is_not_entrant(), "must be a non-entrant method");
// Since the nmethod sweeper only does partial sweep the sweeper's traversal
// count can be greater than the stack traversal count before it hits the
// nmethod for the second time.
- return stack_traversal_mark()+1 < NMethodSweeper::traversal_count();
+ return stack_traversal_mark()+1 < NMethodSweeper::traversal_count() &&
+ !is_locked_by_vm();
}
void nmethod::inc_decompile_count() {
@@ -1294,6 +1300,7 @@
// Common functionality for both make_not_entrant and make_zombie
bool nmethod::make_not_entrant_or_zombie(unsigned int state) {
assert(state == zombie || state == not_entrant, "must be zombie or not_entrant");
+ assert(!is_zombie(), "should not already be a zombie");
// Make sure neither the nmethod nor the method is flushed in case of a safepoint in code below.
nmethodLocker nml(this);
@@ -1301,11 +1308,6 @@
No_Safepoint_Verifier nsv;
{
- // If the method is already zombie there is nothing to do
- if (is_zombie()) {
- return false;
- }
-
// invalidate osr nmethod before acquiring the patching lock since
// they both acquire leaf locks and we don't want a deadlock.
// This logic is equivalent to the logic below for patching the
@@ -1375,13 +1377,12 @@
flush_dependencies(NULL);
}
- {
- // zombie only - if a JVMTI agent has enabled the CompiledMethodUnload event
- // and it hasn't already been reported for this nmethod then report it now.
- // (the event may have been reported earilier if the GC marked it for unloading).
- Pause_No_Safepoint_Verifier pnsv(&nsv);
- post_compiled_method_unload();
- }
+ // zombie only - if a JVMTI agent has enabled the CompiledMethodUnload
+ // event and it hasn't already been reported for this nmethod then
+ // report it now. The event may have been reported earilier if the GC
+ // marked it for unloading). JvmtiDeferredEventQueue support means
+ // we no longer go to a safepoint here.
+ post_compiled_method_unload();
#ifdef ASSERT
// It's no longer safe to access the oops section since zombie
@@ -1566,7 +1567,7 @@
if (_jmethod_id != NULL && JvmtiExport::should_post_compiled_method_unload()) {
assert(!unload_reported(), "already unloaded");
JvmtiDeferredEvent event =
- JvmtiDeferredEvent::compiled_method_unload_event(
+ JvmtiDeferredEvent::compiled_method_unload_event(this,
_jmethod_id, insts_begin());
if (SafepointSynchronize::is_at_safepoint()) {
// Don't want to take the queueing lock. Add it as pending and
@@ -2171,10 +2172,12 @@
lock_nmethod(_nm);
}
-void nmethodLocker::lock_nmethod(nmethod* nm) {
+// Only JvmtiDeferredEvent::compiled_method_unload_event()
+// should pass zombie_ok == true.
+void nmethodLocker::lock_nmethod(nmethod* nm, bool zombie_ok) {
if (nm == NULL) return;
Atomic::inc(&nm->_lock_count);
- guarantee(!nm->is_zombie(), "cannot lock a zombie method");
+ guarantee(zombie_ok || !nm->is_zombie(), "cannot lock a zombie method");
}
void nmethodLocker::unlock_nmethod(nmethod* nm) {
--- a/hotspot/src/share/vm/code/nmethod.hpp Thu Mar 10 14:56:11 2011 -0500
+++ b/hotspot/src/share/vm/code/nmethod.hpp Wed Mar 16 10:47:45 2011 -0400
@@ -69,14 +69,13 @@
friend class VMStructs;
private:
enum { cache_size = 4 };
- PcDesc* _last_pc_desc; // most recent pc_desc found
PcDesc* _pc_descs[cache_size]; // last cache_size pc_descs found
public:
- PcDescCache() { debug_only(_last_pc_desc = NULL); }
+ PcDescCache() { debug_only(_pc_descs[0] = NULL); }
void reset_to(PcDesc* initial_pc_desc);
PcDesc* find_pc_desc(int pc_offset, bool approximate);
void add_pc_desc(PcDesc* pc_desc);
- PcDesc* last_pc_desc() { return _last_pc_desc; }
+ PcDesc* last_pc_desc() { return _pc_descs[0]; }
};
@@ -178,7 +177,7 @@
unsigned int _has_method_handle_invokes:1; // Has this method MethodHandle invokes?
// Protected by Patching_lock
- unsigned char _state; // {alive, not_entrant, zombie, unloaded)
+ unsigned char _state; // {alive, not_entrant, zombie, unloaded}
#ifdef ASSERT
bool _oops_are_stale; // indicates that it's no longer safe to access oops section
@@ -194,7 +193,10 @@
NOT_PRODUCT(bool _has_debug_info; )
- // Nmethod Flushing lock (if non-zero, then the nmethod is not removed)
+ // Nmethod Flushing lock. If non-zero, then the nmethod is not removed
+ // and is not made into a zombie. However, once the nmethod is made into
+ // a zombie, it will be locked one final time if CompiledMethodUnload
+ // event processing needs to be done.
jint _lock_count;
// not_entrant method removal. Each mark_sweep pass will update
@@ -522,8 +524,9 @@
void flush();
public:
- // If returning true, it is unsafe to remove this nmethod even though it is a zombie
- // nmethod, since the VM might have a reference to it. Should only be called from a safepoint.
+ // When true is returned, it is unsafe to remove this nmethod even if
+ // it is a zombie, since the VM or the ServiceThread might still be
+ // using it.
bool is_locked_by_vm() const { return _lock_count >0; }
// See comment at definition of _last_seen_on_stack
@@ -689,13 +692,20 @@
};
-// Locks an nmethod so its code will not get removed, even if it is a zombie/not_entrant method
+// Locks an nmethod so its code will not get removed and it will not
+// be made into a zombie, even if it is a not_entrant method. After the
+// nmethod becomes a zombie, if CompiledMethodUnload event processing
+// needs to be done, then lock_nmethod() is used directly to keep the
+// generated code from being reused too early.
class nmethodLocker : public StackObj {
nmethod* _nm;
public:
- static void lock_nmethod(nmethod* nm); // note: nm can be NULL
+ // note: nm can be NULL
+ // Only JvmtiDeferredEvent::compiled_method_unload_event()
+ // should pass zombie_ok == true.
+ static void lock_nmethod(nmethod* nm, bool zombie_ok = false);
static void unlock_nmethod(nmethod* nm); // (ditto)
nmethodLocker(address pc); // derive nm from pc
--- a/hotspot/src/share/vm/prims/jvmtiImpl.cpp Thu Mar 10 14:56:11 2011 -0500
+++ b/hotspot/src/share/vm/prims/jvmtiImpl.cpp Wed Mar 16 10:47:45 2011 -0400
@@ -919,15 +919,24 @@
nmethod* nm) {
JvmtiDeferredEvent event = JvmtiDeferredEvent(TYPE_COMPILED_METHOD_LOAD);
event._event_data.compiled_method_load = nm;
- nmethodLocker::lock_nmethod(nm); // will be unlocked when posted
+ // Keep the nmethod alive until the ServiceThread can process
+ // this deferred event.
+ nmethodLocker::lock_nmethod(nm);
return event;
}
JvmtiDeferredEvent JvmtiDeferredEvent::compiled_method_unload_event(
- jmethodID id, const void* code) {
+ nmethod* nm, jmethodID id, const void* code) {
JvmtiDeferredEvent event = JvmtiDeferredEvent(TYPE_COMPILED_METHOD_UNLOAD);
+ event._event_data.compiled_method_unload.nm = nm;
event._event_data.compiled_method_unload.method_id = id;
event._event_data.compiled_method_unload.code_begin = code;
+ // Keep the nmethod alive until the ServiceThread can process
+ // this deferred event. This will keep the memory for the
+ // generated code from being reused too early. We pass
+ // zombie_ok == true here so that our nmethod that was just
+ // made into a zombie can be locked.
+ nmethodLocker::lock_nmethod(nm, true /* zombie_ok */);
return event;
}
JvmtiDeferredEvent JvmtiDeferredEvent::dynamic_code_generated_event(
@@ -946,14 +955,19 @@
case TYPE_COMPILED_METHOD_LOAD: {
nmethod* nm = _event_data.compiled_method_load;
JvmtiExport::post_compiled_method_load(nm);
+ // done with the deferred event so unlock the nmethod
nmethodLocker::unlock_nmethod(nm);
break;
}
- case TYPE_COMPILED_METHOD_UNLOAD:
+ case TYPE_COMPILED_METHOD_UNLOAD: {
+ nmethod* nm = _event_data.compiled_method_unload.nm;
JvmtiExport::post_compiled_method_unload(
_event_data.compiled_method_unload.method_id,
_event_data.compiled_method_unload.code_begin);
+ // done with the deferred event so unlock the nmethod
+ nmethodLocker::unlock_nmethod(nm);
break;
+ }
case TYPE_DYNAMIC_CODE_GENERATED:
JvmtiExport::post_dynamic_code_generated_internal(
_event_data.dynamic_code_generated.name,
--- a/hotspot/src/share/vm/prims/jvmtiImpl.hpp Thu Mar 10 14:56:11 2011 -0500
+++ b/hotspot/src/share/vm/prims/jvmtiImpl.hpp Wed Mar 16 10:47:45 2011 -0400
@@ -458,6 +458,7 @@
union {
nmethod* compiled_method_load;
struct {
+ nmethod* nm;
jmethodID method_id;
const void* code_begin;
} compiled_method_unload;
@@ -477,7 +478,7 @@
// Factory methods
static JvmtiDeferredEvent compiled_method_load_event(nmethod* nm)
KERNEL_RETURN_(JvmtiDeferredEvent());
- static JvmtiDeferredEvent compiled_method_unload_event(
+ static JvmtiDeferredEvent compiled_method_unload_event(nmethod* nm,
jmethodID id, const void* code) KERNEL_RETURN_(JvmtiDeferredEvent());
static JvmtiDeferredEvent dynamic_code_generated_event(
const char* name, const void* begin, const void* end)
--- a/hotspot/src/share/vm/runtime/deoptimization.cpp Thu Mar 10 14:56:11 2011 -0500
+++ b/hotspot/src/share/vm/runtime/deoptimization.cpp Wed Mar 16 10:47:45 2011 -0400
@@ -101,9 +101,9 @@
_frame_pcs = frame_pcs;
_register_block = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2);
_return_type = return_type;
+ _initial_fp = 0;
// PD (x86 only)
_counter_temp = 0;
- _initial_fp = 0;
_unpack_kind = 0;
_sender_sp_temp = 0;
@@ -459,18 +459,9 @@
frame_sizes,
frame_pcs,
return_type);
-#if defined(IA32) || defined(AMD64)
- // We need a way to pass fp to the unpacking code so the skeletal frames
- // come out correct. This is only needed for x86 because of c2 using ebp
- // as an allocatable register. So this update is useless (and harmless)
- // on the other platforms. It would be nice to do this in a different
- // way but even the old style deoptimization had a problem with deriving
- // this value. NEEDS_CLEANUP
- // Note: now that c1 is using c2's deopt blob we must do this on all
- // x86 based platforms
- intptr_t** fp_addr = (intptr_t**) (((address)info) + info->initial_fp_offset_in_bytes());
- *fp_addr = array->sender().fp(); // was adapter_caller
-#endif /* IA32 || AMD64 */
+ // On some platforms, we need a way to pass fp to the unpacking code
+ // so the skeletal frames come out correct.
+ info->set_initial_fp((intptr_t) array->sender().fp());
if (array->frames() > 1) {
if (VerifyStack && TraceDeoptimization) {
--- a/hotspot/src/share/vm/runtime/deoptimization.hpp Thu Mar 10 14:56:11 2011 -0500
+++ b/hotspot/src/share/vm/runtime/deoptimization.hpp Wed Mar 16 10:47:45 2011 -0400
@@ -136,12 +136,12 @@
address* _frame_pcs; // Array of frame pc's, in bytes, for unrolling the stack
intptr_t* _register_block; // Block for storing callee-saved registers.
BasicType _return_type; // Tells if we have to restore double or long return value
+ intptr_t _initial_fp; // FP of the sender frame
// The following fields are used as temps during the unpacking phase
// (which is tight on registers, especially on x86). They really ought
// to be PD variables but that involves moving this class into its own
// file to use the pd include mechanism. Maybe in a later cleanup ...
intptr_t _counter_temp; // SHOULD BE PD VARIABLE (x86 frame count temp)
- intptr_t _initial_fp; // SHOULD BE PD VARIABLE (x86/c2 initial ebp)
intptr_t _unpack_kind; // SHOULD BE PD VARIABLE (x86 unpack kind)
intptr_t _sender_sp_temp; // SHOULD BE PD VARIABLE (x86 sender_sp)
public:
@@ -165,6 +165,8 @@
// Returns the total size of frames
int size_of_frames() const;
+ void set_initial_fp(intptr_t fp) { _initial_fp = fp; }
+
// Accessors used by the code generator for the unpack stub.
static int size_of_deoptimized_frame_offset_in_bytes() { return offset_of(UnrollBlock, _size_of_deoptimized_frame); }
static int caller_adjustment_offset_in_bytes() { return offset_of(UnrollBlock, _caller_adjustment); }
--- a/hotspot/src/share/vm/runtime/serviceThread.cpp Thu Mar 10 14:56:11 2011 -0500
+++ b/hotspot/src/share/vm/runtime/serviceThread.cpp Wed Mar 16 10:47:45 2011 -0400
@@ -70,11 +70,10 @@
java_lang_Thread::set_priority(thread_oop(), NearMaxPriority);
java_lang_Thread::set_daemon(thread_oop());
thread->set_threadObj(thread_oop());
+ _instance = thread;
Threads::add(thread);
Thread::start(thread);
-
- _instance = thread;
}
}
--- a/jaxp/.hgtags Thu Mar 10 14:56:11 2011 -0500
+++ b/jaxp/.hgtags Wed Mar 16 10:47:45 2011 -0400
@@ -107,3 +107,4 @@
ab107c1bc4b918404b191838c455e9b2892389f3 jdk7-b130
eab6f27131e4e2f0af0016b35b18ae65cdd249d9 jdk7-b131
abe04c59a556a3821c30bd8839e3c74f5d4281d1 jdk7-b132
+8e1148c7911b02e00a727461525f239da025cab7 jdk7-b133
--- a/jaxp/jaxp.properties Thu Mar 10 14:56:11 2011 -0500
+++ b/jaxp/jaxp.properties Wed Mar 16 10:47:45 2011 -0400
@@ -25,13 +25,13 @@
drops.master.copy.base=${drops.dir}
-jaxp_src.bundle.name=jaxp-1_4_5-dev.zip
-jaxp_src.bundle.md5.checksum=84e2c26853262c9144133c6ff7ef5dc9
+jaxp_src.bundle.name=jaxp-1_4_5-dev1.zip
+jaxp_src.bundle.md5.checksum=53c95613c29852a12b93e7249f1aa227
jaxp_src.master.bundle.dir=${drops.master.copy.base}
jaxp_src.master.bundle.url.base=http://download.java.net/jaxp/1.4.5/dev
-jaxp_tests.bundle.name=jaxp-1_4_5-dev-unittests.zip
-jaxp_tests.bundle.md5.checksum=0377e715fa21814cb8006768c5967dc5
+jaxp_tests.bundle.name=jaxp-1_4_5-dev1-unittests.zip
+jaxp_tests.bundle.md5.checksum=754aaba2f4944f69bfea91dec11daf4c
jaxp_tests.master.bundle.dir=${drops.master.copy.base}
jaxp_tests.master.bundle.url.base=http://download.java.net/jaxp/1.4.5/dev
--- a/jaxp/make/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jaxp/make/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -136,7 +136,7 @@
else
ANT = ant
ifneq ($(shell which $(ANT) > /dev/null; echo $$?), 0)
- $(error "\"ant\" not found; please set ANT_HOME or put \"ant\" on your PATH")
+ $(error "'ant' not found; please set ANT_HOME or put 'ant' on your PATH")
endif
endif
--- a/jaxws/.hgtags Thu Mar 10 14:56:11 2011 -0500
+++ b/jaxws/.hgtags Wed Mar 16 10:47:45 2011 -0400
@@ -107,3 +107,4 @@
ba1fac1c2083196422a12130db174334179a4d44 jdk7-b130
438abc0356cd97d91b25f67cd1abc9883e22f6ed jdk7-b131
0e57c3272d377eee04cc32c898e9a558051516b0 jdk7-b132
+359d0c8c00a02d3a094c19f8a485b2217c99a4e0 jdk7-b133
--- a/jaxws/make/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jaxws/make/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -136,7 +136,7 @@
else
ANT = ant
ifneq ($(shell which $(ANT) > /dev/null; echo $$?), 0)
- $(error "\"ant\" not found; please set ANT_HOME or put \"ant\" on your PATH")
+ $(error "'ant' not found; please set ANT_HOME or put 'ant' on your PATH")
endif
endif
--- a/jdk/.hgtags Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/.hgtags Wed Mar 16 10:47:45 2011 -0400
@@ -107,3 +107,4 @@
bdc069d3f9101f89ec3f81c2950ee2d68fa846d3 jdk7-b130
8ac52c85f9e91336dc00b52ef90b42eecf3230b3 jdk7-b131
6bbc7a4734952ae7604578f270e1566639fa8752 jdk7-b132
+5e5f68a01d12a4432172f384d5201f3a05254493 jdk7-b133
--- a/jdk/make/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -74,7 +74,6 @@
import_product -- copy in the product components \n\
import_fastdebug -- copy in the fastdebug components \n\
import_debug -- copy in the debug components \n\
-modules -- build the jdk and jre module images (experimental) \n\
create_links -- create softlinks in Solaris 32bit build to 64bit dirs \n\
"
@@ -261,7 +260,6 @@
# Release engineering targets.
#
include $(BUILDDIR)/common/Release.gmk
-include $(BUILDDIR)/common/Modules.gmk
#
# Cscope targets.
--- a/jdk/make/com/sun/crypto/provider/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/crypto/provider/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -249,7 +249,7 @@
else
$(JAR_DESTFILE): $(SIGNED_DIR)/sunjce_provider.jar
endif
- $(install-non-module-file)
+ $(install-file)
ifndef OPENJDK
install-prebuilt:
--- a/jdk/make/com/sun/java/pack/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/java/pack/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../../..
-MODULE = pack200
PACKAGE = com.sun.java.util.jar.pack
LIBRARY = unpack
PRODUCT = sun
@@ -156,7 +155,6 @@
endif
$(CP) $(TEMPDIR)/unpack200$(EXE_SUFFIX) $(UNPACK_EXE)
@$(call binary_file_verification,$@)
- $(install-module-file)
ifeq ($(PLATFORM), windows)
$(RES):: $(VERSIONINFO_RESOURCE)
--- a/jdk/make/com/sun/java/pack/prop/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/java/pack/prop/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
# to a collision of rules with Classes.gmk and Library.gmk
BUILDDIR = ../../../../..
-MODULE = pack200
PACKAGE = com.sun.java.util.jar.pack
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/jndi/cosnaming/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/jndi/cosnaming/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../../..
-MODULE = jndi-cosnaming
PACKAGE = com.sun.jndi.cosnaming
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/jndi/dns/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/jndi/dns/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../../..
-MODULE = jndi-dns
PACKAGE = com.sun.jndi.dns
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/jndi/ldap/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/jndi/ldap/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../../..
-MODULE = jndi-ldap
PACKAGE = com.sun.jndi.ldap
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/jndi/rmi/registry/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/jndi/rmi/registry/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../../../..
-MODULE = jndi-rmiregistry
PACKAGE = com.sun.jndi.rmi.registry
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/nio/sctp/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/nio/sctp/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../../..
-MODULE = sctp
PACKAGE = com.sun.nio.sctp
LIBRARY = sctp
PRODUCT = sun
--- a/jdk/make/com/sun/org/apache/xml/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/org/apache/xml/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../../../..
-MODULE = security-xmldsig
PACKAGE = com.sun.org.apache.xml
PRODUCT = xml
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/rowset/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/rowset/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../..
-MODULE = jdbc-enterprise
PACKAGE = com.sun.rowset
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/script/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/script/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -25,7 +25,6 @@
BUILDDIR = ../../..
-MODULE = scripting-rhino
PACKAGE = com.sun.script
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/security/auth/module/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/security/auth/module/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -26,7 +26,6 @@
# Makefile for building auth modules.
BUILDDIR = ../../../../..
-MODULE = security-auth
PACKAGE = com.sun.security.auth.module
PRODUCT = sun
--- a/jdk/make/com/sun/servicetag/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/servicetag/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -22,7 +22,6 @@
# questions.
BUILDDIR = ../../..
-MODULE = servicetag
PACKAGE = com.sun.servicetag
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/tools/attach/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/com/sun/tools/attach/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -25,7 +25,6 @@
BUILDDIR = ../../../..
-MODULE = attach
PACKAGE = com.sun.tools.attach
LIBRARY = attach
PRODUCT = sun
@@ -66,8 +65,7 @@
@$(MKDIR) -p $(@D)
@$(RM) $@
@$(CAT) $< | $(SED) -e "s/^#\[$(PLATFORM)\]//" > $@
- @$(install-module-file)
-
+
.PHONY: copy-files
--- a/jdk/make/common/Defs.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/common/Defs.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -224,9 +224,6 @@
# for generated class files
CLASSBINDIR = $(OUTPUTDIR)/classes
DEMOCLASSDIR = $(OUTPUTDIR)/democlasses
-# for modules
-MODULES_DIR = $(OUTPUTDIR)/modules
-ABS_MODULES_DIR = $(ABS_OUTPUTDIR)/modules
# for generated tool class files
BUILDTOOLCLASSDIR = $(OUTPUTDIR)/btclasses
# for build tool jar files
@@ -297,22 +294,6 @@
endif
endif
-#
-# Build units may or may not define MODULE. Default to "other".
-#
-# MODULE variable defines the lowest-level module name that
-# might or might not be the name of the modules created in
-# the modules build (see make/modules/modules.config and
-# modules.group).
-#
-MODULES_TEMPDIR = $(OUTPUTDIR)/tmp/modules
-ABS_MODULES_TEMPDIR = $(ABS_OUTPUTDIR)/tmp/modules
-
-ifndef MODULE
- MODULE = other
-endif
-override MODULE_DEST_DIR = $(MODULES_TEMPDIR)/$(MODULE)
-
# the use of += above makes a space separated list which we need to
# remove for filespecs.
#
@@ -422,52 +403,13 @@
#
include $(JDK_MAKE_SHARED_DIR)/Defs-java.gmk
-#
-# Macros to find the module that $@ belongs to
-#
-
UNIQUE_PATH_PATTERN = $(subst /,.,$(UNIQUE_PATH))
-MODULE_PATH_PATTERN = -e 's%.*\/classes\/%classes\/%' \
- -e 's%.*\/$(UNIQUE_PATH_PATTERN)\/%classes\/%' \
- -e 's%.*\/lib\/%lib\/%' \
- -e 's%.*\/bin\/%bin\/%' \
- -e 's%.*\/include\/%include\/%' \
- -e 's%.*\/demo\/%demo\/%' \
- -e 's%.*\/sample\/%sample\/%'
-
-# Install a file to its module
-define install-module-file
-dest=`echo $(@D)/ | $(SED) $(MODULE_PATH_PATTERN)` ; \
-$(MKDIR) -p $(MODULE_DEST_DIR)/$$dest; \
-$(CP) -f $@ $(MODULE_DEST_DIR)/$$dest
-endef
-
-# Install all files from the directory to its module
-define install-module-dir
-dest=`echo $(@D)/ | $(SED) $(MODULE_PATH_PATTERN)` ; \
-$(MKDIR) -p $(MODULE_DEST_DIR)/$$dest; \
-$(CP) -rf $(@D)/* $(MODULE_DEST_DIR)/$$dest
-endef
-
-# chmod the file in its module
-define chmod-module-file
-dest=`echo $@ | $(SED) $(MODULE_PATH_PATTERN)` ; \
-$(CHMOD) $1 $(MODULE_DEST_DIR)/$$dest
-endef
-
-# install a sym link in its module
-define install-module-sym-link
-dest=`echo $@ | $(SED) $(MODULE_PATH_PATTERN)` ; \
-$(LN) -sf $1 $(MODULE_DEST_DIR)/$$dest
-endef
-
# Run MAKE $@ for a launcher:
# $(call make-launcher, name, mainclass, java-args, main-args)
define make-launcher
$(CD) $(BUILDDIR)/launchers && \
$(MAKE) -f Makefile.launcher \
- MODULE=$(MODULE) \
PROGRAM=$(strip $1) \
MAIN_CLASS=$(strip $2) \
MAIN_JAVA_ARGS="$(strip $3)" \
@@ -488,28 +430,18 @@
define install-file
$(prep-target)
$(CP) $< $@
-@$(install-module-file)
endef
define chmod-file
$(CHMOD) $1 $@
-@$(call chmod-module-file, $1)
endef
define install-sym-link
$(LN) -s $1 $@
-@$(call install-module-sym-link, $1)
-endef
-
-#
-# Marcos for files not belonging to any module
-define install-non-module-file
-$(prep-target)
-$(CP) $< $@
endef
define install-manifest-file
-$(install-non-module-file)
+$(install-file)
endef
# Cleanup rule for after debug java run (hotspot.log file is left around)
@@ -577,7 +509,6 @@
define install-import-file
$(install-importonly-file)
-@$(install-module-file)
endef
.PHONY: all build clean clobber
--- a/jdk/make/common/Demo.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/common/Demo.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -25,8 +25,6 @@
# JDK Demo building jar file.
-MODULE = demos
-
# Some names are defined with LIBRARY inside the Defs.gmk file
LIBRARY=$(DEMONAME)
OBJDIR=$(TEMPDIR)/$(DEMONAME)
@@ -120,8 +118,11 @@
DEMO_ALL_NATIVE_SOURCES += $(filter %.hpp,$(DEMO_ALL_FILES))
# If we have java sources, then define the jar file we will create
+ifndef DEMO_JAR_NAME
+ DEMO_JAR_NAME = $(DEMONAME).jar
+endif
ifneq ($(strip $(DEMO_JAVA_SOURCES)),)
- DEMO_JAR = $(DEMO_DESTDIR)/$(DEMONAME).jar
+ DEMO_JAR = $(DEMO_DESTDIR)/$(DEMO_JAR_NAME)
endif
# If we have native sources, define the native library we will create
@@ -254,6 +255,17 @@
$(MKDIR) -p $(DEMO_JAR_IMAGE)
$(JAVAC_CMD) -d $(DEMO_JAR_IMAGE) -sourcepath $(DEMO_BUILD_SRCDIR) \
@$(DEMO_JAVAC_INPUT)
+ ifeq ($(DEMO_INCL_SRC),true)
+ $(CP) $(DEMO_JAVA_SOURCES:%=$(DEMO_BUILD_SRCDIR)/%) $(DEMO_JAR_IMAGE)
+ endif
+ ifeq ($(DEMO_ONLY_SRC),true)
+ $(RM) -r $(DEMO_JAR_IMAGE)
+ $(MKDIR) -p $(DEMO_JAR_IMAGE)
+ $(CP) -r $(DEMO_BUILD_SRCDIR)/* $(DEMO_JAR_IMAGE)
+ ifneq ($(DEMO_TOPFILES),)
+ $(CP) $(DEMO_ROOT)/$(DEMO_TOPFILES) $(DEMO_JAR_IMAGE)
+ endif
+ endif
$(BOOT_JAR_CMD) -cfm $@ $(DEMO_MANIFEST) \
-C $(DEMO_JAR_IMAGE) . \
$(BOOT_JAR_JFLAGS)
@@ -326,9 +338,9 @@
ifdef DEMO_IS_APPLET
@$(ECHO) "Expanding jar file into demos area at $(DEMO_DESTDIR)"
( $(CD) $(DEMO_DESTDIR) && \
- $(BOOT_JAR_CMD) -xfv $(DEMONAME).jar \
+ $(BOOT_JAR_CMD) -xfv $(DEMO_JAR_NAME) \
$(BOOT_JAR_JFLAGS) && \
- $(RM) -r META-INF $(DEMONAME).jar && \
+ $(RM) -r META-INF $(DEMO_JAR_NAME) && \
$(java-vm-cleanup) )
@( $(CD) $(DEMO_DESTDIR) && $(java-vm-cleanup) )
@$(ECHO) "Expanding source into demos area at $(DEMO_DESTDIR)"
--- a/jdk/make/common/Library.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/common/Library.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -168,18 +168,9 @@
$(OTHER_LCF) $(JAVALIB) $(LDLIBS)
$(CP) $(OBJDIR)/$(@F) $@
@$(call binary_file_verification,$@)
- $(install-module-file)
$(CP) $(OBJDIR)/$(LIBRARY).map $(@D)
$(CP) $(OBJDIR)/$(LIBRARY).pdb $(@D)
-$(ACTUAL_LIBRARY):: $(ACTUAL_LIBRARY_DIR)/$(LIBRARY).map $(ACTUAL_LIBRARY_DIR)/$(LIBRARY).pdb
-
-$(ACTUAL_LIBRARY_DIR)/%.map: FORCE
- $(install-module-file)
-
-$(ACTUAL_LIBRARY_DIR)/%.pdb: FORCE
- $(install-module-file)
-
endif # LIBRARY
$(OBJDIR)/$(LIBRARY).lcf: $(OBJDIR)/$(LIBRARY).res $(COMPILE_FILES_o) $(FILES_m)
@@ -235,7 +226,6 @@
else # LIBRARY
$(LINKER) $(SHARED_LIBRARY_FLAG) -o $@ $(FILES_o) $(LDLIBS)
@$(call binary_file_verification,$@)
- $(install-module-file)
ifeq ($(WRITE_LIBVERSION),true)
$(MCS) -d -a "$(FULL_VERSION)" $@
endif # WRITE_LIBVERSION
--- a/jdk/make/common/Modules.gmk Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,454 +0,0 @@
-#
-# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
-# 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.
-#
-
-JDK_MODULE_IMAGE_DIR = $(ABS_OUTPUTDIR)/jdk-module-image
-JRE_MODULE_IMAGE_DIR = $(ABS_OUTPUTDIR)/jre-module-image
-
-#
-# modules Target to build jdk and jre module image
-#
-# There is one jar file per module containing classes only.
-# All module jars are currently placed under jre/lib directory.
-#
-# Open issues that need further investigation:
-# 1. Classes in jre/lib/ext/dnsns.jar are currently put in jre/lib/jndi-dns
-# module. META-INF/services file is not installed.
-# 2. Signed jars
-# For JDK build, signed jars are copied to the build.
-# All jars in the module image are unsigned.
-
-MODULE_IMAGEBINDIR = bin
-
-#
-# Targets.
-#
-INITIAL_MODULE_IMAGE_JRE=initial-module-image-jre
-INITIAL_MODULE_IMAGE_JDK=initial-module-image-jdk
-ifeq ($(PLATFORM), solaris)
- ifeq ($(ARCH_DATA_MODEL), 64)
- INITIAL_MODULE_IMAGE_JRE=initial-module-image-jre-sol64
- INITIAL_MODULE_IMAGE_JDK=initial-module-image-jdk-sol64
- endif
-endif
-
-modules modules-clobber \
-initial-module-image-jre initial-module-image-jdk \
-initial-module-image-jre-sol64 initial-module-image-jdk-sol64 \
-trim-module-image-jre trim-module-image-jdk \
-process-module-image-jre process-module-image-jdk ::
- @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..."
-
-# Order is important here, trim jre after jdk image is created
-modules:: gen-modules \
- sanity-module-images post-sanity-module-images \
- $(INITIAL_MODULE_IMAGE_JRE) $(INITIAL_MODULE_IMAGE_JDK) \
- trim-module-image-jre trim-module-image-jdk \
- process-module-image-jre process-module-image-jdk
-
-# Don't use these
-module-image-jre:: initial-module-image-jre trim-module-image-jre process-module-image-jre
-module-image-jdk:: initial-module-image-jdk trim-module-image-jdk process-module-image-jdk
-
-#
-# Paths to these files we need
-JDK_MODULE_DOCFILES = $(IMAGE_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%)
-JRE_MODULE_DOCFILES = $(IMAGE_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%)
-
-###### RULES
-
-# JDK files
-$(JDK_MODULE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/%
- $(process-doc-file)
-
-# JRE files
-$(JRE_MODULE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/%
- $(process-doc-file)
-ifeq ($(PLATFORM), windows)
-$(JRE_MODULE_IMAGE_DIR)/README.txt: $(SHARE_JRE_DOC_SRC)/README
- $(process-doc-file)
-endif
-
-######################################################
-# JRE Image
-######################################################
-
-MODULES_LIST = $(MODULES_TEMPDIR)/classlist/modules.list
-
-# Modules in the jre/lib/security directory
-POLICY_MODULES = US_export_policy local_policy
-
-# Modules in the modules/ext directory
-EXT_MODULES = localedata security-sunec security-sunjce
-
-# Build PKCS#11 on all platforms except 64-bit Windows.
-PKCS11 = security-sunpkcs11
-ifeq ($(ARCH_DATA_MODEL), 64)
- ifeq ($(PLATFORM), windows)
- PKCS11 =
- endif
-endif
-
-EXT_MODULES += $(PKCS11)
-
-# Build Microsoft CryptoAPI provider only on (non-64-bit) Windows platform.
-ifeq ($(PLATFORM), windows)
- ifneq ($(ARCH_DATA_MODEL), 64)
- EXT_MODULES += security-sunmscapi
- endif
-endif
-
-# Modules for JDK only
-JDK_MODULES = tools
-
-gen-modules:
- $(CD) modules; $(MAKE) all
-
-initial-module-image-jre-setup:
- $(RM) -r $(JRE_MODULE_IMAGE_DIR)
- $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR)
-
-# 64-bit solaris jre image contains only the 64-bit add-on files.
-initial-module-image-jre-sol64:: initial-module-image-jre-setup
- @# Use tar instead of cp to preserve the symbolic links
- for dir in bin lib ; do \
- ( $(CD) $(OUTPUTDIR) && \
- $(TAR) cf - `$(FIND) $$dir -name '$(ARCH)' -print` | \
- ($(CD) $(JRE_MODULE_IMAGE_DIR) && $(TAR) xf -) ) ; \
- done
- @# Remove some files from the jre area
- for t in $(NOTJRETOOLS) ; do \
- $(RM) $(JRE_MODULE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \
- done
- $(RM) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'orb.idl'`
- $(RM) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'ir.idl'`
-
-# Construct an initial jre image (initial jdk jre) no trimming or stripping
-initial-module-image-jre:: initial-module-image-jre-setup \
- $(JRE_MODULE_DOCFILES) \
- $(BUILDMETAINDEX_JARFILE)
- @# Copy in bin directory
- $(CD) $(OUTPUTDIR) && $(FIND) bin -depth | $(CPIO) -pdum $(JRE_MODULE_IMAGE_DIR)
- @# CTE plugin security change require new empty directory lib/applet
- $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR)/lib/applet
- @# Copy files but not .jar in lib directory
- $(CD) $(OUTPUTDIR) && $(FIND) lib -depth | $(EGREP) -v ".jar$$" | $(CPIO) -pdum $(JRE_MODULE_IMAGE_DIR)
- @#
- @# copy modules to jre/lib
- @#
- for m in `$(NAWK) '{print $$1}' $(MODULES_LIST)` ; do \
- $(CP) $(MODULES_DIR)/$$m/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib ; \
- done
- $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR)/lib/ext
- for m in $(EXT_MODULES) ; do \
- $(MV) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib/ext ; \
- done
- for m in $(POLICY_MODULES) ; do \
- $(MV) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib/security; \
- done
- @# Remove jdk modules
- for m in $(JDK_MODULES) ; do \
- $(RM) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar ; \
- done
-
- @# Make sure all directories are read/execute for everyone
- $(CHMOD) a+rx `$(FIND) $(JRE_MODULE_IMAGE_DIR) -type d`
- @# Remove some files from the jre area
- for t in $(NOTJRETOOLS) ; do \
- $(RM) $(JRE_MODULE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \
- done
- @# Remove orb.idl and ir.idl from jre
- $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'orb.idl' -exec $(RM) \{} \;
- $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'ir.idl' -exec $(RM) \{} \;
- @# Generate meta-index to make boot and extension class loaders lazier
- $(CD) $(JRE_MODULE_IMAGE_DIR)/lib && \
- $(BOOT_JAVA_CMD) -jar $(BUILDMETAINDEX_JARFILE) \
- -o meta-index *.jar
- @$(CD) $(JRE_MODULE_IMAGE_DIR)/lib && $(java-vm-cleanup)
- $(CD) $(JRE_MODULE_IMAGE_DIR)/lib/ext && \
- $(BOOT_JAVA_CMD) -jar $(BUILDMETAINDEX_JARFILE) \
- -o meta-index *.jar
- @$(CD) $(JRE_MODULE_IMAGE_DIR)/lib/ext && $(java-vm-cleanup)
-ifeq ($(PLATFORM), windows)
- @# Remove certain *.lib files
- $(CD) $(JRE_MODULE_IMAGE_DIR)/lib && \
- $(RM) java.$(LIB_SUFFIX) jvm.$(LIB_SUFFIX) \
- awt.$(LIB_SUFFIX) jawt.$(LIB_SUFFIX)
- ifeq ($(ARCH_DATA_MODEL), 32)
- @# The Java Kernel JRE image ships with a special VM. It is not included
- @# in the full JRE image, so remove it. Also, is it only for 32-bit windows.
- $(CD) $(JRE_MODULE_IMAGE_DIR)/bin && $(RM) -r kernel
- endif
-endif # Windows
-ifneq ($(PLATFORM), windows)
- $(call copy-man-pages,$(JRE_MODULE_IMAGE_DIR),$(JRE_MAN_PAGES))
-endif # !windows
-
-# Trim out any extra files not for the jre shipment but wanted in the jdk jre.
-# (Note the jdk WILL want the jre image before this trimming)
-# Removes server VM on Windows 32bit.
-# Remove certain shared libraries that should not be in the jre image
-# but should be in the jdk jre image.
-trim-module-image-jre::
-ifeq ($(PLATFORM), windows)
- ifeq ($(ARCH_DATA_MODEL), 32)
- $(RM) -r $(JRE_MODULE_IMAGE_DIR)/bin/server
- endif
- ifdef NOTJRE_SHARED_LIBS
- for l in $(NOTJRE_SHARED_LIBS) ; do \
- $(RM) $(JRE_MODULE_IMAGE_DIR)/bin/$$l ; \
- done ;
- endif
-else # PLATFORM
- ifdef NOTJRE_SHARED_LIBS
- for l in $(NOTJRE_SHARED_LIBS) ; do \
- $(RM) $(JRE_MODULE_IMAGE_DIR)/lib/$(LIBARCH)/$$l ; \
- done ;
- endif
-endif # PLATFORM
-
-# Get list of all Elf files in the jre
-JRE_MODULE_ELF_LIST=$(MODULES_TEMPDIR)/jre-elf-files.list
-$(JRE_MODULE_ELF_LIST):
- @$(prep-target)
-ifneq ($(PLATFORM), windows)
- $(RM) $@
- $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -type f -name \*.$(LIB_SUFFIX) >> $@
- $(FILE) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \
- | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@
-endif
-
-# Post process the image (strips and mcs on Elf files we are shipping)
-# (Note the jdk WILL want the jre image before this processing)
-process-module-image-jre:: $(JRE_MODULE_ELF_LIST)
-ifneq ($(POST_STRIP_PROCESS), )
- for f in `$(CAT) $(JRE_MODULE_ELF_LIST)`; do \
- $(CHMOD) u+w $${f}; \
- $(ECHO) $(POST_STRIP_PROCESS) $${f}; \
- $(POST_STRIP_PROCESS) $${f}; \
- $(CHMOD) go-w $${f}; \
- done
-endif
-ifneq ($(POST_MCS_PROCESS), )
- for f in `$(CAT) $(JRE_MODULE_ELF_LIST)`; do \
- $(CHMOD) u+w $${f}; \
- $(ECHO) $(POST_MCS_PROCESS) $${f}; \
- $(POST_MCS_PROCESS) $${f}; \
- $(CHMOD) go-w $${f}; \
- done
-endif
- $(RM) $(JRE_MODULE_ELF_LIST)
-
-######################################################
-# JDK Image
-######################################################
-# Note: cpio ($(CPIO)) sometimes leaves directories without rx access.
-
-initial-module-image-jdk-setup:
- $(RM) -r $(JDK_MODULE_IMAGE_DIR)
- $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/jre
- ($(CD) $(JRE_MODULE_IMAGE_DIR) && $(FIND) . -depth -print \
- | $(CPIO) -pdum $(JDK_MODULE_IMAGE_DIR)/jre )
- $(RM) -rf $(JDK_MODULE_IMAGE_DIR)/jre/man
- $(CHMOD) a+rx `$(FIND) $(JDK_MODULE_IMAGE_DIR) -type d`
-
-initial-module-image-jdk64-bindemos:
- for dir in bin demo ; do \
- ( $(CD) $(OUTPUTDIR) && \
- $(TAR) cf - `$(FIND) $$dir -name '$(LIBARCH)' -print` | \
- ($(CD) $(JDK_MODULE_IMAGE_DIR) && $(TAR) xf -) ) ; \
- done
-
-# Solaris 64 bit image is special
-initial-module-image-jdk-sol64:: initial-module-image-jdk-setup \
- initial-module-image-jdk64-bindemos
-
-# DB files to add
-ifeq ($(OPENJDK),true)
-
-initial-module-image-jdk-db:
-
-else
-
-# Create the list of db *.zip files to bundle with jdk
-ABS_DB_PATH :=$(call FullPath,$(CLOSED_SHARE_SRC)/db)
-DB_ZIP_LIST = $(shell $(LS) $(ABS_DB_PATH)/*.zip 2>/dev/null)
-
-initial-module-image-jdk-db: $(DB_ZIP_LIST)
- $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/db
- for d in $(DB_ZIP_LIST); do \
- ($(CD) $(JDK_MODULE_IMAGE_DIR)/db && $(UNZIP) -o $$d); \
- done
-
-endif
-
-# Standard jdk image
-initial-module-image-jdk:: initial-module-image-jdk-setup \
- initial-module-image-jdk-db \
- $(JDK_MODULE_DOCFILES)
- $(MKDIR) $(JDK_MODULE_IMAGE_DIR)/lib
- @#
- @# copy jdk modules to jdk/lib
- @#
- $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/lib
- for m in $(JDK_MODULES) ; do \
- $(CP) $(MODULES_DIR)/$$m/lib/$$m.jar $(JDK_MODULE_IMAGE_DIR)/lib ; \
- done
- ifeq ($(PLATFORM), windows)
- @#
- @# lib/
- @#
- $(CP) $(LIBDIR)/$(LIB_PREFIX)jvm.$(LIB_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/lib
- $(CP) $(LIBDIR)/$(LIB_PREFIX)jawt.$(LIB_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/lib
- @#
- @# bin/
- @#
- @# copy all EXE files and only certain DLL files from BINDIR
- $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/bin
- $(CP) $(BINDIR)/*$(EXE_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin
- $(CP) $(BINDIR)/jli.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin
- ifeq ($(COMPILER_VERSION), VS2010)
- $(CP) $(BINDIR)/msvc*100.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin
- endif
- ifeq ($(ARCH_DATA_MODEL), 32)
- ifeq ($(COMPILER_VERSION), VS2003)
- $(CP) $(BINDIR)/msvc*71.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin
- endif
- endif
- else # PLATFORM
- @#
- @# bin/
- @#
- ($(CD) $(BINDIR)/.. && $(TAR) cf - \
- `$(FIND) bin \( -type f -o -type l \) -print `) | \
- ($(CD) $(JDK_MODULE_IMAGE_DIR) && $(TAR) xf -)
- endif # PLATFORM
- @#
- @# lib/ct.sym
- @#
- $(MKDIR) -p $(OUTPUTDIR)/symbols/META-INF/sym
- $(JAVAC_CMD) -XDprocess.packages -proc:only \
- -processor com.sun.tools.javac.sym.CreateSymbols \
- -Acom.sun.tools.javac.sym.Jar=$(RT_JAR) \
- -Acom.sun.tools.javac.sym.Dest=$(OUTPUTDIR)/symbols/META-INF/sym/rt.jar \
- $(CORE_PKGS) $(NON_CORE_PKGS) $(EXCLUDE_PROPWARN_PKGS)
- $(BOOT_JAR_CMD) c0f $(LIBDIR)/ct.sym \
- -C $(OUTPUTDIR)/symbols META-INF $(BOOT_JAR_JFLAGS)
- @$(java-vm-cleanup)
- $(CP) $(LIBDIR)/ct.sym $(JDK_MODULE_IMAGE_DIR)/lib/ct.sym
- @#
- @# CORBA supported orb.idl and ir.idl should be copied to lib
- @#
- $(CP) $(LIBDIR)/orb.idl $(JDK_MODULE_IMAGE_DIR)/lib/orb.idl
- $(CP) $(LIBDIR)/ir.idl $(JDK_MODULE_IMAGE_DIR)/lib/ir.idl
- ifeq ($(PLATFORM), linux)
- @#
- @# on Linux copy jexec from jre/lib to /lib
- @#
- $(CP) $(LIBDIR)/jexec $(JDK_MODULE_IMAGE_DIR)/lib/jexec
- endif # PLATFORM
- @#
- @# demo, include
- @#
- $(CP) -r -f $(DEMODIR) $(JDK_MODULE_IMAGE_DIR)
- $(CP) -r -f $(SAMPLEDIR) $(JDK_MODULE_IMAGE_DIR)
- $(CP) -r $(INCLUDEDIR) $(JDK_MODULE_IMAGE_DIR)
- @#
- @# Swing BeanInfo generation
- @#
- $(CD) javax/swing/beaninfo && $(MAKE) JDK_IMAGE_DIR=$(JDK_MODULE_IMAGE_DIR) swing-1.2-beans
-ifneq ($(PLATFORM), windows)
- $(call copy-man-pages,$(JDK_MODULE_IMAGE_DIR),$(JDK_MAN_PAGES))
-endif # !windows
-
-# Trim out files we don't want to ship
-trim-module-image-jdk::
- @# Remove tools that should not be part of SDK.
- for t in $(NOTJDKTOOLS); do \
- $(RM) $(JDK_MODULE_IMAGE_DIR)/bin/$${t}$(EXE_SUFFIX); \
- done
-
-# Get list of Elf files in the jdk
-JDK_MODULE_ELF_LIST=$(MODULES_TEMPDIR)/jdk-elf-files.list
-$(JDK_MODULE_ELF_LIST):
- @$(prep-target)
-ifneq ($(PLATFORM), windows)
- $(RM) $@
- $(FIND) $(JDK_MODULE_IMAGE_DIR)/jre/lib -type f -name \*.$(LIB_SUFFIX) >> $@
- $(FILE) `$(FIND) $(JDK_MODULE_IMAGE_DIR)/jre/bin -type f -name \*$(EXE_SUFFIX)` \
- | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@
- file `$(FIND) $(JDK_MODULE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \
- | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@
-endif
-
-# Post process the image (strips and mcs on files we are shipping)
-process-module-image-jdk:: $(JDK_MODULE_ELF_LIST)
-ifneq ($(POST_STRIP_PROCESS), )
- for f in `$(CAT) $(JDK_MODULE_ELF_LIST)`; do \
- $(CHMOD) u+w $${f}; \
- $(ECHO) $(POST_STRIP_PROCESS) $${f}; \
- $(POST_STRIP_PROCESS) $${f}; \
- $(CHMOD) go-w $${f}; \
- done
-endif
-ifneq ($(POST_MCS_PROCESS), )
- for f in `$(CAT) $(JDK_MODULE_ELF_LIST)`; do \
- $(CHMOD) u+w $${f}; \
- $(ECHO) $(POST_MCS_PROCESS) $${f}; \
- $(POST_MCS_PROCESS) $${f}; \
- $(CHMOD) go-w $${f}; \
- done
-endif
- $(RM) $(JDK_MODULE_ELF_LIST)
-
-######################################################
-# clobber
-######################################################
-modules-clobber::
- $(RM) -r $(JDK_MODULE_IMAGE_DIR)
- $(RM) -r $(JRE_MODULE_IMAGE_DIR)
-
-#
-# TODO - nop for now
-sanity-module-images post-sanity-module-images:
-
-modules modules-clobber::
- @$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..."
- @$(java-vm-cleanup)
-
-.PHONY: modules module-image-jre module-image-jdk \
- initial-module-image-jre initial-module-image-jdk \
- initial-module-image-jre-sol64 initial-module-image-jdk-sol64 \
- initial-module-image-jdk-setup \
- initial-module-image-jdk-db \
- initial-module-image-jdk64-bindemos \
- initial-module-image-jre-setup \
- trim-module-image-jre trim-module-image-jdk \
- process-module-image-jre process-module-image-jdk \
- install-previous-jre install-previous-jdk \
- modules-clobber
-
-# Force rule
-FRC:
-
--- a/jdk/make/common/Program.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/common/Program.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -186,7 +186,6 @@
$(LINK_PRE_CMD) $(CC) $(CC_OBJECT_OUTPUT_FLAG)$@ $(LDFLAGS) \
$(FILES_o) $(THREADLIBS) $(LDLIBS)
@$(call binary_file_verification,$@)
- $(install-module-file)
endif # PLATFORM
--- a/jdk/make/common/Release.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/common/Release.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -60,9 +60,10 @@
#
# Include the exported private packages in ct.sym.
# This is an interim solution until the ct.sym is replaced
-# with a new module system (being discussed for JDK 7).
+# with a new module system (being discussed for JDK 8).
#
-EXPORTED_PRIVATE_PKGS = com.sun.servicetag
+EXPORTED_PRIVATE_PKGS = com.sun.servicetag \
+ com.oracle.net
# 64-bit solaris has a few special cases. We define the variable
# SOLARIS64 for use in this Makefile to easily test those cases
@@ -86,8 +87,14 @@
IMAGE_DOCLIST_JRE = LICENSE ASSEMBLY_EXCEPTION THIRD_PARTY_README
else
# Where to find these files
- SHARE_JDK_DOC_SRC = $(CLOSED_SHARE_SRC)/doc/jdk
- SHARE_JRE_DOC_SRC = $(CLOSED_SHARE_SRC)/doc/jre
+ ifeq ($(J4B), true)
+ SHARE_JDK_DOC_SRC = $(CLOSED_SHARE_SRC)/doc/jdkfb
+ SHARE_JRE_DOC_SRC = $(CLOSED_SHARE_SRC)/doc/jrefb
+ else
+ SHARE_JDK_DOC_SRC = $(CLOSED_SHARE_SRC)/doc/jdk
+ SHARE_JRE_DOC_SRC = $(CLOSED_SHARE_SRC)/doc/jre
+ endif
+
IMAGE_DOCLIST_JDK = COPYRIGHT README.html THIRDPARTYLICENSEREADME.txt
IMAGE_DOCLIST_JRE = COPYRIGHT Welcome.html THIRDPARTYLICENSEREADME.txt
ifeq ($(PLATFORM), windows)
--- a/jdk/make/common/Sanity.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/common/Sanity.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -71,8 +71,7 @@
sane-cacerts \
sane-ant_version \
sane-zip_version \
- sane-msvcrt_path \
- sane-build_modules
+ sane-msvcrt_path
# The rules sanity-* have a one-to-one correspondence with the major targets
# Each sanity-* rule should have no body to ensure that the post-sanity-* is the
--- a/jdk/make/common/Subdirs.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/common/Subdirs.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -40,9 +40,6 @@
#
# By default, subdirs specified in the SUBDIRS and all SUBDIRS_*
# variables will be built.
-#
-# BUILD_MODULES variable can be used to specify one or more groups
-# to be built (BUILD_MODULES=all will build all groups).
#
# Variables of the currently supported groups are:
# SUBDIRS_desktop
@@ -53,15 +50,12 @@
#
# Change to the above list also need to update
# make/common/shared/Sanity.gmk. NOTE: this list is subject
-# to change till the JDK 7 SE profiles/modules are finalized.
+# to change.
#
# Eventually we want to restructure the make directory
# according to these grouping (e.g. make/desktop/...) and
# the SUBDIRS_<group> variables would not be needed.
#
-# To build the desktop and tools groups only, you can do:
-# gnumake BUILD_MODULES="desktop tools" ...
-#
# Iterate the subdirectories specified in $1.
# - cd into each subdir and make them
@@ -96,77 +90,51 @@
#
# Iterate the list specified in SUBDIRS_<group> only if
-# SUBDIRS_<group> is set and <group> or "all" is specified
-# in the BUILD_MODULES variable
+# SUBDIRS_<group> is set.
#
ifdef SUBDIRS_desktop
- ifneq (,$(findstring desktop, $(BUILD_MODULES)))
- define subdirs-desktop-loop
- @$(call subdirs-group-loop,SUBDIRS_desktop)
- endef
- else
- define subdirs-desktop-loop
- endef
- endif
+ define subdirs-desktop-loop
+ @$(call subdirs-group-loop,SUBDIRS_desktop)
+ endef
else
define subdirs-desktop-loop
endef
endif # SUBDIRS_desktop
ifdef SUBDIRS_enterprise
- ifneq (,$(findstring enterprise, $(BUILD_MODULES)))
- define subdirs-enterprise-loop
- @$(call subdirs-group-loop,SUBDIRS_enterprise)
- endef
- else
- define subdirs-enterprise-loop
- endef
- endif
+ define subdirs-enterprise-loop
+ @$(call subdirs-group-loop,SUBDIRS_enterprise)
+ endef
else
define subdirs-enterprise-loop
endef
endif # SUBDIRS_enterprise
ifdef SUBDIRS_management
- ifneq (,$(findstring management, $(BUILD_MODULES)))
- define subdirs-management-loop
- @$(call subdirs-group-loop,SUBDIRS_management)
- endef
- else
- define subdirs-management-loop
- endef
- endif
+ define subdirs-management-loop
+ @$(call subdirs-group-loop,SUBDIRS_management)
+ endef
else
-define subdirs-management-loop
-endef
+ define subdirs-management-loop
+ endef
endif # SUBDIRS_management
ifdef SUBDIRS_misc
- ifneq (,$(findstring misc, $(BUILD_MODULES)))
- define subdirs-misc-loop
- @$(call subdirs-group-loop,SUBDIRS_misc)
- endef
- else
- define subdirs-misc-loop
- endef
- endif
+ define subdirs-misc-loop
+ @$(call subdirs-group-loop,SUBDIRS_misc)
+ endef
else
-define subdirs-misc-loop
-endef
+ define subdirs-misc-loop
+ endef
endif # SUBDIRS_misc
ifdef SUBDIRS_tools
- ifneq (,$(findstring tools, $(BUILD_MODULES)))
- define subdirs-tools-loop
- @$(call subdirs-group-loop,SUBDIRS_tools)
- endef
- else
- define subdirs-tools-loop
- endef
- endif
+ define subdirs-tools-loop
+ @$(call subdirs-group-loop,SUBDIRS_tools)
+ endef
else
-define subdirs-tools-loop
-endef
+ define subdirs-tools-loop
+ endef
endif # SUBDIRS_tools
#
@@ -175,30 +143,6 @@
SUBDIRS_all = $(SUBDIRS) $(SUBDIRS_desktop) $(SUBDIRS_enterprise) \
$(SUBDIRS_management) $(SUBDIRS_misc) $(SUBDIRS_tools)
-ifndef BUILD_MODULES
-define SUBDIRS-loop
- @$(call subdirs-group-loop,SUBDIRS_all)
-endef
-
-else
-
-ifneq (,$(findstring all, $(BUILD_MODULES)))
define SUBDIRS-loop
@$(call subdirs-group-loop,SUBDIRS_all)
endef
-
-else # BUILD_MODULES set
-#
-# Iterate SUBDIRS and the groups specified in BUILD_MODULES
-#
-define SUBDIRS-loop
- @$(call subdirs-group-loop,SUBDIRS)
- @$(subdirs-desktop-loop)
- @$(subdirs-enterprise-loop)
- @$(subdirs-management-loop)
- @$(subdirs-misc-loop)
- @$(subdirs-tools-loop)
-endef
-
-endif
-endif # BUILD_MODULES
--- a/jdk/make/common/shared/Compiler-msvc.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/common/shared/Compiler-msvc.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -153,6 +153,9 @@
ifndef COMPILER_VERSION
COMPILER_VERSION := $(error COMPILER_VERSION cannot be empty here)
endif
+ ifneq ($(COMPILER_VERSION),VS2010)
+ COMPILER_VERSION := $(error COMPILER_VERSION must be VS2010)
+ endif
# Shared library generation flag
SHARED_LIBRARY_FLAG = -LD
--- a/jdk/make/common/shared/Defs-java.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/common/shared/Defs-java.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -45,7 +45,7 @@
JAVA_MEM_FLAGS += -Xms$(MIN_VM_MEMORY)m -XX:PermSize=32m -XX:MaxPermSize=160m
endif
-#
+#
# All java tools (javac, javah, and javadoc) run faster with certain java
# options, this macro should be used with all these tools.
# In particular, the client VM makes these tools run faster when
@@ -122,6 +122,17 @@
JAVACFLAGS += -Werror
endif
+#
+# Some licensees do not get the Security Source bundles. We will
+# fall back on the prebuilt jce.jar so that we can do a best
+# attempt at building. If sources exist, we always want to
+# build/use the most recent source instead of an older jce.jar, whether
+# built implicitly/explicitly.
+#
+ifeq ($(wildcard $(SHARE_SRC)/classes/javax/crypto/Cipher.java),)
+ JCEFLAGS = $(CLASSPATH_SEPARATOR)$(LIBDIR)/jce.jar
+endif
+
# Add the source level
SOURCE_LANGUAGE_VERSION = 7
LANGUAGE_VERSION = -source $(SOURCE_LANGUAGE_VERSION)
@@ -132,11 +143,11 @@
CLASS_VERSION = -target $(TARGET_CLASS_VERSION)
JAVACFLAGS += $(CLASS_VERSION)
JAVACFLAGS += -encoding ascii
-JAVACFLAGS += "-Xbootclasspath:$(CLASSBINDIR)"
+JAVACFLAGS += "-Xbootclasspath:$(CLASSBINDIR)$(JCEFLAGS)"
JAVACFLAGS += $(OTHER_JAVACFLAGS)
# Needed for javah
-JAVAHFLAGS += -bootclasspath $(CLASSBINDIR)
+JAVAHFLAGS += -bootclasspath "$(CLASSBINDIR)$(JCEFLAGS)"
# Needed for javadoc to ensure it builds documentation
# against the newly built classes
--- a/jdk/make/common/shared/Defs-javadoc.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/common/shared/Defs-javadoc.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -64,7 +64,7 @@
# Macro to construct the copyright line
# (The GNU make 3.78.1 "if" conditional is broken, fixed in GNU make 3.81)
define CopyrightLine # optionalurl optionalfirstyear optionaladdress
-$(if $(strip $1),<a href=\"$(strip $1)\">Copyright</a>,Copyright) \
+$(if $(strip $1),<a href="$(strip $1)">Copyright</a>,Copyright) \
$(COPYRIGHT_SYMBOL) $(if $2,$2${COMMA},) $(COPYRIGHT_YEAR),\
$(FULL_COMPANY_NAME). $3 All rights reserved.
endef
--- a/jdk/make/common/shared/Defs.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/common/shared/Defs.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -218,7 +218,11 @@
else
LAUNCHER_NAME = java
PRODUCT_NAME = Java(TM)
- PRODUCT_SUFFIX = SE Runtime Environment
+ ifeq ($(J4B), true)
+ PRODUCT_SUFFIX = SE Runtime Environment for Business
+ else
+ PRODUCT_SUFFIX = SE Runtime Environment
+ endif
JDK_RC_PLATFORM_NAME = Platform SE
COMPANY_NAME = Oracle Corporation
endif
--- a/jdk/make/common/shared/Platform.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/common/shared/Platform.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -148,7 +148,7 @@
# Suffix for file bundles used in previous release
BUNDLE_FILE_SUFFIX=.tar
# How much RAM does this machine have:
- MB_OF_MEMORY=$(shell /etc/prtconf | fgrep 'Memory size:' | expand | cut -d' ' -f3)
+ MB_OF_MEMORY=$(shell /usr/sbin/prtconf | fgrep 'Memory size:' | expand | cut -d' ' -f3)
endif
# Platform settings specific to Linux
--- a/jdk/make/common/shared/Sanity.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/common/shared/Sanity.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -113,7 +113,7 @@
ALSA_INCLUDE=/usr/include/alsa/version.h
ALSA_LIBRARY=/usr/lib/libasound.so
_ALSA_VERSION := $(shell $(EGREP) SND_LIB_VERSION_STR $(ALSA_INCLUDE) | \
- $(SED) -e 's@.*\"\(.*\)\".*@\1@' )
+ $(SED) -e 's@.*"\(.*\)".*@\1@' )
ALSA_VERSION := $(call GetVersion,$(_ALSA_VERSION))
endif
@@ -221,8 +221,7 @@
sane-zip_version \
sane-unzip_version \
sane-msvcrt_path \
- sane-freetype \
- sane-build_modules
+ sane-freetype
######################################################
# check for COPYRIGHT_YEAR variable
@@ -334,12 +333,12 @@
ifneq ($(PLATFORM), windows)
@if [ "$(LC_ALL)" != "" -a "$(LC_ALL)" != "C" ]; then \
$(ECHO) "WARNING: LC_ALL has been set to $(LC_ALL), this can cause build failures. \n" \
- " Try setting LC_ALL to \"C\". \n" \
+ " Try setting LC_ALL to 'C'. \n" \
"" >> $(WARNING_FILE) ; \
fi
@if [ "$(LANG)" != "" -a "$(LANG)" != "C" ]; then \
$(ECHO) "WARNING: LANG has been set to $(LANG), this can cause build failures. \n" \
- " Try setting LANG to \"C\". \n" \
+ " Try setting LANG to 'C'. \n" \
"" >> $(WARNING_FILE) ; \
fi
endif
@@ -832,21 +831,6 @@
endif
######################################################
-# if specified, BUILD_MODULES must contain valid values.
-######################################################
-MODULES_REGEX="all|base|desktop|management|enterprise|misc|tools"
-sane-build_modules:
-ifdef BUILD_MODULES
- @for m in $(BUILD_MODULES) ; do \
- valid=`$(ECHO) $$m | $(EGREP) $(MODULES_REGEX)`; \
- if [ "x$$valid" = "x" ] ; then \
- $(ECHO) "ERROR: $$m set in the BUILD_MODULES variable is invalid.\n" \
- "" >> $(ERROR_FILE); \
- fi \
- done
-endif
-
-######################################################
# CUPS_HEADERS_PATH must be valid
######################################################
sane-cups:
@@ -1126,7 +1110,7 @@
# be checked when this represents a full control build (i.e. the
# HOTSPOT_IMPORT_PATH includes these files in it's 'include' directory).
$(TEMPDIR)/%.h: $(SHARE_SRC)/javavm/export/%.h
- @$(install-non-module-file)
+ @$(install-file)
@$(RM) $@.IMPORT
@if [ -r $(HOTSPOT_IMPORT_PATH)/include/$(@F) ]; then \
$(CP) $(HOTSPOT_IMPORT_PATH)/include/$(@F) $@.IMPORT ; \
@@ -1140,7 +1124,7 @@
fi
$(TEMPDIR)/%.h: $(PLATFORM_SRC)/javavm/export/%.h
- @$(install-non-module-file)
+ @$(install-file)
@$(RM) $@.IMPORT
@if [ -r $(HOTSPOT_IMPORT_PATH)/include/$(PLATFORM_INCLUDE_NAME)/$(@F) ]; then \
$(CP) $(HOTSPOT_IMPORT_PATH)/include/$(PLATFORM_INCLUDE_NAME)/$(@F) $@.IMPORT ; \
@@ -1343,9 +1327,9 @@
fi
@if [ "$(LINK_CHECK)" != "same" ]; then \
$(ECHO) "WARNING: To build Java 2 SDK $(JDK_VERSION) you need : \n" \
- " $(REQUIRED_COMPILER_VERSION) - link.exe version \"$(REQUIRED_LINK_VER)\" \n" \
+ " $(REQUIRED_COMPILER_VERSION) - link.exe version '$(REQUIRED_LINK_VER)' \n" \
" Specifically the $(REQUIRED_COMPILER_NAME) link.exe. \n " \
- " $(YOU_ARE_USING) Linker version \"$(LINK_VER)\" \n" \
+ " $(YOU_ARE_USING) Linker version '$(LINK_VER)' \n" \
"" >> $(WARNING_FILE) ; \
fi
endif
--- a/jdk/make/docs/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/docs/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -43,7 +43,7 @@
BUG_SUBMIT_URL = http://bugs.sun.com/services/bugreport/index.jsp
# Common line for how to submit a bug or rfe
-BUG_SUBMIT_LINE = <a href=\"$(BUG_SUBMIT_URL)\">Submit a bug or feature</a>
+BUG_SUBMIT_LINE = <a href="$(BUG_SUBMIT_URL)">Submit a bug or feature</a>
# Url to devdocs page
# Was: http://java.sun.com/javase/6/webnotes/devdocs-vs-specs.html
@@ -166,21 +166,32 @@
# Common bottom argument
define CommonBottom # year
-<font size=\"-1\"><br> $(call CopyrightLine,,$1,)</font>
+<font size="-1"><br> $(call CopyrightLine,,$1,)</font>
endef
# Common trademark bottom argument (Not sure why this is used sometimes)
define CommonTrademarkBottom # year
-<font size=\"-1\">\
+<font size="-1">\
$(BUG_SUBMIT_LINE)<br>$(JAVA_TRADEMARK_LINE)<br>\
$(call CopyrightLine,,$1,$(COMPANY_ADDRESS))\
</font>
endef
+# Common echo of option
+define OptionOnly # opt
+$(PRINTF) "%s\n" "$1"
+endef
+define OptionPair # opt arg
+$(PRINTF) "%s '%s'\n" "$1" '$2'
+endef
+define OptionTrip # opt arg arg
+$(PRINTF) "%s '%s' '%s'\n" "$1" '$2' '$3'
+endef
+
# Core api bottom argument (with special sauce)
-COREAPI_BOTTOM = <font size=\"-1\"> $(BUG_SUBMIT_LINE)\
+COREAPI_BOTTOM = <font size="-1"> $(BUG_SUBMIT_LINE)\
<br>For further API reference and developer documentation, \
-see <a href=\"$(DEV_DOCS_URL)\" target=\"_blank\">Java SE Documentation</a>. \
+see <a href="$(DEV_DOCS_URL)" target="_blank">Java SE Documentation</a>. \
That documentation contains more detailed, developer-targeted descriptions, \
with conceptual overviews, definitions of terms, workarounds, \
and working code examples.<br>\
@@ -212,11 +223,11 @@
DRAFT_WINTITLE = $(BUILD_NUMBER)
# Early access top text (not used in FCS releases)
COREAPI_TOP_EARLYACCESS = \
-<div style=\"background-color: \#EEEEEE\"> \
-<div style=\"padding: 6px; margin-top: 2px; margin-bottom: 6px; \
+<div style="background-color: \#EEEEEE"> \
+<div style="padding: 6px; margin-top: 2px; margin-bottom: 6px; \
margin-left: 6px; margin-right: 6px; text-align: justify; \
font-size: 80%; font-family: Helvetica, Arial, sans-serif; \
-font-weight: normal;\"> \
+font-weight: normal;"> \
Please note that the specifications and other information \
contained herein are not final and are subject to change. \
The information is being made available to you solely for purpose of \
@@ -281,15 +292,9 @@
COREAPI_HEADER = \
<strong>Java$(TRADEMARK) Platform<br>Standard Ed. $(JDK_MINOR_VERSION)</strong>
-# Ignored tags
-IGNORED_TAGS = beaninfo revised since.unbundled spec specdefault Note ToDo
-
# Java language specification cite
-JLS3_CITE = <a href=\"$(JLS3_URL)\"> \
- The Java Language Specification, Third Edition</a>
-TAG_JLS3 = -tag 'jls3:a:See <cite>$(JLS3_CITE)</cite>:'
-
-TAGS = $(IGNORED_TAGS:%=-tag %:X) $(TAG_JLS3)
+TAG_JLS3 = jls3:a:See <cite><a href="$(JLS3_URL)"> \
+The Java Language Specification, Third Edition</a></cite>:
# Overview file for core apis
COREAPI_OVERVIEW = $(SHARE_SRC)/classes/overview-core.html
@@ -314,19 +319,26 @@
# Create file with javadoc options in it
$(COREAPI_OPTIONS_FILE): $(COREAPI_OVERVIEW)
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "$(TAGS)" ; \
- $(ECHO) "-encoding ISO-8859-1" ; \
- $(ECHO) "-splitIndex" ; \
- $(ECHO) "-overview $(COREAPI_OVERVIEW)" ; \
- $(ECHO) "-doctitle '$(COREAPI_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(COREAPI_WINDOWTITLE) $(DRAFT_WINTITLE)'";\
- $(ECHO) "-header '$(COREAPI_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(COREAPI_BOTTOM)$(DRAFT_BOTTOM)'" ; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ISO-8859-1) ; \
+ $(call OptionPair,-tag,beaninfo:X) ; \
+ $(call OptionPair,-tag,revised:X) ; \
+ $(call OptionPair,-tag,since.unbundled:X) ; \
+ $(call OptionPair,-tag,spec:X) ; \
+ $(call OptionPair,-tag,specdefault:X) ; \
+ $(call OptionPair,-tag,Note:X) ; \
+ $(call OptionPair,-tag,ToDo:X) ; \
+ $(call OptionPair,-tag,$(TAG_JLS3)) ; \
+ $(call OptionOnly,-splitIndex) ; \
+ $(call OptionPair,-overview,$(COREAPI_OVERVIEW)) ; \
+ $(call OptionPair,-doctitle,$(COREAPI_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(COREAPI_WINDOWTITLE) $(DRAFT_WINTITLE)) ;\
+ $(call OptionPair,-header,$(COREAPI_HEADER)$(DRAFT_HEADER)) ; \
+ $(call OptionPair,-bottom,$(COREAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
) >> $@
ifdef COREAPI_TOP_EARLYACCESS
- @$(ECHO) "-top '$(COREAPI_TOP_EARLYACCESS)'" >> $@
+ @$(call OptionPair,-top,$(COREAPI_TOP_EARLYACCESS)) >> $@
endif
# Create a file with the package names in it
@@ -375,16 +387,16 @@
# Create file with javadoc options in it
$(MIRROR_OPTIONS_FILE): $(MIRROR_OVERVIEW)
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-overview $(MIRROR_OVERVIEW)" ; \
- $(ECHO) "-doctitle '$(MIRROR_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(MIRROR_WINDOWTITLE) $(DRAFT_WINTITLE)'";\
- $(ECHO) "-header '$(MIRROR_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(MIRROR_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-group $(MIRROR_GROUPNAME) $(MIRROR_REGEXP)" ; \
- $(ECHO) "-linkoffline $(MIRROR2COREAPI) $(COREAPI_DOCSDIR)/"; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionPair,-overview,$(MIRROR_OVERVIEW)) ; \
+ $(call OptionPair,-doctitle,$(MIRROR_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(MIRROR_WINDOWTITLE) $(DRAFT_WINTITLE));\
+ $(call OptionPair,-header,$(MIRROR_HEADER)$(DRAFT_HEADER)) ; \
+ $(call OptionPair,-bottom,$(MIRROR_BOTTOM)$(DRAFT_BOTTOM)) ; \
+ $(call OptionTrip,-group,$(MIRROR_GROUPNAME),$(MIRROR_REGEXP)); \
+ $(call OptionTrip,-linkoffline,$(MIRROR2COREAPI),$(COREAPI_DOCSDIR)); \
) >> $@
# Create a file with the package names in it
@@ -432,16 +444,16 @@
# Create file with javadoc options in it
$(DOCLETAPI_OPTIONS_FILE):
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-breakiterator" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-doctitle '$(DOCLETAPI_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(DOCLETAPI_WINDOWTITLE) $(DRAFT_WINTITLE)'";\
- $(ECHO) "-header '$(DOCLETAPI_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(DOCLETAPI_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-group $(DOCLETAPI_GROUPNAME) $(DOCLETAPI_REGEXP)" ; \
- $(ECHO) "-linkoffline $(DOCLETAPI2COREAPI) $(COREAPI_DOCSDIR)/"; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionOnly,-breakiterator) ; \
+ $(call OptionPair,-doctitle,$(DOCLETAPI_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(DOCLETAPI_WINDOWTITLE) $(DRAFT_WINTITLE));\
+ $(call OptionPair,-header,$(DOCLETAPI_HEADER)$(DRAFT_HEADER)) ; \
+ $(call OptionPair,-bottom,$(DOCLETAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
+ $(call OptionTrip,-group,$(DOCLETAPI_GROUPNAME),$(DOCLETAPI_REGEXP)); \
+ $(call OptionTrip,-linkoffline,$(DOCLETAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
@@ -492,13 +504,13 @@
# Create file with javadoc options in it
$(TAGLETAPI_OPTIONS_FILE):
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-nonavbar" ; \
- $(ECHO) "-noindex" ; \
- $(ECHO) "-bottom '$(TAGLETAPI_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-linkoffline $(TAGLETAPI2COREAPI) $(COREAPI_DOCSDIR)/"; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionOnly,-nonavbar) ; \
+ $(call OptionOnly,-noindex) ; \
+ $(call OptionPair,-bottom,$(TAGLETAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
+ $(call OptionTrip,-linkoffline,$(TAGLETAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
@@ -543,16 +555,16 @@
# Create file with javadoc options in it
$(DOMAPI_OPTIONS_FILE):
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-splitIndex" ; \
- $(ECHO) "-doctitle '$(DOMAPI_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(DOMAPI_WINDOWTITLE) $(DRAFT_WINTITLE)'";\
- $(ECHO) "-header '$(DOMAPI_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(DOMAPI_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-group $(DOMAPI_GROUPNAME) $(DOMAPI_REGEXP)" ; \
- $(ECHO) "-linkoffline $(DOMAPI2COREAPI) $(COREAPI_DOCSDIR)/" ; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionOnly,-splitIndex) ; \
+ $(call OptionPair,-doctitle,$(DOMAPI_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(DOMAPI_WINDOWTITLE) $(DRAFT_WINTITLE));\
+ $(call OptionPair,-header,$(DOMAPI_HEADER)$(DRAFT_HEADER)) ; \
+ $(call OptionPair,-bottom,$(DOMAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
+ $(call OptionTrip,-group,$(DOMAPI_GROUPNAME),$(DOMAPI_REGEXP)); \
+ $(call OptionTrip,-linkoffline,$(DOMAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
@@ -605,15 +617,15 @@
# Create file with javadoc options in it
$(JDI_OPTIONS_FILE): $(JDI_OVERVIEW)
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-overview $(JDI_OVERVIEW)" ; \
- $(ECHO) "-doctitle '$(JDI_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(JDI_WINDOWTITLE) $(DRAFT_WINTITLE)'" ; \
- $(ECHO) "-header '$(JDI_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(JDI_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-linkoffline $(JDI2COREAPI) $(COREAPI_DOCSDIR)/" ; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionPair,-overview,$(JDI_OVERVIEW)) ; \
+ $(call OptionPair,-doctitle,$(JDI_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(JDI_WINDOWTITLE) $(DRAFT_WINTITLE)); \
+ $(call OptionPair,-header,$(JDI_HEADER)$(DRAFT_HEADER)) ; \
+ $(call OptionPair,-bottom,$(JDI_BOTTOM)$(DRAFT_BOTTOM)) ; \
+ $(call OptionTrip,-linkoffline,$(JDI2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
@@ -693,15 +705,15 @@
# Create file with javadoc options in it
$(JAAS_OPTIONS_FILE): $(JAAS_OVERVIEW)
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-overview $(JAAS_OVERVIEW)" ; \
- $(ECHO) "-doctitle '$(JAAS_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(JAAS_WINDOWTITLE) $(DRAFT_WINTITLE)'"; \
- $(ECHO) "-header '$(JAAS_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(JAAS_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-linkoffline $(JAAS2COREAPI) $(COREAPI_DOCSDIR)/" ; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionPair,-overview,$(JAAS_OVERVIEW)) ; \
+ $(call OptionPair,-doctitle,$(JAAS_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(JAAS_WINDOWTITLE) $(DRAFT_WINTITLE)); \
+ $(call OptionPair,-header,$(JAAS_HEADER)$(DRAFT_HEADER)) ; \
+ $(call OptionPair,-bottom,$(JAAS_BOTTOM)$(DRAFT_BOTTOM)) ; \
+ $(call OptionTrip,-linkoffline,$(JAAS2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
@@ -745,16 +757,16 @@
# Create file with javadoc options in it
$(JGSS_OPTIONS_FILE): $(JGSS_OVERVIEW)
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-nodeprecatedlist" ; \
- $(ECHO) "-overview $(JGSS_OVERVIEW)" ; \
- $(ECHO) "-doctitle '$(JGSS_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(JGSS_WINDOWTITLE) $(DRAFT_WINTITLE)'"; \
- $(ECHO) "-header '$(JGSS_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(JGSS_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-linkoffline $(JGSS2COREAPI) $(COREAPI_DOCSDIR)/" ; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionOnly,-nodeprecatedlist) ; \
+ $(call OptionPair,-overview,$(JGSS_OVERVIEW)) ; \
+ $(call OptionPair,-doctitle,$(JGSS_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(JGSS_WINDOWTITLE) $(DRAFT_WINTITLE)); \
+ $(call OptionPair,-header,$(JGSS_HEADER)$(DRAFT_HEADER)) ; \
+ $(call OptionPair,-bottom,$(JGSS_BOTTOM)$(DRAFT_BOTTOM)) ; \
+ $(call OptionTrip,-linkoffline,$(JGSS2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
@@ -797,15 +809,15 @@
# Create file with javadoc options in it
$(SMARTCARDIO_OPTIONS_FILE):
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-nodeprecatedlist" ; \
- $(ECHO) "-doctitle '$(SMARTCARDIO_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(SMARTCARDIO_WINDOWTITLE) $(DRAFT_WINTITLE)'";\
- $(ECHO) "-header '$(SMARTCARDIO_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(SMARTCARDIO_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-linkoffline $(SMARTCARDIO2COREAPI) $(COREAPI_DOCSDIR)/"; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionOnly,-nodeprecatedlist) ; \
+ $(call OptionPair,-doctitle,$(SMARTCARDIO_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(SMARTCARDIO_WINDOWTITLE) $(DRAFT_WINTITLE));\
+ $(call OptionPair,-header,$(SMARTCARDIO_HEADER)$(DRAFT_HEADER)); \
+ $(call OptionPair,-bottom,$(SMARTCARDIO_BOTTOM)$(DRAFT_BOTTOM)); \
+ $(call OptionTrip,-linkoffline,$(SMARTCARDIO2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
@@ -847,15 +859,15 @@
# Create file with javadoc options in it
$(HTTPSERVER_OPTIONS_FILE):
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-nodeprecatedlist" ; \
- $(ECHO) "-doctitle '$(HTTPSERVER_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(HTTPSERVER_WINDOWTITLE) $(DRAFT_WINTITLE)'";\
- $(ECHO) "-header '$(HTTPSERVER_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(HTTPSERVER_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-linkoffline $(HTTPSERVER2COREAPI) $(COREAPI_DOCSDIR)/"; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionOnly,-nodeprecatedlist) ; \
+ $(call OptionPair,-doctitle,$(HTTPSERVER_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(HTTPSERVER_WINDOWTITLE) $(DRAFT_WINTITLE));\
+ $(call OptionPair,-header,$(HTTPSERVER_HEADER)$(DRAFT_HEADER)); \
+ $(call OptionPair,-bottom,$(HTTPSERVER_BOTTOM)$(DRAFT_BOTTOM)); \
+ $(call OptionTrip,-linkoffline,$(HTTPSERVER2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
@@ -907,16 +919,16 @@
# Create file with javadoc options in it
$(MGMT_OPTIONS_FILE): $(MGMT_OVERVIEW)
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-nodeprecatedlist" ; \
- $(ECHO) "-overview $(MGMT_OVERVIEW)" ; \
- $(ECHO) "-doctitle '$(MGMT_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(MGMT_WINDOWTITLE) $(DRAFT_WINTITLE)'"; \
- $(ECHO) "-header '$(MGMT_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(MGMT_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-linkoffline $(MGMT2COREAPI) $(COREAPI_DOCSDIR)/" ; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionOnly,-nodeprecatedlist) ; \
+ $(call OptionPair,-overview,$(MGMT_OVERVIEW)) ; \
+ $(call OptionPair,-doctitle,$(MGMT_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(MGMT_WINDOWTITLE) $(DRAFT_WINTITLE)); \
+ $(call OptionPair,-header,$(MGMT_HEADER)$(DRAFT_HEADER)) ; \
+ $(call OptionPair,-bottom,$(MGMT_BOTTOM)$(DRAFT_BOTTOM)) ; \
+ $(call OptionTrip,-linkoffline,$(MGMT2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
@@ -958,15 +970,15 @@
# Create file with javadoc options in it
$(ATTACH_OPTIONS_FILE):
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-nodeprecatedlist" ; \
- $(ECHO) "-doctitle '$(ATTACH_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(ATTACH_WINDOWTITLE) $(DRAFT_WINTITLE)'";\
- $(ECHO) "-header '$(ATTACH_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(ATTACH_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-linkoffline $(ATTACH2COREAPI) $(COREAPI_DOCSDIR)/" ; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionOnly,-nodeprecatedlist) ; \
+ $(call OptionPair,-doctitle,$(ATTACH_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(ATTACH_WINDOWTITLE) $(DRAFT_WINTITLE));\
+ $(call OptionPair,-header,$(ATTACH_HEADER)$(DRAFT_HEADER)) ; \
+ $(call OptionPair,-bottom,$(ATTACH_BOTTOM)$(DRAFT_BOTTOM)) ; \
+ $(call OptionTrip,-linkoffline,$(ATTACH2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
@@ -1008,15 +1020,15 @@
# Create file with javadoc options in it
$(JCONSOLE_OPTIONS_FILE):
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-nodeprecatedlist" ; \
- $(ECHO) "-doctitle '$(JCONSOLE_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(JCONSOLE_WINDOWTITLE) $(DRAFT_WINTITLE)'";\
- $(ECHO) "-header '$(JCONSOLE_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(JCONSOLE_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-linkoffline $(JCONSOLE2COREAPI) $(COREAPI_DOCSDIR)/"; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionOnly,-nodeprecatedlist) ; \
+ $(call OptionPair,-doctitle,$(JCONSOLE_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(JCONSOLE_WINDOWTITLE) $(DRAFT_WINTITLE));\
+ $(call OptionPair,-header,$(JCONSOLE_HEADER)$(DRAFT_HEADER)) ; \
+ $(call OptionPair,-bottom,$(JCONSOLE_BOTTOM)$(DRAFT_BOTTOM)) ; \
+ $(call OptionTrip,-linkoffline,$(JCONSOLE2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
@@ -1063,15 +1075,15 @@
# Create file with javadoc options in it
$(TREEAPI_OPTIONS_FILE):
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-doctitle '$(TREEAPI_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(TREEAPI_WINDOWTITLE) $(DRAFT_WINTITLE)'";\
- $(ECHO) "-header '$(TREEAPI_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(TREEAPI_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-group $(TREEAPI_GROUPNAME) $(TREEAPI_REGEXP)" ; \
- $(ECHO) "-linkoffline $(TREEAPI2COREAPI) $(COREAPI_DOCSDIR)/" ; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionPair,-doctitle,$(TREEAPI_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(TREEAPI_WINDOWTITLE) $(DRAFT_WINTITLE));\
+ $(call OptionPair,-header,$(TREEAPI_HEADER)$(DRAFT_HEADER)) ; \
+ $(call OptionPair,-bottom,$(TREEAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
+ $(call OptionTrip,-group,$(TREEAPI_GROUPNAME),$(TREEAPI_REGEXP)); \
+ $(call OptionTrip,-linkoffline,$(TREEAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
@@ -1113,15 +1125,15 @@
# Create file with javadoc options in it
$(SCTPAPI_OPTIONS_FILE):
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-nodeprecatedlist" ; \
- $(ECHO) "-doctitle '$(SCTPAPI_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(SCTPAPI_WINDOWTITLE) $(DRAFT_WINTITLE)'";\
- $(ECHO) "-header '$(SCTPAPI_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(SCTPAPI_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-linkoffline $(SCTPAPI2COREAPI) $(COREAPI_DOCSDIR)/" ; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionOnly,-nodeprecatedlist) ; \
+ $(call OptionPair,-doctitle,$(SCTPAPI_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(SCTPAPI_WINDOWTITLE) $(DRAFT_WINTITLE));\
+ $(call OptionPair,-header,$(SCTPAPI_HEADER)$(DRAFT_HEADER)) ; \
+ $(call OptionPair,-bottom,$(SCTPAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
+ $(call OptionTrip,-linkoffline,$(SCTPAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
@@ -1163,15 +1175,15 @@
# Create file with javadoc options in it
$(TRACING_OPTIONS_FILE):
$(prep-target)
- @($(ECHO) "$(COMMON_JAVADOCFLAGS)" ; \
- $(ECHO) "-sourcepath \"$(RELEASEDOCS_SOURCEPATH)\"" ; \
- $(ECHO) "-encoding ascii" ; \
- $(ECHO) "-nodeprecatedlist" ; \
- $(ECHO) "-doctitle '$(TRACING_DOCTITLE)'" ; \
- $(ECHO) "-windowtitle '$(TRACING_WINDOWTITLE) $(DRAFT_WINTITLE)'";\
- $(ECHO) "-header '$(TRACING_HEADER)$(DRAFT_HEADER)'" ; \
- $(ECHO) "-bottom '$(TRACING_BOTTOM)$(DRAFT_BOTTOM)'" ; \
- $(ECHO) "-linkoffline $(TRACING2COREAPI) $(COREAPI_DOCSDIR)/" ; \
+ @($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
+ $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
+ $(call OptionPair,-encoding,ascii) ; \
+ $(call OptionOnly,-nodeprecatedlist) ; \
+ $(call OptionPair,-doctitle,$(TRACING_DOCTITLE)) ; \
+ $(call OptionPair,-windowtitle,$(TRACING_WINDOWTITLE) $(DRAFT_WINTITLE));\
+ $(call OptionPair,-header,$(TRACING_HEADER)$(DRAFT_HEADER)) ; \
+ $(call OptionPair,-bottom,$(TRACING_BOTTOM)$(DRAFT_BOTTOM)) ; \
+ $(call OptionTrip,-linkoffline,$(TRACING2COREAPI),$(COREAPI_DOCSDIR)/); \
) >> $@
# Create a file with the package names in it
--- a/jdk/make/docs/NON_CORE_PKGS.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/docs/NON_CORE_PKGS.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -91,8 +91,6 @@
TRACING_PKGS = com.sun.tracing \
com.sun.tracing.dtrace
-ORACLENET_PKGS = com.oracle.net
-
# non-core packages in rt.jar
NON_CORE_PKGS = $(DOMAPI_PKGS) \
$(MGMT_PKGS) \
@@ -103,6 +101,5 @@
$(HTTPSERVER_PKGS) \
$(SMARTCARDIO_PKGS) \
$(TRACING_PKGS) \
- $(SCTPAPI_PKGS) \
- $(ORACLENET_PKGS)
+ $(SCTPAPI_PKGS)
--- a/jdk/make/java/awt/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/awt/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = awt
PACKAGE = java.awt
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/java/fdlibm/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/fdlibm/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -31,7 +31,6 @@
#
BUILDDIR = ../..
-MODULE = base
LIBRARY = fdlibm
PRODUCT = java
--- a/jdk/make/java/instrument/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/instrument/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -27,7 +27,6 @@
# agent, supporting java.lang.instrument
BUILDDIR = ../..
-MODULE = instrument
PACKAGE = sun.instrument
LIBRARY = instrument
PRODUCT = sun
--- a/jdk/make/java/java/FILES_java.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/java/FILES_java.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -466,7 +466,6 @@
java/security/ProtectionDomain.java \
java/net/URLClassLoader.java \
java/net/URLConnection.java \
- sun/misc/BootClassLoaderHook.java \
sun/misc/Launcher.java \
sun/misc/MetaIndex.java \
sun/misc/URLClassPath.java \
--- a/jdk/make/java/java/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/java/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
#
BUILDDIR = ../..
-MODULE = base
PACKAGE = java.lang
LIBRARY = java
PRODUCT = java
@@ -244,7 +243,7 @@
$(GENSRCDIR)/java/lang/UNIXProcess.java: \
$(PLATFORM_SRC)/classes/java/lang/UNIXProcess.java.$(PLATFORM)
- $(install-non-module-file)
+ $(install-file)
clean::
$(RM) $(GENSRCDIR)/java/lang/UNIXProcess.java
@@ -318,7 +317,6 @@
$(BOOT_JAVA_CMD) -jar $(GENERATECURRENCYDATA_JARFILE) -o $@.temp \
< $(SHARE_SRC)/classes/java/util/CurrencyData.properties
$(MV) $@.temp $@
- $(install-module-file)
$(call chmod-file, 444)
clean::
@@ -373,7 +371,7 @@
-usecharforbyte 11 4 1
$(GENSRCDIR)/java/lang/%.java : $(CHARACTERDATA)/%.java.template
- $(install-non-module-file)
+ $(install-file)
clean::
$(RM) $(GENSRCDIR)/java/lang/CharacterDataLatin1.java
--- a/jdk/make/java/java_crw_demo/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/java_crw_demo/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -25,7 +25,6 @@
BUILDDIR = ../..
-MODULE = demos
LIBRARY = java_crw_demo
PRODUCT = sun
LIBRARY_OUTPUT = java_crw_demo
--- a/jdk/make/java/java_hprof_demo/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/java_hprof_demo/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = instrument
LIBRARY = hprof
PRODUCT = sun
LIBRARY_OUTPUT = hprof_jvmti
--- a/jdk/make/java/jli/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/jli/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -30,7 +30,6 @@
# its manifestations (java, javaw, javac, ...).
#
BUILDDIR = ../..
-MODULE = base
LIBRARY = jli
PRODUCT = java
--- a/jdk/make/java/jvm/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/jvm/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = base
include $(BUILDDIR)/common/Defs.gmk
@@ -39,10 +38,10 @@
$(INCLUDEDIR)/classfile_constants.h
$(INCLUDEDIR)/%.h: $(SHARE_SRC)/javavm/export/%.h
- $(install-non-module-file)
+ $(install-file)
$(PLATFORM_INCLUDE)/%.h: $(PLATFORM_SRC)/javavm/export/%.h
- $(install-non-module-file)
+ $(install-file)
JVMCFG = $(LIBDIR)/$(LIBARCH)/jvm.cfg
--- a/jdk/make/java/logging/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/logging/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = logging
PACKAGE = java.util.logging
PRODUCT = java
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/java/main/java/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/main/java/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../..
-MODULE = base
PROGRAM = java
PRODUCT = java
--- a/jdk/make/java/main/javaw/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/main/javaw/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../..
-MODULE = base
PROGRAM = javaw
PRODUCT = java
--- a/jdk/make/java/management/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/management/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = management
PACKAGE = java.lang.management
LIBRARY = management
PRODUCT = java
--- a/jdk/make/java/net/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/net/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = base
PACKAGE = java.net
LIBRARY = net
PRODUCT = sun
--- a/jdk/make/java/nio/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/nio/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = nio
PACKAGE = java.nio
LIBRARY = nio
PRODUCT = java
@@ -304,11 +303,7 @@
# Rules
#
-SUBDIRS_management = mxbean
-include $(BUILDDIR)/common/Subdirs.gmk
-
build: sources
- $(SUBDIRS-loop)
clean clobber::
$(RM) -r $(NIO_GEN) $(SNIO_GEN)
@@ -821,7 +816,7 @@
$(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }')
$(TEMPDIR)/$(GENSOR_SRC) : $(GENSOR_SRC)
- $(install-non-module-file)
+ $(install-file)
$(GENSOR_EXE) : $(TEMPDIR)/$(GENSOR_SRC)
$(prep-target)
--- a/jdk/make/java/nio/mxbean/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-# 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.
-#
-
-BUILDDIR = ../../..
-MODULE = management
-PACKAGE = java.nio
-PRODUCT = java
-include $(BUILDDIR)/common/Defs.gmk
-
-FILES_java = java/nio/BufferPoolMXBean.java
-
-include $(BUILDDIR)/common/Classes.gmk
--- a/jdk/make/java/npt/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/npt/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -26,7 +26,6 @@
BUILDDIR = ../..
# It's currently used by jpda and hprof. Put it in base module for now.
-MODULE = base
LIBRARY = npt
PRODUCT = sun
LIBRARY_OUTPUT = npt
--- a/jdk/make/java/redist/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/redist/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -35,7 +35,6 @@
#
BUILDDIR = ../..
-MODULE = base
PRODUCT = java
include $(BUILDDIR)/common/Defs.gmk
@@ -122,32 +121,26 @@
$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMMAP_NAME):
@$(prep-target)
-$(CP) $(HOTSPOT_CLIENT_PATH)/$(JVMMAP_NAME) $@
- @$(install-module-file)
$(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMMAP_NAME):
@$(prep-target)
-$(CP) $(HOTSPOT_KERNEL_PATH)/$(JVMMAP_NAME) $@
- @$(install-module-file)
$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMMAP_NAME):
@$(prep-target)
-$(CP) $(HOTSPOT_SERVER_PATH)/$(JVMMAP_NAME) $@
- @$(install-module-file)
$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMPDB_NAME):
@$(prep-target)
-$(CP) $(HOTSPOT_CLIENT_PATH)/$(JVMPDB_NAME) $@
- @$(install-module-file)
$(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMPDB_NAME):
@$(prep-target)
-$(CP) $(HOTSPOT_KERNEL_PATH)/$(JVMPDB_NAME) $@
- @$(install-module-file)
$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMPDB_NAME):
@$(prep-target)
-$(CP) $(HOTSPOT_SERVER_PATH)/$(JVMPDB_NAME) $@
- @$(install-module-file)
# Windows ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Windows
else # PLATFORM
@@ -291,7 +284,7 @@
$(LIBDIR)/jce.jar: \
$(BUILDDIR)/closed/tools/crypto/jce/jce.jar
- $(install-non-module-file)
+ $(install-file)
$(LIBDIR)/security/US_export_policy.jar: \
$(BUILDDIR)/closed/tools/crypto/jce/US_export_policy.jar
$(install-file)
--- a/jdk/make/java/redist/fonts/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/redist/fonts/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../..
-MODULE = font
PRODUCT = java
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/java/redist/sajdi/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/redist/sajdi/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../..
-MODULE = sajdi
PRODUCT = java
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/java/security/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/security/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = base
PACKAGE = java.security
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/java/sql/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/sql/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = jdbc-base
PACKAGE = java.sql
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/java/text/base/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/text/base/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../..
-MODULE = base
PACKAGE = java.text
PRODUCT = sun
--- a/jdk/make/java/verify/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/verify/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = base
PRODUCT = java
LIBRARY = verify
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/java/zip/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/java/zip/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -25,7 +25,6 @@
BUILDDIR = ../..
-MODULE = base
PACKAGE = java.util.zip
LIBRARY = zip
PRODUCT = sun
--- a/jdk/make/javax/crypto/Defs-jce.gmk Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/javax/crypto/Defs-jce.gmk Wed Mar 16 10:47:45 2011 -0400
@@ -83,7 +83,7 @@
define release-warning
@$(ECHO) \
- "\n***The jar files built by the \"release\" target must***" \
+ "\n***The jar files built by the 'release' target must***" \
"\n***still be checked into the closed workspace! ***" \
$(README-MAKEFILE_WARNING)
endef
--- a/jdk/make/javax/crypto/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/javax/crypto/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -108,7 +108,6 @@
#
BUILDDIR = ../..
-MODULE = base
PACKAGE = javax.crypto
PRODUCT = sun
@@ -294,7 +293,7 @@
$(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar: \
$(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar
- $(install-non-module-file)
+ $(install-file)
$(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \
policy/limited/default_local.policy \
@@ -415,7 +414,7 @@
else
$(JAR_DESTFILE): $(SIGNED_DIR)/jce.jar
endif
- $(install-non-module-file)
+ $(install-file)
#
# Install the appropriate policy file, depending on the type of build.
@@ -435,7 +434,7 @@
$(POLICY_DESTDIR)/local_policy.jar
$(CP) $^ $(POLICY_DESTDIR)
-install-limited: install-limited-jars install-module-files
+install-limited: install-limited-jars
ifndef OPENJDK
$(release-warning)
endif
@@ -449,7 +448,7 @@
$(POLICY_DESTDIR)/local_policy.jar
$(CP) $^ $(POLICY_DESTDIR)
-install-unlimited: install-unlimited-jars install-module-files
+install-unlimited: install-unlimited-jars
ifndef OPENJDK
$(release-warning)
endif
@@ -466,16 +465,9 @@
$(PREBUILT_DIR)/jce/local_policy.jar \
$(POLICY_DESTDIR)
-install-prebuilt: install-prebuilt-jars install-module-files
+install-prebuilt: install-prebuilt-jars
endif
-install-module-files: \
- $(POLICY_DESTDIR)/US_export_policy.jar \
- $(POLICY_DESTDIR)/local_policy.jar
-
-$(POLICY_DESTDIR)/%.jar :
- $(install-module-file)
-
# =====================================================
# Support routines.
#
--- a/jdk/make/javax/imageio/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/javax/imageio/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = imageio
PACKAGE = javax.imageio
PRODUCT = jiio
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/javax/print/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/javax/print/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = print
PACKAGE = javax.print
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/javax/sound/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/javax/sound/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = sound
PACKAGE = javax.sound
LIBRARY = jsound
PRODUCT = sun
--- a/jdk/make/javax/sound/jsoundalsa/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/javax/sound/jsoundalsa/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../..
-MODULE = sound
PACKAGE = javax.sound
LIBRARY = jsoundalsa
PRODUCT = sun
--- a/jdk/make/javax/sound/jsoundds/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/javax/sound/jsoundds/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../..
-MODULE = sound
PACKAGE = javax.sound
LIBRARY = jsoundds
PRODUCT = sun
--- a/jdk/make/javax/sql/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/javax/sql/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = jdbc-enterprise
PACKAGE = javax.sql
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/javax/swing/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/javax/swing/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = swing
PACKAGE = javax.swing
PRODUCT = com
SWING_SRC = $(SHARE_SRC)/classes/javax/swing
--- a/jdk/make/javax/swing/plaf/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/javax/swing/plaf/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../..
-MODULE = swing
PACKAGE = javax.swing.plaf
PRODUCT = com
SWING_SRC = $(SHARE_SRC)/classes/javax/swing
--- a/jdk/make/jpda/back/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/jpda/back/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = debugging
LIBRARY = jdwp
PRODUCT = jpda
--- a/jdk/make/jpda/transport/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/jpda/transport/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = debugging
PRODUCT = jpda
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/jpda/transport/shmem/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/jpda/transport/shmem/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../..
-MODULE = debugging
LIBRARY = dt_shmem
PRODUCT = jbug
--- a/jdk/make/jpda/transport/socket/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/jpda/transport/socket/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../..
-MODULE = debugging
LIBRARY = dt_socket
PRODUCT = jbug
--- a/jdk/make/jpda/tty/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/jpda/tty/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = jdb
PACKAGE = com.sun.tools.example.debug.tty
PRODUCT = jpda
PROGRAM = jdb
--- a/jdk/make/launchers/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/launchers/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ..
-MODULE = tools
PACKAGE = launchers
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
@@ -38,7 +37,6 @@
define make-corba-launcher
$(CD) $(BUILDDIR)/launchers && \
$(MAKE) -f Makefile.launcher \
- MODULE=corba \
PROGRAM=$(strip $1) \
MAIN_CLASS=$(strip $2) \
MAIN_JAVA_ARGS="$(strip $3)" \
--- a/jdk/make/mkdemo/jfc/SwingSet2/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/mkdemo/jfc/SwingSet2/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -37,6 +37,7 @@
DEMO_MAINCLASS = $(DEMONAME)
DEMO_MANIFEST_ATTR = SplashScreen-Image: resources/images/splash.png
DEMO_DESTDIR = $(DEMODIR)/jfc/$(DEMONAME)
+DEMO_INCL_SRC = true
#
# Demo jar building rules.
--- a/jdk/make/mkdemo/jpda/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/mkdemo/jpda/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -32,6 +32,8 @@
DEMO_PKGDIR = com/sun/tools/example
DEMO_TOPFILES = ./com/sun/tools/example/README
DEMO_DESTDIR = $(DEMODIR)/jpda
+DEMO_JAR_NAME = examples.jar
+DEMO_ONLY_SRC = true
#
# Demo jar building rules.
--- a/jdk/make/mkdemo/jvmti/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/mkdemo/jvmti/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = demos
PRODUCT = demos
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mkdemo/management/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/mkdemo/management/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = demos
PRODUCT = demos
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/dtrace/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/mksample/dtrace/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
BUILDDIR = ../..
-MODULE = samples
PRODUCT = java
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/jmx/jmx-scandir/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/mksample/jmx/jmx-scandir/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
BUILDDIR = ../../..
-MODULE = samples
PRODUCT = java
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/nbproject/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/mksample/nbproject/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
BUILDDIR = ../..
-MODULE = samples
PRODUCT = java
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/nio/file/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/mksample/nio/file/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
BUILDDIR = ../../..
-MODULE = samples
PRODUCT = java
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/nio/multicast/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/mksample/nio/multicast/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
BUILDDIR = ../../..
-MODULE = samples
PRODUCT = java
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/nio/server/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/mksample/nio/server/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
BUILDDIR = ../../..
-MODULE = samples
PRODUCT = java
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/scripting/scriptpad/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/mksample/scripting/scriptpad/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
BUILDDIR = ../../..
-MODULE = samples
PRODUCT = java
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/webservices/EbayClient/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/mksample/webservices/EbayClient/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
BUILDDIR = ../../..
-MODULE = samples
PRODUCT = java
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/webservices/EbayServer/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/mksample/webservices/EbayServer/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
BUILDDIR = ../../..
-MODULE = samples
PRODUCT = java
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/modules/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-#
-# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
-# 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.
-#
-
-BUILDDIR = ..
-include $(BUILDDIR)/common/Defs.gmk
-
-#
-# Modularizing the JDK
-# - Post jdk build process until the source tree is restructured
-# for modules build
-# - <outputdir>/modules/<module> will be created for each module.
-#
-# Steps:
-# 0. During jdk build before this makefile is invoked, classes,
-# resource files, and other non-class files such as native libraries,
-# properties file, images, etc are created.
-#
-# Non-class files are copied to <outputdir>/tmp/modules/<MODULE>
-# directory in this step to prepare for the post-build modularization.
-#
-# The MODULE variable defined in other makefiles specifies
-# the lowest-level module that the non-class files belong to.
-# The name might or might not be the same as the name of the modules
-# in the resulting <outputdir>/modules directory.
-#
-# 1. Unpack all jars in the <builddir>/lib directory to a temporary
-# location (<outputdir>/tmp/modules/classes) to prepare for modules
-# creation.
-#
-# 2. Run ClassAnalyzer tool to analyze all jdk classes and generate
-# class list for all modules and also perform dependency analysis.
-#
-# Input configuration files :-
-#
-# modules.config : defines the low-level modules and specifies
-# what classes and resource files each module includes.
-# modules.group : defines the module groups and its members.
-# jdk7.depconfig : lists the dynamic dependencies including
-# use of reflection Class.forName and JNI FindClass and
-# service provider.
-# optional.depconfig : lists the optional dependencies
-#
-# 3. Create one directory for each module (<outputdir>/modules/<module>)
-# based on the output files from (2).
-#
-# modules.list lists the modules to be created for the modules
-# build and its members. For each module (m) in modules.list,
-# a. create $m/lib/$m.jar with all classes and resource files
-# listed in $m.classlist and $m.resources respectively.
-# b. copy all non-class files from its members to
-# <outputdir>/modules/$m.
-
-
-MAINMANIFEST=$(JDK_TOPDIR)/make/tools/manifest.mf
-MODULE_JAR_MANIFEST_FILE=$(ABS_TEMPDIR)/manifest.tmp
-
-TMP = $(ABS_MODULES_TEMPDIR)
-MODULE_CLASSLIST = $(ABS_MODULES_TEMPDIR)/classlist
-MODULE_CLASSES = $(ABS_MODULES_TEMPDIR)/classes
-MODULES_LIST = $(MODULE_CLASSLIST)/modules.list
-
-all:: unpack-jars gen-classlist modularize
-
-JAR_LIST := $(shell $(FIND) $(ABS_OUTPUTDIR)/lib -name \*.jar -print)
-unpack-jars:
- @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..."
- $(RM) -rf $(MODULE_CLASSES)
- $(MKDIR) -p $(MODULE_CLASSES)
- $(CP) -rf $(CLASSBINDIR)/* $(MODULE_CLASSES)
- @for jf in $(JAR_LIST) ; do \
- $(CD) $(MODULE_CLASSES) && $(BOOT_JAR_CMD) xf $$jf $(BOOT_JAR_JFLAGS);\
- done
- @$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..."
-
-gen-classlist:
- $(CD) tools && $(MAKE) all
-
-modularize: $(MODULE_JAR_MANIFEST_FILE)
- @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..."
- @$(RM) -rf $(MODULES_DIR)
-
- @# create jar file for modules and
- @# copy other files from all members of this module
- for m in `$(NAWK) '{print $$1}' $(MODULES_LIST)` ; do \
- $(ECHO) "Creating module $$m" ; \
- $(SED) -e 's%\\%\/%g' < $(MODULE_CLASSLIST)/$$m.classlist > $(TMP)/tmp.cf ; \
- if [ -f $(MODULE_CLASSLIST)/$$m.resources ] ; then \
- $(SED) -e 's%\\%\/%g' < $(MODULE_CLASSLIST)/$$m.resources >> $(TMP)/tmp.cf ; \
- fi ; \
- $(MKDIR) -p $(ABS_MODULES_DIR)/$$m/lib; \
- $(CD) $(MODULE_CLASSES) && \
- $(BOOT_JAR_CMD) c0mf $(MODULE_JAR_MANIFEST_FILE) \
- $(ABS_MODULES_DIR)/$$m/lib/$$m.jar \
- @$(TMP)/tmp.cf \
- $(BOOT_JAR_JFLAGS); \
- for s in `$(GREP) "^$$m" $(MODULES_LIST)` ; do \
- if [ -d $(TMP)/$$s ] ; then \
- $(CP) -rf $(TMP)/$$s/* $(ABS_MODULES_DIR)/$$m; \
- $(RM) -rf $(ABS_MODULES_DIR)/$$m/classes; \
- fi \
- done \
- done
- @$(CD) $(MODULE_CLASSES) && $(java-vm-cleanup)
- @$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..."
-
-$(MODULE_JAR_MANIFEST_FILE):
- $(SED) -e "s/@@RELEASE@@/$(RELEASE)/" $(MAINMANIFEST) > $@
-
-clean clobber::
- $(RM) -rf $(MODULE_CLASSLIST)
- $(RM) -rf $(MODULES_DIR)
- $(RM) $(MODULE_JAR_MANIFEST_FILE)
--- a/jdk/make/modules/bootmodule.roots Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,199 +0,0 @@
-#
-# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
-# 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.
-#
-
-#
-# List of root classes/methods, each line of the following syntax:
-# <class name>
-# <method name> <signature>|*
-# exclude <class>|<method>
-
-# The boot module generated based on this rootset does not support
-# - security permission check
-# - non-standard charset
-# - logging output
-# - resource bundles
-# including error output from the launcher
-
-# VM preloaded classes
-java.lang.Object
-java.lang.String
-java.lang.Class
-java.lang.Cloneable
-java.lang.ClassLoader
-java.lang.System
-java.lang.Throwable
-java.lang.Error
-java.lang.ThreadDeath
-java.lang.Exception
-java.lang.RuntimeException
-java.security.ProtectionDomain
-java.security.AccessControlContext
-java.lang.ClassNotFoundException
-java.lang.NoClassDefFoundError
-java.lang.ClassCastException
-java.lang.ArrayStoreException
-java.lang.VirtualMachineError
-java.lang.OutOfMemoryError
-java.lang.StackOverflowError
-java.lang.IllegalMonitorStateException
-java.lang.ref.Reference
-java.lang.ref.SoftReference
-java.lang.ref.WeakReference
-java.lang.ref.FinalReference
-java.lang.ref.PhantomReference
-java.lang.ref.Finalizer
-java.lang.Runnable
-java.lang.Thread
-java.lang.ThreadGroup
-java.util.Properties
-java.lang.reflect.AccessibleObject
-java.lang.reflect.Member
-java.lang.reflect.Field
-java.lang.reflect.Method
-java.lang.reflect.Constructor
-java.lang.reflect.Type
-sun.reflect.MagicAccessorImpl
-sun.reflect.MethodAccessorImpl
-sun.reflect.ConstructorAccessorImpl
-sun.reflect.DelegatingClassLoader
-sun.reflect.ConstantPool
-sun.reflect.UnsafeStaticFieldAccessorImpl
-java.util.Vector
-java.lang.StringBuffer
-java.lang.StackTraceElement
-java.nio.Buffer
-java.lang.Boolean
-java.lang.Character
-java.lang.Float
-java.lang.Double
-java.lang.Byte
-java.lang.Short
-java.lang.Integer
-java.lang.Long
-java.lang.NullPointerException
-java.lang.ArithmeticException
-java.lang.Compiler
-
-
-# Root methods
-java.lang.ClassLoader.getSystemClassLoader ()Ljava/lang/ClassLoader;
-java.lang.System.initializeSystemClass ()V
-sun.launcher.LauncherHelper.checkAndLoadMain (ZZLjava/lang/String;)Ljava/lang/Object;
-
-# The tool doesn't automatically find superclasses and parse the method
-# if overridden as it tries to reduce unnecessary classes being pulled in.
-# The following forces the dependency to be included the result.
-sun.net.www.protocol.file.Handler.<init> ()V
-sun.net.www.protocol.jar.Handler.<init> ()V
-sun.net.www.protocol.file.Handler.openConnection *
-sun.net.www.protocol.jar.Handler.openConnection *
-sun.misc.URLClassPath$JarLoader.<init> (Ljava/net/URL;Ljava/net/URLStreamHandler;Ljava/util/HashMap;)V
-sun.misc.URLClassPath$FileLoader.<init> (Ljava/net/URL;)V
-sun.misc.URLClassPath$FileLoader.getClassPath *
-sun.misc.URLClassPath$FileLoader.getResource *
-sun.misc.URLClassPath$JarLoader.getResource *
-sun.misc.URLClassPath$JarLoader.getClassPath *
-
-# permission collections
-java.io.FilePermission.newPermissionCollection ()Ljava/security/PermissionCollection;
-java.security.BasicPermission.newPermissionCollection ()Ljava/security/PermissionCollection;
-
-# native
-java.io.UnixFileSystem
-java.io.UnixFileSystem.<init> ()V
-java.io.UnixFileSystem.canonicalize *
-java.io.Win32FileSystem
-java.io.Win32FileSystem.<init> ()V
-java.io.Win32FileSystem.canonicalize *
-java.io.WinNTFileSystem
-java.io.WinNTFileSystem.<init> ()V
-java.io.WinNTFileSystem.canonicalize *
-
-# missing
-java.util.HashMap.<init> ()V
-java.util.HashMap$EntrySet.iterator *
-
-# Called from native GetStringPlatformChars (jni_util.c)
-java.lang.String.getBytes *
-
-# charset
-sun.nio.cs.US_ASCII.newEncoder ()Ljava/nio/charset/CharsetEncoder;
-sun.nio.cs.UTF_8.newEncoder ()Ljava/nio/charset/CharsetEncoder;
-sun.nio.cs.UTF_8.newDecoder *
-sun.nio.cs.UTF_16.newEncoder ()Ljava/nio/charset/CharsetEncoder;
-sun.nio.cs.UTF_16.newDecoder *
-sun.nio.cs.UTF_32.newEncoder ()Ljava/nio/charset/CharsetEncoder;
-sun.nio.cs.UTF_32.newDecoder *
-
-# hashcode
-java.util.jar.Attributes$Name.hashCode *
-
-# nio
-sun.nio.ByteBuffered
-sun.nio.ch.DirectBuffer
-java.nio.DirectByteBuffer
-java.nio.MappedByteBuffer
-java.nio.DirectLongBufferU
-
-# resource files
-sun.launcher.resources.launcher
-
-sun.misc.Launcher$AppClassLoader.getPermissions *
-sun.misc.Launcher$AppClassLoader.loadClass (Ljava/lang/String;)Ljava/lang/Class;
-sun.misc.Launcher$AppClassLoader.findClass (Ljava/lang/String;)Ljava/lang/Class;
-sun.misc.Launcher$ExtClassLoader.getPermissions *
-sun.misc.Launcher$ExtClassLoader.loadClass (Ljava/lang/String;)Ljava/lang/Class;
-sun.misc.Launcher$ExtClassLoader.findClass (Ljava/lang/String;)Ljava/lang/Class;
-java.lang.ClassLoader.checkPackageAccess *
-java.lang.ClassLoader.findClass *
-java.lang.ClassLoader.defineClass *
-java.net.URLClassLoader.getPermissions *
-java.net.URLClassLoader.findClass *
-java.net.URLClassLoader.defineClass *
-java.security.SecureClassLoader.defineClass *
-# need to parse superclasses <init>
-java.security.SecureClassLoader.<init> ()V
-
-exclude sun.security.provider.PolicyFile.<init>
-exclude java.lang.ClassLoader.compareCerts
-exclude java.security.cert.Certificate.equals
-# unsigned jars - no verifier
-exclude java.util.jar.JarFile.initializeVerifier
-exclude java.util.jar.JarVerifier
-exclude sun.security.util.SignatureFileVerifier.<init>
-
-
-# what about other charset
-exclude sun.misc.Service
-exclude java.util.ServiceLoader
-
-# exclude support for localized messages
-exclude java.util.ResourceBundle.getBundle
-exclude java.text.MessageFormat
-exclude sun.util.logging.PlatformLogger$LoggerProxy.format *
-
-# exclude nio and miscellaneous classes
-exclude java.nio.channels.**
-exclude sun.misc.FloatingDecimal
-exclude sun.misc.FormattedFloatingDecimal
-exclude sun.misc.FDBigInt
--- a/jdk/make/modules/jdk7.depconfig Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,473 +0,0 @@
-#
-# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
-# 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.
-#
-
-# private java.lang.Object createInetSocketAddress(java.lang.String, int)
-@ClassForName
- com.sun.jndi.ldap.Connection -> java.net.InetSocketAddress
- com.sun.jndi.ldap.Connection -> java.net.SocketAddress
-
-# com.sun.jndi.ldap.VersionHelper
-@ClassForName(optional)
- com.sun.jndi.ldap.VersionHelper -> com.sun.jndi.ldap.VersionHelper*
-
-# private static void initMethodHandles()
-@ClassForName
- com.sun.jndi.toolkit.corba.CorbaUtils -> javax.rmi.CORBA.Stub
- com.sun.jndi.toolkit.corba.CorbaUtils -> javax.rmi.PortableRemoteObject
-
-# com.sun.naming.internal.ResourceManager$AppletParameter
-@ClassForName(optional)
- com.sun.naming.internal.ResourceManager$AppletParameter -> java.applet.Applet
-
-# private static boolean loadProviderAsService()
-@Provider
- com.sun.net.httpserver.spi.HttpServerProvider -> META-INF/services/com.sun.net.httpserver.spi.HttpServerProvider
-
-# com.sun.org.apache.xml.internal.security.transforms.implementations.TransformXSLT
-@ClassForName
- com.sun.org.apache.xml.internal.security.transforms.implementations.TransformXSLT -> javax.xml.XMLConstants
-
-# public static java.beans.PersistenceDelegate getPersistenceDelegate(java.lang.Class)
-@ClassForName
- java.beans.MetaData -> java.beans.*_PersistenceDelegate
-
-# private static java.lang.reflect.Method getNanosMethod()
-@ClassForName(optional)
- java.beans.java_sql_Timestamp_PersistenceDelegate -> java.sql.Timestamp
-
-# java.beans.java_util_Collections$CheckedCollection_PersistenceDelegate
-@ClassForName
- java.beans.java_util_Collections$CheckedCollection_PersistenceDelegate -> java.util.Collections$CheckedCollection
-
-# java.beans.java_util_Collections$CheckedMap_PersistenceDelegate
-@ClassForName
- java.beans.java_util_Collections$CheckedMap_PersistenceDelegate -> java.util.Collections$CheckedMap
-
-# private static java.lang.Object getType(java.lang.Object)
-@ClassForName
- java.beans.java_util_EnumMap_PersistenceDelegate -> java.util.EnumMap
-
-# private java.lang.Integer getAxis(java.lang.Object)
-@ClassForName
- java.beans.javax_swing_Box_PersistenceDelegate -> javax.swing.BoxLayout
-
-# java.lang.Double
-@Inline
- java.lang.Double -> sun.misc.FloatConsts
- java.lang.Double -> sun.misc.DoubleConsts
-
-# java.lang.Float
-@Inline
- java.lang.Float -> sun.misc.FloatConsts
- java.lang.Float -> sun.misc.DoubleConsts
-
-# java.net.DefaultDatagramSocketImplFactory
-@ClassForName(optional)
- java.net.DefaultDatagramSocketImplFactory -> java.net.*DatagramSocketImpl
-
-# private static sun.net.spi.nameservice.NameService createNSProvider(java.lang.String)
-@Provider
- java.net.InetAddress -> META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor
-
-# static java.net.InetAddressImpl create()
-@ClassForName
- java.net.InetAddressImplFactory -> java.net.*Inet[46]AddressImpl
-
-# private static void init()
-@NativeFindClass
- java.net.PlainDatagramSocketImpl -> java.io.FileDescriptor
-
-# java.net.ProxySelector
-@ClassForName
- java.net.ProxySelector -> sun.net.spi.DefaultProxySelector
-
-# static java.net.URLStreamHandler getURLStreamHandler(java.lang.String)
-@ClassForName(optional)
- java.net.URL -> sun.net.www.protocol.*.Handler
-
-# private java.net.ContentHandler lookupContentHandlerClassFor(java.lang.String)
-@ClassForName
- java.net.URLConnection -> sun.net.www.content.*
-
-# private static java.nio.channels.spi.AsynchronousChannelProvider loadProviderAsService()
-@Provider
- java.nio.channels.spi.AsynchronousChannelProvider$ProviderHolder -> META-INF/services/java.nio.channels.spi.AsynchronousChannelProvider
-
-# private static boolean loadProviderFromProperty()
-@ClassForName
- java.nio.channels.spi.SelectorProvider -> sun.nio.ch.DefaultSelectorProvider
-
-# private static boolean loadProviderAsService()
-@Provider
- java.nio.channels.spi.SelectorProvider -> META-INF/services/java.nio.channels.spi.SelectorProvider
-
-# private static java.util.Iterator providers()
-@Provider
- java.nio.charset.Charset -> META-INF/services/java.nio.charset.spi.CharsetProvider
-
-# private static void probeExtendedProvider()
-@ClassForName(optional)
- java.nio.charset.Charset -> sun.nio.cs.ext.ExtendedCharsets
-
-# public static java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String, ?>, java.lang.ClassLoader)
-@Provider
- java.nio.file.FileSystems -> META-INF/services/java.nio.file.FileSystemProvider
-
-# private static java.util.List<java.nio.file.spi.FileTypeDetector> loadInstalledDetectors()
-@Provider
- java.nio.file.Files$DefaultFileTypeDetectorHolder -> META-INF/services/java.nio.file.spi.FileTypeDetector
-
-# public static java.util.List<java.nio.file.spi.FileSystemProvider> installedProviders()
-@Provider
- java.nio.file.spi.FileSystemProvider -> META-INF/services/java.nio.file.FileSystemProvider
-
-# private static java.rmi.server.RMIClassLoaderSpi initializeProvider()
-@Provider
- java.rmi.server.RMIClassLoader -> META-INF/services/java.rmi.server.RMIClassLoaderSpi
-
-# private static void initializeSystemScope()
-@ClassForName(optional)
- java.security.IdentityScope -> sun.security.provider.IdentityDatabase
-
-# static java.security.Policy getPolicyNoCheck()
-@ClassForName
- java.security.Policy -> sun.security.provider.PolicyFile
-
-# private static java.lang.Class getSpiClass(java.lang.String)
-@ClassForName
- java.security.Security -> java.security.*Spi
-
-# private static void invalidateSMCache(java.lang.String)
-@ClassForName
- java.security.Security -> java.lang.SecurityManager
-
-# private static void loadInitialDrivers()
-@Provider
- java.sql.DriverManager -> META-INF/services/java.sql.Driver
-
-# private static java.text.BreakIterator createBreakInstance(java.util.Locale, int, java.lang.String, java.lang.String)
-@Provider
- java.text.BreakIterator -> META-INF/services/java.util.spi.BreakIteratorProvider
-
-# public static java.text.Collator getInstance(java.util.Locale)
-@Provider
- java.text.Collator -> META-INF/services/java.util.spi.CollatorProvider
-
-# private static java.text.DateFormat get(int, int, int, java.util.Locale)
-@Provider
- java.text.DateFormat -> META-INF/services/java.util.spi.DateNameProvider
-
-# public static java.util.Locale[] getAvailableLocales()
-@Provider
- java.text.DateFormatSymbols -> META-INF/services/java.util.spi.DateFormatSymbolsProvider
-
-# public static java.util.Locale[] getAvailableLocales()
-@Provider
- java.text.DecimalFormatSymbols -> META-INF/services/java.util.spi.DecimalFormatSymbolsProvider
-
-# public static java.util.Locale[] getAvailableLocales()
-@Provider
- java.text.NumberFormat -> META-INF/services/java.util.spi.NumberFormatProvider
-
-# public java.lang.String getDisplayName(java.util.Locale)
-@Provider
- java.util.Currency -> META-INF/services/java.util.spi.CurrencyNameProvider
-
-# java.util.Formatter
-@Inline
- java.util.Formatter -> sun.misc.DoubleConsts
-
-# java.util.Locale
-@Inline
- java.util.Locale -> java.util.LocaleISOData
-
-# private java.lang.String getDisplayString(java.lang.String, java.util.Locale, int)
-@Provider
- java.util.Locale -> META-INF/services/java.util.spi.LocaleNameProvider
-
-# private static java.util.prefs.PreferencesFactory factory1()
-@ClassForName
- java.util.prefs.Preferences -> java.util.prefs.WindowsPreferencesFactory
- java.util.prefs.Preferences -> java.util.prefs.FileSystemPreferencesFactory
-
-# private static java.util.prefs.PreferencesFactory factory1()
-@Provider
- java.util.prefs.Preferences -> META-INF/services/java.util.prefs.PreferencesFactory
-
-# public void registerApplicationClasspathSpis()
-@Provider
- javax.imageio.spi.IIORegistry -> META-INF/services/javax.imageio.spi.IIOServiceProvider
-
-# private void registerInstalledProviders()
-@Provider
- javax.imageio.spi.IIORegistry -> META-INF/services/javax.imageio.spi.ImageReaderSpi
- javax.imageio.spi.IIORegistry -> META-INF/services/javax.imageio.spi.ImageWriterSpi
- javax.imageio.spi.IIORegistry -> META-INF/services/javax.imageio.spi.ImageReaderWriterSpi
- javax.imageio.spi.IIORegistry -> META-INF/services/javax.imageio.spi.ImageTranscoderSpi
- javax.imageio.spi.IIORegistry -> META-INF/services/javax.imageio.spi.ImageInputStreamSpi
- javax.imageio.spi.IIORegistry -> META-INF/services/javax.imageio.spi.ImageOutputStreamSpi
-
-# public javax.naming.ldap.ExtendedResponse createExtendedResponse(java.lang.String, byte[], int, int)
-@Provider
- javax.naming.ldap.StartTlsRequest -> META-INF/services/javax.naming.ldap.StartTlsResponse
-
-# private static java.util.ArrayList getAllLookupServices()
-@Provider
- javax.print.PrintServiceLookup -> META-INF/services/javax.print.PrintServiceLookup
-
-# private static java.util.ArrayList getAllFactories()
-@Provider
- javax.print.StreamPrintServiceFactory -> META-INF/services/javax.print.StreamPrintServiceFactory
-
-# private void initEngines(java.lang.ClassLoader)
-@Provider
- javax.script.ScriptEngineManager -> META-INF/services/javax.script.ScriptEngineFactory
-
-# private void initializeInputMethodLocatorList()
-@Provider
- sun.awt.im.ExecutableInputMethodManager -> META-INF/services/java.awt.im.spi.InputMethodDescriptor
-
-# private static java.lang.Class getConverterClass(int, java.lang.String)
-@ClassForName(optional)
- sun.io.Converters -> sun.io.*
-
-# public static sun.java2d.cmm.PCMM getModule()
-@Provider
- sun.java2d.cmm.CMSManager -> META-INF/services/sun.java2d.cmm.PCMM
-
-# public static sun.java2d.pipe.RenderingEngine getInstance()
-@Provider
- sun.java2d.pipe.RenderingEngine -> META-INF/services/sun.java2d.pipe.RenderingEngine
-
-# public static sun.java2d.pipe.RenderingEngine getInstance()
-@ClassForName(optional)
- sun.java2d.pipe.RenderingEngine -> sun.dc.DuctusRenderingEngine
-
-# sun.misc.FloatingDecimal
-@Inline
- sun.misc.FloatingDecimal -> sun.misc.FloatConsts
- sun.misc.FloatingDecimal -> sun.misc.DoubleConsts
-
-# sun.misc.FormattedFloatingDecimal
-@Inline
- sun.misc.FormattedFloatingDecimal -> sun.misc.FloatConsts
- sun.misc.FormattedFloatingDecimal -> sun.misc.DoubleConsts
-
-# sun.misc.FpUtils
-@Inline
- sun.misc.FpUtils -> sun.misc.FloatConsts
- sun.misc.FpUtils -> sun.misc.DoubleConsts
-
-# public java.net.URLStreamHandler createURLStreamHandler(java.lang.String)
-@ClassForName(optional)
- sun.misc.Launcher$Factory -> sun.net.www.protocol.*.Handler
-
-# private static sun.net.NetHooks$Provider loadProvider(java.lang.String)
-@ClassForName(optional)
- sun.net.NetHooks -> sun.net.spi.SdpProvider
-
-# sun.net.idn.StringPrep
-@Inline
- sun.net.idn.StringPrep -> sun.net.idn.UCharacterDirection
-
-# private static boolean init()
-@NativeFindClass
- sun.net.spi.DefaultProxySelector -> java.net.Proxy
- sun.net.spi.DefaultProxySelector -> java.net.Proxy$Type
- sun.net.spi.DefaultProxySelector -> java.net.InetSocketAddress
-
-# private static java.nio.channels.Channel createChannel()
-@ClassForName
- sun.nio.ch.InheritedChannel -> java.io.FileDescriptor
-
-# private static void initDBBConstructor()
-@ClassForName
- sun.nio.ch.Util -> java.nio.DirectByteBuffer
-
-# private static void initDBBRConstructor()
-@ClassForName
- sun.nio.ch.Util -> java.nio.DirectByteBufferR
-
-# private java.nio.charset.Charset lookup(java.lang.String)
-@ClassForName(optional)
- sun.nio.cs.FastCharsetProvider -> sun.nio.cs.*
-
-# sun.nio.cs.ext.ExtendedCharsets
-@ClassForName(optional)
- sun.nio.cs.ext.ExtendedCharsets -> sun.nio.cs.ext.*
-
-# sun.nio.cs.ext.ExtendedCharsets
-@ClassForName(optional)
- sun.nio.cs.ext.ExtendedCharsets -> sun.nio.cs.ext.*
-
-# public static java.nio.file.spi.FileSystemProvider create()
-@ClassForName
- sun.nio.fs.DefaultFileSystemProvider -> sun.nio.fs.SolarisFileSystemProvider
- sun.nio.fs.DefaultFileSystemProvider -> sun.nio.fs.LinuxFileSystemProvider
-
-# sun.rmi.server.MarshalInputStream
-@ClassForName
- sun.rmi.server.MarshalInputStream -> sun.rmi.server.Activation$ActivationSystemImpl_Stub
- sun.rmi.server.MarshalInputStream -> sun.rmi.registry.RegistryImpl_Stub
-
-# private java.security.Provider doLoadProvider()
-@ClassForName(optional)
- sun.security.jca.ProviderConfig -> sun.security.pkcs11.SunPKCS11
- sun.security.jca.ProviderConfig -> sun.security.provider.Sun
- sun.security.jca.ProviderConfig -> sun.security.rsa.SunRsaSign
- sun.security.jca.ProviderConfig -> sun.security.ec.SunEC
- sun.security.jca.ProviderConfig -> com.sun.net.ssl.internal.ssl.Provider
- sun.security.jca.ProviderConfig -> com.sun.crypto.provider.SunJCE
- sun.security.jca.ProviderConfig -> sun.security.jgss.SunProvider
- sun.security.jca.ProviderConfig -> com.sun.security.sasl.Provider
- sun.security.jca.ProviderConfig -> org.jcp.xml.dsig.internal.dom.XMLDSigRI
- sun.security.jca.ProviderConfig -> sun.security.smartcardio.SunPCSC
- sun.security.jca.ProviderConfig -> sun.security.mscapi.SunMSCAPI
-
-# public static java.security.Provider getSunProvider()
-@ClassForName
- sun.security.jca.Providers -> sun.security.provider.Sun
- sun.security.jca.Providers -> sun.security.provider.VerificationProvider
-
-# private static sun.security.jgss.spi.MechanismFactory getMechFactoryImpl(java.security.Provider, java.lang.String, org.ietf.jgss.Oid, sun.security.jgss.GSSCaller)
-@ClassForName
- sun.security.jgss.ProviderList -> sun.security.jgss.spi.MechanismFactory
-
-# sun.security.jgss.wrapper.SunNativeProvider
-@NativeFindClass
- sun.security.jgss.wrapper.SunNativeProvider -> org.ietf.jgss.Oid
- sun.security.jgss.wrapper.SunNativeProvider -> org.ietf.jgss.GSSException
- sun.security.jgss.wrapper.SunNativeProvider -> sun.security.jgss.wrapper.GSSNameElement
- sun.security.jgss.wrapper.SunNativeProvider -> sun.security.jgss.wrapper.GSSCredElement
- sun.security.jgss.wrapper.SunNativeProvider -> sun.security.jgss.wrapper.NativeGSSContext
- sun.security.jgss.wrapper.SunNativeProvider -> sun.security.jgss.wrapper.SunNativeProvider
- sun.security.jgss.wrapper.SunNativeProvider -> org.ietf.jgss.MessageProp
- sun.security.jgss.wrapper.SunNativeProvider -> org.ietf.jgss.ChannelBinding
- sun.security.jgss.wrapper.SunNativeProvider -> java.net.InetAddress
- sun.security.jgss.wrapper.SunNativeProvider -> sun.security.jgss.wrapper.GSSLibStub
-
-# static void ensureLoaded()
-@NativeFindClass
- sun.security.krb5.Credentials -> sun.security.krb5.internal.Krb5
- sun.security.krb5.Credentials -> sun.security.krb5.internal.Ticket
- sun.security.krb5.Credentials -> sun.security.krb5.PrincipalName
- sun.security.krb5.Credentials -> sun.security.util.DerValue
- sun.security.krb5.Credentials -> sun.security.krb5.EncryptionKey
- sun.security.krb5.Credentials -> sun.security.krb5.internal.TicketFlags
- sun.security.krb5.Credentials -> sun.security.krb5.internal.KerberosTime
-
-# public static java.lang.String getDefaultCacheName()
-@ClassForName(optional)
- sun.security.krb5.internal.ccache.FileCredentialsCache -> com.sun.security.auth.module.UnixSystem
-
-# sun.security.pkcs.PKCS9Attribute
-@ClassForName
- sun.security.pkcs.PKCS9Attribute -> sun.security.util.ObjectIdentifier
- sun.security.pkcs.PKCS9Attribute -> java.util.Date
- sun.security.pkcs.PKCS9Attribute -> sun.security.pkcs.SignerInfo
- sun.security.pkcs.PKCS9Attribute -> sun.security.x509.CertificateExtensions
-
-# protected T engineGetKeySpec(java.security.Key, java.lang.Class<T>)
-@ClassForName
- sun.security.provider.DSAKeyFactory -> java.security.spec.DSAPublicKeySpec
- sun.security.provider.DSAKeyFactory -> java.security.spec.X509EncodedKeySpec
- sun.security.provider.DSAKeyFactory -> java.security.spec.DSAPrivateKeySpec
- sun.security.provider.DSAKeyFactory -> java.security.spec.PKCS8EncodedKeySpec
-
-# protected T engineGetParameterSpec(java.lang.Class<T>)
-@ClassForName
- sun.security.provider.DSAParameters -> java.security.spec.DSAParameterSpec
-
-# sun.security.provider.VerificationProvider
-@ClassForName(optional)
- sun.security.provider.VerificationProvider -> sun.security.provider.Sun
- sun.security.provider.VerificationProvider -> sun.security.rsa.SunRsaSign
-
-# sun.security.provider.certpath.URICertStore$LDAP
-@ClassForName(optional)
- sun.security.provider.certpath.URICertStore$LDAP -> sun.security.provider.certpath.ldap.LDAPCertStoreHelper
-
-# sun.security.smartcardio.PCSC
-@NativeFindClass
- sun.security.smartcardio.PCSC -> sun.security.smartcardio.PCSCException
-
-# sun.security.ssl.HandshakeMessage
-@ClassForName
- sun.security.ssl.HandshakeMessage -> java.security.MessageDigest$Delegate
-
-# sun.security.ssl.JsseJce
-@ClassForName(optional)
- sun.security.ssl.JsseJce -> sun.security.krb5.PrincipalName
-
-# sun.security.x509.OIDMap$OIDInfo
-@ClassForName
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.SubjectKeyIdentifierExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.KeyUsageExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.PrivateKeyUsageExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.SubjectAlternativeNameExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.IssuerAlternativeNameExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.BasicConstraintsExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.CRLNumberExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.CRLReasonCodeExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.NameConstraintsExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.PolicyMappingsExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.AuthorityKeyIdentifierExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.PolicyConstraintsExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.NetscapeCertTypeExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.CertificatePoliciesExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.ExtendedKeyUsageExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.InhibitAnyPolicyExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.CRLDistributionPointsExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.CertificateIssuerExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.SubjectInfoAccessExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.AuthorityInfoAccessExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.IssuingDistributionPointExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.DeltaCRLIndicatorExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.FreshestCRLExtension
- sun.security.x509.OIDMap$OIDInfo -> sun.security.x509.OCSPNoCheckExtension
-
-# sun.util.LocaleServiceProviderPool$AllAvailableLocales
-@Provider
- sun.util.LocaleServiceProviderPool$AllAvailableLocales -> META-INF/services/java.text.spi.BreakIteratorProvider
- sun.util.LocaleServiceProviderPool$AllAvailableLocales -> META-INF/services/java.text.spi.CollatorProvider
- sun.util.LocaleServiceProviderPool$AllAvailableLocales -> META-INF/services/java.text.spi.DateFormatProvider
- sun.util.LocaleServiceProviderPool$AllAvailableLocales -> META-INF/services/java.text.spi.DateFormatSymbolsProvider
- sun.util.LocaleServiceProviderPool$AllAvailableLocales -> META-INF/services/java.text.spi.DecimalFormatSymbolsProvider
- sun.util.LocaleServiceProviderPool$AllAvailableLocales -> META-INF/services/java.text.spi.NumberFormatProvider
- sun.util.LocaleServiceProviderPool$AllAvailableLocales -> META-INF/services/java.util.spi.CurrencyNameProvider
- sun.util.LocaleServiceProviderPool$AllAvailableLocales -> META-INF/services/java.util.spi.LocaleNameProvider
- sun.util.LocaleServiceProviderPool$AllAvailableLocales -> META-INF/services/java.util.spi.TimeZoneNameProvider
-
-# private static final java.lang.String[] retrieveDisplayNames(sun.util.resources.OpenListResourceBundle, java.lang.String, java.util.Locale)
-@Provider
- sun.util.TimeZoneNameUtility -> META-INF/services/java.util.spi.TimeZoneNamePProvider
-
-# public static sun.util.calendar.CalendarSystem forName(java.lang.String)
-@ClassForName
- sun.util.calendar.CalendarSystem -> sun.util.calendar.Gregorian
- sun.util.calendar.CalendarSystem -> sun.util.calendar.LocalGregorianCalendar
- sun.util.calendar.CalendarSystem -> sun.util.calendar.JulianCalendar
-
-# sun.util.logging.LoggingSupport
-@ClassForName(optional)
- sun.util.logging.LoggingSupport -> java.util.logging.LoggingProxyImpl
--- a/jdk/make/modules/modules.config Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,928 +0,0 @@
-/*
- * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-// These classes are not referenced in the JDK but we can't
-// remove them for compatibility reason. Define this module
-// first so that other modules don't need to exclude these clases
-module private-legacy {
- include sun.misc.Cache*,
- sun.misc.ClassLoaderUtil,
- sun.misc.Compare,
- sun.misc.ConditionLock,
- sun.misc.CRC16,
- sun.misc.Lock,
- sun.misc.Regexp,
- sun.misc.RequestProcessor,
- sun.misc.Sort,
- sun.misc.Request,
- sun.misc.Timeable,
- sun.misc.Timer,
- sun.misc.TimerThread,
- sun.misc.TimerTickThread,
- sun.misc.UCDecoder,
- sun.misc.UCEncoder,
- sun.misc.UUDecoder,
- sun.misc.UUEncoder,
- com.sun.net.ssl.SSLContext,
- sun.net.NetworkServer,
- sun.net.URLCanonicalizer,
- sun.reflect.misc.ConstructorUtil,
- sun.reflect.FieldInfo,
- sun.reflect.SignatureIterator,
- sun.reflect.generics.reflectiveObjects.NotImplementedException,
- sunw.io.Serializable,
- sunw.util.EventListener,
- sunw.util.EventObject;
-}
-
-// Deprecated classes that aren't referenced/used go here.
-module deprecated {
- // add deprecated security classes once b78 is promoted
-}
-
-/**************************************************************************/
-
-module base {
- // core classes
- include java.lang.*,
- java.lang.annotation.*,
- java.lang.ref.*,
- java.lang.reflect.*,
- java.math.*,
- java.net.*,
- java.util.*,
- java.util.concurrent.**,
- java.util.jar.*,
- java.util.regex.*,
- java.util.spi.*,
- java.util.zip.*,
- java.text.**;
-
- exclude java.util.jar.Pack200*,
- java.util.XMLUtils,
- java.text.Bidi;
-
- include java.io.*, java.nio.*, java.nio.charset.**;
- exclude java.io.TempFileHelper, java.nio.BufferPoolMXBean;
-
- // security APIs
- // javax.crypto and javax.security.auth are included to avoid inconsistent
- // spliting of JCA and JAAS. This adds about 85k. Also note that some deprecated
- // classes must be included for now (see 6876158, 6876170)
- include java.security.*,
- java.security.cert.*,
- java.security.interfaces.*,
- java.security.spec.*,
- javax.security.auth.**,
- javax.crypto.**;
-
- // Sun and RSA security providers (except LDAP CertStore)
- // roots sun.security.provider.* sun.security.provider.certpath.* sun.security.rsa.*
- include com.sun.security.auth.PrincipalComparator,
- com.sun.security.auth.SubjectCodeSource,
- com.sun.security.auth.login.**,
- com.sun.security.auth.Policy*,
- sun.security.action.*,
- sun.security.ec.*,
- sun.security.jca.*,
- sun.security.pkcs.*,
- sun.security.provider.*,
- sun.security.provider.certpath.*,
- sun.security.rsa.*,
- sun.security.util.*,
- sun.security.validator.*,
- sun.security.x509.*,
- sun.security.timestamp.*;
-
- // this list is based on the classlist generated from the rootset
- // need investigation
- exclude sun.security.ec.ECD*,
- sun.security.ec.ECKeyPairGenerator,
- sun.security.ec.SunEC*,
- sun.security.pkcs.PKCS10*,
- sun.security.pkcs.EncodingException,
- sun.security.util.AuthResources_*,
- sun.security.util.Resources_*,
- sun.security.util.BigInt,
- sun.security.util.HostnameChecker,
- sun.security.x509.CertAndKeyGen,
- sun.security.util.PathList;
-
- // Kerberos not needed
- exclude javax.security.auth.kerberos.**,
- sun.security.jgss.**,
- sun.security.krb5.**,
- sun.security.ssl.Kerberos*,
- org.ietf.jgss.**;
-
- // property events and annotations
- include java.beans.ChangeListenerMap,
- java.beans.IndexedPropertyChangeEvent,
- java.beans.PropertyChange*,
- java.beans.PropertyVetoException,
- java.beans.VetoableChange*,
- java.beans.ConstructorProperties;
-
- // mandatory charsets
- include sun.nio.cs.*;
-
- exclude sun.nio.cs.AbstractCharsetProvider,
- sun.nio.cs.CharsetMapping,
- sun.nio.cs.IBM*,
- sun.nio.cs.ISO*,
- sun.nio.cs.KOI8_*,
- sun.nio.cs.MS125*,
- sun.nio.cs.UTF_32*,
- sun.nio.cs.SingleByteDecoder,
- sun.nio.cs.SingleByteEncoder;
-
- allow sun.nio.cs.ISO_8859_1,
- sun.nio.cs.ISO_8859_15,
- sun.nio.cs.MS1252;
-
- include sun.text.*,
- sun.text.normalizer.*;
-
- // resource files
- include sun/text/resources/*.icu;
-
- exclude sun.text.bidi.*,
- sun.text.CharArrayCodePointIterator,
- sun.text.CharSequenceCodePointIterator,
- sun.text.CharacterIteratorCodePointIterator,
- sun.text.CodePointIterator;
-
- include sun.util.*,
- sun.util.calendar.*,
- sun.util.logging.*,
- sun.util.resources.LocaleData,
- sun.util.resources.LocaleNamesBundle,
- sun.util.resources.OpenListResourceBundle;
-
- // US_en locale
- include sun.text.resources.BreakIteratorInfo,
- sun.text.resources.FormatData,
- sun.text.resources.FormatData_en_US,
- sun.util.resources.CalendarData,
- sun.util.resources.CalendarData_en,
- sun.util.resources.TimeZoneNames,
- sun.util.resources.TimeZoneNames_en,
- sun.util.resources.TimeZoneNamesBundle,
- sun.util.resources.LocaleNames,
- sun.util.resources.LocaleNames_en,
- sun.util.resources.LocalenamesBundles,
- sun.util.resources.CurrencyNames,
- sun.util.resources.CurrencyNames_en_US,
- sun.util.EmptyListResourceBundle;
-
- // resources file needed by
- // - sun.misc.ExtensionInfo
- // - sun.security.provider.PolicyFile
- // - com.sun.security.auth.PolicyFile
- include sun.misc.resources.Messages,
- sun.security.util.Resources,
- sun.security.util.AuthResources;
-
- // java.nio.channels and java.nio.file not in base
- include sun.nio.ch.Interruptible,
- sun.nio.ch.DirectBuffer,
- sun.nio.ByteBuffered;
-
- include sun.reflect.**;
-
- // protocol handlers
- include sun.net.www.protocol.file.*,
- sun.net.www.protocol.jar.*,
- sun.net.www.protocol.http.*;
-
- include sun.net.*,
- sun.net.spi.*,
- sun.net.idn.*,
- sun.net.util.*,
- sun.net.www.*,
- sun.net.www.http.*,
- sun.net.spi.nameservice.*;
-
- // resource file for sun.net.idn
- include sun/net/idn/*;
-
- // classes in net-compat
- exclude sun.net.Telnet*, sun.net.TransferProtocolClient;
-
- // classes in deploy
- exclude sun.net.www.protocol.http.AuthCacheBridge;
-
- // classes in security-jsse
- exclude java.net.SecureCacheResponse;
-
- // launcher
- include sun.launcher.LauncherHelper, sun.launcher.resources.launcher;
-
- include sun.misc.*;
- exclude sun.misc.FIFOQueueEnumerator,
- sun.misc.LIFOQueueEnumerator,
- sun.misc.GC,
- sun.misc.PerformanceLogger,
- sun.misc.Queue,
- sun.misc.QueueElement,
- sun.misc.Ref,
- sun.misc.VMSupport;
-
- // On Windows, OSEnvironment dependency
- include sun.io.Win32ErrorMode;
-}
-
-/**************************************************************************/
-
-module charsets {
- include sun.nio.cs.ext.**;
-
- include sun.nio.cs.AbstractCharsetProvider,
- sun.nio.cs.CharsetMapping,
- sun.nio.cs.IBM*,
- sun.nio.cs.ISO*,
- sun.nio.cs.KOI8_*,
- sun.nio.cs.MS125*,
- sun.nio.cs.SingleByte*,
- sun.nio.cs.UTF_32*;
-
- exclude sun.nio.cs.ISO_8859_1,
- sun.nio.cs.MS1252;
-
- // legacy sun.io converters
- include sun.io.*;
-}
-
-/**************************************************************************/
-
-// For now, retains the current JRE extensions where localedata.jar in jre/lib/ext
-module localedata {
- include sun.util.resources.*_ar,
- sun.util.resources.*_ar_*,
- sun.util.resources.*_hi,
- sun.util.resources.*_hi_*,
- sun.util.resources.*_iw,
- sun.util.resources.*_iw_*,
- sun.util.resources.*_ja,
- sun.util.resources.*_ja_*,
- sun.util.resources.*_ko,
- sun.util.resources.*_ko_*,
- sun.util.resources.*_th,
- sun.util.resources.*_th_*,
- sun.util.resources.*_vi,
- sun.util.resources.*_vi_*,
- sun.util.resources.*_zh,
- sun.util.resources.*_zh_*;
- include sun.text.resources.*_ar,
- sun.text.resources.*_ar_*,
- sun.text.resources.*_hi,
- sun.text.resources.*_hi_*,
- sun.text.resources.*_iw,
- sun.text.resources.*_iw_*,
- sun.text.resources.*_ja,
- sun.text.resources.*_ja_*,
- sun.text.resources.*_ko,
- sun.text.resources.*_ko_*,
- sun.text.resources.*_th,
- sun.text.resources.*_th_*,
- sun.text.resources.*_vi,
- sun.text.resources.*_vi_*,
- sun.text.resources.*_zh,
- sun.text.resources.*_zh_*;
-}
-
-module resources {
- include sun.text.resources.*, sun.util.resources.*, sun.misc.resources.*;
-}
-
-/**************************************************************************/
-
-module nio {
- include java.nio.channels.**, java.nio.file.**, com.sun.nio.file.**;
-
- // this is excluded from base
- include java.io.TempFileHelper;
-
- // provider implementations and their dependencies
- include sun.nio.ch.*, sun.nio.fs.**;
- exclude sun.nio.ch.Sctp*;
-}
-
-/**************************************************************************/
-
-module pack200 {
- include java.util.jar.Pack200*, com.sun.java.util.jar.pack.**;
-}
-
-/**************************************************************************/
-
-module logging {
- include java.util.logging.*, sun.util.logging.**;
- exclude java.util.logging.PlatformLoggingMXBean;
-
- // Formatter for HTTP messages
- include sun.net.www.protocol.http.logging.*;
-}
-
-/**************************************************************************/
-
-module management-snmp {
- include com.sun.jmx.snmp.**, sun.management.snmp.**;
-}
-
-module management-iiop {
- include com.sun.jmx.remote.protocol.iiop.*;
-
- // stubs and ties
- include javax.management.remote.rmi._*,
- org.omg.stub.javax.management.remote.rmi.**;
-}
-
-module management {
- include java.lang.management.*, com.sun.management.**, sun.management.**;
- include javax.management.**, com.sun.jmx.**;
-
- // other management interfaces
- include java.nio.BufferPoolMXBean;
- include java.util.logging.PlatformLoggingMXBean;
-
- // supporting classes in sun.misc
- include sun.misc.VMSupport;
-}
-
-/**************************************************************************/
-
-module tracing {
- // tracing
- include com.sun.tracing.**, sun.tracing.**;
-}
-
-module instrument {
- // java.lang.instrument
- include java.lang.instrument.*, sun.instrument.*;
-
- // HPROF support
- include com.sun.demo.jvmti.hprof.*;
-
- include tracing;
-}
-
-/**************************************************************************/
-
-module rmi-activation {
- include java.rmi.activation.**,
- sun.rmi.server.Act*,
- sun.rmi.server.InactiveGroupException;
-}
-
-module rmic {
- // rmic is included in tools
- include sun.rmi.rmic.**;
-}
-
-module rmi {
- include java.rmi.**, sun.rmi.**, com.sun.rmi.**;
-
- // SSL factories are in rmi
- include javax.rmi.ssl.**;
-
- // supporting classes in sun.misc and dependencies
- include sun.misc.GC;
-}
-
-/**************************************************************************/
-
-module prefs {
- include java.util.prefs.*;
-}
-
-/**************************************************************************/
-
-module security-jsse {
- include javax.net.**,
- javax.security.cert.*,
- java.net.SecureCacheResponse,
- com.sun.net.ssl.**,
- com.sun.security.cert.internal.x509.*,
- sun.security.ssl.*,
- sun.net.www.protocol.https.**,
- sun.security.internal.interfaces.Tls*,
- sun.security.internal.spec.Tls*,
- sun.security.util.HostnameChecker;
-}
-
-module security-sunpkcs11 {
- include sun.security.pkcs11.**;
-}
-
-module security-sunjce {
- include com.sun.crypto.provider.*;
-}
-
-module security-sunec {
- include sun.security.ec.*;
-}
-
-module security-sunmscapi {
- include sun.security.mscapi.*;
-}
-
-module security-kerberos {
- include javax.security.auth.kerberos.*,
- com.sun.security.jgss.**,
- com.sun.security.auth.module.Krb5LoginModule,
- com.sun.security.sasl.gsskerb.**, // GSSAPI SASL mechanism
- sun.security.jgss.**,
- sun.security.ssl.krb5.**,
- sun.security.krb5.**,
- org.ietf.jgss.**,
- sun.net.www.protocol.http.spnego.*;
-}
-
-module security-sasl {
- include javax.security.sasl.**,
- com.sun.security.sasl.**;
-}
-
-module security-xmldsig {
- include javax.xml.crypto.**,
- org.jcp.xml.dsig.**,
- com.sun.org.apache.xml.internal.security.**;
-}
-
-module security-smartcardio {
- include javax.smartcardio.**, sun.security.smartcardio.**;
-}
-
-module security-auth {
- include com.sun.security.auth.**, sun.security.util.AuthResources_*;
-}
-
-module security-misc {
- include security-auth;
-
- include sun.security.pkcs.*,
- sun.security.pkcs12.*;
-
- // this class is a candidate to be removed.
- include sun.security.util.BigInt;
-}
-
-module security-resources {
- include sun.security.util.Resources_*;
-}
-
-module security-compat {
- include java.security.acl.*, sun.security.acl.*;
-}
-
-/**************************************************************************/
-
-module jndi-ldap {
- include javax.naming.ldap.**,
- com.sun.jndi.ldap.**,
- com.sun.jndi.url.ldap.*,
- com.sun.jndi.url.ldaps.*,
- sun.security.provider.certpath.ldap.**;
-}
-
-module jndi-rmiregistry {
- include com.sun.jndi.rmi.**, com.sun.jndi.url.rmi.**;
-}
-
-module jndi-dns {
- include net-dns;
- include com.sun.jndi.dns.**, com.sun.jndi.url.dns.**;
-}
-
-module jndi-cosnaming {
- include com.sun.jndi.cosnaming.**,
- com.sun.jndi.toolkit.corba.**,
- com.sun.jndi.url.corbaname.**,
- com.sun.jndi.url.iiop.**,
- com.sun.jndi.url.iiopname.**;
-}
-
-// framework/API and classes used by providers
-module jndi {
- include javax.naming.**,
- com.sun.naming.**,
- com.sun.jndi.toolkit.ctx.**,
- com.sun.jndi.toolkit.dir.**,
- com.sun.jndi.toolkit.url.**;
-}
-
-/**************************************************************************/
-
-module jdbc-base {
- include java.sql.**, javax.sql.*;
- exclude javax.sql.XA*;
-}
-
-module jdbc-enterprise {
- include javax.sql.**, com.sun.rowset.**;
-}
-
-module jdbc-odbc {
- include sun.jdbc.odbc.**;
-}
-
-/**************************************************************************/
-
-module scripting {
- include javax.script.**;
-
- // supporting classes for scripting engines
- include com.sun.script.util.**;
-}
-
-module scripting-rhino {
- include com.sun.script.javascript.**, sun.org.mozilla.javascript.**;
-}
-
-/**************************************************************************/
-
-module httpserver {
- include com.sun.net.httpserver.**, sun.net.httpserver.**;
-}
-
-/**************************************************************************/
-
-module sctp {
- // API and dependencies
- include com.sun.nio.sctp.**, sun.nio.ch.Sctp*;
-}
-
-/**************************************************************************/
-
-module langtools {
- include javax.tools.**, javax.lang.model.**, javax.annotation.processing.**;
-
- // include mirror API for now
- include com.sun.mirror.**;
-
- // include the JSR292 APIs for now
- include java.dyn.**, sun.dyn.**;
-}
-
-/**************************************************************************/
-
-module beans {
- include java.beans.**, com.sun.beans.**, sun.beans.**;
-}
-
-/**************************************************************************/
-
-module jaxp-parsers-api {
- include javax.xml.*, javax.xml.parsers.**,
- org.w3c.dom.**, org.w3c.sax.**, org.xml.sax.**;
-}
-
-module jaxp-api {
- include javax.xml.**;
- exclude javax.xml.crypto.**, // XML-DSIG
- javax.xml.bind.**, // JAX-WS
- javax.xml.soap.**,
- javax.xml.ws.**;
-}
-
-module jaxp-xerces-impl {
- include com.sun.org.apache.xerces.internal.**;
-
- // include in xerces-impl due to circular dependencies
- include com.sun.org.apache.xml.internal.serialize.**,
- com.sun.xml.internal.stream.**;
- exclude com.sun.xml.internal.stream.buffer.**; // JAX-WS
-}
-
-// required by Xerces and JAX-WS
-module jaxp-xerces-resolver {
- include com.sun.org.apache.xml.internal.resolver.**;
-}
-
-module jaxp-xalan {
- include com.sun.org.apache.xalan.internal.**,
- com.sun.org.apache.xpath.internal.**,
- com.sun.org.apache.xml.internal.dtm.**,
- com.sun.org.apache.xml.internal.res.**,
- com.sun.org.apache.xml.internal.serializer.**,
- com.sun.org.apache.xml.internal.utils.**,
- com.sun.org.apache.bcel.internal.**,
- com.sun.org.apache.regexp.internal.**,
- com.sun.java_cup.internal.**;
-}
-
-/**************************************************************************/
-
-module jaxws-tools {
- include com.sun.codemodel.**,
- com.sun.xml.internal.dtdparser.**,
- com.sun.xml.internal.rngom.**,
- com.sun.xml.internal.xsom.**,
- com.sun.istack.internal.tools.**,
- com.sun.istack.internal.ws.**,
- com.sun.tools.internal.xjc.**,
- com.sun.tools.internal.ws.**,
- com.sun.tools.internal.jxc.**,
- org.relaxng.datatype.**;
-}
-
-module jaxws {
- include javax.jws.**,
- javax.xml.bind.**,
- javax.xml.soap.**,
- javax.xml.ws.**,
- org.relaxng.**,
- com.sun.istack.internal.*,
- com.sun.istack.internal.localization.*,
- com.sun.xml.internal.**;
-
- // include JAF in this module
- include javax.activation.**, com.sun.activation.**;
-
- include META-INF/mailcap.default,
- META-INF/mimetypes.default;
-}
-
-/**************************************************************************/
-module enterprise-base {
- include javax.transaction.**, // JTA
- javax.annotation.*; // Common annotations (JSR-250)
-}
-
-/**************************************************************************/
-module corba {
- include javax.activity.**,
- javax.rmi.*,
- javax.rmi.CORBA.*,
- javax.transaction.**,
- com.sun.corba.**,
- com.sun.org.omg.**,
- org.omg.**,
- sun.corba.**;
-
- // JMX remote API
- exclude org.omg.stub.javax.management.**;
-}
-
-/**************************************************************************/
-
-module applet {
- include java.applet.**,
- sun.applet.**;
-}
-
-module awt {
- include java.awt.**,
- sun.awt.**,
- com.sun.awt.**;
-}
-
-module font {
- include sun.font.**;
-}
-
-module imageio {
- include javax.imageio.**,
- com.sun.imageio.**;
-}
-
-module java2d {
- include sun.dc.**,
- sun.java2d.**,
- com.sun.image.**;
-}
-
-module media {
- include com.sun.media.**;
-}
-
-module print {
- include javax.print.**,
- sun.print.**;
-}
-
-module sound {
- include javax.sound.**;
-}
-
-module swing {
- include javax.swing.**,
- sun.swing.**,
- // sajdi also contains classes in subpackages of com.sun.java.swing;
- // so use '*' instead of '**'
- com.sun.java.swing.*,
- com.sun.java.swing.plaf.**,
- com.sun.swing.**;
-}
-
-module client {
- include applet,
- awt,
- font,
- imageio,
- java2d,
- media,
- print,
- sound,
- swing;
-
- include javax.accessibility.*,
- sun.audio.**,
- com.sun.accessibility.**;
-
- // Bidi class in client module for now
- include java.text.Bidi, sun.text.bidi.*;
-
- // PerformanceLogger and dependencies
- include sun.misc.Ref, sun.misc.PerformanceLogger;
-
- // misc. dependencies that we need to examine
- include sun.text.CodePointIterator,
- sun.text.Char*,
- sun.misc.Queue*,
- sun.misc.FIFOQueueEnumerator,
- sun.misc.LIFOQueueEnumerator;
-
- // content handlers
- include sun.net.www.content.audio.**,
- sun.net.www.content.image.**;
-}
-
-/**************************************************************************/
-
-module deploy {
-
- // For now, all plugin and JNLP
- include com.sun.java.browser.**,
- netscape.**,
- sun.plugin.**,
- sun.plugin2.**,,
- com.sun.deploy.**,
- com.sun.javaws.**,
- javax.jnlp.*,
- com.sun.jnlp.*;
-
- // Hook for http authentication
- include sun.net.www.protocol.http.AuthCacheBridge;
-}
-
-/**************************************************************************/
-
-module net-dns {
- include sun.net.dns.**; // to access DNS config.
- include sun.net.spi.nameservice.dns.**; // for DNS-only name service.
-}
-
-module net-compat {
- // NTLM authentication support
- include sun.net.www.protocol.http.ntlm.*;
-
- // ftp and mail clients
- include sun.net.ftp.**, sun.net.smtp.**;
-
- // Legacy protocol handlers
- include sun.net.www.protocol.**;
-
- // Legacy content handlers
- include sun.net.www.content.**;
-
- include sun.net.Telnet*,
- sun.net.TransferProtocolClient;
-}
-
-/**************************************************************************/
-
-// jar-tool and security-tools are JRE tools
-module jar-tool {
- include sun.tools.jar.**;
-}
-
-module policytool {
- include sun.security.tools.policytool.*;
-}
-
-module security-tools {
- include sun.security.tools.**;
-
- // Used by security tools
- include sun.security.util.PathList, sun.security.x509.CertAndKeyGen;
-
- exclude sun.security.tools.JarBASE64Encoder,
- sun.security.tools.JarSigner,
- sun.security.tools.JarSignerParameters,
- sun.security.tools.JarSignerResources*,
- sun.security.tools.SignatureFile,
- sun.security.tools.TimestampedSigner;
-}
-
-module jconsole {
- include sun.tools.jconsole.**,
- com.sun.tools.jconsole.*;
-}
-
-module serialver {
- include sun.tools.serialver.**;
-}
-
-module gui-tools {
- include jconsole,
- serialver;
-
- include com.sun.tools.example.debug.bdi.**,
- com.sun.tools.example.debug.gui.**,
- com.sun.tools.internal.xjc.**;
-}
-
-module attach {
- include com.sun.tools.attach.**,
- sun.tools.attach.**;
-}
-
-module debugging {
- include com.sun.jdi.**, com.sun.tools.jdi.**;
-}
-
-module jdb {
- include com.sun.tools.example.debug.**;
-}
-
-module sajdi {
- include sun.jvm.hotspot.**,
- com.sun.java.swing.ui.**,
- com.sun.java.swing.action.**;
-
- include toolbarButtonGraphics/**;
- include sa.properties;
-}
-
-module tools {
- include attach,
- debugging,
- jaxws-tools,
- jdb,
- rmic,
- sajdi;
-
- // include gui-tools in tools module unless the tool binaries
- // are modified to load the new gui-tools.jar
- include gui-tools;
-
- include com.sun.tools.**, sun.tools.**, sun.security.tools.**,
- com.sun.jarsigner.**,
- com.sun.javac.**,
- com.sun.javadoc.**, com.sun.source.**,
- sun.jvmstat.**;
-}
-
-/**************************************************************************/
-
-module servicetag {
- include com.sun.servicetag.**;
-}
-
-/**************************************************************************/
-
-// these classes will be removed from JRE - see 6909002
-module inputmethods-ext {
- include com.sun.inputmethods.internal.**;
-}
-
-/**************************************************************************/
-
-// Workaround for US export and local policy files
-// They are currently in signed jars under the jre/lib/security directory
-module US_export_policy {
- include default_US_export.policy;
-}
-
-module local_policy {
- include default_local.policy,
- exempt_local.policy;
-}
-
-/**************************************************************************/
-
-module other {
- include **;
-}
--- a/jdk/make/modules/modules.group Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-/*
- * Example:
- * module jdbc {
- * include jdbc-base, jdbc-enterprise, jdbc-odbc;
- * }
- */
--- a/jdk/make/modules/optional.depconfig Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,149 +0,0 @@
-#
-# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
-# 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.
-#
-
-# public final java.nio.channels.SocketChannel getChannel()
-@Optional
- sun.security.ssl.BaseSSLSocketImpl -> java.nio.channels.SocketChannel
-
-# public XMLDecoder(java.io.InputStream)
-# public XMLDecoder(java.io.InputStream, java.lang.Object)
-# public XMLDecoder(java.io.InputStream, java.lang.Object, java.beans.ExceptionListener)
-# public XMLDecoder(java.io.InputStream, java.lang.Object, java.beans.ExceptionListener, java.lang.ClassLoader)
-# public XMLDecoder(org.xml.sax.InputSource)
-@Optional
- java.beans.XMLDecoder -> com.sun.beans.decoder.DocumentHandler
- java.beans.XMLDecoder -> org.xml.sax.InputSource
-
-# public static org.xml.sax.helpers.DefaultHandler createHandler(java.lang.Object, java.beans.ExceptionListener, java.lang.ClassLoader)
-@Optional
- java.beans.XMLDecoder -> com.sun.beans.decoder.DocumentHandler
- java.beans.XMLDecoder -> org.xml.sax.helpers.DefaultHandler
-
-# public final java.nio.channels.FileChannel getChannel()
-@Optional
- java.net.SocketInputStream -> java.nio.channels.FileChannel
-
-# public final java.nio.channels.FileChannel getChannel()
-@Optional
- java.net.SocketOutputStream -> java.nio.channels.FileChannel
-
-# public Scanner(java.io.File)
-# public Scanner(java.io.File, java.lang.String)
-@Optional
- java.util.Scanner -> java.nio.channels.ReadableByteChannel
- java.util.Scanner -> java.nio.channels.Channels
-
-# public Scanner(java.nio.file.FileRef)
-# public Scanner(java.nio.file.FileRef, java.lang.String)
-@Optional
- java.util.Scanner -> java.nio.file.FileRef
- java.util.Scanner -> java.nio.file.OpenOption
-
-# public Scanner(java.nio.channels.ReadableByteChannel)
-# public Scanner(java.nio.channels.ReadableByteChannel, java.lang.String)
-@Optional
- java.util.Scanner -> java.nio.channels.ReadableByteChannel
- java.util.Scanner -> java.nio.channels.Channels
-
-# private static void loadSnmpAgent(java.lang.String, java.util.Properties)
-@Optional
- sun.management.Agent -> sun.management.snmp.AdaptorBootstrap
-
-# public void connect()
-@Optional
- sun.net.www.protocol.http.HttpURLConnection -> java.net.SecureCacheResponse
-
-# private static sun.security.util.PermissionFactory<?> permissionFactory()
-@Optional
- sun.security.util.SecurityConstants$AWT -> sun.awt.AWTPermissionFactory
-
-# sun.util.logging.LoggingSupport
-@Optional
- sun.util.logging.LoggingSupport -> java.util.logging.LoggingProxyImpl
-
-# public java.nio.channels.DatagramChannel getChannel()
-@Optional
- java.net.DatagramSocket -> java.nio.channels.DatagramChannel
-
-# public java.nio.channels.SocketChannel getChannel()
-@Optional
- java.net.Socket -> java.nio.channels.SocketChannel
-
-# public java.nio.channels.ServerSocketChannel getChannel()
-@Optional
- java.net.ServerSocket -> java.nio.channels.ServerSocketChannel
-
-# public final java.nio.channels.FileChannel getChannel()
-@Optional
- java.io.RandomAccessFile -> java.nio.channels.FileChannel
- java.io.RandomAccessFile -> sun.nio.ch.FileChannelImpl
-
-# public static sun.nio.cs.StreamDecoder forDecoder(java.nio.channels.ReadableByteChannel, java.nio.charset.CharsetDecoder, int)
-@Optional
- sun.nio.cs.StreamDecoder -> java.nio.channels.ReadableByteChannel
-
-# private static java.nio.channels.FileChannel getChannel(java.io.FileInputStream)
-# StreamDecoder(java.io.InputStream, java.lang.Object, java.nio.charset.CharsetDecoder)
-@Optional
- sun.nio.cs.StreamDecoder -> java.nio.channels.FileChannel
-
-# StreamDecoder(java.nio.channels.ReadableByteChannel, java.nio.charset.CharsetDecoder, int)
-@Optional
- sun.nio.cs.StreamDecoder -> java.nio.channels.ReadableByteChannel
-
-# public static java.io.File createTemporaryFile(java.lang.String, java.lang.String, java.nio.file.attribute.FileAttribute<?>[])
-@Optional
- java.io.File -> java.io.TempFileHelper
- java.io.File -> java.nio.file.attribute.FileAttribute
-
-# public java.nio.file.Path toPath()
-@Optional
- java.io.File -> java.nio.file.Paths
- java.io.File -> java.nio.file.Path
-
-# public static sun.nio.cs.StreamEncoder forEncoder(java.nio.channels.WritableByteChannel, java.nio.charset.CharsetEncoder, int)
-# private StreamEncoder(java.nio.channels.WritableByteChannel, java.nio.charset.CharsetEncoder, int)
-@Optional
- sun.nio.cs.StreamEncoder -> java.nio.channels.WritableByteChannel
-
-# public java.nio.channels.FileChannel getChannel()
-@Optional
- java.io.FileOutputStream -> java.nio.channels.FileChannel
- java.io.FileOutputStream -> sun.nio.ch.FileChannelImpl
-
-# public java.nio.channels.FileChannel getChannel()
-@Optional
- java.io.FileInputStream -> java.nio.channels.FileChannel
- java.io.FileInputStream -> sun.nio.ch.FileChannelImpl
-
-# public void loadFromXML(java.io.InputStream)
-# public void storeToXML(java.io.OutputStream, java.lang.String, java.lang.String)
-@Optional
- java.util.Properties -> java.util.XMLUtils
-
-# public static java.nio.channels.Channel inheritedChannel()
-@Optional
- java.lang.System -> java.nio.channels.Channel
- java.lang.System -> java.nio.channels.spi.SelectorProvider
--- a/jdk/make/modules/tools/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-#
-# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
-# 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.
-#
-
-#
-# Makefile for building the classanalyzer tool
-#
-
-BUILDDIR = ../..
-include $(BUILDDIR)/common/Defs.gmk
-
-PKGDIR = com/sun/classanalyzer
-BUILDTOOL_SOURCE_ROOT = src
-BUILDTOOL_MAIN = $(PKGDIR)/ClassAnalyzer.java
-BUILTTOOL_MAINCLASS = $(subst /,.,$(BUILDTOOL_MAIN:%.java=%))
-
-BUILDTOOL_MAIN_SOURCE_FILE = $(BUILDTOOL_SOURCE_ROOT)/$(BUILDTOOL_MAIN)
-BUILDTOOL_MANIFEST_FILE = $(BUILDTOOLCLASSDIR)/classanalyzer_manifest.mf
-
-FILES_java := $(shell $(CD) $(BUILDTOOL_SOURCE_ROOT) \
- && $(FIND) $(PKGDIR) -type f -print)
-
-FILES_class = $(FILES_java:%.java=$(BUILDTOOLCLASSDIR)/%.class)
-
-CLASSANALYZER_JAR_FILE = $(BUILDTOOLJARDIR)/classanalyzer.jar
-
-#
-# ClassAnalyzer depends on the com.sun.tools.classfile API.
-# The tool is compiled with the latest version of the classfile
-# library in the langtools repo to make sure that synchronized
-# change is made if the classfile API is changed.
-#
-# If langtools repo exists, build its own copy of the
-# classfile library and use it for compile time and runtime.
-# If not exist (the top level repo is not a forest), use
-# the built jdk tools that imports tools.jar from the latest
-# promoted build.
-#
-# If the classfile API is changed but not yet in a promoted build,
-# the build might fail and the tool would need the langtools repo
-# to build in that case.
-#
-ifndef LANGTOOLS_TOPDIR
- LANGTOOLS_TOPDIR=$(JDK_TOPDIR)/../langtools
-endif
-
-LANGTOOLS_TOPDIR_EXISTS := $(shell \
- if [ -d $(LANGTOOLS_TOPDIR) ] ; then \
- echo true; \
- else \
- echo false; \
- fi)
-
-CLASSFILE_SRC = $(LANGTOOLS_TOPDIR)/src/share/classes
-CLASSFILE_PKGDIR = com/sun/tools/classfile
-
-ifeq ($(LANGTOOLS_TOPDIR_EXISTS), true)
- FILES_classfile_java := $(shell \
- $(CD) $(CLASSFILE_SRC) && \
- $(FIND) $(CLASSFILE_PKGDIR) -name '*.java' -print)
- FILES_classfile_class = $(FILES_classfile_java:%.java=$(BUILDTOOLCLASSDIR)/%.class)
- CLASSFILE_JAR_FILE = $(BUILDTOOLJARDIR)/classfile.jar
- BUILDTOOL_JAVAC = $(BOOT_JAVAC_CMD) $(JAVAC_JVM_FLAGS) \
- $(BOOT_JAVACFLAGS) -classpath $(CLASSFILE_JAR_FILE)
- BUILDTOOL_JAVA = $(BOOT_JAVA_CMD) $(JAVA_TOOLS_FLAGS) \
- -Xbootclasspath/p:$(CLASSFILE_JAR_FILE)
-else
- # if langtools doesn't exist, use tools from the built jdk
- BUILDTOOL_JAVAC = $(BINDIR)/javac $(JAVAC_JVM_FLAGS) \
- $(BOOT_JAVACFLAGS)
- BUILDTOOL_JAVA = $(BINDIR)/java $(JAVA_TOOLS_FLAGS)
-endif
-
-# Location of the output modules.list, <module>.classlist
-# and other output files generated by the class analyzer tool.
-#
-MODULE_CLASSLIST = $(MODULES_TEMPDIR)/classlist
-
-all build: classanalyzer gen-classlist
-
-classanalyzer: $(CLASSFILE_JAR_FILE) $(CLASSANALYZER_JAR_FILE)
-
-gen-classlist:
- @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..."
- @$(RM) -rf $(MODULE_CLASSLIST)
- @$(MKDIR) -p $(MODULE_CLASSLIST)
- $(BUILDTOOL_JAVA) \
- -Dclassanalyzer.debug \
- -jar $(CLASSANALYZER_JAR_FILE) \
- -jdkhome $(OUTPUTDIR) \
- -config ../modules.config \
- -config ../modules.group \
- -depconfig ../jdk7.depconfig \
- -depconfig ../optional.depconfig \
- -showdynamic \
- -output $(MODULE_CLASSLIST)
- @$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..."
-
-$(BUILDTOOL_MANIFEST_FILE): $(BUILDTOOL_MAIN_SOURCE_FILE)
- @$(prep-target)
- $(ECHO) "Main-Class: $(BUILTTOOL_MAINCLASS)" > $@
-
-$(BUILDTOOLCLASSDIR)/$(CLASSFILE_PKGDIR)/%.class : $(CLASSFILE_SRC)/$(CLASSFILE_PKGDIR)/%.java
- @$(prep-target)
- @$(BUILDTOOL_JAVAC) \
- -sourcepath $(CLASSFILE_SRC) \
- -d $(BUILDTOOLCLASSDIR) $<
-
-$(BUILDTOOLCLASSDIR)/%.class : $(BUILDTOOL_SOURCE_ROOT)/%.java
- @$(prep-target)
- $(BUILDTOOL_JAVAC) \
- -sourcepath $(BUILDTOOL_SOURCE_ROOT) \
- -d $(BUILDTOOLCLASSDIR) $<
-
-$(CLASSANALYZER_JAR_FILE): $(BUILDTOOL_MANIFEST_FILE) $(FILES_class)
- @$(prep-target)
- $(BOOT_JAR_CMD) cfm $@ $(BUILDTOOL_MANIFEST_FILE) \
- -C $(BUILDTOOLCLASSDIR) $(PKGDIR) $(BOOT_JAR_JFLAGS) || $(RM) $@
- @$(java-vm-cleanup)
-
-$(BUILDTOOLJARDIR)/classfile.jar: $(FILES_classfile_class)
- @$(prep-target)
- $(CD) $(BUILDTOOLCLASSDIR) && \
- $(BOOT_JAR_CMD) cf $@ \
- $(CLASSFILE_PKGDIR) $(BOOT_JAR_JFLAGS) || $(RM) $@
- @$(java-vm-cleanup)
-
-clean clobber::
- @$(RM) -rf $(BUILDTOOLCLASSDIR)/$(PKGDIR)
- @$(RM) -rf $(BUILDTOOLCLASSDIR)/$(CLASSFILE_PKGDIR)
- @$(RM) $(BUILDTOOL_MANIFEST_FILE)
- @$(RM) $(CLASSANALYZER_JAR_FILE)
- @$(RM) $(CLASSFILE_JAR_FILE)
--- a/jdk/make/modules/tools/build.xml Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- 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.
--->
-
-<project name="classanalyzer" default="build" basedir=".">
-</project>
--- a/jdk/make/modules/tools/nbproject/project.properties Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-#
-# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
-# 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.
-#
-
-application.title=classanalyzer
-application.vendor=mchung
-build.classes.dir=${build.dir}/classes
-build.classes.excludes=**/*.java,**/*.form
-
-# This directory is removed when the project is cleaned:
-build.dir=build
-build.generated.dir=${build.dir}/generated
-build.generated.sources.dir=${build.dir}/generated-sources
-
-# Only compile against the classpath explicitly listed here:
-build.sysclasspath=ignore
-build.test.classes.dir=${build.dir}/test/classes
-build.test.results.dir=${build.dir}/test/results
-
-cp.extra=${tools.jar}
-
-debug.classpath=\
- ${run.classpath}
-debug.test.classpath=\
- ${run.test.classpath}
-
-# This directory is removed when the project is cleaned:
-dist.dir=dist
-dist.jar=${dist.dir}/classanalyzer.jar
-dist.javadoc.dir=${dist.dir}/javadoc
-
-excludes=
-
-file.reference.tools.jar=${jdk.home}/lib/tools.jar
-file.reference.tools-src=src
-includes=**
-jar.compress=false
-javac.classpath=\
- ${file.reference.tools.jar}
-javac.deprecation=false
-javac.source=1.5
-javac.target=1.5
-javac.test.classpath=
-javadoc.author=false
-javadoc.noindex=false
-javadoc.nonavbar=false
-javadoc.notree=false
-javadoc.private=false
-javadoc.splitindex=false
-javadoc.use=false
-javadoc.version=false
-main.class=com.sun.classanalyzer.ClassAnalyzer
-manifest.file=manifest.mf
-meta.inf.dir=${src.dir}/META-INF
-platform.active=JDK_1.6
-run.classpath=\
- ${javac.classpath}:\
- ${build.classes.dir}
-# Space-separated list of JVM arguments used when running the project
-# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
-# or test-sys-prop.name=value to set system properties for unit tests):
-run.jvmargs=-Xmx256m
-run.test.classpath=
-source.encoding=UTF-8
-src.dir=${file.reference.tools-src}
--- a/jdk/make/modules/tools/nbproject/project.xml Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- 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.
--->
-
-<project xmlns="http://www.netbeans.org/ns/project/1">
- <type>org.netbeans.modules.java.j2seproject</type>
- <configuration>
- <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
- <name>classanalyzer</name>
- <explicit-platform explicit-source-supported="true"/>
- <source-roots>
- <root id="src.dir"/>
- </source-roots>
- <test-roots/>
- </data>
- </configuration>
-</project>
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/AnnotatedDependency.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,627 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-package com.sun.classanalyzer;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.Map;
-
-import com.sun.classanalyzer.Module.Reference;
-import java.util.LinkedList;
-import java.util.TreeMap;
-
-/**
- *
- * @author Mandy Chung
- */
-public abstract class AnnotatedDependency implements Comparable<AnnotatedDependency> {
-
- final Klass from;
- final List<String> classes;
- protected boolean optional;
- String description;
- Klass.Method method;
- private List<Filter> filters = null;
-
- public AnnotatedDependency(Klass klass) {
- this(klass, false);
- }
-
- public AnnotatedDependency(Klass klass, boolean optional) {
- this.from = klass;
- this.classes = new ArrayList<String>();
- this.optional = optional;
- }
-
- abstract String getTag();
-
- abstract boolean isDynamic();
-
- void setMethod(Klass.Method m) {
- this.method = m;
- }
-
- void addElement(String element, List<String> value) {
- if (element.equals("value")) {
- addValue(value);
- } else if (element.equals("description")) {
- description = value.get(0);
- } else if (element.equals("optional")) {
- optional = value.get(0).equals("1") || Boolean.parseBoolean(value.get(0));
- }
- }
-
- void addValue(List<String> value) {
- for (String s : value) {
- if ((s = s.trim()).length() > 0) {
- classes.add(s);
- }
- }
- }
-
- List<String> getValue() {
- return classes;
- }
-
- boolean isOptional() {
- return optional;
- }
-
- boolean isEmpty() {
- return classes.isEmpty();
- }
-
- boolean matches(String classname) {
- synchronized (this) {
- // initialize filters
- if (filters == null) {
- filters = new ArrayList<Filter>();
- for (String pattern : classes) {
- filters.add(new Filter(pattern));
- }
-
- }
- }
-
- for (Filter f : filters) {
- if (f.matches(classname)) {
- return true;
- }
- }
- return false;
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- for (String v : getValue()) {
- if (sb.length() == 0) {
- sb.append(getTag());
- sb.append("\n");
- } else {
- sb.append("\n");
- }
- sb.append(" ");
- sb.append(from.getClassName()).append(" -> ");
- sb.append(v);
- }
- return sb.toString();
- }
-
- @Override
- public int compareTo(AnnotatedDependency o) {
- if (from == o.from) {
- if (this.getClass().getName().equals(o.getClass().getName())) {
- String s1 = classes.isEmpty() ? "" : classes.get(0);
- String s2 = o.classes.isEmpty() ? "" : o.classes.get(0);
- return s1.compareTo(s2);
- } else {
- return this.getClass().getName().compareTo(o.getClass().getName());
- }
-
- } else {
- return from.compareTo(o.from);
- }
- }
-
- @Override
- public int hashCode() {
- int hashcode = 7 + 73 * from.hashCode();
- for (String s : classes) {
- hashcode ^= s.hashCode();
- }
- return hashcode;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof AnnotatedDependency)) {
- return false;
- }
- AnnotatedDependency other = (AnnotatedDependency) obj;
- boolean ret = this.from.equals(other.from) && this.classes.size() == other.classes.size();
- if (ret == true) {
- for (int i = 0; i < this.classes.size(); i++) {
- ret = ret && this.classes.get(i).equals(other.classes.get(i));
- }
- }
- return ret;
- }
-
- static class ClassForName extends AnnotatedDependency {
-
- public ClassForName(Klass klass, boolean optional) {
- super(klass, optional);
- }
-
- @Override
- String getTag() {
- if (this.optional) {
- return TAG + "(optional)";
- } else {
- return TAG;
- }
- }
-
- @Override
- boolean isDynamic() {
- return true;
- }
- static final String TYPE = "sun.annotation.ClassForName";
- static final String TAG = "@ClassForName";
- }
-
- static class NativeFindClass extends AnnotatedDependency {
-
- public NativeFindClass(Klass klass, boolean optional) {
- super(klass, optional);
- }
-
- @Override
- String getTag() {
- if (this.optional) {
- return TAG + "(optional)";
- } else {
- return TAG;
- }
- }
-
- @Override
- boolean isDynamic() {
- return true;
- }
- static final String TYPE = "sun.annotation.NativeFindClass";
- static final String TAG = "@NativeFindClass";
- }
-
- static class Provider extends AnnotatedDependency {
-
- private List<String> services = new ArrayList<String>();
-
- Provider(Klass klass) {
- super(klass, true);
- }
-
- @Override
- boolean isDynamic() {
- return true;
- }
-
- public List<String> services() {
- return services;
- }
-
- @Override
- void addElement(String element, List<String> value) {
- if (element.equals("service")) {
- List<String> configFiles = new ArrayList<String>();
- for (String s : value) {
- if ((s = s.trim()).length() > 0) {
- configFiles.add(metaInfPath + s);
- }
- }
- addValue(configFiles);
- }
- }
-
- @Override
- void addValue(List<String> value) {
- for (String s : value) {
- if ((s = s.trim()).length() > 0) {
- if (s.startsWith("META-INF")) {
- services.add(s);
- readServiceConfiguration(s, classes);
- } else {
- throw new RuntimeException("invalid value" + s);
- }
- }
- }
- }
-
- boolean isEmpty() {
- return services.isEmpty();
- }
- static final String metaInfPath =
- "META-INF" + File.separator + "services" + File.separator;
-
- static void readServiceConfiguration(String config, List<String> names) {
- BufferedReader br = null;
- try {
- InputStream is = ClassPath.open(config);
- if (is != null) {
- // Properties doesn't perserve the order of the input file
- br = new BufferedReader(new InputStreamReader(is, "utf-8"));
- int lc = 1;
- while ((lc = parseLine(br, lc, names)) >= 0);
- }
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- } finally {
- if (br != null) {
- try {
- br.close();
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
- }
- }
- }
-
- // Parse a single line from the given configuration file, adding the name
- // on the line to the names list.
- //
- private static int parseLine(BufferedReader r, int lc, List<String> names) throws IOException {
- String ln = r.readLine();
- if (ln == null) {
- return -1;
- }
- int ci = ln.indexOf('#');
- if (ci >= 0) {
- ln = ln.substring(0, ci);
- }
- ln = ln.trim();
- int n = ln.length();
- if (n != 0) {
- if ((ln.indexOf(' ') >= 0) || (ln.indexOf('\t') >= 0)) {
- throw new RuntimeException("Illegal configuration-file syntax");
- }
- int cp = ln.codePointAt(0);
- if (!Character.isJavaIdentifierStart(cp)) {
- throw new RuntimeException("Illegal provider-class name: " + ln);
- }
- for (int i = Character.charCount(cp); i < n; i += Character.charCount(cp)) {
- cp = ln.codePointAt(i);
- if (!Character.isJavaIdentifierPart(cp) && (cp != '.')) {
- throw new RuntimeException("Illegal provider-class name: " + ln);
- }
- }
- if (!names.contains(ln)) {
- names.add(ln);
- }
- }
- return lc + 1;
- }
-
- @Override
- String getTag() {
- return TAG;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof AnnotatedDependency)) {
- return false;
- }
- Provider other = (Provider) obj;
- boolean ret = this.from.equals(other.from) &&
- this.services.size() == other.services.size();
- if (ret == true) {
- for (int i = 0; i < this.services.size(); i++) {
- ret = ret && this.services.get(i).equals(other.services.get(i));
- }
- }
- return ret;
- }
-
- @Override
- public int hashCode() {
- int hashcode = 7 + 73 * from.hashCode();
- for (String s : services) {
- hashcode ^= s.hashCode();
- }
- return hashcode;
- }
-
- @Override
- public List<String> getValue() {
- List<String> result = new ArrayList<String>();
- result.addAll(services);
- return result;
- }
- static final String TYPE = "sun.annotation.Provider";
- static final String TAG = "@Provider";
- }
-
- static class OptionalDependency extends AnnotatedDependency {
-
- static boolean isOptional(Klass from, Klass to) {
- synchronized (OptionalDependency.class) {
- if (optionalDepsMap == null) {
- // Build a map of classes to its optional dependencies
- initDependencies();
- }
- }
- for (Reference ref : optionalDepsMap.keySet()) {
- if (ref.referrer() == from && ref.referree() == to) {
- return true;
- }
- }
- return false;
- }
-
- OptionalDependency(Klass klass) {
- super(klass, true);
- }
-
- @Override
- boolean isDynamic() {
- return false;
- }
-
- @Override
- String getTag() {
- return TAG;
- }
- static final String TYPE = "sun.annotation.Optional";
- static final String TAG = "@Optional";
- }
-
- static class CompilerInline extends AnnotatedDependency {
-
- public CompilerInline(Klass klass) {
- super(klass);
- }
-
- @Override
- String getTag() {
- return TAG;
- }
-
- @Override
- boolean isDynamic() {
- return false;
- }
- static final String TYPE = "sun.annotation.Inline";
- static final String TAG = "@Inline";
- }
-
- static class Filter {
-
- final String pattern;
- final String regex;
-
- Filter(String pattern) {
- this.pattern = pattern;
-
- boolean isRegex = false;
- for (int i = 0; i < pattern.length(); i++) {
- char p = pattern.charAt(i);
- if (p == '*' || p == '[' || p == ']') {
- isRegex = true;
- break;
- }
- }
-
- if (isRegex) {
- this.regex = convertToRegex(pattern);
- } else {
- this.regex = null;
- }
- }
-
- private String convertToRegex(String pattern) {
- StringBuilder sb = new StringBuilder();
- int i = 0;
- int index = 0;
- int plen = pattern.length();
- while (i < plen) {
- char p = pattern.charAt(i);
- if (p == '*') {
- sb.append("(").append(pattern.substring(index, i)).append(")");
- if (i + 1 < plen && pattern.charAt(i + 1) == '*') {
- sb.append(".*");
- index = i + 2;
- } else {
- sb.append("[^\\.]*");
- index = i + 1;
- }
- } else if (p == '[') {
- int j = i + 1;
- while (j < plen) {
- if (pattern.charAt(j) == ']') {
- break;
- }
- j++;
- }
- if (j >= plen || pattern.charAt(j) != ']') {
- throw new RuntimeException("Malformed pattern " + pattern);
- }
- sb.append("(").append(pattern.substring(index, i)).append(")");
- sb.append(pattern.substring(i, j + 1));
- index = j + 1;
- i = j;
- }
- i++;
- }
- if (index < plen) {
- sb.append("(").append(pattern.substring(index, plen)).append(")");
- }
- return sb.toString();
- }
-
- boolean matches(String name) {
- if (regex == null) {
- // the pattern is not a regex
- return name.equals(pattern);
- } else {
- return name.matches(regex);
- }
- }
- }
-
- static boolean isValidType(String type) {
- if (type.endsWith("(optional)")) {
- int len = type.length() - "(optional)".length();
- type = type.substring(0, len);
- }
- return type.equals(ClassForName.TYPE) || type.equals(ClassForName.TAG) ||
- type.equals(NativeFindClass.TYPE) || type.equals(NativeFindClass.TAG) ||
- type.equals(Provider.TYPE) || type.equals(Provider.TAG) ||
- type.equals(CompilerInline.TYPE) || type.equals(CompilerInline.TAG) ||
- type.equals(OptionalDependency.TYPE) || type.equals(OptionalDependency.TAG);
- }
-
- static AnnotatedDependency newAnnotatedDependency(String tag, String value, Klass klass) {
- AnnotatedDependency dep = newAnnotatedDependency(tag, klass);
- if (dep != null) {
- dep.addValue(Collections.singletonList(value));
- }
- return dep;
- }
- static List<AnnotatedDependency> annotatedDependencies = new LinkedList<AnnotatedDependency>();
- static List<AnnotatedDependency> optionalDependencies = new LinkedList<AnnotatedDependency>();
-
- static AnnotatedDependency newAnnotatedDependency(String type, Klass klass) {
- boolean optional = false;
- if (type.endsWith("(optional)")) {
- optional = true;
- int len = type.length() - "(optional)".length();
- type = type.substring(0, len);
- }
-
- if (type.equals(OptionalDependency.TYPE) || type.equals(OptionalDependency.TAG)) {
- return newOptionalDependency(klass);
- }
-
- AnnotatedDependency dep;
- if (type.equals(ClassForName.TYPE) || type.equals(ClassForName.TAG)) {
- dep = new ClassForName(klass, optional);
- } else if (type.equals(NativeFindClass.TYPE) || type.equals(NativeFindClass.TAG)) {
- dep = new NativeFindClass(klass, optional);
- } else if (type.equals(Provider.TYPE) || type.equals(Provider.TAG)) {
- dep = new Provider(klass);
- } else if (type.equals(CompilerInline.TYPE) || type.equals(CompilerInline.TAG)) {
- dep = new CompilerInline(klass);
- } else {
- return null;
- }
- klass.addAnnotatedDep(dep);
- annotatedDependencies.add(dep);
- return dep;
- }
-
- static OptionalDependency newOptionalDependency(Klass klass) {
- OptionalDependency dep = new OptionalDependency(klass);
- optionalDependencies.add(dep);
- return dep;
- }
- static Map<Reference, Set<AnnotatedDependency>> annotatedDepsMap = null;
- static Map<Reference, Set<AnnotatedDependency>> optionalDepsMap = null;
-
- static Map<Reference, Set<AnnotatedDependency>> getReferences(Module m) {
- // ensure it's initialized
- initDependencies();
-
- Map<Reference, Set<AnnotatedDependency>> result = new TreeMap<Reference, Set<AnnotatedDependency>>();
- for (Reference ref : annotatedDepsMap.keySet()) {
- if (m.contains(ref.referrer()) && m.isModuleDependence(ref.referree())) {
- result.put(ref, annotatedDepsMap.get(ref));
- }
- }
- return result;
- }
-
- static Set<Module.Dependency> getDependencies(Module m) {
- // ensure it's initialized
- initDependencies();
-
- Set<Module.Dependency> deps = new TreeSet<Module.Dependency>();
- for (Reference ref : annotatedDepsMap.keySet()) {
- if (m.contains(ref.referrer())) {
- Module other = m.getModuleDependence(ref.referree());
- if (other != null) {
- for (AnnotatedDependency ad : annotatedDepsMap.get(ref)) {
- Module.Dependency d = new Module.Dependency(other, ad.isOptional(), ad.isDynamic());
- deps.add(d);
- }
- }
- }
- }
- return deps;
- }
-
- synchronized static void initDependencies() {
- if (annotatedDepsMap != null) {
- return;
- }
-
- // Build a map of references to its dependencies
- annotatedDepsMap = new TreeMap<Reference, Set<AnnotatedDependency>>();
- optionalDepsMap = new TreeMap<Reference, Set<AnnotatedDependency>>();
-
- for (Klass k : Klass.getAllClasses()) {
- for (AnnotatedDependency ad : annotatedDependencies) {
- if (ad.matches(k.getClassName())) {
- Reference ref = new Reference(ad.from, k);
- Set<AnnotatedDependency> set = annotatedDepsMap.get(ref);
- if (set == null) {
- set = new TreeSet<AnnotatedDependency>();
- annotatedDepsMap.put(ref, set);
- }
- set.add(ad);
- }
- }
-
- for (AnnotatedDependency ad : optionalDependencies) {
- if (ad.matches(k.getClassName())) {
- Reference ref = new Reference(ad.from, k);
- Set<AnnotatedDependency> set = optionalDepsMap.get(ref);
- if (set == null) {
- set = new TreeSet<AnnotatedDependency>();
- optionalDepsMap.put(ref, set);
- }
- set.add(ad);
- }
- }
- }
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/AnnotationParser.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,293 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.classanalyzer;
-
-import com.sun.tools.classfile.*;
-import com.sun.tools.classfile.Annotation;
-import com.sun.tools.classfile.ExtendedAnnotation;
-import com.sun.tools.classfile.Annotation.Annotation_element_value;
-import com.sun.tools.classfile.Annotation.Array_element_value;
-import com.sun.tools.classfile.Annotation.Class_element_value;
-import com.sun.tools.classfile.Annotation.Enum_element_value;
-import com.sun.tools.classfile.Annotation.Primitive_element_value;
-import com.sun.tools.classfile.ConstantPoolException;
-import com.sun.tools.classfile.Descriptor;
-import com.sun.tools.classfile.Descriptor.InvalidDescriptor;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.sun.classanalyzer.AnnotatedDependency.*;
-import java.io.File;
-import java.io.PrintWriter;
-import java.util.Map;
-import java.util.Set;
-
-/**
- *
- * @author Mandy Chung
- */
-public class AnnotationParser {
-
- static boolean parseAnnotation = false;
- static void setParseAnnotation(boolean newValue) {
- parseAnnotation = newValue;
- }
-
- private final ClassFileParser cfparser;
- public AnnotationParser(ClassFileParser cfparser) {
- this.cfparser = cfparser;
- }
-
- private AnnotatedDependency addAnnotation(Annotation annot, Klass.Method method) {
- String type = getType(annot.type_index);
- AnnotatedDependency dep = AnnotatedDependency.newAnnotatedDependency(type, cfparser.this_klass);
- if (dep != null) {
- for (int i = 0; i < annot.num_element_value_pairs; i++) {
- Element element = getElement(annot.element_value_pairs[i]);
- dep.addElement(element.name, element.value);
- }
- dep.setMethod(method);
- }
- return dep;
- }
-
- private AnnotatedDependency addAnnotation(ExtendedAnnotation annot, Klass.Method method) {
- return addAnnotation(annot.annotation, method);
- }
-
- class Element {
-
- String name;
- List<String> value;
-
- Element(String name) {
- this.name = name;
- this.value = new ArrayList<String>();
- }
-
- void add(String v) {
- value.add(v);
- }
- }
-
- Element getElement(Annotation.element_value_pair pair) {
- Element element = new Element(getName(pair.element_name_index));
- evp.parse(pair.value, element);
- return element;
- }
-
- private String getType(int index) {
- try {
- Descriptor d = new Descriptor(index);
- return d.getFieldType(cfparser.classfile.constant_pool);
- } catch (ConstantPoolException ignore) {
- } catch (InvalidDescriptor ignore) {
- }
- return "Unknown";
- }
-
- private String getName(int index) {
- return cfparser.constantPoolParser.stringValue(index);
- }
- element_value_Parser evp = new element_value_Parser();
-
- class element_value_Parser implements Annotation.element_value.Visitor<Void, Element> {
-
- public Void parse(Annotation.element_value value, Element element) {
- value.accept(this, element);
- return null;
- }
-
- public Void visitPrimitive(Primitive_element_value ev, Element element) {
- String value = getName(ev.const_value_index);
- element.add(value);
- return null;
- }
-
- public Void visitEnum(Enum_element_value ev, Element element) {
- String value = getName(ev.type_name_index) + "." + getName(ev.const_name_index);
- element.add(value);
- return null;
- }
-
- public Void visitClass(Class_element_value ev, Element element) {
- String value = getName(ev.class_info_index) + ".class";
- element.add(value);
- return null;
- }
-
- public Void visitAnnotation(Annotation_element_value ev, Element element) {
- // AnnotationParser.this.addAnnotation(ev.annotation_value);
- throw new UnsupportedOperationException("Not supported: " + ev);
- }
-
- public Void visitArray(Array_element_value ev, Element element) {
- for (int i = 0; i < ev.num_values; i++) {
- parse(ev.values[i], element);
- }
- return null;
- }
- }
-
- void parseAttributes(Attributes attributes, Klass.Method method) {
- if (!parseAnnotation) {
- return;
- }
-
- visitRuntimeAnnotations((RuntimeVisibleAnnotations_attribute) attributes.get(Attribute.RuntimeVisibleAnnotations), method);
- visitRuntimeAnnotations((RuntimeInvisibleAnnotations_attribute) attributes.get(Attribute.RuntimeInvisibleAnnotations), method);
- visitRuntimeTypeAnnotations((RuntimeVisibleTypeAnnotations_attribute) attributes.get(Attribute.RuntimeVisibleTypeAnnotations), method);
- visitRuntimeTypeAnnotations((RuntimeInvisibleTypeAnnotations_attribute) attributes.get(Attribute.RuntimeInvisibleTypeAnnotations), method);
- visitRuntimeParameterAnnotations((RuntimeVisibleParameterAnnotations_attribute) attributes.get(Attribute.RuntimeVisibleParameterAnnotations), method);
- visitRuntimeParameterAnnotations((RuntimeInvisibleParameterAnnotations_attribute) attributes.get(Attribute.RuntimeInvisibleParameterAnnotations), method);
- }
-
- public void visitRuntimeAnnotations(RuntimeAnnotations_attribute attr, Klass.Method method) {
- if (attr == null) {
- return;
- }
-
- for (int i = 0; i < attr.annotations.length; i++) {
- addAnnotation(attr.annotations[i], method);
- }
- }
-
- public void visitRuntimeTypeAnnotations(RuntimeTypeAnnotations_attribute attr, Klass.Method method) {
- if (attr == null) {
- return;
- }
-
- for (int i = 0; i < attr.annotations.length; i++) {
- addAnnotation(attr.annotations[i], method);
- }
- }
-
- public void visitRuntimeParameterAnnotations(RuntimeParameterAnnotations_attribute attr, Klass.Method method) {
- if (attr == null) {
- return;
- }
-
- for (int param = 0; param < attr.parameter_annotations.length; param++) {
- for (int i = 0; i < attr.parameter_annotations[param].length; i++) {
- addAnnotation(attr.parameter_annotations[param][i], method);
- }
- }
- }
-
- void parseAttributes(Attributes attributes) {
- parseAttributes(attributes, null);
- }
-
- public static void main(String[] args) throws Exception {
- String jdkhome = null;
- String output = ".";
-
- // process arguments
- int i = 0;
- while (i < args.length) {
- String arg = args[i++];
- if (arg.equals("-jdkhome")) {
- if (i < args.length) {
- jdkhome = args[i++];
- } else {
- usage();
- }
- } else if (arg.equals("-output")) {
- output = args[i++];
- } else {
- usage();
- }
- }
- if (jdkhome == null) {
- usage();
- }
-
- // parse annotation and code attribute to find all references
- // to Class.forName etc
- CodeAttributeParser.setParseCodeAttribute(true);
- AnnotationParser.setParseAnnotation(true);
-
- ClassPath.setJDKHome(jdkhome);
- ClassPath.parseAllClassFiles();
-
- PrintWriter writer = new PrintWriter(new File(output, "jdk7.depconfig"));
-
- try {
- for (Klass k : Klass.getAllClasses()) {
- for (AnnotatedDependency dep : k.getAnnotatedDeps()) {
- if (dep.isEmpty()) {
- continue;
- }
- writer.format("# %s \n", dep.method == null ? dep.from : dep.method);
- writer.format("%s\n\n", dep);
- }
- }
- } finally {
- writer.close();
- }
-
- writer = new PrintWriter(new File(output, "optional.depconfig"));
- try {
- AnnotatedDependency prev = null;
- for (AnnotatedDependency dep : AnnotatedDependency.optionalDependencies) {
- if (prev != null && !dep.equals(prev)) {
- writer.format("%s\n\n", prev);
- }
- writer.format("# %s \n", dep.method == null ? dep.from : dep.method);
- prev = dep;
- }
- if (prev != null) {
- writer.format("%s\n\n", prev);
- }
- } finally {
- writer.close();
- }
-
- writer = new PrintWriter(new File(output, "runtime.references"));
- try {
- for (Map.Entry<String, Set<Klass.Method>> entry : CodeAttributeParser.runtimeReferences.entrySet()) {
- writer.format("References to %s\n", entry.getKey());
- Klass prev = null;
- for (Klass.Method m : entry.getValue()) {
- if (prev == null || prev != m.getKlass()) {
- writer.format(" %-50s # %s\n", m.getKlass(), m);
- } else if (prev == m.getKlass()) {
- writer.format(" %-50s # %s\n", "", m);
- }
- prev = m.getKlass();
- }
- }
- } finally {
- writer.close();
- }
- }
-
- private static void usage() {
- System.out.println("Usage: AnnotationParser <options>");
- System.out.println("Options: ");
- System.out.println("\t-jdkhome <JDK home> where all jars will be parsed");
- System.out.println("\t-depconfig <output file for annotated dependencies>");
- System.out.println("\t-optional <output file for optional dependencies>");
- System.exit(-1);
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/BootAnalyzer.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,819 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-package com.sun.classanalyzer;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.io.File;
-import java.util.ArrayDeque;
-import java.util.Deque;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-import com.sun.tools.classfile.*;
-import com.sun.tools.classfile.ConstantPool.*;
-import static com.sun.tools.classfile.ConstantPool.*;
-import com.sun.tools.classfile.Instruction.TypeKind;
-import com.sun.tools.classfile.Type.*;
-
-/**
- * Generate the module config for the boot module with
- * a given set of roots (classes or methods) and exclude list.
- *
- * This tool does method-level dependency analysis starting
- * from the root set and follows references transitively as follows:
- * <ul>
- * <li>For a given class, it will parse the ClassFile to
- * find its superclass and superinterfaces and also
- * its static initializer <clinit>.</li>
- * <li>For each method, it will parse its Code attribute
- * to look for a Methodref, Fieldref, and InterfaceMethodref.
- * </li>
- * <li>For each Fieldref, it will include the type of
- * the field in the dependency.</li>
- * <li>For each MethodRef, it will follow all references in
- * that method.</li>
- * <li>For each InterfaceMethodref, it will follow all references in
- * that method defined its implementation classes in
- * the resulting dependency list.</li>
- * </ul>
- *
- * Limitation:
- * <ul>
- * <li>For each Methodref, it only parses the method of
- * the specified type. It doesn't analyze the class hierarchy
- * and follow references of its subclasses since it ends up
- * pulls in many unnecessary dependencies. For now,
- * the list of subclasses and methods need to be listed in
- * the root set.</li>
- * </ul>
- *
- * @author Mandy Chung
- */
-public class BootAnalyzer {
-
- public static void main(String[] args) throws Exception {
- String jdkhome = null;
- String config = null;
- String output = ".";
- boolean printClassList = false;
-
- // process arguments
- int i = 0;
- while (i < args.length) {
- String arg = args[i++];
- if (arg.equals("-jdkhome")) {
- if (i < args.length) {
- jdkhome = args[i++];
- } else {
- usage();
- }
- } else if (arg.equals("-config")) {
- config = args[i++];
- } else if (arg.equals("-output")) {
- output = args[i++];
- } else if (arg.equals("-classlist")) {
- printClassList = true;
- } else {
- usage();
- }
- }
-
-
-
- if (jdkhome == null || config == null) {
- usage();
- }
-
- File jre = new File(jdkhome, "jre");
- if (jre.exists()) {
- ClassPath.setJDKHome(jdkhome);
- } else {
- File classes = new File(jdkhome, "classes");
- if (classes.exists()) {
- ClassPath.setClassPath(classes.getCanonicalPath());
- } else {
- throw new RuntimeException("Invalid jdkhome: " + jdkhome);
- }
- }
-
- parseConfigFile(config);
- followRoots();
-
- // create output directory if it doesn't exist
- File dir = new File(output);
- if (!dir.isDirectory()) {
- if (!dir.exists()) {
- boolean created = dir.mkdir();
- if (!created) {
- throw new RuntimeException("Unable to create `" + dir + "'");
- }
- }
- }
-
- String bootmodule = "boot";
- String bootconfig = resolve(dir, bootmodule, "config");
- printBootConfig(bootconfig, bootmodule);
-
- List<ModuleConfig> list = ModuleConfig.readConfigurationFile(bootconfig);
- Module module = Module.addModule(list.get(0));
- for (Klass k : Klass.getAllClasses()) {
- module.addKlass(k);
- }
- module.fixupDependencies();
-
- if (printClassList) {
- module.printClassListTo(resolve(dir, bootmodule, "classlist"));
- module.printSummaryTo(resolve(dir, bootmodule, "summary"));
- }
- }
-
- // print boot.config file as an input to the ClassAnalyzer
- private static void printBootConfig(String output, String bootmodule) throws IOException {
-
- File f = new File(output);
- PrintWriter writer = new PrintWriter(f);
- try {
- int count = 0;
- writer.format("module %s {%n", bootmodule);
- for (Klass k : Klass.getAllClasses()) {
- if (count++ == 0) {
- writer.format("%4s%7s %s", "", "include", k);
- } else {
- writer.format(",%n");
- writer.format("%4s%7s %s", "", "", k);
- }
- }
- writer.format(";%n}%n");
- } finally {
- writer.close();
- }
- }
-
- private static String resolve(File dir, String mname, String suffix) {
- File f = new File(dir, mname + "." + suffix);
- return f.toString();
-
- }
- static List<MethodDescriptor> methods = new LinkedList<MethodDescriptor>();
- static Deque<MethodDescriptor> pending = new ArrayDeque<MethodDescriptor>();
- static Deque<MethodDescriptor> interfaceMethodRefs = new ArrayDeque<MethodDescriptor>();
- static Filter filter = new Filter();
-
- private static void followRoots() throws IOException {
- MethodDescriptor md = null;
-
- while ((md = pending.poll()) != null) {
- if (!methods.contains(md)) {
- methods.add(md);
- if (md.classname.isEmpty()) {
- trace("Warning: class missing %s%n", md);
- continue;
- }
-
- if (filter.isExcluded(md.classname)) {
- trace("excluded %s%n", md);
- } else {
- KlassInfo kinfo = getKlassInfo(md.classname);
- if (kinfo.classname.contains("$")) {
- int pos = kinfo.classname.lastIndexOf('$');
- String outer = kinfo.classname.substring(0, pos);
- if (!cache.containsKey(outer)) {
- trace(" include outer class %s%n", outer);
- getKlassInfo(outer).ensureParse();
- }
- }
-
- kinfo.ensureParse();
- if (md.methodname.length() > 0) {
- if (filter.isExcluded(md.name)) {
- trace("excluded %s%n", md);
- } else {
- if (md.interfaceMethodRef) {
- trace("interface methodref %s%n", md);
- interfaceMethodRefs.add(md);
- } else {
- List<String> descriptors = kinfo.parse(md);
- if (descriptors.isEmpty()) {
- if (kinfo.getSuperclass() != null) {
- String sn = kinfo.getSuperclass().classname;
- MethodDescriptor superMD = new MethodDescriptor(sn + "." + md.methodname, md.descriptor, false);
- if (!methods.contains(superMD) && !pending.contains(superMD)) {
- trace(" delegated %s to %s%n", md, superMD);
- pending.add(superMD);
- }
- } else if (kinfo.isClass()) {
- trace(" %s (not found)%n", md);
- } else {
- trace(" %s (interface)%n", md);
- }
- } else {
- if (md.descriptor.equals("*")) {
- trace(" parsed %s : ", md.name);
- for (String s : descriptors) {
- trace(" %s", s);
- }
- trace("%n");
- }
- }
- }
- }
- }
- }
- }
- if (pending.isEmpty()) {
- for (Klass k : Klass.getAllClasses()) {
- if (k.getFileSize() == 0) {
- getKlassInfo(k.getClassName()).ensureParse();
- }
- }
- while ((md = interfaceMethodRefs.poll()) != null) {
- addSubClassMethods(md);
- }
- }
- }
- }
-
- static void addSubClassMethods(MethodDescriptor md) throws IOException {
- for (KlassInfo kinfo : getSubClasses(md.classname)) {
- String methodname = kinfo.classname + "." + md.methodname;
- MethodDescriptor other = new MethodDescriptor(methodname, md.descriptor, false);
- if (!methods.contains(other) && !pending.contains(other)) {
- trace("Warning: subclass from %s to %s%n", md.classname, other);
- pending.add(other);
- }
- }
- }
- private final static String privilegedActionInterf = "java.security.PrivilegedAction";
- private final static String privilegedExceptionActionInterf = "java.security.PrivilegedExceptionAction";
-
- static boolean isPrivilegedAction(String classname) {
- if (classname.isEmpty()) {
- return false;
- }
- KlassInfo kinfo = getKlassInfo(classname);
- for (KlassInfo ki : kinfo.getInterfaces()) {
- String interf = ki.classname;
- if (interf.equals(privilegedActionInterf) ||
- interf.equals(privilegedExceptionActionInterf)) {
- return true;
- }
- }
- return false;
- }
- static Map<String, KlassInfo> cache = new HashMap<String, KlassInfo>();
-
- static KlassInfo getKlassInfo(String classname) {
- classname = classname.replace('/', '.');
-
- KlassInfo kinfo = cache.get(classname);
- if (kinfo == null) {
- kinfo = new KlassInfo(classname);
- cache.put(classname, kinfo);
- }
- return kinfo;
- }
-
- static class KlassInfo {
-
- final String classname;
- private ClassFileParser parser;
- private KlassInfo superclass;
- private List<KlassInfo> interfaces = new LinkedList<KlassInfo>();
-
- KlassInfo(String classname) {
- this.classname = classname;
- }
-
- boolean isClass() {
- ensureParse();
- return parser.classfile.isClass();
- }
-
- KlassInfo getSuperclass() {
- ensureParse();
- return superclass;
- }
-
- List<KlassInfo> getInterfaces() {
- ensureParse();
- return java.util.Collections.unmodifiableList(interfaces);
- }
-
- void ensureParse() {
- try {
- getClassFileParser();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- synchronized ClassFileParser getClassFileParser() throws IOException {
- if (parser == null) {
- parser = ClassPath.parserForClass(classname);
- if (parser != null) {
- parseClassFile();
- List<String> descriptors = parse(new MethodDescriptor(classname + ".<clinit>", "()V", false));
- }
- }
- return parser;
- }
-
- List<String> parse(MethodDescriptor md) {
- ensureParse();
- try {
- List<String> descriptors = new LinkedList<String>();
- for (Method m : parser.classfile.methods) {
- String name = m.getName(parser.classfile.constant_pool);
- String desc = parser.constantPoolParser.getDescriptor(m.descriptor.index);
- if (name.equals(md.methodname)) {
- if (md.descriptor.equals("*") || md.descriptor.equals(desc)) {
- parseMethod(parser, m);
- descriptors.add(desc);
- }
- }
- }
- return descriptors;
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- }
- }
-
- private void parseClassFile() throws IOException {
- parser.parseClassInfo();
-
- ClassFile classfile = parser.classfile;
- try {
- if (classfile.super_class > 0) {
- superclass = getKlassInfo(classfile.getSuperclassName());
- }
- if (classfile.interfaces != null) {
- for (int i = 0; i < classfile.interfaces.length; i++) {
- interfaces.add(getKlassInfo(classfile.getInterfaceName(i)));
- }
- }
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- }
- }
- }
-
- static List<KlassInfo> getSubClasses(String classname) throws IOException {
- List<KlassInfo> result = new LinkedList<KlassInfo>();
- List<KlassInfo> list = new LinkedList<KlassInfo>();
- list.addAll(cache.values());
- for (KlassInfo kinfo : list) {
- if (kinfo.getSuperclass() != null && classname.equals(kinfo.getSuperclass().classname)) {
- result.add(kinfo);
- }
- for (KlassInfo interf : kinfo.getInterfaces()) {
- if (classname.equals(interf.classname)) {
- result.add(kinfo);
- }
- }
- }
- return result;
- }
-
- private static void parseConfigFile(String config) throws IOException {
- FileInputStream in = new FileInputStream(config);
- try {
- BufferedReader reader = new BufferedReader(new InputStreamReader(in));
- String line;
- int lineNumber = 0;
- while ((line = reader.readLine()) != null) {
- lineNumber++;
- if ((line = line.trim()).length() > 0) {
- if (line.startsWith("#")) {
- continue;
- }
-
- String[] s = line.split("\\s+");
- if ("exclude".equals(s[0])) {
- filter.exclude(s[1]);
- } else {
- String name = s[0].replace('/', '.');
- if (name.length() > 0) {
- String classname = name.replace('/', '.');
- if (s.length == 2) {
- // method name
- int pos = classname.lastIndexOf('.');
- classname = classname.substring(0, pos);
- }
-
- KlassInfo kinfo = getKlassInfo(classname);
- if (kinfo.getClassFileParser() != null) {
- // class exists
- MethodDescriptor md = (s.length == 1) ? new MethodDescriptor(name) : new MethodDescriptor(name, s[1], false);
- if (!pending.contains(md)) {
- pending.add(md);
- }
- } else {
- // class not found
- trace("Class %s not found%n", classname);
- }
- }
- }
- }
- }
-
- } finally {
- in.close();
- }
- }
-
- private static void parseMethod(ClassFileParser cfparser, Method m) {
- Klass.Method kmethod = cfparser.parseMethod(m);
- Code_attribute c_attr = (Code_attribute) m.attributes.get(Attribute.Code);
- if (c_attr != null) {
- LineNumberTable_attribute lineNumTable =
- (LineNumberTable_attribute) c_attr.attributes.get(Attribute.LineNumberTable);
- InstructorVisitor visitor = new InstructorVisitor(cfparser, lineNumTable);
- trace("parseMethod %s %s %n", cfparser.this_klass, kmethod);
- for (Instruction instr : c_attr.getInstructions()) {
- try {
- instr.accept(visitor, kmethod);
- } catch (ArrayIndexOutOfBoundsException e) {
- throw new RuntimeException("error at or after byte " + instr.getPC());
- }
-
- }
-
- if (c_attr.exception_table_langth > 0) {
- for (int i = 0; i <
- c_attr.exception_table.length; i++) {
- Code_attribute.Exception_data handler = c_attr.exception_table[i];
- int catch_type = handler.catch_type;
- if (catch_type > 0) {
- visitor.addConstantPoolRef(catch_type, kmethod, handler.start_pc);
- }
-
- }
- }
- }
- }
-
- static class MethodDescriptor {
-
- final String name;
- final String classname;
- final String methodname;
- final String descriptor;
- final boolean interfaceMethodRef;
-
- MethodDescriptor(String classname) {
- this.classname = classname.replace('/', '.');
- this.name = this.classname;
- this.methodname = "";
- this.descriptor = "";
- this.interfaceMethodRef = false;
- if (this.classname.length() == 1) {
- throw new RuntimeException("invalid " + this);
- }
- }
-
- MethodDescriptor(String name, String descriptor, boolean interfaceMethodRef) {
- name = name.replace('/', '.');
- this.name = name;
- int pos = name.lastIndexOf('.');
- this.classname = name.substring(0, pos);
- this.methodname = name.substring(pos + 1, name.length());
- this.descriptor = descriptor;
- this.interfaceMethodRef = interfaceMethodRef;
- if (this.classname.length() == 1) {
- throw new RuntimeException("invalid " + this);
- }
- }
-
- @Override
- public boolean equals(Object obj) {
- MethodDescriptor m = (MethodDescriptor) obj;
-
- return this.name.equals(m.name) &&
- this.descriptor.equals(m.descriptor);
- }
-
- @Override
- public int hashCode() {
- int hash = 7;
- hash = 97 * hash + (this.name != null ? this.name.hashCode() : 0);
- hash = 97 * hash + (this.descriptor != null ? this.descriptor.hashCode() : 0);
- return hash;
- }
-
- public String toString() {
- if (descriptor.isEmpty()) {
- return name;
- } else {
- return name + " : " + descriptor;
- }
- }
- }
-
- static class Filter {
-
- private Set<String> excludes = new TreeSet<String>();
-
- Filter exclude(String pattern) {
- excludes.add(pattern);
- return this;
- }
-
- boolean isExcluded(String klass) {
- for (String pattern : excludes) {
- if (matches(klass, pattern)) {
- return true;
- }
- }
- return false;
- }
-
- private boolean matches(String klass, String pattern) {
- int pos = klass.lastIndexOf('.');
- String packageName = pos > 0 ? klass.substring(0, pos) : "<unnamed>";
- if (pattern.endsWith("**")) {
- String p = pattern.substring(0, pattern.length() - 2);
- return klass.startsWith(p);
- } else if (pattern.endsWith("*")) {
- pos = pattern.lastIndexOf('.');
- String pkg = pos > 0 ? pattern.substring(0, pos) : "<unnamed>";
- if (packageName.equals(pkg)) {
- // package name has to be exact match
- String p = pattern.substring(0, pattern.length() - 1);
- return klass.startsWith(p);
- } else {
- return false;
- }
- } else {
- // exact match or inner class
- return klass.equals(pattern) || klass.startsWith(pattern + "$");
- }
- }
- }
-
- static class InstructorVisitor implements Instruction.KindVisitor<Void, Klass.Method> {
-
- private final ClassFileParser parser;
- private final LineNumberTable_attribute lineNumTable;
-
- InstructorVisitor(ClassFileParser parser, LineNumberTable_attribute lineNumTable) {
- this.parser = parser;
- this.lineNumTable = lineNumTable;
- }
-
- int getLineNumber(int pc) {
- if (lineNumTable != null) {
- int start_pc = 0;
- int lineno = 0;
- for (int i = 0; i < lineNumTable.line_number_table_length; i++) {
- int cur_start_pc = lineNumTable.line_number_table[i].start_pc;
- if (pc == 0 && cur_start_pc == 0) {
- return lineNumTable.line_number_table[i].line_number;
- } else if (pc >= start_pc && pc < cur_start_pc) {
- return lineno;
- }
- start_pc = cur_start_pc;
- lineno = lineNumTable.line_number_table[i].line_number;
- }
- }
- return 0;
- }
-
- void addConstantPoolRef(int index, Klass.Method m, int pc) {
- try {
- CPInfo cpInfo = parser.classfile.constant_pool.get(index);
- String name = cpInfo.accept(typeFinder, null);
- if (name != null) {
- trace(" %s %s at line %d%n", parser.constantPoolParser.tagName(index), name, getLineNumber(pc));
- }
- } catch (InvalidIndex ex) {
- throw new RuntimeException(ex);
- }
- }
-
- public Void visitNoOperands(Instruction instr, Klass.Method m) {
- return null;
- }
-
- public Void visitArrayType(Instruction instr, TypeKind kind, Klass.Method m) {
- return null;
- }
-
- public Void visitBranch(Instruction instr, int offset, Klass.Method m) {
- return null;
- }
-
- public Void visitConstantPoolRef(Instruction instr, int index, Klass.Method m) {
- addConstantPoolRef(index, m, instr.getPC());
- return null;
- }
-
- public Void visitConstantPoolRefAndValue(Instruction instr, int index, int value, Klass.Method m) {
- addConstantPoolRef(index, m, instr.getPC());
- return null;
- }
-
- public Void visitLocal(Instruction instr, int index, Klass.Method m) {
- return null;
- }
-
- public Void visitLocalAndValue(Instruction instr, int index, int value, Klass.Method m) {
- return null;
- }
-
- public Void visitLookupSwitch(Instruction instr, int default_, int npairs, int[] matches, int[] offsets, Klass.Method m) {
- return null;
- }
-
- public Void visitTableSwitch(Instruction instr, int default_, int low, int high, int[] offsets, Klass.Method m) {
- return null;
- }
-
- public Void visitValue(Instruction instr, int value, Klass.Method m) {
- return null;
- }
-
- public Void visitUnknown(Instruction instr, Klass.Method m) {
- return null;
- }
- private ConstantPool.Visitor<String, Void> typeFinder = new ConstantPool.Visitor<String, Void>() {
-
- String getClassName(CPRefInfo info, Void p) {
- try {
- return parser.checkClassName(info.getClassName()).replace('/', '.');
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- }
- }
-
- boolean addReferencedClass(String name) {
- if (Klass.findKlass(name) == null) {
- MethodDescriptor md = new MethodDescriptor(name);
- if (!methods.contains(md) && !pending.contains(md)) {
- pending.add(md);
- }
- return true;
- }
- return false;
- }
- private String privilegedActionClass = "";
-
- void cachePrivilegedAction(String classname) {
- trace(" found PrivilegedAction %s%n", classname);
- privilegedActionClass = classname;
- }
-
- void doPrivilegedCall(String method) {
- if (privilegedActionClass.length() > 0) {
- MethodDescriptor md = new MethodDescriptor(privilegedActionClass + ".run", "*", false);
- if (!methods.contains(md) && !pending.contains(md)) {
- trace(" doPrivileged %s%n", md);
- pending.add(md);
- }
- }
- }
-
- private String addMethodDescriptor(CPRefInfo info, Void p) {
- try {
- String classname = getClassName(info, null);
- String method = classname + "." + info.getNameAndTypeInfo().getName();
- String descriptor = info.getNameAndTypeInfo().getType();
-
- if (method.endsWith(".<init>") && isPrivilegedAction(classname)) {
- cachePrivilegedAction(classname);
- }
- if (method.equals("java.security.AccessController.doPrivileged")) {
- doPrivilegedCall(method);
- return method;
- }
-
- boolean interfaceMethodRef = info instanceof CONSTANT_InterfaceMethodref_info;
- MethodDescriptor md = new MethodDescriptor(method, descriptor, interfaceMethodRef);
- if (!methods.contains(md) && !pending.contains(md)) {
- pending.add(md);
- }
- return method;
- } catch (ConstantPoolException e) {
- throw new RuntimeException(e);
- }
- }
-
- public String visitClass(CONSTANT_Class_info info, Void p) {
- try {
- String classname = parser.checkClassName(info.getName()).replace('/', '.');
- if (classname.length() > 0) {
- addReferencedClass(classname);
- }
- return classname;
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- }
- }
-
- public String visitDouble(CONSTANT_Double_info info, Void p) {
- // skip
- return null;
- }
-
- public String visitFieldref(CONSTANT_Fieldref_info info, Void p) {
- try {
- String classname = getClassName(info, p);
- if (classname.length() > 0) {
- addReferencedClass(classname);
- }
-
- String type = info.getNameAndTypeInfo().getType();
- String fieldType = parser.checkClassName(type).replace('/', '.');
- if (fieldType.length() > 0) {
- addReferencedClass(classname);
- }
- return parser.constantPoolParser.stringValue(info);
- } catch (ConstantPoolException e) {
- throw new RuntimeException(e);
- }
- }
-
- public String visitFloat(CONSTANT_Float_info info, Void p) {
- // skip
- return null;
- }
-
- public String visitInteger(CONSTANT_Integer_info info, Void p) {
- // skip
- return null;
- }
-
- public String visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info info, Void p) {
- return addMethodDescriptor(info, p);
- }
-
- public String visitLong(CONSTANT_Long_info info, Void p) {
- // skip
- return null;
- }
-
- public String visitNameAndType(CONSTANT_NameAndType_info info, Void p) {
- // skip
- return null;
- }
-
- public String visitMethodref(CONSTANT_Methodref_info info, Void p) {
- return addMethodDescriptor(info, p);
- }
-
- public String visitString(CONSTANT_String_info info, Void p) {
- // skip
- return null;
- }
-
- public String visitUtf8(CONSTANT_Utf8_info info, Void p) {
- return null;
- }
- };
- }
- static boolean traceOn = System.getProperty("classanalyzer.debug") != null;
-
- private static void trace(String format, Object... args) {
- if (traceOn) {
- System.out.format(format, args);
- }
- }
-
- private static void usage() {
- System.out.println("Usage: BootAnalyzer <options>");
- System.out.println("Options: ");
- System.out.println("\t-jdkhome <JDK home> where all jars will be parsed");
- System.out.println("\t-config <roots for the boot module>");
- System.out.println("\t-output <output dir>");
- System.out.println("\t-classlist print class list and summary");
- System.exit(-1);
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/CheckDeps.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,181 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.classanalyzer;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * A simple tool to check module dependencies against a known list of
- * dependencies. The tool fails (by throwing a RuntimeException) is an
- * unexpected dependency is detected.
- */
-
-public class CheckDeps {
-
- /**
- * Represents a dependency from one module to another module. The dependency
- * may be optional.
- */
- static class Dependency {
- private final String module;
- private final String other;
- private final boolean optional;
-
- private Dependency(String module, String other, boolean optional) {
- this.module = module;
- this.other = other;
- this.optional = optional;
- }
-
- String module() { return module; }
- String other() { return other; }
- boolean isOptional() { return optional; }
-
- /**
- * Parses a dependency in one of the following forms:
- * a -> b
- * [optional] a -> b
- */
- static Dependency fromString(String s) {
- String[] components = s.split(" ");
- int count = components.length;
- if (count != 3 && count != 4)
- throw new IllegalArgumentException(s);
- boolean optional = (count == 4);
- if (optional && !components[0].equals("[optional]"))
- throw new IllegalArgumentException(s);
- String arrow = optional ? components[2] : components[1];
- if (!arrow.equals("->"))
- throw new IllegalArgumentException(s);
- String module = optional ? components[1] : components[0];
- String other = optional ? components[3] : components[2];
- return new Dependency(module, other, optional);
- }
-
- @Override public String toString() {
- StringBuilder sb = new StringBuilder();
- if (optional)
- sb.append("[optional] ");
- sb.append(module);
- sb.append(" -> ");
- sb.append(other);
- return sb.toString();
- }
- }
-
- /**
- * Represents the "tail"
- */
- static class DependencyTail {
- private final String module;
- private final boolean optional;
-
- DependencyTail(String module, boolean optional) {
- this.module = module;
- this.optional = optional;
- }
- String module() { return module; }
- boolean isOptional() { return optional; }
- }
-
- static void usage() {
- System.out.println("java CheckDeps file1 file2");
- System.out.println(" where file1 is the expected dependencies and file2 is");
- System.out.println(" the actual dependencies. Both files are assumed to be");
- System.out.println(" in modules.summary format (see ClassAnalyzer tool).");
- System.out.println();
- System.out.println("Example usages:");
- System.out.println(" java CheckDeps make/modules/modules.summary " +
- "$(OUTPUTDIR)/modules.summary");
- System.exit(-1);
- }
-
- public static void main(String[] args) throws IOException {
- if (args.length != 2)
- usage();
-
- // maps a module to the list of modules that it depends on
- Map<String,List<DependencyTail>> expected =
- new HashMap<String,List<DependencyTail>>();
-
- // parse the expected dependencies file
- Scanner s;
- s = new Scanner(new FileInputStream(args[0]));
- try {
- while (s.hasNextLine()) {
- Dependency ref = Dependency.fromString(s.nextLine());
- if (ref != null) {
- String module = ref.module();
- List<DependencyTail> list = expected.get(module);
- if (list == null) {
- list = new ArrayList<DependencyTail>();
- expected.put(module, list);
- }
- list.add(new DependencyTail(ref.other(), ref.isOptional()));
- }
- }
- } finally {
- s.close();
- }
-
- // parse the actual dependencies file, checking each dependency
- // against the expected list.
- boolean fail = false;
- s = new Scanner(new FileInputStream(args[1]));
- try {
- while (s.hasNextLine()) {
- Dependency dep = Dependency.fromString(s.nextLine());
-
- // check if this dependency is expected
- List<DependencyTail> list = expected.get(dep.module());
- DependencyTail tail = null;
- if (list != null) {
- for (DependencyTail t: list) {
- if (t.module().equals(dep.other())) {
- tail = t;
- break;
- }
- }
- }
- if (tail == null) {
- System.err.println("Unexpected dependency: " + dep);
- fail = true;
- } else {
- // hard dependency when optional dependency is expected
- if (tail.isOptional() != dep.isOptional()) {
- if (tail.isOptional()) {
- System.err.println("Unexpected dependency: " + dep);
- fail = true;
- }
- }
- }
- }
- } finally {
- s.close();
- }
-
- if (fail)
- throw new RuntimeException("Unexpected dependencies found");
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/ClassAnalyzer.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,354 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.classanalyzer;
-
-import com.sun.classanalyzer.AnnotatedDependency.*;
-import com.sun.classanalyzer.Module.Dependency;
-import com.sun.classanalyzer.Module.PackageInfo;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.io.File;
-import java.io.PrintWriter;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-/**
- *
- * @author Mandy Chung
- */
-public class ClassAnalyzer {
-
- public static void main(String[] args) throws Exception {
- String jdkhome = null;
- String cpath = null;
- List<String> configs = new ArrayList<String>();
- List<String> depconfigs = new ArrayList<String>();
- String output = ".";
- boolean mergeModules = true;
- boolean showDynamic = false;
-
- // process arguments
- int i = 0;
- while (i < args.length) {
- String arg = args[i++];
- if (arg.equals("-jdkhome")) {
- if (i < args.length) {
- jdkhome = args[i++];
- } else {
- usage();
- }
- } else if (arg.equals("-cpath")) {
- if (i < args.length) {
- cpath = args[i++];
- } else {
- usage();
- }
- } else if (arg.equals("-config")) {
- if (i < args.length) {
- configs.add(args[i++]);
- } else {
- usage();
- }
- } else if (arg.equals("-depconfig")) {
- if (i < args.length) {
- depconfigs.add(args[i++]);
- } else {
- usage();
- }
- } else if (arg.equals("-output")) {
- if (i < args.length) {
- output = args[i++];
- } else {
- usage();
- }
- } else if (arg.equals("-base")) {
- ModuleConfig.setBaseModule(args[i++]);
- } else if (arg.equals("-nomerge")) {
- // analyze the fine-grained module dependencies
- mergeModules = false;
- } else if (arg.equals("-showdynamic")) {
- showDynamic = true;
- } else {
- System.err.println("Invalid option: " + arg);
- usage();
- }
- }
-
- if ((jdkhome == null && cpath == null) || (jdkhome != null && cpath != null)) {
- usage();
- }
- if (configs.isEmpty()) {
- usage();
- }
-
- if (jdkhome != null) {
- ClassPath.setJDKHome(jdkhome);
- } else if (cpath != null) {
- ClassPath.setClassPath(cpath);
- }
-
- // create output directory if it doesn't exist
- File dir = new File(output);
- if (!dir.isDirectory()) {
- if (!dir.exists()) {
- boolean created = dir.mkdir();
- if (!created) {
- throw new RuntimeException("Unable to create `" + dir + "'");
- }
- }
- }
-
- buildModules(configs, depconfigs, mergeModules);
-
- // generate output files
- for (Module m : modules) {
- // only generate reports for top-level modules
- if (m.group() == m) {
- m.printClassListTo(resolve(dir, m.name(), "classlist"));
- m.printResourceListTo(resolve(dir, m.name(), "resources"));
- m.printSummaryTo(resolve(dir, m.name(), "summary"));
- m.printDependenciesTo(resolve(dir, m.name(), "dependencies"), showDynamic);
- }
- }
-
- // Generate other summary reports
- printModulesSummary(dir, showDynamic);
- printModulesDot(dir, showDynamic);
- printModulesList(dir);
- printPackagesSummary(dir);
- }
- private static List<Module> modules = new ArrayList<Module>();
-
- static void buildModules(List<String> configs,
- List<String> depconfigs,
- boolean mergeModules) throws IOException {
- // create modules based on the input config files
- for (String file : configs) {
- for (ModuleConfig mconfig : ModuleConfig.readConfigurationFile(file)) {
- modules.add(Module.addModule(mconfig));
- }
- }
-
- // parse class files
- ClassPath.parseAllClassFiles();
-
- // Add additional dependencies if specified
- if (depconfigs != null && depconfigs.size() > 0) {
- DependencyConfig.parse(depconfigs);
- }
-
- // process the roots and dependencies to get the classes for each module
- for (Module m : modules) {
- m.processRootsAndReferences();
- }
-
- // update the dependencies for classes that were subsequently allocated
- // to modules
- for (Module m : modules) {
- m.fixupDependencies();
- }
-
- if (mergeModules) {
- Module.buildModuleMembers();
- }
- }
-
- private static void printModulesSummary(File dir, boolean showDynamic) throws IOException {
- // print summary of dependencies
- PrintWriter writer = new PrintWriter(new File(dir, "modules.summary"));
- try {
- for (Module m : modules) {
- // only show top-level module dependencies
- if (m.group() == m) {
- for (Dependency dep : m.dependents()) {
- if (!showDynamic && dep.dynamic && dep.optional) {
- continue;
- }
- if (dep.module == null || !dep.module.isBase()) {
-
- String prefix = "";
- if (dep.optional) {
- if (dep.dynamic) {
- prefix = "[dynamic] ";
- } else {
- prefix = "[optional] ";
- }
- }
-
- Module other = dep != null ? dep.module : null;
- writer.format("%s%s -> %s%n", prefix, m, other);
- }
- }
- }
- }
- } finally {
- writer.close();
- }
- }
-
- private static void printModulesDot(File dir, boolean showDynamic) throws IOException {
- PrintWriter writer = new PrintWriter(new File(dir, "modules.dot"));
- try {
- writer.println("digraph jdk {");
- for (Module m : modules) {
- if (m.group() == m) {
- for (Dependency dep : m.dependents()) {
- if (!showDynamic && dep.dynamic && dep.optional) {
- continue;
- }
- if (dep.module == null || !dep.module.isBase()) {
- String style = "";
- String color = "";
- String property = "";
- if (dep.optional) {
- style = "style=dotted";
- }
- if (dep.dynamic) {
- color = "color=red";
- }
- if (style.length() > 0 || color.length() > 0) {
- String comma = "";
- if (style.length() > 0 && color.length() > 0) {
- comma = ", ";
- }
- property = String.format(" [%s%s%s]", style, comma, color);
- }
- Module other = dep != null ? dep.module : null;
- writer.format(" \"%s\" -> \"%s\"%s;%n", m, other, property);
- }
- }
- }
- }
- writer.println("}");
- } finally {
- writer.close();
- }
- }
-
- private static void printMembers(Module m, PrintWriter writer) {
- for (Module member : m.members()) {
- if (!member.isEmpty()) {
- writer.format("%s ", member);
- printMembers(member, writer);
- }
- }
- }
-
- private static void printModulesList(File dir) throws IOException {
- // print module group / members relationship
- PrintWriter writer = new PrintWriter(new File(dir, "modules.list"));
- try {
- for (Module m : modules) {
- if (m.group() == m && !m.isEmpty()) {
- writer.format("%s ", m);
- printMembers(m, writer);
- writer.println();
- }
- }
- } finally {
- writer.close();
- }
- }
-
- private static void printPackagesSummary(File dir) throws IOException {
- // print package / module relationship
- PrintWriter writer = new PrintWriter(new File(dir, "modules.pkginfo"));
- try {
- Map<String, Set<Module>> packages = new TreeMap<String, Set<Module>>();
- Set<String> splitPackages = new TreeSet<String>();
-
- for (Module m : modules) {
- if (m.group() == m) {
- for (PackageInfo info : m.getPackageInfos()) {
- Set<Module> value = packages.get(info.pkgName);
- if (value == null) {
- value = new TreeSet<Module>();
- packages.put(info.pkgName, value);
- } else {
- // package in more than one module
- splitPackages.add(info.pkgName);
- }
- value.add(m);
- }
- }
- }
-
- // packages that are splitted among multiple modules
- writer.println("Packages splitted across modules:-\n");
- writer.format("%-60s %s\n", "Package", "Module");
-
- for (String pkgname : splitPackages) {
- writer.format("%-60s", pkgname);
- for (Module m : packages.get(pkgname)) {
- writer.format(" %s", m);
- }
- writer.println();
- }
-
- writer.println("\nPackage-private dependencies:-");
- for (String pkgname : splitPackages) {
- for (Klass k : Klass.getAllClasses()) {
- if (k.getPackageName().equals(pkgname)) {
- Module m = k.getModule();
- // check if this klass references a package-private
- // class that is in a different module
- for (Klass other : k.getReferencedClasses()) {
- if (other.getModule() != m &&
- !other.isPublic() &&
- other.getPackageName().equals(pkgname)) {
- String from = k.getClassName() + " (" + m + ")";
- writer.format("%-60s -> %s (%s)\n", from, other, other.getModule());
- }
- }
- }
- }
- }
- } finally {
- writer.close();
- }
-
- }
-
- private static String resolve(File dir, String mname, String suffix) {
- File f = new File(dir, mname + "." + suffix);
- return f.toString();
-
- }
-
- private static void usage() {
- System.out.println("Usage: ClassAnalyzer <options>");
- System.out.println("Options: ");
- System.out.println("\t-jdkhome <JDK home> where all jars will be parsed");
- System.out.println("\t-cpath <classpath> where classes and jars will be parsed");
- System.out.println("\t Either -jdkhome or -cpath option can be used.");
- System.out.println("\t-config <module config file>");
- System.out.println("\t This option can be repeated for multiple module config files");
- System.out.println("\t-output <output dir>");
- System.out.println("\t-nomerge specify not to merge modules");
- System.out.println("\t-showdynamic show dynamic dependencies in the reports");
- System.exit(-1);
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/ClassFileParser.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,629 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-package com.sun.classanalyzer;
-
-import com.sun.tools.classfile.*;
-import com.sun.tools.classfile.Type.*;
-import com.sun.tools.classfile.Descriptor.InvalidDescriptor;
-import static com.sun.tools.classfile.AccessFlags.*;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-/**
- *
- * @author Mandy Chung
- */
-public class ClassFileParser {
-
- final Klass this_klass;
- final ClassFile classfile;
- final ConstantPoolParser constantPoolParser;
- final AnnotationParser annotationParser;
- final CodeAttributeParser codeAttributeParser;
- private final boolean buildDeps;
-
- protected ClassFileParser(InputStream in, long size, boolean buildDeps) throws IOException {
- try {
- this.classfile = ClassFile.read(in);
- this.this_klass = getKlass(this.classfile);
- this.buildDeps = buildDeps;
- this.constantPoolParser = new ConstantPoolParser(this);
- this.annotationParser = new AnnotationParser(this);
- this.codeAttributeParser = new CodeAttributeParser(this);
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- }
- }
-
- private Klass getKlass(ClassFile cf) throws ConstantPoolException {
- Klass k = Klass.getKlass(cf.getName());
- k.setAccessFlags(cf.access_flags.flags);
- k.setFileSize(cf.byteLength());
- return k;
- }
-
- public static ClassFileParser newParser(InputStream in, long size, boolean buildDeps) throws IOException {
- return new ClassFileParser(in, size, buildDeps);
- }
-
- public static ClassFileParser newParser(String classPathname, boolean buildDeps) throws IOException {
- return newParser(new File(classPathname), buildDeps);
- }
-
- public static ClassFileParser newParser(File f, boolean buildDeps) throws IOException {
- BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
- try {
- return newParser(in, f.length(), buildDeps);
- } finally {
- in.close();
- }
- }
-
- public void parseDependency(boolean publicAPIs) throws IOException {
- if (publicAPIs && !classfile.access_flags.is(ACC_PUBLIC)) {
- // process public APIs only
- return;
- }
-
- parseClassInfo();
- if (!publicAPIs) {
- // parse all references in the classfile
- constantPoolParser.parseDependency();
- }
- parseMethods(publicAPIs);
- parseFields(publicAPIs);
- }
-
- void parseClassInfo() throws IOException {
- ConstantPool cpool = classfile.constant_pool;
- try {
- Signature_attribute sigAttr = (Signature_attribute) classfile.attributes.get(Attribute.Signature);
- if (sigAttr == null) {
- // use info from class file header
- if (classfile.isClass() && classfile.super_class != 0) {
- String sn = classfile.getSuperclassName();
- addExtends(sn);
- }
- for (int i = 0; i < classfile.interfaces.length; i++) {
- String interf = classfile.getInterfaceName(i);
- if (classfile.isClass()) {
- addImplements(interf);
- } else {
- addExtends(interf);
- }
- }
- } else {
- Type t = sigAttr.getParsedSignature().getType(cpool);
- // The signature parser cannot disambiguate between a
- // FieldType and a ClassSignatureType that only contains a superclass type.
- if (t instanceof Type.ClassSigType) {
- Type.ClassSigType cst = Type.ClassSigType.class.cast(t);
- if (cst.superclassType != null) {
- for (Klass k : getKlass(cst.superclassType)) {
- addExtends(k);
- }
- }
- if (cst.superinterfaceTypes != null) {
- for (Type t1 : cst.superinterfaceTypes) {
- for (Klass k : getKlass(t1)) {
- addImplements(k);
- }
- }
- }
- } else {
- for (Klass k : getKlass(t)) {
- addExtends(k);
- }
- }
- }
- // parse attributes
- annotationParser.parseAttributes(classfile.attributes);
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- }
- }
-
- private void parseFields(boolean publicAPIs) throws IOException {
- ConstantPool cpool = classfile.constant_pool;
- for (Field f : classfile.fields) {
- try {
- AccessFlags flags = f.access_flags;
- if (publicAPIs && !flags.is(ACC_PUBLIC) && !flags.is(ACC_PROTECTED)) {
- continue;
- }
- String fieldname = f.getName(cpool);
- Signature_attribute sigAttr = (Signature_attribute) f.attributes.get(Attribute.Signature);
-
- if (sigAttr == null) {
- Set<Klass> types = parseDescriptor(f.descriptor);
- String info = getFlag(flags) + " " + f.descriptor.getFieldType(cpool) + " " + fieldname;
- addFieldTypes(types, info, flags);
- } else {
- Type t = sigAttr.getParsedSignature().getType(cpool);
- String info = getFlag(flags) + " " + t + " " + fieldname;
- addFieldTypes(getKlass(t), info, flags);
- }
- // parse attributes
- annotationParser.parseAttributes(f.attributes);
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- } catch (InvalidDescriptor ex) {
- throw new RuntimeException(ex);
- }
- }
- }
-
- private void parseMethods(boolean publicAPIs) {
- for (Method m : classfile.methods) {
- if (publicAPIs && !m.access_flags.is(ACC_PUBLIC) && !m.access_flags.is(ACC_PROTECTED)) {
- // only interest in the API level
- return;
- }
-
- parseMethod(m);
- }
- }
-
- String checkClassName(String classname) {
- int i = 0;
- while (i < classname.length()) {
- switch (classname.charAt(i)) {
- case 'Z':
- case 'B':
- case 'C':
- case 'S':
- case 'I':
- case 'J':
- case 'F':
- case 'D':
- return "";
- case 'L':
- if (!classname.endsWith(";")) {
- throw new RuntimeException("Invalid classname " + classname);
- }
- return classname.substring(i + 1, classname.length() - 1);
- case '[':
- i++;
- break;
- default:
- if (classname.endsWith(";")) {
- throw new RuntimeException("Invalid classname " + classname);
- }
- return classname;
-
- }
- }
- throw new RuntimeException("Invalid classname " + classname);
- }
-
- private void addExtends(String classname) throws IOException {
- if (!buildDeps) {
- return;
- }
-
- addExtends(Klass.getKlass(classname));
- }
-
- private void addExtends(Klass k) {
- if (!buildDeps) {
- return;
- }
-
- ResolutionInfo resInfo = ResolutionInfo.resolvedExtends(this_klass, k);
- resInfo.setPublicAccess(classfile.access_flags.is(ACC_PUBLIC));
- this_klass.addDep(k, resInfo);
- k.addReferrer(this_klass, resInfo);
- }
-
- private void addImplements(String classname) throws IOException {
- if (!buildDeps) {
- return;
- }
-
- addImplements(Klass.getKlass(classname));
- }
-
- private void addImplements(Klass k) {
- if (!buildDeps) {
- return;
- }
-
- ResolutionInfo resInfo = ResolutionInfo.resolvedImplements(this_klass, k);
- resInfo.setPublicAccess(classfile.access_flags.is(ACC_PUBLIC));
-
- this_klass.addDep(k, resInfo);
-
- k.addReferrer(this_klass, resInfo);
- }
-
- private Set<Klass> getKlass(Type type) throws IOException {
- Set<Klass> refTypes = new TreeSet<Klass>();
- if (!buildDeps) {
- return refTypes;
- }
-
- type.accept(typevisitor, refTypes);
- return refTypes;
- }
- private Type.Visitor<Void, Set<Klass>> typevisitor = new Type.Visitor<Void, Set<Klass>>() {
-
- public Void visitSimpleType(SimpleType type, Set<Klass> klasses) {
- // nop
- return null;
- }
-
- public Void visitArrayType(ArrayType type, Set<Klass> klasses) {
- try {
- klasses.addAll(getKlass(type.elemType));
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
- return null;
-
- }
-
- public Void visitMethodType(MethodType type, Set<Klass> klasses) {
- throw new InternalError("Unexpected type " + type);
- }
-
- public Void visitClassSigType(ClassSigType type, Set<Klass> klasses) {
- try {
- if (type.superclassType != null) {
- klasses.addAll(getKlass(type.superclassType));
- }
- if (type.superinterfaceTypes != null) {
- for (Type t : type.superinterfaceTypes) {
- klasses.addAll(getKlass(t));
- }
- }
- if (type.typeParamTypes != null) {
- for (Type t : type.typeParamTypes) {
- klasses.addAll(getKlass(t));
- }
- }
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
- return null;
- }
-
- public Void visitClassType(ClassType type, Set<Klass> klasses) {
- klasses.add(Klass.getKlass(type.getBinaryName()));
- if (type.typeArgs != null) {
- for (Type t : type.typeArgs) {
- try {
- klasses.addAll(getKlass(t));
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
- }
- }
- return null;
-
- }
-
- public Void visitTypeParamType(TypeParamType type, Set<Klass> klasses) {
- try {
- if (type.classBound != null) {
- klasses.addAll(getKlass(type.classBound));
- }
- if (type.interfaceBounds != null) {
- for (Type t : type.interfaceBounds) {
- klasses.addAll(getKlass(t));
- }
- }
-
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
-
- return null;
-
- }
-
- public Void visitWildcardType(WildcardType type, Set<Klass> klasses) {
- if (type.boundType != null) {
- try {
- klasses.addAll(getKlass(type.boundType));
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
- }
- return null;
-
- }
- };
-
- private void printMethod(Method m) {
- try {
- System.out.println("parsing " + m.getName(classfile.constant_pool) + "(" +
- m.descriptor.getParameterTypes(classfile.constant_pool) + ") return type " +
- m.descriptor.getReturnType(classfile.constant_pool));
-
- } catch (ConstantPoolException ex) {
- } catch (InvalidDescriptor ex) {
- }
- }
-
- private static StringBuilder appendWord(StringBuilder sb, String word) {
- if (sb.length() > 0) {
- sb.append(" ");
- }
- sb.append(word);
- return sb;
- }
-
- private static String getFlag(AccessFlags flags) {
- StringBuilder modifier = new StringBuilder();
- if (flags.is(ACC_PUBLIC)) {
- modifier.append("public");
- }
- if (flags.is(ACC_PRIVATE)) {
- modifier.append("private");
- }
- if (flags.is(ACC_PROTECTED)) {
- modifier.append("protected");
- }
- if (flags.is(ACC_STATIC)) {
- appendWord(modifier, "static");
- }
- if (flags.is(ACC_FINAL)) {
- appendWord(modifier, "final");
- }
- if (flags.is(ACC_SYNCHRONIZED)) {
- // return "synchronized";
- }
- if (flags.is(0x80)) {
- // return (t == Type.Field ? "transient" : null);
- // return "transient";
- }
- if (flags.is(ACC_VOLATILE)) {
- // return "volatile";
- }
- if (flags.is(ACC_NATIVE)) {
- // return "native";
- }
- if (flags.is(ACC_ABSTRACT)) {
- appendWord(modifier, "abstract");
- }
- if (flags.is(ACC_STRICT)) {
- // return "strictfp";
- }
- if (flags.is(ACC_MODULE)) {
- appendWord(modifier, "module");
- }
- return modifier.toString();
- }
-
- private Klass.Method toKlassMethod(Method m, Descriptor d) {
- try {
- ConstantPool cpool = classfile.constant_pool;
- String methodname = m.getName(cpool);
- StringBuilder sb = new StringBuilder();
- sb.append(getFlag(m.access_flags));
- if (methodname.equals("<init>")) {
- String s = this_klass.getBasename() + d.getParameterTypes(cpool);
- appendWord(sb, s);
- } else if (methodname.equals("<clinit>")) {
- // <clinit>
- appendWord(sb, methodname);
- } else {
- String s = d.getReturnType(cpool) + " " + methodname + d.getParameterTypes(cpool);
- appendWord(sb, s);
- }
- String signature = sb.toString().replace('/', '.');
- return this_klass.getMethod(methodname, signature);
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- } catch (InvalidDescriptor ex) {
- throw new RuntimeException(ex);
- }
- }
-
- Klass.Method parseMethod(Method m) {
- AccessFlags flags = m.access_flags;
- Descriptor d;
- List<? extends Type> methodExceptions = null;
- try {
- ConstantPool cpool = classfile.constant_pool;
- Klass.Method kmethod;
- Signature_attribute sigAttr = (Signature_attribute) m.attributes.get(Attribute.Signature);
- if (sigAttr == null) {
- d = m.descriptor;
- Set<Klass> types = parseDescriptor(d);
-
- kmethod = toKlassMethod(m, d);
- addMethodTypes(types, kmethod, flags);
- } else {
- Type.MethodType methodType;
- Signature methodSig = sigAttr.getParsedSignature();
- d = methodSig;
- try {
- kmethod = toKlassMethod(m, d);
- methodType = (Type.MethodType) methodSig.getType(cpool);
- addMethodTypes(getKlass(methodType.returnType), kmethod, flags);
- if (methodType.paramTypes != null) {
- for (Type t : methodType.paramTypes) {
- addMethodTypes(getKlass(t), kmethod, flags);
- }
- }
- if (methodType.typeParamTypes != null) {
- for (Type t : methodType.typeParamTypes) {
- addMethodTypes(getKlass(t), kmethod, flags);
- }
- }
-
- methodExceptions = methodType.throwsTypes;
- if (methodExceptions != null) {
- if (methodExceptions.size() == 0) {
- methodExceptions = null;
- } else {
- for (Type t : methodExceptions) {
- addCheckedExceptionTypes(getKlass(t), kmethod, flags);
- }
- }
- }
- } catch (ConstantPoolException e) {
- throw new RuntimeException(e);
- }
- }
-
- Attribute e_attr = m.attributes.get(Attribute.Exceptions);
- if (e_attr != null && methodExceptions == null) {
- // if there are generic exceptions, there must be erased exceptions
- if (e_attr instanceof Exceptions_attribute) {
- Exceptions_attribute exceptions = (Exceptions_attribute) e_attr;
- for (int i = 0; i < exceptions.number_of_exceptions; i++) {
- String classname = checkClassName(exceptions.getException(i, classfile.constant_pool));
- if (classname.length() > 0 && buildDeps) {
- Klass to = Klass.getKlass(classname);
- ResolutionInfo resInfo = ResolutionInfo.resolvedCheckedException(this_klass, to, kmethod);
- resInfo.setPublicAccess(flags.is(ACC_PUBLIC));
-
- this_klass.addDep(to, resInfo);
- to.addReferrer(this_klass, resInfo);
- }
- }
- } else {
- throw new RuntimeException("Invalid attribute: " + e_attr);
- }
- }
-
- Code_attribute c_attr = (Code_attribute) m.attributes.get(Attribute.Code);
- if (c_attr != null) {
- codeAttributeParser.parse(c_attr, kmethod);
- }
- kmethod.isAbstract = classfile.access_flags.is(ACC_ABSTRACT);
- kmethod.setCodeLength(m.byteLength());
-
- // parse annotation attributes
- annotationParser.parseAttributes(m.attributes, kmethod);
- return kmethod;
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
- }
-
- private void addFieldTypes(Set<Klass> types, String info, AccessFlags flags) {
- if (types.isEmpty() || !buildDeps) {
- return;
- }
-
- for (Klass to : types) {
- ResolutionInfo resInfo = ResolutionInfo.resolvedField(this_klass, to, info);
- resInfo.setPublicAccess(flags.is(ACC_PUBLIC));
-
- this_klass.addDep(to, resInfo);
- to.addReferrer(this_klass, resInfo);
- }
- }
-
- private void addReferencedTypes(Method m, Descriptor d, AccessFlags flags) {
- Set<Klass> types = parseDescriptor(d);
-
- Klass.Method method = toKlassMethod(m, d);
- addMethodTypes(types, method, flags);
- }
-
- private void addMethodTypes(Set<Klass> types, Klass.Method method, AccessFlags flags) {
- if (types.isEmpty() || !buildDeps) {
- return;
- }
- for (Klass to : types) {
- ResolutionInfo resInfo = ResolutionInfo.resolvedMethodSignature(this_klass, to, method);
- resInfo.setPublicAccess(flags.is(ACC_PUBLIC));
-
- this_klass.addDep(to, resInfo);
- to.addReferrer(this_klass, resInfo);
- }
- }
-
- private void addCheckedExceptionTypes(Set<Klass> types, Klass.Method method, AccessFlags flags) {
- if (types.isEmpty() || !buildDeps) {
- return;
- }
- for (Klass to : types) {
- ResolutionInfo resInfo = ResolutionInfo.resolvedCheckedException(this_klass, to, method);
- resInfo.setPublicAccess(flags.is(ACC_PUBLIC));
-
- this_klass.addDep(to, resInfo);
- to.addReferrer(this_klass, resInfo);
- }
- }
-
- private Set<Klass> parseDescriptor(Descriptor d) {
- Set<Klass> types = new TreeSet<Klass>();
- try {
- String desc = d.getValue(classfile.constant_pool);
- int p = 0;
- while (p < desc.length()) {
- String type;
- char ch;
- switch (ch = desc.charAt(p++)) {
- case '(':
- case ')':
- case '[':
- case 'B':
- case 'C':
- case 'D':
- case 'F':
- case 'I':
- case 'J':
- case 'S':
- case 'Z':
- case 'V':
- continue;
- case 'L':
- int sep = desc.indexOf(';', p);
- if (sep == -1) {
- throw new RuntimeException("Invalid descriptor: " + (p - 1) + " " + desc);
- }
- type = checkClassName(desc.substring(p, sep));
- p = sep + 1;
- break;
- default:
- throw new RuntimeException("Invalid descriptor: " + (p - 1) + " " + desc);
- }
-
- if (!type.isEmpty() && buildDeps) {
- Klass to = Klass.getKlass(type);
- types.add(to);
-
- }
- }
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- }
- return types;
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/ClassPath.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,275 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-package com.sun.classanalyzer;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
-/**
- *
- * @author mchung
- */
-public class ClassPath {
-
- public class FileInfo {
-
- File file;
- JarFile jarfile;
- int classCount;
- long filesize;
-
- FileInfo(File f) throws IOException {
- this.file = f;
- this.classCount = 0;
- if (file.getName().endsWith(".jar")) {
- this.filesize = file.length();
- jarfile = new JarFile(f);
- }
- }
-
- File getFile() {
- return file;
- }
-
- JarFile getJarFile() {
- return jarfile;
- }
-
- String getName() throws IOException {
- return file.getCanonicalPath();
- }
- }
- private List<FileInfo> fileList = new ArrayList<FileInfo>();
- private static ClassPath instance = new ClassPath();
-
- static List<FileInfo> getFileInfos() {
- return instance.fileList;
- }
-
- static ClassPath setJDKHome(String jdkhome) throws IOException {
- List<File> files = new ArrayList<File>();
- File jre = new File(jdkhome, "jre");
- File lib = new File(jdkhome, "lib");
- if (jre.exists() && jre.isDirectory()) {
- listFiles(new File(jre, "lib"), ".jar", files);
- } else if (lib.exists() && lib.isDirectory()) {
- // either a JRE or a jdk build image
- listFiles(lib, ".jar", files);
-
- File classes = new File(jdkhome, "classes");
- if (classes.exists() && classes.isDirectory()) {
- // jdk build outputdir
- instance.add(classes);
- }
- } else {
- throw new RuntimeException("\"" + jdkhome + "\" not a JDK home");
- }
-
- for (File f : files) {
- instance.add(f);
- }
- return instance;
- }
-
- static ClassPath setClassPath(String path) throws IOException {
- if (path.endsWith(".class")) {
- // one class file
- File f = new File(path);
- if (!f.exists()) {
- throw new RuntimeException("Classfile \"" + f + "\" doesn't exist");
- }
-
- instance.add(f);
- } else {
- List<File> jarFiles = new ArrayList<File>();
- String[] locs = path.split(File.pathSeparator);
- for (String p : locs) {
- File f = new File(p);
- if (!f.exists()) {
- throw new RuntimeException("\"" + f + "\" doesn't exist");
- }
-
- if (f.isDirectory()) {
- instance.add(f); // add the directory to look up .class files
- listFiles(f, ".jar", jarFiles);
- } else if (p.endsWith(".jar")) {
- // jar files
- jarFiles.add(f);
- } else {
- throw new RuntimeException("Invalid file \"" + f);
- }
- }
- // add jarFiles if any
- for (File f : jarFiles) {
- instance.add(f);
- }
- }
-
- return instance;
- }
-
- private void add(File f) throws IOException {
- fileList.add(new FileInfo(f));
- }
-
- public static InputStream open(String pathname) throws IOException {
- for (FileInfo fi : instance.fileList) {
- if (fi.getName().endsWith(".jar")) {
- String path = pathname.replace(File.separatorChar, '/');
- JarEntry e = fi.jarfile.getJarEntry(path);
- if (e != null) {
- return fi.jarfile.getInputStream(e);
- }
- } else if (fi.getFile().isDirectory()) {
- File f = new File(fi.getFile(), pathname);
- if (f.exists()) {
- return new FileInputStream(f);
- }
- } else if (fi.file.isFile()) {
- if (fi.getName().endsWith(File.separator + pathname)) {
- return new FileInputStream(fi.file);
- }
- }
- }
- return null;
- }
-
- static ClassFileParser parserForClass(String classname) throws IOException {
- String pathname = classname.replace('.', File.separatorChar) + ".class";
-
- ClassFileParser cfparser = null;
- for (FileInfo fi : instance.fileList) {
- if (fi.getName().endsWith(".class")) {
- if (fi.getName().endsWith(File.separator + pathname)) {
- cfparser = ClassFileParser.newParser(fi.getFile(), true);
- break;
- }
- } else if (fi.getName().endsWith(".jar")) {
- JarEntry e = fi.jarfile.getJarEntry(classname.replace('.', '/') + ".class");
- if (e != null) {
- cfparser = ClassFileParser.newParser(fi.jarfile.getInputStream(e), e.getSize(), true);
- break;
- }
- } else if (fi.getFile().isDirectory()) {
- File f = new File(fi.getFile(), pathname);
- if (f.exists()) {
- cfparser = ClassFileParser.newParser(f, true);
- break;
- }
- }
- }
- return cfparser;
- }
-
- public static void parseAllClassFiles() throws IOException {
- instance.parseFiles();
- }
-
- private void parseFiles() throws IOException {
- Set<Klass> classes = new HashSet<Klass>();
-
- int count = 0;
- for (FileInfo fi : fileList) {
- // filter out public generated classes (i.e. not public API)
- // javax.management.remote.rmi._RMIConnectionImpl_Tie
- // javax.management.remote.rmi._RMIServerImpl_Tie
- if (fi.getName().endsWith(".class")) {
- parseClass(fi);
- } else if (fi.getName().endsWith(".jar")) {
- Enumeration<JarEntry> entries = fi.jarfile.entries();
- while (entries.hasMoreElements()) {
- JarEntry e = entries.nextElement();
- if (e.getName().endsWith(".class")) {
- ClassFileParser cfparser = ClassFileParser.newParser(fi.jarfile.getInputStream(e), e.getSize(), true);
- cfparser.parseDependency(false);
- fi.classCount++;
- } else if (!e.isDirectory() && ResourceFile.isResource(e.getName())) {
- ResourceFile.addResource(e.getName(), fi.jarfile.getInputStream(e));
- }
- }
- } else if (fi.getFile().isDirectory()) {
- List<File> files = new ArrayList<File>();
- listFiles(fi.getFile(), "", files);
- for (File f : files) {
- if (f.getName().endsWith(".class")) {
- parseClass(fi, f);
- } else if (!f.isDirectory() && ResourceFile.isResource(f.getCanonicalPath())) {
- String pathname = f.getCanonicalPath();
- String dir = fi.getName();
- if (!pathname.startsWith(dir)) {
- throw new RuntimeException("Incorrect pathname " + pathname);
- }
- String name = pathname.substring(dir.length() + 1, pathname.length());
- BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
- try {
- ResourceFile.addResource(name, in);
- } finally {
- in.close();
- }
- }
- }
- } else {
- // should not reach here
- throw new RuntimeException("Unexpected class path: " + fi.getFile());
- }
- }
- }
-
- private void parseClass(FileInfo fi) throws IOException {
- parseClass(fi, fi.getFile());
- }
-
- private void parseClass(FileInfo fi, File f) throws IOException {
- ClassFileParser cfparser = ClassFileParser.newParser(f, true);
- cfparser.parseDependency(false);
- fi.classCount++;
- // need to update the filesize for this directory
- fi.filesize += fi.getFile().length();
-
- }
-
- public static void listFiles(File path, String suffix, List<File> result) {
- if (path.isDirectory()) {
- File[] children = path.listFiles();
- for (File c : children) {
- listFiles(c, suffix, result);
- }
-
- } else {
- if (suffix.isEmpty() || path.getName().endsWith(suffix)) {
- result.add(path);
- }
- }
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/CodeAttributeParser.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-package com.sun.classanalyzer;
-
-import com.sun.classanalyzer.Klass.Method;
-
-import com.sun.tools.classfile.*;
-import com.sun.tools.classfile.Instruction.*;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-/**
- *
- * @author Mandy Chung
- */
-public class CodeAttributeParser {
- private final ClassFileParser cfparser;
- private final ConstantPool cpool;
- private final ConstantPoolParser constantPoolParser;
-
-
- static final Map<String, Set<Method>> runtimeReferences =
- new HashMap<String, Set<Method>>();
-
-
- CodeAttributeParser(ClassFileParser parser) {
- this.cfparser = parser;
- this.cpool = cfparser.classfile.constant_pool;
- this.constantPoolParser = cfparser.constantPoolParser;
- }
-
- static boolean parseCodeAttribute = false; // by default don't parse code attribute
- static void setParseCodeAttribute(boolean newValue) {
- parseCodeAttribute = newValue;
- }
-
- void parse(Code_attribute attr, Klass.Method method) {
- if (!parseCodeAttribute) {
- return;
- }
-
- for (Instruction instr : attr.getInstructions()) {
- try {
- instr.accept(instructionVisitor, method);
- } catch (ArrayIndexOutOfBoundsException e) {
- throw new RuntimeException("error at or after byte " + instr.getPC());
- }
-
- }
-
- if (attr.exception_table_langth > 0) {
- for (int i = 0; i <
- attr.exception_table.length; i++) {
- Code_attribute.Exception_data handler = attr.exception_table[i];
- int catch_type = handler.catch_type;
- if (catch_type > 0) {
- addMethodReference(catch_type, method);
- }
-
- }
- }
-
- }
-
-
- private void addMethodReference(int index, Klass.Method m) {
- String method = constantPoolParser.getMethodName(index);
-
- if (method != null &&
- (method.equals("java.lang.Class.forName") ||
- method.equals("java.lang.Class.loadClass") ||
- method.startsWith("java.util.ServiceLoader.load") ||
- method.equals("sun.misc.Service.providers"))) {
- Set<Method> refs = runtimeReferences.get(method);
- if (refs == null) {
- refs = new TreeSet<Method>();
- runtimeReferences.put(method, refs);
- }
- refs.add(m);
- }
- }
-
- Instruction.KindVisitor<Void, Klass.Method> instructionVisitor =
- new Instruction.KindVisitor<Void, Klass.Method>() {
-
- public Void visitNoOperands(Instruction instr, Klass.Method m) {
- return null;
- }
-
- public Void visitArrayType(Instruction instr, TypeKind kind, Klass.Method m) {
- return null;
- }
-
- public Void visitBranch(Instruction instr, int offset, Klass.Method m) {
- return null;
- }
-
- public Void visitConstantPoolRef(Instruction instr, int index, Klass.Method m) {
- addMethodReference(index, m);
- return null;
- }
-
- public Void visitConstantPoolRefAndValue(Instruction instr, int index, int value, Klass.Method m) {
- addMethodReference(index, m);
- return null;
- }
-
- public Void visitLocal(Instruction instr, int index, Klass.Method m) {
- return null;
- }
-
- public Void visitLocalAndValue(Instruction instr, int index, int value, Klass.Method m) {
- return null;
- }
-
- public Void visitLookupSwitch(Instruction instr, int default_, int npairs, int[] matches, int[] offsets, Klass.Method m) {
- return null;
- }
-
- public Void visitTableSwitch(Instruction instr, int default_, int low, int high, int[] offsets, Klass.Method m) {
- return null;
- }
-
- public Void visitValue(Instruction instr, int value, Klass.Method m) {
- return null;
- }
-
- public Void visitUnknown(Instruction instr, Klass.Method m) {
- return null;
- }
- };
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/ConstantPoolAnalyzer.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.classanalyzer;
-
-/**
- *
- * @author Mandy Chung
- */
-public class ConstantPoolAnalyzer {
- public static void main(String[] args) throws Exception {
- String jdkhome = null;
-
- // process arguments
- int i = 0;
- while (i < args.length) {
- String arg = args[i++];
- if (arg.equals("-jdkhome")) {
- if (i < args.length) {
- jdkhome = args[i++];
- } else {
- usage();
- }
- }
- }
- if (jdkhome == null) {
- usage();
- }
- ClassPath.setJDKHome(jdkhome);
- ClassPath.parseAllClassFiles();
- }
-
- private static void usage() {
- System.out.println("Usage: ConstantPoolAnalyzer <options>");
- System.out.println("Options: ");
- System.out.println("\t-jdkhome <JDK home> where all jars will be parsed");
- System.out.println("\t-cpath <classpath> where classes and jars will be parsed");
- System.exit(-1);
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/ConstantPoolParser.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,377 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.classanalyzer;
-
-import com.sun.tools.classfile.*;
-import com.sun.tools.classfile.ConstantPool.*;
-import static com.sun.tools.classfile.ConstantPool.*;
-
-/**
- *
- * @author Mandy Chung
- */
-public class ConstantPoolParser {
-
- private final ClassFileParser cfparser;
- private final StringValueVisitor visitor;
- private final ConstantPool cpool;
-
- ConstantPoolParser(ClassFileParser parser) {
- this.cfparser = parser;
- this.cpool = cfparser.classfile.constant_pool;
- this.visitor = new StringValueVisitor();
- }
-
- public String stringValue(CPInfo cpInfo) {
- return visitor.visit(cpInfo);
- }
-
- public String stringValue(int constant_pool_index) {
- try {
- return stringValue(cpool.get(constant_pool_index));
- } catch (ConstantPool.InvalidIndex e) {
- throw new RuntimeException(e);
- }
- }
-
- public void parseDependency() {
- ConstantPool.Visitor<Integer, Void> v = new ConstantPool.Visitor<Integer, Void>() {
-
- public Integer visitClass(CONSTANT_Class_info info, Void p) {
- try {
- String classname = cfparser.checkClassName(info.getName());
- if (classname.isEmpty()) {
- return 1;
- }
-
- Klass from = cfparser.this_klass;
- Klass to = Klass.getKlass(classname);
- ResolutionInfo resInfo = ResolutionInfo.resolvedConstantPool(from, to, info.name_index);
-
- from.addDep(to, resInfo);
- to.addReferrer(from, resInfo);
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- }
- return 1;
- }
-
- public Integer visitDouble(CONSTANT_Double_info info, Void p) {
- // skip
- return 2;
- }
-
- public Integer visitFieldref(CONSTANT_Fieldref_info info, Void p) {
- // skip
- return 1;
- }
-
- public Integer visitFloat(CONSTANT_Float_info info, Void p) {
- // skip
- return 1;
- }
-
- public Integer visitInteger(CONSTANT_Integer_info info, Void p) {
- // skip
- return 1;
- }
-
- public Integer visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info info, Void p) {
- // skip
- return 1;
- }
-
- public Integer visitLong(CONSTANT_Long_info info, Void p) {
- // skip
- return 2;
- }
-
- public Integer visitNameAndType(CONSTANT_NameAndType_info info, Void p) {
- // skip
- return 1;
- }
-
- public Integer visitMethodref(CONSTANT_Methodref_info info, Void p) {
- // skip
- return 1;
- }
-
- public Integer visitString(CONSTANT_String_info info, Void p) {
- // skip
- return 1;
- }
-
- public Integer visitUtf8(CONSTANT_Utf8_info info, Void p) {
- // skip
- return 1;
- }
- };
- int cpx = 1;
- while (cpx < cpool.size()) {
- try {
- CPInfo cpInfo = cpool.get(cpx);
- cpx += cpInfo.accept(v, null);
- } catch (ConstantPool.InvalidIndex ex) {
- throw new RuntimeException(ex);
- }
- }
- }
-
- int getTag(int index) {
- try {
- return cpool.get(index).getTag();
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- }
- }
-
- String getDescriptor(int index) {
- CPInfo cpInfo;
- try {
- cpInfo = cpool.get(index);
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- }
-
- int tag = cpInfo.getTag();
- switch (tag) {
- case CONSTANT_Methodref:
- case CONSTANT_InterfaceMethodref:
- case CONSTANT_Fieldref:
- // simplify references within this class
- CPRefInfo ref = (CPRefInfo) cpInfo;
- try {
- return ref.getNameAndTypeInfo().getType();
- } catch (ConstantPoolException ex) {
- }
- }
- return stringValue(cpInfo);
- }
-
- String getMethodName(int index) {
- try {
- CPInfo cpInfo = cpool.get(index);
- if (cpInfo.getTag() == CONSTANT_Methodref ||
- cpInfo.getTag() == CONSTANT_InterfaceMethodref) {
-
- // simplify references within this class
- CPRefInfo ref = (CPRefInfo) cpInfo;
- String classname;
- if (ref.class_index == cfparser.classfile.this_class) {
- classname = cfparser.this_klass.getClassName();
- } else {
- classname = cfparser.checkClassName(ref.getClassName()).replace('/', '.');
- }
- String methodname = ref.getNameAndTypeInfo().getName();
- return classname + "." + methodname;
- } else {
- return null;
- }
- } catch (InvalidIndex ex) {
- throw new RuntimeException(ex);
- } catch (ConstantPoolException ex) {
- throw new RuntimeException(ex);
- }
-
- }
-
- class StringValueVisitor implements ConstantPool.Visitor<String, Void> {
-
- public StringValueVisitor() {
- }
-
- public String visit(CPInfo info) {
- return info.accept(this, null);
- }
-
- public String visitClass(CONSTANT_Class_info info, Void p) {
- return getCheckedName(info);
- }
-
- String getCheckedName(CONSTANT_Class_info info) {
- try {
- return checkName(info.getName());
- } catch (ConstantPoolException e) {
- throw new RuntimeException(e);
- }
- }
-
- public String visitDouble(CONSTANT_Double_info info, Void p) {
- return info.value + "d";
- }
-
- public String visitFieldref(CONSTANT_Fieldref_info info, Void p) {
- return visitRef(info, p);
- }
-
- public String visitFloat(CONSTANT_Float_info info, Void p) {
- return info.value + "f";
- }
-
- public String visitInteger(CONSTANT_Integer_info info, Void p) {
- return String.valueOf(info.value);
- }
-
- public String visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info info, Void p) {
- return visitRef(info, p);
- }
-
- public String visitLong(CONSTANT_Long_info info, Void p) {
- return info.value + "l";
- }
-
- public String visitNameAndType(CONSTANT_NameAndType_info info, Void p) {
- return getCheckedName(info) + ":" + getType(info);
- }
-
- String getCheckedName(CONSTANT_NameAndType_info info) {
- try {
- return checkName(info.getName());
- } catch (ConstantPoolException e) {
- throw new RuntimeException(e);
- }
- }
-
- String getType(CONSTANT_NameAndType_info info) {
- try {
- return info.getType();
- } catch (ConstantPoolException e) {
- throw new RuntimeException(e);
- }
- }
-
- public String visitMethodref(CONSTANT_Methodref_info info, Void p) {
- return visitRef(info, p);
- }
-
- public String visitString(CONSTANT_String_info info, Void p) {
- try {
- int string_index = info.string_index;
- return cpool.getUTF8Info(string_index).accept(this, p);
- } catch (ConstantPoolException e) {
- throw new RuntimeException(e);
- }
- }
-
- public String visitUtf8(CONSTANT_Utf8_info info, Void p) {
- String s = info.value;
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < s.length(); i++) {
- char c = s.charAt(i);
- switch (c) {
- case '\t':
- sb.append('\\').append('t');
- break;
- case '\n':
- sb.append('\\').append('n');
- break;
- case '\r':
- sb.append('\\').append('r');
- break;
- case '\"':
- sb.append('\\').append('\"');
- break;
- default:
- sb.append(c);
- }
- }
- return sb.toString();
- }
-
- String visitRef(CPRefInfo info, Void p) {
- String cn = getCheckedClassName(info);
- String nat;
- try {
- nat = info.getNameAndTypeInfo().accept(this, p);
- } catch (ConstantPoolException e) {
- nat = e.getMessage();
- }
- return cn + "." + nat;
- }
-
- String getCheckedClassName(CPRefInfo info) {
- try {
- return checkName(info.getClassName());
- } catch (ConstantPoolException e) {
- throw new RuntimeException(e);
- }
- }
- }
- /* If name is a valid binary name, return it; otherwise quote it. */
-
- private static String checkName(String name) {
- if (name == null) {
- return "null";
- }
-
- int len = name.length();
- if (len == 0) {
- return "\"\"";
- }
-
- int cc = '/';
- int cp;
- for (int k = 0; k < len; k += Character.charCount(cp)) {
- cp = name.codePointAt(k);
- if ((cc == '/' && !Character.isJavaIdentifierStart(cp)) || (cp != '/' && !Character.isJavaIdentifierPart(cp))) {
- return "\"" + name + "\"";
- }
- cc = cp;
- }
- return name;
- }
-
- String tagName(int index) {
- try {
- int tag = cpool.get(index).getTag();
- switch (tag) {
- case CONSTANT_Utf8:
- return "Utf8";
- case CONSTANT_Integer:
- return "int";
- case CONSTANT_Float:
- return "float";
- case CONSTANT_Long:
- return "long";
- case CONSTANT_Double:
- return "double";
- case CONSTANT_Class:
- return "class";
- case CONSTANT_String:
- return "String";
- case CONSTANT_Fieldref:
- return "Field";
- case CONSTANT_Methodref:
- return "Method";
- case CONSTANT_InterfaceMethodref:
- return "InterfaceMethod";
- case CONSTANT_NameAndType:
- return "NameAndType";
- default:
- return "(unknown tag)";
- }
- } catch (InvalidIndex e) {
- throw new RuntimeException(e);
- }
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/DependencyConfig.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.classanalyzer;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.List;
-
-/**
- * Config file specifying additional dependency
- * Each line consists of:
- * <tag> <classname> -> <value>
- * where <tag> can be:
- * @ClassForName and <value> is its dependency
- * @Provider and <value> is the service name
- * @Providers and <value> is the list of the service names
- *
- * @author Mandy Chung
- */
-public class DependencyConfig {
- private DependencyConfig() {
- }
-
- static void parse(List<String> configs) throws IOException {
- for (String s : configs) {
- parse(s);
- }
- }
-
- private static void parse(String config) throws IOException {
- // parse configuration file
- FileInputStream in = new FileInputStream(config);
- try {
- BufferedReader reader = new BufferedReader(new InputStreamReader(in));
- String line;
- int lineNumber = 0;
- String type = null;
- while ((line = reader.readLine()) != null) {
- lineNumber++;
- line = line.trim();
- if (line.length() == 0 || line.charAt(0) == '#') {
- continue;
- }
- if (line.charAt(0) == '@') {
- if (AnnotatedDependency.isValidType(line)) {
- type = line;
- continue;
- } else {
- throw new RuntimeException(config + ", line " +
- lineNumber + ", invalid annotation type.");
- }
- }
- String[] s = line.split("\\s+");
- if (s.length < 3 || !s[1].equals("->")) {
- throw new RuntimeException(config + ", line " +
- lineNumber + ", is malformed");
- }
- String classname = s[0].trim();
- String value = s[2].trim();
-
- Klass k = Klass.findKlass(classname);
- if (k == null) {
- // System.out.println("Warning: " + classname + " cannot be found");
- continue;
- }
- AnnotatedDependency dep = AnnotatedDependency.newAnnotatedDependency(type, value, k);
- if (dep == null) {
- throw new RuntimeException(config + ", line " +
- lineNumber + ", is malformed. Fail to construct the dependency.");
- }
- }
-
- } finally {
- in.close();
- }
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/Klass.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,357 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-package com.sun.classanalyzer;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import com.sun.tools.classfile.AccessFlags;
-
-/**
- *
- * @author Mandy Chung
- */
-public class Klass implements Comparable<Klass> {
- private final String classname;
- private final String packagename;
- private Module module;
- private boolean isJavaLangObject;
- private String[] paths;
- private Map<String, Set<Method>> methods;
- private AccessFlags accessFlags;
- private long filesize;
-
- private SortedMap<Klass, Set<ResolutionInfo>> deps;
- private SortedMap<Klass, Set<ResolutionInfo>> referrers;
- private List<AnnotatedDependency> annotatedDeps;
- private Set<String> classForNameRefs;
-
- private Klass(String classname) {
- this.classname = classname;
- this.paths = classname.replace('.', '/').split("/");
- this.isJavaLangObject = classname.equals("java.lang.Object");
- this.deps = new TreeMap<Klass, Set<ResolutionInfo>>();
- this.referrers = new TreeMap<Klass, Set<ResolutionInfo>>();
- this.methods = new HashMap<String, Set<Method>>();
- this.annotatedDeps = new ArrayList<AnnotatedDependency>();
- this.classForNameRefs = new TreeSet<String>();
-
- int pos = classname.lastIndexOf('.');
- this.packagename = (pos > 0) ? classname.substring(0, pos) : "<unnamed>";
- }
-
- String getBasename() {
- return paths[paths.length - 1];
- }
-
- String getClassName() {
- return classname;
- }
-
- String getPackageName() {
- return packagename;
- }
-
- String getClassFilePathname() {
- StringBuilder sb = new StringBuilder(paths[0]);
- for (int i = 1; i < paths.length; i++) {
- String p = paths[i];
- sb.append(File.separator).append(p);
- }
- return sb.append(".class").toString();
- }
-
- boolean isPublic() {
- return accessFlags == null || accessFlags.is(AccessFlags.ACC_PUBLIC);
- }
-
- Module getModule() {
- return module;
- }
-
- void setModule(Module m) {
- if (module != null) {
- throw new RuntimeException("Module for " + this + " already set");
- }
- this.module = m;
- }
-
- Set<Klass> getReferencedClasses() {
- return deps.keySet();
- }
-
- Set<Klass> getReferencingClasses() {
- return referrers.keySet();
- }
-
- void setAccessFlags(int flags) {
- this.accessFlags = new AccessFlags(flags);
- }
-
- void setFileSize(long size) {
- this.filesize = size;
- }
-
- long getFileSize() {
- return this.filesize;
- }
-
- boolean exists() {
- return filesize > 0;
- }
-
- boolean skip(Klass k) {
- // skip if either class is a root or same class
- return k.isJavaLangObject || this == k || k.classname.equals(classname);
- }
-
- void addDep(Method callee, ResolutionInfo resInfo) {
- addDep(callee.getKlass(), resInfo);
- }
-
- void addDep(Klass ref, ResolutionInfo ri) {
- if (skip(ref)) {
- return;
- }
- Set<ResolutionInfo> resInfos;
- if (!deps.containsKey(ref)) {
- resInfos = new TreeSet<ResolutionInfo>();
- deps.put(ref, resInfos);
- } else {
- resInfos = deps.get(ref);
- }
- resInfos.add(ri);
- }
-
- void addReferrer(Method caller, ResolutionInfo resInfo) {
- addReferrer(caller.getKlass(), resInfo);
- }
-
- void addReferrer(Klass k, ResolutionInfo ri) {
- if (skip(k)) {
- return;
- }
- Set<ResolutionInfo> resInfos;
- if (!referrers.containsKey(k)) {
- resInfos = new TreeSet<ResolutionInfo>();
- referrers.put(k, resInfos);
- } else {
- resInfos = referrers.get(k);
- }
- resInfos.add(ri);
- }
-
- Method getMethod(String name) {
- return getMethod(name, "");
- }
-
- Method getMethod(String name, String signature) {
- Set<Method> set;
- if (methods.containsKey(name)) {
- set = methods.get(name);
- } else {
- set = new TreeSet<Method>();
- methods.put(name, set);
- }
-
- for (Method m : set) {
- if (m.getName().equals(name) && m.getSignature().equals(signature)) {
- return m;
- }
- }
- Method m = new Method(this, name, signature);
- set.add(m);
- return m;
- }
-
- @Override
- public String toString() {
- return classname;
- }
-
- @Override
- public int compareTo(Klass o) {
- return classname.compareTo(o.classname);
- }
-
- void addAnnotatedDep(AnnotatedDependency dep) {
- annotatedDeps.add(dep);
- }
-
- void addClassForNameReference(String method) {
- classForNameRefs.add(method);
- }
-
- List<AnnotatedDependency> getAnnotatedDeps() {
- return annotatedDeps;
- }
-
- private static Map<String, Klass> classes = new TreeMap<String, Klass>();
- static Set<Klass> getAllClasses() {
- return new TreeSet<Klass>(classes.values());
- }
-
- static Klass findKlassFromPathname(String filename) {
- String name = filename;
- if (filename.endsWith(".class")) {
- name = filename.substring(0, filename.length() - 6);
- }
-
- // trim ".class"
- name = name.replace('/', '.');
- for (Klass k : classes.values()) {
- if (name.endsWith(k.getClassName())) {
- return k;
- }
- }
- return null;
- }
-
- static Klass findKlass(String classname) {
- return classes.get(classname);
- }
-
- static Klass getKlass(String name) {
- Klass k;
- String classname = name.replace('/', '.');
- if (classname.charAt(classname.length() - 1) == ';') {
- classname = classname.substring(0, classname.length() - 1);
- }
- if (classes.containsKey(classname)) {
- k = classes.get(classname);
- } else {
- k = new Klass(classname);
- classes.put(classname, k);
- }
- return k;
- }
-
- public class Method implements Comparable<Method> {
-
- private final Klass k;
- private final String method;
- private final String signature;
- private long codeLength;
- // non-primitive types only
- private final List<Klass> argTypes;
- private final Klass returnType;
- boolean isAbstract = false;
- boolean marked = false;
-
- public Method(Klass k, String method, String signature) {
- this(k, method, signature, null, null);
- }
-
- public Method(Klass k, String method, String signature, Klass returnType, List<Klass> argTypes) {
- this.k = k;
- this.method = method;
- this.signature = signature;
- this.argTypes = argTypes;
- this.returnType = returnType;
- this.codeLength = 0;
- }
-
- public Klass getKlass() {
- return k;
- }
-
- public String getName() {
- return method;
- }
-
- public String getSignature() {
- return signature;
- }
-
- public Klass getReturnType() {
- return returnType;
- }
-
- public List<Klass> argTypes() {
- return argTypes;
- }
-
- public void setCodeLength(long len) {
- this.codeLength = len;
- }
-
- public long getCodeLength() {
- return codeLength;
- }
-
- @Override
- public boolean equals(Object o) {
- if (o instanceof Method) {
- return compareTo((Method) o) == 0;
- } else {
- return false;
- }
- }
-
- @Override
- public int hashCode() {
- int hash = 3;
- hash = 71 * hash + (this.k != null ? this.k.hashCode() : 0);
- hash = 71 * hash + (this.method != null ? this.method.hashCode() : 0);
- return hash;
- }
-
- @Override
- public String toString() {
- if (signature.isEmpty()) {
- return k.classname + "." + method;
- } else {
- return signature;
- }
- }
-
- public String toHtmlString() {
- return toString().replace("<", "<").replace(">", ">");
- }
-
- boolean isClinit() {
- return method.equals("<clinit>");
- }
-
- public int compareTo(Method m) {
- if (k == m.getKlass()) {
- if (method.equals(m.method)) {
- return signature.compareTo(m.signature);
- } else {
- return method.compareTo(m.method);
- }
- } else {
- return k.compareTo(m.getKlass());
- }
- }
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/Module.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,693 +0,0 @@
-/*
- * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-package com.sun.classanalyzer;
-
-import com.sun.classanalyzer.AnnotatedDependency.OptionalDependency;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.ArrayDeque;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Deque;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-/**
- *
- * @author Mandy Chung
- */
-public class Module implements Comparable<Module> {
-
- private static Map<String, Module> modules = new LinkedHashMap<String, Module>();
-
- public static Module addModule(ModuleConfig config) {
- String name = config.module;
- if (modules.containsKey(name)) {
- throw new RuntimeException("module \"" + name + "\" already exists");
- }
-
- Module m = new Module(config);
- modules.put(name, m);
- return m;
- }
-
- public static Module findModule(String name) {
- return modules.get(name);
- }
-
- static Collection<Module> getAllModules() {
- return Collections.unmodifiableCollection(modules.values());
- }
- private final String name;
- private final ModuleConfig config;
- private final Set<Klass> classes;
- private final Set<ResourceFile> resources;
- private final Set<Reference> unresolved;
- private final Set<Dependency> dependents;
- private final Map<String, PackageInfo> packages;
- private final Set<Module> members;
- private Module group;
- private boolean isBaseModule;
-
- private Module(ModuleConfig config) {
- this.name = config.module;
- this.isBaseModule = config.isBase;
- this.classes = new TreeSet<Klass>();
- this.resources = new TreeSet<ResourceFile>();
- this.config = config;
- this.unresolved = new HashSet<Reference>();
- this.dependents = new TreeSet<Dependency>();
- this.packages = new TreeMap<String, PackageInfo>();
- this.members = new TreeSet<Module>();
- this.group = this; // initialize to itself
- }
-
- String name() {
- return name;
- }
-
- Module group() {
- return group;
- }
-
- boolean isBase() {
- return isBaseModule;
- }
-
- Set<Module> members() {
- return members;
- }
-
- boolean contains(Klass k) {
- return k != null && classes.contains(k);
- }
-
- boolean isEmpty() {
- return classes.isEmpty() && resources.isEmpty();
- }
-
- /**
- * Returns an Iterable of Dependency, only one for each dependent
- * module of the strongest dependency (i.e.
- * hard static > hard dynamic > optional static > optional dynamic
- */
- Iterable<Dependency> dependents() {
- Map<Module, Dependency> deps = new LinkedHashMap<Module, Dependency>();
- for (Dependency dep : dependents) {
- Dependency d = deps.get(dep.module);
- if (d == null || dep.compareTo(d) > 0) {
- deps.put(dep.module, dep);
- }
- }
- return deps.values();
- }
-
- @Override
- public int compareTo(Module o) {
- if (o == null) {
- return -1;
- }
- return name.compareTo(o.name);
- }
-
- @Override
- public String toString() {
- return name;
- }
-
- void addKlass(Klass k) {
- classes.add(k);
- k.setModule(this);
-
- // update package statistics
- String pkg = k.getPackageName();
- PackageInfo pkginfo = packages.get(pkg);
- if (pkginfo == null) {
- pkginfo = new PackageInfo(pkg);
- packages.put(pkg, pkginfo);
- }
- if (k.exists()) {
- // only count the class that is parsed
- pkginfo.add(k.getFileSize());
- }
- }
-
- void addResource(ResourceFile res) {
- resources.add(res);
- res.setModule(this);
- }
-
- void processRootsAndReferences() {
- // start with the root set
- Deque<Klass> pending = new ArrayDeque<Klass>();
- for (Klass k : Klass.getAllClasses()) {
- if (k.getModule() != null) {
- continue;
- }
- String classname = k.getClassName();
- if (config.matchesRoot(classname) && !config.isExcluded(classname)) {
- addKlass(k);
- pending.add(k);
- }
- }
-
- // follow all references
- Klass k;
- while ((k = pending.poll()) != null) {
- if (!classes.contains(k)) {
- addKlass(k);
- }
- for (Klass other : k.getReferencedClasses()) {
- Module otherModule = other.getModule();
- if (otherModule != null && otherModule != this) {
- // this module is dependent on otherModule
- addDependency(k, other);
- continue;
- }
-
- if (!classes.contains(other)) {
- if (config.isExcluded(other.getClassName())) {
- // reference to an excluded class
- unresolved.add(new Reference(k, other));
- } else {
- pending.add(other);
- }
- }
- }
- }
-
- // add other matching classes that don't require dependency analysis
- for (Klass c : Klass.getAllClasses()) {
- if (c.getModule() == null) {
- String classname = c.getClassName();
- if (config.matchesIncludes(classname) && !config.isExcluded(classname)) {
- addKlass(c);
- // dependencies
- for (Klass other : c.getReferencedClasses()) {
- Module otherModule = other.getModule();
- if (otherModule == null) {
- unresolved.add(new Reference(c, other));
- } else {
- if (otherModule != this) {
- // this module is dependent on otherModule
- addDependency(c, other);
- }
- }
- }
- }
- }
- }
-
-
- // add other matching classes that don't require dependency analysis
- for (ResourceFile res : ResourceFile.getAllResources()) {
- if (res.getModule() == null) {
- String name = res.getName();
- if (config.matchesIncludes(name) && !config.isExcluded(name)) {
- addResource(res);
- }
- }
- }
- }
-
- void addDependency(Klass from, Klass to) {
- Dependency dep = new Dependency(from, to);
- dependents.add(dep);
- }
-
- void fixupDependencies() {
- // update dependencies for classes that were allocated to modules after
- // this module was processed.
- for (Reference ref : unresolved) {
- Module m = ref.referree().getModule();
- if (m == null || m != this) {
- addDependency(ref.referrer, ref.referree);
- }
- }
-
- fixupAnnotatedDependencies();
- }
-
- private void fixupAnnotatedDependencies() {
- // add dependencies that this klass may depend on due to the AnnotatedDependency
- dependents.addAll(AnnotatedDependency.getDependencies(this));
- }
-
- boolean isModuleDependence(Klass k) {
- Module m = k.getModule();
- return m == null || (!classes.contains(k) && !m.isBase());
- }
-
- Module getModuleDependence(Klass k) {
- if (isModuleDependence(k)) {
- Module m = k.getModule();
- if (group == this && m != null) {
- // top-level module
- return m.group;
- } else {
- return m;
- }
- }
- return null;
- }
-
- <P> void visit(Set<Module> visited, Visitor<P> visitor, P p) {
- if (!visited.contains(this)) {
- visited.add(this);
- visitor.preVisit(this, p);
- for (Module m : members) {
- m.visit(visited, visitor, p);
- visitor.postVisit(this, m, p);
- }
- } else {
- throw new RuntimeException("Cycle detected: module " + this.name);
- }
- }
-
- void addMember(Module m) {
- // merge class list
- for (Klass k : m.classes) {
- classes.add(k);
- }
-
- // merge resource list
- for (ResourceFile res : m.resources) {
- resources.add(res);
- }
-
- // merge the package statistics
- for (PackageInfo pinfo : m.getPackageInfos()) {
- String packageName = pinfo.pkgName;
- PackageInfo pkginfo = packages.get(packageName);
- if (pkginfo == null) {
- pkginfo = new PackageInfo(packageName);
- packages.put(packageName, pkginfo);
- }
- pkginfo.add(pinfo);
- }
- }
-
- static void buildModuleMembers() {
- // set up module member relationship
- for (Module m : modules.values()) {
- m.group = m; // initialize to itself
- for (String name : m.config.members()) {
- Module member = modules.get(name);
- if (member == null) {
- throw new RuntimeException("module \"" + name + "\" doesn't exist");
- }
- m.members.add(member);
- }
- }
-
- // set up the top-level module
- Visitor<Module> groupSetter = new Visitor<Module>() {
-
- public void preVisit(Module m, Module p) {
- m.group = p;
- if (p.isBaseModule) {
- // all members are also base
- m.isBaseModule = true;
- }
- }
-
- public void postVisit(Module m, Module child, Module p) {
- // nop - breadth-first search
- }
- };
-
- // propagate the top-level module to all its members
- for (Module p : modules.values()) {
- for (Module m : p.members) {
- if (m.group == m) {
- m.visit(new TreeSet<Module>(), groupSetter, p);
- }
- }
- }
-
- Visitor<Module> mergeClassList = new Visitor<Module>() {
-
- public void preVisit(Module m, Module p) {
- // nop - depth-first search
- }
-
- public void postVisit(Module m, Module child, Module p) {
- m.addMember(child);
- }
- };
-
- Set<Module> visited = new TreeSet<Module>();
- for (Module m : modules.values()) {
- if (m.group() == m) {
- if (m.members().size() > 0) {
- // merge class list from all its members
- m.visit(visited, mergeClassList, m);
- }
-
- // clear the dependencies before fixup
- m.dependents.clear();
-
- // fixup dependencies
- for (Klass k : m.classes) {
- for (Klass other : k.getReferencedClasses()) {
- if (m.isModuleDependence(other)) {
- // this module is dependent on otherModule
- m.addDependency(k, other);
- }
- }
- }
-
- // add dependencies that this klass may depend on due to the AnnotatedDependency
- m.fixupAnnotatedDependencies();
- }
- }
- }
-
- class PackageInfo implements Comparable {
-
- final String pkgName;
- int count;
- long filesize;
-
- PackageInfo(String name) {
- this.pkgName = name;
- this.count = 0;
- this.filesize = 0;
- }
-
- void add(PackageInfo pkg) {
- this.count += pkg.count;
- this.filesize += pkg.filesize;
- }
-
- void add(long size) {
- count++;
- filesize += size;
-
- }
-
- @Override
- public int compareTo(Object o) {
- return pkgName.compareTo(((PackageInfo) o).pkgName);
- }
- }
-
- Set<PackageInfo> getPackageInfos() {
- return new TreeSet<PackageInfo>(packages.values());
- }
-
- void printSummaryTo(String output) throws IOException {
- PrintWriter writer = new PrintWriter(output);
- try {
- long total = 0L;
- int count = 0;
- writer.format("%10s\t%10s\t%s\n", "Bytes", "Classes", "Package name");
- for (String pkg : packages.keySet()) {
- PackageInfo info = packages.get(pkg);
- if (info.count > 0) {
- writer.format("%10d\t%10d\t%s\n", info.filesize, info.count, pkg);
- total += info.filesize;
- count += info.count;
- }
- }
-
- writer.format("\nTotal: %d bytes (uncompressed) %d classes\n", total, count);
- } finally {
- writer.close();
- }
-
- }
-
- void printClassListTo(String output) throws IOException {
- // no file created if the module doesn't have any class nor resource
- if (isEmpty()) {
- return;
- }
-
- PrintWriter writer = new PrintWriter(output);
- try {
- for (Klass c : classes) {
- if (c.exists()) {
- writer.format("%s\n", c.getClassFilePathname());
- } else {
- trace("%s in module %s missing\n", c, this);
- }
- }
-
- } finally {
- writer.close();
- }
- }
-
- void printResourceListTo(String output) throws IOException {
- // no file created if the module doesn't have any resource file
- if (resources.isEmpty()) {
- return;
- }
-
- PrintWriter writer = new PrintWriter(output);
- try {
- for (ResourceFile res : resources) {
- writer.format("%s\n", res.getPathname());
- }
- } finally {
- writer.close();
- }
- }
-
- void printDependenciesTo(String output, boolean showDynamic) throws IOException {
- // no file created if the module doesn't have any class
- if (isEmpty()) {
- return;
- }
-
- PrintWriter writer = new PrintWriter(output);
- try {
- // classes that this klass may depend on due to the AnnotatedDependency
- Map<Reference, Set<AnnotatedDependency>> annotatedDeps = AnnotatedDependency.getReferences(this);
-
- for (Klass klass : classes) {
- Set<Klass> references = klass.getReferencedClasses();
- for (Klass other : references) {
- String classname = klass.getClassName();
- boolean optional = OptionalDependency.isOptional(klass, other);
- if (optional) {
- classname = "[optional] " + classname;
- }
-
- Module m = getModuleDependence(other);
- if (m != null || other.getModule() == null) {
- writer.format("%-40s -> %s (%s)", classname, other, m);
- Reference ref = new Reference(klass, other);
- if (annotatedDeps.containsKey(ref)) {
- for (AnnotatedDependency ad : annotatedDeps.get(ref)) {
- writer.format(" %s", ad.getTag());
- }
- // printed; so remove the dependency from the annotated deps list
- annotatedDeps.remove(ref);
- }
- writer.format("\n");
- }
- }
- }
-
-
- // print remaining dependencies specified in AnnotatedDependency list
- if (annotatedDeps.size() > 0) {
- for (Map.Entry<Reference, Set<AnnotatedDependency>> entry : annotatedDeps.entrySet()) {
- Reference ref = entry.getKey();
- Module m = getModuleDependence(ref.referree);
- if (m != null || ref.referree.getModule() == null) {
- String classname = ref.referrer.getClassName();
- boolean optional = true;
- boolean dynamic = true;
- String tag = "";
- for (AnnotatedDependency ad : entry.getValue()) {
- if (optional && !ad.isOptional()) {
- optional = false;
- tag = ad.getTag();
- }
- if (!ad.isDynamic()) {
- dynamic = false;
- }
- }
- if (!showDynamic && optional && dynamic) {
- continue;
- }
- if (optional) {
- if (dynamic) {
- classname = "[dynamic] " + classname;
- } else {
- classname = "[optional] " + classname;
- }
- }
- writer.format("%-40s -> %s (%s) %s%n", classname, ref.referree, m, tag);
- }
- }
- }
-
- } finally {
- writer.close();
- }
- }
-
- static class Dependency implements Comparable<Dependency> {
-
- final Module module;
- final boolean optional;
- final boolean dynamic;
-
- Dependency(Klass from, Klass to) {
- // static dependency
- this.module = to.getModule() != null ? to.getModule().group() : null;
- this.optional = OptionalDependency.isOptional(from, to);
- this.dynamic = false;
- }
-
- Dependency(Module m, boolean optional, boolean dynamic) {
- this.module = m != null ? m.group() : null;
- this.optional = optional;
- this.dynamic = dynamic;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof Dependency)) {
- return false;
- }
- if (this == obj) {
- return true;
- }
-
- Dependency d = (Dependency) obj;
- if (this.module != d.module) {
- return false;
- } else {
- return this.optional == d.optional && this.dynamic == d.dynamic;
- }
- }
-
- @Override
- public int hashCode() {
- int hash = 3;
- hash = 19 * hash + (this.module != null ? this.module.hashCode() : 0);
- hash = 19 * hash + (this.optional ? 1 : 0);
- hash = 19 * hash + (this.dynamic ? 1 : 0);
- return hash;
- }
-
- @Override
- public int compareTo(Dependency d) {
- if (this.equals(d)) {
- return 0;
- }
-
- // Hard static > hard dynamic > optional static > optional dynamic
- if (this.module == d.module) {
- if (this.optional == d.optional) {
- return this.dynamic ? -1 : 1;
- } else {
- return this.optional ? -1 : 1;
- }
- } else if (this.module != null && d.module != null) {
- return (this.module.compareTo(d.module));
- } else {
- return (this.module == null) ? -1 : 1;
- }
- }
-
- @Override
- public String toString() {
- String s = module.name();
- if (dynamic && optional) {
- s += " (dynamic)";
- } else if (optional) {
- s += " (optional)";
- }
- return s;
- }
- }
-
- static class Reference implements Comparable<Reference> {
-
- private final Klass referrer, referree;
-
- Reference(Klass referrer, Klass referree) {
- this.referrer = referrer;
- this.referree = referree;
- }
-
- Klass referrer() {
- return referrer;
- }
-
- Klass referree() {
- return referree;
- }
-
- @Override
- public int hashCode() {
- return referrer.hashCode() ^ referree.hashCode();
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof Reference)) {
- return false;
- }
- if (this == obj) {
- return true;
- }
-
- Reference r = (Reference) obj;
- return (this.referrer.equals(r.referrer) &&
- this.referree.equals(r.referree));
- }
-
- @Override
- public int compareTo(Reference r) {
- int ret = referrer.compareTo(r.referrer);
- if (ret == 0) {
- ret = referree.compareTo(r.referree);
- }
- return ret;
- }
- }
-
- interface Visitor<P> {
-
- public void preVisit(Module m, P param);
-
- public void postVisit(Module m, Module child, P param);
- }
- private static boolean traceOn = System.getProperty("classanalyzer.debug") != null;
-
- private static void trace(String format, Object... params) {
- System.err.format(format, params);
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/ModuleConfig.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,562 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.classanalyzer;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.regex.Pattern;
-
-/**
- *
- * @author Mandy Chung
- */
-public class ModuleConfig {
-
- private static String baseModuleName = "base";
- private final Set<String> roots;
- private final Set<String> includes;
- private final Filter filter;
- private List<String> members;
- final String module;
- final boolean isBase;
-
- private ModuleConfig(String name) throws IOException {
- this.roots = new TreeSet<String>();
- this.includes = new TreeSet<String>();
- this.module = name;
- this.isBase = name.equals(baseModuleName);
- this.filter = new Filter(this);
- }
-
- List<String> members() {
- if (members == null) {
- members = new LinkedList<String>();
-
- for (String s : includes) {
- if (!s.contains("*") && Module.findModule(s) != null) {
- // module member
- members.add(s);
- }
- }
- }
- return members;
- }
-
- boolean matchesRoot(String name) {
- for (String pattern : roots) {
- if (matches(name, pattern)) {
- return true;
- }
- }
- return false;
- }
-
- boolean matchesIncludes(String name) {
- for (String pattern : includes) {
- if (matches(name, pattern)) {
- return true;
- }
- }
- return false;
- }
-
- boolean isExcluded(String name) {
- return filter.isExcluded(name);
- }
-
- boolean matchesPackage(String packageName, String pattern) {
- int pos = pattern.lastIndexOf('.');
- String pkg = pos > 0 ? pattern.substring(0, pos) : "<unnamed>";
- return packageName.equals(pkg);
- }
-
-
- boolean matches(String name, String pattern) {
- if (pattern.contains("**") && !pattern.endsWith("**")) {
- throw new UnsupportedOperationException("Not yet implemented");
- }
-
- String javaName = name;
-
- boolean isResourceFile = name.indexOf('/') >= 0;
- if (isResourceFile) {
- // it's a resource file; convert the name as a java
- javaName = name.replace('/', '.');
- }
- if (pattern.indexOf('/') < 0) {
- // if the pattern doesn't contain '/
- return matchesJavaName(javaName, pattern);
- } else {
- if (isResourceFile) {
- // the pattern is for matching resource file
- return matchesNameWithSlash(name, pattern);
- } else {
- return false;
- }
- }
- }
-
- boolean matchesJavaName(String name, String pattern) {
- int pos = name.lastIndexOf('.');
- String packageName = pos > 0 ? name.substring(0, pos) : "<unnamed>";
- if (pattern.endsWith("**")) {
- String p = pattern.substring(0, pattern.length() - 2);
- return name.startsWith(p);
- } else if (pattern.endsWith("*") && pattern.indexOf('*') == pattern.lastIndexOf('*')) {
- if (matchesPackage(packageName, pattern)) {
- // package name has to be exact match
- String p = pattern.substring(0, pattern.length() - 1);
- return name.startsWith(p);
- } else {
- return false;
- }
- } else if (pattern.contains("*")) {
- String basename = pos > 0 ? name.substring(pos + 1, name.length()) : name;
- pos = pattern.indexOf('*');
- String prefix = pattern.substring(0, pos);
- String suffix = pattern.substring(pos + 1, pattern.length());
- if (name.startsWith(prefix) && matchesPackage(packageName, prefix)) {
- // package name has to be exact match
- if (suffix.contains("*")) {
- return name.matches(convertToRegex(pattern));
- } else {
- return basename.endsWith(suffix);
- }
- } else {
- // we don't support wildcard be used in the package name
- return false;
- }
- } else {
- // exact match or inner class
- return name.equals(pattern) || name.startsWith(pattern + "$");
- }
- }
-
- boolean matchesNameWithSlash(String name, String pattern) {
- if (pattern.endsWith("**")) {
- String p = pattern.substring(0, pattern.length() - 2);
- return name.startsWith(p);
- } else if (pattern.contains("*")) {
- int pos = pattern.indexOf('*');
- String prefix = pattern.substring(0, pos);
- String suffix = pattern.substring(pos + 1, pattern.length());
- String tail = name.substring(pos, name.length());
-
- if (!name.startsWith(prefix)) {
- // prefix has to exact match
- return false;
- }
-
- if (pattern.indexOf('*') == pattern.lastIndexOf('*')) {
- // exact match prefix with no '/' in the tail string
- String wildcard = tail.substring(0, tail.length() - suffix.length());
- return tail.indexOf('/') < 0 && tail.endsWith(suffix);
- }
-
- if (suffix.contains("*")) {
- return matchesNameWithSlash(tail, suffix);
- } else {
- // tail ends with the suffix while no '/' in the wildcard matched string
- String any = tail.substring(0, tail.length() - suffix.length());
- return tail.endsWith(suffix) && any.indexOf('/') < 0;
- }
- } else {
- // exact match
- return name.equals(pattern);
- }
- }
-
- private String convertToRegex(String pattern) {
- StringBuilder sb = new StringBuilder();
- int i = 0;
- int index = 0;
- int plen = pattern.length();
- while (i < plen) {
- char p = pattern.charAt(i);
- if (p == '*') {
- sb.append("(").append(pattern.substring(index, i)).append(")");
- if (i + 1 < plen && pattern.charAt(i + 1) == '*') {
- sb.append(".*");
- index = i + 2;
- } else {
- sb.append("[^\\.]*");
- index = i + 1;
- }
- }
- i++;
- }
- if (index < plen) {
- sb.append("(").append(pattern.substring(index, plen)).append(")");
- }
- return sb.toString();
- }
-
- static class Filter {
-
- final ModuleConfig config;
- final Set<String> exclude = new TreeSet<String>();
- final Set<String> allow = new TreeSet<String>();
-
- Filter(ModuleConfig config) {
- this.config = config;
- }
-
- Filter exclude(String pattern) {
- exclude.add(pattern);
- return this;
- }
-
- Filter allow(String pattern) {
- allow.add(pattern);
- return this;
- }
-
- String allowedBy(String name) {
- String allowedBy = null;
- for (String pattern : allow) {
- if (config.matches(name, pattern)) {
- if (name.equals(pattern)) {
- return pattern; // exact match
- }
- if (allowedBy == null) {
- allowedBy = pattern;
- } else {
- if (pattern.length() > allowedBy.length()) {
- allowedBy = pattern;
- }
- }
- }
- }
- return allowedBy;
- }
-
- String excludedBy(String name) {
- String allowedBy = allowedBy(name);
- String excludedBy = null;
-
- if (allowedBy != null && name.equals(allowedBy)) {
- return null; // exact match
- }
- for (String pattern : exclude) {
- if (config.matches(name, pattern)) {
- // not matched by allowed rule or exact match
- if (allowedBy == null || name.equals(pattern)) {
- return pattern;
- }
- if (excludedBy == null) {
- excludedBy = pattern;
- } else {
- if (pattern.length() > excludedBy.length()) {
- excludedBy = pattern;
- }
- }
- }
- }
- return excludedBy;
- }
-
- boolean isExcluded(String name) {
- String allowedBy = allowedBy(name);
- String excludedBy = excludedBy(name);
-
- if (excludedBy == null) {
- return false;
- }
- // not matched by allowed rule or exact match
- if (allowedBy == null || name.equals(excludedBy)) {
- return true;
- }
-
- if (allowedBy == null) {
- return true;
- }
- if (allowedBy != null &&
- excludedBy.length() > allowedBy.length()) {
- return true;
- }
- return false;
- }
- }
-
- private static String trimComment(String line) {
- StringBuilder sb = new StringBuilder();
-
- int pos = 0;
- while (pos >= 0 && pos < line.length()) {
- int c1 = line.indexOf("//", pos);
- if (c1 > 0 && !Character.isWhitespace(line.charAt(c1-1))) {
- // not a comment
- c1 = -1;
- }
-
- int c2 = line.indexOf("/*", pos);
- if (c2 > 0 && !Character.isWhitespace(line.charAt(c2-1))) {
- // not a comment
- c2 = -1;
- }
-
- int c = line.length();
- int n = line.length();
- if (c1 >= 0 || c2 >= 0) {
- if (c1 >= 0) {
- c = c1;
- }
- if (c2 >= 0 && c2 < c) {
- c = c2;
- }
- int c3 = line.indexOf("*/", c2 + 2);
- if (c == c2 && c3 > c2) {
- n = c3 + 2;
- }
- }
- if (c > 0) {
- if (sb.length() > 0) {
- // add a whitespace if multiple comments on one line
- sb.append(" ");
- }
- sb.append(line.substring(pos, c));
- }
- pos = n;
- }
- return sb.toString();
- }
-
- private static boolean beginBlockComment(String line) {
- int pos = 0;
- while (pos >= 0 && pos < line.length()) {
- int c = line.indexOf("/*", pos);
- if (c < 0) {
- return false;
- }
-
- if (c > 0 && !Character.isWhitespace(line.charAt(c-1))) {
- return false;
- }
-
- int c1 = line.indexOf("//", pos);
- if (c1 >= 0 && c1 < c) {
- return false;
- }
-
- int c2 = line.indexOf("*/", c + 2);
- if (c2 < 0) {
- return true;
- }
- pos = c + 2;
- }
- return false;
- }
-
- static void setBaseModule(String name) {
- baseModuleName = name;
- }
- // TODO: we shall remove "-" from the regex once we define
- // the naming convention for the module names without dashes
- static final Pattern classNamePattern = Pattern.compile("[\\w\\.\\*_$-/]+");
-
- static List<ModuleConfig> readConfigurationFile(String file) throws IOException {
- List<ModuleConfig> result = new ArrayList<ModuleConfig>();
- // parse configuration file
- FileInputStream in = new FileInputStream(file);
- try {
- BufferedReader reader = new BufferedReader(new InputStreamReader(in));
- String line;
-
- int lineNumber = 0;
- boolean inRoots = false;
- boolean inIncludes = false;
- boolean inAllows = false;
- boolean inExcludes = false;
- boolean inBlockComment = false;
- ModuleConfig config = null;
-
- while ((line = reader.readLine()) != null) {
- lineNumber++;
-
- if (inBlockComment) {
- int c = line.indexOf("*/");
- if (c >= 0) {
- line = line.substring(c + 2, line.length());
- inBlockComment = false;
- } else {
- // skip lines until end of comment block
- continue;
- }
- }
-
- inBlockComment = beginBlockComment(line);
-
- line = trimComment(line).trim();
- // ignore empty lines
- if (line.length() == 0) {
- continue;
- }
-
- String values;
- if (inRoots || inIncludes || inExcludes || inAllows) {
- values = line;
- } else {
- String[] s = line.split("\\s+");
- String keyword = s[0].trim();
- if (keyword.equals("module")) {
- if (s.length != 3 || !s[2].trim().equals("{")) {
- throw new RuntimeException(file + ", line " +
- lineNumber + ", is malformed");
- }
- config = new ModuleConfig(s[1].trim());
- result.add(config);
- // switch to a new module; so reset the flags
- inRoots = false;
- inIncludes = false;
- inExcludes = false;
- inAllows = false;
- continue;
- } else if (keyword.equals("roots")) {
- inRoots = true;
- } else if (keyword.equals("include")) {
- inIncludes = true;
- } else if (keyword.equals("exclude")) {
- inExcludes = true;
- } else if (keyword.equals("allow")) {
- inAllows = true;
- } else if (keyword.equals("}")) {
- if (config == null || s.length != 1) {
- throw new RuntimeException(file + ", line " +
- lineNumber + ", is malformed");
- } else {
- // end of a module
- config = null;
- continue;
- }
- } else {
- throw new RuntimeException(file + ", \"" + keyword + "\" on line " +
- lineNumber + ", is not recognized");
- }
- values = line.substring(keyword.length(), line.length()).trim();
- }
-
- if (config == null) {
- throw new RuntimeException(file + ", module not specified");
- }
-
- int len = values.length();
- if (len == 0) {
- continue;
- }
- char lastchar = values.charAt(len - 1);
- if (lastchar != ',' && lastchar != ';') {
- throw new RuntimeException(file + ", line " +
- lineNumber + ", is malformed:" +
- " ',' or ';' is missing.");
- }
-
- values = values.substring(0, len - 1);
- // parse the values specified for a keyword specified
- for (String s : values.split(",")) {
- s = s.trim();
- if (s.length() > 0) {
- if (!classNamePattern.matcher(s).matches()) {
- throw new RuntimeException(file + ", line " +
- lineNumber + ", is malformed: \"" + s + "\"");
- }
- if (inRoots) {
- config.roots.add(s);
- } else if (inIncludes) {
- config.includes.add(s);
- } else if (inExcludes) {
- config.filter.exclude(s);
- } else if (inAllows) {
- config.filter.allow(s);
- }
-
- }
- }
- if (lastchar == ';') {
- inRoots = false;
- inIncludes = false;
- inExcludes = false;
- inAllows = false;
- }
- }
-
- if (inBlockComment) {
- throw new RuntimeException(file + ", line " +
- lineNumber + ", missing \"*/\" to end a block comment");
- }
- if (config != null) {
- throw new RuntimeException(file + ", line " +
- lineNumber + ", missing \"}\" to end module definition" +
- " for \"" + config.module + "\"");
- }
-
- } finally {
- in.close();
- }
-
- return result;
- }
-
- private String format(String keyword, Collection<String> values) {
- if (values.size() == 0) {
- return "";
- }
-
- StringBuilder sb = new StringBuilder();
- String format = "%4s%-9s";
- String spaces = String.format(format, "", "");
- sb.append(String.format(format, "", keyword));
- int count = 0;
- for (String s : values) {
- if (count > 0) {
- sb.append(",\n").append(spaces);
- } else if (count++ > 0) {
- sb.append(", ");
- }
- sb.append(s);
- }
- if (count > 0) {
- sb.append(";\n");
- }
- return sb.toString();
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("module " + module).append(" {\n");
- sb.append(format("include", includes));
- sb.append(format("root", roots));
- sb.append(format("allow", filter.allow));
- sb.append(format("exclude", filter.exclude));
- sb.append("}\n");
- return sb.toString();
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/ResolutionInfo.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,201 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-package com.sun.classanalyzer;
-
-import com.sun.classanalyzer.Klass.Method;
-
-/**
- *
- * @author mchung
- */
-public class ResolutionInfo implements Comparable<ResolutionInfo> {
-
- enum Type {
-
- REFLECTION("reflection", true),
- NATIVE("native", true),
- INTERFACE("interface", false),
- SUPER("super", false),
- EXPLICIT("explicit", false),
- VERIFICATION("verification", false),
- METHODTRACE("method trace", true),
- CONSTANT_POOL("constant pool", true),
- CHECKED_EXCEPTION("throws", true),
- METHOD("method", true),
- FIELD("field", true),
- EXTENDS("extends", true),
- IMPLEMENTS("implements", true),
- NOINFO("No info", false);
-
- private final String name;
- private final boolean hasInfo;
-
- private Type(String name, boolean hasInfo) {
- this.name = name;
- this.hasInfo = hasInfo;
- }
-
- public String getName() {
- return name;
- }
-
- public boolean hasInfo() {
- return hasInfo;
- }
-
- public static Type getType(String s) {
- if (s.isEmpty()) {
- return NOINFO;
- }
- for (Type t : values()) {
- if (s.equals(t.name)) {
- return t;
- }
- }
- // Need to fix the VM output to add "native"
- // throw new IllegalArgumentException("Invalid ResolutionInfo.type \"" + s + "\"");
- System.out.println("WARNING: Invalid ResolutionInfo.type \"" + s + "\"");
- return null;
- }
- }
- final Klass fromClass;
- final Method method;
- final Klass toClass;
- final int linenumber;
- final Type type;
- final String info;
- private boolean isPublic = false;
-
- private ResolutionInfo(Klass from, Klass to, int linenumber, Type type, String info) {
- this.fromClass = from;
- this.method = null;
- this.toClass = to;
- this.linenumber = linenumber;
- this.type = type;
- this.info = info;
- }
-
- private ResolutionInfo(Klass from, Method m, Klass to, int linenumber, Type type) {
- this.fromClass = from;
- this.method = m;
- this.toClass = to;
- this.linenumber = linenumber;
- this.type = type;
- this.info = m.toString();
- }
-
- public boolean isPublic() {
- return isPublic;
- }
-
- public void setPublicAccess(boolean value) {
- isPublic = value;
- }
- static ResolutionInfo resolved(Klass from, Klass to) {
- return new ResolutionInfo(from, to, 0, Type.NOINFO, "");
- }
-
- static ResolutionInfo resolved(Klass from, Klass to, int linenumber) {
- return new ResolutionInfo(from, to, linenumber, Type.NOINFO, "");
- }
-
- static ResolutionInfo resolved(Klass from, Klass to, int linenumber, String reason) {
- String[] ss = reason.split("\\s+");
- Type type;
- String info;
- if (linenumber == -1) {
- type = Type.NATIVE;
- info = ss[0]; // native method name
- } else {
- info = ss.length == 2 ? ss[1] : "";
- type = Type.getType(ss[0]);
- if (type == null) {
- if (reason.isEmpty()) {
- throw new IllegalArgumentException("Invalid type: " + reason + " (" + ss[0] + ")" + ss.length);
- }
- // assume it's native
- type = Type.NATIVE;
- info = reason.isEmpty() ? ss[0] : reason;
- }
- }
-
- return new ResolutionInfo(from, to, linenumber, type, info);
- }
-
- static ResolutionInfo resolved(Klass from, Klass to, Method callee) {
- return new ResolutionInfo(from, callee, to, 0, Type.METHODTRACE);
- }
-
- static ResolutionInfo resolvedConstantPool(Klass from, Klass to, int index) {
- return new ResolutionInfo(from, to, 0, Type.CONSTANT_POOL, "#" + index);
- }
-
- static ResolutionInfo resolvedField(Klass from, Klass to, String fieldname) {
- return new ResolutionInfo(from, to, 0, Type.FIELD, fieldname);
- }
-
- static ResolutionInfo resolvedMethodSignature(Klass from, Klass to, Method m) {
- return new ResolutionInfo(from, m, to, 0, Type.METHOD);
- }
-
- static ResolutionInfo resolvedCheckedException(Klass from, Klass to, Method m) {
- return new ResolutionInfo(from, m, to, 0, Type.CHECKED_EXCEPTION);
- }
-
- static ResolutionInfo resolvedExtends(Klass from, Klass to) {
- String info = from.getClassName() + " implements " + to.getClassName();
- return new ResolutionInfo(from, to, 0, Type.EXTENDS, info);
- }
-
- static ResolutionInfo resolvedImplements(Klass from, Klass to) {
- String info = from.getClassName() + " implements " + to.getClassName();
- return new ResolutionInfo(from, to, 0, Type.IMPLEMENTS, info);
- }
-
- @Override
- public int compareTo(ResolutionInfo ri) {
- if (this.fromClass == ri.fromClass &&
- this.toClass == ri.toClass &&
- this.linenumber == ri.linenumber &&
- this.type == ri.type &&
- this.info.equals(ri.info)) {
- return 0;
- } else if (this.fromClass == ri.fromClass) {
- if (this.linenumber > ri.linenumber) {
- return 1;
- } else if (this.linenumber < ri.linenumber) {
- return -1;
- } else if (this.type != ri.type) {
- return this.type.getName().compareTo(ri.type.getName());
- } else if (this.toClass != ri.toClass) {
- return this.toClass.compareTo(ri.toClass);
- } else {
- return this.info.compareTo(ri.info);
- }
- } else {
- return this.fromClass.compareTo(ri.fromClass);
- }
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/ResourceFile.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,186 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-package com.sun.classanalyzer;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-/**
- *
- * @author Mandy Chung
- */
-public class ResourceFile implements Comparable<ResourceFile> {
-
- private final String pathname;
- private Module module;
-
- ResourceFile(String pathname) {
- this.pathname = pathname.replace(File.separatorChar, '/');
- }
-
- Module getModule() {
- return module;
- }
-
- void setModule(Module m) {
- if (module != null) {
- throw new RuntimeException("Module for " + this + " already set");
- }
- this.module = m;
- }
-
- String getName() {
- return pathname;
- }
-
- String getPathname() {
- return pathname;
- }
-
- @Override
- public String toString() {
- return pathname;
- }
-
- @Override
- public int compareTo(ResourceFile o) {
- return pathname.compareTo(o.pathname);
- }
- static Set<ResourceFile> resources = new TreeSet<ResourceFile>();
-
- static boolean isResource(String pathname) {
- String name = pathname.replace(File.separatorChar, '/');
-
- if (name.endsWith("META-INF/MANIFEST.MF")) {
- return false;
- }
- if (name.contains("META-INF/JCE_RSA.")) {
- return false;
- }
-
- return true;
- }
-
- static void addResource(String name, InputStream in) {
- ResourceFile res;
- name = name.replace(File.separatorChar, '/');
- if (name.startsWith("META-INF/services")) {
- res = new ServiceProviderConfigFile(name, in);
- } else {
- res = new ResourceFile(name);
- }
- resources.add(res);
- }
-
- static Set<ResourceFile> getAllResources() {
- return Collections.unmodifiableSet(resources);
- }
-
- static class ServiceProviderConfigFile extends ResourceFile {
-
- private final List<String> providers = new ArrayList<String>();
- private final String service;
- ServiceProviderConfigFile(String pathname, InputStream in) {
- super(pathname);
- readServiceConfiguration(in, providers);
- this.service = pathname.substring("META-INF/services".length() + 1, pathname.length());
- }
-
- @Override
- String getName() {
- if (providers.isEmpty()) {
- return service;
- } else {
- // just use the first one for matching
- return providers.get(0);
- }
- }
-
- @SuppressWarnings("empty-statement")
- void readServiceConfiguration(InputStream in, List<String> names) {
- BufferedReader br = null;
- try {
- if (in != null) {
- // Properties doesn't perserve the order of the input file
- br = new BufferedReader(new InputStreamReader(in, "utf-8"));
- int lc = 1;
- while ((lc = parseLine(br, lc, names)) >= 0);
- }
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- } finally {
- if (br != null) {
- try {
- br.close();
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
- }
- }
- }
-
- // Parse a single line from the given configuration file, adding the name
- // on the line to the names list.
- //
- private int parseLine(BufferedReader r, int lc, List<String> names) throws IOException {
- String ln = r.readLine();
- if (ln == null) {
- return -1;
- }
- int ci = ln.indexOf('#');
- if (ci >= 0) {
- ln = ln.substring(0, ci);
- }
- ln = ln.trim();
- int n = ln.length();
- if (n != 0) {
- if ((ln.indexOf(' ') >= 0) || (ln.indexOf('\t') >= 0)) {
- throw new RuntimeException("Illegal configuration-file syntax");
- }
- int cp = ln.codePointAt(0);
- if (!Character.isJavaIdentifierStart(cp)) {
- throw new RuntimeException("Illegal provider-class name: " + ln);
- }
- for (int i = Character.charCount(cp); i < n; i += Character.charCount(cp)) {
- cp = ln.codePointAt(i);
- if (!Character.isJavaIdentifierPart(cp) && (cp != '.')) {
- throw new RuntimeException("Illegal provider-class name: " + ln);
- }
- }
- if (!names.contains(ln)) {
- names.add(ln);
- }
- }
- return lc + 1;
- }
- }
-}
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/ShowDeps.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.classanalyzer;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * A simple tool to print out the static dependencies for a given set of JAR,
- * class files, or combinations of. The tools supports an -ignore option to
- * ignore references to classes listed in the file (including .classlists
- * created by the ClassAnalyzer tool).
- */
-
-public class ShowDeps {
-
- static void usage() {
- System.out.println("java ShowDeps [-ignore <classlist>] file...");
- System.out.println(" where <file> is a class or JAR file, or a directory");
- System.out.println();
- System.out.println("Example usages:");
- System.out.println(" java ShowDeps Foo.jar");
- System.out.println(" java ShowDeps -ignore base.classlist Foo.jar");
- System.out.println(" java ShowDeps -ignore base.classlist -ignore " +
- "jaxp-parsers.classlist <dir>");
- System.exit(-1);
- }
-
- public static void main(String[] args) throws IOException {
- // process -ignore options
- int argi = 0;
- Set<String> ignore = new HashSet<String>();
- while (argi < args.length && args[argi].equals("-ignore")) {
- argi++;
- Scanner s = new Scanner(new File(args[argi++]));
- try {
- while (s.hasNextLine()) {
- String line = s.nextLine();
- if (!line.endsWith(".class"))
- continue;
- int len = line.length();
- // convert to class names
- String clazz = line.replace('\\', '.').replace('/', '.')
- .substring(0, len-6);
- ignore.add(clazz);
- }
- } finally {
- s.close();
- }
- }
-
- if (argi >= args.length)
- usage();
-
- // parse all classes
- while (argi < args.length)
- ClassPath.setClassPath(args[argi++]);
- ClassPath.parseAllClassFiles();
-
- // find the classes that don't exist
- Set<Klass> unresolved = new TreeSet<Klass>();
- for (Klass k : Klass.getAllClasses()) {
- if (k.getFileSize() == 0)
- unresolved.add(k);
- }
-
- // print references to classes that don't exist
- for (Klass k: Klass.getAllClasses()) {
- for (Klass other : k.getReferencedClasses()) {
- if (unresolved.contains(other)) {
- String name = other.toString();
- if (!ignore.contains(name)) {
- System.out.format("%s -> %s\n", k, other);
- }
- }
- }
- }
- }
-}
--- a/jdk/make/sun/applet/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/applet/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = applet
PACKAGE = sun.applet
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/awt/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/awt/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = awt
PACKAGE = sun.awt
LIBRARY = awt
PRODUCT = sun
@@ -368,7 +367,7 @@
FONTCONFIGS_SRC = $(CLOSED_SRC)/solaris/classes/sun/awt/fontconfigs
_FONTCONFIGS = \
fontconfig.properties \
- fontconfig.RedHat.properties \
+ fontconfig.RedHat.5.5.properties \
fontconfig.Turbo.properties \
fontconfig.SuSE.10.properties \
fontconfig.SuSE.11.properties
@@ -405,7 +404,6 @@
$(COMPILEFONTCONFIG_JARFILE)
$(prep-target)
$(BOOT_JAVA_CMD) -jar $(COMPILEFONTCONFIG_JARFILE) $(COMPILEFONTCONFIG_FLAGS) $< $@
- $(install-module-file)
$(call chmod-file, 444)
@$(java-vm-cleanup)
--- a/jdk/make/sun/awt/mapfile-mawt-vers Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/awt/mapfile-mawt-vers Wed Mar 16 10:47:45 2011 -0400
@@ -424,6 +424,7 @@
Java_sun_java2d_xr_XRSurfaceData_initXRPicture;
Java_sun_java2d_xr_XRSurfaceData_initIDs;
Java_sun_java2d_xr_XRSurfaceData_XRInitSurface;
+ Java_sun_java2d_xr_XRSurfaceData_freeXSDOPicture;
Java_sun_java2d_xr_XRBackendNative_initIDs;
Java_sun_java2d_xr_XIDGenerator_bufferXIDs;
Java_sun_java2d_xr_XRBackendNative_freeGC;
--- a/jdk/make/sun/cmm/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/cmm/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = java2d
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/cmm/kcms/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/cmm/kcms/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../..
-MODULE = java2d
PACKAGE = sun.java2d.cmm.kcms
LIBRARY = kcms
PRODUCT = sun
--- a/jdk/make/sun/cmm/lcms/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/cmm/lcms/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../..
-MODULE = java2d
PACKAGE = sun.java2d.cmm.lcms
LIBRARY = lcms
PRODUCT = sun
--- a/jdk/make/sun/dcpr/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/dcpr/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = java2d
PACKAGE = sun.dc
LIBRARY = dcpr
PRODUCT = sun
--- a/jdk/make/sun/font/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/font/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = font
PACKAGE = sun.font
LIBRARY = fontmanager
PRODUCT = sun
@@ -136,7 +135,6 @@
$(FREETYPE_LIB):
$(CP) $(FREETYPE_LIB_PATH)/$(LIB_PREFIX)freetype.$(LIBRARY_SUFFIX) $@
- $(install-module-file)
endif
#ifeq ($(PLATFORM), solaris)
--- a/jdk/make/sun/font/t2k/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/font/t2k/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../..
-MODULE = font
PACKAGE = sun.font
LIBRARY = t2k
PRODUCT = sun
--- a/jdk/make/sun/headless/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/headless/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -30,7 +30,6 @@
MOTIF_VERSION_STRING=none
LIB_LOCATION = $(LIBDIR)/$(LIBARCH)/headless
-MODULE = awt
PACKAGE = sun.awt
LIBRARY = mawt
LIBRARY_OUTPUT = headless
--- a/jdk/make/sun/image/generic/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/image/generic/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../..
-MODULE = media
PACKAGE = sun.awt.medialib
LIBRARY = mlib_image
PRODUCT = sun
--- a/jdk/make/sun/image/vis/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/image/vis/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -27,7 +27,6 @@
# Makefile for building the VIS (solaris-only) version of medialib
#
BUILDDIR = ../../..
-MODULE = media
PACKAGE = sun.awt.medialib
LIBRARY = mlib_image_v
PRODUCT = sun
--- a/jdk/make/sun/jar/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/jar/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = jar-tool
PACKAGE = sun.tools
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/javazic/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/javazic/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -27,7 +27,6 @@
BUILDDIR = ../..
-MODULE = base
PACKAGE = sun.javazic
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
@@ -70,7 +69,6 @@
$(RM) -r $(@D)
$(prep-target)
$(CP) -r $(WORKDIR)/* $(@D)
- $(install-module-dir)
clean clobber::
$(RM) -r $(TEMPDIR) $(INSTALLDIR)
--- a/jdk/make/sun/jawt/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/jawt/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = awt
PACKAGE = sun.awt
LIBRARY = jawt
PRODUCT = sun
--- a/jdk/make/sun/jconsole/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/jconsole/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = jconsole
PACKAGE = sun.tools.jconsole
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/jdbc/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/jdbc/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -33,7 +33,6 @@
#
BUILDDIR = ../..
-MODULE = jdbc-odbc
PACKAGE = sun.jdbc.odbc
LIBRARY = JdbcOdbc
PRODUCT = sun
--- a/jdk/make/sun/jdga/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/jdga/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -25,7 +25,6 @@
BUILDDIR = ../..
-MODULE = java2d
PACKAGE = sun.jdga
LIBRARY = sunwjdga
PRODUCT = sun
--- a/jdk/make/sun/jpeg/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/jpeg/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = java2d
PACKAGE = sun.awt
LIBRARY = jpeg
PRODUCT = sun
--- a/jdk/make/sun/launcher/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/launcher/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = base
PACKAGE = sun.launcher
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/management/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/management/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = management
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/native2ascii/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/native2ascii/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = tools
PACKAGE = sun.tools.native2ascii
PRODUCT = sun
OTHER_JAVACFLAGS += -Xlint:serial -Werror
--- a/jdk/make/sun/net/others/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/net/others/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../..
-MODULE = base
PACKAGE = sun.net
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/net/spi/nameservice/dns/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/net/spi/nameservice/dns/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -30,7 +30,6 @@
BUILDDIR = ../../../../..
# dns should probably be its own module
-MODULE = net-dns
PACKAGE = sun.net.spi.nameservice.dns
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/nio/cs/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/nio/cs/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -30,7 +30,6 @@
BUILDDIR = ../../..
# charsets should be separated from nio module
-MODULE = charsets
PACKAGE = sun.nio
PRODUCT = sun
--- a/jdk/make/sun/org/mozilla/javascript/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/org/mozilla/javascript/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../../..
-MODULE = scripting-rhino
PACKAGE = sun.org.mozilla.javascript.internal
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/pisces/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/pisces/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = java2d
PACKAGE = sun.pisces
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/rmi/cgi/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/rmi/cgi/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
BUILDDIR = ../../..
# java-rmi.cgi is a JDK tool
-MODULE = tools
PACKAGE = sun.rmi
PRODUCT = sun
PROGRAM = java-rmi
--- a/jdk/make/sun/rmi/oldtools/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/rmi/oldtools/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../..
-MODULE = oldjavac
PRODUCT = oldjavac
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/rmi/registry/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/rmi/registry/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../..
-MODULE = rmi
PACKAGE = sun.rmi.registry
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/rmi/rmi/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/rmi/rmi/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../..
-MODULE = rmi
PACKAGE = sun.rmi
PRODUCT = sun
LIBRARY = rmi
--- a/jdk/make/sun/rmi/rmic/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/rmi/rmic/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../../..
-MODULE = rmic
PACKAGE = sun.rmi.rmic
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/rmi/rmid/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/rmi/rmid/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
#
BUILDDIR = ../../..
-MODULE = rmi-activation
PACKAGE = sun.rmi.activation
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/security/ec/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/security/ec/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -89,7 +89,6 @@
#
BUILDDIR = ../../..
-MODULE = security-sunec
PACKAGE = sun.security.ec
PRODUCT = sun
@@ -309,7 +308,7 @@
else
$(JAR_DESTFILE): $(SIGNED_DIR)/sunec.jar
endif
- $(install-non-module-file)
+ $(install-file)
ifndef OPENJDK
install-prebuilt:
--- a/jdk/make/sun/security/jgss/wrapper/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/security/jgss/wrapper/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../../..
-MODULE = security-kerberos
PACKAGE = sun.security.jgss.wrapper
PRODUCT = sun
--- a/jdk/make/sun/security/krb5/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/security/krb5/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../..
-MODULE = security-kerberos
PACKAGE = sun.security.krb5
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/security/mscapi/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/security/mscapi/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -89,7 +89,6 @@
#
BUILDDIR = ../../..
-MODULE = security-sunmscapi
PACKAGE = sun.security.mscapi
LIBRARY = sunmscapi
PRODUCT = sun
@@ -273,7 +272,7 @@
else
$(JAR_DESTFILE): $(SIGNED_DIR)/sunmscapi.jar
endif
- $(install-non-module-file)
+ $(install-file)
ifndef OPENJDK
install-prebuilt:
--- a/jdk/make/sun/security/pkcs11/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/security/pkcs11/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -89,7 +89,6 @@
#
BUILDDIR = ../../..
-MODULE = security-sunpkcs11
PACKAGE = sun.security.pkcs11
LIBRARY = j2pkcs11
PRODUCT = sun
@@ -288,7 +287,7 @@
else
$(JAR_DESTFILE): $(SIGNED_DIR)/sunpkcs11.jar
endif
- $(install-non-module-file)
+ $(install-file)
ifndef OPENJDK
install-prebuilt:
--- a/jdk/make/sun/security/smartcardio/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/security/smartcardio/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../..
-MODULE = security-smartcardio
PACKAGE = sun.security.smartcardio
LIBRARY = j2pcsc
PRODUCT = sun
--- a/jdk/make/sun/security/tools/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/security/tools/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../../..
-MODULE = security-tools
PACKAGE = sun.security.tools
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/serialver/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/serialver/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = serialver
PACKAGE = sun.tools.serialver
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/splashscreen/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/splashscreen/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = awt
PACKAGE = sun.awt
LIBRARY = splashscreen
PRODUCT = sun
--- a/jdk/make/sun/text/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/text/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -29,7 +29,6 @@
BUILDDIR = ../..
-MODULE = localedata
PACKAGE = sun.text
PRODUCT = sun
--- a/jdk/make/sun/tools/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/tools/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -28,7 +28,6 @@
#
BUILDDIR = ../..
-MODULE = tools
PACKAGE = sun.tools
PRODUCT = sun
include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/tracing/dtrace/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/tracing/dtrace/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -27,7 +27,6 @@
# Makefile for building dtrace extension
#
BUILDDIR = ../../..
-MODULE = tracing
PACKAGE = sun.tracing.dtrace
LIBRARY = jsdt
PRODUCT = sun
--- a/jdk/make/sun/xawt/Makefile Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/xawt/Makefile Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,6 @@
#
BUILDDIR = ../..
-MODULE = awt
PACKAGE = sun.awt.X11
LIBRARY = mawt
LIBRARY_OUTPUT = xawt
--- a/jdk/make/sun/xawt/mapfile-vers Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/sun/xawt/mapfile-vers Wed Mar 16 10:47:45 2011 -0400
@@ -374,6 +374,7 @@
Java_sun_java2d_xr_XRSurfaceData_initXRPicture;
Java_sun_java2d_xr_XRSurfaceData_initIDs;
Java_sun_java2d_xr_XRSurfaceData_XRInitSurface;
+ Java_sun_java2d_xr_XRSurfaceData_freeXSDOPicture;
Java_sun_java2d_xr_XRBackendNative_initIDs;
Java_sun_java2d_xr_XRBackendNative_freeGC;
Java_sun_java2d_xr_XRBackendNative_createGC;
@@ -432,6 +433,7 @@
Java_sun_awt_X11_GtkFileDialogPeer_run;
Java_sun_awt_X11_GtkFileDialogPeer_quit;
Java_sun_awt_X11_GtkFileDialogPeer_toFront;
+ Java_sun_awt_X11_GtkFileDialogPeer_setBounds;
Java_sun_print_CUPSPrinter_initIDs;
Java_sun_print_CUPSPrinter_getCupsServer;
--- a/jdk/make/tools/manifest.mf Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/make/tools/manifest.mf Wed Mar 16 10:47:45 2011 -0400
@@ -1,6 +1,6 @@
Manifest-Version: 1.0
Specification-Title: Java Platform API Specification
-Specification-Version: 1.6
+Specification-Version: 1.7
Specification-Vendor: Oracle
Implementation-Title: Java Runtime Environment
Implementation-Version: @@RELEASE@@
--- a/jdk/src/share/classes/com/sun/jarsigner/ContentSignerParameters.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/jarsigner/ContentSignerParameters.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* 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,9 +26,7 @@
package com.sun.jarsigner;
import java.net.URI;
-import java.security.cert.X509CRL;
import java.security.cert.X509Certificate;
-import java.util.Set;
import java.util.zip.ZipFile;
/**
@@ -83,13 +81,6 @@
public X509Certificate[] getSignerCertificateChain();
/**
- * Retrieves the signer's X.509 CRLs.
- *
- * @return An unmodifiable set of X.509 CRLs (never <code>null</code>)
- */
- public Set<X509CRL> getCRLs();
-
- /**
* Retrieves the content that was signed.
* The content is the JAR file's signature file.
*
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -1011,7 +1011,7 @@
return -1;
}
- Comparator<Entry> entryOutputOrder = new Comparator<>() {
+ Comparator<Entry> entryOutputOrder = new Comparator<Entry>() {
public int compare(Entry e0, Entry e1) {
int k0 = getOutputIndex(e0);
int k1 = getOutputIndex(e1);
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -785,7 +785,7 @@
defMap.entrySet().toArray(layoutsAndCounts);
// Sort by count, most frequent first.
// Predefs. participate in this sort, though it does not matter.
- Arrays.sort(layoutsAndCounts, new Comparator<>() {
+ Arrays.sort(layoutsAndCounts, new Comparator<Object>() {
public int compare(Object o0, Object o1) {
Map.Entry e0 = (Map.Entry) o0;
Map.Entry e1 = (Map.Entry) o1;
--- a/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -380,13 +380,19 @@
}
LdapRequest writeRequest(BerEncoder ber, int msgId) throws IOException {
- return writeRequest(ber, msgId, false /* pauseAfterReceipt */);
+ return writeRequest(ber, msgId, false /* pauseAfterReceipt */, -1);
}
- LdapRequest writeRequest(BerEncoder ber, int msgId, boolean pauseAfterReceipt)
- throws IOException {
+ LdapRequest writeRequest(BerEncoder ber, int msgId,
+ boolean pauseAfterReceipt) throws IOException {
+ return writeRequest(ber, msgId, pauseAfterReceipt, -1);
+ }
- LdapRequest req = new LdapRequest(msgId, pauseAfterReceipt);
+ LdapRequest writeRequest(BerEncoder ber, int msgId,
+ boolean pauseAfterReceipt, int replyQueueCapacity) throws IOException {
+
+ LdapRequest req =
+ new LdapRequest(msgId, pauseAfterReceipt, replyQueueCapacity);
addRequest(req);
if (traceFile != null) {
--- a/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -516,7 +516,8 @@
LdapResult search(String dn, int scope, int deref, int sizeLimit,
int timeLimit, boolean attrsOnly, String attrs[],
String filter, int batchSize, Control[] reqCtls,
- Hashtable binaryAttrs, boolean waitFirstReply)
+ Hashtable binaryAttrs, boolean waitFirstReply,
+ int replyQueueCapacity)
throws IOException, NamingException {
ensureOpen();
@@ -543,7 +544,8 @@
if (isLdapv3) encodeControls(ber, reqCtls);
ber.endSeq();
- LdapRequest req = conn.writeRequest(ber, curMsgId);
+ LdapRequest req =
+ conn.writeRequest(ber, curMsgId, false, replyQueueCapacity);
res.msgId = curMsgId;
res.status = LdapClient.LDAP_SUCCESS; //optimistic
--- a/jdk/src/share/classes/com/sun/jndi/ldap/LdapCtx.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/LdapCtx.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -191,6 +191,14 @@
// Environment property for the domain name (derived from this context's DN)
private static final String DOMAIN_NAME = "com.sun.jndi.ldap.domainname";
+ // Block until the first search reply is received
+ private static final String WAIT_FOR_REPLY =
+ "com.sun.jndi.ldap.search.waitForReply";
+
+ // Size of the queue of unprocessed search replies
+ private static final String REPLY_QUEUE_SIZE =
+ "com.sun.jndi.ldap.search.replyQueueSize";
+
// ----------------- Fields that don't change -----------------------
private static final NameParser parser = new LdapNameParser();
@@ -246,6 +254,8 @@
private Hashtable binaryAttrs = null; // attr values returned as byte[]
private int connectTimeout = -1; // no timeout value
private int readTimeout = -1; // no timeout value
+ private boolean waitForReply = true; // wait for search response
+ private int replyQueueSize = -1; // unlimited queue size
private boolean useSsl = false; // true if SSL protocol is active
private boolean useDefaultPortNumber = false; // no port number was supplied
@@ -1759,8 +1769,8 @@
SearchControls cons,
Continuation cont)
throws NamingException {
- return searchAux(name, filter, cloneSearchControls(cons), true, true,
- cont);
+ return searchAux(name, filter, cloneSearchControls(cons), true,
+ waitForReply, cont);
}
protected NamingEnumeration c_search(Name name,
@@ -1928,7 +1938,7 @@
}
private LdapResult doSearch(Name name, String filter, SearchControls cons,
- boolean relative, boolean waitFirstReply) throws NamingException {
+ boolean relative, boolean waitForReply) throws NamingException {
ensureOpen();
try {
int scope;
@@ -1984,7 +1994,8 @@
batchSize,
reqCtls,
binaryAttrs,
- waitFirstReply);
+ waitForReply,
+ replyQueueSize);
respCtls = answer.resControls; // retrieve response controls
return answer;
@@ -2170,6 +2181,10 @@
connectTimeout = -1;
} else if (propName.equals(READ_TIMEOUT)) {
readTimeout = -1;
+ } else if (propName.equals(WAIT_FOR_REPLY)) {
+ waitForReply = true;
+ } else if (propName.equals(REPLY_QUEUE_SIZE)) {
+ replyQueueSize = -1;
// The following properties affect the connection
@@ -2225,6 +2240,11 @@
setConnectTimeout((String)propVal);
} else if (propName.equals(READ_TIMEOUT)) {
setReadTimeout((String)propVal);
+ } else if (propName.equals(WAIT_FOR_REPLY)) {
+ setWaitForReply((String)propVal);
+ } else if (propName.equals(REPLY_QUEUE_SIZE)) {
+ setReplyQueueSize((String)propVal);
+
// The following properties affect the connection
} else if (propName.equals(Context.SECURITY_PROTOCOL)) {
@@ -2312,6 +2332,13 @@
// Set the read timeout
setReadTimeout((String)envprops.get(READ_TIMEOUT));
+ // Set the flag that controls whether to block until the first reply
+ // is received
+ setWaitForReply((String)envprops.get(WAIT_FOR_REPLY));
+
+ // Set the size of the queue of unprocessed search replies
+ setReplyQueueSize((String)envprops.get(REPLY_QUEUE_SIZE));
+
// When connection is created, it will use these and other
// properties from the environment
}
@@ -2442,6 +2469,34 @@
}
/**
+ * Sets the size of the queue of unprocessed search replies
+ */
+ private void setReplyQueueSize(String replyQueueSizeProp) {
+ if (replyQueueSizeProp != null) {
+ replyQueueSize = Integer.parseInt(replyQueueSizeProp);
+ // disallow an empty queue
+ if (replyQueueSize <= 0) {
+ replyQueueSize = -1; // unlimited
+ }
+ } else {
+ replyQueueSize = -1; // unlimited
+ }
+ }
+
+ /**
+ * Sets the flag that controls whether to block until the first search
+ * reply is received
+ */
+ private void setWaitForReply(String waitForReplyProp) {
+ if (waitForReplyProp != null &&
+ (waitForReplyProp.equalsIgnoreCase("false"))) {
+ waitForReply = false;
+ } else {
+ waitForReply = true;
+ }
+ }
+
+ /**
* Sets the read timeout value
*/
private void setReadTimeout(String readTimeoutProp) {
--- a/jdk/src/share/classes/com/sun/jndi/ldap/LdapRequest.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/LdapRequest.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
* 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,8 @@
package com.sun.jndi.ldap;
import java.io.IOException;
-import java.util.Vector;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
import javax.naming.CommunicationException;
final class LdapRequest {
@@ -35,14 +36,26 @@
int msgId; // read-only
private int gotten = 0;
- private Vector replies = new Vector(3);
+ private BlockingQueue<BerDecoder> replies;
+ private int highWatermark = -1;
private boolean cancelled = false;
private boolean pauseAfterReceipt = false;
private boolean completed = false;
LdapRequest(int msgId, boolean pause) {
+ this(msgId, pause, -1);
+ }
+
+ LdapRequest(int msgId, boolean pause, int replyQueueCapacity) {
this.msgId = msgId;
this.pauseAfterReceipt = pause;
+ if (replyQueueCapacity == -1) {
+ this.replies = new LinkedBlockingQueue<BerDecoder>();
+ } else {
+ this.replies =
+ new LinkedBlockingQueue<BerDecoder>(replyQueueCapacity);
+ highWatermark = (replyQueueCapacity * 80) / 100; // 80% capacity
+ }
}
synchronized void cancel() {
@@ -57,7 +70,13 @@
if (cancelled) {
return false;
}
- replies.addElement(ber);
+
+ // Add a new reply to the queue of unprocessed replies.
+ try {
+ replies.put(ber);
+ } catch (InterruptedException e) {
+ // ignore
+ }
// peek at the BER buffer to check if it is a SearchResultDone PDU
try {
@@ -70,6 +89,14 @@
ber.reset();
notify(); // notify anyone waiting for reply
+ /*
+ * If a queue capacity has been set then trigger a pause when the
+ * queue has filled to 80% capacity. Later, when the queue has drained
+ * then the reader gets unpaused.
+ */
+ if (highWatermark != -1 && replies.size() >= highWatermark) {
+ return true; // trigger the pause
+ }
return pauseAfterReceipt;
}
@@ -79,14 +106,12 @@
" cancelled");
}
- if (gotten < replies.size()) {
- BerDecoder answer = (BerDecoder)replies.elementAt(gotten);
- replies.setElementAt(null, gotten); // remove reference
- ++gotten; // skip to next
- return answer;
- } else {
- return null;
- }
+ /*
+ * Remove a reply if the queue is not empty.
+ * poll returns null if queue is empty.
+ */
+ BerDecoder reply = replies.poll();
+ return reply;
}
synchronized boolean hasSearchCompleted() {
--- a/jdk/src/share/classes/com/sun/media/sound/AiffFileWriter.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/media/sound/AiffFileWriter.java Wed Mar 16 10:47:45 2011 -0400
@@ -25,12 +25,10 @@
package com.sun.media.sound;
-import java.util.Vector;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
-import java.io.DataInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
@@ -398,7 +396,8 @@
header = baos.toByteArray();
headerStream = new ByteArrayInputStream( header );
- aiffStream = new SequenceInputStream(headerStream,codedAudioStream);
+ aiffStream = new SequenceInputStream(headerStream,
+ new NoCloseInputStream(codedAudioStream));
return aiffStream;
--- a/jdk/src/share/classes/com/sun/media/sound/AlawCodec.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/media/sound/AlawCodec.java Wed Mar 16 10:47:45 2011 -0400
@@ -52,9 +52,6 @@
private static final short seg_end [] = {0xFF, 0x1FF, 0x3FF,
0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF};
- private static final int tempBufferSize = 64;
- private byte tempBuffer [] = null;
-
/**
* Initializes the decode tables
*/
@@ -199,12 +196,9 @@
AudioFormat inputFormat = stream.getFormat();
if( inputFormat.matches(outputFormat) ) {
-
cs = stream;
} else {
-
cs = (AudioInputStream) (new AlawCodecStream(stream, outputFormat));
- tempBuffer = new byte[tempBufferSize];
}
return cs;
@@ -264,6 +258,10 @@
class AlawCodecStream extends AudioInputStream {
+ // tempBuffer required only for encoding (when encode is true)
+ private static final int tempBufferSize = 64;
+ private byte tempBuffer [] = null;
+
/**
* True to encode to a-law, false to decode to linear
*/
@@ -303,6 +301,7 @@
encodeFormat = outputFormat;
decodeFormat = inputFormat;
PCMIsBigEndian = inputFormat.isBigEndian();
+ tempBuffer = new byte[tempBufferSize];
}
if (PCMIsBigEndian) {
--- a/jdk/src/share/classes/com/sun/media/sound/AuFileWriter.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/media/sound/AuFileWriter.java Wed Mar 16 10:47:45 2011 -0400
@@ -25,12 +25,10 @@
package com.sun.media.sound;
-import java.util.Vector;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
-import java.lang.IllegalArgumentException;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
@@ -131,10 +129,10 @@
// $$fb: 2001-07-13: done. Fixes Bug 4479981
RandomAccessFile raf=new RandomAccessFile(out, "rw");
if (raf.length()<=0x7FFFFFFFl) {
- // skip AU magic and data offset field
+ // skip AU magic and data offset field
raf.skipBytes(8);
raf.writeInt(bytesWritten-AuFileFormat.AU_HEADERSIZE);
- // that's all
+ // that's all
}
raf.close();
}
@@ -303,7 +301,8 @@
dos.close();
header = baos.toByteArray();
headerStream = new ByteArrayInputStream( header );
- auStream = new SequenceInputStream(headerStream,codedAudioStream);
+ auStream = new SequenceInputStream(headerStream,
+ new NoCloseInputStream(codedAudioStream));
return auStream;
}
--- a/jdk/src/share/classes/com/sun/media/sound/DirectAudioDevice.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/media/sound/DirectAudioDevice.java Wed Mar 16 10:47:45 2011 -0400
@@ -395,11 +395,7 @@
protected volatile boolean noService = false; // do not run the nService method
// Guards all native calls.
- protected Object lockNative = new Object();
- // Guards the lastOpened static variable in implOpen and implClose.
- protected static Object lockLast = new Object();
- // Keeps track of last opened line, see implOpen "trick".
- protected static DirectDL lastOpened;
+ protected final Object lockNative = new Object();
// CONSTRUCTOR
protected DirectDL(DataLine.Info info,
@@ -501,48 +497,21 @@
// align buffer to full frames
bufferSize = ((int) bufferSize / format.getFrameSize()) * format.getFrameSize();
- synchronized(lockLast) {
- id = nOpen(mixerIndex, deviceID, isSource,
- encoding,
- hardwareFormat.getSampleRate(),
- hardwareFormat.getSampleSizeInBits(),
- hardwareFormat.getFrameSize(),
- hardwareFormat.getChannels(),
- hardwareFormat.getEncoding().equals(
- AudioFormat.Encoding.PCM_SIGNED),
- hardwareFormat.isBigEndian(),
- bufferSize);
+ id = nOpen(mixerIndex, deviceID, isSource,
+ encoding,
+ hardwareFormat.getSampleRate(),
+ hardwareFormat.getSampleSizeInBits(),
+ hardwareFormat.getFrameSize(),
+ hardwareFormat.getChannels(),
+ hardwareFormat.getEncoding().equals(
+ AudioFormat.Encoding.PCM_SIGNED),
+ hardwareFormat.isBigEndian(),
+ bufferSize);
- if (id == 0) {
- // Bah... Dirty trick. The most likely cause is an application
- // already having a line open for this particular hardware
- // format and forgetting about it. If so, silently close that
- // implementation and try again. Unfortuantely we can only
- // open one line per hardware format currently.
- if (lastOpened != null
- && hardwareFormat.matches(lastOpened.hardwareFormat)) {
- lastOpened.implClose();
- lastOpened = null;
-
- id = nOpen(mixerIndex, deviceID, isSource,
- encoding,
- hardwareFormat.getSampleRate(),
- hardwareFormat.getSampleSizeInBits(),
- hardwareFormat.getFrameSize(),
- hardwareFormat.getChannels(),
- hardwareFormat.getEncoding().equals(
- AudioFormat.Encoding.PCM_SIGNED),
- hardwareFormat.isBigEndian(),
- bufferSize);
- }
-
- if (id == 0) {
- // TODO: nicer error messages...
- throw new LineUnavailableException(
- "line with format "+format+" not supported.");
- }
- }
- lastOpened = this;
+ if (id == 0) {
+ // TODO: nicer error messages...
+ throw new LineUnavailableException(
+ "line with format "+format+" not supported.");
}
this.bufferSize = nGetBufferSize(id, isSource);
@@ -615,14 +584,13 @@
}
synchronized (lockNative) {
nStop(id, isSource);
-
+ }
+ // wake up any waiting threads
+ synchronized(lock) {
// need to set doIO to false before notifying the
// read/write thread, that's why isStartedRunning()
// cannot be used
doIO = false;
- }
- // wake up any waiting threads
- synchronized(lock) {
lock.notifyAll();
}
setActive(false);
@@ -649,12 +617,8 @@
doIO = false;
long oldID = id;
id = 0;
- synchronized (lockLast) {
- synchronized (lockNative) {
- nClose(oldID, isSource);
- if (lastOpened == this)
- lastOpened = null;
- }
+ synchronized (lockNative) {
+ nClose(oldID, isSource);
}
bytePosition = 0;
softwareConversionSize = 0;
@@ -667,10 +631,9 @@
if (id == 0) {
return 0;
}
- int a = 0;
+ int a;
synchronized (lockNative) {
- if (doIO)
- a = nAvailable(id, isSource);
+ a = nAvailable(id, isSource);
}
return a;
}
@@ -726,7 +689,7 @@
lock.notifyAll();
}
synchronized (lockNative) {
- if (id != 0 && doIO) {
+ if (id != 0) {
// then flush native buffers
nFlush(id, isSource);
}
@@ -737,10 +700,9 @@
// replacement for getFramePosition (see AbstractDataLine)
public long getLongFramePosition() {
- long pos = 0;
+ long pos;
synchronized (lockNative) {
- if (doIO)
- pos = nGetBytePosition(id, isSource, bytePosition);
+ pos = nGetBytePosition(id, isSource, bytePosition);
}
// hack because ALSA sometimes reports wrong framepos
if (pos < 0) {
@@ -786,12 +748,11 @@
}
int written = 0;
while (!flushing) {
- int thisWritten = 0;
+ int thisWritten;
synchronized (lockNative) {
- if (doIO)
- thisWritten = nWrite(id, b, off, len,
- softwareConversionSize,
- leftGain, rightGain);
+ thisWritten = nWrite(id, b, off, len,
+ softwareConversionSize,
+ leftGain, rightGain);
if (thisWritten < 0) {
// error in native layer
break;
@@ -1014,10 +975,9 @@
}
int read = 0;
while (doIO && !flushing) {
- int thisRead = 0;
+ int thisRead;
synchronized (lockNative) {
- if (doIO)
- thisRead = nRead(id, b, off, len, softwareConversionSize);
+ thisRead = nRead(id, b, off, len, softwareConversionSize);
if (thisRead < 0) {
// error in native layer
break;
@@ -1252,8 +1212,7 @@
// set new native position (if necessary)
// this must come after the flush!
synchronized (lockNative) {
- if (doIO)
- nSetBytePosition(id, isSource, frames * frameSize);
+ nSetBytePosition(id, isSource, frames * frameSize);
}
if (Printer.debug) Printer.debug(" DirectClip.setFramePosition: "
--- a/jdk/src/share/classes/com/sun/media/sound/RealTimeSequencer.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/media/sound/RealTimeSequencer.java Wed Mar 16 10:47:45 2011 -0400
@@ -775,15 +775,22 @@
Receiver rec = null;
// first try to connect to the default synthesizer
// IMPORTANT: this code needs to be synch'ed with
- // MidiSystem.getReceiver(boolean), because the same
+ // MidiSystem.getSequencer(boolean), because the same
// algorithm needs to be used!
try {
Synthesizer synth = MidiSystem.getSynthesizer();
- synth.open();
if (synth instanceof ReferenceCountingDevice) {
rec = ((ReferenceCountingDevice) synth).getReceiverReferenceCounting();
} else {
- rec = synth.getReceiver();
+ synth.open();
+ try {
+ rec = synth.getReceiver();
+ } finally {
+ // make sure that the synth is properly closed
+ if (rec == null) {
+ synth.close();
+ }
+ }
}
} catch (Exception e) {
// something went wrong with synth
--- a/jdk/src/share/classes/com/sun/media/sound/StandardMidiFileReader.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/media/sound/StandardMidiFileReader.java Wed Mar 16 10:47:45 2011 -0400
@@ -127,7 +127,7 @@
resolution = timing;
} else {
// SMPTE based timing. first decipher the frame code.
- int frameCode = (-1 * timing) >> 8;
+ int frameCode = -1 * (timing >> 8);
switch(frameCode) {
case 24:
divisionType = Sequence.SMPTE_24;
--- a/jdk/src/share/classes/com/sun/media/sound/SunFileWriter.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/media/sound/SunFileWriter.java Wed Mar 16 10:47:45 2011 -0400
@@ -30,14 +30,9 @@
import java.io.OutputStream;
import java.io.IOException;
import java.io.DataInputStream;
-import java.io.RandomAccessFile;
-import java.net.URL;
-import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.UnsupportedAudioFileException;
import javax.sound.sampled.spi.AudioFileWriter;
@@ -177,4 +172,62 @@
return i;
}
+ /**
+ * InputStream wrapper class which prevent source stream from being closed.
+ * The class is usefull for use with SequenceInputStream to prevent
+ * closing of the source input streams.
+ */
+ protected class NoCloseInputStream extends InputStream {
+ private final InputStream in;
+
+ public NoCloseInputStream(InputStream in) {
+ this.in = in;
+ }
+
+ @Override
+ public int read() throws IOException {
+ return in.read();
+ }
+
+ @Override
+ public int read(byte b[]) throws IOException {
+ return in.read(b);
+ }
+
+ @Override
+ public int read(byte b[], int off, int len) throws IOException {
+ return in.read(b, off, len);
+ }
+
+ @Override
+ public long skip(long n) throws IOException {
+ return in.skip(n);
+ }
+
+ @Override
+ public int available() throws IOException {
+ return in.available();
+ }
+
+ @Override
+ public void close() throws IOException {
+ // don't propagate the call
+ }
+
+ @Override
+ public void mark(int readlimit) {
+ in.mark(readlimit);
+ }
+
+ @Override
+ public void reset() throws IOException {
+ in.reset();
+ }
+
+ @Override
+ public boolean markSupported() {
+ return in.markSupported();
+ }
+
+ }
}
--- a/jdk/src/share/classes/com/sun/media/sound/WaveFileWriter.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/com/sun/media/sound/WaveFileWriter.java Wed Mar 16 10:47:45 2011 -0400
@@ -25,12 +25,10 @@
package com.sun.media.sound;
-import java.util.Vector;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
-import java.lang.IllegalArgumentException;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
@@ -371,7 +369,8 @@
dos.close();
header = baos.toByteArray();
headerStream = new ByteArrayInputStream( header );
- waveStream = new SequenceInputStream(headerStream,codedAudioStream);
+ waveStream = new SequenceInputStream(headerStream,
+ new NoCloseInputStream(codedAudioStream));
return (InputStream)waveStream;
}
--- a/jdk/src/share/classes/java/awt/Font.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/awt/Font.java Wed Mar 16 10:47:45 2011 -0400
@@ -1985,8 +1985,22 @@
* @since 1.2
*/
public int canDisplayUpTo(String str) {
- return canDisplayUpTo(new StringCharacterIterator(str), 0,
- str.length());
+ Font2D font2d = getFont2D();
+ int len = str.length();
+ for (int i = 0; i < len; i++) {
+ char c = str.charAt(i);
+ if (font2d.canDisplay(c)) {
+ continue;
+ }
+ if (!Character.isHighSurrogate(c)) {
+ return i;
+ }
+ if (!font2d.canDisplay(str.codePointAt(i))) {
+ return i;
+ }
+ i++;
+ }
+ return -1;
}
/**
@@ -2009,11 +2023,21 @@
* @since 1.2
*/
public int canDisplayUpTo(char[] text, int start, int limit) {
- while (start < limit && canDisplay(text[start])) {
- ++start;
+ Font2D font2d = getFont2D();
+ for (int i = start; i < limit; i++) {
+ char c = text[i];
+ if (font2d.canDisplay(c)) {
+ continue;
+ }
+ if (!Character.isHighSurrogate(c)) {
+ return i;
+ }
+ if (!font2d.canDisplay(Character.codePointAt(text, i, limit))) {
+ return i;
+ }
+ i++;
}
-
- return start == limit ? -1 : start;
+ return -1;
}
/**
@@ -2034,13 +2058,26 @@
* @since 1.2
*/
public int canDisplayUpTo(CharacterIterator iter, int start, int limit) {
- for (char c = iter.setIndex(start);
- iter.getIndex() < limit && canDisplay(c);
- c = iter.next()) {
+ Font2D font2d = getFont2D();
+ char c = iter.setIndex(start);
+ for (int i = start; i < limit; i++, c = iter.next()) {
+ if (font2d.canDisplay(c)) {
+ continue;
+ }
+ if (!Character.isHighSurrogate(c)) {
+ return i;
+ }
+ char c2 = iter.next();
+ // c2 could be CharacterIterator.DONE which is not a low surrogate.
+ if (!Character.isLowSurrogate(c2)) {
+ return i;
+ }
+ if (!font2d.canDisplay(Character.toCodePoint(c, c2))) {
+ return i;
+ }
+ i++;
}
-
- int result = iter.getIndex();
- return result == limit ? -1 : result;
+ return -1;
}
/**
--- a/jdk/src/share/classes/java/awt/color/ICC_Profile.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/awt/color/ICC_Profile.java Wed Mar 16 10:47:45 2011 -0400
@@ -58,7 +58,6 @@
import java.security.AccessController;
import java.security.PrivilegedAction;
-import sun.misc.BootClassLoaderHook;
/**
* A representation of color profile data for device independent and
@@ -865,8 +864,7 @@
case ColorSpace.CS_PYCC:
synchronized(ICC_Profile.class) {
if (PYCCprofile == null) {
- if (BootClassLoaderHook.getHook() != null ||
- standardProfileExists("PYCC.pf"))
+ if (standardProfileExists("PYCC.pf"))
{
ProfileDeferralInfo pInfo =
new ProfileDeferralInfo("PYCC.pf",
--- a/jdk/src/share/classes/java/io/File.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/io/File.java Wed Mar 16 10:47:45 2011 -0400
@@ -2055,7 +2055,7 @@
*
* @return a {@code Path} constructed from this abstract path
*
- * @throws InvalidPathException
+ * @throws java.nio.file.InvalidPathException
* if a {@code Path} object cannot be constructed from the abstract
* path (see {@link java.nio.file.FileSystem#getPath FileSystem.getPath})
*
--- a/jdk/src/share/classes/java/lang/ClassLoader.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/lang/ClassLoader.java Wed Mar 16 10:47:45 2011 -0400
@@ -51,7 +51,6 @@
import java.util.Hashtable;
import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;
-import sun.misc.BootClassLoaderHook;
import sun.misc.ClassFileTransformer;
import sun.misc.CompoundEnumeration;
import sun.misc.Resource;
@@ -1300,7 +1299,6 @@
* Find resources from the VM's built-in classloader.
*/
private static URL getBootstrapResource(String name) {
- BootClassLoaderHook.preLoadResource(name);
URLClassPath ucp = getBootstrapClassPath();
Resource res = ucp.getResource(name);
return res != null ? res.getURL() : null;
@@ -1814,7 +1812,6 @@
// Invoked in the java.lang.Runtime class to implement load and loadLibrary.
static void loadLibrary(Class fromClass, String name,
boolean isAbsolute) {
- BootClassLoaderHook.preLoadLibrary(name);
ClassLoader loader =
(fromClass == null) ? null : fromClass.getClassLoader();
if (sys_paths == null) {
--- a/jdk/src/share/classes/java/lang/Package.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/lang/Package.java Wed Mar 16 10:47:45 2011 -0400
@@ -576,12 +576,10 @@
* Returns the Manifest for the specified JAR file name.
*/
private static Manifest loadManifest(String fn) {
- try {
- FileInputStream fis = new FileInputStream(fn);
- JarInputStream jis = new JarInputStream(fis, false);
- Manifest man = jis.getManifest();
- jis.close();
- return man;
+ try (FileInputStream fis = new FileInputStream(fn);
+ JarInputStream jis = new JarInputStream(fis, false))
+ {
+ return jis.getManifest();
} catch (IOException e) {
return null;
}
--- a/jdk/src/share/classes/java/net/HttpURLConnection.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/net/HttpURLConnection.java Wed Mar 16 10:47:45 2011 -0400
@@ -400,7 +400,8 @@
* @exception ProtocolException if the method cannot be reset or if
* the requested method isn't valid for HTTP.
* @exception SecurityException if a security manager is set and the
- * "allowHttpTrace" NetPermission is not granted.
+ * method is "TRACE", but the "allowHttpTrace"
+ * NetPermission is not granted.
* @see #getRequestMethod()
*/
public void setRequestMethod(String method) throws ProtocolException {
--- a/jdk/src/share/classes/java/net/NetPermission.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/net/NetPermission.java Wed Mar 16 10:47:45 2011 -0400
@@ -73,6 +73,13 @@
* </tr>
*
* <tr>
+ * <td>getNetworkInformation</td>
+ * <td>The ability to retrieve all information about local network interfaces.</td>
+ * <td>Malicious code can read information about network hardware such as
+ * MAC addresses, which could be used to construct local IPv6 addresses.</td>
+ * </tr>
+ *
+ * <tr>
* <td>getProxySelector</td>
* <td>The ability to get the proxy selector used to make decisions
* on which proxies to use when making network connections.</td>
--- a/jdk/src/share/classes/java/net/URI.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/net/URI.java Wed Mar 16 10:47:45 2011 -0400
@@ -991,7 +991,7 @@
* authority and path are taken from the given URI. </p></li>
*
* <li><p> Otherwise the new URI's authority component is copied from
- * this URI, and its path is computed as follows: </p></li>
+ * this URI, and its path is computed as follows: </p>
*
* <ol type=a>
*
@@ -1005,7 +1005,7 @@
* path and then normalizing the result as if by invoking the {@link
* #normalize() normalize} method. </p></li>
*
- * </ol>
+ * </ol></li>
*
* </ol>
*
@@ -1511,7 +1511,7 @@
* fragments. </p></li>
*
* <li><p> Two hierarchical URIs with identical schemes are ordered
- * according to the ordering of their authority components: </p></li>
+ * according to the ordering of their authority components: </p>
*
* <ul type=disc>
*
@@ -1526,7 +1526,7 @@
* the URIs are ordered according to the ordering of their authority
* components. </p></li>
*
- * </ul>
+ * </ul></li>
*
* <li><p> Finally, two hierarchical URIs with identical schemes and
* authority components are ordered according to the ordering of their
--- a/jdk/src/share/classes/java/net/package.html Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/net/package.html Wed Mar 16 10:47:45 2011 -0400
@@ -31,18 +31,18 @@
<p> The java.net package can be roughly divided in two sections:</p>
<ul>
- <li> <p><i>A Low Level API</i>, which deals with the following abstractions:</p></li>
+ <li> <p><i>A Low Level API</i>, which deals with the following abstractions:</p>
<ul>
<li><p><i>Addresses</i>, which are networking identifiers, like IP addresses.</p></li>
<li><p><i>Sockets</i>, which are basic bidirectional data communication mechanisms.</p></li>
<li><p><i>Interfaces</i>, which describe network interfaces. </p></li>
- </ul>
- <li> <p><i>A High Level API</i>, which deals with the following abstractions:</p></li>
+ </ul></li>
+ <li> <p><i>A High Level API</i>, which deals with the following abstractions:</p>
<ul>
<li><p><i>URIs</i>, which represent Universal Resource Identifiers.</p></li>
<li><p><i>URLs</i>, which represent Universal Resource Locators.</p></li>
<li><p><i>Connections</i>, which represents connections to the resource pointed to by <i>URLs</i>.</p></li>
- </ul>
+ </ul></li>
</ul>
<h2>Addresses</h2>
<p>Addresses are used throughout the java.net APIs as either host identifiers, or socket endpoint identifiers.</p>
--- a/jdk/src/share/classes/java/nio/channels/AsynchronousFileChannel.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/nio/channels/AsynchronousFileChannel.java Wed Mar 16 10:47:45 2011 -0400
@@ -48,12 +48,12 @@
*
* <p> An asynchronous file channel does not have a <i>current position</i>
* within the file. Instead, the file position is specified to each read and
- * write methd that initiate asynchronous operations. A {@link CompletionHandler}
+ * write method that initiates asynchronous operations. A {@link CompletionHandler}
* is specified as a parameter and is invoked to consume the result of the I/O
* operation. This class also defines read and write methods that initiate
* asynchronous operations, returning a {@link Future} to represent the pending
* result of the operation. The {@code Future} may be used to check if the
- * operation has completed, to wait for its completion.
+ * operation has completed, wait for its completion, and retrieve the result.
*
* <p> In addition to read and write operations, this class defines the
* following operations: </p>
@@ -73,13 +73,13 @@
* which tasks are submitted to handle I/O events and dispatch to completion
* handlers that consume the results of I/O operations on the channel. The
* completion handler for an I/O operation initiated on a channel is guaranteed
- * to be invoked by one threads in the thread pool (This ensures that the
+ * to be invoked by one of the threads in the thread pool (This ensures that the
* completion handler is run by a thread with the expected <em>identity</em>).
* Where an I/O operation completes immediately, and the initiating thread is
* itself a thread in the thread pool, then the completion handler may be invoked
* directly by the initiating thread. When an {@code AsynchronousFileChannel} is
* created without specifying a thread pool then the channel is associated with
- * a system-dependent and default thread pool that may be shared with other
+ * a system-dependent default thread pool that may be shared with other
* channels. The default thread pool is configured by the system properties
* defined by the {@link AsynchronousChannelGroup} class.
*
--- a/jdk/src/share/classes/java/nio/channels/SocketChannel.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/nio/channels/SocketChannel.java Wed Mar 16 10:47:45 2011 -0400
@@ -182,10 +182,13 @@
SocketChannel sc = open();
try {
sc.connect(remote);
- } finally {
- if (!sc.isConnected()) {
- try { sc.close(); } catch (IOException x) { }
+ } catch (Throwable x) {
+ try {
+ sc.close();
+ } catch (Throwable suppressed) {
+ x.addSuppressed(suppressed);
}
+ throw x;
}
assert sc.isConnected();
return sc;
--- a/jdk/src/share/classes/java/nio/file/CopyMoveHelper.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/nio/file/CopyMoveHelper.java Wed Mar 16 10:47:45 2011 -0400
@@ -135,11 +135,13 @@
view.setTimes(attrs.lastModifiedTime(),
attrs.lastAccessTime(),
attrs.creationTime());
- } catch (IOException x) {
+ } catch (Throwable x) {
// rollback
try {
Files.delete(target);
- } catch (IOException ignore) { }
+ } catch (Throwable suppressed) {
+ x.addSuppressed(suppressed);
+ }
throw x;
}
}
--- a/jdk/src/share/classes/java/nio/file/Files.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/nio/file/Files.java Wed Mar 16 10:47:45 2011 -0400
@@ -129,17 +129,18 @@
* <pre>
* Path path = ...
*
- * // replace an existing file or create the file if it doesn't initially exist
+ * // truncate and overwrite an existing file, or create the file if
+ * // it doesn't initially exist
* OutputStream out = Files.newOutputStream(path);
*
* // append to an existing file, fail if the file does not exist
* out = Files.newOutputStream(path, APPEND);
*
* // append to an existing file, create file if it doesn't initially exist
- * out = Files.newOutputStream(CREATE, APPEND);
+ * out = Files.newOutputStream(path, CREATE, APPEND);
*
* // always create new file, failing if it already exists
- * out = Files.newOutputStream(CREATE_NEW);
+ * out = Files.newOutputStream(path, CREATE_NEW);
* </pre>
*
* @param path
@@ -793,7 +794,8 @@
FileAttribute<?>... attrs)
throws IOException
{
- return TempFileHelper.createTempFile(dir, prefix, suffix, attrs);
+ return TempFileHelper.createTempFile(Objects.requireNonNull(dir),
+ prefix, suffix, attrs);
}
/**
@@ -890,13 +892,14 @@
FileAttribute<?>... attrs)
throws IOException
{
- return TempFileHelper.createTempDirectory(dir, prefix, attrs);
+ return TempFileHelper.createTempDirectory(Objects.requireNonNull(dir),
+ prefix, attrs);
}
/**
* Creates a new directory in the default temporary-file directory, using
- * the given prefix and suffix to generate its name. The resulting {@code
- * Path} is associated with the default {@code FileSystem}.
+ * the given prefix to generate its name. The resulting {@code Path} is
+ * associated with the default {@code FileSystem}.
*
* <p> This method works in exactly the manner specified by {@link
* #createTempDirectory(Path,String,FileAttribute[])} method for the case
@@ -2583,7 +2586,7 @@
* walkFileTree(start, EnumSet.noneOf(FileVisitOption.class), Integer.MAX_VALUE, visitor)
* </pre></blockquote>
* In other words, it does not follow symbolic links, and visits all levels
- * of the file level.
+ * of the file tree.
*
* @param start
* the starting file
@@ -3005,7 +3008,7 @@
* or after some bytes have been written to the file.
*
* <p> <b>Usage example</b>: By default the method creates a new file or
- * overrides an existing file. Suppose you instead want to append bytes
+ * overwrites an existing file. Suppose you instead want to append bytes
* to an existing file:
* <pre>
* Path path = ...
--- a/jdk/src/share/classes/java/security/CodeSigner.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/security/CodeSigner.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -26,10 +26,7 @@
package java.security;
import java.io.*;
-import java.security.cert.CRL;
import java.security.cert.CertPath;
-import sun.misc.JavaSecurityCodeSignerAccess;
-import sun.misc.SharedSecrets;
/**
* This class encapsulates information about a code signer.
@@ -167,44 +164,6 @@
return sb.toString();
}
- // A private attribute attached to this CodeSigner object. Can be accessed
- // through SharedSecrets.getJavaSecurityCodeSignerAccess().[g|s]etCRLs
- //
- // Currently called in SignatureFileVerifier.getSigners
- private transient CRL[] crls;
-
- /**
- * Sets the CRLs attached
- * @param crls, null to clear
- */
- void setCRLs(CRL[] crls) {
- this.crls = crls;
- }
-
- /**
- * Returns the CRLs attached
- * @return the crls, initially null
- */
- CRL[] getCRLs() {
- return crls;
- }
-
- // Set up JavaSecurityCodeSignerAccess in SharedSecrets
- static {
- SharedSecrets.setJavaSecurityCodeSignerAccess(
- new JavaSecurityCodeSignerAccess() {
- @Override
- public void setCRLs(CodeSigner signer, CRL[] crls) {
- signer.setCRLs(crls);
- }
-
- @Override
- public CRL[] getCRLs(CodeSigner signer) {
- return signer.getCRLs();
- }
- });
- }
-
// Explicitly reset hash code value to -1
private void readObject(ObjectInputStream ois)
throws IOException, ClassNotFoundException {
--- a/jdk/src/share/classes/java/util/Calendar.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/Calendar.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -554,7 +554,7 @@
/**
* Field number for <code>get</code> and <code>set</code> indicating the
- * daylight savings offset in milliseconds.
+ * daylight saving offset in milliseconds.
* <p>
* This field reflects the correct daylight saving offset value of
* the time zone of this <code>Calendar</code> if the
--- a/jdk/src/share/classes/java/util/Currency.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/Currency.java Wed Mar 16 10:47:45 2011 -0400
@@ -233,7 +233,9 @@
"currency.properties");
if (propFile.exists()) {
Properties props = new Properties();
- props.load(new FileReader(propFile));
+ try (FileReader fr = new FileReader(propFile)) {
+ props.load(fr);
+ }
Set<String> keys = props.stringPropertyNames();
Pattern propertiesPattern =
Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*([0-3])");
--- a/jdk/src/share/classes/java/util/GregorianCalendar.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/GregorianCalendar.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -260,7 +260,7 @@
* // create a Pacific Standard Time time zone
* SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
*
- * // set up rules for daylight savings time
+ * // set up rules for Daylight Saving Time
* pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
* pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
*
--- a/jdk/src/share/classes/java/util/TimeZone.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/TimeZone.java Wed Mar 16 10:47:45 2011 -0400
@@ -339,8 +339,9 @@
/**
* Returns a name in the specified {@code style} of this {@code TimeZone}
* suitable for presentation to the user in the default locale. If the
- * specified {@code daylight} is {@code true}, a daylight saving time name
- * is returned. Otherwise, a standard time name is returned.
+ * specified {@code daylight} is {@code true}, a Daylight Saving Time name
+ * is returned (even if this {@code TimeZone} doesn't observe Daylight Saving
+ * Time). Otherwise, a Standard Time name is returned.
*
* <p>This method is equivalent to:
* <pre><blockquote>
@@ -348,7 +349,8 @@
* Locale.getDefault({@link Locale.Category#DISPLAY}))
* </blockquote></pre>
*
- * @param daylight if {@code true}, return the daylight saving time name.
+ * @param daylight {@code true} specifying a Daylight Saving Time name, or
+ * {@code false} specifying a Standard Time name
* @param style either {@link #LONG} or {@link #SHORT}
* @return the human-readable name of this time zone in the default locale.
* @exception IllegalArgumentException if {@code style} is invalid.
@@ -356,6 +358,7 @@
* @see #getDisplayName(boolean, int, Locale)
* @see Locale#getDefault(Locale.Category)
* @see Locale.Category
+ * @see java.text.DateFormatSymbols#getZoneStrings()
*/
public final String getDisplayName(boolean daylight, int style) {
return getDisplayName(daylight, style,
@@ -365,8 +368,9 @@
/**
* Returns a name in the specified {@code style} of this {@code TimeZone}
* suitable for presentation to the user in the specified {@code
- * locale}. If the specified {@code daylight} is {@code true}, a daylight
- * saving time name is returned. Otherwise, a standard time name is
+ * locale}. If the specified {@code daylight} is {@code true}, a Daylight
+ * Saving Time name is returned (even if this {@code TimeZone} doesn't
+ * observe Daylight Saving Time). Otherwise, a Standard Time name is
* returned.
*
* <p>When looking up a time zone name, the {@linkplain
@@ -379,13 +383,15 @@
* found, the name is returned. Otherwise, a string in the
* <a href="#NormalizedCustomID">normalized custom ID format</a> is returned.
*
- * @param daylight if {@code true}, return the daylight saving time name.
+ * @param daylight {@code true} specifying a Daylight Saving Time name, or
+ * {@code false} specifying a Standard Time name
* @param style either {@link #LONG} or {@link #SHORT}
- * @param locale the locale in which to supply the display name.
+ * @param locale the locale in which to supply the display name.
* @return the human-readable name of this time zone in the given locale.
* @exception IllegalArgumentException if {@code style} is invalid.
* @exception NullPointerException if {@code locale} is {@code null}.
* @since 1.2
+ * @see java.text.DateFormatSymbols#getZoneStrings()
*/
public String getDisplayName(boolean daylight, int style, Locale locale) {
if (style != SHORT && style != LONG) {
@@ -526,10 +532,10 @@
/**
* Queries if the given {@code date} is in Daylight Saving Time in
- * this {@code TimeZone}.
+ * this time zone.
*
- * @param date the given {@code Date}.
- * @return {@code true} if the given {@code date} is in Daylight Saving Time,
+ * @param date the given Date.
+ * @return {@code true} if the given date is in Daylight Saving Time,
* {@code false}, otherwise.
*/
abstract public boolean inDaylightTime(Date date);
@@ -566,7 +572,7 @@
* @param rawOffset the given time zone GMT offset in milliseconds.
* @return an array of IDs, where the time zone for that ID has
* the specified GMT offset. For example, "America/Phoenix" and "America/Denver"
- * both have GMT-07:00, but differ in daylight savings behavior.
+ * both have GMT-07:00, but differ in daylight saving behavior.
* @see #getRawOffset()
*/
public static synchronized String[] getAvailableIDs(int rawOffset) {
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedDeque.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedDeque.java Wed Mar 16 10:47:45 2011 -0400
@@ -272,13 +272,6 @@
private static final Node<Object> PREV_TERMINATOR, NEXT_TERMINATOR;
- static {
- PREV_TERMINATOR = new Node<Object>(null);
- PREV_TERMINATOR.next = PREV_TERMINATOR;
- NEXT_TERMINATOR = new Node<Object>(null);
- NEXT_TERMINATOR.prev = NEXT_TERMINATOR;
- }
-
@SuppressWarnings("unchecked")
Node<E> prevTerminator() {
return (Node<E>) PREV_TERMINATOR;
@@ -294,6 +287,9 @@
volatile E item;
volatile Node<E> next;
+ Node() { // default constructor for NEXT_TERMINATOR, PREV_TERMINATOR
+ }
+
/**
* Constructs a new node. Uses relaxed write because item can
* only be seen after publication via casNext or casPrev.
@@ -324,14 +320,25 @@
// Unsafe mechanics
- private static final sun.misc.Unsafe UNSAFE =
- sun.misc.Unsafe.getUnsafe();
- private static final long prevOffset =
- objectFieldOffset(UNSAFE, "prev", Node.class);
- private static final long itemOffset =
- objectFieldOffset(UNSAFE, "item", Node.class);
- private static final long nextOffset =
- objectFieldOffset(UNSAFE, "next", Node.class);
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long prevOffset;
+ private static final long itemOffset;
+ private static final long nextOffset;
+
+ static {
+ try {
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = Node.class;
+ prevOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("prev"));
+ itemOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("item"));
+ nextOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("next"));
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
}
/**
@@ -1422,14 +1429,6 @@
initHeadTail(h, t);
}
- // Unsafe mechanics
-
- private static final sun.misc.Unsafe UNSAFE =
- sun.misc.Unsafe.getUnsafe();
- private static final long headOffset =
- objectFieldOffset(UNSAFE, "head", ConcurrentLinkedDeque.class);
- private static final long tailOffset =
- objectFieldOffset(UNSAFE, "tail", ConcurrentLinkedDeque.class);
private boolean casHead(Node<E> cmp, Node<E> val) {
return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val);
@@ -1439,15 +1438,25 @@
return UNSAFE.compareAndSwapObject(this, tailOffset, cmp, val);
}
- static long objectFieldOffset(sun.misc.Unsafe UNSAFE,
- String field, Class<?> klazz) {
+ // Unsafe mechanics
+
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long headOffset;
+ private static final long tailOffset;
+ static {
+ PREV_TERMINATOR = new Node<Object>();
+ PREV_TERMINATOR.next = PREV_TERMINATOR;
+ NEXT_TERMINATOR = new Node<Object>();
+ NEXT_TERMINATOR.prev = NEXT_TERMINATOR;
try {
- return UNSAFE.objectFieldOffset(klazz.getDeclaredField(field));
- } catch (NoSuchFieldException e) {
- // Convert Exception to corresponding Error
- NoSuchFieldError error = new NoSuchFieldError(field);
- error.initCause(e);
- throw error;
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = ConcurrentLinkedDeque.class;
+ headOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("head"));
+ tailOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("tail"));
+ } catch (Exception e) {
+ throw new Error(e);
}
}
}
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedQueue.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedQueue.java Wed Mar 16 10:47:45 2011 -0400
@@ -194,12 +194,22 @@
// Unsafe mechanics
- private static final sun.misc.Unsafe UNSAFE =
- sun.misc.Unsafe.getUnsafe();
- private static final long nextOffset =
- objectFieldOffset(UNSAFE, "next", Node.class);
- private static final long itemOffset =
- objectFieldOffset(UNSAFE, "item", Node.class);
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long itemOffset;
+ private static final long nextOffset;
+
+ static {
+ try {
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = Node.class;
+ itemOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("item"));
+ nextOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("next"));
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
}
/**
@@ -790,14 +800,6 @@
throw new NullPointerException();
}
- // Unsafe mechanics
-
- private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
- private static final long headOffset =
- objectFieldOffset(UNSAFE, "head", ConcurrentLinkedQueue.class);
- private static final long tailOffset =
- objectFieldOffset(UNSAFE, "tail", ConcurrentLinkedQueue.class);
-
private boolean casTail(Node<E> cmp, Node<E> val) {
return UNSAFE.compareAndSwapObject(this, tailOffset, cmp, val);
}
@@ -806,15 +808,21 @@
return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val);
}
- static long objectFieldOffset(sun.misc.Unsafe UNSAFE,
- String field, Class<?> klazz) {
+ // Unsafe mechanics
+
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long headOffset;
+ private static final long tailOffset;
+ static {
try {
- return UNSAFE.objectFieldOffset(klazz.getDeclaredField(field));
- } catch (NoSuchFieldException e) {
- // Convert Exception to corresponding Error
- NoSuchFieldError error = new NoSuchFieldError(field);
- error.initCause(e);
- throw error;
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = ConcurrentLinkedQueue.class;
+ headOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("head"));
+ tailOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("tail"));
+ } catch (Exception e) {
+ throw new Error(e);
}
}
}
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java Wed Mar 16 10:47:45 2011 -0400
@@ -507,13 +507,24 @@
return new AbstractMap.SimpleImmutableEntry<K,V>(key, v);
}
- // Unsafe mechanics
- private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
- private static final long valueOffset =
- objectFieldOffset(UNSAFE, "value", Node.class);
- private static final long nextOffset =
- objectFieldOffset(UNSAFE, "next", Node.class);
+ // UNSAFE mechanics
+
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long valueOffset;
+ private static final long nextOffset;
+ static {
+ try {
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = Node.class;
+ valueOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("value"));
+ nextOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("next"));
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
}
/* ---------------- Indexing -------------- */
@@ -580,10 +591,18 @@
}
// Unsafe mechanics
- private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
- private static final long rightOffset =
- objectFieldOffset(UNSAFE, "right", Index.class);
-
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long rightOffset;
+ static {
+ try {
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = Index.class;
+ rightOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("right"));
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
}
/* ---------------- Head nodes -------------- */
@@ -3082,20 +3101,16 @@
}
// Unsafe mechanics
- private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
- private static final long headOffset =
- objectFieldOffset(UNSAFE, "head", ConcurrentSkipListMap.class);
-
- static long objectFieldOffset(sun.misc.Unsafe UNSAFE,
- String field, Class<?> klazz) {
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long headOffset;
+ static {
try {
- return UNSAFE.objectFieldOffset(klazz.getDeclaredField(field));
- } catch (NoSuchFieldException e) {
- // Convert Exception to corresponding Error
- NoSuchFieldError error = new NoSuchFieldError(field);
- error.initCause(e);
- throw error;
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = ConcurrentSkipListMap.class;
+ headOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("head"));
+ } catch (Exception e) {
+ throw new Error(e);
}
}
-
}
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListSet.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListSet.java Wed Mar 16 10:47:45 2011 -0400
@@ -470,16 +470,20 @@
}
// Support for resetting map in clone
- private static final Unsafe unsafe = Unsafe.getUnsafe();
+ private void setMap(ConcurrentNavigableMap<E,Object> map) {
+ UNSAFE.putObjectVolatile(this, mapOffset, map);
+ }
+
+ private static final sun.misc.Unsafe UNSAFE;
private static final long mapOffset;
static {
try {
- mapOffset = unsafe.objectFieldOffset
- (ConcurrentSkipListSet.class.getDeclaredField("m"));
- } catch (Exception ex) { throw new Error(ex); }
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = ConcurrentSkipListSet.class;
+ mapOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("m"));
+ } catch (Exception e) {
+ throw new Error(e);
+ }
}
- private void setMap(ConcurrentNavigableMap<E,Object> map) {
- unsafe.putObjectVolatile(this, mapOffset, map);
- }
-
}
--- a/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java Wed Mar 16 10:47:45 2011 -0400
@@ -1318,16 +1318,19 @@
}
// Support for resetting lock while deserializing
- private static final Unsafe unsafe = Unsafe.getUnsafe();
+ private void resetLock() {
+ UNSAFE.putObjectVolatile(this, lockOffset, new ReentrantLock());
+ }
+ private static final sun.misc.Unsafe UNSAFE;
private static final long lockOffset;
static {
try {
- lockOffset = unsafe.objectFieldOffset
- (CopyOnWriteArrayList.class.getDeclaredField("lock"));
- } catch (Exception ex) { throw new Error(ex); }
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = CopyOnWriteArrayList.class;
+ lockOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("lock"));
+ } catch (Exception e) {
+ throw new Error(e);
+ }
}
- private void resetLock() {
- unsafe.putObjectVolatile(this, lockOffset, new ReentrantLock());
- }
-
}
--- a/jdk/src/share/classes/java/util/concurrent/LinkedTransferQueue.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/concurrent/LinkedTransferQueue.java Wed Mar 16 10:47:45 2011 -0400
@@ -525,16 +525,27 @@
return false;
}
+ private static final long serialVersionUID = -3375979862319811754L;
+
// Unsafe mechanics
- private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
- private static final long nextOffset =
- objectFieldOffset(UNSAFE, "next", Node.class);
- private static final long itemOffset =
- objectFieldOffset(UNSAFE, "item", Node.class);
- private static final long waiterOffset =
- objectFieldOffset(UNSAFE, "waiter", Node.class);
-
- private static final long serialVersionUID = -3375979862319811754L;
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long itemOffset;
+ private static final long nextOffset;
+ private static final long waiterOffset;
+ static {
+ try {
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = Node.class;
+ itemOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("item"));
+ nextOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("next"));
+ waiterOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("waiter"));
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
}
/** head of the queue; null until first enqueue */
@@ -1312,23 +1323,22 @@
// Unsafe mechanics
- private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
- private static final long headOffset =
- objectFieldOffset(UNSAFE, "head", LinkedTransferQueue.class);
- private static final long tailOffset =
- objectFieldOffset(UNSAFE, "tail", LinkedTransferQueue.class);
- private static final long sweepVotesOffset =
- objectFieldOffset(UNSAFE, "sweepVotes", LinkedTransferQueue.class);
-
- static long objectFieldOffset(sun.misc.Unsafe UNSAFE,
- String field, Class<?> klazz) {
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long headOffset;
+ private static final long tailOffset;
+ private static final long sweepVotesOffset;
+ static {
try {
- return UNSAFE.objectFieldOffset(klazz.getDeclaredField(field));
- } catch (NoSuchFieldException e) {
- // Convert Exception to corresponding Error
- NoSuchFieldError error = new NoSuchFieldError(field);
- error.initCause(e);
- throw error;
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = LinkedTransferQueue.class;
+ headOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("head"));
+ tailOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("tail"));
+ sweepVotesOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("sweepVotes"));
+ } catch (Exception e) {
+ throw new Error(e);
}
}
}
--- a/jdk/src/share/classes/java/util/concurrent/Phaser.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/concurrent/Phaser.java Wed Mar 16 10:47:45 2011 -0400
@@ -1137,18 +1137,16 @@
// Unsafe mechanics
- private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
- private static final long stateOffset =
- objectFieldOffset("state", Phaser.class);
-
- private static long objectFieldOffset(String field, Class<?> klazz) {
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long stateOffset;
+ static {
try {
- return UNSAFE.objectFieldOffset(klazz.getDeclaredField(field));
- } catch (NoSuchFieldException e) {
- // Convert Exception to corresponding Error
- NoSuchFieldError error = new NoSuchFieldError(field);
- error.initCause(e);
- throw error;
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = Phaser.class;
+ stateOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("state"));
+ } catch (Exception e) {
+ throw new Error(e);
}
}
}
--- a/jdk/src/share/classes/java/util/concurrent/PriorityBlockingQueue.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/concurrent/PriorityBlockingQueue.java Wed Mar 16 10:47:45 2011 -0400
@@ -963,21 +963,16 @@
}
// Unsafe mechanics
- private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
- private static final long allocationSpinLockOffset =
- objectFieldOffset(UNSAFE, "allocationSpinLock",
- PriorityBlockingQueue.class);
-
- static long objectFieldOffset(sun.misc.Unsafe UNSAFE,
- String field, Class<?> klazz) {
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long allocationSpinLockOffset;
+ static {
try {
- return UNSAFE.objectFieldOffset(klazz.getDeclaredField(field));
- } catch (NoSuchFieldException e) {
- // Convert Exception to corresponding Error
- NoSuchFieldError error = new NoSuchFieldError(field);
- error.initCause(e);
- throw error;
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = PriorityBlockingQueue.class;
+ allocationSpinLockOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("allocationSpinLock"));
+ } catch (Exception e) {
+ throw new Error(e);
}
}
-
}
--- a/jdk/src/share/classes/java/util/concurrent/SynchronousQueue.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/concurrent/SynchronousQueue.java Wed Mar 16 10:47:45 2011 -0400
@@ -279,12 +279,22 @@
}
// Unsafe mechanics
- private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
- private static final long nextOffset =
- objectFieldOffset(UNSAFE, "next", SNode.class);
- private static final long matchOffset =
- objectFieldOffset(UNSAFE, "match", SNode.class);
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long matchOffset;
+ private static final long nextOffset;
+ static {
+ try {
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = SNode.class;
+ matchOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("match"));
+ nextOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("next"));
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
}
/** The head (top) of the stack */
@@ -498,10 +508,18 @@
}
// Unsafe mechanics
- private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
- private static final long headOffset =
- objectFieldOffset(UNSAFE, "head", TransferStack.class);
-
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long headOffset;
+ static {
+ try {
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = TransferStack.class;
+ headOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("head"));
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
}
/** Dual Queue */
@@ -558,11 +576,22 @@
}
// Unsafe mechanics
- private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
- private static final long nextOffset =
- objectFieldOffset(UNSAFE, "next", QNode.class);
- private static final long itemOffset =
- objectFieldOffset(UNSAFE, "item", QNode.class);
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long itemOffset;
+ private static final long nextOffset;
+
+ static {
+ try {
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = QNode.class;
+ itemOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("item"));
+ nextOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("next"));
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
}
/** Head of queue */
@@ -791,15 +820,24 @@
}
}
- // unsafe mechanics
- private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
- private static final long headOffset =
- objectFieldOffset(UNSAFE, "head", TransferQueue.class);
- private static final long tailOffset =
- objectFieldOffset(UNSAFE, "tail", TransferQueue.class);
- private static final long cleanMeOffset =
- objectFieldOffset(UNSAFE, "cleanMe", TransferQueue.class);
-
+ private static final sun.misc.Unsafe UNSAFE;
+ private static final long headOffset;
+ private static final long tailOffset;
+ private static final long cleanMeOffset;
+ static {
+ try {
+ UNSAFE = sun.misc.Unsafe.getUnsafe();
+ Class k = TransferQueue.class;
+ headOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("head"));
+ tailOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("tail"));
+ cleanMeOffset = UNSAFE.objectFieldOffset
+ (k.getDeclaredField("cleanMe"));
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
}
/**
--- a/jdk/src/share/classes/java/util/jar/JarFile.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/jar/JarFile.java Wed Mar 16 10:47:45 2011 -0400
@@ -376,9 +376,9 @@
*/
private byte[] getBytes(ZipEntry ze) throws IOException {
byte[] b = new byte[(int)ze.getSize()];
- DataInputStream is = new DataInputStream(super.getInputStream(ze));
- is.readFully(b, 0, b.length);
- is.close();
+ try (DataInputStream is = new DataInputStream(super.getInputStream(ze))) {
+ is.readFully(b, 0, b.length);
+ }
return b;
}
@@ -480,10 +480,10 @@
JarEntry manEntry = getManEntry();
if (manEntry != null) {
byte[] b = new byte[(int)manEntry.getSize()];
- DataInputStream dis = new DataInputStream(
- super.getInputStream(manEntry));
- dis.readFully(b, 0, b.length);
- dis.close();
+ try (DataInputStream dis = new DataInputStream(
+ super.getInputStream(manEntry))) {
+ dis.readFully(b, 0, b.length);
+ }
int last = b.length - src.length;
int i = 0;
--- a/jdk/src/share/classes/java/util/zip/ZipEntry.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/java/util/zip/ZipEntry.java Wed Mar 16 10:47:45 2011 -0400
@@ -26,7 +26,6 @@
package java.util.zip;
import java.util.Date;
-import sun.misc.BootClassLoaderHook;
/**
* This class is used to represent a ZIP file entry.
--- a/jdk/src/share/classes/javax/crypto/SecretKeyFactory.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/javax/crypto/SecretKeyFactory.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -61,7 +61,6 @@
* <p> Every implementation of the Java platform is required to support the
* following standard <code>SecretKeyFactory</code> algorithms:
* <ul>
- * <li><tt>AES</tt></li>
* <li><tt>DES</tt></li>
* <li><tt>DESede</tt></li>
* </ul>
--- a/jdk/src/share/classes/javax/sound/midi/MidiSystem.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/javax/sound/midi/MidiSystem.java Wed Mar 16 10:47:45 2011 -0400
@@ -441,13 +441,6 @@
Synthesizer synth = getSynthesizer();
if (synth instanceof ReferenceCountingDevice) {
rec = ((ReferenceCountingDevice) synth).getReceiverReferenceCounting();
- // only use MixerSynth if it could successfully load a soundbank
- if (synth.getClass().toString().contains("com.sun.media.sound.MixerSynth")
- && (synth.getDefaultSoundbank() == null)) {
- // don't use this receiver if no soundbank available
- rec = null;
- synth.close();
- }
} else {
synth.open();
try {
--- a/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java Wed Mar 16 10:47:45 2011 -0400
@@ -174,6 +174,8 @@
if(!wasIcon(f)) {
Rectangle r = getBoundsForIconOf(f);
desktopIcon.setBounds(r.x, r.y, r.width, r.height);
+ // we must validate the hierarchy to not break the hw/lw mixing
+ desktopIcon.revalidate();
setWasIcon(f, Boolean.TRUE);
}
@@ -453,11 +455,9 @@
/** This moves the <code>JComponent</code> and repaints the damaged areas. */
public void setBoundsForFrame(JComponent f, int newX, int newY, int newWidth, int newHeight) {
- boolean didResize = (f.getWidth() != newWidth || f.getHeight() != newHeight);
f.setBounds(newX, newY, newWidth, newHeight);
- if(didResize) {
- f.validate();
- }
+ // we must validate the hierarchy to not break the hw/lw mixing
+ f.revalidate();
}
/** Convenience method to remove the desktopIcon of <b>f</b> is necessary. */
--- a/jdk/src/share/classes/javax/swing/JComponent.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/javax/swing/JComponent.java Wed Mar 16 10:47:45 2011 -0400
@@ -5158,31 +5158,30 @@
}
}
}
-
try {
- g = safelyGetGraphics(paintingComponent, c);
- try {
- if (hasBuffer) {
- RepaintManager rm = RepaintManager.currentManager(
- bufferedComponent);
- rm.beginPaint();
- try {
- rm.paint(paintingComponent, bufferedComponent, g,
- paintImmediatelyClip.x,
- paintImmediatelyClip.y,
- paintImmediatelyClip.width,
- paintImmediatelyClip.height);
- } finally {
- rm.endPaint();
+ if ((g = safelyGetGraphics(paintingComponent, c)) != null) {
+ try {
+ if (hasBuffer) {
+ RepaintManager rm = RepaintManager.currentManager(
+ bufferedComponent);
+ rm.beginPaint();
+ try {
+ rm.paint(paintingComponent, bufferedComponent, g,
+ paintImmediatelyClip.x,
+ paintImmediatelyClip.y,
+ paintImmediatelyClip.width,
+ paintImmediatelyClip.height);
+ } finally {
+ rm.endPaint();
+ }
+ } else {
+ g.setClip(paintImmediatelyClip.x, paintImmediatelyClip.y,
+ paintImmediatelyClip.width, paintImmediatelyClip.height);
+ paintingComponent.paint(g);
}
+ } finally {
+ g.dispose();
}
- else {
- g.setClip(paintImmediatelyClip.x,paintImmediatelyClip.y,
- paintImmediatelyClip.width,paintImmediatelyClip.height);
- paintingComponent.paint(g);
- }
- } finally {
- g.dispose();
}
}
finally {
--- a/jdk/src/share/classes/javax/swing/JViewport.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/javax/swing/JViewport.java Wed Mar 16 10:47:45 2011 -0400
@@ -1111,6 +1111,8 @@
view.setLocation(newX, newY);
repaintAll = false;
}
+ // we must validate the hierarchy to not break the hw/lw mixing
+ revalidate();
fireStateChanged();
}
}
--- a/jdk/src/share/classes/javax/swing/text/Utilities.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/javax/swing/text/Utilities.java Wed Mar 16 10:47:45 2011 -0400
@@ -390,11 +390,15 @@
}
if ((x >= currX) && (x < nextX)) {
// found the hit position... return the appropriate side
- if ((round == false) || ((x - currX) < (nextX - x))) {
- return i - txtOffset;
- } else {
- return i + 1 - txtOffset;
+ int offset = ((round == false) || ((x - currX) < (nextX - x))) ?
+ (i - txtOffset) : (i + 1 - txtOffset);
+ // the length of the string measured as a whole may differ from
+ // the sum of individual character lengths, for example if
+ // fractional metrics are enabled; and we must guard from this.
+ while (metrics.charsWidth(txt, txtOffset, offset + 1) > (x - x0)) {
+ offset--;
}
+ return (offset < 0 ? 0 : offset);
}
currX = nextX;
}
@@ -404,24 +408,6 @@
}
/**
- * Adjust text offset so that the length of a resulting string as a whole
- * fits into the specified width.
- */
- static int adjustOffsetForFractionalMetrics(
- Segment s, FontMetrics fm, int offset, int width) {
- // Sometimes the offset returned by getTabbedTextOffset is beyond the
- // available area, when fractional metrics are enabled. We should
- // guard against this.
- if (offset < s.count) {
- while (offset > 0 &&
- fm.charsWidth(s.array, s.offset, offset + 1) > width) {
- offset--;
- }
- }
- return offset;
- }
-
- /**
* Determine where to break the given text to fit
* within the given span. This tries to find a word boundary.
* @param s the source of the text
@@ -443,7 +429,6 @@
int txtCount = s.count;
int index = Utilities.getTabbedTextOffset(s, metrics, x0, x,
e, startOffset, false);
- index = adjustOffsetForFractionalMetrics(s, metrics, index, x - x0);
if (index >= txtCount - 1) {
return txtCount;
--- a/jdk/src/share/classes/javax/swing/text/WrappedPlainView.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/javax/swing/text/WrappedPlainView.java Wed Mar 16 10:47:45 2011 -0400
@@ -239,11 +239,9 @@
tabBase, tabBase + currentWidth,
this, p0);
} else {
- int offset = Utilities.getTabbedTextOffset(segment, metrics,
- tabBase, tabBase + currentWidth, this, p0, false);
- offset = Utilities.adjustOffsetForFractionalMetrics(
- segment, metrics, offset, currentWidth);
- p = p0 + offset;
+ p = p0 + Utilities.getTabbedTextOffset(segment, metrics,
+ tabBase, tabBase + currentWidth,
+ this, p0, false);
}
SegmentCache.releaseSharedSegment(segment);
return p;
--- a/jdk/src/share/classes/javax/swing/text/html/CSSBorder.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/javax/swing/text/html/CSSBorder.java Wed Mar 16 10:47:45 2011 -0400
@@ -203,10 +203,11 @@
public void paintBorder(Component c, Graphics g,
int x, int y, int width, int height) {
- assert (g instanceof Graphics2D) : "need Graphics2D instanse";
- Graphics2D g2 = (Graphics2D) g;
- Color savedColor = g2.getColor();
- Shape savedClip = g2.getClip();
+ if (!(g instanceof Graphics2D)) {
+ return;
+ }
+
+ Graphics2D g2 = (Graphics2D) g.create();
int[] widths = getWidths();
@@ -238,16 +239,16 @@
BorderPainter painter = getBorderPainter(i);
double angle = i * Math.PI / 2;
+ g2.setClip(g.getClip()); // Restore initial clip
g2.translate(intCorners[i][0], intCorners[i][1]);
g2.rotate(angle);
- g2.setClip(shape);
- painter.paint(shape, g, color, i);
+ g2.clip(shape);
+ painter.paint(shape, g2, color, i);
g2.rotate(-angle);
g2.translate(-intCorners[i][0], -intCorners[i][1]);
}
}
- g2.setColor(savedColor);
- g2.setClip(savedClip);
+ g2.dispose();
}
--- a/jdk/src/share/classes/sun/font/StrikeCache.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/font/StrikeCache.java Wed Mar 16 10:47:45 2011 -0400
@@ -319,8 +319,7 @@
ArrayList<Long> gids = null;
for (int i = 0; i < glyphPtrs.length; i++) {
- if (glyphPtrs[i] != 0 && unsafe.getByte(glyphPtrs[i] + managedOffset) == 0
- && unsafe.getInt(glyphPtrs[i] + cacheCellOffset) != 0) {
+ if (glyphPtrs[i] != 0 && unsafe.getByte(glyphPtrs[i] + managedOffset) == 0) {
if (gids == null) {
gids = new ArrayList<Long>();
@@ -330,6 +329,8 @@
}
if (gids != null) {
+ // Any reference by the disposers to the native glyph ptrs
+ // must be done before this returns.
notifyDisposeListeners(gids);
}
}
@@ -345,8 +346,7 @@
for (int i=0; i < glyphPtrs.length; i++) {
if (glyphPtrs[i] != 0
- && unsafe.getByte(glyphPtrs[i] + managedOffset) == 0
- && unsafe.getInt(glyphPtrs[i] + cacheCellOffset) != 0) {
+ && unsafe.getByte(glyphPtrs[i] + managedOffset) == 0) {
if (gids == null) {
gids = new ArrayList<Long>();
@@ -356,6 +356,8 @@
}
if (gids != null) {
+ // Any reference by the disposers to the native glyph ptrs
+ // must be done before this returns.
notifyDisposeListeners(gids);
}
}
--- a/jdk/src/share/classes/sun/java2d/pipe/AAShapePipe.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/java2d/pipe/AAShapePipe.java Wed Mar 16 10:47:45 2011 -0400
@@ -109,7 +109,7 @@
Region clip = sg.getCompClip();
int abox[] = new int[4];
AATileGenerator aatg =
- renderengine.getAATileGenerator(x, y, dx1, dy1, dx2, dy2, 0, 0,
+ renderengine.getAATileGenerator(x, y, dx1, dy1, dx2, dy2, lw1, lw2,
clip, abox);
if (aatg == null) {
// Nothing to render
--- a/jdk/src/share/classes/sun/misc/BootClassLoaderHook.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
- * 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;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URLStreamHandlerFactory;
-import sun.misc.URLClassPath;
-
-/**
- * BootClassLoaderHook defines an interface for a hook to inject
- * into the bootstrap class loader.
- *
- * With jkernel now removed, no hook is set
- */
-public abstract class BootClassLoaderHook {
- private static BootClassLoaderHook bootLoaderHook = null;
- public static synchronized BootClassLoaderHook getHook() {
- return bootLoaderHook;
- }
-
- public static synchronized void setHook(BootClassLoaderHook hook) {
- if (!VM.isBooted()) {
- throw new InternalError("hook can only be set after VM is booted");
- }
- if (bootLoaderHook != null) {
- throw new InternalError("hook should not be reinitialized");
- }
- bootLoaderHook = hook;
- }
-
- protected BootClassLoaderHook() {
- }
-
- /**
- * A method to be invoked before a class loader loads
- * a bootstrap class.
- *
- * @param classname the binary name of the class
- */
- public static void preLoadClass(String classname) {
- BootClassLoaderHook hook = getHook();
- if (hook != null) {
- hook.loadBootstrapClass(classname);
- }
- }
-
- /**
- * A method to be invoked before a class loader loads
- * a resource.
- *
- * @param resourcename the resource name
- */
- public static void preLoadResource(String resourcename) {
- BootClassLoaderHook hook = getHook();
- if (hook != null) {
- hook.getBootstrapResource(resourcename);
- }
- }
-
- /**
- * A method to be invoked before a library is loaded.
- *
- * @param libname the name of the library
- */
- public static void preLoadLibrary(String libname) {
- BootClassLoaderHook hook = getHook();
- if (hook != null) {
- hook.loadLibrary(libname);
- }
- }
-
- /**
- * Returns a pathname of a JAR or class that the hook loads
- * per this loadClass request; or null.
- *
- * @param classname the binary name of the class
- */
- public abstract String loadBootstrapClass(String className);
-
- /**
- * Returns a pathname of a resource file that the hook loads
- * per this getResource request; or null.
- *
- * @param resourceName the resource name
- */
- public abstract String getBootstrapResource(String resourceName);
-
- /**
- * Returns true if the hook successfully performs an operation per
- * this loadLibrary request; or false if it fails.
- *
- * @param libname the name of the library
- */
- public abstract boolean loadLibrary(String libname);
-
- /**
- * Returns a bootstrap class path constructed by the hook.
- *
- * @param bcp VM's bootstrap class path
- * @param factory Launcher's URL stream handler
- */
- public abstract URLClassPath getBootstrapClassPath(URLClassPath bcp,
- URLStreamHandlerFactory factory);
-
- /**
- * Returns true if the current thread is in the process of doing
- * a prefetching operation.
- */
- public abstract boolean isCurrentThreadPrefetching();
-
- /**
- * Returns true if the hook successfully prefetches the specified file.
- *
- * @param name a platform independent pathname
- */
- public abstract boolean prefetchFile(String name);
-}
--- a/jdk/src/share/classes/sun/misc/JavaSecurityCodeSignerAccess.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * 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;
-
-import java.security.CodeSigner;
-import java.security.cert.CRL;
-
-public interface JavaSecurityCodeSignerAccess {
- void setCRLs(CodeSigner signer, CRL[] crls);
- CRL[] getCRLs(CodeSigner signer);
-}
--- a/jdk/src/share/classes/sun/misc/Launcher.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/misc/Launcher.java Wed Mar 16 10:47:45 2011 -0400
@@ -38,7 +38,6 @@
import java.util.Set;
import java.util.Vector;
import java.security.AccessController;
-import java.security.AllPermission;
import java.security.PrivilegedAction;
import java.security.PrivilegedExceptionAction;
import java.security.AccessControlContext;
@@ -117,18 +116,6 @@
return loader;
}
- public static void addURLToAppClassLoader(URL u) {
- AccessController.checkPermission(new AllPermission());
- ClassLoader loader = Launcher.getLauncher().getClassLoader();
- ((Launcher.AppClassLoader) loader).addAppURL(u);
- }
-
- public static void addURLToExtClassLoader(URL u) {
- AccessController.checkPermission(new AllPermission());
- ClassLoader loader = Launcher.getLauncher().getClassLoader();
- ((Launcher.ExtClassLoader) loader.getParent()).addExtURL(u);
- }
-
/*
* The class loader used for loading installed extensions.
*/
@@ -247,11 +234,6 @@
return null;
}
- protected Class findClass(String name) throws ClassNotFoundException {
- BootClassLoaderHook.preLoadClass(name);
- return super.findClass(name);
- }
-
private static AccessControlContext getContext(File[] dirs)
throws IOException
{
@@ -316,7 +298,6 @@
public Class loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
- BootClassLoaderHook.preLoadClass(name);
int i = name.lastIndexOf('.');
if (i != -1) {
SecurityManager sm = System.getSecurityManager();
@@ -373,10 +354,6 @@
return acc;
}
-
- void addAppURL(URL url) {
- super.addURL(url);
- }
}
private static class BootClassPathHolder {
@@ -413,11 +390,7 @@
}
public static URLClassPath getBootstrapClassPath() {
- URLClassPath bcp = BootClassPathHolder.bcp;
- // if DownloadManager is installed, return the bootstrap class path
- // maintained by the Java kernel
- BootClassLoaderHook hook = BootClassLoaderHook.getHook();
- return hook == null ? bcp : hook.getBootstrapClassPath(bcp, factory);
+ return BootClassPathHolder.bcp;
}
private static URL[] pathToURLs(File[] path) {
--- a/jdk/src/share/classes/sun/misc/SharedSecrets.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/misc/SharedSecrets.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -28,7 +28,6 @@
import java.util.jar.JarFile;
import java.io.Console;
import java.io.FileDescriptor;
-import java.security.CodeSigner;
import java.security.ProtectionDomain;
/** A repository of "shared secrets", which are a mechanism for
@@ -49,7 +48,6 @@
private static JavaNioAccess javaNioAccess;
private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess;
private static JavaSecurityProtectionDomainAccess javaSecurityProtectionDomainAccess;
- private static JavaSecurityCodeSignerAccess javaSecurityCodeSignerAccess;
public static JavaUtilJarAccess javaUtilJarAccess() {
if (javaUtilJarAccess == null) {
@@ -127,16 +125,4 @@
unsafe.ensureClassInitialized(ProtectionDomain.class);
return javaSecurityProtectionDomainAccess;
}
-
- public static void setJavaSecurityCodeSignerAccess
- (JavaSecurityCodeSignerAccess jscsa) {
- javaSecurityCodeSignerAccess = jscsa;
- }
-
- public static JavaSecurityCodeSignerAccess
- getJavaSecurityCodeSignerAccess() {
- if (javaSecurityCodeSignerAccess == null)
- unsafe.ensureClassInitialized(CodeSigner.class);
- return javaSecurityCodeSignerAccess;
- }
}
--- a/jdk/src/share/classes/sun/net/httpserver/ChunkedInputStream.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/net/httpserver/ChunkedInputStream.java Wed Mar 16 10:47:45 2011 -0400
@@ -69,32 +69,33 @@
*/
private int readChunkHeader () throws IOException {
boolean gotCR = false;
- char c;
+ int c;
char[] len_arr = new char [16];
int len_size = 0;
boolean end_of_len = false;
- while ((c=(char)in.read())!= -1) {
+ while ((c=in.read())!= -1) {
+ char ch = (char) c;
if (len_size == len_arr.length -1) {
throw new IOException ("invalid chunk header");
}
if (gotCR) {
- if (c == LF) {
+ if (ch == LF) {
int l = numeric (len_arr, len_size);
return l;
} else {
gotCR = false;
}
if (!end_of_len) {
- len_arr[len_size++] = c;
+ len_arr[len_size++] = ch;
}
} else {
- if (c == CR) {
+ if (ch == CR) {
gotCR = true;
- } else if (c == ';') {
+ } else if (ch == ';') {
end_of_len = true;
} else if (!end_of_len) {
- len_arr[len_size++] = c;
+ len_arr[len_size++] = ch;
}
}
}
--- a/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -475,8 +475,8 @@
assert !target.isOpen();
try {
close();
- } catch (IOException ignore) {
- // nothing we can do
+ } catch (Throwable suppressed) {
+ e.addSuppressed(suppressed);
}
throw e;
} catch (IOException ioe) {
--- a/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -42,14 +42,12 @@
* Cipher implementation class. This class currently supports
* DES, DESede, AES, ARCFOUR, and Blowfish.
*
- * This class is designed to support ECB and CBC with NoPadding and
- * PKCS5Padding for both. It will use its own padding impl if the
- * native mechanism does not support padding.
+ * This class is designed to support ECB, CBC, CTR with NoPadding
+ * and ECB, CBC with PKCS5Padding. It will use its own padding impl
+ * if the native mechanism does not support padding.
*
- * Note that PKCS#11 current only supports ECB and CBC. There are no
- * provisions for other modes such as CFB, OFB, PCBC, or CTR mode.
- * However, CTR could be implemented relatively easily (and efficiently)
- * on top of ECB mode in this class, if need be.
+ * Note that PKCS#11 currently only supports ECB, CBC, and CTR.
+ * There are no provisions for other modes such as CFB, OFB, and PCBC.
*
* @author Andreas Sterbenz
* @since 1.5
@@ -60,6 +58,8 @@
private final static int MODE_ECB = 3;
// mode constant for CBC mode
private final static int MODE_CBC = 4;
+ // mode constant for CTR mode
+ private final static int MODE_CTR = 5;
// padding constant for NoPadding
private final static int PAD_NONE = 5;
@@ -157,7 +157,7 @@
private byte[] padBuffer;
private int padBufferLen;
- // original IV, if in MODE_CBC
+ // original IV, if in MODE_CBC or MODE_CTR
private byte[] iv;
// number of bytes buffered internally by the native mechanism and padBuffer
@@ -213,6 +213,8 @@
("CBC mode not supported with stream ciphers");
}
result = MODE_CBC;
+ } else if (mode.equals("CTR")) {
+ result = MODE_CTR;
} else {
throw new NoSuchAlgorithmException("Unsupported mode " + mode);
}
@@ -228,6 +230,10 @@
if (padding.equals("NOPADDING")) {
paddingType = PAD_NONE;
} else if (padding.equals("PKCS5PADDING")) {
+ if (this.blockMode == MODE_CTR) {
+ throw new NoSuchPaddingException
+ ("PKCS#5 padding not supported with CTR mode");
+ }
paddingType = PAD_PKCS5;
if (mechanism != CKM_DES_CBC_PAD && mechanism != CKM_DES3_CBC_PAD &&
mechanism != CKM_AES_CBC_PAD) {
@@ -348,11 +354,14 @@
("IV not used in ECB mode");
}
}
- } else { // MODE_CBC
+ } else { // MODE_CBC or MODE_CTR
if (iv == null) {
if (encrypt == false) {
- throw new InvalidAlgorithmParameterException
- ("IV must be specified for decryption in CBC mode");
+ String exMsg =
+ (blockMode == MODE_CBC ?
+ "IV must be specified for decryption in CBC mode" :
+ "IV must be specified for decryption in CTR mode");
+ throw new InvalidAlgorithmParameterException(exMsg);
}
// generate random IV
if (random == null) {
@@ -410,13 +419,15 @@
if (session == null) {
session = token.getOpSession();
}
+ CK_MECHANISM mechParams = (blockMode == MODE_CTR?
+ new CK_MECHANISM(mechanism, new CK_AES_CTR_PARAMS(iv)) :
+ new CK_MECHANISM(mechanism, iv));
+
try {
if (encrypt) {
- token.p11.C_EncryptInit(session.id(),
- new CK_MECHANISM(mechanism, iv), p11Key.keyID);
+ token.p11.C_EncryptInit(session.id(), mechParams, p11Key.keyID);
} else {
- token.p11.C_DecryptInit(session.id(),
- new CK_MECHANISM(mechanism, iv), p11Key.keyID);
+ token.p11.C_DecryptInit(session.id(), mechParams, p11Key.keyID);
}
} catch (PKCS11Exception ex) {
// release session when initialization failed
--- a/jdk/src/share/classes/sun/security/pkcs11/P11RSACipher.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/security/pkcs11/P11RSACipher.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -62,6 +62,11 @@
// mode constant for public key decryption (verifying)
private final static int MODE_VERIFY = 4;
+ // padding type constant for NoPadding
+ private final static int PAD_NONE = 1;
+ // padding type constant for PKCS1Padding
+ private final static int PAD_PKCS1 = 2;
+
// token instance
private final Token token;
@@ -77,6 +82,9 @@
// mode, one of MODE_* above
private int mode;
+ // padding, one of PAD_* above
+ private int padType;
+
private byte[] buffer;
private int bufOfs;
@@ -113,8 +121,10 @@
protected void engineSetPadding(String padding)
throws NoSuchPaddingException {
String lowerPadding = padding.toLowerCase(Locale.ENGLISH);
- if (lowerPadding.equals("pkcs1Padding")) {
- // empty
+ if (lowerPadding.equals("pkcs1padding")) {
+ padType = PAD_PKCS1;
+ } else if (lowerPadding.equals("nopadding")) {
+ padType = PAD_NONE;
} else {
throw new NoSuchPaddingException("Unsupported padding " + padding);
}
@@ -209,7 +219,8 @@
int n = (p11Key.keyLength() + 7) >> 3;
outputSize = n;
buffer = new byte[n];
- maxInputSize = encrypt ? (n - PKCS1_MIN_PADDING_LENGTH) : n;
+ maxInputSize = ((padType == PAD_PKCS1 && encrypt) ?
+ (n - PKCS1_MIN_PADDING_LENGTH) : n);
try {
initialize();
} catch (PKCS11Exception e) {
--- a/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -621,12 +621,16 @@
m(CKM_AES_CBC_PAD, CKM_AES_CBC));
d(CIP, "AES/ECB", P11Cipher, s("AES"),
m(CKM_AES_ECB));
+ d(CIP, "AES/CTR/NoPadding", P11Cipher,
+ m(CKM_AES_CTR));
d(CIP, "Blowfish/CBC", P11Cipher,
m(CKM_BLOWFISH_CBC));
// XXX RSA_X_509, RSA_OAEP not yet supported
- d(CIP, "RSA/ECB/PKCS1Padding", P11RSACipher,
+ d(CIP, "RSA/ECB/PKCS1Padding", P11RSACipher, s("RSA"),
m(CKM_RSA_PKCS));
+ d(CIP, "RSA/ECB/NoPadding", P11RSACipher,
+ m(CKM_RSA_X_509));
d(SIG, "RawDSA", P11Signature, s("NONEwithDSA"),
m(CKM_DSA));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_AES_CTR_PARAMS.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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.security.pkcs11.wrapper;
+
+/**
+ * This class represents the necessary parameters required by
+ * the CKM_AES_CTR mechanism as defined in CK_AES_CTR_PARAMS structure.<p>
+ * <B>PKCS#11 structure:</B>
+ * <PRE>
+ * typedef struct CK_AES_CTR_PARAMS {
+ * CK_ULONG ulCounterBits;
+ * CK_BYTE cb[16];
+ * } CK_AES_CTR_PARAMS;
+ * </PRE>
+ *
+ * @author Yu-Ching Valerie Peng
+ * @since 1.7
+ */
+public class CK_AES_CTR_PARAMS {
+
+ private final long ulCounterBits;
+ private final byte cb[];
+
+ public CK_AES_CTR_PARAMS(byte[] cb) {
+ ulCounterBits = 128;
+ this.cb = cb.clone();
+ }
+
+ public String toString() {
+ StringBuffer buffer = new StringBuffer();
+
+ buffer.append(Constants.INDENT);
+ buffer.append("ulCounterBits: ");
+ buffer.append(ulCounterBits);
+ buffer.append(Constants.NEWLINE);
+
+ buffer.append(Constants.INDENT);
+ buffer.append("cb: ");
+ buffer.append(Functions.toHexString(cb));
+
+ return buffer.toString();
+ }
+}
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_MECHANISM.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_MECHANISM.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -48,6 +48,7 @@
package sun.security.pkcs11.wrapper;
import java.math.BigInteger;
+import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
/**
* class CK_MECHANISM specifies a particular mechanism and any parameters it
@@ -127,6 +128,10 @@
init(mechanism, params);
}
+ public CK_MECHANISM(long mechanism, CK_AES_CTR_PARAMS params) {
+ init(mechanism, params);
+ }
+
private void init(long mechanism, Object pParameter) {
this.mechanism = mechanism;
this.pParameter = pParameter;
--- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/PKCS11Constants.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/PKCS11Constants.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -47,8 +47,6 @@
package sun.security.pkcs11.wrapper;
-
-
/**
* This interface holds constants of the PKCS#11 v2.11 standard.
* This is mainly the content of the 'pkcs11t.h' header file.
@@ -306,6 +304,10 @@
public static final long CKK_VENDOR_DEFINED = 0x80000000L;
+ // new for v2.20 amendment 3
+ //public static final long CKK_CAMELLIA = 0x00000025L;
+ //public static final long CKK_ARIA = 0x00000026L;
+
// pseudo key type ANY (for template manager)
public static final long PCKK_ANY = 0x7FFFFF22L;
@@ -690,6 +692,34 @@
public static final long CKM_VENDOR_DEFINED = 0x80000000L;
+ // new for v2.20 amendment 3
+ public static final long CKM_SHA224 = 0x00000255L;
+ public static final long CKM_SHA224_HMAC = 0x00000256L;
+ public static final long CKM_SHA224_HMAC_GENERAL = 0x00000257L;
+ public static final long CKM_SHA224_KEY_DERIVATION = 0x00000396L;
+ public static final long CKM_SHA224_RSA_PKCS = 0x00000046L;
+ public static final long CKM_SHA224_RSA_PKCS_PSS = 0x00000047L;
+ public static final long CKM_AES_CTR = 0x00001086L;
+ /*
+ public static final long CKM_CAMELLIA_KEY_GEN = 0x00000550L;
+ public static final long CKM_CAMELLIA_ECB = 0x00000551L;
+ public static final long CKM_CAMELLIA_CBC = 0x00000552L;
+ public static final long CKM_CAMELLIA_MAC = 0x00000553L;
+ public static final long CKM_CAMELLIA_MAC_GENERAL = 0x00000554L;
+ public static final long CKM_CAMELLIA_CBC_PAD = 0x00000555L;
+ public static final long CKM_CAMELLIA_ECB_ENCRYPT_DATA = 0x00000556L;
+ public static final long CKM_CAMELLIA_CBC_ENCRYPT_DATA = 0x00000557L;
+ public static final long CKM_CAMELLIA_CTR = 0x00000558L;
+ public static final long CKM_ARIA_KEY_GEN = 0x00000560L;
+ public static final long CKM_ARIA_ECB = 0x00000561L;
+ public static final long CKM_ARIA_CBC = 0x00000562L;
+ public static final long CKM_ARIA_MAC = 0x00000563L;
+ public static final long CKM_ARIA_MAC_GENERAL = 0x00000564L;
+ public static final long CKM_ARIA_CBC_PAD = 0x00000565L;
+ public static final long CKM_ARIA_ECB_ENCRYPT_DATA = 0x00000566L;
+ public static final long CKM_ARIA_CBC_ENCRYPT_DATA = 0x00000567L;
+ */
+
// NSS private
public static final long CKM_NSS_TLS_PRF_GENERAL = 0x80000373L;
@@ -881,7 +911,8 @@
/* The following MGFs are defined */
public static final long CKG_MGF1_SHA1 = 0x00000001L;
-
+ // new for v2.20 amendment 3
+ public static final long CKG_MGF1_SHA224 = 0x00000005L;
/* The following encoding parameter sources are defined */
public static final long CKZ_DATA_SPECIFIED = 0x00000001L;
--- a/jdk/src/share/classes/sun/security/tools/JarSigner.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/security/tools/JarSigner.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* 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 sun.security.tools;
import java.io.*;
-import java.security.cert.X509CRL;
import java.util.*;
import java.util.zip.*;
import java.util.jar.*;
@@ -36,7 +35,6 @@
import java.text.Collator;
import java.text.MessageFormat;
import java.security.cert.Certificate;
-import java.security.cert.CRL;
import java.security.cert.X509Certificate;
import java.security.cert.CertificateException;
import java.security.*;
@@ -58,7 +56,6 @@
import sun.security.x509.*;
import sun.security.util.*;
import sun.misc.BASE64Encoder;
-import sun.misc.SharedSecrets;
/**
@@ -117,13 +114,11 @@
static final int SIGNED_BY_ALIAS = 0x08; // signer is in alias list
X509Certificate[] certChain; // signer's cert chain (when composing)
- Set<X509CRL> crls; // signer provided CRLs
PrivateKey privateKey; // private key
KeyStore store; // the keystore specified by -keystore
// or the default keystore, never null
String keystore; // key store file
- List<String> crlfiles = new ArrayList<>(); // CRL files to add
boolean nullStream = false; // null keystore input stream (NONE)
boolean token = false; // token-based keystore
String jarfile; // jar files to sign or verify
@@ -151,7 +146,6 @@
boolean signManifest = true; // "sign" the whole manifest
boolean externalSF = true; // leave the .SF out of the PKCS7 block
boolean strict = false; // treat warnings as error
- boolean autoCRL = false; // Automatcially add CRL defined in cert
// read zip entry raw bytes
private ByteArrayOutputStream baos = new ByteArrayOutputStream(2048);
@@ -232,29 +226,6 @@
} else {
loadKeyStore(keystore, true);
getAliasInfo(alias);
- crls = new HashSet<X509CRL>();
- if (crlfiles.size() > 0 || autoCRL) {
- CertificateFactory fac =
- CertificateFactory.getInstance("X509");
- List<CRL> list = new ArrayList<>();
- for (String file: crlfiles) {
- Collection<? extends CRL> tmp = KeyTool.loadCRLs(file);
- for (CRL crl: tmp) {
- if (crl instanceof X509CRL) {
- crls.add((X509CRL)crl);
- }
- }
- }
- if (autoCRL) {
- List<CRL> crlsFromCert =
- KeyTool.readCRLsFromCert(certChain[0]);
- for (CRL crl: crlsFromCert) {
- if (crl instanceof X509CRL) {
- crls.add((X509CRL)crl);
- }
- }
- }
- }
// load the alternative signing mechanism
if (altSignerClass != null) {
@@ -396,13 +367,6 @@
} else if (collator.compare(flags, "-digestalg") ==0) {
if (++n == args.length) usageNoArg();
digestalg = args[n];
- } else if (collator.compare(flags, "-crl") ==0) {
- if ("auto".equals(modifier)) {
- autoCRL = true;
- } else {
- if (++n == args.length) usageNoArg();
- crlfiles.add(args[n]);
- }
} else if (collator.compare(flags, "-certs") ==0) {
showcerts = true;
} else if (collator.compare(flags, "-strict") ==0) {
@@ -549,9 +513,6 @@
(".sigalg.algorithm.name.of.signature.algorithm"));
System.out.println();
System.out.println(rb.getString
- (".crl.auto.file.include.CRL.in.signed.jar"));
- System.out.println();
- System.out.println(rb.getString
(".verify.verify.a.signed.JAR.file"));
System.out.println();
System.out.println(rb.getString
@@ -691,20 +652,6 @@
if (showcerts) {
sb.append(si);
sb.append('\n');
- CRL[] crls = SharedSecrets
- .getJavaSecurityCodeSignerAccess()
- .getCRLs(signer);
- if (crls != null) {
- for (CRL crl: crls) {
- if (crl instanceof X509CRLImpl) {
- sb.append(tab).append("[");
- sb.append(String.format(
- rb.getString("with.a.CRL.including.d.entries"),
- ((X509CRLImpl)crl).getRevokedCertificates().size()))
- .append("]\n");
- }
- }
- }
}
}
} else if (showcerts && !verbose.equals("all")) {
@@ -1284,7 +1231,7 @@
try {
block =
- sf.generateBlock(privateKey, sigalg, certChain, crls,
+ sf.generateBlock(privateKey, sigalg, certChain,
externalSF, tsaUrl, tsaCert, signingMechanism, args,
zipFile);
} catch (SocketTimeoutException e) {
@@ -2249,7 +2196,6 @@
public Block generateBlock(PrivateKey privateKey,
String sigalg,
X509Certificate[] certChain,
- Set<X509CRL> crls,
boolean externalSF, String tsaUrl,
X509Certificate tsaCert,
ContentSigner signingMechanism,
@@ -2257,7 +2203,7 @@
throws NoSuchAlgorithmException, InvalidKeyException, IOException,
SignatureException, CertificateException
{
- return new Block(this, privateKey, sigalg, certChain, crls, externalSF,
+ return new Block(this, privateKey, sigalg, certChain, externalSF,
tsaUrl, tsaCert, signingMechanism, args, zipFile);
}
@@ -2271,8 +2217,7 @@
* Construct a new signature block.
*/
Block(SignatureFile sfg, PrivateKey privateKey, String sigalg,
- X509Certificate[] certChain, Set<X509CRL> crls,
- boolean externalSF, String tsaUrl,
+ X509Certificate[] certChain, boolean externalSF, String tsaUrl,
X509Certificate tsaCert, ContentSigner signingMechanism,
String[] args, ZipFile zipFile)
throws NoSuchAlgorithmException, InvalidKeyException, IOException,
@@ -2359,7 +2304,7 @@
// Assemble parameters for the signing mechanism
ContentSignerParameters params =
new JarSignerParameters(args, tsaUri, tsaCert, signature,
- signatureAlgorithm, certChain, crls, content, zipFile);
+ signatureAlgorithm, certChain, content, zipFile);
// Generate the signature block
block = signingMechanism.generateSignedData(
@@ -2400,7 +2345,6 @@
private byte[] signature;
private String signatureAlgorithm;
private X509Certificate[] signerCertificateChain;
- private Set<X509CRL> crls;
private byte[] content;
private ZipFile source;
@@ -2409,8 +2353,7 @@
*/
JarSignerParameters(String[] args, URI tsa, X509Certificate tsaCertificate,
byte[] signature, String signatureAlgorithm,
- X509Certificate[] signerCertificateChain, Set<X509CRL> crls,
- byte[] content,
+ X509Certificate[] signerCertificateChain, byte[] content,
ZipFile source) {
if (signature == null || signatureAlgorithm == null ||
@@ -2423,7 +2366,6 @@
this.signature = signature;
this.signatureAlgorithm = signatureAlgorithm;
this.signerCertificateChain = signerCertificateChain;
- this.crls = crls;
this.content = content;
this.source = source;
}
@@ -2499,13 +2441,4 @@
public ZipFile getSource() {
return source;
}
-
- @Override
- public Set<X509CRL> getCRLs() {
- if (crls == null) {
- return Collections.emptySet();
- } else {
- return Collections.unmodifiableSet(crls);
- }
- }
}
--- a/jdk/src/share/classes/sun/security/tools/JarSignerResources.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/security/tools/JarSignerResources.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -74,8 +74,6 @@
"[-digestalg <algorithm>] name of digest algorithm"},
{".sigalg.algorithm.name.of.signature.algorithm",
"[-sigalg <algorithm>] name of signature algorithm"},
- {".crl.auto.file.include.CRL.in.signed.jar",
- "[-crl[:auto| <file>] include CRL in signed jar"},
{".verify.verify.a.signed.JAR.file",
"[-verify] verify a signed JAR file"},
{".verbose.suboptions.verbose.output.when.signing.verifying.",
@@ -193,7 +191,6 @@
{"using.an.alternative.signing.mechanism",
"using an alternative signing mechanism"},
{"entry.was.signed.on", "entry was signed on {0}"},
- {"with.a.CRL.including.d.entries", "with a CRL including %d entries"},
{"Warning.", "Warning: "},
{"This.jar.contains.unsigned.entries.which.have.not.been.integrity.checked.",
"This jar contains unsigned entries which have not been integrity-checked. "},
--- a/jdk/src/share/classes/sun/security/tools/KeyTool.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/security/tools/KeyTool.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* 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,7 +25,6 @@
package sun.security.tools;
-import sun.misc.SharedSecrets;
import java.io.*;
import java.security.CodeSigner;
import java.security.KeyStore;
@@ -2311,16 +2310,6 @@
out.println();
}
}
- CRL[] crls = SharedSecrets
- .getJavaSecurityCodeSignerAccess()
- .getCRLs(signer);
- if (crls != null) {
- out.println(rb.getString("CRLs."));
- out.println();
- for (CRL crl: crls) {
- printCRL(crl, out);
- }
- }
}
}
}
--- a/jdk/src/share/classes/sun/security/tools/TimestampedSigner.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/security/tools/TimestampedSigner.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* 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.util.List;
import com.sun.jarsigner.*;
-import java.security.cert.X509CRL;
import java.util.Arrays;
import sun.security.pkcs.*;
import sun.security.timestamp.*;
@@ -238,9 +237,8 @@
AlgorithmId[] algorithms = {digestAlgorithmId};
// Create the PKCS #7 signed data message
- PKCS7 p7 =
- new PKCS7(algorithms, contentInfo, signerCertificateChain,
- parameters.getCRLs().toArray(new X509CRL[parameters.getCRLs().size()]), signerInfos);
+ PKCS7 p7 = new PKCS7(algorithms, contentInfo, signerCertificateChain,
+ null, signerInfos);
ByteArrayOutputStream p7out = new ByteArrayOutputStream();
p7.encodeSignedData(p7out);
--- a/jdk/src/share/classes/sun/security/util/SignatureFileVerifier.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/security/util/SignatureFileVerifier.java Wed Mar 16 10:47:45 2011 -0400
@@ -37,7 +37,6 @@
import sun.security.pkcs.*;
import sun.security.timestamp.TimestampToken;
import sun.misc.BASE64Decoder;
-import sun.misc.SharedSecrets;
import sun.security.jca.Providers;
@@ -486,12 +485,7 @@
signers = new ArrayList<CodeSigner>();
}
// Append the new code signer
- CodeSigner signer = new CodeSigner(certChain, getTimestamp(info));
- if (block.getCRLs() != null) {
- SharedSecrets.getJavaSecurityCodeSignerAccess().setCRLs(
- signer, block.getCRLs());
- }
- signers.add(signer);
+ signers.add(new CodeSigner(certChain, getTimestamp(info)));
if (debug != null) {
debug.println("Signature Block Certificate: " +
--- a/jdk/src/share/classes/sun/tools/native2ascii/Main.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/tools/native2ascii/Main.java Wed Mar 16 10:47:45 2011 -0400
@@ -94,7 +94,7 @@
* Run the converter
*/
public synchronized boolean convert(String argv[]){
- Vector v = new Vector(2);
+ List<String> v = new ArrayList<>(2);
File outputFile = null;
boolean createOutputFile = false;
@@ -115,7 +115,7 @@
usage();
return false;
}
- v.addElement(argv[i]);
+ v.add(argv[i]);
}
}
if (encodingString == null)
@@ -126,11 +126,11 @@
initializeConverter();
if (v.size() == 1)
- inputFileName = (String)v.elementAt(0);
+ inputFileName = v.get(0);
if (v.size() == 2) {
- inputFileName = (String)v.elementAt(0);
- outputFileName = (String)v.elementAt(1);
+ inputFileName = v.get(0);
+ outputFileName = v.get(1);
createOutputFile = true;
}
@@ -363,9 +363,7 @@
private String formatMsg(String key, String arg) {
String msg = getMsg(key);
- String[] args = new String[1];
- args[0] = arg;
- return MessageFormat.format(msg, (Object)args);
+ return MessageFormat.format(msg, arg);
}
--- a/jdk/src/share/classes/sun/util/calendar/LocalGregorianCalendar.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/util/calendar/LocalGregorianCalendar.java Wed Mar 16 10:47:45 2011 -0400
@@ -127,7 +127,9 @@
calendarProps = (Properties) AccessController.doPrivileged(new PrivilegedExceptionAction() {
public Object run() throws IOException {
Properties props = new Properties();
- props.load(new FileInputStream(fname));
+ try (FileInputStream fis = new FileInputStream(fname)) {
+ props.load(fis);
+ }
return props;
}
});
--- a/jdk/src/share/classes/sun/util/calendar/ZoneInfo.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/util/calendar/ZoneInfo.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -266,7 +266,7 @@
int index = getTransitionIndex(date, type);
// prior to the transition table, returns the raw offset.
- // should support LMT.
+ // FIXME: should support LMT.
if (index < 0) {
int offset = getLastRawOffset();
if (offsets != null) {
@@ -297,7 +297,13 @@
if (type != UTC_TIME) {
msec -= rawOffset;
}
- int dstoffset = tz.inDaylightTime(new Date(msec)) ? tz.getDSTSavings() : 0;
+ int dstoffset = tz.getOffset(msec) - rawOffset;
+
+ // Check if it's in a standard-to-daylight transition.
+ if (dstoffset > 0 && tz.getOffset(msec - dstoffset) == rawoffset) {
+ dstoffset = 0;
+ }
+
if (offsets != null) {
offsets[0] = rawoffset;
offsets[1] = dstoffset;
@@ -452,6 +458,36 @@
return (simpleTimeZoneParams != null);
}
+ @Override
+ public boolean observesDaylightTime() {
+ if (simpleTimeZoneParams != null) {
+ return true;
+ }
+ if (transitions == null) {
+ return false;
+ }
+
+ // Look up the transition table to see if it's in DST right
+ // now or if there's any standard-to-daylight transition at
+ // any future.
+ long utc = System.currentTimeMillis() - rawOffsetDiff;
+ int index = getTransitionIndex(utc, UTC_TIME);
+
+ // before transitions in the transition table
+ if (index < 0) {
+ return false;
+ }
+
+ // the time is in the table range.
+ for (int i = index; i < transitions.length; i++) {
+ if ((transitions[i] & DST_MASK) != 0) {
+ return true;
+ }
+ }
+ // No further DST is observed.
+ return false;
+ }
+
/**
* Queries if the specified date is in Daylight Saving Time.
*/
--- a/jdk/src/share/classes/sun/util/logging/PlatformLogger.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/classes/sun/util/logging/PlatformLogger.java Wed Mar 16 10:47:45 2011 -0400
@@ -535,7 +535,14 @@
}
void doLog(int level, String msg, Object... params) {
- LoggingSupport.log(javaLogger, levelObjects.get(level), msg, params);
+ // only pass String objects to the j.u.l.Logger which may
+ // be created by untrusted code
+ int len = (params != null) ? params.length : 0;
+ Object[] sparams = new String[len];
+ for (int i = 0; i < len; i++) {
+ sparams [i] = String.valueOf(params[i]);
+ }
+ LoggingSupport.log(javaLogger, levelObjects.get(level), msg, sparams);
}
boolean isEnabled() {
--- a/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipDirectoryStream.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipDirectoryStream.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2011, 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
@@ -76,7 +76,7 @@
} catch (IOException e) {
throw new IllegalStateException(e);
}
- return new Iterator<>() {
+ return new Iterator<Path>() {
private Path next;
@Override
public boolean hasNext() {
--- a/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileSystem.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileSystem.java Wed Mar 16 10:47:45 2011 -0400
@@ -112,11 +112,8 @@
}
// sm and existence check
zfpath.getFileSystem().provider().checkAccess(zfpath, AccessMode.READ);
- try {
- zfpath.getFileSystem().provider().checkAccess(zfpath, AccessMode.WRITE);
- } catch (AccessDeniedException x) {
+ if (!Files.isWritable(zfpath))
this.readOnly = true;
- }
this.zc = ZipCoder.get(nameEncoding);
this.defaultdir = new ZipPath(this, getBytes(defaultDir));
this.ch = Files.newByteChannel(zfpath, READ);
--- a/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipPath.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipPath.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2011, 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
@@ -590,7 +590,7 @@
@Override
public Iterator<Path> iterator() {
- return new Iterator<>() {
+ return new Iterator<Path>() {
private int i = 0;
@Override
--- a/jdk/src/share/native/sun/security/pkcs11/wrapper/p11_convert.c Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/native/sun/security/pkcs11/wrapper/p11_convert.c Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -695,6 +695,46 @@
}
/*
+ * converts the Java CK_AES_CTR_PARAMS object to a CK_AES_CTR_PARAMS structure
+ *
+ * @param env - used to call JNI funktions to get the Java classes and objects
+ * @param jParam - the Java CK_AES_CTR_PARAMS object to convert
+ * @param ckpParam - pointer to the new CK_AES_CTR_PARAMS structure
+ */
+void jAesCtrParamsToCKAesCtrParam(JNIEnv *env, jobject jParam,
+ CK_AES_CTR_PARAMS_PTR ckpParam) {
+ jclass jAesCtrParamsClass;
+ jfieldID fieldID;
+ jlong jCounterBits;
+ jobject jCb;
+ CK_BYTE_PTR ckBytes;
+ CK_ULONG ckTemp;
+
+ /* get ulCounterBits */
+ jAesCtrParamsClass = (*env)->FindClass(env, CLASS_AES_CTR_PARAMS);
+ if (jAesCtrParamsClass == NULL) { return; }
+ fieldID = (*env)->GetFieldID(env, jAesCtrParamsClass, "ulCounterBits", "J");
+ if (fieldID == NULL) { return; }
+ jCounterBits = (*env)->GetLongField(env, jParam, fieldID);
+
+ /* get cb */
+ fieldID = (*env)->GetFieldID(env, jAesCtrParamsClass, "cb", "[B");
+ if (fieldID == NULL) { return; }
+ jCb = (*env)->GetObjectField(env, jParam, fieldID);
+
+ /* populate java values */
+ ckpParam->ulCounterBits = jLongToCKULong(jCounterBits);
+ jByteArrayToCKByteArray(env, jCb, &ckBytes, &ckTemp);
+ if ((*env)->ExceptionCheck(env)) { return; }
+ if (ckTemp != 16) {
+ TRACE1("ERROR: WRONG CTR IV LENGTH %d", ckTemp);
+ } else {
+ memcpy(ckpParam->cb, ckBytes, ckTemp);
+ free(ckBytes);
+ }
+}
+
+/*
* converts a Java CK_MECHANISM object into a CK_MECHANISM structure
*
* @param env - used to call JNI funktions to get the values out of the Java object
@@ -937,12 +977,10 @@
{
/* get all Java mechanism parameter classes */
jclass jVersionClass, jSsl3MasterKeyDeriveParamsClass, jSsl3KeyMatParamsClass;
- jclass jTlsPrfParamsClass, jRsaPkcsOaepParamsClass, jPbeParamsClass;
- jclass jPkcs5Pbkd2ParamsClass, jRsaPkcsPssParamsClass;
+ jclass jTlsPrfParamsClass, jAesCtrParamsClass, jRsaPkcsOaepParamsClass;
+ jclass jPbeParamsClass, jPkcs5Pbkd2ParamsClass, jRsaPkcsPssParamsClass;
jclass jEcdh1DeriveParamsClass, jEcdh2DeriveParamsClass;
jclass jX942Dh1DeriveParamsClass, jX942Dh2DeriveParamsClass;
-
- /* get all Java mechanism parameter classes */
TRACE0("\nDEBUG: jMechanismParameterToCKMechanismParameter");
/* most common cases, i.e. NULL/byte[]/long, are already handled by
@@ -1046,6 +1084,33 @@
return;
}
+ jAesCtrParamsClass = (*env)->FindClass(env, CLASS_AES_CTR_PARAMS);
+ if (jAesCtrParamsClass == NULL) { return; }
+ if ((*env)->IsInstanceOf(env, jParam, jAesCtrParamsClass)) {
+ /*
+ * CK_AES_CTR_PARAMS
+ */
+ CK_AES_CTR_PARAMS_PTR ckpParam;
+
+ ckpParam = (CK_AES_CTR_PARAMS_PTR) malloc(sizeof(CK_AES_CTR_PARAMS));
+ if (ckpParam == NULL) {
+ JNU_ThrowOutOfMemoryError(env, 0);
+ return;
+ }
+
+ /* convert jParameter to CKParameter */
+ jAesCtrParamsToCKAesCtrParam(env, jParam, ckpParam);
+ if ((*env)->ExceptionCheck(env)) {
+ free(ckpParam);
+ return;
+ }
+
+ /* get length and pointer of parameter */
+ *ckpLength = sizeof(CK_AES_CTR_PARAMS);
+ *ckpParamPtr = ckpParam;
+ return;
+ }
+
jRsaPkcsOaepParamsClass = (*env)->FindClass(env, CLASS_RSA_PKCS_OAEP_PARAMS);
if (jRsaPkcsOaepParamsClass == NULL) { return; }
if ((*env)->IsInstanceOf(env, jParam, jRsaPkcsOaepParamsClass)) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/native/sun/security/pkcs11/wrapper/pkcs-11v2-20a3.h Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,124 @@
+/* pkcs-11v2-20a3.h include file for the PKCS #11 Version 2.20 Amendment 3
+ document. */
+
+/* $Revision: 1.4 $ */
+
+/* License to copy and use this software is granted provided that it is
+ * identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface
+ * (Cryptoki) Version 2.20 Amendment 3" in all material mentioning or
+ * referencing this software.
+
+ * RSA Security Inc. makes no representations concerning either the
+ * merchantability of this software or the suitability of this software for
+ * any particular purpose. It is provided "as is" without express or implied
+ * warranty of any kind.
+ */
+
+/* This file is preferably included after inclusion of pkcs11.h */
+
+#ifndef _PKCS_11V2_20A3_H_
+#define _PKCS_11V2_20A3_H_ 1
+
+/* Are the definitions of this file already included in pkcs11t.h ? */
+#ifndef CKK_CAMELLIA
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Key types */
+
+/* Camellia is new for PKCS #11 v2.20 amendment 3 */
+#define CKK_CAMELLIA 0x00000025
+/* ARIA is new for PKCS #11 v2.20 amendment 3 */
+#define CKK_ARIA 0x00000026
+
+
+/* Mask-generating functions */
+
+/* SHA-224 is new for PKCS #11 v2.20 amendment 3 */
+#define CKG_MGF1_SHA224 0x00000005
+
+
+/* Mechanism Identifiers */
+
+/* SHA-224 is new for PKCS #11 v2.20 amendment 3 */
+#define CKM_SHA224 0x00000255
+#define CKM_SHA224_HMAC 0x00000256
+#define CKM_SHA224_HMAC_GENERAL 0x00000257
+
+/* SHA-224 key derivation is new for PKCS #11 v2.20 amendment 3 */
+#define CKM_SHA224_KEY_DERIVATION 0x00000396
+
+/* SHA-224 RSA mechanisms are new for PKCS #11 v2.20 amendment 3 */
+#define CKM_SHA224_RSA_PKCS 0x00000046
+#define CKM_SHA224_RSA_PKCS_PSS 0x00000047
+
+/* AES counter mode is new for PKCS #11 v2.20 amendment 3 */
+#define CKM_AES_CTR 0x00001086
+
+/* Camellia is new for PKCS #11 v2.20 amendment 3 */
+#define CKM_CAMELLIA_KEY_GEN 0x00000550
+#define CKM_CAMELLIA_ECB 0x00000551
+#define CKM_CAMELLIA_CBC 0x00000552
+#define CKM_CAMELLIA_MAC 0x00000553
+#define CKM_CAMELLIA_MAC_GENERAL 0x00000554
+#define CKM_CAMELLIA_CBC_PAD 0x00000555
+#define CKM_CAMELLIA_ECB_ENCRYPT_DATA 0x00000556
+#define CKM_CAMELLIA_CBC_ENCRYPT_DATA 0x00000557
+#define CKM_CAMELLIA_CTR 0x00000558
+
+/* ARIA is new for PKCS #11 v2.20 amendment 3 */
+#define CKM_ARIA_KEY_GEN 0x00000560
+#define CKM_ARIA_ECB 0x00000561
+#define CKM_ARIA_CBC 0x00000562
+#define CKM_ARIA_MAC 0x00000563
+#define CKM_ARIA_MAC_GENERAL 0x00000564
+#define CKM_ARIA_CBC_PAD 0x00000565
+#define CKM_ARIA_ECB_ENCRYPT_DATA 0x00000566
+#define CKM_ARIA_CBC_ENCRYPT_DATA 0x00000567
+
+
+/* Mechanism parameters */
+
+/* CK_AES_CTR_PARAMS is new for PKCS #11 v2.20 amendment 3 */
+typedef struct CK_AES_CTR_PARAMS {
+ CK_ULONG ulCounterBits;
+ CK_BYTE cb[16];
+} CK_AES_CTR_PARAMS;
+
+typedef CK_AES_CTR_PARAMS CK_PTR CK_AES_CTR_PARAMS_PTR;
+
+/* CK_CAMELLIA_CTR_PARAMS is new for PKCS #11 v2.20 amendment 3 */
+typedef struct CK_CAMELLIA_CTR_PARAMS {
+ CK_ULONG ulCounterBits;
+ CK_BYTE cb[16];
+} CK_CAMELLIA_CTR_PARAMS;
+
+typedef CK_CAMELLIA_CTR_PARAMS CK_PTR CK_CAMELLIA_CTR_PARAMS_PTR;
+
+/* CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS is new for PKCS #11 v2.20 amendment 3 */
+typedef struct CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS {
+ CK_BYTE iv[16];
+ CK_BYTE_PTR pData;
+ CK_ULONG length;
+} CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS;
+
+typedef CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS_PTR;
+
+/* CK_ARIA_CBC_ENCRYPT_DATA_PARAMS is new for PKCS #11 v2.20 amendment 3 */
+typedef struct CK_ARIA_CBC_ENCRYPT_DATA_PARAMS {
+ CK_BYTE iv[16];
+ CK_BYTE_PTR pData;
+ CK_ULONG length;
+} CK_ARIA_CBC_ENCRYPT_DATA_PARAMS;
+
+typedef CK_ARIA_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_ARIA_CBC_ENCRYPT_DATA_PARAMS_PTR;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif
--- a/jdk/src/share/native/sun/security/pkcs11/wrapper/pkcs11wrapper.h Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/share/native/sun/security/pkcs11/wrapper/pkcs11wrapper.h Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -153,6 +153,7 @@
#include "p11_md.h"
#include "pkcs11.h"
+#include "pkcs-11v2-20a3.h"
#include <jni.h>
#include <jni_util.h>
@@ -272,6 +273,7 @@
#define CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS "sun/security/pkcs11/wrapper/CK_SSL3_MASTER_KEY_DERIVE_PARAMS"
#define CLASS_SSL3_KEY_MAT_PARAMS "sun/security/pkcs11/wrapper/CK_SSL3_KEY_MAT_PARAMS"
#define CLASS_TLS_PRF_PARAMS "sun/security/pkcs11/wrapper/CK_TLS_PRF_PARAMS"
+#define CLASS_AES_CTR_PARAMS "sun/security/pkcs11/wrapper/CK_AES_CTR_PARAMS"
/* function to convert a PKCS#11 return value other than CK_OK into a Java Exception
* or to throw a PKCS11RuntimeException
--- a/jdk/src/solaris/classes/java/util/prefs/FileSystemPreferences.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/classes/java/util/prefs/FileSystemPreferences.java Wed Mar 16 10:47:45 2011 -0400
@@ -571,9 +571,9 @@
long newLastSyncTime = 0;
try {
newLastSyncTime = prefsFile.lastModified();
- FileInputStream fis = new FileInputStream(prefsFile);
- XmlSupport.importMap(fis, m);
- fis.close();
+ try (FileInputStream fis = new FileInputStream(prefsFile)) {
+ XmlSupport.importMap(fis, m);
+ }
} catch(Exception e) {
if (e instanceof InvalidPreferencesFormatException) {
getLogger().warning("Invalid preferences format in "
@@ -618,9 +618,9 @@
if (!dir.exists() && !dir.mkdirs())
throw new BackingStoreException(dir +
" create failed.");
- FileOutputStream fos = new FileOutputStream(tmpFile);
- XmlSupport.exportMap(fos, prefsCache);
- fos.close();
+ try (FileOutputStream fos = new FileOutputStream(tmpFile)) {
+ XmlSupport.exportMap(fos, prefsCache);
+ }
if (!tmpFile.renameTo(prefsFile))
throw new BackingStoreException("Can't rename " +
tmpFile + " to " + prefsFile);
--- a/jdk/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java Wed Mar 16 10:47:45 2011 -0400
@@ -56,12 +56,14 @@
}
private native void run(String title, int mode, String dir, String file,
- FilenameFilter filter, boolean isMultipleMode);
+ FilenameFilter filter, boolean isMultipleMode, int x, int y);
private native void quit();
@Override
public native void toFront();
+ @Override
+ public native void setBounds(int x, int y, int width, int height, int op);
/**
* Called exclusively by the native C code.
@@ -106,9 +108,8 @@
Thread t = new Thread() {
public void run() {
GtkFileDialogPeer.this.run(fd.getTitle(), fd.getMode(),
- fd.getDirectory(), fd.getFile(), fd
- .getFilenameFilter(), fd
- .isMultipleMode());
+ fd.getDirectory(), fd.getFile(), fd.getFilenameFilter(), fd.isMultipleMode(),
+ fd.getX(), fd.getY());
fd.setVisible(false);
}
};
--- a/jdk/src/solaris/classes/sun/font/XRGlyphCache.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/classes/sun/font/XRGlyphCache.java Wed Mar 16 10:47:45 2011 -0400
@@ -70,9 +70,14 @@
try {
SunToolkit.awtLock();
- ArrayList<Integer> glyphIDList = new ArrayList<Integer>(glyphPtrList.size());
+ GrowableIntArray glyphIDList = new GrowableIntArray(1, glyphPtrList.size());
for (long glyphPtr : glyphPtrList) {
- glyphIDList.add(XRGlyphCacheEntry.getGlyphID(glyphPtr));
+ int glyphID = XRGlyphCacheEntry.getGlyphID(glyphPtr);
+
+ //Check if glyph hasn't been freed already
+ if (glyphID != 0) {
+ glyphIDList.addInt(glyphID);
+ }
}
freeGlyphs(glyphIDList);
} finally {
@@ -83,7 +88,6 @@
protected int getFreeGlyphID() {
if (freeGlyphIDs.size() > 0) {
int newID = freeGlyphIDs.remove(freeGlyphIDs.size() - 1);
- ;
return newID;
}
return nextID++;
@@ -246,7 +250,7 @@
glyph.setPinned();
}
- ArrayList<Integer> deleteGlyphList = new ArrayList<Integer>();
+ GrowableIntArray deleteGlyphList = new GrowableIntArray(1, 10);
int pixelsToRelease = cachedPixels - MAX_CACHED_PIXELS;
for (int i = cacheList.size() - 1; i >= 0 && pixelsToRelease > 0; i--) {
@@ -254,7 +258,7 @@
if (!entry.isPinned()) {
pixelsToRelease -= entry.getPixelCnt();
- deleteGlyphList.add(new Integer(entry.getGlyphID()));
+ deleteGlyphList.addInt(entry.getGlyphID());
}
}
@@ -265,26 +269,23 @@
freeGlyphs(deleteGlyphList);
}
- private void freeGlyphs(List<Integer> glyphIdList) {
-
- freeGlyphIDs.addAll(glyphIdList);
+ private void freeGlyphs(GrowableIntArray glyphIdList) {
+ GrowableIntArray removedLCDGlyphs = new GrowableIntArray(1, 10);
+ GrowableIntArray removedGrayscaleGlyphs = new GrowableIntArray(1, 10);
- GrowableIntArray removedLCDGlyphs = new GrowableIntArray(1, 1);
- GrowableIntArray removedGrayscaleGlyphs = new GrowableIntArray(1, 1);
+ for (int i=0; i < glyphIdList.getSize(); i++) {
+ int glyphId = glyphIdList.getInt(i);
+ freeGlyphIDs.add(glyphId);
- for (Integer glyphId : glyphIdList) {
- tmp.setValue(glyphId.intValue());
+ tmp.setValue(glyphId);
XRGlyphCacheEntry entry = cacheMap.get(tmp);
cachedPixels -= entry.getPixelCnt();
-
- int removedGlyphID = entry.getGlyphID();
- tmp.setValue(removedGlyphID);
cacheMap.remove(tmp);
if (entry.getGlyphSet() == grayGlyphSet) {
- removedGrayscaleGlyphs.addInt(removedGlyphID);
+ removedGrayscaleGlyphs.addInt(glyphId);
} else {
- removedLCDGlyphs.addInt(removedGlyphID);
+ removedLCDGlyphs.addInt(glyphId);
}
entry.setGlyphID(0);
--- a/jdk/src/solaris/classes/sun/java2d/xr/XRSurfaceData.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/classes/sun/java2d/xr/XRSurfaceData.java Wed Mar 16 10:47:45 2011 -0400
@@ -55,6 +55,8 @@
native void initXRPicture(long xsdo, int pictForm);
+ native void freeXSDOPicture(long xsdo);
+
public static final String DESC_BYTE_A8_X11 = "Byte A8 Pixmap";
public static final String DESC_INT_RGB_X11 = "Integer RGB Pixmap";
public static final String DESC_INT_ARGB_X11 = "Integer ARGB-Pre Pixmap";
@@ -531,6 +533,17 @@
public Object getDestination() {
return peer.getTarget();
}
+
+ public void invalidate() {
+ try {
+ SunToolkit.awtLock();
+ freeXSDOPicture(getNativeOps());
+ }finally {
+ SunToolkit.awtUnlock();
+ }
+
+ super.invalidate();
+ }
}
public static class XRInternalSurfaceData extends XRSurfaceData {
--- a/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -236,7 +236,9 @@
} catch (SecurityException x) {
try {
ch.close();
- } catch (IOException ignore) { }
+ } catch (Throwable suppressed) {
+ x.addSuppressed(suppressed);
+ }
throw x;
}
return ch;
--- a/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -137,7 +137,7 @@
return port;
}
- // register for events if there are outstanding I/O operations
+ // register events for outstanding I/O operations, caller already owns updateLock
private void updateEvents() {
assert Thread.holdsLock(updateLock);
int events = 0;
@@ -149,6 +149,13 @@
port.startPoll(fdVal, events);
}
+ // register events for outstanding I/O operations
+ private void lockAndUpdateEvents() {
+ synchronized (updateLock) {
+ updateEvents();
+ }
+ }
+
// invoke to finish read and/or write operations
private void finish(boolean mayInvokeDirect,
boolean readable,
@@ -255,10 +262,11 @@
// close channel if connection cannot be established
try {
close();
- } catch (IOException ignore) { }
+ } catch (Throwable suppressed) {
+ e.addSuppressed(suppressed);
+ }
}
-
// invoke handler and set result
CompletionHandler<Void,Object> handler = connectHandler;
Object att = connectAttachment;
@@ -345,7 +353,9 @@
if (e != null) {
try {
close();
- } catch (IOException ignore) { }
+ } catch (Throwable suppressed) {
+ e.addSuppressed(suppressed);
+ }
}
if (handler == null) {
return CompletedFuture.withResult(null, e);
@@ -399,9 +409,8 @@
exc = x;
} finally {
// restart poll in case of concurrent write
- synchronized (updateLock) {
- updateEvents();
- }
+ if (!(exc instanceof AsynchronousCloseException))
+ lockAndUpdateEvents();
end();
}
@@ -595,9 +604,8 @@
exc = x;
} finally {
// restart poll in case of concurrent write
- synchronized (updateLock) {
- updateEvents();
- }
+ if (!(exc instanceof AsynchronousCloseException))
+ lockAndUpdateEvents();
end();
}
--- a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -77,22 +77,24 @@
*/
#endif /* __linux__ */
struct hostent res, res2, *hp;
- char buf[HENT_BUF_SIZE];
- char buf2[HENT_BUF_SIZE];
+ // these buffers must be pointer-aligned so they are declared
+ // with pointer type
+ char *buf[HENT_BUF_SIZE/(sizeof (char *))];
+ char *buf2[HENT_BUF_SIZE/(sizeof (char *))];
int h_error=0;
#ifdef __GLIBC__
- gethostbyname_r(hostname, &res, buf, sizeof(buf), &hp, &h_error);
+ gethostbyname_r(hostname, &res, (char*)buf, sizeof(buf), &hp, &h_error);
#else
- hp = gethostbyname_r(hostname, &res, buf, sizeof(buf), &h_error);
+ hp = gethostbyname_r(hostname, &res, (char*)buf, sizeof(buf), &h_error);
#endif
if (hp) {
#ifdef __GLIBC__
gethostbyaddr_r(hp->h_addr, hp->h_length, AF_INET,
- &res2, buf2, sizeof(buf2), &hp, &h_error);
+ &res2, (char*)buf2, sizeof(buf2), &hp, &h_error);
#else
hp = gethostbyaddr_r(hp->h_addr, hp->h_length, AF_INET,
- &res2, buf2, sizeof(buf2), &h_error);
+ &res2, (char*)buf2, sizeof(buf2), &h_error);
#endif
if (hp) {
/*
@@ -136,7 +138,9 @@
const char *hostname;
jobjectArray ret = 0;
struct hostent res, *hp = 0;
- char buf[HENT_BUF_SIZE];
+ // this buffer must be pointer-aligned so is declared
+ // with pointer type
+ char *buf[HENT_BUF_SIZE/(sizeof (char *))];
/* temporary buffer, on the off chance we need to expand */
char *tmp = NULL;
@@ -176,9 +180,9 @@
/* Try once, with our static buffer. */
#ifdef __GLIBC__
- gethostbyname_r(hostname, &res, buf, sizeof(buf), &hp, &h_error);
+ gethostbyname_r(hostname, &res, (char*)buf, sizeof(buf), &hp, &h_error);
#else
- hp = gethostbyname_r(hostname, &res, buf, sizeof(buf), &h_error);
+ hp = gethostbyname_r(hostname, &res, (char*)buf, sizeof(buf), &h_error);
#endif
/* With the re-entrant system calls, it's possible that the buffer
@@ -251,7 +255,9 @@
jstring ret = NULL;
jint addr;
struct hostent hent, *hp = 0;
- char buf[HENT_BUF_SIZE];
+ // this buffer must be pointer-aligned so is declared
+ // with pointer type
+ char *buf[HENT_BUF_SIZE/(sizeof (char *))];
int h_error = 0;
char *tmp = NULL;
@@ -273,10 +279,10 @@
addr = htonl(addr);
#ifdef __GLIBC__
gethostbyaddr_r((char *)&addr, sizeof(addr), AF_INET, &hent,
- buf, sizeof(buf), &hp, &h_error);
+ (char*)buf, sizeof(buf), &hp, &h_error);
#else
hp = gethostbyaddr_r((char *)&addr, sizeof(addr), AF_INET, &hent,
- buf, sizeof(buf), &h_error);
+ (char*)buf, sizeof(buf), &h_error);
#endif
/* With the re-entrant system calls, it's possible that the buffer
* we pass to it is not large enough to hold an exceptionally
--- a/jdk/src/solaris/native/java/net/NetworkInterface.c Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/native/java/net/NetworkInterface.c Wed Mar 16 10:47:45 2011 -0400
@@ -45,7 +45,6 @@
#ifdef __linux__
#include <sys/ioctl.h>
#include <bits/ioctls.h>
-#include <linux/sockios.h>
#include <sys/utsname.h>
#include <stdio.h>
#endif
@@ -1100,7 +1099,7 @@
#ifdef AF_INET6
static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) {
FILE *f;
- char addr6[40], devname[20];
+ char addr6[40], devname[21];
char addr6p[8][5];
int plen, scope, dad_status, if_idx;
uint8_t ipv6addr[16];
--- a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Wed Mar 16 10:47:45 2011 -0400
@@ -34,8 +34,8 @@
#include <fcntl.h>
#endif
#ifdef __linux__
-#include <linux/unistd.h>
-#include <linux/sysctl.h>
+#include <unistd.h>
+#include <sys/sysctl.h>
#include <sys/utsname.h>
#include <netinet/ip.h>
--- a/jdk/src/solaris/native/java/net/PlainSocketImpl.c Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/native/java/net/PlainSocketImpl.c Wed Mar 16 10:47:45 2011 -0400
@@ -42,8 +42,8 @@
#include <fcntl.h>
#endif
#ifdef __linux__
-#include <linux/unistd.h>
-#include <linux/sysctl.h>
+#include <unistd.h>
+#include <sys/sysctl.h>
#endif
#include "jvm.h"
--- a/jdk/src/solaris/native/java/net/linux_close.c Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/native/java/net/linux_close.c Wed Mar 16 10:47:45 2011 -0400
@@ -112,7 +112,7 @@
*/
static inline fdEntry_t *getFdEntry(int fd)
{
- if (fd < 0 || fd > fdCount) {
+ if (fd < 0 || fd >= fdCount) {
return NULL;
}
return &fdTable[fd];
--- a/jdk/src/solaris/native/java/net/net_util_md.c Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/native/java/net/net_util_md.c Wed Mar 16 10:47:45 2011 -0400
@@ -608,7 +608,7 @@
{
/* now find the scope_id for "lo" */
- char devname[20];
+ char devname[21];
char addr6p[8][5];
int plen, scope, dad_status, if_idx;
@@ -651,7 +651,7 @@
static void initLocalIfs () {
FILE *f;
unsigned char staddr [16];
- char ifname [32];
+ char ifname [33];
struct localinterface *lif=0;
int index, x1, x2, x3;
unsigned int u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,ua,ub,uc,ud,ue,uf;
@@ -660,7 +660,7 @@
return ;
}
while (fscanf (f, "%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x "
- "%d %x %x %x %s",&u0,&u1,&u2,&u3,&u4,&u5,&u6,&u7,
+ "%d %x %x %x %32s",&u0,&u1,&u2,&u3,&u4,&u5,&u6,&u7,
&u8,&u9,&ua,&ub,&uc,&ud,&ue,&uf,
&index, &x1, &x2, &x3, ifname) == 21) {
staddr[0] = (unsigned char)u0;
@@ -1102,7 +1102,7 @@
* index.
*/
if (match) {
- char devname[20];
+ char devname[21];
char addr6p[8][5];
int plen, scope, dad_status, if_idx;
--- a/jdk/src/solaris/native/sun/awt/gtk2_interface.c Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/native/sun/awt/gtk2_interface.c Wed Mar 16 10:47:45 2011 -0400
@@ -608,7 +608,10 @@
fp_gtk_viewport_new = dl_symbol("gtk_viewport_new");
fp_gtk_window_new = dl_symbol("gtk_window_new");
fp_gtk_window_present = dl_symbol("gtk_window_present");
- fp_gtk_dialog_new = dl_symbol("gtk_dialog_new");
+ fp_gtk_window_move = dl_symbol("gtk_window_move");
+ fp_gtk_window_resize = dl_symbol("gtk_window_resize");
+
+ fp_gtk_dialog_new = dl_symbol("gtk_dialog_new");
fp_gtk_frame_new = dl_symbol("gtk_frame_new");
fp_gtk_adjustment_new = dl_symbol("gtk_adjustment_new");
--- a/jdk/src/solaris/native/sun/awt/gtk2_interface.h Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/native/sun/awt/gtk2_interface.h Wed Mar 16 10:47:45 2011 -0400
@@ -750,7 +750,8 @@
GdkPixbuf *(*fp_gdk_pixbuf_new_from_file)(const char *filename, GError **error);
void (*fp_gtk_widget_destroy)(GtkWidget *widget);
void (*fp_gtk_window_present)(GtkWindow *window);
-
+void (*fp_gtk_window_move)(GtkWindow *window, gint x, gint y);
+void (*fp_gtk_window_resize)(GtkWindow *window, gint width, gint height);
/**
* Function Pointers for GtkFileChooser
--- a/jdk/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.c Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.c Wed Mar 16 10:47:45 2011 -0400
@@ -102,6 +102,33 @@
fp_gdk_threads_leave();
}
+/*
+ * Class: sun_awt_X11_GtkFileDialogPeer
+ * Method: setBounds
+ * Signature: (IIIII)V
+ */
+JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_setBounds
+(JNIEnv * env, jobject jpeer, jint x, jint y, jint width, jint height, jint op)
+{
+ GtkWindow* dialog;
+
+ fp_gdk_threads_enter();
+
+ dialog = (GtkWindow*)jlong_to_ptr(
+ (*env)->GetLongField(env, jpeer, widgetFieldID));
+
+ if (dialog != NULL) {
+ if (x >= 0 && y >= 0) {
+ fp_gtk_window_move(dialog, (gint)x, (gint)y);
+ }
+ if (width > 0 && height > 0) {
+ fp_gtk_window_resize(dialog, (gint)width, (gint)height);
+ }
+ }
+
+ fp_gdk_threads_leave();
+}
+
/**
* Convert a GSList to an array of filenames (without the parent folder)
*/
@@ -175,12 +202,12 @@
/*
* Class: sun_awt_X11_GtkFileDialogPeer
* Method: run
- * Signature: (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/io/FilenameFilter;Z;)V
+ * Signature: (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/io/FilenameFilter;ZII)V
*/
JNIEXPORT void JNICALL
Java_sun_awt_X11_GtkFileDialogPeer_run(JNIEnv * env, jobject jpeer,
jstring jtitle, jint mode, jstring jdir, jstring jfile,
- jobject jfilter, jboolean multiple)
+ jobject jfilter, jboolean multiple, int x, int y)
{
GtkWidget *dialog = NULL;
GtkFileFilter *filter;
@@ -244,6 +271,14 @@
dialog), TRUE);
}
+ /* Set the initial location */
+ if (x >= 0 && y >= 0) {
+ fp_gtk_window_move((GtkWindow*)dialog, (gint)x, (gint)y);
+
+ // NOTE: it doesn't set the initial size for the file chooser
+ // as it seems like the file chooser overrides the size internally
+ }
+
fp_g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(
handle_response), jpeer);
--- a/jdk/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.h Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.h Wed Mar 16 10:47:45 2011 -0400
@@ -20,10 +20,10 @@
/*
* Class: sun_awt_X11_GtkFileDialogPeer
* Method: run
- * Signature: (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/io/FilenameFilter;Z;)V
+ * Signature: (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/io/FilenameFilter;ZII)V
*/
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_run
-(JNIEnv *, jobject, jstring, jint, jstring, jstring, jobject, jboolean);
+(JNIEnv *, jobject, jstring, jint, jstring, jstring, jobject, jboolean, jint, jint);
/*
* Class: sun_awt_X11_GtkFileDialogPeer
@@ -41,6 +41,14 @@
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_toFront
(JNIEnv *, jobject);
+/*
+ * Class: sun_awt_X11_GtkFileDialogPeer
+ * Method: setBounds
+ * Signature: (IIIII)V
+ */
+JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_setBounds
+(JNIEnv * env, jobject jpeer, jint x, jint y, jint width, jint height, jint op);
+
#ifdef __cplusplus
}
#endif
--- a/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c Wed Mar 16 10:47:45 2011 -0400
@@ -375,6 +375,12 @@
AWT_LOCK();
xsdo->invalid = JNI_TRUE;
+
+ if (xsdo->xrPic != None) {
+ XRenderFreePicture(awt_display, xsdo->xrPic);
+ xsdo->xrPic = None;
+ }
+
if (xsdo->isPixmap == JNI_TRUE && xsdo->drawable != 0) {
#ifdef MITSHM
if (xsdo->shmPMData.shmSegInfo != NULL) {
--- a/jdk/src/solaris/native/sun/java2d/x11/XRBackendNative.c Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/native/sun/java2d/x11/XRBackendNative.c Wed Mar 16 10:47:45 2011 -0400
@@ -304,23 +304,27 @@
color.blue = blue;
if (rectCnt <= 256) {
- xRects = &sRects[0];
+ xRects = &sRects[0];
} else {
- xRects = (XRectangle *) malloc(sizeof(XRectangle) * rectCnt);
- if (xRects == NULL) {
- return;
- }
+ xRects = (XRectangle *) malloc(sizeof(XRectangle) * rectCnt);
+ if (xRects == NULL) {
+ return;
+ }
}
- if ((rects = (jint *) (*env)->GetPrimitiveArrayCritical(env, rectArray, NULL)) == NULL) {
- return;
+ if ((rects = (jint *)
+ (*env)->GetPrimitiveArrayCritical(env, rectArray, NULL)) == NULL) {
+ if (xRects != &sRects[0]) {
+ free(xRects);
+ }
+ return;
}
for (i=0; i < rectCnt; i++) {
- xRects[i].x = rects[i*4 + 0];
- xRects[i].y = rects[i*4 + 1];
- xRects[i].width = rects[i*4 + 2];
- xRects[i].height = rects[i*4 + 3];
+ xRects[i].x = rects[i*4 + 0];
+ xRects[i].y = rects[i*4 + 1];
+ xRects[i].width = rects[i*4 + 2];
+ xRects[i].height = rects[i*4 + 3];
}
XRenderFillRectangles(awt_display, op,
@@ -328,7 +332,7 @@
(*env)->ReleasePrimitiveArrayCritical(env, rectArray, rects, JNI_ABORT);
if (xRects != &sRects[0]) {
- free(xRects);
+ free(xRects);
}
}
@@ -610,17 +614,30 @@
Glyph *gid = (Glyph *) malloc(sizeof(Glyph) * glyphCnt);
if (xginfo == NULL || gid == NULL) {
- return;
+ if (xginfo != NULL) {
+ free(xginfo);
+ }
+ if (gid != NULL) {
+ free(gid);
+ }
+ return;
}
- if ((glyphInfoPtrs = (jlong *) (*env)->GetPrimitiveArrayCritical(env, glyphInfoPtrsArray, NULL)) == NULL) {
+ if ((glyphInfoPtrs = (jlong *)(*env)->
+ GetPrimitiveArrayCritical(env, glyphInfoPtrsArray, NULL)) == NULL)
+ {
+ free(xginfo);
+ free(gid);
return;
}
if ((pixelData = (unsigned char *)
- (*env)->GetPrimitiveArrayCritical(env, pixelDataArray, NULL)) == NULL) {
+ (*env)->GetPrimitiveArrayCritical(env, pixelDataArray, NULL)) == NULL)
+ {
(*env)->ReleasePrimitiveArrayCritical(env,
- glyphInfoPtrsArray, glyphInfoPtrs, JNI_ABORT);
+ glyphInfoPtrsArray, glyphInfoPtrs, JNI_ABORT);
+ free(xginfo);
+ free(gid);
return;
}
@@ -637,7 +654,7 @@
}
XRenderAddGlyphs(awt_display, glyphSet, &gid[0], &xginfo[0], glyphCnt,
- pixelData, pixelDataLength);
+ (const char*)pixelData, pixelDataLength);
(*env)->ReleasePrimitiveArrayCritical(env, glyphInfoPtrsArray, glyphInfoPtrs, JNI_ABORT);
(*env)->ReleasePrimitiveArrayCritical(env, pixelDataArray, pixelData, JNI_ABORT);
@@ -684,22 +701,44 @@
xelts = &selts[0];
}else {
xelts = (XGlyphElt32 *) malloc(sizeof(XGlyphElt32) * eltCnt);
+ if (xelts == NULL) {
+ return;
+ }
}
if (glyphCnt <= 256) {
xids = &sids[0];
- }else {
+ } else {
xids = (Glyph *) malloc(sizeof(Glyph) * glyphCnt);
+ if (xids == NULL) {
+ if (xelts != &selts[0]) {
+ free(xelts);
+ }
+ return;
+ }
}
- if ((ids = (jint *) (*env)->GetPrimitiveArrayCritical(env, glyphIDArray, NULL)) == NULL) {
- return;
+ if ((ids = (jint *)
+ (*env)->GetPrimitiveArrayCritical(env, glyphIDArray, NULL)) == NULL) {
+ if (xelts != &selts[0]) {
+ free(xelts);
+ }
+ if (xids != &sids[0]) {
+ free(xids);
+ }
+ return;
}
if ((elts = (jint *)
(*env)->GetPrimitiveArrayCritical(env, eltArray, NULL)) == NULL) {
(*env)->ReleasePrimitiveArrayCritical(env,
glyphIDArray, ids, JNI_ABORT);
- return;
+ if (xelts != &selts[0]) {
+ free(xelts);
+ }
+ if (xids != &sids[0]) {
+ free(xids);
+ }
+ return;
}
for (i=0; i < glyphCnt; i++) {
@@ -724,11 +763,11 @@
(*env)->ReleasePrimitiveArrayCritical(env, eltArray, elts, JNI_ABORT);
if (xelts != &selts[0]) {
- free(xelts);
+ free(xelts);
}
if (xids != &sids[0]) {
- free(xids);
+ free(xids);
}
}
@@ -762,8 +801,12 @@
}
}
- if ((rects = (jint *) (*env)->GetPrimitiveArrayCritical(env, rectArray, NULL)) == NULL) {
- return;
+ if ((rects = (jint*)
+ (*env)->GetPrimitiveArrayCritical(env, rectArray, NULL)) == NULL) {
+ if (xRects != &sRects[0]) {
+ free(xRects);
+ }
+ return;
}
for (i=0; i < rectCnt; i++) {
--- a/jdk/src/solaris/native/sun/java2d/x11/XRSurfaceData.c Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/solaris/native/sun/java2d/x11/XRSurfaceData.c Wed Mar 16 10:47:45 2011 -0400
@@ -114,3 +114,26 @@
XShared_initSurface(env, xsdo, depth, width, height, drawable);
#endif /* !HEADLESS */
}
+
+
+
+JNIEXPORT void JNICALL
+Java_sun_java2d_xr_XRSurfaceData_freeXSDOPicture(JNIEnv *env, jobject xsd,
+ jlong pXSData)
+{
+#ifndef HEADLESS
+ X11SDOps *xsdo;
+
+ J2dTraceLn(J2D_TRACE_INFO, "in XRSurfaceData_freeXSDOPicture");
+
+ xsdo = X11SurfaceData_GetOps(env, xsd);
+ if (xsdo == NULL) {
+ return;
+ }
+
+ if(xsdo->xrPic != None) {
+ XRenderFreePicture(awt_display, xsdo->xrPic);
+ xsdo->xrPic = None;
+ }
+#endif /* !HEADLESS */
+}
--- a/jdk/src/windows/classes/sun/nio/ch/PendingIoCache.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/windows/classes/sun/nio/ch/PendingIoCache.java Wed Mar 16 10:47:45 2011 -0400
@@ -110,8 +110,7 @@
if (closed)
return;
- // handle the case that where there are I/O operations that have
- // not completed.
+ // handle case where I/O operations that have not completed.
if (!pendingIoMap.isEmpty())
clearPendingIoMap();
@@ -132,7 +131,9 @@
closePending = true;
try {
this.wait(50);
- } catch (InterruptedException x) { }
+ } catch (InterruptedException x) {
+ Thread.currentThread().interrupt();
+ }
closePending = false;
if (pendingIoMap.isEmpty())
return;
--- a/jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -439,6 +439,7 @@
address = ((DirectBuffer)buf).address();
}
+ boolean pending = false;
try {
begin();
@@ -449,6 +450,7 @@
n = readFile(handle, address, rem, position, overlapped);
if (n == IOStatus.UNAVAILABLE) {
// I/O is pending
+ pending = true;
return;
} else if (n == IOStatus.EOF) {
result.setResult(n);
@@ -460,14 +462,15 @@
// failed to initiate read
result.setFailure(toIOException(x));
} finally {
+ if (!pending) {
+ // release resources
+ if (overlapped != 0L)
+ ioCache.remove(overlapped);
+ releaseBufferIfSubstituted();
+ }
end();
}
- // release resources
- if (overlapped != 0L)
- ioCache.remove(overlapped);
- releaseBufferIfSubstituted();
-
// invoke completion handler
Invoker.invoke(result);
}
--- a/jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousSocketChannelImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousSocketChannelImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -239,14 +239,14 @@
result.setResult(null);
}
} catch (Throwable x) {
+ if (overlapped != 0L)
+ ioCache.remove(overlapped);
exc = x;
} finally {
end();
}
if (exc != null) {
- if (overlapped != 0L)
- ioCache.remove(overlapped);
closeChannel();
result.setFailure(toIOException(exc));
}
--- a/jdk/src/windows/classes/sun/nio/fs/WindowsFileStore.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/windows/classes/sun/nio/fs/WindowsFileStore.java Wed Mar 16 10:47:45 2011 -0400
@@ -201,13 +201,12 @@
if (!(ob instanceof WindowsFileStore))
return false;
WindowsFileStore other = (WindowsFileStore)ob;
- return this.volInfo.volumeSerialNumber() == other.volInfo.volumeSerialNumber();
+ return root.equals(other.root);
}
@Override
public int hashCode() {
- // reveals VSN without permission check - okay?
- return volInfo.volumeSerialNumber();
+ return root.hashCode();
}
@Override
--- a/jdk/src/windows/native/sun/windows/awt_Frame.cpp Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/windows/native/sun/windows/awt_Frame.cpp Wed Mar 16 10:47:45 2011 -0400
@@ -109,7 +109,6 @@
m_isMenuDropped = FALSE;
m_isInputMethodWindow = FALSE;
m_isUndecorated = FALSE;
- m_proxyFocusOwner = NULL;
m_lastProxiedFocusOwner = NULL;
m_actualFocusedWindow = NULL;
m_iconic = FALSE;
@@ -127,7 +126,6 @@
void AwtFrame::Dispose()
{
- DestroyProxyFocusOwner();
AwtWindow::Dispose();
}
@@ -308,22 +306,9 @@
return frame;
}
-LRESULT CALLBACK AwtFrame::ProxyWindowProc(HWND hwnd, UINT message,
- WPARAM wParam, LPARAM lParam)
+LRESULT AwtFrame::ProxyWindowProc(UINT message, WPARAM wParam, LPARAM lParam, MsgRouting &mr)
{
- TRY;
-
- DASSERT(::IsWindow(hwnd));
-
- AwtFrame *parent = (AwtFrame *)
- AwtComponent::GetComponentImpl(::GetParent(hwnd));
-
- if (!parent || parent->GetProxyFocusOwner() != hwnd ||
- message == AwtComponent::WmAwtIsComponent ||
- message == WM_GETOBJECT)
- {
- return ComCtl32Util::GetInstance().DefWindowProc(NULL, hwnd, message, wParam, lParam);
- }
+ LRESULT retValue = 0L;
AwtComponent *focusOwner = NULL;
// IME and input language related messages need to be sent to a window
@@ -346,19 +331,23 @@
// TODO: when a Choice's list is dropped down and we're scrolling in
// the list WM_MOUSEWHEEL messages come to the poxy, not to the list. Why?
case WM_MOUSEWHEEL:
- focusOwner = AwtComponent::GetComponent(parent->GetLastProxiedFocusOwner());
- if (focusOwner != NULL) {
- return focusOwner->WindowProc(message, wParam, lParam);
+ focusOwner = AwtComponent::GetComponent(GetLastProxiedFocusOwner());
+ if (focusOwner != NULL &&
+ focusOwner != this) // avoid recursive calls
+ {
+ retValue = focusOwner->WindowProc(message, wParam, lParam);
+ mr = mrConsume;
}
break;
case WM_SETFOCUS:
- if (!sm_suppressFocusAndActivation && parent->IsEmbeddedFrame()) {
- parent->AwtSetActiveWindow();
+ if (!sm_suppressFocusAndActivation && IsEmbeddedFrame()) {
+ AwtSetActiveWindow();
}
- return 0;
+ mr = mrConsume;
+ break;
case WM_KILLFOCUS:
- if (!sm_suppressFocusAndActivation && parent->IsEmbeddedFrame()) {
- AwtWindow::SynthesizeWmActivate(FALSE, parent->GetHWnd(), NULL);
+ if (!sm_suppressFocusAndActivation && IsEmbeddedFrame()) {
+ AwtWindow::SynthesizeWmActivate(FALSE, GetHWnd(), NULL);
} else if (sm_restoreFocusAndActivation) {
if (AwtComponent::GetFocusedWindow() != NULL) {
@@ -369,64 +358,28 @@
}
}
}
- return 0;
+ mr = mrConsume;
+ break;
case 0x0127: // WM_CHANGEUISTATE
case 0x0128: // WM_UPDATEUISTATE
- return 0;
+ mr = mrConsume;
+ break;
}
- return parent->WindowProc(message, wParam, lParam);
-
- CATCH_BAD_ALLOC_RET(0);
-}
-void AwtFrame::CreateProxyFocusOwner()
-{
- if (AwtToolkit::IsMainThread()) {
- AwtFrame::_CreateProxyFocusOwner((void *)this);
- } else {
- AwtToolkit::GetInstance().InvokeFunction(AwtFrame::_CreateProxyFocusOwner, (void *)this);
- }
+ return retValue;
}
-void AwtFrame::_CreateProxyFocusOwner(void *param)
-{
- DASSERT(AwtToolkit::IsMainThread());
-
- AwtFrame *f = (AwtFrame *)param;
- DASSERT(f->m_proxyFocusOwner == NULL);
-
- f->m_proxyFocusOwner = ::CreateWindow(TEXT("STATIC"),
- TEXT("ProxyFocusOwner"),
- WS_CHILD,
- 0, 0, 0, 0, f->GetHWnd(), NULL,
- AwtToolkit::GetInstance().
- GetModuleHandle(),
- NULL);
-
- f->m_proxyDefWindowProc = ComCtl32Util::GetInstance().SubclassHWND(f->m_proxyFocusOwner, ProxyWindowProc);
-}
-
-void AwtFrame::DestroyProxyFocusOwner()
+LRESULT AwtFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
- // proxy focus owner must be destroyed on toolkit thread only
- if (AwtToolkit::IsMainThread()) {
- AwtFrame::_DestroyProxyFocusOwner((void *)this);
- } else {
- AwtToolkit::GetInstance().InvokeFunction(AwtFrame::_DestroyProxyFocusOwner, (void *)this);
- }
-}
+ MsgRouting mr = mrDoDefault;
+ LRESULT retValue = 0L;
+
+ retValue = ProxyWindowProc(message, wParam, lParam, mr);
-void AwtFrame::_DestroyProxyFocusOwner(void *param)
-{
- DASSERT(AwtToolkit::IsMainThread());
-
- AwtFrame *f = (AwtFrame *)param;
- if (f->m_proxyFocusOwner != NULL) {
- HWND toDestroy = f->m_proxyFocusOwner;
- f->m_proxyFocusOwner = NULL;
- ComCtl32Util::GetInstance().UnsubclassHWND(toDestroy, ProxyWindowProc, f->m_proxyDefWindowProc);
- ::DestroyWindow(toDestroy);
+ if (mr != mrConsume) {
+ retValue = AwtWindow::WindowProc(message, wParam, lParam);
}
+ return retValue;
}
MsgRouting AwtFrame::WmShowWindow(BOOL show, UINT status)
--- a/jdk/src/windows/native/sun/windows/awt_Frame.h Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/windows/native/sun/windows/awt_Frame.h Wed Mar 16 10:47:45 2011 -0400
@@ -96,6 +96,8 @@
AwtMenuBar* GetMenuBar();
void SetMenuBar(AwtMenuBar*);
+ virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
+
MsgRouting WmGetMinMaxInfo(LPMINMAXINFO lpmmi);
MsgRouting WmSize(UINT type, int w, int h);
MsgRouting WmActivate(UINT nState, BOOL fMinimized, HWND opposite);
@@ -117,10 +119,7 @@
INLINE BOOL IsUndecorated() { return m_isUndecorated; }
INLINE HWND GetProxyFocusOwner() {
- if (m_proxyFocusOwner == NULL) {
- CreateProxyFocusOwner();
- }
- return m_proxyFocusOwner;
+ return GetHWnd();
}
void SetMaximizedBounds(int x, int y, int w, int h);
@@ -159,15 +158,7 @@
BOOL m_isUndecorated;
private:
- static LRESULT CALLBACK ProxyWindowProc(HWND hwnd, UINT message,
- WPARAM wParam, LPARAM lParam);
- void CreateProxyFocusOwner();
- void DestroyProxyFocusOwner();
-
- /* creates proxy focus owner, called on Toolkit thread */
- static void _CreateProxyFocusOwner(void *param);
- /* destroys proxy focus owner, called on Toolkit thread */
- static void _DestroyProxyFocusOwner(void *param);
+ LRESULT ProxyWindowProc(UINT message, WPARAM wParam, LPARAM lParam, MsgRouting &mr);
/* The frame's embedding parent (if any) */
HWND m_parentWnd;
@@ -188,10 +179,6 @@
/* The frame is an InputMethodWindow */
BOOL m_isInputMethodWindow;
- /* Receives all keyboard input when an AwtWindow which is not an AwtFrame
- or an AwtDialog (or one of its children) has the logical input focus. */
- HWND m_proxyFocusOwner;
-
/* Retains the last/current sm_focusOwner proxied. Actually, it should be
* a component of an owned window last/currently active. */
HWND m_lastProxiedFocusOwner;
--- a/jdk/src/windows/native/sun/windows/awt_TrayIcon.cpp Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/windows/native/sun/windows/awt_TrayIcon.cpp Wed Mar 16 10:47:45 2011 -0400
@@ -200,10 +200,9 @@
m_nid.cbSize = (BYTE *)(&m_nid.guidItem) - (BYTE *)(&m_nid.cbSize);
break;
case 6: // WIN_XP
- // Uncomment these two lines when moving to VS2008
-// m_nid.cbSize = (BYTE *)(&m_nid.hBalloonIcon) - (BYTE *)(&m_nid.cbSize);
-// break;
- default: // WIN_VISTA?
+ m_nid.cbSize = (BYTE *)(&m_nid.hBalloonIcon) - (BYTE *)(&m_nid.cbSize);
+ break;
+ default: // WIN_VISTA
m_nid.cbSize = sizeof(m_nid);
break;
}
--- a/jdk/src/windows/native/sun/windows/awt_Window.cpp Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/src/windows/native/sun/windows/awt_Window.cpp Wed Mar 16 10:47:45 2011 -0400
@@ -221,6 +221,8 @@
m_windowType = NORMAL;
m_alwaysOnTop = false;
+
+ fullScreenExclusiveModeState = FALSE;
}
AwtWindow::~AwtWindow()
--- a/jdk/test/ProblemList.txt Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/ProblemList.txt Wed Mar 16 10:47:45 2011 -0400
@@ -380,30 +380,9 @@
# jdk_nio
-# 6944810
-java/nio/channels/FileChannel/ReleaseOnCloseDeadlock.java windows-all
-
# 6963118
java/nio/channels/Selector/Wakeup.java windows-all
-# The asynchronous I/O implementation on Windows requires Windows XP or newer.
-# We can remove the following once all Windows 2000 machines have been
-# decommissioned.
-java/nio/channels/AsynchronousChannelGroup/Basic.java windows-5.0
-java/nio/channels/AsynchronousChannelGroup/GroupOfOne.java windows-5.0
-java/nio/channels/AsynchronousChannelGroup/Identity.java windows-5.0
-java/nio/channels/AsynchronousChannelGroup/Restart.java windows-5.0
-java/nio/channels/AsynchronousChannelGroup/Unbounded.java windows-5.0
-java/nio/channels/AsynchronousDatagramChannel/Basic.java windows-5.0
-java/nio/channels/AsynchronousFileChannel/Lock.java windows-5.0
-java/nio/channels/AsynchronousServerSocketChannel/Basic.java windows-5.0
-java/nio/channels/AsynchronousServerSocketChannel/WithSecurityManager.java windows-5.0
-java/nio/channels/AsynchronousSocketChannel/Basic.java windows-5.0
-java/nio/channels/AsynchronousSocketChannel/DieBeforeComplete.java windows-5.0
-java/nio/channels/AsynchronousSocketChannel/Leaky.java windows-5.0
-java/nio/channels/AsynchronousSocketChannel/StressLoopback.java windows-5.0
-java/nio/channels/Channels/Basic2.java windows-5.0
-
# 6959891
com/sun/nio/sctp/SctpChannel/SocketOptionTests.java
@@ -625,9 +604,6 @@
# Timeout on solaris-sparcv9 or exception thrown
com/sun/crypto/provider/Cipher/RSA/TestOAEP_KAT.java solaris-all
-# File 6535697.test input stream left open? windows samevm
-java/security/cert/CertificateFactory/openssl/OpenSSLCert.java generic-all
-
# Leaving file open: SerialVersion.current, windows samevm
java/security/BasicPermission/SerialVersion.java generic-all
@@ -717,6 +693,7 @@
# Filed 6933803
java/util/concurrent/ThreadPoolExecutor/CoreThreadTimeOut.java generic-all
+# Filed 7022325
# Fails with assertion error on windows
# 11 separate stacktraces created... file reuse problem?
java/util/zip/ZipFile/ReadLongZipFileName.java generic-all
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/com/sun/jndi/ldap/NoWaitForReplyTest.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6748156
+ * @summary add an new JNDI property to control the boolean flag WaitForReply
+ */
+
+import java.net.Socket;
+import java.net.ServerSocket;
+import java.io.*;
+import javax.naming.*;
+import javax.naming.directory.*;
+import java.util.Hashtable;
+
+public class NoWaitForReplyTest {
+
+ public static void main(String[] args) throws Exception {
+
+ boolean passed = false;
+
+ // start the LDAP server
+ DummyServer ldapServer = new DummyServer();
+ ldapServer.start();
+
+ // Set up the environment for creating the initial context
+ Hashtable env = new Hashtable(11);
+ env.put(Context.PROVIDER_URL, "ldap://localhost:" +
+ ldapServer.getPortNumber());
+ env.put(Context.INITIAL_CONTEXT_FACTORY,
+ "com.sun.jndi.ldap.LdapCtxFactory");
+
+ // Wait up to 10 seconds for a response from the LDAP server
+ env.put("com.sun.jndi.ldap.read.timeout", "10000");
+
+ // Don't wait until the first search reply is received
+ env.put("com.sun.jndi.ldap.search.waitForReply", "false");
+
+ // Send the LDAP search request without first authenticating (no bind)
+ env.put("java.naming.ldap.version", "3");
+
+
+ try {
+
+ // Create initial context
+ System.out.println("Client: connecting to the server");
+ DirContext ctx = new InitialDirContext(env);
+
+ SearchControls scl = new SearchControls();
+ scl.setSearchScope(SearchControls.SUBTREE_SCOPE);
+ System.out.println("Client: performing search");
+ NamingEnumeration answer =
+ ctx.search("ou=People,o=JNDITutorial", "(objectClass=*)", scl);
+
+ // Server will never reply: either we waited in the call above until
+ // the timeout (fail) or we did not wait and reached here (pass).
+ passed = true;
+ System.out.println("Client: did not wait until first reply");
+
+ // Close the context when we're done
+ ctx.close();
+
+ } catch (NamingException e) {
+ // timeout (ignore)
+ }
+ ldapServer.interrupt();
+
+ if (!passed) {
+ throw new Exception(
+ "Test FAILED: should not have waited until first search reply");
+ }
+ System.out.println("Test PASSED");
+ }
+
+ static class DummyServer extends Thread {
+
+ private final ServerSocket serverSocket;
+
+ DummyServer() throws IOException {
+ this.serverSocket = new ServerSocket(0);
+ System.out.println("Server: listening on port " + serverSocket.getLocalPort());
+ }
+
+ public int getPortNumber() {
+ return serverSocket.getLocalPort();
+ }
+
+ public void run() {
+ try (Socket socket = serverSocket.accept()) {
+ System.out.println("Server: accepted a connection");
+ InputStream in = socket.getInputStream();
+
+ while (!isInterrupted()) {
+ in.skip(in.available());
+ }
+
+ } catch (Exception e) {
+ // ignore
+
+ } finally {
+ System.out.println("Server: shutting down");
+ try {
+ serverSocket.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/SurrogateTest/SupplementaryCanDisplayUpToTest.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6623219
+ * @summary Test canDisplayUpTo with supplementary characters.
+ */
+
+import java.awt.*;
+import java.text.*;
+
+public class SupplementaryCanDisplayUpToTest {
+ // Lists consisting of a font name, test text, and its expected
+ // return value. Test text uses private area code point U+F0000
+ // (\udb80\udc00).
+ private static String[][] DATA = {
+ // Windows
+ { "Meiryo", "\ud87e\udd45\ud87e\udd47\udb80\udc00", "4" },
+ { "Meiryo", "\ud87e\udd45\ud87e\udd47\udb80Z", "4" },
+ { "Meiryo", "\ud87e\udd45\ud87e\udd47\udb80", "4" },
+ { "Meiryo", "\ud87e\udd45\ud87e\udd47\udc00", "4" },
+ { "Meiryo", "\ud87e\udd45\ud87e\udd47", "-1" },
+
+ // Linux
+ { "AR PL UMing TW", "\ud87e\udc25\ud87e\udc3b\udb80\udc00", "4" },
+ { "AR PL UMing TW", "\ud87e\udc25\ud87e\udc3b\udb80Z", "4" },
+ { "AR PL UMing TW", "\ud87e\udc25\ud87e\udc3b\udb80", "4" },
+ { "AR PL UMing TW", "\ud87e\udc25\ud87e\udc3b\udc00", "4" },
+ { "AR PL UMing TW", "\ud87e\udc25\ud87e\udc3b", "-1" },
+
+ // Solaris
+ { "FZMingTi", "\ud87e\udc25\ud87e\udc3b\udb80\udc00", "4" },
+ { "FZMingTi", "\ud87e\udc25\ud87e\udc3b\udb80Z", "4" },
+ { "FZMingTi", "\ud87e\udc25\ud87e\udc3b\udb80", "4" },
+ { "FZMingTi", "\ud87e\udc25\ud87e\udc3b\udc00", "4" },
+ { "FZMingTi", "\ud87e\udc25\ud87e\udc3b", "-1" },
+ };
+ private static int errorcount = 0;
+
+ public static void main(String[] args) {
+ for (String[] data : DATA) {
+ String fontname = data[0];
+ Font font = new Font(fontname, Font.PLAIN, 16);
+ if (font.getFamily().equals(Font.DIALOG)) {
+ // Skip any unavailable fonts.
+ continue;
+ }
+
+ System.out.printf("Testing with font '%s'... ", fontname);
+ int errors = 0;
+ String text = data[1];
+ int expected = Integer.parseInt(data[2]);
+
+ int result = font.canDisplayUpTo(text);
+ if (result != expected) {
+ System.err.println("canDisplayUpTo(String) returns " + result);
+ errors++;
+ }
+
+ result = font.canDisplayUpTo(text.toCharArray(), 0, text.length());
+ if (result != expected) {
+ System.err.println("canDisplayUpTo(char[], int, int) returns " + result);
+ errors++;
+ }
+
+ CharacterIterator iter = new StringCharacterIterator(text);
+ result = font.canDisplayUpTo(iter, iter.getBeginIndex(), iter.getEndIndex());
+ if (result != expected) {
+ System.err.println("canDisplayUpTo(CharacterIterator, int, int) returns " + result);
+ errors++;
+ }
+
+ if (errors == 0) {
+ System.out.println("passed");
+ } else {
+ System.out.println("failed");
+ errorcount += errors;
+ }
+ }
+ if (errorcount > 0) {
+ throw new RuntimeException("SupplementaryCanDisplayUpToTest: failed");
+ }
+ }
+}
--- a/jdk/test/java/io/File/SetLastModified.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/io/File/SetLastModified.java Wed Mar 16 10:47:45 2011 -0400
@@ -105,9 +105,9 @@
System.getProperty("os.name").startsWith("Windows") ? 0L : 3L*G;
long pos = 0L;
while (pos <= MAX_POSITION) {
- FileChannel fc = new FileOutputStream(f).getChannel();
- fc.position(pos).write(ByteBuffer.wrap("x".getBytes()));
- fc.close();
+ try (FileChannel fc = new FileOutputStream(f).getChannel()) {
+ fc.position(pos).write(ByteBuffer.wrap("x".getBytes()));
+ }
ot = f.lastModified();
System.out.format("check with file size: %d\n", f.length());
if (!f.setLastModified(nt))
--- a/jdk/test/java/io/FileOutputStream/AtomicAppend.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/io/FileOutputStream/AtomicAppend.java Wed Mar 16 10:47:45 2011 -0400
@@ -47,12 +47,12 @@
for (int i = 0; i < nThreads; i++)
es.execute(new Runnable() { public void run() {
try {
- FileOutputStream s = new FileOutputStream(file, true);
- for (int j = 0; j < 1000; j++) {
- s.write((int) 'x');
- s.flush();
+ try (FileOutputStream s = new FileOutputStream(file, true)) {
+ for (int j = 0; j < 1000; j++) {
+ s.write((int) 'x');
+ s.flush();
+ }
}
- s.close();
} catch (Throwable t) { unexpected(t); }}});
es.shutdown();
es.awaitTermination(10L, TimeUnit.MINUTES);
--- a/jdk/test/java/io/OutputStreamWriter/Encode.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/io/OutputStreamWriter/Encode.java Wed Mar 16 10:47:45 2011 -0400
@@ -35,8 +35,9 @@
new Encode();
}
+ final ServerSocket ss = new ServerSocket(0);
+
Encode() throws Exception {
- ss = new ServerSocket(0);
(new Thread(this)).start();
String toEncode = "\uD800\uDC00 \uD801\uDC01 ";
String enc1 = URLEncoder.encode(toEncode, "UTF-8");
@@ -47,27 +48,31 @@
"/missing.nothtml";
HttpURLConnection uc = (HttpURLConnection)new URL(url).openConnection();
uc.connect();
- String enc2 = URLEncoder.encode(toEncode, "UTF-8");
- if (!enc1.equals(enc2))
- throw new RuntimeException("test failed");
- uc.disconnect();
+ try {
+ String enc2 = URLEncoder.encode(toEncode, "UTF-8");
+ if (!enc1.equals(enc2)) {
+ System.out.println("test failed");
+ throw new RuntimeException("test failed");
+ }
+ } finally {
+ uc.disconnect();
+ }
}
- ServerSocket ss;
-
public void run() {
- try {
- Socket s = ss.accept();
- BufferedReader in = new BufferedReader(
- new InputStreamReader(s.getInputStream()));
+ try (ServerSocket serv = ss;
+ Socket s = serv.accept();
+ BufferedReader in =
+ new BufferedReader(new InputStreamReader(s.getInputStream())))
+ {
String req = in.readLine();
- PrintStream out = new PrintStream(new BufferedOutputStream(
- s.getOutputStream()));
- out.print("HTTP/1.1 403 Forbidden\r\n");
- out.print("\r\n");
- out.flush();
- s.close();
- ss.close();
+ try (OutputStream os = s.getOutputStream();
+ BufferedOutputStream bos = new BufferedOutputStream(os);
+ PrintStream out = new PrintStream(bos))
+ {
+ out.print("HTTP/1.1 403 Forbidden\r\n");
+ out.print("\r\n");
+ }
} catch (Exception e) {
e.printStackTrace();
}
--- a/jdk/test/java/io/PrintStream/EncodingConstructor.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/io/PrintStream/EncodingConstructor.java Wed Mar 16 10:47:45 2011 -0400
@@ -34,11 +34,11 @@
public static void main(String args[]) throws Exception {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
- PrintStream ps = new PrintStream(bo, false, "UTF-8");
String s = "xyzzy";
int n = s.length();
- ps.print(s);
- ps.close();
+ try (PrintStream ps = new PrintStream(bo, false, "UTF-8")) {
+ ps.print(s);
+ }
byte[] ba = bo.toByteArray();
if (ba.length != n)
throw new Exception("Length mismatch: " + n + " " + ba.length);
--- a/jdk/test/java/io/PrintStream/FailingConstructors.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/io/PrintStream/FailingConstructors.java Wed Mar 16 10:47:45 2011 -0400
@@ -35,6 +35,8 @@
import java.io.IOException;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
+import java.nio.file.Files;
+import java.nio.file.Path;
public class FailingConstructors {
static final String fileName = "FailingConstructorsTest";
@@ -45,14 +47,13 @@
test(false, new File(fileName));
/* create the file and write its contents */
- File file = File.createTempFile(fileName, null);
- file.deleteOnExit();
- FileOutputStream fos = new FileOutputStream(file);
- fos.write(FILE_CONTENTS.getBytes());
- fos.close();
-
- test(true, file);
- file.delete();
+ Path path = Files.createTempFile(fileName, null);
+ try {
+ Files.write(path, FILE_CONTENTS.getBytes());
+ test(true, path.toFile());
+ } finally {
+ Files.delete(path);
+ }
}
private static void test(boolean exists, File file) throws Throwable {
--- a/jdk/test/java/io/Serializable/evolution/RenamePackage/install/SerialDriver.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/io/Serializable/evolution/RenamePackage/install/SerialDriver.java Wed Mar 16 10:47:45 2011 -0400
@@ -27,7 +27,7 @@
* @build install/SerialDriver.java test/SerialDriver.java extension/ExtendedObjectInputStream.java
* @summary Enable resolveClass() to accommodate package renaming.
* This fix enables one to implement a resolveClass method that maps a
- * Serialiazable class within a serialization stream to the same class
+ * Serializable class within a serialization stream to the same class
* in a different package within the JVM runtime. See run shell script
* for instructions on how to run this test.
*/
@@ -86,16 +86,15 @@
File f = new File("stream.ser");
if (serialize) {
// Serialize the subclass
- try {
- FileOutputStream fo = new FileOutputStream(f);
- ObjectOutputStream so = new ObjectOutputStream(fo);
+ try (FileOutputStream fo = new FileOutputStream(f);
+ ObjectOutputStream so = new ObjectOutputStream(fo))
+ {
so.writeObject(obj);
/* Skip arrays since they do not work with rename yet.
The serialVersionUID changes due to the name change
and there is no way to set the serialVersionUID for an
array. */
so.writeObject(array);
- so.flush();
} catch (Exception e) {
System.out.println(e);
throw e;
@@ -103,16 +102,14 @@
}
if (deserialize) {
// Deserialize the subclass
- try {
- FileInputStream fi = new FileInputStream(f);
- ExtendedObjectInputStream si =
- new ExtendedObjectInputStream(fi);
+ try (FileInputStream fi = new FileInputStream(f);
+ ExtendedObjectInputStream si = new ExtendedObjectInputStream(fi))
+ {
si.addRenamedClassName("test.SerialDriver", "install.SerialDriver");
si.addRenamedClassName("[Ltest.SerialDriver;",
"[Linstall.SerialDriver");
obj = (SerialDriver) si.readObject();
array = (SerialDriver[]) si.readObject();
- si.close();
} catch (Exception e) {
System.out.println(e);
throw e;
--- a/jdk/test/java/io/Serializable/evolution/RenamePackage/test/SerialDriver.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/io/Serializable/evolution/RenamePackage/test/SerialDriver.java Wed Mar 16 10:47:45 2011 -0400
@@ -27,7 +27,7 @@
* @build install/SerialDriver.java test/SerialDriver.java extension/ExtendedObjectInputStream.java
* @summary Enable resolveClass() to accommodate package renaming.
* This fix enables one to implement a resolveClass method that maps a
- * Serialiazable class within a serialization stream to the same class
+ * Serializable class within a serialization stream to the same class
* in a different package within the JVM runtime. See run shell script
* for instructions on how to run this test.
*/
@@ -83,14 +83,13 @@
File f = new File("stream.ser");
if (serialize) {
// Serialize the subclass
- try {
- FileOutputStream fo = new FileOutputStream(f);
- ObjectOutputStream so = new ObjectOutputStream(fo);
+ try (FileOutputStream fo = new FileOutputStream(f);
+ ObjectOutputStream so = new ObjectOutputStream(fo))
+ {
so.writeObject(obj);
/* Comment out since renaming arrays does not work
since it changes the serialVersionUID. */
so.writeObject(array);
- so.flush();
} catch (Exception e) {
System.out.println(e);
throw e;
@@ -98,16 +97,15 @@
}
if (deserialize) {
// Deserialize the subclass
- try {
- FileInputStream fi = new FileInputStream(f);
- ExtendedObjectInputStream si = new ExtendedObjectInputStream(fi);
+ try (FileInputStream fi = new FileInputStream(f);
+ ExtendedObjectInputStream si = new ExtendedObjectInputStream(fi))
+ {
si.addRenamedClassName("install.SerialDriver",
"test.SerialDriver");
si.addRenamedClassName("[Linstall.SerialDriver;",
"[Ltest.SerialDriver");
obj = (SerialDriver) si.readObject();
array = (SerialDriver[]) si.readObject();
- si.close();
} catch (Exception e) {
System.out.println(e);
throw e;
--- a/jdk/test/java/lang/Character/CheckScript.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/lang/Character/CheckScript.java Wed Mar 16 10:47:45 2011 -0400
@@ -12,40 +12,43 @@
public class CheckScript {
- public static void main(String[] args) throws Exception {
-
- BufferedReader sbfr = null;
+ static BufferedReader open(String[] args) throws FileNotFoundException {
if (args.length == 0) {
- sbfr = new BufferedReader(new FileReader(new File(System.getProperty("test.src", "."), "Scripts.txt")));
+ return new BufferedReader(new FileReader(new File(System.getProperty("test.src", "."), "Scripts.txt")));
} else if (args.length == 1) {
- sbfr = new BufferedReader(new FileReader(args[0]));
+ return new BufferedReader(new FileReader(args[0]));
} else {
System.out.println("java CharacterScript Scripts.txt");
throw new RuntimeException("Datafile name should be specified.");
}
+ }
+
+ public static void main(String[] args) throws Exception {
+
Matcher m = Pattern.compile("(\\p{XDigit}+)(?:\\.{2}(\\p{XDigit}+))?\\s+;\\s+(\\w+)\\s+#.*").matcher("");
String line = null;
HashMap<String,ArrayList<Integer>> scripts = new HashMap<>();
- while ((line = sbfr.readLine()) != null) {
- if (line.length() <= 1 || line.charAt(0) == '#') {
- continue;
- }
- m.reset(line);
- if (m.matches()) {
- int start = Integer.parseInt(m.group(1), 16);
- int end = (m.group(2)==null)?start
- :Integer.parseInt(m.group(2), 16);
- String name = m.group(3).toLowerCase(Locale.ENGLISH);
- ArrayList<Integer> ranges = scripts.get(name);
- if (ranges == null) {
- ranges = new ArrayList<Integer>();
- scripts.put(name, ranges);
+ try (BufferedReader sbfr = open(args)) {
+ while ((line = sbfr.readLine()) != null) {
+ if (line.length() <= 1 || line.charAt(0) == '#') {
+ continue;
}
- ranges.add(start);
- ranges.add(end);
+ m.reset(line);
+ if (m.matches()) {
+ int start = Integer.parseInt(m.group(1), 16);
+ int end = (m.group(2)==null)?start
+ :Integer.parseInt(m.group(2), 16);
+ String name = m.group(3).toLowerCase(Locale.ENGLISH);
+ ArrayList<Integer> ranges = scripts.get(name);
+ if (ranges == null) {
+ ranges = new ArrayList<Integer>();
+ scripts.put(name, ranges);
+ }
+ ranges.add(start);
+ ranges.add(end);
+ }
}
}
- sbfr.close();
// check all defined ranges
Integer[] ZEROSIZEARRAY = new Integer[0];
for (String name : scripts.keySet()) {
--- a/jdk/test/java/lang/ProcessBuilder/Basic.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/lang/ProcessBuilder/Basic.java Wed Mar 16 10:47:45 2011 -0400
@@ -26,7 +26,7 @@
* @bug 4199068 4738465 4937983 4930681 4926230 4931433 4932663 4986689
* 5026830 5023243 5070673 4052517 4811767 6192449 6397034 6413313
* 6464154 6523983 6206031 4960438 6631352 6631966 6850957 6850958
- * 4947220
+ * 4947220 7018606
* @summary Basic tests for Process and Environment Variable code
* @run main/othervm/timeout=300 Basic
* @author Martin Buchholz
@@ -47,6 +47,9 @@
public class Basic {
+ /* used for Windows only */
+ static final String systemRoot = System.getenv("SystemRoot");
+
private static String commandOutput(Reader r) throws Throwable {
StringBuilder sb = new StringBuilder();
int c;
@@ -1073,7 +1076,11 @@
try {
ProcessBuilder pb = new ProcessBuilder();
pb.environment().clear();
- equal(getenvInChild(pb), "");
+ String expected = Windows.is() ? "SystemRoot="+systemRoot+",": "";
+ if (Windows.is()) {
+ pb.environment().put("SystemRoot", systemRoot);
+ }
+ equal(getenvInChild(pb), expected);
} catch (Throwable t) { unexpected(t); }
//----------------------------------------------------------------
@@ -1561,13 +1568,21 @@
List<String> childArgs = new ArrayList<String>(javaChildArgs);
childArgs.add("System.getenv()");
String[] cmdp = childArgs.toArray(new String[childArgs.size()]);
- String[] envp = {"=ExitValue=3", "=C:=\\"};
+ String[] envp;
+ String[] envpWin = {"=ExitValue=3", "=C:=\\", "SystemRoot="+systemRoot};
+ String[] envpOth = {"=ExitValue=3", "=C:=\\"};
+ if (Windows.is()) {
+ envp = envpWin;
+ } else {
+ envp = envpOth;
+ }
Process p = Runtime.getRuntime().exec(cmdp, envp);
- String expected = Windows.is() ? "=C:=\\,=ExitValue=3," : "=C:=\\,";
+ String expected = Windows.is() ? "=C:=\\,SystemRoot="+systemRoot+",=ExitValue=3," : "=C:=\\,";
equal(commandOutput(p), expected);
if (Windows.is()) {
ProcessBuilder pb = new ProcessBuilder(childArgs);
pb.environment().clear();
+ pb.environment().put("SystemRoot", systemRoot);
pb.environment().put("=ExitValue", "3");
pb.environment().put("=C:", "\\");
equal(commandOutput(pb), expected);
@@ -1591,10 +1606,18 @@
List<String> childArgs = new ArrayList<String>(javaChildArgs);
childArgs.add("System.getenv()");
String[] cmdp = childArgs.toArray(new String[childArgs.size()]);
- String[] envp = {"LC_ALL=C\u0000\u0000", // Yuck!
+ String[] envpWin = {"SystemRoot="+systemRoot, "LC_ALL=C\u0000\u0000", // Yuck!
+ "FO\u0000=B\u0000R"};
+ String[] envpOth = {"LC_ALL=C\u0000\u0000", // Yuck!
"FO\u0000=B\u0000R"};
+ String[] envp;
+ if (Windows.is()) {
+ envp = envpWin;
+ } else {
+ envp = envpOth;
+ }
Process p = Runtime.getRuntime().exec(cmdp, envp);
- check(commandOutput(p).equals("LC_ALL=C,"),
+ check(commandOutput(p).equals(Windows.is() ? "SystemRoot="+systemRoot+",LC_ALL=C," : "LC_ALL=C,"),
"Incorrect handling of envstrings containing NULs");
} catch (Throwable t) { unexpected(t); }
@@ -2144,6 +2167,7 @@
static void equal(Object x, Object y) {
if (x == null ? y == null : x.equals(y)) pass();
else fail(x + " not equal to " + y);}
+
public static void main(String[] args) throws Throwable {
try {realMain(args);} catch (Throwable t) {unexpected(t);}
System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
--- a/jdk/test/java/lang/Runtime/shutdown/ShutdownHooks.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/lang/Runtime/shutdown/ShutdownHooks.java Wed Mar 16 10:47:45 2011 -0400
@@ -43,9 +43,9 @@
file = new File(dir, args[1]);
// write to file
System.out.println("writing to "+ file);
- PrintWriter pw = new PrintWriter(file);
- pw.println("Shutdown begins");
- pw.close();
+ try (PrintWriter pw = new PrintWriter(file)) {
+ pw.println("Shutdown begins");
+ }
}
public static class Cleaner extends Thread {
@@ -56,10 +56,8 @@
// register the DeleteOnExitHook while the application
// shutdown hook is running
file.deleteOnExit();
- try {
- PrintWriter pw = new PrintWriter(file);
+ try (PrintWriter pw = new PrintWriter(file)) {
pw.println("file is being deleted");
- pw.close();
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
--- a/jdk/test/java/lang/Thread/StartOOMTest.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/lang/Thread/StartOOMTest.java Wed Mar 16 10:47:45 2011 -0400
@@ -22,11 +22,14 @@
*/
/*
- * @test
- * @bug 6379235
- * @ignore until 6721694 is fixed
- * @run main/othervm -server -Xmx32m -Xms32m -Xss256m StartOOMTest
- * @summary ThreadGroup accounting mistake possible with failure of Thread.start()
+ * This test is relatively useful for verifying 6379235, but
+ * is too resource intensive, especially on 64 bit systems,
+ * to be run automatically, see 6721694.
+ *
+ * When run it should be typically be run with the server vm
+ * and a relatively small java heap, and a large stack size
+ * ( to provoke the OOM quicker ).
+ * java -server -Xmx32m -Xms32m -Xss256m StartOOMTest
*/
import java.util.*;
--- a/jdk/test/java/lang/instrument/BootClassPath/Setup.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/lang/instrument/BootClassPath/Setup.java Wed Mar 16 10:47:45 2011 -0400
@@ -62,31 +62,33 @@
* Create manifest file with Boot-Class-Path encoding the
* sub-directory name.
*/
- FileOutputStream out = new FileOutputStream(manifestFile);
- out.write("Manifest-Version: 1.0\n".getBytes("UTF-8"));
+ try (FileOutputStream out = new FileOutputStream(manifestFile)) {
+ out.write("Manifest-Version: 1.0\n".getBytes("UTF-8"));
- byte[] premainBytes = ("Premain-Class: " + premainClass + "\n").getBytes("UTF-8");
- out.write(premainBytes);
+ byte[] premainBytes =
+ ("Premain-Class: " + premainClass + "\n").getBytes("UTF-8");
+ out.write(premainBytes);
- out.write( "Boot-Class-Path: ".getBytes("UTF-8") );
+ out.write( "Boot-Class-Path: ".getBytes("UTF-8") );
- byte[] value = bootClassPath.getBytes("UTF-8");
- for (int i=0; i<value.length; i++) {
- int v = (int)value[i];
- if (v < 0) v += 256;
- byte[] escaped = ("%" + Integer.toHexString(v)).getBytes("UTF-8");
- out.write(escaped);
+ byte[] value = bootClassPath.getBytes("UTF-8");
+ for (int i=0; i<value.length; i++) {
+ int v = (int)value[i];
+ if (v < 0) v += 256;
+ byte[] escaped =
+ ("%" + Integer.toHexString(v)).getBytes("UTF-8");
+ out.write(escaped);
+ }
+ out.write( "\n\n".getBytes("UTF-8") );
}
- out.write( "\n\n".getBytes("UTF-8") );
- out.close();
/*
* Write the name of the boot dir to "boot.dir"
*/
f = new File(workDir + fileSeparator + "boot.dir");
- out = new FileOutputStream(f);
- out.write(bootDir.getBytes(defaultEncoding));
- out.close();
+ try (FileOutputStream out = new FileOutputStream(f)) {
+ out.write(bootDir.getBytes(defaultEncoding));
+ }
}
/* ported from test/sun/tools/launcher/UnicodeTest.java */
--- a/jdk/test/java/lang/instrument/ilib/Inject.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/lang/instrument/ilib/Inject.java Wed Mar 16 10:47:45 2011 -0400
@@ -118,23 +118,24 @@
}
void dump(File outDir, String filename) throws IOException {
- FileOutputStream fileOut = new FileOutputStream(new File(outDir, filename));
- DataOutputStream dataOut = new DataOutputStream(fileOut);
-
- String currentClassName = null;
+ try (FileOutputStream fileOut =
+ new FileOutputStream(new File(outDir, filename));
+ DataOutputStream dataOut = new DataOutputStream(fileOut))
+ {
+ String currentClassName = null;
- dataOut.writeInt(infoList.size());
- for (Iterator<Info> it = infoList.iterator(); it.hasNext(); ) {
- Info info = it.next();
- if (!info.className.equals(currentClassName)) {
- dataOut.writeInt(123456); // class name marker
- currentClassName = info.className;
- dataOut.writeUTF(currentClassName);
+ dataOut.writeInt(infoList.size());
+ for (Iterator<Info> it = infoList.iterator(); it.hasNext(); ) {
+ Info info = it.next();
+ if (!info.className.equals(currentClassName)) {
+ dataOut.writeInt(123456); // class name marker
+ currentClassName = info.className;
+ dataOut.writeUTF(currentClassName);
+ }
+ dataOut.writeInt(info.location);
+ dataOut.writeUTF(info.methodName);
}
- dataOut.writeInt(info.location);
- dataOut.writeUTF(info.methodName);
}
- dataOut.close();
}
public byte[] bytecodes(String className, String methodName, int location) {
--- a/jdk/test/java/math/BigInteger/BigIntegerTest.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/math/BigInteger/BigIntegerTest.java Wed Mar 16 10:47:45 2011 -0400
@@ -645,26 +645,17 @@
BigInteger b2 = null;
File f = new File("serialtest");
- FileOutputStream fos = new FileOutputStream(f);
- try {
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- try {
+
+ try (FileOutputStream fos = new FileOutputStream(f)) {
+ try (ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(b1);
oos.flush();
- } finally {
- oos.close();
}
- FileInputStream fis = new FileInputStream(f);
- try {
- ObjectInputStream ois = new ObjectInputStream(fis);
- try {
- b2 = (BigInteger)ois.readObject();
- } finally {
- ois.close();
- }
- } finally {
- fis.close();
+ try (FileInputStream fis = new FileInputStream(f);
+ ObjectInputStream ois = new ObjectInputStream(fis))
+ {
+ b2 = (BigInteger)ois.readObject();
}
if (!b1.equals(b2) ||
@@ -673,8 +664,6 @@
System.err.println("Serialized failed for hex " +
b1.toString(16));
}
- } finally {
- fos.close();
}
f.delete();
}
@@ -683,29 +672,17 @@
BigInteger b1 = fetchNumber(rnd.nextInt(100));
BigInteger b2 = null;
File f = new File("serialtest");
- FileOutputStream fos = new FileOutputStream(f);
- try {
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- try {
+ try (FileOutputStream fos = new FileOutputStream(f)) {
+ try (ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(b1);
oos.flush();
- } finally {
- oos.close();
}
- FileInputStream fis = new FileInputStream(f);
- try {
- ObjectInputStream ois = new ObjectInputStream(fis);
- try {
- b2 = (BigInteger)ois.readObject();
- } finally {
- ois.close();
- }
- } finally {
- fis.close();
+ try (FileInputStream fis = new FileInputStream(f);
+ ObjectInputStream ois = new ObjectInputStream(fis))
+ {
+ b2 = (BigInteger)ois.readObject();
}
- } finally {
- fos.close();
}
if (!b1.equals(b2) ||
--- a/jdk/test/java/net/URLConnection/RedirectLimit.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/net/URLConnection/RedirectLimit.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -36,105 +36,81 @@
import java.net.*;
class RedirLimitServer extends Thread {
+ static final int TIMEOUT = 10 * 1000;
+ static final int NUM_REDIRECTS = 9;
- ServerSocket s;
- Socket s1;
- InputStream is;
- OutputStream os;
- int port;
- int nredirects = 9;
-
- String reply1 = "HTTP/1.1 307 Temporary Redirect\r\n" +
+ static final String reply1 = "HTTP/1.1 307 Temporary Redirect\r\n" +
"Date: Mon, 15 Jan 2001 12:18:21 GMT\r\n" +
"Server: Apache/1.3.14 (Unix)\r\n" +
"Location: http://localhost:";
- String reply2 = ".html\r\n" +
+ static final String reply2 = ".html\r\n" +
"Connection: close\r\n" +
"Content-Type: text/html; charset=iso-8859-1\r\n\r\n" +
"<html>Hello</html>";
-
- RedirLimitServer (ServerSocket y) {
- s = y;
- port = s.getLocalPort();
- }
-
- String reply3 = "HTTP/1.1 200 Ok\r\n" +
+ static final String reply3 = "HTTP/1.1 200 Ok\r\n" +
"Date: Mon, 15 Jan 2001 12:18:21 GMT\r\n" +
"Server: Apache/1.3.14 (Unix)\r\n" +
"Connection: close\r\n" +
"Content-Type: text/html; charset=iso-8859-1\r\n\r\n" +
"World";
- public void run () {
+ final ServerSocket ss;
+ final int port;
+
+ RedirLimitServer(ServerSocket ss) {
+ this.ss = ss;
+ port = ss.getLocalPort();
+ }
+
+ public void run() {
try {
- s.setSoTimeout (2000);
- for (int i=0; i<nredirects; i++) {
- s1 = s.accept ();
- s1.setSoTimeout (2000);
- is = s1.getInputStream ();
- os = s1.getOutputStream ();
- is.read ();
- String reply = reply1 + port + "/redirect" + i + reply2;
- os.write (reply.getBytes());
- os.close();
+ ss.setSoTimeout(TIMEOUT);
+ for (int i=0; i<NUM_REDIRECTS; i++) {
+ try (Socket s = ss.accept()) {
+ s.setSoTimeout(TIMEOUT);
+ InputStream is = s.getInputStream();
+ OutputStream os = s.getOutputStream();
+ is.read();
+ String reply = reply1 + port + "/redirect" + i + reply2;
+ os.write(reply.getBytes());
+ }
}
- s1 = s.accept ();
- is = s1.getInputStream ();
- os = s1.getOutputStream ();
- is.read ();
- os.write (reply3.getBytes());
- os.close();
- }
- catch (Exception e) {
- /* Just need thread to terminate */
+ try (Socket s = ss.accept()) {
+ InputStream is = s.getInputStream();
+ OutputStream os = s.getOutputStream();
+ is.read();
+ os.write(reply3.getBytes());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
} finally {
- try { s.close(); } catch (IOException unused) {}
+ try { ss.close(); } catch (IOException unused) {}
}
}
};
-
public class RedirectLimit {
-
- public static final int DELAY = 10;
-
public static void main(String[] args) throws Exception {
- int nLoops = 1;
- int nSize = 10;
- int port, n =0;
- byte b[] = new byte[nSize];
- RedirLimitServer server;
- ServerSocket sock;
+ ServerSocket ss = new ServerSocket (0);
+ int port = ss.getLocalPort();
+ RedirLimitServer server = new RedirLimitServer(ss);
+ server.start();
+ InputStream in = null;
try {
- sock = new ServerSocket (0);
- port = sock.getLocalPort ();
- }
- catch (Exception e) {
- System.out.println ("Exception: " + e);
- return;
- }
-
- server = new RedirLimitServer(sock);
- server.start ();
-
- try {
-
- String s = "http://localhost:" + port;
- URL url = new URL(s);
+ URL url = new URL("http://localhost:" + port);
URLConnection conURL = url.openConnection();
conURL.setDoInput(true);
conURL.setAllowUserInteraction(false);
conURL.setUseCaches(false);
- InputStream in = conURL.getInputStream();
+ in = conURL.getInputStream();
if ((in.read() != (int)'W') || (in.read()!=(int)'o')) {
- throw new RuntimeException ("Unexpected string read");
+ throw new RuntimeException("Unexpected string read");
}
- }
- catch(IOException e) {
- throw new RuntimeException ("Exception caught " + e);
+ } finally {
+ if ( in != null ) { in.close(); }
}
}
}
--- a/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Wed Mar 16 10:47:45 2011 -0400
@@ -22,7 +22,7 @@
*/
/* @test
- * @bug 4607272 6842687 6878369
+ * @bug 4607272 6842687 6878369 6944810 7023403
* @summary Unit test for AsynchronousSocketChannel
* @run main/timeout=600 Basic
*/
--- a/jdk/test/java/nio/file/DirectoryStream/Basic.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/nio/file/DirectoryStream/Basic.java Wed Mar 16 10:47:45 2011 -0400
@@ -69,7 +69,7 @@
throw new RuntimeException("entry not found");
// check filtering: f* should match foo
- DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<>() {
+ DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() {
private PathMatcher matcher =
dir.getFileSystem().getPathMatcher("glob:f*");
public boolean accept(Path file) {
--- a/jdk/test/java/nio/file/FileStore/Basic.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/nio/file/FileStore/Basic.java Wed Mar 16 10:47:45 2011 -0400
@@ -22,7 +22,7 @@
*/
/* @test
- * @bug 4313887 6873621 6979526 7006126
+ * @bug 4313887 6873621 6979526 7006126 7020517
* @summary Unit test for java.nio.file.FileStore
* @library ..
*/
--- a/jdk/test/java/nio/file/Files/TemporaryFiles.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/nio/file/Files/TemporaryFiles.java Wed Mar 16 10:47:45 2011 -0400
@@ -22,7 +22,7 @@
*/
/* @test
- * @bug 4313887 6838333 7006126
+ * @bug 4313887 6838333 7006126 7023034
* @summary Unit test for Files.createTempXXX
* @library ..
*/
@@ -167,5 +167,31 @@
testInvalidFileTemp("../blah", null);
testInvalidFileTemp("dir/blah", null);
testInvalidFileTemp("blah", ".dat/foo");
+
+ // nulls
+ try {
+ Files.createTempFile("blah", ".tmp", (FileAttribute<?>[])null);
+ throw new RuntimeException("NullPointerException expected");
+ } catch (NullPointerException ignore) { }
+ try {
+ Files.createTempFile("blah", ".tmp", new FileAttribute<?>[] { null });
+ throw new RuntimeException("NullPointerException expected");
+ } catch (NullPointerException ignore) { }
+ try {
+ Files.createTempDirectory("blah", (FileAttribute<?>[])null);
+ throw new RuntimeException("NullPointerException expected");
+ } catch (NullPointerException ignore) { }
+ try {
+ Files.createTempDirectory("blah", new FileAttribute<?>[] { null });
+ throw new RuntimeException("NullPointerException expected");
+ } catch (NullPointerException ignore) { }
+ try {
+ Files.createTempFile((Path)null, "blah", ".tmp");
+ throw new RuntimeException("NullPointerException expected");
+ } catch (NullPointerException ignore) { }
+ try {
+ Files.createTempDirectory((Path)null, "blah");
+ throw new RuntimeException("NullPointerException expected");
+ } catch (NullPointerException ignore) { }
}
}
--- a/jdk/test/java/security/cert/CertificateFactory/openssl/OpenSSLCert.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/security/cert/CertificateFactory/openssl/OpenSSLCert.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -28,6 +28,8 @@
*/
import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.util.Arrays;
import java.security.cert.CertificateFactory;
@@ -46,24 +48,20 @@
}
static void test(String... files) throws Exception {
- FileOutputStream fout = new FileOutputStream(OUTFILE);
- for (String file: files) {
- FileInputStream fin = new FileInputStream(
- new File(System.getProperty("test.src", "."), file));
- byte[] buffer = new byte[4096];
- while (true) {
- int len = fin.read(buffer);
- if (len < 0) break;
- fout.write(buffer, 0, len);
+ try (FileOutputStream fout = new FileOutputStream(OUTFILE)) {
+ String here = System.getProperty("test.src", "");
+ for (String file: files) {
+ Files.copy(Paths.get(here, file), fout);
}
- fin.close();
}
- fout.close();
- System.out.println("Testing " + Arrays.toString(files) + "...");
- if (CertificateFactory.getInstance("X509")
- .generateCertificates(new FileInputStream(OUTFILE))
- .size() != files.length) {
- throw new Exception("Not same number");
+ try (FileInputStream fin = new FileInputStream(OUTFILE)) {
+ System.out.println("Testing " + Arrays.toString(files) + "...");
+ if (CertificateFactory.getInstance("X509")
+ .generateCertificates(fin)
+ .size() != files.length) {
+ throw new Exception("Not same number");
+ }
}
+ Files.delete(Paths.get(OUTFILE));
}
}
--- a/jdk/test/java/util/Collection/MOAT.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/Collection/MOAT.java Wed Mar 16 10:47:45 2011 -0400
@@ -28,6 +28,8 @@
* 6431845 4802633 6570566 6570575 6570631 6570924 6691185 6691215
* @summary Run many tests on many Collection and Map implementations
* @author Martin Buchholz
+ * @run main MOAT
+ * @run main/othervm -XX:+AggressiveOpts MOAT
*/
/* Mother Of All (Collection) Tests
--- a/jdk/test/java/util/Currency/ValidateISO4217.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/Currency/ValidateISO4217.java Wed Mar 16 10:47:45 2011 -0400
@@ -111,57 +111,58 @@
static void test1() throws Exception {
- FileReader fr = new FileReader(new File(System.getProperty("test.src", "."), datafile));
- BufferedReader in = new BufferedReader(fr);
- String line;
- SimpleDateFormat format = null;
+ try (FileReader fr = new FileReader(new File(System.getProperty("test.src", "."), datafile));
+ BufferedReader in = new BufferedReader(fr))
+ {
+ String line;
+ SimpleDateFormat format = null;
- while ((line = in.readLine()) != null) {
- if (line.length() == 0 || line.charAt(0) == '#') {
- continue;
- }
+ while ((line = in.readLine()) != null) {
+ if (line.length() == 0 || line.charAt(0) == '#') {
+ continue;
+ }
- StringTokenizer tokens = new StringTokenizer(line, "\t");
- String country = tokens.nextToken();
- if (country.length() != 2) {
- continue;
- }
+ StringTokenizer tokens = new StringTokenizer(line, "\t");
+ String country = tokens.nextToken();
+ if (country.length() != 2) {
+ continue;
+ }
- String currency;
- String numeric;
- String minorUnit;
- int tokensCount = tokens.countTokens();
- if (tokensCount < 3) {
- currency = "";
- numeric = "0";
- minorUnit = "0";
- } else {
- currency = tokens.nextToken();
- numeric = tokens.nextToken();
- minorUnit = tokens.nextToken();
- testCurrencies.add(Currency.getInstance(currency));
+ String currency;
+ String numeric;
+ String minorUnit;
+ int tokensCount = tokens.countTokens();
+ if (tokensCount < 3) {
+ currency = "";
+ numeric = "0";
+ minorUnit = "0";
+ } else {
+ currency = tokens.nextToken();
+ numeric = tokens.nextToken();
+ minorUnit = tokens.nextToken();
+ testCurrencies.add(Currency.getInstance(currency));
- // check for the cutover
- if (tokensCount > 3) {
- if (format == null) {
- format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.US);
- format.setTimeZone(TimeZone.getTimeZone("GMT"));
- format.setLenient(false);
- }
- if (format.parse(tokens.nextToken()).getTime() <
- System.currentTimeMillis()) {
- currency = tokens.nextToken();
- numeric = tokens.nextToken();
- minorUnit = tokens.nextToken();
- testCurrencies.add(Currency.getInstance(currency));
+ // check for the cutover
+ if (tokensCount > 3) {
+ if (format == null) {
+ format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.US);
+ format.setTimeZone(TimeZone.getTimeZone("GMT"));
+ format.setLenient(false);
+ }
+ if (format.parse(tokens.nextToken()).getTime() <
+ System.currentTimeMillis()) {
+ currency = tokens.nextToken();
+ numeric = tokens.nextToken();
+ minorUnit = tokens.nextToken();
+ testCurrencies.add(Currency.getInstance(currency));
+ }
}
}
+ int index = toIndex(country);
+ testCountryCurrency(country, currency, Integer.parseInt(numeric),
+ Integer.parseInt(minorUnit), index);
}
- int index = toIndex(country);
- testCountryCurrency(country, currency, Integer.parseInt(numeric),
- Integer.parseInt(minorUnit), index);
}
- in.close();
for (int i = 0; i < additionalCodes.length; i++) {
int index = toIndex(additionalCodes[i][0]);
--- a/jdk/test/java/util/Formatter/FailingConstructors.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/Formatter/FailingConstructors.java Wed Mar 16 10:47:45 2011 -0400
@@ -34,6 +34,7 @@
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
+import java.nio.file.Files;
import java.util.Formatter;
public class FailingConstructors {
@@ -47,9 +48,7 @@
/* create the file and write its contents */
File file = File.createTempFile(fileName, null);
file.deleteOnExit();
- FileOutputStream fos = new FileOutputStream(file);
- fos.write(FILE_CONTENTS.getBytes());
- fos.close();
+ Files.write(file.toPath(), FILE_CONTENTS.getBytes());
test(true, file);
file.delete();
--- a/jdk/test/java/util/Locale/LocaleEnhanceTest.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/Locale/LocaleEnhanceTest.java Wed Mar 16 10:47:45 2011 -0400
@@ -1204,14 +1204,12 @@
locale = new Locale(lang, country, variant);
}
- // desrialize
- try {
- FileInputStream fis = new FileInputStream(testfile);
- ObjectInputStream ois = new ObjectInputStream(fis);
-
+ // deserialize
+ try (FileInputStream fis = new FileInputStream(testfile);
+ ObjectInputStream ois = new ObjectInputStream(fis))
+ {
Object o = ois.readObject();
assertEquals("Deserialize Java 6 Locale " + locale, o, locale);
- ois.close();
} catch (Exception e) {
errln("Exception while reading " + testfile.getAbsolutePath() + " - " + e.getMessage());
}
--- a/jdk/test/java/util/PriorityQueue/NoNulls.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/PriorityQueue/NoNulls.java Wed Mar 16 10:47:45 2011 -0400
@@ -53,7 +53,7 @@
public class NoNulls {
void test(String[] args) throws Throwable {
final Comparator<String> nullTolerantComparator
- = new Comparator<>() {
+ = new Comparator<String>() {
public int compare(String x, String y) {
return (x == null ? -1 :
y == null ? 1 :
@@ -65,7 +65,7 @@
nullSortedSet.add(null);
final PriorityQueue<String> nullPriorityQueue
- = new PriorityQueue<>() {
+ = new PriorityQueue<String>() {
public Object[] toArray() { return new Object[] { null };}};
final Collection<String> nullCollection = new ArrayList<>();
--- a/jdk/test/java/util/ResourceBundle/Bug6204853.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/ResourceBundle/Bug6204853.java Wed Mar 16 10:47:45 2011 -0400
@@ -39,24 +39,19 @@
public final class Bug6204853 {
public Bug6204853() {
- try {
- String srcDir = System.getProperty("test.src", ".");
- FileInputStream fis8859_1 =
- new FileInputStream(new File(srcDir, "Bug6204853.properties"));
- FileInputStream fisUtf8 =
- new FileInputStream(new File(srcDir, "Bug6204853_Utf8.properties"));
- InputStreamReader isrUtf8 = new InputStreamReader(fisUtf8, "UTF-8");
-
+ String srcDir = System.getProperty("test.src", ".");
+ try (FileInputStream fis8859_1 =
+ new FileInputStream(new File(srcDir, "Bug6204853.properties"));
+ FileInputStream fisUtf8 =
+ new FileInputStream(new File(srcDir, "Bug6204853_Utf8.properties"));
+ InputStreamReader isrUtf8 = new InputStreamReader(fisUtf8, "UTF-8"))
+ {
PropertyResourceBundle bundleUtf8 = new PropertyResourceBundle(isrUtf8);
PropertyResourceBundle bundle = new PropertyResourceBundle(fis8859_1);
String[] arrayUtf8 = createKeyValueArray(bundleUtf8);
String[] array = createKeyValueArray(bundle);
- isrUtf8.close();
- fisUtf8.close();
- fis8859_1.close();
-
if (!Arrays.equals(arrayUtf8, array)) {
throw new RuntimeException("PropertyResourceBundle constructed from a UTF-8 encoded property file is not equal to the one constructed from ISO-8859-1 encoded property file.");
}
--- a/jdk/test/java/util/Scanner/FailingConstructors.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/Scanner/FailingConstructors.java Wed Mar 16 10:47:45 2011 -0400
@@ -33,6 +33,7 @@
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.nio.file.Files;
import java.util.Scanner;
public class FailingConstructors {
@@ -46,9 +47,7 @@
/* create the file and write its contents */
File file = File.createTempFile(fileName, null);
file.deleteOnExit();
- FileOutputStream fos = new FileOutputStream(file);
- fos.write(FILE_CONTENTS.getBytes());
- fos.close();
+ Files.write(file.toPath(), FILE_CONTENTS.getBytes());
test(true, file);
file.delete();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/TimeZone/Bug6772689.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6772689
+ * @summary Test for standard-to-daylight transitions at midnight:
+ * date stays on the given day.
+ */
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+import static java.util.GregorianCalendar.*;
+
+public class Bug6772689 {
+ private static final int BEGIN_YEAR = 2035;
+ private static final int END_YEAR = BEGIN_YEAR + 28;
+
+ public static void main(String[] args) {
+ TimeZone defaultTimeZone = TimeZone.getDefault();
+ int errors = 0;
+
+ Calendar cal = new GregorianCalendar(BEGIN_YEAR, MARCH, 1);
+ String[] tzids = TimeZone.getAvailableIDs();
+ try {
+ for (String id : tzids) {
+ TimeZone tz = TimeZone.getTimeZone(id);
+ if (!tz.useDaylightTime()) {
+ continue;
+ }
+ TimeZone.setDefault(tz);
+
+ dateloop:
+ // Use future dates because sun.util.calendar.ZoneInfo
+ // delegates offset transition calculations to a SimpleTimeZone
+ // (after 2038 as of JDK7).
+ for (int year = BEGIN_YEAR; year < END_YEAR; year++) {
+ for (int month = MARCH; month <= NOVEMBER; month++) {
+ cal.set(year, month, 1, 15, 0, 0);
+ int maxDom = cal.getActualMaximum(DAY_OF_MONTH);
+ for (int dom = 1; dom <= maxDom; dom++) {
+ Date date = new Date(year - 1900, month, dom);
+ if (date.getYear()+1900 != year
+ || date.getMonth() != month
+ || date.getDate() != dom) {
+ System.err.printf("%s: got %04d-%02d-%02d, expected %04d-%02d-%02d%n",
+ id,
+ date.getYear() + 1900,
+ date.getMonth() + 1,
+ date.getDate(),
+ year,
+ month + 1,
+ dom);
+ errors++;
+ break dateloop;
+ }
+ }
+ }
+ }
+ }
+ } finally {
+ // Restore the default TimeZone.
+ TimeZone.setDefault(defaultTimeZone);
+ }
+ if (errors > 0) {
+ throw new RuntimeException("Transition test failed");
+ }
+ }
+}
--- a/jdk/test/java/util/jar/JarEntry/GetMethodsReturnClones.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/jar/JarEntry/GetMethodsReturnClones.java Wed Mar 16 10:47:45 2011 -0400
@@ -40,22 +40,21 @@
System.getProperty("file.separator");
public static void main(String[] args) throws Exception {
- JarFile jf = new JarFile(BASE + "test.jar", true);
-
- byte[] buffer = new byte[8192];
- Enumeration<JarEntry> e = jf.entries();
- List<JarEntry> entries = new ArrayList<JarEntry>();
- while (e.hasMoreElements()) {
- JarEntry je = e.nextElement();
- entries.add(je);
- InputStream is = jf.getInputStream(je);
- while (is.read(buffer, 0, buffer.length) != -1) {
- // we just read. this will throw a SecurityException
- // if a signature/digest check fails.
+ List<JarEntry> entries = new ArrayList<>();
+ try (JarFile jf = new JarFile(BASE + "test.jar", true)) {
+ byte[] buffer = new byte[8192];
+ Enumeration<JarEntry> e = jf.entries();
+ while (e.hasMoreElements()) {
+ JarEntry je = e.nextElement();
+ entries.add(je);
+ try (InputStream is = jf.getInputStream(je)) {
+ while (is.read(buffer, 0, buffer.length) != -1) {
+ // we just read. this will throw a SecurityException
+ // if a signature/digest check fails.
+ }
+ }
}
- is.close();
}
- jf.close();
for (JarEntry je : entries) {
Certificate[] certs = je.getCertificates();
--- a/jdk/test/java/util/jar/JarFile/ScanSignedJar.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/jar/JarFile/ScanSignedJar.java Wed Mar 16 10:47:45 2011 -0400
@@ -37,25 +37,25 @@
public class ScanSignedJar {
public static void main(String[] args) throws Exception {
- JarFile file = new JarFile(new File(System.getProperty("test.src","."),
- "bogus-signerinfo-attr.jar"));
- byte[] buffer = new byte[8192];
boolean isSigned = false;
+ try (JarFile file = new JarFile(new File(System.getProperty("test.src","."),
+ "bogus-signerinfo-attr.jar"))) {
+ byte[] buffer = new byte[8192];
- for (Enumeration entries = file.entries(); entries.hasMoreElements();) {
- JarEntry entry = (JarEntry) entries.nextElement();
- InputStream jis = file.getInputStream(entry);
- while (jis.read(buffer, 0, buffer.length) != -1) {
- // read the jar entry
+ for (Enumeration entries = file.entries(); entries.hasMoreElements();) {
+ JarEntry entry = (JarEntry) entries.nextElement();
+ try (InputStream jis = file.getInputStream(entry)) {
+ while (jis.read(buffer, 0, buffer.length) != -1) {
+ // read the jar entry
+ }
+ }
+ if (entry.getCertificates() != null) {
+ isSigned = true;
+ }
+ System.out.println((isSigned ? "[signed] " : "\t ") +
+ entry.getName());
}
- jis.close();
- if (entry.getCertificates() != null) {
- isSigned = true;
- }
- System.out.println((isSigned ? "[signed] " : "\t ") +
- entry.getName());
}
- file.close();
if (isSigned) {
System.out.println("\nJAR file has signed entries");
--- a/jdk/test/java/util/zip/Available.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/Available.java Wed Mar 16 10:47:45 2011 -0400
@@ -44,14 +44,17 @@
File f = new File(System.getProperty("test.src", "."), "input.jar");
// test ZipInputStream
- ZipInputStream z = new ZipInputStream(new FileInputStream(f));
- z.getNextEntry();
- tryAvail(z);
+ try (FileInputStream fis = new FileInputStream(f);
+ ZipInputStream z = new ZipInputStream(fis))
+ {
+ z.getNextEntry();
+ tryAvail(z);
+ }
// test InflaterInputStream
- ZipFile zfile = new ZipFile(f);
- tryAvail(zfile.getInputStream(zfile.getEntry("Available.java")));
- z.close();
+ try (ZipFile zfile = new ZipFile(f)) {
+ tryAvail(zfile.getInputStream(zfile.getEntry("Available.java")));
+ }
}
static void tryAvail(InputStream in) throws Exception {
@@ -67,20 +70,21 @@
// To reproduce 4401122
private static void test2() throws Exception {
File f = new File(System.getProperty("test.src", "."), "input.jar");
- ZipFile zf = new ZipFile(f);
- InputStream in = zf.getInputStream(zf.getEntry("Available.java"));
+ try (ZipFile zf = new ZipFile(f)) {
+ InputStream in = zf.getInputStream(zf.getEntry("Available.java"));
- int initialAvailable = in.available();
- in.read();
- if (in.available() != initialAvailable - 1)
- throw new RuntimeException("Available not decremented.");
- for(int j=0; j<initialAvailable-1; j++)
+ int initialAvailable = in.available();
in.read();
- if (in.available() != 0)
- throw new RuntimeException();
- in.close();
- if (in.available() != 0)
- throw new RuntimeException();
+ if (in.available() != initialAvailable - 1)
+ throw new RuntimeException("Available not decremented.");
+ for(int j=0; j<initialAvailable-1; j++)
+ in.read();
+ if (in.available() != 0)
+ throw new RuntimeException();
+ in.close();
+ if (in.available() != 0)
+ throw new RuntimeException();
+ }
}
}
--- a/jdk/test/java/util/zip/FileBuilder.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/FileBuilder.java Wed Mar 16 10:47:45 2011 -0400
@@ -53,25 +53,24 @@
filetype.equals("SlightlyCompressible")))
usageError();
- RandomAccessFile raf = new RandomAccessFile(filename, "rw");
+ try (RandomAccessFile raf = new RandomAccessFile(filename, "rw")) {
+ if (filetype.equals("SlightlyCompressible")) {
+ byte[] randomBytes = new byte[16384];
+ byte[] nullBytes = new byte[randomBytes.length/10];
+ Random rand = new Random();
+ for (int i = 0; raf.length() < filesize; ++i) {
+ rand.nextBytes(randomBytes);
+ raf.write(nullBytes);
+ raf.write(randomBytes);
+ }
+ }
- if (filetype.equals("SlightlyCompressible")) {
- byte[] randomBytes = new byte[16384];
- byte[] nullBytes = new byte[randomBytes.length/10];
- Random rand = new Random();
- for (int i = 0; raf.length() < filesize; ++i) {
- rand.nextBytes(randomBytes);
- raf.write(nullBytes);
- raf.write(randomBytes);
- }
+ // Make sure file is exactly the requested size, and that
+ // a unique identifying trailer is written.
+ byte[] filenameBytes = filename.getBytes("UTF8");
+ raf.seek(filesize-filenameBytes.length);
+ raf.write(filenameBytes);
+ raf.setLength(filesize);
}
-
- // Make sure file is exactly the requested size, and that
- // a unique identifying trailer is written.
- byte[] filenameBytes = filename.getBytes("UTF8");
- raf.seek(filesize-filenameBytes.length);
- raf.write(filenameBytes);
- raf.setLength(filesize);
- raf.close();
}
}
--- a/jdk/test/java/util/zip/GZIP/Accordion.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/GZIP/Accordion.java Wed Mar 16 10:47:45 2011 -0400
@@ -64,16 +64,13 @@
System.out.println("count="+count);
Thread compressor = new Thread() { public void run() {
- try {
- final GZIPOutputStream s = new GZIPOutputStream(out);
+ try (GZIPOutputStream s = new GZIPOutputStream(out)) {
for (long i = 0; i < count; i++)
s.write(data, 0, data.length);
- s.close();
} catch (Throwable t) { trouble = t; }}};
Thread uncompressor = new Thread() { public void run() {
- try {
- final GZIPInputStream s = new GZIPInputStream(in);
+ try (GZIPInputStream s = new GZIPInputStream(in)) {
final byte[] maybeBytes = new byte[data.length];
for (long i = 0; i < count; i++) {
readFully(s, maybeBytes);
@@ -82,7 +79,6 @@
}
if (s.read(maybeBytes, 0, 1) > 0)
throw new Exception("Unexpected NON-EOF");
- s.close();
} catch (Throwable t) { trouble = t; }}};
compressor.start(); uncompressor.start();
--- a/jdk/test/java/util/zip/GZIP/GZIPInputStreamRead.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/GZIP/GZIPInputStreamRead.java Wed Mar 16 10:47:45 2011 -0400
@@ -44,9 +44,9 @@
rnd.nextBytes(src);
srcBAOS.write(src);
- GZIPOutputStream gzos = new GZIPOutputStream(dstBAOS);
- gzos.write(src);
- gzos.close();
+ try (GZIPOutputStream gzos = new GZIPOutputStream(dstBAOS)) {
+ gzos.write(src);
+ }
}
byte[] srcBytes = srcBAOS.toByteArray();
byte[] dstBytes = dstBAOS.toByteArray();
@@ -75,26 +75,26 @@
int readBufSize, int gzisBufSize)
throws Throwable
{
- GZIPInputStream gzis = new GZIPInputStream(
- new ByteArrayInputStream(dst),
- gzisBufSize);
- byte[] result = new byte[src.length + 10];
- byte[] buf = new byte[readBufSize];
- int n = 0;
- int off = 0;
+ try (ByteArrayInputStream bais = new ByteArrayInputStream(dst);
+ GZIPInputStream gzis = new GZIPInputStream(bais, gzisBufSize))
+ {
+ byte[] result = new byte[src.length + 10];
+ byte[] buf = new byte[readBufSize];
+ int n = 0;
+ int off = 0;
- while ((n = gzis.read(buf, 0, buf.length)) != -1) {
- System.arraycopy(buf, 0, result, off, n);
- off += n;
- // no range check, if overflow, let it fail
+ while ((n = gzis.read(buf, 0, buf.length)) != -1) {
+ System.arraycopy(buf, 0, result, off, n);
+ off += n;
+ // no range check, if overflow, let it fail
+ }
+ if (off != src.length || gzis.available() != 0 ||
+ !Arrays.equals(src, Arrays.copyOf(result, off))) {
+ throw new RuntimeException(
+ "GZIPInputStream reading failed! " +
+ ", src.len=" + src.length +
+ ", read=" + off);
+ }
}
- if (off != src.length || gzis.available() != 0 ||
- !Arrays.equals(src, Arrays.copyOf(result, off))) {
- throw new RuntimeException(
- "GZIPInputStream reading failed! " +
- ", src.len=" + src.length +
- ", read=" + off);
- }
- gzis.close();
}
}
--- a/jdk/test/java/util/zip/InflateIn_DeflateOut.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/InflateIn_DeflateOut.java Wed Mar 16 10:47:45 2011 -0400
@@ -134,14 +134,14 @@
PairedOutputStream pos = new PairedOutputStream(pis);
pis.setPairedOutputStream(pos);
- DeflaterOutputStream dos = new DeflaterOutputStream(pos, true);
byte[] data = new byte[random.nextInt(1024 * 1024)];
byte[] buf = new byte[data.length];
random.nextBytes(data);
- dos.write(data);
- dos.close();
+ try (DeflaterOutputStream dos = new DeflaterOutputStream(pos, true)) {
+ dos.write(data);
+ }
check(readFully(iis, buf, buf.length));
check(Arrays.equals(data, buf));
}
--- a/jdk/test/java/util/zip/InfoZip.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/InfoZip.java Wed Mar 16 10:47:45 2011 -0400
@@ -85,41 +85,37 @@
//----------------------------------------------------------------
File f = new File("InfoZip.zip");
- OutputStream os = new FileOutputStream(f);
- os.write(new byte[]
- {'P', 'K', 3, 4, 10, 0, 0, 0, 0, 0, -68, 8, 'k',
- '2', 'V', -7, 'm', 9, 20, 0, 0, 0, 20, 0, 0, 0,
- 8, 0, 21, 0, 's', 'o', 'm', 'e', 'F', 'i', 'l', 'e', 'U',
- 'T', 9, 0, 3, 't', '_', '1', 'B', 't', '_', '1', 'B', 'U',
- 'x', 4, 0, -14, 'v', 26, 4, 'M', 'e', 's', 's', 'a', 'g',
- 'e', ' ', 'i', 'n', ' ', 'a', ' ', 'B', 'o', 't', 't', 'l', 'e',
- 10, 'P', 'K', 1, 2, 23, 3, 10, 0, 0, 0, 0, 0,
- -68, 8, 'k', '2', 'V', -7, 'm', 9, 20, 0, 0, 0, 20,
- 0, 0, 0, 8, 0, 13, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, -92, -127, 0, 0, 0, 0, 's', 'o', 'm', 'e', 'F',
- 'i', 'l', 'e', 'U', 'T', 5, 0, 3, 't', '_', '1', 'B', 'U',
- 'x', 0, 0, 'P', 'K', 5, 6, 0, 0, 0, 0, 1, 0,
- 1, 0, 'C', 0, 0, 0, 'O', 0, 0, 0, 0, 0, });
- os.close();
+ try (OutputStream os = new FileOutputStream(f)) {
+ os.write(new byte[]
+ {'P', 'K', 3, 4, 10, 0, 0, 0, 0, 0, -68, 8, 'k',
+ '2', 'V', -7, 'm', 9, 20, 0, 0, 0, 20, 0, 0, 0,
+ 8, 0, 21, 0, 's', 'o', 'm', 'e', 'F', 'i', 'l', 'e', 'U',
+ 'T', 9, 0, 3, 't', '_', '1', 'B', 't', '_', '1', 'B', 'U',
+ 'x', 4, 0, -14, 'v', 26, 4, 'M', 'e', 's', 's', 'a', 'g',
+ 'e', ' ', 'i', 'n', ' ', 'a', ' ', 'B', 'o', 't', 't', 'l', 'e',
+ 10, 'P', 'K', 1, 2, 23, 3, 10, 0, 0, 0, 0, 0,
+ -68, 8, 'k', '2', 'V', -7, 'm', 9, 20, 0, 0, 0, 20,
+ 0, 0, 0, 8, 0, 13, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, -92, -127, 0, 0, 0, 0, 's', 'o', 'm', 'e', 'F',
+ 'i', 'l', 'e', 'U', 'T', 5, 0, 3, 't', '_', '1', 'B', 'U',
+ 'x', 0, 0, 'P', 'K', 5, 6, 0, 0, 0, 0, 1, 0,
+ 1, 0, 'C', 0, 0, 0, 'O', 0, 0, 0, 0, 0, });
+ }
- ZipFile zf = new ZipFile(f);
ZipEntry ze = null;
- try {
+ try (ZipFile zf = new ZipFile(f)) {
Enumeration<? extends ZipEntry> entries = zf.entries();
ze = entries.nextElement();
check(! entries.hasMoreElements());
checkZipEntry(ze, contents(zf, ze));
- } finally {
- zf.close();
}
- ZipInputStream is = new ZipInputStream(new FileInputStream(f));
- try {
+ try (FileInputStream fis = new FileInputStream(f);
+ ZipInputStream is = new ZipInputStream(fis))
+ {
ze = is.getNextEntry();
checkZipEntry(ze, contents(is));
check(is.getNextEntry() == null);
- } finally {
- is.close();
}
f.delete();
System.out.printf("passed = %d, failed = %d%n", passed, failed);
--- a/jdk/test/java/util/zip/LargeZip.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/LargeZip.java Wed Mar 16 10:47:45 2011 -0400
@@ -98,19 +98,21 @@
}
data = baos.toByteArray();
- ZipOutputStream zos = new ZipOutputStream(
- new BufferedOutputStream(new FileOutputStream(largeFile)));
- long length = 0;
- while (length < fileSize) {
- ZipEntry ze = new ZipEntry("entry-" + length);
- lastEntryName = ze.getName();
- zos.putNextEntry(ze);
- zos.write(data, 0, data.length);
- zos.closeEntry();
- length = largeFile.length();
+ try (FileOutputStream fos = new FileOutputStream(largeFile);
+ BufferedOutputStream bos = new BufferedOutputStream(fos);
+ ZipOutputStream zos = new ZipOutputStream(bos))
+ {
+ long length = 0;
+ while (length < fileSize) {
+ ZipEntry ze = new ZipEntry("entry-" + length);
+ lastEntryName = ze.getName();
+ zos.putNextEntry(ze);
+ zos.write(data, 0, data.length);
+ zos.closeEntry();
+ length = largeFile.length();
+ }
+ System.out.println("Last entry written is " + lastEntryName);
}
- System.out.println("Last entry written is " + lastEntryName);
- zos.close();
}
static void readLargeZip1() throws Throwable {
@@ -143,33 +145,35 @@
static void readLargeZip2() throws Throwable {
- ZipInputStream zis = new ZipInputStream(
- new BufferedInputStream(new FileInputStream(largeFile)));
- ZipEntry entry = null;
- String entryName = null;
- int count = 0;
- while ((entry = zis.getNextEntry()) != null) {
- entryName = entry.getName();
- if (entryName.equals(lastEntryName)) {
- break;
+ try (FileInputStream fis = new FileInputStream(largeFile);
+ BufferedInputStream bis = new BufferedInputStream(fis);
+ ZipInputStream zis = new ZipInputStream(bis))
+ {
+ ZipEntry entry = null;
+ String entryName = null;
+ int count = 0;
+ while ((entry = zis.getNextEntry()) != null) {
+ entryName = entry.getName();
+ if (entryName.equals(lastEntryName)) {
+ break;
+ }
+ count++;
}
- count++;
+ System.out.println("Number of entries read: " + count);
+ System.out.println("Last entry read is " + entryName);
+ check(!entry.isDirectory());
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ byte buf[] = new byte[4096];
+ int len;
+ while ((len = zis.read(buf)) >= 0) {
+ baos.write(buf, 0, len);
+ }
+ baos.close();
+ check(Arrays.equals(data, baos.toByteArray()));
+ check(zis.getNextEntry() == null);
}
- System.out.println("Number of entries read: " + count);
- System.out.println("Last entry read is " + entryName);
- check(!entry.isDirectory());
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- byte buf[] = new byte[4096];
- int len;
- while ((len = zis.read(buf)) >= 0) {
- baos.write(buf, 0, len);
- }
- baos.close();
- check(Arrays.equals(data, baos.toByteArray()));
- check(zis.getNextEntry() == null);
- zis.close();
}
--- a/jdk/test/java/util/zip/TestEmptyZip.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/TestEmptyZip.java Wed Mar 16 10:47:45 2011 -0400
@@ -78,67 +78,49 @@
pass();
}
}
- ZipInputStream zis = null;
- try {
- zis = new ZipInputStream(new FileInputStream(f));
+ try (FileInputStream fis = new FileInputStream(f);
+ ZipInputStream zis = new ZipInputStream(fis))
+ {
ZipEntry ze = zis.getNextEntry();
check(ze == null);
} catch (IOException ex) {
unexpected(ex);
- } finally {
- if (zis != null) zis.close();
}
}
static void write(File f) throws Exception {
- ZipOutputStream zos = null;
- try {
- zos = new ZipOutputStream(new FileOutputStream(f));
+ try (FileOutputStream fis = new FileOutputStream(f);
+ ZipOutputStream zos = new ZipOutputStream(fis))
+ {
zos.finish();
- zos.close();
pass();
} catch (Exception ex) {
unexpected(ex);
- } finally {
- if (zos != null) {
- zos.close();
- }
}
}
static void readFile(File f) throws Exception {
- ZipFile zf = null;
- try {
- zf = new ZipFile(f);
+ try (ZipFile zf = new ZipFile(f)) {
Enumeration e = zf.entries();
while (e.hasMoreElements()) {
ZipEntry entry = (ZipEntry) e.nextElement();
fail();
}
- zf.close();
pass();
} catch (Exception ex) {
unexpected(ex);
- } finally {
- if (zf != null) {
- zf.close();
- }
}
}
static void readStream(File f) throws Exception {
- ZipInputStream zis = null;
- try {
- zis = new ZipInputStream(new FileInputStream(f));
+ try (FileInputStream fis = new FileInputStream(f);
+ ZipInputStream zis = new ZipInputStream(fis))
+ {
ZipEntry ze = zis.getNextEntry();
check(ze == null);
byte[] buf = new byte[1024];
check(zis.read(buf, 0, 1024) == -1);
- } finally {
- if (zis != null) {
- zis.close();
- }
}
}
--- a/jdk/test/java/util/zip/ZipCoding.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipCoding.java Wed Mar 16 10:47:45 2011 -0400
@@ -57,59 +57,58 @@
String name, String comment, byte[] bb)
throws Exception
{
- ZipInputStream zis = new ZipInputStream(is, cs);
- ZipEntry e = zis.getNextEntry();
- if (e == null || ! name.equals(e.getName()))
- throw new RuntimeException("ZipIS name doesn't match!");
- byte[] bBuf = new byte[bb.length << 1];
- int n = zis.read(bBuf, 0, bBuf.length);
- if (n != bb.length ||
- !Arrays.equals(bb, Arrays.copyOf(bBuf, n))) {
- throw new RuntimeException("ZipIS content doesn't match!");
+ try (ZipInputStream zis = new ZipInputStream(is, cs)) {
+ ZipEntry e = zis.getNextEntry();
+ if (e == null || ! name.equals(e.getName()))
+ throw new RuntimeException("ZipIS name doesn't match!");
+ byte[] bBuf = new byte[bb.length << 1];
+ int n = zis.read(bBuf, 0, bBuf.length);
+ if (n != bb.length ||
+ !Arrays.equals(bb, Arrays.copyOf(bBuf, n))) {
+ throw new RuntimeException("ZipIS content doesn't match!");
+ }
}
- zis.close();
}
static void testZipFile(File f, Charset cs,
String name, String comment, byte[] bb)
throws Exception
{
- ZipFile zf = new ZipFile(f, cs);
- Enumeration<? extends ZipEntry> zes = zf.entries();
- ZipEntry e = (ZipEntry)zes.nextElement();
- if (! name.equals(e.getName()) ||
- ! comment.equals(e.getComment()))
- throw new RuntimeException("ZipFile: name/comment doesn't match!");
- InputStream is = zf.getInputStream(e);
- if (is == null)
- throw new RuntimeException("ZipFile: getIS failed!");
- byte[] bBuf = new byte[bb.length << 1];
- int n = 0;
- int nn =0;
- while ((nn = is.read(bBuf, n, bBuf.length-n)) != -1) {
- n += nn;
+ try (ZipFile zf = new ZipFile(f, cs)) {
+ Enumeration<? extends ZipEntry> zes = zf.entries();
+ ZipEntry e = (ZipEntry)zes.nextElement();
+ if (! name.equals(e.getName()) ||
+ ! comment.equals(e.getComment()))
+ throw new RuntimeException("ZipFile: name/comment doesn't match!");
+ InputStream is = zf.getInputStream(e);
+ if (is == null)
+ throw new RuntimeException("ZipFile: getIS failed!");
+ byte[] bBuf = new byte[bb.length << 1];
+ int n = 0;
+ int nn =0;
+ while ((nn = is.read(bBuf, n, bBuf.length-n)) != -1) {
+ n += nn;
+ }
+ if (n != bb.length ||
+ !Arrays.equals(bb, Arrays.copyOf(bBuf, n))) {
+ throw new RuntimeException("ZipFile content doesn't match!");
+ }
}
- if (n != bb.length ||
- !Arrays.equals(bb, Arrays.copyOf(bBuf, n))) {
- throw new RuntimeException("ZipFile content doesn't match!");
- }
- zf.close();
}
static void test(String csn, String name, String comment)
throws Exception
{
- byte[] bb = "This is the conent of the zipfile".getBytes("ISO-8859-1");
+ byte[] bb = "This is the content of the zipfile".getBytes("ISO-8859-1");
Charset cs = Charset.forName(csn);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ZipOutputStream zos = new ZipOutputStream(baos, cs);
-
- ZipEntry e = new ZipEntry(name);
- e.setComment(comment);
- zos.putNextEntry(e);
- zos.write(bb, 0, bb.length);
- zos.closeEntry();
- zos.close();
+ try (ZipOutputStream zos = new ZipOutputStream(baos, cs)) {
+ ZipEntry e = new ZipEntry(name);
+ e.setComment(comment);
+ zos.putNextEntry(e);
+ zos.write(bb, 0, bb.length);
+ zos.closeEntry();
+ }
ByteArrayInputStream bis = new ByteArrayInputStream(baos.toByteArray());
testZipInputStream(bis, cs, name, comment, bb);
@@ -121,9 +120,9 @@
File f = new File(new File(System.getProperty("test.dir", ".")),
"zfcoding.zip");
- FileOutputStream fos = new FileOutputStream(f);
- baos.writeTo(fos);
- fos.close();
+ try (FileOutputStream fos = new FileOutputStream(f)) {
+ baos.writeTo(fos);
+ }
testZipFile(f, cs, name, comment, bb);
if ("utf-8".equals(csn)) {
testZipFile(f, Charset.forName("MS932"), name, comment, bb);
--- a/jdk/test/java/util/zip/ZipFile/Assortment.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipFile/Assortment.java Wed Mar 16 10:47:45 2011 -0400
@@ -201,13 +201,12 @@
//----------------------------------------------------------------
// Write zip file using ZipOutputStream
//----------------------------------------------------------------
- ZipOutputStream zos = new ZipOutputStream(
- new FileOutputStream(zipName));
-
- for (Entry e : entries)
- e.write(zos);
-
- zos.close();
+ try (FileOutputStream fos = new FileOutputStream(zipName);
+ ZipOutputStream zos = new ZipOutputStream(fos))
+ {
+ for (Entry e : entries)
+ e.write(zos);
+ }
//----------------------------------------------------------------
// Verify zip file contents using JarFile class
--- a/jdk/test/java/util/zip/ZipFile/Comment.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipFile/Comment.java Wed Mar 16 10:47:45 2011 -0400
@@ -57,16 +57,15 @@
private static void writeZipFile(String name, String comment)
throws IOException
{
- ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(name));
- try {
+ try (FileOutputStream fos = new FileOutputStream(name);
+ ZipOutputStream zos = new ZipOutputStream(fos))
+ {
zos.setComment(comment);
ZipEntry ze = new ZipEntry(entryName);
ze.setMethod(ZipEntry.DEFLATED);
zos.putNextEntry(ze);
new DataOutputStream(zos).writeUTF(entryContents);
zos.closeEntry();
- } finally {
- zos.close();
}
}
@@ -74,30 +73,30 @@
throws Exception
{
// Check that Zip entry was correctly written.
- ZipFile zipFile = new ZipFile(name);
- ZipEntry zipEntry = zipFile.getEntry(entryName);
- InputStream is = zipFile.getInputStream(zipEntry);
- String result = new DataInputStream(is).readUTF();
- if (!result.equals(entryContents))
- throw new Exception("Entry contents corrupted");
+ try (ZipFile zipFile = new ZipFile(name)) {
+ ZipEntry zipEntry = zipFile.getEntry(entryName);
+ InputStream is = zipFile.getInputStream(zipEntry);
+ String result = new DataInputStream(is).readUTF();
+ if (!result.equals(entryContents))
+ throw new Exception("Entry contents corrupted");
+ }
- // Check that comment length was correctly written.
- RandomAccessFile file = new RandomAccessFile(name, "r");
- file.seek(file.length() - comment.length()
- - ZipFile.ENDHDR + ZipFile.ENDCOM);
- int b1 = file.readUnsignedByte();
- int b2 = file.readUnsignedByte();
- if (b1 + (b2 << 8) != comment.length())
- throw new Exception("Zip file comment length corrupted");
+ try (RandomAccessFile file = new RandomAccessFile(name, "r")) {
+ // Check that comment length was correctly written.
+ file.seek(file.length() - comment.length()
+ - ZipFile.ENDHDR + ZipFile.ENDCOM);
+ int b1 = file.readUnsignedByte();
+ int b2 = file.readUnsignedByte();
+ if (b1 + (b2 << 8) != comment.length())
+ throw new Exception("Zip file comment length corrupted");
- // Check that comment was correctly written.
- file.seek(file.length() - comment.length());
- byte [] bytes = new byte [comment.length()];
- file.readFully(bytes);
- zipFile.close();
- file.close();
- if (! comment.equals(new String(bytes, "UTF8")))
- throw new Exception("Zip file comment corrupted");
+ // Check that comment was correctly written.
+ file.seek(file.length() - comment.length());
+ byte [] bytes = new byte [comment.length()];
+ file.readFully(bytes);
+ if (! comment.equals(new String(bytes, "UTF8")))
+ throw new Exception("Zip file comment corrupted");
+ }
}
private static String buildComment(int length) {
--- a/jdk/test/java/util/zip/ZipFile/CopyJar.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipFile/CopyJar.java Wed Mar 16 10:47:45 2011 -0400
@@ -31,18 +31,18 @@
public class CopyJar {
public static void main(String args[]) throws Exception {
- ZipFile zf = new ZipFile(new File(System.getProperty("test.src", "."),
- "input.jar"));
- ZipEntry ze = zf.getEntry("ReleaseInflater.java");
- ZipOutputStream zos = new ZipOutputStream(new ByteArrayOutputStream());
- InputStream in = zf.getInputStream(ze);
- byte[] b = new byte[128];
- int n;
- zos.putNextEntry(ze);
- while((n = in.read(b)) != -1) {
- zos.write(b, 0, n);
+ try (ZipFile zf = new ZipFile(new File(System.getProperty("test.src", "."),
+ "input.jar"))) {
+ ZipEntry ze = zf.getEntry("ReleaseInflater.java");
+ ZipOutputStream zos = new ZipOutputStream(new ByteArrayOutputStream());
+ InputStream in = zf.getInputStream(ze);
+ byte[] b = new byte[128];
+ int n;
+ zos.putNextEntry(ze);
+ while((n = in.read(b)) != -1) {
+ zos.write(b, 0, n);
+ }
+ zos.close();
}
- zos.close();
- zf.close();
}
}
--- a/jdk/test/java/util/zip/ZipFile/CorruptedZipFiles.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipFile/CorruptedZipFiles.java Wed Mar 16 10:47:45 2011 -0400
@@ -47,21 +47,19 @@
}
public static void main(String[] args) throws Exception {
- ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("x.zip"));
- try {
+ try (FileOutputStream fos = new FileOutputStream("x.zip");
+ ZipOutputStream zos = new ZipOutputStream(fos))
+ {
ZipEntry e = new ZipEntry("x");
zos.putNextEntry(e);
zos.write((int)'x');
- } finally {
- zos.close();
}
int len = (int)(new File("x.zip").length());
byte[] good = new byte[len];
- FileInputStream fis = new FileInputStream("x.zip");
- fis.read(good);
- fis.close();
- fis = null;
+ try (FileInputStream fis = new FileInputStream("x.zip")) {
+ fis.read(good);
+ }
new File("x.zip").delete();
int endpos = len - ENDHDR;
@@ -150,17 +148,14 @@
boolean getInputStream) {
String zipName = "bad" + (uniquifier++) + ".zip";
try {
- FileOutputStream fos = new FileOutputStream(zipName);
- fos.write(data);
- fos.close();
- ZipFile zf = new ZipFile(zipName);
- try {
+ try (FileOutputStream fos = new FileOutputStream(zipName)) {
+ fos.write(data);
+ }
+ try (ZipFile zf = new ZipFile(zipName)) {
if (getInputStream) {
InputStream is = zf.getInputStream(new ZipEntry("x"));
is.read();
}
- } finally {
- zf.close();
}
fail("Failed to throw expected ZipException");
} catch (ZipException e) {
@@ -170,8 +165,7 @@
unexpected(e);
} catch (Throwable t) {
unexpected(t);
- }
- finally {
+ } finally {
new File(zipName).delete();
}
}
--- a/jdk/test/java/util/zip/ZipFile/DeleteTempJar.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipFile/DeleteTempJar.java Wed Mar 16 10:47:45 2011 -0400
@@ -53,34 +53,34 @@
{
final File zf = File.createTempFile("deletetemp", ".jar");
zf.deleteOnExit();
- JarOutputStream jos = new JarOutputStream(
- new FileOutputStream(zf));
- JarEntry je = new JarEntry("entry");
- jos.putNextEntry(je);
- jos.write("hello, world".getBytes("ASCII"));
- jos.close();
+ try (FileOutputStream fos = new FileOutputStream(zf);
+ JarOutputStream jos = new JarOutputStream(fos))
+ {
+ JarEntry je = new JarEntry("entry");
+ jos.putNextEntry(je);
+ jos.write("hello, world".getBytes("ASCII"));
+ }
HttpServer server = HttpServer.create(
new InetSocketAddress((InetAddress) null, 0), 0);
HttpContext context = server.createContext("/",
new HttpHandler() {
public void handle(HttpExchange e) {
- try {
- FileInputStream fis = new FileInputStream(zf);
- e.sendResponseHeaders(200, zf.length());
- OutputStream os = e.getResponseBody();
- byte[] buf = new byte[1024];
- int count = 0;
- while ((count = fis.read(buf)) != -1) {
- os.write(buf, 0, count);
+ try (FileInputStream fis = new FileInputStream(zf)) {
+ e.sendResponseHeaders(200, zf.length());
+ OutputStream os = e.getResponseBody();
+ byte[] buf = new byte[1024];
+ int count = 0;
+ while ((count = fis.read(buf)) != -1) {
+ os.write(buf, 0, count);
+ }
+ } catch (Exception ex) {
+ unexpected(ex);
+ } finally {
+ e.close();
}
- fis.close();
- e.close();
- } catch (Exception ex) {
- unexpected(ex);
}
- }
- });
+ });
server.start();
URL url = new URL("jar:http://localhost:"
--- a/jdk/test/java/util/zip/ZipFile/EnumAfterClose.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipFile/EnumAfterClose.java Wed Mar 16 10:47:45 2011 -0400
@@ -33,10 +33,12 @@
public class EnumAfterClose {
public static void main(String args[]) throws Exception {
- ZipFile zf = new ZipFile(new File(System.getProperty("test.src", "."),
- "input.zip"));
- Enumeration e = zf.entries();
- zf.close();
+ Enumeration e;
+ try (ZipFile zf = new ZipFile(new File(System.getProperty("test.src", "."),
+ "input.zip"))) {
+ e = zf.entries();
+ }
+ // ensure that the ZipFile is closed before checking the Enumeration
try {
if (e.hasMoreElements()) {
ZipEntry ze = (ZipEntry)e.nextElement();
--- a/jdk/test/java/util/zip/ZipFile/GetDirEntry.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipFile/GetDirEntry.java Wed Mar 16 10:47:45 2011 -0400
@@ -32,12 +32,12 @@
public class GetDirEntry {
public static void main(String args[]) throws Exception {
- ZipFile zf = new ZipFile(new File(System.getProperty("test.src", "."),
- "input.jar"));
- ZipEntry ze = zf.getEntry("META-INF");
- if (ze == null) {
- throw new Exception("failed to find a directory entry");
+ try (ZipFile zf = new ZipFile(new File(System.getProperty("test.src", "."),
+ "input.jar"))) {
+ ZipEntry ze = zf.getEntry("META-INF");
+ if (ze == null) {
+ throw new Exception("failed to find a directory entry");
+ }
}
- zf.close();
}
}
--- a/jdk/test/java/util/zip/ZipFile/LargeZipFile.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipFile/LargeZipFile.java Wed Mar 16 10:47:45 2011 -0400
@@ -93,51 +93,50 @@
baos.write(bb.array(), 0, DATA_SIZE);
}
data = baos.toByteArray();
-
- ZipOutputStream zos = new ZipOutputStream(
- new BufferedOutputStream(new FileOutputStream(largeFile)));
- long length = 0;
- while (length < fileSize) {
- ZipEntry ze = new ZipEntry("entry-" + length);
- lastEntryName = ze.getName();
- zos.putNextEntry(ze);
- zos.write(data, 0, data.length);
- zos.closeEntry();
- length = largeFile.length();
+ try (FileOutputStream fos = new FileOutputStream(largeFile);
+ BufferedOutputStream bos = new BufferedOutputStream(fos);
+ ZipOutputStream zos = new ZipOutputStream(bos))
+ {
+ long length = 0;
+ while (length < fileSize) {
+ ZipEntry ze = new ZipEntry("entry-" + length);
+ lastEntryName = ze.getName();
+ zos.putNextEntry(ze);
+ zos.write(data, 0, data.length);
+ zos.closeEntry();
+ length = largeFile.length();
+ }
+ System.out.println("Last entry written is " + lastEntryName);
}
- System.out.println("Last entry written is " + lastEntryName);
- zos.close();
}
static void readLargeZip() throws Throwable {
- ZipFile zipFile = new ZipFile(largeFile);
- ZipEntry entry = null;
- String entryName = null;
- int count = 0;
- Enumeration<? extends ZipEntry> entries = zipFile.entries();
- while (entries.hasMoreElements()) {
- entry = entries.nextElement();
- entryName = entry.getName();
- count++;
+ try (ZipFile zipFile = new ZipFile(largeFile)) {
+ ZipEntry entry = null;
+ String entryName = null;
+ int count = 0;
+ Enumeration<? extends ZipEntry> entries = zipFile.entries();
+ while (entries.hasMoreElements()) {
+ entry = entries.nextElement();
+ entryName = entry.getName();
+ count++;
+ }
+ System.out.println("Number of entries read: " + count);
+ System.out.println("Last entry read is " + entryName);
+ check(!entry.isDirectory());
+ if (check(entryName.equals(lastEntryName))) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ InputStream is = zipFile.getInputStream(entry);
+ byte buf[] = new byte[4096];
+ int len;
+ while ((len = is.read(buf)) >= 0) {
+ baos.write(buf, 0, len);
+ }
+ baos.close();
+ is.close();
+ check(Arrays.equals(data, baos.toByteArray()));
+ }
}
- System.out.println("Number of entries read: " + count);
- System.out.println("Last entry read is " + entryName);
- check(!entry.isDirectory());
- if (check(entryName.equals(lastEntryName))) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- InputStream is = zipFile.getInputStream(entry);
- byte buf[] = new byte[4096];
- int len;
- while ((len = is.read(buf)) >= 0) {
- baos.write(buf, 0, len);
- }
- baos.close();
- is.close();
- check(Arrays.equals(data, baos.toByteArray()));
- }
- try {
- zipFile.close();
- } catch (IOException ioe) {/* what can you do */ }
}
//--------------------- Infrastructure ---------------------------
--- a/jdk/test/java/util/zip/ZipFile/ManyEntries.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipFile/ManyEntries.java Wed Mar 16 10:47:45 2011 -0400
@@ -55,10 +55,10 @@
File zipFile = new File(++uniquifier + ".zip");
try {
zipFile.delete();
- ZipOutputStream zos = new ZipOutputStream(
- new BufferedOutputStream(
- new FileOutputStream(zipFile)));
- try {
+ try (FileOutputStream fos = new FileOutputStream(zipFile);
+ BufferedOutputStream bos = new BufferedOutputStream(fos);
+ ZipOutputStream zos = new ZipOutputStream(bos))
+ {
for (int i = 0; i < N; i++) {
ZipEntry e = new ZipEntry("DIR/"+i);
e.setMethod(method);
@@ -75,13 +75,9 @@
zos.putNextEntry(e);
zos.write(i);
}
- } finally {
- zos.close();
- zos = null;
}
- ZipFile zip = zip = new ZipFile(zipFile);
- try {
+ try (ZipFile zip = new ZipFile(zipFile)) {
if (! (zip.size() == N))
throw new Exception("Bad ZipFile size: " + zip.size());
Enumeration entries = zip.entries();
@@ -104,11 +100,8 @@
}
if (entries.hasMoreElements())
throw new Exception("too many elements");
- } finally {
- zip.close();
}
- }
- finally {
+ } finally {
zipFile.delete();
}
}
--- a/jdk/test/java/util/zip/ZipFile/ManyZipFiles.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipFile/ManyZipFiles.java Wed Mar 16 10:47:45 2011 -0400
@@ -51,14 +51,14 @@
// Create some zip data
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ZipOutputStream zos = new ZipOutputStream(baos);
- ZipEntry ze = new ZipEntry("test");
- zos.putNextEntry(ze);
- byte[] hello = "hello, world".getBytes("ASCII");
- zos.write(hello, 0, hello.length);
- zos.closeEntry();
- zos.finish();
- zos.close();
+ try (ZipOutputStream zos = new ZipOutputStream(baos)) {
+ ZipEntry ze = new ZipEntry("test");
+ zos.putNextEntry(ze);
+ byte[] hello = "hello, world".getBytes("ASCII");
+ zos.write(hello, 0, hello.length);
+ zos.closeEntry();
+ zos.finish();
+ }
byte[] data = baos.toByteArray();
ZipFile zips[] = new ZipFile[numFiles];
@@ -90,9 +90,9 @@
for (int i = 0; i < numFiles; i++) {
File f = File.createTempFile("test", ".zip", tmpdir);
f.deleteOnExit();
- FileOutputStream fos = new FileOutputStream(f);
- fos.write(data, 0, data.length);
- fos.close();
+ try (FileOutputStream fos = new FileOutputStream(f)) {
+ fos.write(data, 0, data.length);
+ }
try {
zips[i] = new ZipFile(f);
} catch (Throwable t) {
@@ -102,11 +102,12 @@
}
}
} finally {
- // This finally block is due to bug 4171239. On windows, if the
+ // This finally block is due to bug 4171239. On Windows, if the
// file is still open at the end of the VM, deleteOnExit won't
// take place. "new ZipFile(...)" opens the zip file, so we have
- // to explicity close those opened above. This finally block can
- // be removed when 4171239 is fixed.
+ // to explicitly close those opened above. This finally block can
+ // be removed when 4171239 is fixed. See also 6357433, against which
+ // 4171239 was closed as a duplicate.
for (int i = 0; i < numFiles; i++) {
if (zips[i] != null) {
try {
--- a/jdk/test/java/util/zip/ZipFile/ReadAfterClose.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipFile/ReadAfterClose.java Wed Mar 16 10:47:45 2011 -0400
@@ -34,10 +34,13 @@
public class ReadAfterClose {
public static void main(String[] argv) throws Exception {
- ZipFile zf = new ZipFile(new File(System.getProperty("test.src","."),"crash.jar"));
- ZipEntry zent = zf.getEntry("Test.java");
- InputStream in = zf.getInputStream(zent);
- zf.close();
+ InputStream in;
+ try (ZipFile zf = new ZipFile(
+ new File(System.getProperty("test.src","."),"crash.jar"))) {
+ ZipEntry zent = zf.getEntry("Test.java");
+ in = zf.getInputStream(zent);
+ }
+ // ensure zf is closed at this point
try {
in.read();
} catch (IOException e) {
--- a/jdk/test/java/util/zip/ZipFile/ReadZip.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipFile/ReadZip.java Wed Mar 16 10:47:45 2011 -0400
@@ -27,6 +27,10 @@
*/
import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.nio.file.StandardOpenOption;
import java.util.zip.*;
public class ReadZip {
@@ -38,71 +42,62 @@
}
public static void main(String args[]) throws Exception {
- ZipFile zf = new ZipFile(new File(System.getProperty("test.src", "."),
- "input.zip"));
-
- // Make sure we throw NPE on null objects
- try { unreached (zf.getEntry(null)); }
- catch (NullPointerException e) {}
+ try (ZipFile zf = new ZipFile(new File(System.getProperty("test.src", "."),
+ "input.zip"))) {
+ // Make sure we throw NPE on null objects
+ try { unreached (zf.getEntry(null)); }
+ catch (NullPointerException e) {}
- try { unreached (zf.getInputStream(null)); }
- catch (NullPointerException e) {}
+ try { unreached (zf.getInputStream(null)); }
+ catch (NullPointerException e) {}
- ZipEntry ze = zf.getEntry("ReadZip.java");
- if (ze == null) {
- throw new Exception("cannot read from zip file");
+ ZipEntry ze = zf.getEntry("ReadZip.java");
+ if (ze == null) {
+ throw new Exception("cannot read from zip file");
+ }
}
- zf.close();
// Make sure we can read the zip file that has some garbage
// bytes padded at the end.
- FileInputStream fis = new FileInputStream(
- new File(System.getProperty("test.src", "."),
- "input.zip"));
- File newZip = new File(System.getProperty("test.dir", "."),
- "input2.zip");
- FileOutputStream fos = new FileOutputStream(newZip);
+ File newZip = new File(System.getProperty("test.dir", "."), "input2.zip");
+ Files.copy(Paths.get(System.getProperty("test.src", ""), "input.zip"),
+ newZip.toPath(), StandardCopyOption.REPLACE_EXISTING);
- byte[] buf = new byte[1024];
- int n = 0;
- while ((n = fis.read(buf)) != -1) {
- fos.write(buf, 0, n);
+ // pad some bytes
+ try (OutputStream os = Files.newOutputStream(newZip.toPath(),
+ StandardOpenOption.APPEND)) {
+ os.write(1); os.write(3); os.write(5); os.write(7);
}
- fis.close();
- // pad some bytes
- fos.write(1); fos.write(3); fos.write(5); fos.write(7);
- fos.close();
- try {
- zf = new ZipFile(newZip);
- ze = zf.getEntry("ReadZip.java");
+
+ try (ZipFile zf = new ZipFile(newZip)) {
+ ZipEntry ze = zf.getEntry("ReadZip.java");
if (ze == null) {
throw new Exception("cannot read from zip file");
}
} finally {
- zf.close();
newZip.delete();
}
// Read zip file comment
try {
+ try (FileOutputStream fos = new FileOutputStream(newZip);
+ ZipOutputStream zos = new ZipOutputStream(fos))
+ {
+ ZipEntry ze = new ZipEntry("ZipEntry");
+ zos.putNextEntry(ze);
+ zos.write(1); zos.write(2); zos.write(3); zos.write(4);
+ zos.closeEntry();
+ zos.setComment("This is the comment for testing");
+ }
- ZipOutputStream zos = new ZipOutputStream(
- new FileOutputStream(newZip));
- ze = new ZipEntry("ZipEntry");
- zos.putNextEntry(ze);
- zos.write(1); zos.write(2); zos.write(3); zos.write(4);
- zos.closeEntry();
- zos.setComment("This is the comment for testing");
- zos.close();
-
- zf = new ZipFile(newZip);
- ze = zf.getEntry("ZipEntry");
- if (ze == null)
- throw new Exception("cannot read entry from zip file");
- if (!"This is the comment for testing".equals(zf.getComment()))
- throw new Exception("cannot read comment from zip file");
+ try (ZipFile zf = new ZipFile(newZip)) {
+ ZipEntry ze = zf.getEntry("ZipEntry");
+ if (ze == null)
+ throw new Exception("cannot read entry from zip file");
+ if (!"This is the comment for testing".equals(zf.getComment()))
+ throw new Exception("cannot read comment from zip file");
+ }
} finally {
- zf.close();
newZip.delete();
}
--- a/jdk/test/java/util/zip/ZipFile/ShortRead.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/ZipFile/ShortRead.java Wed Mar 16 10:47:45 2011 -0400
@@ -38,27 +38,29 @@
try {
final String entryName = "abc";
final String data = "Data disponible";
- final ZipOutputStream zos =
- new ZipOutputStream(new FileOutputStream(zFile));
- zos.putNextEntry(new ZipEntry(entryName));
- zos.write(data.getBytes("ASCII"));
- zos.closeEntry();
- zos.close();
+ try (FileOutputStream fos = new FileOutputStream(zFile);
+ ZipOutputStream zos = new ZipOutputStream(fos))
+ {
+ zos.putNextEntry(new ZipEntry(entryName));
+ zos.write(data.getBytes("ASCII"));
+ zos.closeEntry();
+ }
- final ZipFile zipFile = new ZipFile(zFile);
- final ZipEntry zentry = zipFile.getEntry(entryName);
- final InputStream inputStream = zipFile.getInputStream(zentry);
- System.out.printf("size=%d csize=%d available=%d%n",
- zentry.getSize(),
- zentry.getCompressedSize(),
- inputStream.available());
- byte[] buf = new byte[data.length()];
- final int count = inputStream.read(buf);
- if (! new String(buf, "ASCII").equals(data) ||
- count != data.length())
- throw new Exception("short read?");
- zipFile.close();
+ try (ZipFile zipFile = new ZipFile(zFile)) {
+ final ZipEntry zentry = zipFile.getEntry(entryName);
+ final InputStream inputStream = zipFile.getInputStream(zentry);
+ System.out.printf("size=%d csize=%d available=%d%n",
+ zentry.getSize(),
+ zentry.getCompressedSize(),
+ inputStream.available());
+ byte[] buf = new byte[data.length()];
+ final int count = inputStream.read(buf);
+ if (! new String(buf, "ASCII").equals(data) ||
+ count != data.length())
+ throw new Exception("short read?");
+ }
+ } finally {
+ zFile.delete();
}
- finally { zFile.delete(); }
}
}
--- a/jdk/test/java/util/zip/zip.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/java/util/zip/zip.java Wed Mar 16 10:47:45 2011 -0400
@@ -322,57 +322,57 @@
void create(OutputStream out) throws IOException
{
- ZipOutputStream zos = new ZipOutputStream(out, cs);
- if (flag0) {
- zos.setMethod(ZipOutputStream.STORED);
+ try (ZipOutputStream zos = new ZipOutputStream(out, cs)) {
+ if (flag0) {
+ zos.setMethod(ZipOutputStream.STORED);
+ }
+ for (File file: entries) {
+ addFile(zos, file);
+ }
}
- for (File file: entries) {
- addFile(zos, file);
- }
- zos.close();
}
boolean update(InputStream in, OutputStream out) throws IOException
{
- ZipInputStream zis = new ZipInputStream(in, cs);
- ZipOutputStream zos = new ZipOutputStream(out, cs);
- ZipEntry e = null;
- byte[] buf = new byte[1024];
- int n = 0;
- boolean updateOk = true;
+ try (ZipInputStream zis = new ZipInputStream(in, cs);
+ ZipOutputStream zos = new ZipOutputStream(out, cs))
+ {
+ ZipEntry e = null;
+ byte[] buf = new byte[1024];
+ int n = 0;
+ boolean updateOk = true;
- // put the old entries first, replace if necessary
- while ((e = zis.getNextEntry()) != null) {
- String name = e.getName();
- if (!entryMap.containsKey(name)) { // copy the old stuff
- // do our own compression
- ZipEntry e2 = new ZipEntry(name);
- e2.setMethod(e.getMethod());
- e2.setTime(e.getTime());
- e2.setComment(e.getComment());
- e2.setExtra(e.getExtra());
- if (e.getMethod() == ZipEntry.STORED) {
- e2.setSize(e.getSize());
- e2.setCrc(e.getCrc());
+ // put the old entries first, replace if necessary
+ while ((e = zis.getNextEntry()) != null) {
+ String name = e.getName();
+ if (!entryMap.containsKey(name)) { // copy the old stuff
+ // do our own compression
+ ZipEntry e2 = new ZipEntry(name);
+ e2.setMethod(e.getMethod());
+ e2.setTime(e.getTime());
+ e2.setComment(e.getComment());
+ e2.setExtra(e.getExtra());
+ if (e.getMethod() == ZipEntry.STORED) {
+ e2.setSize(e.getSize());
+ e2.setCrc(e.getCrc());
+ }
+ zos.putNextEntry(e2);
+ while ((n = zis.read(buf, 0, buf.length)) != -1) {
+ zos.write(buf, 0, n);
+ }
+ } else { // replace with the new files
+ File f = entryMap.get(name);
+ addFile(zos, f);
+ entryMap.remove(name);
+ entries.remove(f);
}
- zos.putNextEntry(e2);
- while ((n = zis.read(buf, 0, buf.length)) != -1) {
- zos.write(buf, 0, n);
- }
- } else { // replace with the new files
- File f = entryMap.get(name);
+ }
+
+ // add the remaining new files
+ for (File f: entries) {
addFile(zos, f);
- entryMap.remove(name);
- entries.remove(f);
}
}
-
- // add the remaining new files
- for (File f: entries) {
- addFile(zos, f);
- }
- zis.close();
- zos.close();
return updateOk;
}
@@ -517,25 +517,25 @@
}
void extract(String fname, String files[]) throws IOException {
- ZipFile zf = new ZipFile(fname, cs);
- Set<ZipEntry> dirs = newDirSet();
- Enumeration<? extends ZipEntry> zes = zf.entries();
- while (zes.hasMoreElements()) {
- ZipEntry e = zes.nextElement();
- InputStream is;
- if (files == null) {
- dirs.add(extractFile(zf.getInputStream(e), e));
- } else {
- String name = e.getName();
- for (String file : files) {
- if (name.startsWith(file)) {
- dirs.add(extractFile(zf.getInputStream(e), e));
- break;
+ try (ZipFile zf = new ZipFile(fname, cs)) {
+ Set<ZipEntry> dirs = newDirSet();
+ Enumeration<? extends ZipEntry> zes = zf.entries();
+ while (zes.hasMoreElements()) {
+ ZipEntry e = zes.nextElement();
+ InputStream is;
+ if (files == null) {
+ dirs.add(extractFile(zf.getInputStream(e), e));
+ } else {
+ String name = e.getName();
+ for (String file : files) {
+ if (name.startsWith(file)) {
+ dirs.add(extractFile(zf.getInputStream(e), e));
+ break;
+ }
}
}
}
}
- zf.close();
updateLastModifiedTime(dirs);
}
@@ -607,12 +607,12 @@
}
void list(String fname, String files[]) throws IOException {
- ZipFile zf = new ZipFile(fname, cs);
- Enumeration<? extends ZipEntry> zes = zf.entries();
- while (zes.hasMoreElements()) {
- printEntry(zes.nextElement(), files);
+ try (ZipFile zf = new ZipFile(fname, cs)) {
+ Enumeration<? extends ZipEntry> zes = zf.entries();
+ while (zes.hasMoreElements()) {
+ printEntry(zes.nextElement(), files);
+ }
}
- zf.close();
}
void printEntry(ZipEntry e, String[] files) throws IOException {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/sound/midi/File/SMPTESequence.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,75 @@
+/**
+ * @test
+ * @bug 6835393
+ * @summary Tests that MidiFileReader correctly reads sequences with different division types
+ * @author Alex Menkov
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.MidiSystem;
+import javax.sound.midi.Sequence;
+
+public class SMPTESequence {
+
+ static int failed = 0;
+
+ public static void main(String[] args) {
+ test(Sequence.PPQ);
+ test(Sequence.SMPTE_24);
+ test(Sequence.SMPTE_25);
+ test(Sequence.SMPTE_30);
+ test(Sequence.SMPTE_30DROP);
+
+ if (failed > 0) {
+ throw new RuntimeException("" + failed + " tests failed");
+ }
+ }
+
+ static boolean test(float divisionType) {
+ boolean result = false;
+ try {
+ log("Testing divisionType == " + divisionType);
+ Sequence sequence = new Sequence(divisionType, 16, 1);
+ float div1 = sequence.getDivisionType();
+
+ ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+ MidiSystem.write(sequence, 1, outStream);
+
+ InputStream inStream = new ByteArrayInputStream(outStream.toByteArray());
+
+ sequence = MidiSystem.getSequence(inStream);
+ float div2 = sequence.getDivisionType();
+
+ log("After write/read got divisionType == " + div2);
+ if (Math.abs(div2 - div1) < 0.001f) {
+ result = true;
+ }
+ } catch (InvalidMidiDataException ex) {
+ log(ex);
+ } catch (IOException ex) {
+ log(ex);
+ } catch (IllegalArgumentException ex) {
+ log(ex);
+ }
+ if (result) {
+ log("OK");
+ } else {
+ log("FAIL");
+ failed++;
+ }
+ return result;
+ }
+
+ static void log(String s) {
+ System.out.println(s);
+ }
+
+ static void log(Exception ex) {
+ log("got exception (" + ex.getClass().getSimpleName() + "): " + ex.getMessage());
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/sound/midi/Sequencer/SequencerImplicitSynthOpen.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,110 @@
+/**
+ * @test
+ * @bug 6660470
+ * @summary Tests that sequencer correctly opens/closes (implicitly) devices
+ * @author Alex Menkov
+ */
+
+import java.util.List;
+import javax.sound.midi.MidiDevice;
+import javax.sound.midi.MidiDeviceReceiver;
+import javax.sound.midi.MidiSystem;
+import javax.sound.midi.MidiUnavailableException;
+import javax.sound.midi.Receiver;
+import javax.sound.midi.Sequencer;
+import javax.sound.midi.Transmitter;
+
+public class SequencerImplicitSynthOpen {
+
+ static int TEST_COUNT = 5;
+
+ public static void main(String[] args) {
+ try {
+ log("getting sequencer...");
+ Sequencer sequencer = MidiSystem.getSequencer();
+ log(" - got " + getDeviceStr(sequencer));
+
+ // obtain connected device (usually synthesizer)
+ MidiDevice synth = getConnectedDevice(sequencer);
+ if (synth == null) {
+ log("could not get connected device, returning");
+ return;
+ }
+
+ log("connected device: " + getDeviceStr(synth));
+
+ int success = 0;
+ for (int i=0; i<TEST_COUNT; i++) {
+ if (test(sequencer)) {
+ success++;
+ }
+ }
+
+ if (success != TEST_COUNT) {
+ throw new RuntimeException("test FAILS");
+ }
+ } catch (MidiUnavailableException ex) {
+ // this is not a failure
+ log("Could not get Sequencer");
+ }
+ log("test PASSED.");
+ }
+
+ static boolean test(Sequencer sequencer) throws MidiUnavailableException {
+ log("");
+ log("opening sequencer...");
+ sequencer.open(); // opens connected synthesizer implicitly
+ MidiDevice synth = getConnectedDevice(sequencer);
+ log(" connected device: " + getDeviceStr(synth));
+
+ log("closing sequencer...");
+ sequencer.close(); // closes the synth implicitly
+ log(" synth is " + getDeviceStr(synth));
+ MidiDevice synth2 = getConnectedDevice(sequencer);
+ log(" currently connected device: " + getDeviceStr(synth2));
+
+ if (synth != null && synth.isOpen()) {
+ log("FAIL.");
+ return false;
+ }
+ log("OK.");
+ return true;
+ }
+
+ static MidiDevice getConnectedDevice(Sequencer sequencer) {
+ List<Transmitter> trans = sequencer.getTransmitters();
+ log(" sequencer has " + trans.size() + " opened transmitters:");
+ for (Transmitter tr: trans) {
+ Receiver r = tr.getReceiver();
+ log(" " + getClassStr(tr) + " connected to " + getClassStr(r));
+ if (r instanceof MidiDeviceReceiver) {
+ MidiDeviceReceiver recv = (MidiDeviceReceiver)r;
+ MidiDevice dev = recv.getMidiDevice();
+ log(" - receiver of " + getClassStr(dev));
+ return dev;
+ } else {
+ log(" - does NOT implement MidiDeviceReceiver");
+ }
+ }
+ return null;
+ }
+
+ static String getClassStr(Object o) {
+ if (o == null) {
+ return "<null>";
+ }
+ return o.getClass().getName();
+ }
+
+ static String getDeviceStr(MidiDevice dev) {
+ if (dev == null) {
+ return "NULL";
+ }
+ return getClassStr(dev) + ", " + (dev.isOpen() ? "OPENED" : "CLOSED");
+ }
+
+ static void log(String s) {
+ System.out.println(s);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/sound/sampled/Clip/ClipSetPos.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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.
+ */
+
+/**
+ * @test
+ * @bug 6801206
+ * @summary Tests that Clip sets frame position
+ * @author Alex Menkov
+ */
+
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.Clip;
+import javax.sound.sampled.LineUnavailableException;
+
+public class ClipSetPos {
+
+ final static AudioFormat audioFormat = new AudioFormat(44100f, 16, 2, true, true);
+ final static int frameLength = 44100 * 2; // 2 seconds
+ final static byte[] dataBuffer
+ = new byte[frameLength * (audioFormat.getSampleSizeInBits()/8)
+ * audioFormat.getChannels()];
+ final static int MAX_FRAME_DELTA = 20;
+
+ public static void main(String[] args) {
+ boolean testPassed = true;
+ Clip clip = null;
+ try {
+ clip = AudioSystem.getClip();
+ clip.open(audioFormat, dataBuffer, 0, dataBuffer.length);
+ } catch (LineUnavailableException ex) {
+ log(ex);
+ log("Cannot test (this is not failure)");
+ return;
+ }
+
+ log("clip: " + clip.getClass().getName());
+
+ int len = clip.getFrameLength();
+ for (int pos=0; pos < len; pos += (len /100)) {
+ clip.setFramePosition(pos);
+ int curPos = clip.getFramePosition();
+ if (Math.abs(pos - curPos) > MAX_FRAME_DELTA) {
+ log("Tried to set pos to " + pos + ", but got back " + curPos);
+ testPassed = false;
+ } else {
+ log("Sucessfully set pos to " + pos);
+ }
+ }
+ clip.close();
+
+ if (testPassed) {
+ log("Test PASSED.");
+ } else {
+ log("Test FAILED.");
+ throw new RuntimeException("Test FAILED (see log)");
+ }
+ }
+
+ static void log(String s) {
+ System.out.println(s);
+ }
+
+ static void log(Exception ex) {
+ ex.printStackTrace(System.out);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/sound/sampled/FileWriter/AlawEncoderSync.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,113 @@
+/**
+ * @test
+ * @bug 6938426
+ * @summary Tests that Alaw encoder works properly in multithreaded environment
+ * @author Alex Menkov
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.util.Arrays;
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+
+public class AlawEncoderSync {
+
+ static final int THREAD_COUNT = 20;
+
+ static final AudioFormat pcmFormat = new AudioFormat(8000f, 16, 2, true, false);
+ static final int STREAM_LENGTH = 10; // in seconds
+ static byte[] pcmBuffer;
+ static final AudioFormat alawFormat
+ = new AudioFormat(AudioFormat.Encoding.ALAW, 8000f, 8, 2, 2, 8000f, false);
+
+ static final ConversionThread[] threads = new ConversionThread[THREAD_COUNT];
+
+ public static void main(String[] args) {
+ preparePCMBuffer();
+ log("pcmStream size: " + pcmBuffer.length);
+
+ for (int i=0; i<THREAD_COUNT; i++) {
+ threads[i] = new ConversionThread(i);
+ threads[i].start();
+ }
+
+ for (int i=1; i<THREAD_COUNT; i++) {
+ try {
+ threads[i].join();
+ } catch (InterruptedException ex) {
+ log("Main thread was interrupted, exiting.");
+ return;
+ }
+ }
+
+ int failed = 0;
+ log("comparing result arrays...");
+ for (int i=1; i<THREAD_COUNT; i++) {
+ if (!Arrays.equals(threads[0].resultArray, threads[i].resultArray)) {
+ failed++;
+ log("NOT equals: 0 and " + i);
+ }
+ }
+ if (failed > 0) {
+ throw new RuntimeException("test FAILED");
+ }
+ log("test PASSED.");
+ }
+
+
+ static void preparePCMBuffer() {
+ pcmBuffer = new byte[STREAM_LENGTH * (int)pcmFormat.getSampleRate()
+ * (pcmFormat.getSampleSizeInBits() / 8) * pcmFormat.getChannels()];
+ for (int i=0; i<pcmBuffer.length; i++) {
+ pcmBuffer[i] = (byte)(Math.random() * 256.0 - 128.0);
+ }
+ }
+
+ static AudioInputStream createPCMStream() {
+ InputStream byteStream = new ByteArrayInputStream(pcmBuffer);
+ return new AudioInputStream(byteStream, pcmFormat, AudioSystem.NOT_SPECIFIED);
+ }
+
+ static class ConversionThread extends Thread {
+ public final int num;
+ public byte[] resultArray = null;
+ public ConversionThread(int num) {
+ this.num = num;
+ }
+ @Override
+ public void run() {
+ log("ConversionThread[" + num + "] started.");
+ try {
+ InputStream inStream = new ByteArrayInputStream(pcmBuffer);
+
+ AudioInputStream pcmStream = new AudioInputStream(
+ inStream, pcmFormat, AudioSystem.NOT_SPECIFIED);
+ AudioInputStream alawStream = AudioSystem.getAudioInputStream(alawFormat, pcmStream);
+
+ ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+ int read = 0;
+ byte[] data = new byte[4096];
+ while((read = alawStream.read(data)) != -1) {
+ outStream.write(data, 0, read);
+ }
+ alawStream.close();
+ resultArray = outStream.toByteArray();
+ } catch (Exception ex) {
+ log("ConversionThread[" + num + "] exception:");
+ log(ex);
+ }
+ log("ConversionThread[" + num + "] completed.");
+ }
+ }
+
+ static void log(String s) {
+ System.out.println(s);
+ }
+
+ static void log(Exception ex) {
+ ex.printStackTrace(System.out);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/sound/sampled/FileWriter/WriterCloseInput.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,127 @@
+/**
+ * @test
+ * @bug 7013521
+ * @summary AIFF/AU/WAVE writers close input audio stream
+ * @author Alex Menkov
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import javax.sound.sampled.AudioFileFormat;
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+
+
+public class WriterCloseInput {
+
+ final static AudioFormat audioFormat = new AudioFormat(44100f, 16, 2, true, true);
+ //final static AudioFormat audioFormat = new AudioFormat(AudioFormat.Encoding.ULAW, 44100f, 8, 2, 2, 44100f, true);
+ final static int frameLength = 44100 * 2; // 2 seconds
+ final static byte[] dataBuffer
+ = new byte[frameLength * (audioFormat.getSampleSizeInBits()/8)
+ * audioFormat.getChannels()];
+
+ static int testTotal = 0;
+ static int testFailed = 0;
+
+ public static void main(String[] args) throws Exception {
+ test(AudioFileFormat.Type.AIFF);
+ test(AudioFileFormat.Type.AU);
+ test(AudioFileFormat.Type.WAVE);
+
+ if (testFailed == 0) {
+ out("All tests passed.");
+ } else {
+ out("" + testFailed + " of " + testTotal + " tests FAILED.");
+ System.out.flush();
+ throw new RuntimeException("Test FAILED.");
+ }
+ }
+
+ static void test(AudioFileFormat.Type fileType) {
+ test(fileType, frameLength);
+ test(fileType, AudioSystem.NOT_SPECIFIED);
+ }
+
+ static void test(AudioFileFormat.Type fileType, int length) {
+ test(fileType, length, false);
+ test(fileType, length, true);
+ }
+
+ static void test(AudioFileFormat.Type fileType, int length, boolean isFile) {
+ testTotal++;
+ out("Testing fileType: " + fileType
+ + ", frameLength: " + (length >= 0 ? length : "unspecified")
+ + ", output: " + (isFile ? "File" : "OutputStream"));
+ AudioInputStream inStream = new ThrowAfterCloseStream(
+ new ByteArrayInputStream(dataBuffer), audioFormat, length);
+
+ AudioSystem.isFileTypeSupported(fileType, inStream);
+
+ try {
+ if (isFile) {
+ File f = File.createTempFile("WriterCloseInput" + testTotal, "tmp");
+ AudioSystem.write(inStream, fileType, f);
+ f.delete();
+ } else {
+ OutputStream outStream = new NullOutputStream();
+ AudioSystem.write(inStream, fileType, outStream);
+ }
+ } catch (Exception ex) {
+ // this is not failure
+ out("SKIPPED (AudioSystem.write exception): " + ex.getMessage());
+ //out(ex);
+ inStream = null;
+ }
+
+ if (inStream != null) {
+ try {
+ // test if the stream is closed
+ inStream.available();
+ out("PASSED");
+ } catch (IOException ex) {
+ testFailed++;
+ out("FAILED: " + ex.getMessage());
+ //out(ex);
+ }
+ }
+ out("");
+ }
+
+ static class ThrowAfterCloseStream extends AudioInputStream {
+ private boolean closed = false;
+ public ThrowAfterCloseStream(InputStream in, AudioFormat format, long length) {
+ super(in, format, length);
+ }
+ @Override
+ public void close() {
+ closed = true;
+ }
+ @Override
+ public int available() throws IOException {
+ if (closed) {
+ throw new IOException("The stream has been closed");
+ }
+ return 1;
+ }
+ }
+
+ static class NullOutputStream extends OutputStream {
+ @Override
+ public void write(int b) throws IOException {
+ // nop
+ }
+ }
+
+ static void out(String s) {
+ System.out.println(s);
+ }
+
+ static void out(Exception ex) {
+ ex.printStackTrace(System.out);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/regtesthelpers/Util.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 javax.swing.*;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+/**
+ * <p>This class contains utilities useful for regression testing.
+ * <p>When using jtreg you would include this class via something like:
+ * <pre>
+ *
+ * @library ../../regtesthelpers
+ * @build Util
+ * </pre>
+ */
+
+public class Util {
+ /**
+ * Convert a rectangle from coordinate system of Component c to
+ * screen coordinate system.
+ *
+ * @param r a non-null Rectangle
+ * @param c a Component whose coordinate system is used for conversion
+ */
+ public static void convertRectToScreen(Rectangle r, Component c) {
+ Point p = new Point(r.x, r.y);
+ SwingUtilities.convertPointToScreen(p, c);
+ r.x = p.x;
+ r.y = p.y;
+ }
+
+ /**
+ * Compares two bufferedImages pixel-by-pixel.
+ * return true if all pixels in the two areas are identical
+ */
+ public static boolean compareBufferedImages(BufferedImage bufferedImage0, BufferedImage bufferedImage1) {
+ int width = bufferedImage0.getWidth();
+ int height = bufferedImage0.getHeight();
+
+ if (width != bufferedImage1.getWidth() || height != bufferedImage1.getHeight()) {
+ return false;
+ }
+
+ for (int y = 0; y < height; y++) {
+ for (int x = 0; x < width; x++) {
+ if (bufferedImage0.getRGB(x, y) != bufferedImage1.getRGB(x, y)) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/text/CSSBorder/6796710/bug6796710.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6796710
+ * @summary Html content in JEditorPane is overlapping on swing components while resizing the application.
+ * @library ../../../regtesthelpers
+ * @build Util
+ * @author Pavel Porvatov
+ @run main bug6796710
+ */
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+public class bug6796710 {
+ // The page is inlined because we want to be sure that the JEditorPane filled synchronously
+ public static final String TEXT = "<html>" +
+ "<body>" +
+ "<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\">" +
+ " <tbody>" +
+ " <tr>" +
+ " <td>Col1</td>" +
+ " <td>Col2</td>" +
+ " <td>Col3</td>" +
+ " </tr>" +
+ " <tr>" +
+ " <td>1. It's a regression from CR 4419748. The problem is in the CSSBorder#paintBorder, which ignores clip area while painting.</td>" +
+ " <td>2. It's a regression from CR 4419748. The problem is in the CSSBorder#paintBorder, which ignores clip area while painting.</td>" +
+ " <td>3. It's a regression from CR 4419748. The problem is in the CSSBorder#paintBorder, which ignores clip area while painting.</td>" +
+ " </tr>" +
+ " </tbody>" +
+ "</table>" +
+ "</body>" +
+ "</html>";
+
+ private static Robot robot;
+
+ private static JFrame frame;
+
+ private static JPanel pnBottom;
+
+ public static void main(String[] args) throws Exception {
+ robot = new Robot();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ frame = new JFrame();
+
+ pnBottom = new JPanel();
+ pnBottom.add(new JLabel("Some label"));
+ pnBottom.add(new JButton("A button"));
+
+ JEditorPane editorPane = new JEditorPane();
+
+ editorPane.setContentType("text/html");
+ editorPane.setText(TEXT);
+ editorPane.setEditable(false);
+
+ JPanel pnContent = new JPanel(new BorderLayout());
+
+ pnContent.add(new JScrollPane(editorPane), BorderLayout.CENTER);
+ pnContent.add(pnBottom, BorderLayout.SOUTH);
+
+ frame.setContentPane(pnContent);
+ frame.setSize(400, 600);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setVisible(true);
+ }
+ });
+
+ robot.waitForIdle();
+
+ BufferedImage bufferedImage = getPnBottomImage();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ frame.setSize(400, 150);
+ }
+ });
+
+ robot.waitForIdle();
+
+ if (!Util.compareBufferedImages(bufferedImage, getPnBottomImage())) {
+ throw new RuntimeException("The test failed");
+ }
+
+ System.out.println("The test bug6796710 passed.");
+ }
+
+ private static BufferedImage getPnBottomImage() {
+ Rectangle rect = pnBottom.getBounds();
+
+ Util.convertRectToScreen(rect, pnBottom.getParent());
+
+ return robot.createScreenCapture(rect);
+ }
+}
--- a/jdk/test/sun/misc/BootClassLoaderHook/TestHook.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
- * 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.File;
-import java.util.TreeSet;
-import java.util.Set;
-import java.net.URLStreamHandlerFactory;
-import sun.misc.BootClassLoaderHook;
-import sun.misc.URLClassPath;
-
-
-/* @test
- * @bug 6888802
- * @summary Sanity test of BootClassLoaderHook interface
- *
- * @build TestHook
- * @run main TestHook
- */
-
-public class TestHook extends BootClassLoaderHook {
-
- private static final TestHook hook = new TestHook();
- private static Set<String> names = new TreeSet<String>();
- private static final String LOGRECORD_CLASS =
- "java.util.logging.LogRecord";
- private static final String NONEXIST_RESOURCE =
- "non.exist.resource";
- private static final String LIBHELLO = "hello";
-
- public static void main(String[] args) throws Exception {
- BootClassLoaderHook.setHook(hook);
- if (BootClassLoaderHook.getHook() == null) {
- throw new RuntimeException("Null boot classloader hook ");
- }
-
- testHook();
-
- if (!names.contains(LOGRECORD_CLASS)) {
- throw new RuntimeException("loadBootstrapClass for " + LOGRECORD_CLASS + " not called");
- }
-
- if (!names.contains(NONEXIST_RESOURCE)) {
- throw new RuntimeException("getBootstrapResource for " + NONEXIST_RESOURCE + " not called");
- }
- if (!names.contains(LIBHELLO)) {
- throw new RuntimeException("loadLibrary for " + LIBHELLO + " not called");
- }
-
- Set<String> copy = new TreeSet<String>();
- copy.addAll(names);
- for (String s : copy) {
- System.out.println(" Loaded " + s);
- }
- }
-
- private static void testHook() throws Exception {
- Class.forName(LOGRECORD_CLASS);
- ClassLoader.getSystemResource(NONEXIST_RESOURCE);
- try {
- System.loadLibrary(LIBHELLO);
- } catch (UnsatisfiedLinkError e) {
- }
- }
-
- public String loadBootstrapClass(String className) {
- names.add(className);
- return null;
- }
-
- public String getBootstrapResource(String resourceName) {
- names.add(resourceName);
- return null;
- }
-
- public boolean loadLibrary(String libname) {
- names.add(libname);
- return false;
- }
-
- public URLClassPath getBootstrapClassPath(URLClassPath bcp,
- URLStreamHandlerFactory factory) {
- return bcp;
- }
-
- public boolean isCurrentThreadPrefetching() {
- return false;
- }
-
- public boolean prefetchFile(String name) {
- return false;
- }
-}
--- a/jdk/test/sun/security/pkcs11/Cipher/TestRSACipher.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/sun/security/pkcs11/Cipher/TestRSACipher.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/**
* @test
- * @bug 4898468
+ * @bug 4898468 6994008
* @summary basic test for RSA cipher
* @author Andreas Sterbenz
* @library ..
@@ -38,9 +38,12 @@
public class TestRSACipher extends PKCS11Test {
+ private static final String[] RSA_ALGOS =
+ { "RSA/ECB/PKCS1Padding", "RSA" };
+
public void main(Provider p) throws Exception {
try {
- Cipher.getInstance("RSA/ECB/PKCS1Padding", p);
+ Cipher.getInstance(RSA_ALGOS[0], p);
} catch (GeneralSecurityException e) {
System.out.println("Not supported by provider, skipping");
return;
@@ -55,57 +58,58 @@
b = new byte[16];
random.nextBytes(b);
- Cipher c1 = Cipher.getInstance("RSA/ECB/PKCS1Padding", p);
- Cipher c2 = Cipher.getInstance("RSA/ECB/PKCS1Padding", "SunJCE");
+ for (String rsaAlgo: RSA_ALGOS) {
+ Cipher c1 = Cipher.getInstance(rsaAlgo, p);
+ Cipher c2 = Cipher.getInstance(rsaAlgo, "SunJCE");
- c1.init(Cipher.ENCRYPT_MODE, publicKey);
- e = c1.doFinal(b);
- c1.init(Cipher.DECRYPT_MODE, privateKey);
- d = c1.doFinal(e);
- match(b, d);
- c2.init(Cipher.DECRYPT_MODE, privateKey);
- d = c2.doFinal(e);
- match(b, d);
+ c1.init(Cipher.ENCRYPT_MODE, publicKey);
+ e = c1.doFinal(b);
+ c1.init(Cipher.DECRYPT_MODE, privateKey);
+ d = c1.doFinal(e);
+ match(b, d);
+ c2.init(Cipher.DECRYPT_MODE, privateKey);
+ d = c2.doFinal(e);
+ match(b, d);
- // invalid data
- c1.init(Cipher.DECRYPT_MODE, publicKey);
- try {
- d = c1.doFinal(e);
- throw new Exception("completed call");
- } catch (BadPaddingException ee) {
- ee.printStackTrace();
- }
+ // invalid data
+ c1.init(Cipher.DECRYPT_MODE, publicKey);
+ try {
+ d = c1.doFinal(e);
+ throw new Exception("completed call");
+ } catch (BadPaddingException ee) {
+ ee.printStackTrace();
+ }
- c1.init(Cipher.ENCRYPT_MODE, privateKey);
- e = c1.doFinal(b);
- c1.init(Cipher.DECRYPT_MODE, publicKey);
- d = c1.doFinal(e);
- match(b, d);
- c2.init(Cipher.DECRYPT_MODE, publicKey);
- d = c2.doFinal(e);
- match(b, d);
+ c1.init(Cipher.ENCRYPT_MODE, privateKey);
+ e = c1.doFinal(b);
+ c1.init(Cipher.DECRYPT_MODE, publicKey);
+ d = c1.doFinal(e);
+ match(b, d);
+ c2.init(Cipher.DECRYPT_MODE, publicKey);
+ d = c2.doFinal(e);
+ match(b, d);
- // reinit tests
- c1.init(Cipher.ENCRYPT_MODE, privateKey);
- c1.init(Cipher.ENCRYPT_MODE, privateKey);
- e = c1.doFinal(b);
- e = c1.doFinal(b);
- c1.update(b);
- c1.update(b);
- c1.init(Cipher.ENCRYPT_MODE, privateKey);
- e = c1.doFinal();
- e = c1.doFinal();
- c1.update(b);
- e = c1.doFinal();
+ // reinit tests
+ c1.init(Cipher.ENCRYPT_MODE, privateKey);
+ c1.init(Cipher.ENCRYPT_MODE, privateKey);
+ e = c1.doFinal(b);
+ e = c1.doFinal(b);
+ c1.update(b);
+ c1.update(b);
+ c1.init(Cipher.ENCRYPT_MODE, privateKey);
+ e = c1.doFinal();
+ e = c1.doFinal();
+ c1.update(b);
+ e = c1.doFinal();
- c1.update(new byte[256]);
- try {
- e = c1.doFinal();
- throw new Exception("completed call");
- } catch (IllegalBlockSizeException ee) {
- System.out.println(ee);
+ c1.update(new byte[256]);
+ try {
+ e = c1.doFinal();
+ throw new Exception("completed call");
+ } catch (IllegalBlockSizeException ee) {
+ System.out.println(ee);
+ }
}
-
}
private static void match(byte[] b1, byte[] b2) throws Exception {
--- a/jdk/test/sun/security/pkcs11/Cipher/TestRSACipherWrap.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/sun/security/pkcs11/Cipher/TestRSACipherWrap.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/**
* @test
- * @bug 6572331
+ * @bug 6572331 6994008
* @summary basic test for RSA cipher key wrapping functionality
* @author Valerie Peng
* @library ..
@@ -38,47 +38,48 @@
public class TestRSACipherWrap extends PKCS11Test {
- private static final String RSA_ALGO = "RSA/ECB/PKCS1Padding";
+ private static final String[] RSA_ALGOS =
+ { "RSA/ECB/PKCS1Padding", "RSA" };
public void main(Provider p) throws Exception {
try {
- Cipher.getInstance(RSA_ALGO, p);
+ Cipher.getInstance(RSA_ALGOS[0], p);
} catch (GeneralSecurityException e) {
- System.out.println("Not supported by provider, skipping");
+ System.out.println(RSA_ALGOS[0] + " unsupported, skipping");
return;
}
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", p);
kpg.initialize(1024);
KeyPair kp = kpg.generateKeyPair();
- PublicKey publicKey = kp.getPublic();
- PrivateKey privateKey = kp.getPrivate();
- Cipher cipherPKCS11 = Cipher.getInstance(RSA_ALGO, p);
- Cipher cipherJce = Cipher.getInstance(RSA_ALGO, "SunJCE");
+ for (String rsaAlgo: RSA_ALGOS) {
+ Cipher cipherPKCS11 = Cipher.getInstance(rsaAlgo, p);
+ Cipher cipherJce = Cipher.getInstance(rsaAlgo, "SunJCE");
- String algos[] = {"AES", "RC2", "Blowfish"};
- int keySizes[] = {128, 256};
+ String algos[] = {"AES", "RC2", "Blowfish"};
+ int keySizes[] = {128, 256};
- for (int j = 0; j < algos.length; j++) {
- String algorithm = algos[j];
- KeyGenerator keygen =
+ for (int j = 0; j < algos.length; j++) {
+ String algorithm = algos[j];
+ KeyGenerator keygen =
KeyGenerator.getInstance(algorithm);
- for (int i = 0; i < keySizes.length; i++) {
- SecretKey secretKey = null;
- System.out.print("Generate " + keySizes[i] + "-bit " +
+ for (int i = 0; i < keySizes.length; i++) {
+ SecretKey secretKey = null;
+ System.out.print("Generate " + keySizes[i] + "-bit " +
algorithm + " key using ");
- try {
- keygen.init(keySizes[i]);
- secretKey = keygen.generateKey();
- System.out.println(keygen.getProvider().getName());
- } catch (InvalidParameterException ipe) {
- secretKey = new SecretKeySpec(new byte[32], algorithm);
- System.out.println("SecretKeySpec class");
+ try {
+ keygen.init(keySizes[i]);
+ secretKey = keygen.generateKey();
+ System.out.println(keygen.getProvider().getName());
+ } catch (InvalidParameterException ipe) {
+ secretKey = new SecretKeySpec(new byte[32], algorithm);
+ System.out.println("SecretKeySpec class");
+ }
+ test(kp, secretKey, cipherPKCS11, cipherJce);
+ test(kp, secretKey, cipherPKCS11, cipherPKCS11);
+ test(kp, secretKey, cipherJce, cipherPKCS11);
}
- test(kp, secretKey, cipherPKCS11, cipherJce);
- test(kp, secretKey, cipherPKCS11, cipherPKCS11);
- test(kp, secretKey, cipherJce, cipherPKCS11);
}
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/pkcs11/Cipher/TestRawRSACipher.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6994008
+ * @summary basic test for RSA/ECB/NoPadding cipher
+ * @author Valerie Peng
+ * @library ..
+ */
+
+import javax.crypto.*;
+import java.io.*;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.*;
+import java.util.*;
+
+public class TestRawRSACipher extends PKCS11Test {
+
+ public void main(Provider p) throws Exception {
+ try {
+ Cipher.getInstance("RSA/ECB/NoPadding", p);
+ } catch (GeneralSecurityException e) {
+ System.out.println("Not supported by provider, skipping");
+ return;
+ }
+
+ final int KEY_LEN = 1024;
+ KeyPairGenerator kpGen = KeyPairGenerator.getInstance("RSA", p);
+ kpGen.initialize(KEY_LEN);
+ KeyPair kp = kpGen.generateKeyPair();
+ Random random = new Random();
+ byte[] plainText, cipherText, recoveredText;
+ plainText = new byte[KEY_LEN/8];
+ random.nextBytes(plainText);
+ plainText[0] = 0; // to ensure that it's less than modulus
+
+ Cipher c1 = Cipher.getInstance("RSA/ECB/NoPadding", p);
+ Cipher c2 = Cipher.getInstance("RSA/ECB/NoPadding", "SunJCE");
+
+ c1.init(Cipher.ENCRYPT_MODE, kp.getPublic());
+ c2.init(Cipher.DECRYPT_MODE, kp.getPrivate());
+
+ cipherText = c1.doFinal(plainText);
+ recoveredText = c2.doFinal(cipherText);
+ if (!Arrays.equals(plainText, recoveredText)) {
+ throw new RuntimeException("E/D Test against SunJCE Failed!");
+ }
+
+ c2.init(Cipher.ENCRYPT_MODE, kp.getPublic());
+ c1.init(Cipher.DECRYPT_MODE, kp.getPrivate());
+ cipherText = c2.doFinal(plainText);
+ recoveredText = c1.doFinal(cipherText);
+ if (!Arrays.equals(plainText, recoveredText)) {
+ throw new RuntimeException("D/E Test against SunJCE Failed!");
+ }
+
+ System.out.println("Test Passed");
+ }
+
+ public static void main(String[] args) throws Exception {
+ main(new TestRawRSACipher());
+ }
+}
--- a/jdk/test/sun/security/pkcs11/Cipher/TestSymmCiphers.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/sun/security/pkcs11/Cipher/TestSymmCiphers.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/**
* @test %I% %E%
- * @bug 4898461
+ * @bug 4898461 6604496
* @summary basic test for symmetric ciphers with padding
* @author Valerie Peng
* @library ..
@@ -70,9 +70,13 @@
new CI("DES/ECB/PKCS5Padding", "DES", 6400),
new CI("DESede/ECB/PKCS5Padding", "DESede", 400),
new CI("AES/ECB/PKCS5Padding", "AES", 64),
+
new CI("DES", "DES", 6400),
new CI("DESede", "DESede", 408),
- new CI("AES", "AES", 128)
+ new CI("AES", "AES", 128),
+
+ new CI("AES/CTR/NoPadding", "AES", 3200)
+
};
private static StringBuffer debugBuf = new StringBuffer();
--- a/jdk/test/sun/security/pkcs11/Cipher/TestSymmCiphersNoPad.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/sun/security/pkcs11/Cipher/TestSymmCiphersNoPad.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/**
* @test
- * @bug 4898484
+ * @bug 4898484 6604496
* @summary basic test for symmetric ciphers with no padding
* @author Valerie Peng
* @library ..
@@ -59,7 +59,8 @@
new CI("DES/CBC/NoPadding", "DES", 400),
new CI("DESede/CBC/NoPadding", "DESede", 160),
new CI("AES/CBC/NoPadding", "AES", 4800),
- new CI("Blowfish/CBC/NoPadding", "Blowfish", 24)
+ new CI("Blowfish/CBC/NoPadding", "Blowfish", 24),
+ new CI("AES/CTR/NoPadding", "AES", 1600)
};
private static StringBuffer debugBuf;
--- a/jdk/test/sun/security/tools/jarsigner/crl.sh Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/sun/security/tools/jarsigner/crl.sh Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
# 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,9 +32,6 @@
fi
# set platform-dependent variables
-# PF: platform name, say, solaris-sparc
-
-PF=""
OS=`uname -s`
case "$OS" in
@@ -47,54 +44,28 @@
esac
KS=crl.jks
-JFILE=crl.jar
KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS"
-JAR=$TESTJAVA${FS}bin${FS}jar
-JARSIGNER=$TESTJAVA${FS}bin${FS}jarsigner
-rm $KS $JFILE 2> /dev/null
+rm $KS 2> /dev/null
-# Generates some crl files, each containing two entries
+# Test keytool -gencrl
$KT -alias a -dname CN=a -keyalg rsa -genkey -validity 300
-$KT -alias a -gencrl -id 1:1 -id 2:2 -file crl1
-$KT -alias a -gencrl -id 3:3 -id 4:4 -file crl2
-$KT -alias b -dname CN=b -keyalg rsa -genkey -validity 300
-$KT -alias b -gencrl -id 5:1 -id 6:2 -file crl3
+$KT -alias a -gencrl -id 1:1 -id 2:2 -file crl1 || exit 1
+$KT -alias a -gencrl -id 3:3 -id 4:4 -file crl2 || exit 2
+$KT -alias a -gencrl -id 5:1 -id 6:2 -file crl3 || exit 4
-cat > ToURI.java <<EOF
-class ToURI {
- public static void main(String[] args) throws Exception {
- System.out.println(new java.io.File("crl1").toURI());
- }
-}
-EOF
-$TESTJAVA${FS}bin${FS}javac ToURI.java
-$TESTJAVA${FS}bin${FS}java ToURI > uri
-$KT -alias c -dname CN=c -keyalg rsa -genkey -validity 300 \
- -ext crl=uri:`cat uri`
-
-echo A > A
+# Test keytool -printcrl
-# Test -crl:auto, cRLDistributionPoints is a local file
+$KT -printcrl -file crl1 || exit 5
+$KT -printcrl -file crl2 || exit 6
+$KT -printcrl -file crl3 || exit 7
-$JAR cvf $JFILE A
-$JARSIGNER -keystore $KS -storepass changeit $JFILE c \
- -crl:auto || exit 1
-$JARSIGNER -keystore $KS -verify -debug -strict $JFILE || exit 6
-$KT -printcert -jarfile $JFILE | grep CRLs || exit 7
-
-# Test -crl <file>
-$JAR cvf $JFILE A
-$JARSIGNER -keystore $KS -storepass changeit $JFILE a \
- -crl crl1 -crl crl2 || exit 2
-$JARSIGNER -keystore $KS -storepass changeit $JFILE b \
- -crl crl3 -crl crl2 || exit 3
-$JARSIGNER -keystore $KS -verify -debug -strict $JFILE || exit 3
-$KT -printcert -jarfile $JFILE | grep CRLs || exit 4
-CRLCOUNT=`$KT -printcert -jarfile $JFILE | grep SerialNumber | wc -l`
-if [ $CRLCOUNT != 8 ]; then exit 5; fi
+# Test keytool -ext crl
+
+$KT -alias b -dname CN=c -keyalg rsa -genkey -validity 300 \
+ -ext crl=uri:http://www.example.com/crl || exit 10
exit 0
--- a/jdk/test/sun/security/tools/keytool/NewSize7.java Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/sun/security/tools/keytool/NewSize7.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
* 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,6 +29,8 @@
import java.io.File;
import java.io.FileInputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.security.KeyStore;
import java.security.cert.X509Certificate;
import java.security.interfaces.RSAPublicKey;
@@ -42,8 +44,10 @@
" -alias a -dname cn=c -storepass changeit" +
" -keypass changeit -keyalg rsa").split(" "));
KeyStore ks = KeyStore.getInstance("JKS");
- ks.load(new FileInputStream(FILE), null);
- new File(FILE).delete();
+ try (FileInputStream fin = new FileInputStream(FILE)) {
+ ks.load(fin, null);
+ }
+ Files.delete(Paths.get(FILE));
RSAPublicKey r = (RSAPublicKey)ks.getCertificate("a").getPublicKey();
if (r.getModulus().bitLength() != 2048) {
throw new Exception("Bad keysize");
--- a/jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh Thu Mar 10 14:56:11 2011 -0500
+++ b/jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh Wed Mar 16 10:47:45 2011 -0400
@@ -24,7 +24,7 @@
#
# @test
-# @bug 4630463 4630971 4636448 4701617 4721296 4710890 6247817
+# @bug 4630463 4630971 4636448 4701617 4721296 4710890 6247817 7021987
# @summary Tests miscellaneous native2ascii bugfixes and regressions
@@ -100,6 +100,15 @@
$N2A -reverse -encoding MS932 $TESTSRC/A2N_4701617 x.out
check 4701617 $TESTSRC/A2N_4701617.expected x.out
+# Check that the inputfile appears in the error message when not found
+
+badin="DoesNotExist"
+$N2A $badin x.out | grep "$badin" > /dev/null
+if [ $? != 0 ]; then
+ echo "\"$badin\" expected to appear in error message"
+ exit 1
+fi
+
# for win32 only ensure when output file pre-exists that
# native2ascii tool will simply overwrite with the expected
# output file (fixed bugID 4710890)
--- a/langtools/.hgtags Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/.hgtags Wed Mar 16 10:47:45 2011 -0400
@@ -107,3 +107,4 @@
7a98db8cbfce77a619057aa4fdde69d2a06d4101 jdk7-b130
67221b8643b478c4fceacc89240db876455aae76 jdk7-b131
e3d011d59a33acef79eff7523bef069557e91002 jdk7-b132
+e77e98f936e83d94c9b56cc7af218dc822a06122 jdk7-b133
--- a/langtools/src/share/classes/com/sun/tools/apt/main/AptJavaCompiler.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/apt/main/AptJavaCompiler.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -280,7 +280,7 @@
}
if (verbose)
- printVerbose("total", Long.toString(System.currentTimeMillis() - msec));
+ log.printVerbose("total", Long.toString(System.currentTimeMillis() - msec));
chk.reportDeferredDiagnostics();
--- a/langtools/src/share/classes/com/sun/tools/apt/util/Bark.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/apt/util/Bark.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
* 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,15 +48,15 @@
* Preregisters factories to create and use a Bark object for use as
* both a Log and a Bark.
*/
- public static void preRegister(final Context context) {
+ public static void preRegister(Context context) {
context.put(barkKey, new Context.Factory<Bark>() {
- public Bark make() {
- return new Bark(context);
+ public Bark make(Context c) {
+ return new Bark(c);
}
});
context.put(Log.logKey, new Context.Factory<Log>() {
- public Log make() {
- return Bark.instance(context);
+ public Log make(Context c) {
+ return Bark.instance(c);
}
});
}
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -156,7 +156,7 @@
if (index < 0) {
return htmlstr;
}
- StringBuffer buf = new StringBuffer();
+ StringBuilder buf = new StringBuilder();
int previndex = 0;
while (true) {
// Search for lowercase version of {@docRoot}
@@ -2279,7 +2279,7 @@
*/
public String commentTagsToString(Tag holderTag, Doc doc, Tag[] tags,
boolean isFirstSentence) {
- StringBuffer result = new StringBuffer();
+ StringBuilder result = new StringBuilder();
// Array of all possible inline tags for this javadoc run
configuration.tagletManager.checkTags(doc, tags, true);
for (int i = 0; i < tags.length; i++) {
@@ -2315,7 +2315,7 @@
StringTokenizer lines = new StringTokenizer(text, "\r\n", true);
StringBuffer textBuff = new StringBuffer();
while (lines.hasMoreTokens()) {
- StringBuffer line = new StringBuffer(lines.nextToken());
+ StringBuilder line = new StringBuilder(lines.nextToken());
Util.replaceTabs(configuration.sourcetab, line);
textBuff.append(line.toString());
}
@@ -2473,7 +2473,7 @@
return text;
}
int endindex = startindex + tobe.length();
- StringBuffer replaced = new StringBuffer();
+ StringBuilder replaced = new StringBuilder();
if (startindex > 0) {
replaced.append(text.substring(0, startindex));
}
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -30,7 +30,6 @@
import com.sun.javadoc.*;
import com.sun.tools.doclets.internal.toolkit.*;
import com.sun.tools.doclets.internal.toolkit.taglets.*;
-import com.sun.tools.doclets.internal.toolkit.util.*;
import com.sun.tools.doclets.formats.html.markup.*;
/**
@@ -53,7 +52,7 @@
}
public List<FieldDoc> members(ClassDoc cd) {
- return Util.asList(cd.serializableFields());
+ return Arrays.asList(cd.serializableFields());
}
protected void printTypeLinkNoDimension(Type type) {
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -266,7 +266,7 @@
private static void addLine(Content pre, String line, int tabLength,
int currentLineNo) {
if (line != null) {
- StringBuffer lineBuffer = new StringBuffer(Util.escapeHtmlChars(line));
+ StringBuilder lineBuffer = new StringBuilder(Util.escapeHtmlChars(line));
Util.replaceTabs(tabLength, lineBuffer);
pre.addContent(new RawHtml(lineBuffer.toString()));
Content anchor = HtmlTree.A_NAME("line." + Integer.toString(currentLineNo));
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties Wed Mar 16 10:47:45 2011 -0400
@@ -11,15 +11,25 @@
doclet.Interface_Hierarchy=Interface Hierarchy
doclet.Enum_Hierarchy=Enum Hierarchy
doclet.Annotation_Type_Hierarchy=Annotation Type Hierarchy
+# The following ALL CAPS words should be translated. It is used as "Previous" link on javadoc.
doclet.Prev=PREV
+# The following ALL CAPS words should be translated. It is used as "Next" link on javadoc.
doclet.Next=NEXT
+# The following ALL CAPS words should be translated. It is used as "Previous Class" link on javadoc.
doclet.Prev_Class=PREV CLASS
+# The following ALL CAPS words should be translated. It is used as "Next Class" link on javadoc.
doclet.Next_Class=NEXT CLASS
+# The following ALL CAPS words should be translated. It is used as "Previous Package" link on javadoc.
doclet.Prev_Package=PREV PACKAGE
+# The following ALL CAPS words should be translated. It is used as "Next Package" link on javadoc.
doclet.Next_Package=NEXT PACKAGE
+# The following ALL CAPS words should be translated. It is used as "Previous Letter" link on javadoc alphabetical index.
doclet.Prev_Letter=PREV LETTER
+# The following ALL CAPS words should be translated. It is used as "Next Letter" link on javadoc alphabetical index.
doclet.Next_Letter=NEXT LETTER
+# The following ALL CAPS words should be translated. It is used as "Show List" link on javadoc.
doclet.Show_Lists=SHOW LISTS
+# The following ALL CAPS words should be translated. It is used as "Hide List" link on javadoc.
doclet.Hide_Lists=HIDE LISTS
doclet.Href_Class_Title=class in {0}
doclet.Href_Interface_Title=interface in {0}
@@ -27,16 +37,27 @@
doclet.Href_Enum_Title=enum in {0}
doclet.Href_Type_Param_Title=type parameter in {0}
doclet.Href_Class_Or_Interface_Title=class or interface in {0}
+# The following ALL CAPS words should be translated. It's used as SUMMARY: NESTED | FIELD | CONSTR | METHOD, meaning Nested Class Summary, Field Summary, Constructor Summary, or Method Summary.
doclet.Summary=SUMMARY:
+# The following ALL CAPS words should be translated. It is used as DETAIL: FIELD | CONSTR | METHOD, meaning Field Detail, Constructor Detail, or Method Detail.
doclet.Detail=DETAIL:
+# The following ALL CAPS words should be translated. It is used as "Nested" (Nested Class Summary) link on javadoc.
doclet.navNested=NESTED
+# The following ALL CAPS words should be translated. It is used as "Optional" (Optional Element Summary) link on javadoc.
doclet.navAnnotationTypeOptionalMember=OPTIONAL
+# The following ALL CAPS words should be translated. It is used as "Required" (Required Element Summary) link on javadoc.
doclet.navAnnotationTypeRequiredMember=REQUIRED
+# The following ALL CAPS words should be translated. It is used as "Element" (Required Element Summary) link on javadoc.
doclet.navAnnotationTypeMember=ELEMENT
+# The following ALL CAPS words should be translated. It is used as "Field" (Field Detail) link on javadoc.
doclet.navField=FIELD
+# The following ALL CAPS words should be translated. It is used as "Enum Constants" link on javadoc.
doclet.navEnum=ENUM CONSTANTS
+# The following ALL CAPS words should be translated. It is used as "Constructor" (Constructor Detail) link on javadoc.
doclet.navConstructor=CONSTR
+# The following ALL CAPS words should be translated. It is used as "Method" (Method Detail) link on javadoc.
doclet.navMethod=METHOD
+# The following resource does not seem to be used anymore.
doclet.navFactoryMethod=FACTORY
doclet.Index=Index
doclet.Window_Single_Index=Index
@@ -45,8 +66,11 @@
doclet.Skip_navigation_links=Skip navigation links
doclet.New_Page=NewPage
doclet.None=None
+# The following resource does not seem to be used anymore
doclet.CLASSES=CLASSES
+# The following resource does not seem to be used anymore
doclet.MEMBERS=MEMBERS
+# The following resource does not seem to be used anymore
doclet.NONE=NONE
doclet.Factory_Method_Detail=Static Factory Method Detail
doclet.navDeprecated=Deprecated
@@ -112,7 +136,9 @@
doclet.Option=Option
doclet.Or=Or
doclet.Frames=Frames
+# The following ALL CAPS words should be translated. It is used as "FRAMES" javadoc navigation link to indicate displaying the page with HTML frames.
doclet.FRAMES=FRAMES
+# The following ALL CAPS words should be translated. It is used as "NO FRAMES" javadoc navigation link to indicate displaying the page without HTML frames.
doclet.NO_FRAMES=NO FRAMES
doclet.Package_Hierarchies=Package Hierarchies:
doclet.Hierarchy_For_Package=Hierarchy For Package {0}
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -375,8 +375,7 @@
*/
public void buildFieldSerializationOverview(ClassDoc classDoc, Content classContentTree) {
if (classDoc.definesSerializableFields()) {
- FieldDoc serialPersistentField =
- Util.asList(classDoc.serializableFields()).get(0);
+ FieldDoc serialPersistentField = classDoc.serializableFields()[0];
// Check to see if there are inline comments, tags or deprecation
// information to be printed.
if (fieldWriter.shouldPrintOverview(serialPersistentField)) {
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -382,7 +382,7 @@
out.close();
}
} catch (IOException ie) {
- ie.printStackTrace();
+ ie.printStackTrace(System.err);
throw new DocletAbortException();
}
}
@@ -399,12 +399,12 @@
String pkgPath = DirectoryManager.getDirectoryPath(pkgDoc);
String completePath = new SourcePath(configuration.sourcepath).
getDirectory(pkgPath) + DirectoryManager.URL_FILE_SEPARATOR;
- //Make sure that both paths are using the same seperators.
+ //Make sure that both paths are using the same separators.
completePath = Util.replaceText(completePath, File.separator,
DirectoryManager.URL_FILE_SEPARATOR);
pkgPath = Util.replaceText(pkgPath, File.separator,
DirectoryManager.URL_FILE_SEPARATOR);
- return completePath.substring(0, completePath.indexOf(pkgPath));
+ return completePath.substring(0, completePath.lastIndexOf(pkgPath));
} catch (Exception e){
return "";
}
@@ -536,15 +536,6 @@
findAllInterfaceTypes(results, (ClassDoc) type, true, configuration);
}
-
- public static <T extends ProgramElementDoc> List<T> asList(T[] members) {
- List<T> list = new ArrayList<T>();
- for (int i = 0; i < members.length; i++) {
- list.add(members[i]);
- }
- return list;
- }
-
/**
* Enclose in quotes, used for paths and filenames that contains spaces
*/
@@ -583,14 +574,7 @@
if (oldStr == null || newStr == null || oldStr.equals(newStr)) {
return originalStr;
}
- StringBuffer result = new StringBuffer(originalStr);
- int startIndex = 0;
- while ((startIndex = result.indexOf(oldStr, startIndex)) != -1) {
- result = result.replace(startIndex, startIndex + oldStr.length(),
- newStr);
- startIndex += newStr.length();
- }
- return result.toString();
+ return originalStr.replace(oldStr, newStr);
}
/**
@@ -833,19 +817,17 @@
* @param tabLength the length of each tab.
* @param s the String to scan.
*/
- public static void replaceTabs(int tabLength, StringBuffer s) {
- int index, col;
- StringBuffer whitespace;
- while ((index = s.indexOf("\t")) != -1) {
- whitespace = new StringBuffer();
- col = index;
- do {
- whitespace.append(" ");
- col++;
- } while ((col%tabLength) != 0);
- s.replace(index, index+1, whitespace.toString());
+ public static void replaceTabs(int tabLength, StringBuilder s) {
+ if (whitespace == null || whitespace.length() < tabLength)
+ whitespace = String.format("%" + tabLength + "s", " ");
+ int index = 0;
+ while ((index = s.indexOf("\t", index)) != -1) {
+ int spaceCount = tabLength - index % tabLength;
+ s.replace(index, index+1, whitespace.substring(0, spaceCount));
+ index += spaceCount;
}
}
+ private static String whitespace;
/**
* The documentation for values() and valueOf() in Enums are set by the
--- a/langtools/src/share/classes/com/sun/tools/javac/api/JavacTool.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/api/JavacTool.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -157,19 +157,19 @@
/**
* Register that a compilation is about to start.
*/
- void beginContext(final Context context) {
+ void beginContext(Context context) {
if (compilationInProgress)
throw new IllegalStateException("Compilation in progress");
compilationInProgress = true;
final JavaFileManager givenFileManager = context.get(JavaFileManager.class);
context.put(JavaFileManager.class, (JavaFileManager)null);
context.put(JavaFileManager.class, new Context.Factory<JavaFileManager>() {
- public JavaFileManager make() {
+ public JavaFileManager make(Context c) {
if (givenFileManager != null) {
- context.put(JavaFileManager.class, givenFileManager);
+ c.put(JavaFileManager.class, givenFileManager);
return givenFileManager;
} else {
- return new JavacFileManager(context, true, null);
+ return new JavacFileManager(c, true, null);
}
}
});
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Flags.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Flags.java Wed Mar 16 10:47:45 2011 -0400
@@ -43,7 +43,7 @@
private Flags() {} // uninstantiable
public static String toString(long flags) {
- StringBuffer buf = new StringBuffer();
+ StringBuilder buf = new StringBuilder();
String sep = "";
for (Flag s : asFlagSet(flags)) {
buf.append(sep);
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Kinds.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Kinds.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -163,6 +163,7 @@
case PARAMETER:
case LOCAL_VARIABLE:
case EXCEPTION_PARAMETER:
+ case RESOURCE_VARIABLE:
return KindName.VAR;
case CONSTRUCTOR:
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java Wed Mar 16 10:47:45 2011 -0400
@@ -831,6 +831,8 @@
ClassType t = (ClassType)type;
if (t.interfaces_field == null) // FIXME: shouldn't be null
t.interfaces_field = List.nil();
+ if (t.all_interfaces_field != null)
+ return Type.getModelTypes(t.all_interfaces_field);
return t.interfaces_field;
} else {
return List.nil();
@@ -846,7 +848,7 @@
// An interface has no superclass; its supertype is Object.
return t.isInterface()
? Type.noType
- : t.supertype_field;
+ : t.supertype_field.getModelType();
} else {
return Type.noType;
}
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Symtab.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Symtab.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,8 @@
package com.sun.tools.javac.code;
import java.util.*;
+import javax.lang.model.type.TypeVisitor;
+import javax.lang.model.element.ElementVisitor;
import com.sun.tools.javac.util.*;
import com.sun.tools.javac.util.List;
@@ -345,7 +347,12 @@
target = Target.instance(context);
// Create the unknown type
- unknownType = new Type(TypeTags.UNKNOWN, null);
+ unknownType = new Type(TypeTags.UNKNOWN, null) {
+ @Override
+ public <R, P> R accept(TypeVisitor<R, P> v, P p) {
+ return v.visitUnknown(this, p);
+ }
+ };
// create the basic builtin symbols
rootPackage = new PackageSymbol(names.empty, null);
@@ -355,13 +362,20 @@
return messages.getLocalizedString("compiler.misc.unnamed.package");
}
};
- noSymbol = new TypeSymbol(0, names.empty, Type.noType, rootPackage);
+ noSymbol = new TypeSymbol(0, names.empty, Type.noType, rootPackage) {
+ public <R, P> R accept(ElementVisitor<R, P> v, P p) {
+ return v.visitUnknown(this, p);
+ }
+ };
noSymbol.kind = Kinds.NIL;
// create the error symbols
errSymbol = new ClassSymbol(PUBLIC|STATIC|ACYCLIC, names.any, null, rootPackage);
+ errType = new ErrorType(errSymbol, Type.noType);
+
unknownSymbol = new ClassSymbol(PUBLIC|STATIC|ACYCLIC, names.fromString("<any?>"), null, rootPackage);
- errType = new ErrorType(errSymbol, Type.noType);
+ unknownSymbol.members_field = new Scope.ErrorScope(unknownSymbol);
+ unknownSymbol.type = unknownType;
// initialize builtin types
initType(byteType, "byte", "Byte");
@@ -382,9 +396,11 @@
// VGJ
boundClass = new ClassSymbol(PUBLIC|ACYCLIC, names.Bound, noSymbol);
+ boundClass.members_field = new Scope.ErrorScope(boundClass);
// the builtin class of all methods
methodClass = new ClassSymbol(PUBLIC|ACYCLIC, names.Method, noSymbol);
+ methodClass.members_field = new Scope.ErrorScope(boundClass);
// Create class to hold all predefined constants and operations.
predefClass = new ClassSymbol(PUBLIC|ACYCLIC, names.empty, rootPackage);
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Type.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Type.java Wed Mar 16 10:47:45 2011 -0400
@@ -93,6 +93,22 @@
return null;
}
+ /**
+ * Get the representation of this type used for modelling purposes.
+ * By default, this is itself. For ErrorType, a different value
+ * may be provided,
+ */
+ public Type getModelType() {
+ return this;
+ }
+
+ public static List<Type> getModelTypes(List<Type> ts) {
+ ListBuffer<Type> lb = new ListBuffer<Type>();
+ for (Type t: ts)
+ lb.append(t.getModelType());
+ return lb.toList();
+ }
+
public <R,S> R accept(Type.Visitor<R,S> v, S s) { return v.visitType(this, s); }
/** Define a type given its tag and type symbol
@@ -190,7 +206,7 @@
if (ts.isEmpty()) {
return "";
} else {
- StringBuffer buf = new StringBuffer();
+ StringBuilder buf = new StringBuilder();
buf.append(ts.head.toString());
for (List<Type> l = ts.tail; l.nonEmpty(); l = l.tail)
buf.append(",").append(l.head.toString());
@@ -464,7 +480,7 @@
boolean isPrintingBound = false;
public String toString() {
- StringBuffer s = new StringBuffer();
+ StringBuilder s = new StringBuilder();
s.append(kind.toString());
if (kind != UNBOUND)
s.append(type);
@@ -538,6 +554,10 @@
*/
public List<Type> interfaces_field;
+ /** All the interfaces of this class, including missing ones.
+ */
+ public List<Type> all_interfaces_field;
+
public ClassType(Type outer, List<Type> typarams, TypeSymbol tsym) {
super(CLASS, tsym);
this.outer_field = outer;
@@ -578,7 +598,7 @@
/** The Java source which this type represents.
*/
public String toString() {
- StringBuffer buf = new StringBuffer();
+ StringBuilder buf = new StringBuilder();
if (getEnclosingType().tag == CLASS && tsym.owner.kind == TYP) {
buf.append(getEnclosingType().toString());
buf.append(".");
@@ -596,7 +616,7 @@
//where
private String className(Symbol sym, boolean longform) {
if (sym.name.isEmpty() && (sym.flags() & COMPOUND) != 0) {
- StringBuffer s = new StringBuffer(supertype_field.toString());
+ StringBuilder s = new StringBuilder(supertype_field.toString());
for (List<Type> is=interfaces_field; is.nonEmpty(); is = is.tail) {
s.append("&");
s.append(is.head.toString());
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Wed Mar 16 10:47:45 2011 -0400
@@ -1992,7 +1992,11 @@
* @return true if t is a sub signature of s.
*/
public boolean isSubSignature(Type t, Type s) {
- return hasSameArgs(t, s) || hasSameArgs(t, erasure(s));
+ return isSubSignature(t, s, true);
+ }
+
+ public boolean isSubSignature(Type t, Type s, boolean strict) {
+ return hasSameArgs(t, s, strict) || hasSameArgs(t, erasure(s), strict);
}
/**
@@ -2129,10 +2133,24 @@
* where correspondence is by position in the type parameter list.
*/
public boolean hasSameArgs(Type t, Type s) {
+ return hasSameArgs(t, s, true);
+ }
+
+ public boolean hasSameArgs(Type t, Type s, boolean strict) {
+ return hasSameArgs(t, s, strict ? hasSameArgs_strict : hasSameArgs_nonstrict);
+ }
+
+ private boolean hasSameArgs(Type t, Type s, TypeRelation hasSameArgs) {
return hasSameArgs.visit(t, s);
}
// where
- private TypeRelation hasSameArgs = new TypeRelation() {
+ private class HasSameArgs extends TypeRelation {
+
+ boolean strict;
+
+ public HasSameArgs(boolean strict) {
+ this.strict = strict;
+ }
public Boolean visitType(Type t, Type s) {
throw new AssertionError();
@@ -2147,7 +2165,7 @@
@Override
public Boolean visitForAll(ForAll t, Type s) {
if (s.tag != FORALL)
- return false;
+ return strict ? false : visitMethodType(t.asMethodType(), s);
ForAll forAll = (ForAll)s;
return hasSameBounds(t, forAll)
@@ -2159,6 +2177,10 @@
return false;
}
};
+
+ TypeRelation hasSameArgs_strict = new HasSameArgs(true);
+ TypeRelation hasSameArgs_nonstrict = new HasSameArgs(false);
+
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="subst">
@@ -2534,7 +2556,7 @@
}
// where
private String typaramsString(List<Type> tvars) {
- StringBuffer s = new StringBuffer();
+ StringBuilder s = new StringBuilder();
s.append('<');
boolean first = true;
for (Type t : tvars) {
@@ -2545,7 +2567,7 @@
s.append('>');
return s.toString();
}
- private void appendTyparamString(TypeVar t, StringBuffer buf) {
+ private void appendTyparamString(TypeVar t, StringBuilder buf) {
buf.append(t);
if (t.bound == null ||
t.bound.tsym.getQualifiedName() == names.java_lang_Object)
@@ -2832,12 +2854,26 @@
while (ts.head.tag != CLASS && ts.head.tag != TYPEVAR)
ts = ts.tail;
Assert.check(!ts.isEmpty());
- List<Type> cl = closure(ts.head);
+ //step 1 - compute erased candidate set (EC)
+ List<Type> cl = erasedSupertypes(ts.head);
for (Type t : ts.tail) {
if (t.tag == CLASS || t.tag == TYPEVAR)
- cl = intersect(cl, closure(t));
+ cl = intersect(cl, erasedSupertypes(t));
}
- return compoundMin(cl);
+ //step 2 - compute minimal erased candidate set (MEC)
+ List<Type> mec = closureMin(cl);
+ //step 3 - for each element G in MEC, compute lci(Inv(G))
+ List<Type> candidates = List.nil();
+ for (Type erasedSupertype : mec) {
+ List<Type> lci = List.of(asSuper(ts.head, erasedSupertype.tsym));
+ for (Type t : ts) {
+ lci = intersect(lci, List.of(asSuper(t, erasedSupertype.tsym)));
+ }
+ candidates = candidates.appendList(lci);
+ }
+ //step 4 - let MEC be { G1, G2 ... Gn }, then we have that
+ //lub = lci(Inv(G1)) & lci(Inv(G2)) & ... & lci(Inv(Gn))
+ return compoundMin(candidates);
default:
// calculate lub(A, B[])
@@ -2851,6 +2887,18 @@
}
}
// where
+ List<Type> erasedSupertypes(Type t) {
+ ListBuffer<Type> buf = lb();
+ for (Type sup : closure(t)) {
+ if (sup.tag == TYPEVAR) {
+ buf.append(sup);
+ } else {
+ buf.append(erasure(sup));
+ }
+ }
+ return buf.toList();
+ }
+
private Type arraySuperType = null;
private Type arraySuperType() {
// initialized lazily to avoid problems during compiler startup
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java Wed Mar 16 10:47:45 2011 -0400
@@ -1425,7 +1425,7 @@
// qualifier omitted; check for existence
// of an appropriate implicit qualifier.
rs.resolveImplicitThis(tree.meth.pos(),
- localEnv, site);
+ localEnv, site, true);
}
} else if (tree.meth.getTag() == JCTree.SELECT) {
log.error(tree.meth.pos(), "illegal.qual.not.icls",
@@ -1581,15 +1581,7 @@
// symbol + type back into the attributed tree.
Type clazztype = attribType(clazz, env);
Pair<Scope,Scope> mapping = getSyntheticScopeMapping(clazztype, cdef != null);
- if (!TreeInfo.isDiamond(tree)) {
- clazztype = chk.checkClassType(
- tree.clazz.pos(), clazztype, true);
- } else if (!clazztype.isErroneous() &&
- !clazztype.tsym.type.isParameterized()) {
- log.error(tree.clazz.pos(),
- "cant.apply.diamond.1",
- clazztype, diags.fragment("diamond.non.generic", clazztype));
- }
+ clazztype = chk.checkDiamond(tree, clazztype);
chk.validate(clazz, localEnv);
if (tree.encl != null) {
// We have to work in this case to store
@@ -1614,10 +1606,12 @@
List<Type> argtypes = attribArgs(tree.args, localEnv);
List<Type> typeargtypes = attribTypes(tree.typeargs, localEnv);
- if (TreeInfo.isDiamond(tree) && clazztype.tsym.type.isParameterized()) {
+ if (TreeInfo.isDiamond(tree) && !clazztype.isErroneous()) {
clazztype = attribDiamond(localEnv, tree, clazztype, mapping, argtypes, typeargtypes);
clazz.type = clazztype;
} else if (allowDiamondFinder &&
+ tree.def == null &&
+ !clazztype.isErroneous() &&
clazztype.getTypeArguments().nonEmpty() &&
findDiamonds) {
boolean prevDeferDiags = log.deferDiagnostics;
@@ -1641,8 +1635,7 @@
if (inferred != null &&
!inferred.isErroneous() &&
inferred.tag == CLASS &&
- types.isAssignable(inferred, pt.tag == NONE ? clazztype : pt, Warner.noWarnings) &&
- chk.checkDiamond((ClassType)inferred).isEmpty()) {
+ types.isAssignable(inferred, pt.tag == NONE ? clazztype : pt, Warner.noWarnings)) {
String key = types.isSameType(clazztype, inferred) ?
"diamond.redundant.args" :
"diamond.redundant.args.1";
@@ -1857,34 +1850,9 @@
ex.diagnostic);
}
}
- clazztype = chk.checkClassType(tree.clazz.pos(),
+ return chk.checkClassType(tree.clazz.pos(),
clazztype,
true);
- if (clazztype.tag == CLASS) {
- List<Type> invalidDiamondArgs = chk.checkDiamond((ClassType)clazztype);
- if (!clazztype.isErroneous() && invalidDiamondArgs.nonEmpty()) {
- //one or more types inferred in the previous steps is either a
- //captured type or an intersection type --- we need to report an error.
- String subkey = invalidDiamondArgs.size() > 1 ?
- "diamond.invalid.args" :
- "diamond.invalid.arg";
- //The error message is of the kind:
- //
- //cannot infer type arguments for {clazztype}<>;
- //reason: {subkey}
- //
- //where subkey is a fragment of the kind:
- //
- //type argument(s) {invalidDiamondArgs} inferred for {clazztype}<> is not allowed in this context
- log.error(tree.clazz.pos(),
- "cant.apply.diamond.1",
- diags.fragment("diamond", clazztype.tsym),
- diags.fragment(subkey,
- invalidDiamondArgs,
- diags.fragment("diamond", clazztype.tsym)));
- }
- }
- return clazztype;
}
/** Creates a synthetic scope containing fake generic constructors.
@@ -2806,7 +2774,7 @@
sym.location());
owntype = new MethodType(owntype.getParameterTypes(),
types.erasure(owntype.getReturnType()),
- owntype.getThrownTypes(),
+ types.erasure(owntype.getThrownTypes()),
syms.methodClass);
}
if (useVarargs) {
@@ -2980,7 +2948,7 @@
// (see comment for TypeVar.bound).
// In this case, generate a class tree that represents the
// bound class, ...
- JCTree extending;
+ JCExpression extending;
List<JCExpression> implementing;
if ((bs.head.tsym.flags() & INTERFACE) == 0) {
extending = tree.bounds.head;
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Wed Mar 16 10:47:45 2011 -0400
@@ -664,40 +664,25 @@
return true;
}
- /** Check that the type inferred using the diamond operator does not contain
- * non-denotable types such as captured types or intersection types.
- * @param t the type inferred using the diamond operator
+ /** Check that usage of diamond operator is correct (i.e. diamond should not
+ * be used with non-generic classes or in anonymous class creation expressions)
*/
- List<Type> checkDiamond(ClassType t) {
- DiamondTypeChecker dtc = new DiamondTypeChecker();
- ListBuffer<Type> buf = ListBuffer.lb();
- for (Type arg : t.getTypeArguments()) {
- if (!dtc.visit(arg, null)) {
- buf.append(arg);
- }
- }
- return buf.toList();
- }
-
- static class DiamondTypeChecker extends Types.SimpleVisitor<Boolean, Void> {
- public Boolean visitType(Type t, Void s) {
- return true;
- }
- @Override
- public Boolean visitClassType(ClassType t, Void s) {
- if (t.isCompound()) {
- return false;
- }
- for (Type targ : t.getTypeArguments()) {
- if (!visit(targ, s)) {
- return false;
- }
- }
- return true;
- }
- @Override
- public Boolean visitCapturedType(CapturedType t, Void s) {
- return false;
+ Type checkDiamond(JCNewClass tree, Type t) {
+ if (!TreeInfo.isDiamond(tree) ||
+ t.isErroneous()) {
+ return checkClassType(tree.clazz.pos(), t, true);
+ } else if (tree.def != null) {
+ log.error(tree.clazz.pos(),
+ "cant.apply.diamond.1",
+ t, diags.fragment("diamond.and.anon.class", t));
+ return types.createErrorType(t);
+ } else if (!t.tsym.type.isParameterized()) {
+ log.error(tree.clazz.pos(),
+ "cant.apply.diamond.1",
+ t, diags.fragment("diamond.non.generic", t));
+ return types.createErrorType(t);
+ } else {
+ return t;
}
}
@@ -1679,7 +1664,8 @@
"(" + types.memberType(t2, s2).getParameterTypes() + ")");
return s2;
}
- } else if (checkNameClash((ClassSymbol)site.tsym, s1, s2)) {
+ } else if (checkNameClash((ClassSymbol)site.tsym, s1, s2) &&
+ !checkCommonOverriderIn(s1, s2, site)) {
log.error(pos,
"name.clash.same.erasure.no.override",
s1, s1.location(),
@@ -2113,7 +2099,7 @@
if (s1 == s2 || !sym.overrides(s2, site.tsym, types, false)) continue;
//if (i) the signature of 'sym' is not a subsignature of m1 (seen as
//a member of 'site') and (ii) m1 has the same erasure as m2, issue an error
- if (!types.isSubSignature(sym.type, types.memberType(site, s1)) &&
+ if (!types.isSubSignature(sym.type, types.memberType(site, s1), false) &&
types.hasSameArgs(s1.erasure(types), s2.erasure(types))) {
sym.flags_field |= CLASH;
String key = s2 == sym ?
@@ -2145,7 +2131,7 @@
for (Symbol s : types.membersClosure(site).getElementsByName(sym.name, cf)) {
//if (i) the signature of 'sym' is not a subsignature of m1 (seen as
//a member of 'site') and (ii) 'sym' has the same erasure as m1, issue an error
- if (!types.isSubSignature(sym.type, types.memberType(site, s)) &&
+ if (!types.isSubSignature(sym.type, types.memberType(site, s), false) &&
types.hasSameArgs(s.erasure(types), sym.erasure(types))) {
log.error(pos,
"name.clash.same.erasure.no.hide",
@@ -2666,7 +2652,7 @@
if ((sym.flags() & VARARGS) != (e.sym.flags() & VARARGS)) {
varargsDuplicateError(pos, sym, e.sym);
return true;
- } else if (sym.kind == MTH && !hasSameSignature(sym.type, e.sym.type)) {
+ } else if (sym.kind == MTH && !types.hasSameArgs(sym.type, e.sym.type, false)) {
duplicateErasureError(pos, sym, e.sym);
sym.flags_field |= CLASH;
return true;
@@ -2678,15 +2664,6 @@
}
return true;
}
- //where
- boolean hasSameSignature(Type mt1, Type mt2) {
- if (mt1.tag == FORALL && mt2.tag == FORALL) {
- ForAll fa1 = (ForAll)mt1;
- ForAll fa2 = (ForAll)mt2;
- mt2 = types.subst(fa2, fa2.tvars, fa1.tvars);
- }
- return types.hasSameArgs(mt1.asMethodType(), mt2.asMethodType());
- }
/** Report duplicate declaration error.
*/
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java Wed Mar 16 10:47:45 2011 -0400
@@ -272,7 +272,7 @@
/** The list of unreferenced automatic resources.
*/
- Map<VarSymbol, JCVariableDecl> unrefdResources;
+ Scope unrefdResources;
/** Set when processing a loop body the second time for DU analysis. */
boolean loopPassTwo = false;
@@ -804,14 +804,16 @@
ListBuffer<PendingExit> prevPendingExits = pendingExits;
boolean prevLoopPassTwo = loopPassTwo;
pendingExits = new ListBuffer<PendingExit>();
+ int prevErrors = log.nerrors;
do {
Bits uninitsEntry = uninits.dup();
+ uninitsEntry.excludeFrom(nextadr);
scanStat(tree.body);
alive |= resolveContinues(tree);
scanCond(tree.cond);
- if (log.nerrors != 0 ||
+ if (log.nerrors != prevErrors ||
loopPassTwo ||
- uninitsEntry.diffSet(uninitsWhenTrue).nextBit(firstadr)==-1)
+ uninitsEntry.dup().diffSet(uninitsWhenTrue).nextBit(firstadr)==-1)
break;
inits = initsWhenTrue;
uninits = uninitsEntry.andSet(uninitsWhenTrue);
@@ -831,8 +833,10 @@
Bits initsCond;
Bits uninitsCond;
pendingExits = new ListBuffer<PendingExit>();
+ int prevErrors = log.nerrors;
do {
Bits uninitsEntry = uninits.dup();
+ uninitsEntry.excludeFrom(nextadr);
scanCond(tree.cond);
initsCond = initsWhenFalse;
uninitsCond = uninitsWhenFalse;
@@ -841,9 +845,9 @@
alive = !tree.cond.type.isFalse();
scanStat(tree.body);
alive |= resolveContinues(tree);
- if (log.nerrors != 0 ||
+ if (log.nerrors != prevErrors ||
loopPassTwo ||
- uninitsEntry.diffSet(uninits).nextBit(firstadr) == -1)
+ uninitsEntry.dup().diffSet(uninits).nextBit(firstadr) == -1)
break;
uninits = uninitsEntry.andSet(uninits);
loopPassTwo = true;
@@ -864,8 +868,10 @@
Bits initsCond;
Bits uninitsCond;
pendingExits = new ListBuffer<PendingExit>();
+ int prevErrors = log.nerrors;
do {
Bits uninitsEntry = uninits.dup();
+ uninitsEntry.excludeFrom(nextadr);
if (tree.cond != null) {
scanCond(tree.cond);
initsCond = initsWhenFalse;
@@ -883,7 +889,7 @@
scanStat(tree.body);
alive |= resolveContinues(tree);
scan(tree.step);
- if (log.nerrors != 0 ||
+ if (log.nerrors != prevErrors ||
loopPassTwo ||
uninitsEntry.dup().diffSet(uninits).nextBit(firstadr) == -1)
break;
@@ -897,8 +903,6 @@
alive = resolveBreaks(tree, prevPendingExits) ||
tree.cond != null && !tree.cond.type.isTrue();
nextadr = nextadrPrev;
- inits.excludeFrom(nextadr);
- uninits.excludeFrom(nextadr);
}
public void visitForeachLoop(JCEnhancedForLoop tree) {
@@ -913,13 +917,15 @@
letInit(tree.pos(), tree.var.sym);
pendingExits = new ListBuffer<PendingExit>();
+ int prevErrors = log.nerrors;
do {
Bits uninitsEntry = uninits.dup();
+ uninitsEntry.excludeFrom(nextadr);
scanStat(tree.body);
alive |= resolveContinues(tree);
- if (log.nerrors != 0 ||
+ if (log.nerrors != prevErrors ||
loopPassTwo ||
- uninitsEntry.diffSet(uninits).nextBit(firstadr) == -1)
+ uninitsEntry.dup().diffSet(uninits).nextBit(firstadr) == -1)
break;
uninits = uninitsEntry.andSet(uninits);
loopPassTwo = true;
@@ -992,7 +998,6 @@
public void visitTry(JCTry tree) {
List<Type> caughtPrev = caught;
List<Type> thrownPrev = thrown;
- Map<VarSymbol, JCVariableDecl> unrefdResourcesPrev = unrefdResources;
thrown = List.nil();
for (List<JCCatch> l = tree.catchers; l.nonEmpty(); l = l.tail) {
List<JCExpression> subClauses = TreeInfo.isMultiCatch(l.head) ?
@@ -1002,17 +1007,18 @@
caught = chk.incl(ct.type, caught);
}
}
+ ListBuffer<JCVariableDecl> resourceVarDecls = ListBuffer.lb();
Bits uninitsTryPrev = uninitsTry;
ListBuffer<PendingExit> prevPendingExits = pendingExits;
pendingExits = new ListBuffer<PendingExit>();
Bits initsTry = inits.dup();
uninitsTry = uninits.dup();
- unrefdResources = new LinkedHashMap<VarSymbol, JCVariableDecl>();
for (JCTree resource : tree.resources) {
if (resource instanceof JCVariableDecl) {
JCVariableDecl vdecl = (JCVariableDecl) resource;
visitVarDef(vdecl);
- unrefdResources.put(vdecl.sym, vdecl);
+ unrefdResources.enter(vdecl.sym);
+ resourceVarDecls.append(vdecl);
} else if (resource instanceof JCExpression) {
scanExpr((JCExpression) resource);
} else {
@@ -1049,11 +1055,14 @@
Bits uninitsEnd = uninits;
int nextadrCatch = nextadr;
- if (!unrefdResources.isEmpty() &&
+ if (!resourceVarDecls.isEmpty() &&
lint.isEnabled(Lint.LintCategory.TRY)) {
- for (Map.Entry<VarSymbol, JCVariableDecl> e : unrefdResources.entrySet()) {
- log.warning(Lint.LintCategory.TRY, e.getValue().pos(),
- "try.resource.not.referenced", e.getKey());
+ for (JCVariableDecl resVar : resourceVarDecls) {
+ if (unrefdResources.includes(resVar.sym)) {
+ log.warning(Lint.LintCategory.TRY, resVar.pos(),
+ "try.resource.not.referenced", resVar.sym);
+ unrefdResources.remove(resVar.sym);
+ }
}
}
@@ -1143,7 +1152,6 @@
while (exits.nonEmpty()) pendingExits.append(exits.next());
}
uninitsTry.andSet(uninitsTryPrev).andSet(uninits);
- unrefdResources = unrefdResourcesPrev;
}
public void visitConditional(JCConditional tree) {
@@ -1369,9 +1377,7 @@
}
void referenced(Symbol sym) {
- if (unrefdResources != null && unrefdResources.containsKey(sym)) {
- unrefdResources.remove(sym);
- }
+ unrefdResources.remove(sym);
}
public void visitTypeCast(JCTypeCast tree) {
@@ -1430,6 +1436,7 @@
alive = true;
this.thrown = this.caught = null;
this.classDef = null;
+ unrefdResources = new Scope(env.enclClass.sym);
scan(tree);
} finally {
// note that recursive invocations of this method fail hard
@@ -1444,6 +1451,7 @@
this.make = null;
this.thrown = this.caught = null;
this.classDef = null;
+ unrefdResources = null;
}
}
}
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java Wed Mar 16 10:47:45 2011 -0400
@@ -465,10 +465,9 @@
// quantify result type with them
final List<Type> inferredTypes = insttypes.toList();
final List<Type> all_tvars = tvars; //this is the wrong tvars
- final MethodType mt2 = new MethodType(mt.argtypes, null, mt.thrown, syms.methodClass);
- mt2.restype = new ForAll(restvars.toList(), mt.restype) {
+ return new UninferredMethodType(mt, restvars.toList()) {
@Override
- public List<Type> getConstraints(TypeVar tv, ConstraintKind ck) {
+ List<Type> getConstraints(TypeVar tv, ConstraintKind ck) {
for (Type t : restundet.toList()) {
UndetVar uv = (UndetVar)t;
if (uv.qtype == tv) {
@@ -481,21 +480,17 @@
}
return List.nil();
}
-
@Override
- public Type inst(List<Type> inferred, Types types) throws NoInstanceException {
- List<Type> formals = types.subst(mt2.argtypes, tvars, inferred);
+ void check(List<Type> inferred, Types types) throws NoInstanceException {
// check that actuals conform to inferred formals
- checkArgumentsAcceptable(env, capturedArgs, formals, allowBoxing, useVarargs, warn);
+ checkArgumentsAcceptable(env, capturedArgs, getParameterTypes(), allowBoxing, useVarargs, warn);
// check that inferred bounds conform to their bounds
checkWithinBounds(all_tvars,
types.subst(inferredTypes, tvars, inferred), warn);
if (useVarargs) {
- chk.checkVararg(env.tree.pos(), formals, msym);
+ chk.checkVararg(env.tree.pos(), getParameterTypes(), msym);
}
- return super.inst(inferred, types);
}};
- return mt2;
}
else {
// check that actuals conform to inferred formals
@@ -506,6 +501,62 @@
}
//where
+ /**
+ * A delegated type representing a partially uninferred method type.
+ * The return type of a partially uninferred method type is a ForAll
+ * type - when the return type is instantiated (see Infer.instantiateExpr)
+ * the underlying method type is also updated.
+ */
+ static abstract class UninferredMethodType extends DelegatedType {
+
+ final List<Type> tvars;
+
+ public UninferredMethodType(MethodType mtype, List<Type> tvars) {
+ super(METHOD, new MethodType(mtype.argtypes, null, mtype.thrown, mtype.tsym));
+ this.tvars = tvars;
+ asMethodType().restype = new UninferredReturnType(tvars, mtype.restype);
+ }
+
+ @Override
+ public MethodType asMethodType() {
+ return qtype.asMethodType();
+ }
+
+ @Override
+ public Type map(Mapping f) {
+ return qtype.map(f);
+ }
+
+ void instantiateReturnType(Type restype, List<Type> inferred, Types types) throws NoInstanceException {
+ //update method type with newly inferred type-arguments
+ qtype = new MethodType(types.subst(getParameterTypes(), tvars, inferred),
+ restype,
+ types.subst(UninferredMethodType.this.getThrownTypes(), tvars, inferred),
+ UninferredMethodType.this.qtype.tsym);
+ check(inferred, types);
+ }
+
+ abstract void check(List<Type> inferred, Types types) throws NoInstanceException;
+
+ abstract List<Type> getConstraints(TypeVar tv, ConstraintKind ck);
+
+ class UninferredReturnType extends ForAll {
+ public UninferredReturnType(List<Type> tvars, Type restype) {
+ super(tvars, restype);
+ }
+ @Override
+ public Type inst(List<Type> actuals, Types types) {
+ Type newRestype = super.inst(actuals, types);
+ instantiateReturnType(newRestype, actuals, types);
+ return newRestype;
+ }
+ @Override
+ public List<Type> getConstraints(TypeVar tv, ConstraintKind ck) {
+ return UninferredMethodType.this.getConstraints(tv, ck);
+ }
+ }
+ }
+
private void checkArgumentsAcceptable(Env<AttrContext> env, List<Type> actuals, List<Type> formals,
boolean allowBoxing, boolean useVarargs, Warner warn) {
try {
@@ -518,25 +569,25 @@
}
}
- /** Try to instantiate argument type `that' to given type `to'.
- * If this fails, try to insantiate `that' to `to' where
- * every occurrence of a type variable in `tvars' is replaced
- * by an unknown type.
- */
- private Type instantiateArg(ForAll that,
- Type to,
- List<Type> tvars,
- Warner warn) throws InferenceException {
- List<Type> targs;
- try {
- return instantiateExpr(that, to, warn);
- } catch (NoInstanceException ex) {
- Type to1 = to;
- for (List<Type> l = tvars; l.nonEmpty(); l = l.tail)
- to1 = types.subst(to1, List.of(l.head), List.of(syms.unknownType));
- return instantiateExpr(that, to1, warn);
- }
+ /** Try to instantiate argument type `that' to given type `to'.
+ * If this fails, try to insantiate `that' to `to' where
+ * every occurrence of a type variable in `tvars' is replaced
+ * by an unknown type.
+ */
+ private Type instantiateArg(ForAll that,
+ Type to,
+ List<Type> tvars,
+ Warner warn) throws InferenceException {
+ List<Type> targs;
+ try {
+ return instantiateExpr(that, to, warn);
+ } catch (NoInstanceException ex) {
+ Type to1 = to;
+ for (List<Type> l = tvars; l.nonEmpty(); l = l.tail)
+ to1 = types.subst(to1, List.of(l.head), List.of(syms.unknownType));
+ return instantiateExpr(that, to1, warn);
}
+ }
/** check that type parameters are within their bounds.
*/
@@ -616,4 +667,4 @@
return t;
}
};
-}
+ }
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Wed Mar 16 10:47:45 2011 -0400
@@ -2817,8 +2817,8 @@
// local class or this() call
thisArg = makeThis(tree.meth.pos(), c.type.getEnclosingType().tsym);
} else {
- // super() call of nested class
- thisArg = makeOwnerThis(tree.meth.pos(), c, false);
+ // super() call of nested class - never pick 'this'
+ thisArg = makeOwnerThisN(tree.meth.pos(), c, false);
}
tree.args = tree.args.prepend(thisArg);
}
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java Wed Mar 16 10:47:45 2011 -0400
@@ -889,10 +889,11 @@
: (c.fullname == names.java_lang_Object)
? Type.noType
: syms.objectType;
- ct.supertype_field = supertype;
+ ct.supertype_field = modelMissingTypes(supertype, tree.extending, false);
// Determine interfaces.
ListBuffer<Type> interfaces = new ListBuffer<Type>();
+ ListBuffer<Type> all_interfaces = null; // lazy init
Set<Type> interfaceSet = new HashSet<Type>();
List<JCExpression> interfaceTrees = tree.implementing;
if ((tree.mods.flags & Flags.ENUM) != 0 && target.compilerBootstrap(c)) {
@@ -909,13 +910,22 @@
Type i = attr.attribBase(iface, baseEnv, false, true, true);
if (i.tag == CLASS) {
interfaces.append(i);
+ if (all_interfaces != null) all_interfaces.append(i);
chk.checkNotRepeated(iface.pos(), types.erasure(i), interfaceSet);
+ } else {
+ if (all_interfaces == null)
+ all_interfaces = new ListBuffer<Type>().appendList(interfaces);
+ all_interfaces.append(modelMissingTypes(i, iface, true));
}
}
- if ((c.flags_field & ANNOTATION) != 0)
+ if ((c.flags_field & ANNOTATION) != 0) {
ct.interfaces_field = List.of(syms.annotationType);
- else
+ ct.all_interfaces_field = ct.interfaces_field;
+ } else {
ct.interfaces_field = interfaces.toList();
+ ct.all_interfaces_field = (all_interfaces == null)
+ ? ct.interfaces_field : all_interfaces.toList();
+ }
if (c.fullname == names.java_lang_Object) {
if (tree.extending != null) {
@@ -1066,6 +1076,125 @@
return result;
}
+ Type modelMissingTypes(Type t, final JCExpression tree, final boolean interfaceExpected) {
+ if (t.tag != ERROR)
+ return t;
+
+ return new ErrorType(((ErrorType) t).getOriginalType(), t.tsym) {
+ private Type modelType;
+
+ @Override
+ public Type getModelType() {
+ if (modelType == null)
+ modelType = new Synthesizer(getOriginalType(), interfaceExpected).visit(tree);
+ return modelType;
+ }
+ };
+ }
+ // where
+ private class Synthesizer extends JCTree.Visitor {
+ Type originalType;
+ boolean interfaceExpected;
+ List<ClassSymbol> synthesizedSymbols = List.nil();
+ Type result;
+
+ Synthesizer(Type originalType, boolean interfaceExpected) {
+ this.originalType = originalType;
+ this.interfaceExpected = interfaceExpected;
+ }
+
+ Type visit(JCTree tree) {
+ tree.accept(this);
+ return result;
+ }
+
+ List<Type> visit(List<? extends JCTree> trees) {
+ ListBuffer<Type> lb = new ListBuffer<Type>();
+ for (JCTree t: trees)
+ lb.append(visit(t));
+ return lb.toList();
+ }
+
+ @Override
+ public void visitTree(JCTree tree) {
+ result = syms.errType;
+ }
+
+ @Override
+ public void visitIdent(JCIdent tree) {
+ if (tree.type.tag != ERROR) {
+ result = tree.type;
+ } else {
+ result = synthesizeClass(tree.name, syms.unnamedPackage).type;
+ }
+ }
+
+ @Override
+ public void visitSelect(JCFieldAccess tree) {
+ if (tree.type.tag != ERROR) {
+ result = tree.type;
+ } else {
+ Type selectedType;
+ boolean prev = interfaceExpected;
+ try {
+ interfaceExpected = false;
+ selectedType = visit(tree.selected);
+ } finally {
+ interfaceExpected = prev;
+ }
+ ClassSymbol c = synthesizeClass(tree.name, selectedType.tsym);
+ result = c.type;
+ }
+ }
+
+ @Override
+ public void visitTypeApply(JCTypeApply tree) {
+ if (tree.type.tag != ERROR) {
+ result = tree.type;
+ } else {
+ ClassType clazzType = (ClassType) visit(tree.clazz);
+ if (synthesizedSymbols.contains(clazzType.tsym))
+ synthesizeTyparams((ClassSymbol) clazzType.tsym, tree.arguments.size());
+ final List<Type> actuals = visit(tree.arguments);
+ result = new ErrorType(tree.type, clazzType.tsym) {
+ @Override
+ public List<Type> getTypeArguments() {
+ return actuals;
+ }
+ };
+ }
+ }
+
+ ClassSymbol synthesizeClass(Name name, Symbol owner) {
+ int flags = interfaceExpected ? INTERFACE : 0;
+ ClassSymbol c = new ClassSymbol(flags, name, owner);
+ c.members_field = new Scope.ErrorScope(c);
+ c.type = new ErrorType(originalType, c) {
+ @Override
+ public List<Type> getTypeArguments() {
+ return typarams_field;
+ }
+ };
+ synthesizedSymbols = synthesizedSymbols.prepend(c);
+ return c;
+ }
+
+ void synthesizeTyparams(ClassSymbol sym, int n) {
+ ClassType ct = (ClassType) sym.type;
+ Assert.check(ct.typarams_field.isEmpty());
+ if (n == 1) {
+ TypeVar v = new TypeVar(names.fromString("T"), sym, syms.botType);
+ ct.typarams_field = ct.typarams_field.prepend(v);
+ } else {
+ for (int i = n; i > 0; i--) {
+ TypeVar v = new TypeVar(names.fromString("T" + i), sym, syms.botType);
+ ct.typarams_field = ct.typarams_field.prepend(v);
+ }
+ }
+ }
+ }
+
+
/* ***************************************************************************
* tree building
****************************************************************************/
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java Wed Mar 16 10:47:45 2011 -0400
@@ -45,7 +45,9 @@
import javax.lang.model.element.ElementVisitor;
import java.util.Map;
+import java.util.Set;
import java.util.HashMap;
+import java.util.HashSet;
/** Helper class for name resolution, used mostly by the attribution phase.
*
@@ -896,7 +898,8 @@
bestSoFar,
allowBoxing,
useVarargs,
- operator);
+ operator,
+ new HashSet<TypeSymbol>());
}
// where
private Symbol findMethod(Env<AttrContext> env,
@@ -909,11 +912,13 @@
Symbol bestSoFar,
boolean allowBoxing,
boolean useVarargs,
- boolean operator) {
+ boolean operator,
+ Set<TypeSymbol> seen) {
for (Type ct = intype; ct.tag == CLASS || ct.tag == TYPEVAR; ct = types.supertype(ct)) {
while (ct.tag == TYPEVAR)
ct = ct.getUpperBound();
ClassSymbol c = (ClassSymbol)ct.tsym;
+ if (!seen.add(c)) return bestSoFar;
if ((c.flags() & (ABSTRACT | INTERFACE | ENUM)) == 0)
abstractok = false;
for (Scope.Entry e = c.members().lookup(name);
@@ -942,7 +947,7 @@
bestSoFar = findMethod(env, site, name, argtypes,
typeargtypes,
l.head, abstractok, bestSoFar,
- allowBoxing, useVarargs, operator);
+ allowBoxing, useVarargs, operator, seen);
}
if (concrete != bestSoFar &&
concrete.kind < ERR && bestSoFar.kind < ERR &&
@@ -1736,24 +1741,26 @@
*/
Symbol resolveSelfContaining(DiagnosticPosition pos,
Env<AttrContext> env,
- Symbol member) {
+ Symbol member,
+ boolean isSuperCall) {
Name name = names._this;
- Env<AttrContext> env1 = env;
+ Env<AttrContext> env1 = isSuperCall ? env.outer : env;
boolean staticOnly = false;
- while (env1.outer != null) {
- if (isStatic(env1)) staticOnly = true;
- if (env1.enclClass.sym.isSubClass(member.owner, types) &&
- isAccessible(env, env1.enclClass.sym.type, member)) {
- Symbol sym = env1.info.scope.lookup(name).sym;
- if (sym != null) {
- if (staticOnly) sym = new StaticError(sym);
- return access(sym, pos, env.enclClass.sym.type,
- name, true);
+ if (env1 != null) {
+ while (env1 != null && env1.outer != null) {
+ if (isStatic(env1)) staticOnly = true;
+ if (env1.enclClass.sym.isSubClass(member.owner, types)) {
+ Symbol sym = env1.info.scope.lookup(name).sym;
+ if (sym != null) {
+ if (staticOnly) sym = new StaticError(sym);
+ return access(sym, pos, env.enclClass.sym.type,
+ name, true);
+ }
}
+ if ((env1.enclClass.sym.flags() & STATIC) != 0)
+ staticOnly = true;
+ env1 = env1.outer;
}
- if ((env1.enclClass.sym.flags() & STATIC) != 0)
- staticOnly = true;
- env1 = env1.outer;
}
log.error(pos, "encl.class.required", member);
return syms.errSymbol;
@@ -1764,9 +1771,13 @@
* JLS2 8.8.5.1 and 15.9.2
*/
Type resolveImplicitThis(DiagnosticPosition pos, Env<AttrContext> env, Type t) {
+ return resolveImplicitThis(pos, env, t, false);
+ }
+
+ Type resolveImplicitThis(DiagnosticPosition pos, Env<AttrContext> env, Type t, boolean isSuperCall) {
Type thisType = (((t.tsym.owner.kind & (MTH|VAR)) != 0)
? resolveSelf(pos, env, t.getEnclosingType().tsym, names._this)
- : resolveSelfContaining(pos, env, t.tsym)).type;
+ : resolveSelfContaining(pos, env, t.tsym, isSuperCall)).type;
if (env.info.isSelfCall && thisType.tsym == env.enclClass.sym)
log.error(pos, "cant.ref.before.ctor.called", "this");
return thisType;
--- a/langtools/src/share/classes/com/sun/tools/javac/file/CacheFSInfo.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/file/CacheFSInfo.java Wed Mar 16 10:47:45 2011 -0400
@@ -44,13 +44,13 @@
public class CacheFSInfo extends FSInfo {
/**
- * Register a Context.Factory to create a singleton CacheFSInfo.
+ * Register a Context.Factory to create a CacheFSInfo.
*/
- public static void preRegister(final Context context) {
+ public static void preRegister(Context context) {
context.put(FSInfo.class, new Context.Factory<FSInfo>() {
- public FSInfo make() {
+ public FSInfo make(Context c) {
FSInfo instance = new CacheFSInfo();
- context.put(FSInfo.class, instance);
+ c.put(FSInfo.class, instance);
return instance;
}
});
--- a/langtools/src/share/classes/com/sun/tools/javac/file/JavacFileManager.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/file/JavacFileManager.java Wed Mar 16 10:47:45 2011 -0400
@@ -129,10 +129,10 @@
/**
* Register a Context.Factory to create a JavacFileManager.
*/
- public static void preRegister(final Context context) {
+ public static void preRegister(Context context) {
context.put(JavaFileManager.class, new Context.Factory<JavaFileManager>() {
- public JavaFileManager make() {
- return new JavacFileManager(context, true, null);
+ public JavaFileManager make(Context c) {
+ return new JavacFileManager(c, true, null);
}
});
}
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Wed Mar 16 10:47:45 2011 -0400
@@ -2183,7 +2183,7 @@
}
currentClassFile = classfile;
if (verbose) {
- printVerbose("loading", currentClassFile.toString());
+ log.printVerbose("loading", currentClassFile.toString());
}
if (classfile.getKind() == JavaFileObject.Kind.CLASS) {
filling = true;
@@ -2452,13 +2452,13 @@
for (File file : fm.getLocation(SOURCE_PATH)) {
path = path.prepend(file);
}
- printVerbose("sourcepath", path.reverse().toString());
+ log.printVerbose("sourcepath", path.reverse().toString());
} else if (wantSourceFiles) {
List<File> path = List.nil();
for (File file : fm.getLocation(CLASS_PATH)) {
path = path.prepend(file);
}
- printVerbose("sourcepath", path.reverse().toString());
+ log.printVerbose("sourcepath", path.reverse().toString());
}
if (wantClassFiles) {
List<File> path = List.nil();
@@ -2468,7 +2468,7 @@
for (File file : fm.getLocation(CLASS_PATH)) {
path = path.prepend(file);
}
- printVerbose("classpath", path.reverse().toString());
+ log.printVerbose("classpath", path.reverse().toString());
}
}
}
@@ -2519,14 +2519,6 @@
}
}
- /** Output for "-verbose" option.
- * @param key The key to look up the correct internationalized string.
- * @param arg An argument for substitution into the output string.
- */
- private void printVerbose(String key, CharSequence arg) {
- log.printNoteLines("verbose." + key, arg);
- }
-
/** Output for "-checkclassfile" option.
* @param key The key to look up the correct internationalized string.
* @param arg An argument for substitution into the output string.
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Wed Mar 16 10:47:45 2011 -0400
@@ -1447,7 +1447,7 @@
try {
writeClassFile(out, c);
if (verbose)
- log.printErrLines("verbose.wrote.file", outFile);
+ log.printVerbose("wrote.file", outFile);
out.close();
out = null;
} finally {
--- a/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Wed Mar 16 10:47:45 2011 -0400
@@ -299,6 +299,13 @@
protected JavaCompiler delegateCompiler;
/**
+ * Command line options.
+ */
+ protected Options options;
+
+ protected Context context;
+
+ /**
* Flag set if any annotation processing occurred.
**/
protected boolean annotationProcessingOccurred;
@@ -308,11 +315,9 @@
**/
protected boolean implicitSourceFilesRead;
- protected Context context;
-
/** Construct a new compiler using a shared context.
*/
- public JavaCompiler(final Context context) {
+ public JavaCompiler(Context context) {
this.context = context;
context.put(compilerKey, this);
@@ -354,7 +359,7 @@
reader.sourceCompleter = this;
- Options options = Options.instance(context);
+ options = Options.instance(context);
verbose = options.isSet(VERBOSE);
sourceOutput = options.isSet(PRINTSOURCE); // used to be -s
@@ -580,7 +585,7 @@
null, List.<JCTree>nil());
if (content != null) {
if (verbose) {
- printVerbose("parsing.started", filename);
+ log.printVerbose("parsing.started", filename);
}
if (taskListener != null) {
TaskEvent e = new TaskEvent(TaskEvent.Kind.PARSE, filename);
@@ -589,7 +594,7 @@
Parser parser = parserFactory.newParser(content, keepComments(), genEndPos, lineDebugInfo);
tree = parser.parseCompilationUnit();
if (verbose) {
- printVerbose("parsing.done", Long.toString(elapsed(msec)));
+ log.printVerbose("parsing.done", Long.toString(elapsed(msec)));
}
}
@@ -676,7 +681,7 @@
try {
new Pretty(out, true).printUnit(env.toplevel, cdef);
if (verbose)
- printVerbose("wrote.file", outFile);
+ log.printVerbose("wrote.file", outFile);
} finally {
out.close();
}
@@ -792,6 +797,11 @@
throw new AssertionError("attempt to reuse JavaCompiler");
hasBeenUsed = true;
+ // forcibly set the equivalent of -Xlint:-options, so that no further
+ // warnings about command line options are generated from this point on
+ options.put(XLINT_CUSTOM + "-" + LintCategory.OPTIONS.option, "true");
+ options.remove(XLINT_CUSTOM + LintCategory.OPTIONS.option);
+
start_msec = now();
try {
@@ -857,7 +867,7 @@
if (verbose) {
elapsed_msec = elapsed(start_msec);
- printVerbose("total", Long.toString(elapsed_msec));
+ log.printVerbose("total", Long.toString(elapsed_msec));
}
reportDeferredDiagnostics();
@@ -963,7 +973,6 @@
public void initProcessAnnotations(Iterable<? extends Processor> processors) {
// Process annotations if processing is not disabled and there
// is at least one Processor available.
- Options options = Options.instance(context);
if (options.isSet(PROC, "none")) {
processAnnotations = false;
} else if (procEnvImpl == null) {
@@ -1022,7 +1031,6 @@
// If there are no annotation processors present, and
// annotation processing is to occur with compilation,
// emit a warning.
- Options options = Options.instance(context);
if (options.isSet(PROC, "only")) {
log.warning("proc.proc-only.requested.no.procs");
todo.clear();
@@ -1108,9 +1116,13 @@
}
boolean explicitAnnotationProcessingRequested() {
- Options options = Options.instance(context);
return
explicitAnnotationProcessingRequested ||
+ explicitAnnotationProcessingRequested(options);
+ }
+
+ static boolean explicitAnnotationProcessingRequested(Options options) {
+ return
options.isSet(PROCESSOR) ||
options.isSet(PROCESSORPATH) ||
options.isSet(PROC, "only") ||
@@ -1142,7 +1154,7 @@
if (verboseCompilePolicy)
printNote("[attribute " + env.enclClass.sym + "]");
if (verbose)
- printVerbose("checking.attribution", env.enclClass.sym);
+ log.printVerbose("checking.attribution", env.enclClass.sym);
if (taskListener != null) {
TaskEvent e = new TaskEvent(TaskEvent.Kind.ANALYZE, env.toplevel, env.enclClass.sym);
@@ -1508,7 +1520,8 @@
}
public void reportDeferredDiagnostics() {
- if (annotationProcessingOccurred
+ if (errorCount() == 0
+ && annotationProcessingOccurred
&& implicitSourceFilesRead
&& implicitSourcePolicy == ImplicitSourcePolicy.UNSET) {
if (explicitAnnotationProcessingRequested())
@@ -1562,14 +1575,6 @@
Log.printLines(log.noticeWriter, lines);
}
- /** Output for "-verbose" option.
- * @param key The key to look up the correct internationalized string.
- * @param arg An argument for substitution into the output string.
- */
- protected void printVerbose(String key, Object arg) {
- log.printNoteLines("verbose." + key, arg);
- }
-
/** Print numbers of errors and warnings.
*/
protected void printCount(String kind, int count) {
--- a/langtools/src/share/classes/com/sun/tools/javac/main/Main.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/Main.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -367,7 +367,11 @@
|| options.isSet(VERSION)
|| options.isSet(FULLVERSION))
return EXIT_OK;
- error("err.no.source.files");
+ if (JavaCompiler.explicitAnnotationProcessingRequested(options)) {
+ error("err.no.source.files.classes");
+ } else {
+ error("err.no.source.files");
+ }
return EXIT_CMDERR;
}
} catch (java.io.FileNotFoundException e) {
--- a/langtools/src/share/classes/com/sun/tools/javac/main/OptionName.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/OptionName.java Wed Mar 16 10:47:45 2011 -0400
@@ -88,6 +88,7 @@
O("-O"),
XJCOV("-Xjcov"),
XD("-XD"),
+ AT("@"),
SOURCEFILE("sourcefile");
public final String optionName;
--- a/langtools/src/share/classes/com/sun/tools/javac/main/RecognizedOptions.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/RecognizedOptions.java Wed Mar 16 10:47:45 2011 -0400
@@ -168,6 +168,7 @@
O,
XJCOV,
XD,
+ AT,
SOURCEFILE);
static Set<OptionName> javacFileManagerOptions = EnumSet.of(
@@ -565,12 +566,27 @@
}
},
+ // This option exists only for the purpose of documenting itself.
+ // It's actually implemented by the CommandLine class.
+ new Option(AT, "opt.arg.file", "opt.AT") {
+ @Override
+ String helpSynopsis() {
+ hasSuffix = true;
+ return super.helpSynopsis();
+ }
+ @Override
+ public boolean process(Options options, String option) {
+ throw new AssertionError
+ ("the @ flag should be caught by CommandLine.");
+ }
+ },
+
/*
* TODO: With apt, the matches method accepts anything if
* -XclassAsDecls is used; code elsewhere does the lookup to
* see if the class name is both legal and found.
*
- * In apt, the process method adds the candiate class file
+ * In apt, the process method adds the candidate class file
* name to a separate list.
*/
new HiddenOption(SOURCEFILE) {
--- a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java Wed Mar 16 10:47:45 2011 -0400
@@ -2357,7 +2357,7 @@
List<JCTypeParameter> typarams = typeParametersOpt();
- JCTree extending = null;
+ JCExpression extending = null;
if (S.token() == EXTENDS) {
S.nextToken();
extending = parseType();
--- a/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Wed Mar 16 10:47:45 2011 -0400
@@ -807,8 +807,6 @@
final JavaCompiler compiler;
/** The log for the round. */
final Log log;
- /** The number of warnings in the previous round. */
- final int priorWarnings;
/** The ASTs to be compiled. */
List<JCCompilationUnit> roots;
@@ -826,10 +824,10 @@
private Round(Context context, int number, int priorWarnings) {
this.context = context;
this.number = number;
- this.priorWarnings = priorWarnings;
compiler = JavaCompiler.instance(context);
log = Log.instance(context);
+ log.nwarnings += priorWarnings;
log.deferDiagnostics = true;
// the following is for the benefit of JavacProcessingEnvironment.getContext()
@@ -904,8 +902,8 @@
JavaCompiler finalCompiler(boolean errorStatus) {
try {
JavaCompiler c = JavaCompiler.instance(nextContext());
+ c.log.nwarnings += compiler.log.nwarnings;
if (errorStatus) {
- c.log.nwarnings += priorWarnings + compiler.log.nwarnings;
c.log.nerrors += compiler.log.nerrors;
}
return c;
@@ -1045,7 +1043,7 @@
* other values are implicitly reset.
*/
private Context nextContext() {
- Context next = new Context();
+ Context next = new Context(context);
Options options = Options.instance(context);
Assert.checkNonNull(options);
--- a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties Wed Mar 16 10:47:45 2011 -0400
@@ -1588,14 +1588,6 @@
compiler.misc.diamond.non.generic=\
cannot use ''<>'' with non-generic class {0}
-# 0: list of type, 1: message segment
-compiler.misc.diamond.invalid.arg=\
- type argument {0} inferred for {1} is not allowed in this context
-
-# 0: list of type, 1: message segment
-compiler.misc.diamond.invalid.args=\
- type arguments {0} inferred for {1} are not allowed in this context
-
# 0: type, 1: list of type
compiler.misc.explicit.param.do.not.conform.to.bounds=\
explicit type argument {0} does not conform to declared bound(s) {1}
@@ -1803,8 +1795,8 @@
compiler.misc.varargs.clash.with=\
{0} in {1} overrides {2} in {3}
-compiler.misc.non.denotable.type=\
- Non-denotable type {0} not allowed here
+compiler.misc.diamond.and.anon.class=\
+ cannot use ''<>'' with anonymous inner classes
# 0: symbol kind, 1: symbol, 2: symbol, 3: message segment
compiler.misc.inapplicable.method=\
--- a/langtools/src/share/classes/com/sun/tools/javac/resources/javac.properties Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/resources/javac.properties Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -146,6 +146,8 @@
Print information about which annotations a processor is asked to process
javac.opt.prefer=\
Specify which file to read when both a source file and class file are found for an implicitly compiled class
+javac.opt.AT=\
+ Read options and filenames from file
## errors
@@ -161,6 +163,8 @@
invalid target release: {0}
javac.err.no.source.files=\
no source files
+javac.err.no.source.files.classes=\
+ no source files or class names
javac.err.req.arg=\
{0} requires an argument
javac.err.invalid.source=\
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/JCTree.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/JCTree.java Wed Mar 16 10:47:45 2011 -0400
@@ -567,14 +567,14 @@
public JCModifiers mods;
public Name name;
public List<JCTypeParameter> typarams;
- public JCTree extending;
+ public JCExpression extending;
public List<JCExpression> implementing;
public List<JCTree> defs;
public ClassSymbol sym;
protected JCClassDecl(JCModifiers mods,
Name name,
List<JCTypeParameter> typarams,
- JCTree extending,
+ JCExpression extending,
List<JCExpression> implementing,
List<JCTree> defs,
ClassSymbol sym)
@@ -2104,7 +2104,7 @@
JCClassDecl ClassDef(JCModifiers mods,
Name name,
List<JCTypeParameter> typarams,
- JCTree extending,
+ JCExpression extending,
List<JCExpression> implementing,
List<JCTree> defs);
JCMethodDecl MethodDef(JCModifiers mods,
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeCopier.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeCopier.java Wed Mar 16 10:47:45 2011 -0400
@@ -135,7 +135,7 @@
JCClassDecl t = (JCClassDecl) node;
JCModifiers mods = copy(t.mods, p);
List<JCTypeParameter> typarams = copy(t.typarams, p);
- JCTree extending = copy(t.extending, p);
+ JCExpression extending = copy(t.extending, p);
List<JCExpression> implementing = copy(t.implementing, p);
List<JCTree> defs = copy(t.defs, p);
return M.at(t.pos).ClassDef(mods, t.name, typarams, extending, implementing, defs);
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeMaker.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeMaker.java Wed Mar 16 10:47:45 2011 -0400
@@ -146,7 +146,7 @@
public JCClassDecl ClassDef(JCModifiers mods,
Name name,
List<JCTypeParameter> typarams,
- JCTree extending,
+ JCExpression extending,
List<JCExpression> implementing,
List<JCTree> defs)
{
--- a/langtools/src/share/classes/com/sun/tools/javac/util/Context.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/util/Context.java Wed Mar 16 10:47:45 2011 -0400
@@ -108,7 +108,7 @@
* instance.
*/
public static interface Factory<T> {
- T make();
+ T make(Context c);
};
/**
@@ -124,6 +124,8 @@
Object old = ht.put(key, fac);
if (old != null)
throw new AssertionError("duplicate context value");
+ checkState(ft);
+ ft.put(key, fac); // cannot be duplicate if unique in ht
}
/** Set the value for the key in this context. */
@@ -142,7 +144,7 @@
Object o = ht.get(key);
if (o instanceof Factory<?>) {
Factory<?> fac = (Factory<?>)o;
- o = fac.make();
+ o = fac.make(this);
if (o instanceof Factory<?>)
throw new AssertionError("T extends Context.Factory");
Assert.check(ht.get(key) == o);
@@ -158,6 +160,20 @@
public Context() {}
+ /**
+ * The table of preregistered factories.
+ */
+ private Map<Key<?>,Factory<?>> ft = new HashMap<Key<?>,Factory<?>>();
+
+ public Context(Context prev) {
+ kt.putAll(prev.kt); // retain all implicit keys
+ ft.putAll(prev.ft); // retain all factory objects
+ ht.putAll(prev.ft); // init main table with factories
+ }
+
+ /*
+ * The key table, providing a unique Key<T> for each Class<T>.
+ */
private Map<Class<?>, Key<?>> kt = new HashMap<Class<?>, Key<?>>();
private <T> Key<T> key(Class<T> clss) {
@@ -198,6 +214,7 @@
public void clear() {
ht = null;
kt = null;
+ ft = null;
}
private static void checkState(Map<?,?> t) {
--- a/langtools/src/share/classes/com/sun/tools/javac/util/Log.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javac/util/Log.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -329,7 +329,6 @@
printLines(errWriter, localize(key, args));
}
-
/** Print the text of a message to the noticeWriter stream,
* translating newlines appropriately for the platform.
*/
@@ -337,6 +336,14 @@
printLines(noticeWriter, localize(key, args));
}
+ /**
+ * Print the localized text of a "verbose" message to the
+ * noticeWriter stream.
+ */
+ public void printVerbose(String key, Object... args) {
+ printLines(noticeWriter, localize("verbose." + key, args));
+ }
+
protected void directError(String key, Object... args) {
printErrLines(key, args);
errWriter.flush();
--- a/langtools/src/share/classes/com/sun/tools/javadoc/AnnotationDescImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/AnnotationDescImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -92,8 +92,9 @@
* @com.example.foo
* Omit parens for marker annotations, and omit "value=" when allowed.
*/
+ @Override
public String toString() {
- StringBuffer sb = new StringBuffer("@");
+ StringBuilder sb = new StringBuilder("@");
sb.append(annotation.type.tsym);
ElementValuePair vals[] = elementValues();
@@ -153,6 +154,7 @@
* Returns a string representation of this pair
* of the form "name=value".
*/
+ @Override
public String toString() {
return meth.name + "=" + value();
}
--- a/langtools/src/share/classes/com/sun/tools/javadoc/AnnotationValueImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/AnnotationValueImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -30,7 +30,6 @@
import com.sun.tools.javac.code.Attribute;
import com.sun.tools.javac.code.Symbol.*;
-import com.sun.tools.javac.code.Type;
import com.sun.tools.javac.code.TypeTags;
@@ -114,6 +113,7 @@
* @return the text of a Java language annotation value expression
* whose value is the value of this annotation type element.
*/
+ @Override
public String toString() {
ToStringVisitor tv = new ToStringVisitor();
attr.accept(tv);
@@ -121,8 +121,9 @@
}
private class ToStringVisitor implements Attribute.Visitor {
- private final StringBuffer sb = new StringBuffer();
+ private final StringBuilder sb = new StringBuilder();
+ @Override
public String toString() {
return sb.toString();
}
--- a/langtools/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -64,7 +64,6 @@
import com.sun.tools.javac.util.Names;
import com.sun.tools.javac.util.Position;
-import static com.sun.tools.javac.code.Flags.*;
import static com.sun.tools.javac.code.Kinds.*;
/**
@@ -147,6 +146,7 @@
/**
* Return true if this is a class, not an interface.
*/
+ @Override
public boolean isClass() {
return !Modifier.isInterface(getModifiers());
}
@@ -155,6 +155,7 @@
* Return true if this is a ordinary class,
* not an enumeration, exception, an error, or an interface.
*/
+ @Override
public boolean isOrdinaryClass() {
if (isEnum() || isInterface() || isAnnotationType()) {
return false;
@@ -172,6 +173,7 @@
* Return true if this is an enumeration.
* (For legacy doclets, return false.)
*/
+ @Override
public boolean isEnum() {
return (getFlags() & Flags.ENUM) != 0
&&
@@ -182,6 +184,7 @@
* Return true if this is an interface, but not an annotation type.
* Overridden by AnnotationTypeDocImpl.
*/
+ @Override
public boolean isInterface() {
return Modifier.isInterface(getModifiers());
}
@@ -189,6 +192,7 @@
/**
* Return true if this is an exception class
*/
+ @Override
public boolean isException() {
if (isEnum() || isInterface() || isAnnotationType()) {
return false;
@@ -204,6 +208,7 @@
/**
* Return true if this is an error class
*/
+ @Override
public boolean isError() {
if (isEnum() || isInterface() || isAnnotationType()) {
return false;
@@ -275,6 +280,7 @@
/**
* Return the package that this class is contained in.
*/
+ @Override
public PackageDoc containingPackage() {
PackageDocImpl p = env.getPackageDoc(tsym.packge());
if (p.setDocPath == false) {
@@ -374,6 +380,7 @@
* Return the qualified name and any type parameters.
* Each parameter is a type variable with optional bounds.
*/
+ @Override
public String toString() {
return classToString(env, tsym, true);
}
@@ -401,7 +408,7 @@
* qualified by their enclosing class(es) only.
*/
static String classToString(DocEnv env, ClassSymbol c, boolean full) {
- StringBuffer s = new StringBuffer();
+ StringBuilder s = new StringBuilder();
if (!c.isInner()) { // if c is not an inner class
s.append(getClassName(c, full));
} else {
@@ -449,10 +456,12 @@
* Return the modifier string for this class. If it's an interface
* exclude 'abstract' keyword from the modifier string
*/
+ @Override
public String modifiers() {
return Modifier.toString(modifierSpecifier());
}
+ @Override
public int modifierSpecifier() {
int modifiers = getModifiers();
return (isInterface() || isAnnotationType())
@@ -1285,6 +1294,7 @@
* Return the source position of the entity, or null if
* no position is available.
*/
+ @Override
public SourcePosition position() {
if (tsym.sourcefile == null) return null;
return SourcePositionImpl.make(tsym.sourcefile,
--- a/langtools/src/share/classes/com/sun/tools/javadoc/DocImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/DocImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,7 @@
package com.sun.tools.javadoc;
+import java.io.DataInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.text.CollationKey;
@@ -33,6 +34,8 @@
import com.sun.javadoc.*;
import com.sun.tools.javac.util.Position;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* abstract base class of all Doc classes. Doc item's are representations
@@ -166,51 +169,28 @@
* Utility for subclasses which read HTML documentation files.
*/
String readHTMLDocumentation(InputStream input, FileObject filename) throws IOException {
- int filesize = input.available();
- byte[] filecontents = new byte[filesize];
- input.read(filecontents, 0, filesize);
- input.close();
+ byte[] filecontents = new byte[input.available()];
+ try {
+ DataInputStream dataIn = new DataInputStream(input);
+ dataIn.readFully(filecontents);
+ } finally {
+ input.close();
+ }
String encoding = env.getEncoding();
String rawDoc = (encoding!=null)
? new String(filecontents, encoding)
: new String(filecontents);
- String upper = null;
- int bodyIdx = rawDoc.indexOf("<body");
- if (bodyIdx == -1) {
- bodyIdx = rawDoc.indexOf("<BODY");
- if (bodyIdx == -1) {
- upper = rawDoc.toUpperCase();
- bodyIdx = upper.indexOf("<BODY");
- if (bodyIdx == -1) {
- env.error(SourcePositionImpl.make(filename, Position.NOPOS, null),
- "javadoc.Body_missing_from_html_file");
- return "";
- }
- }
- }
- bodyIdx = rawDoc.indexOf('>', bodyIdx);
- if (bodyIdx == -1) {
- env.error(SourcePositionImpl.make(filename, Position.NOPOS, null),
- "javadoc.Body_missing_from_html_file");
+ Pattern bodyPat = Pattern.compile("(?is).*<body\\b[^>]*>(.*)</body\\b.*");
+ Matcher m = bodyPat.matcher(rawDoc);
+ if (m.matches()) {
+ return m.group(1);
+ } else {
+ String key = rawDoc.matches("(?is).*<body\\b.*")
+ ? "javadoc.End_body_missing_from_html_file"
+ : "javadoc.Body_missing_from_html_file";
+ env.error(SourcePositionImpl.make(filename, Position.NOPOS, null), key);
return "";
}
- ++bodyIdx;
- int endIdx = rawDoc.indexOf("</body", bodyIdx);
- if (endIdx == -1) {
- endIdx = rawDoc.indexOf("</BODY", bodyIdx);
- if (endIdx == -1) {
- if (upper == null) {
- upper = rawDoc.toUpperCase();
- }
- endIdx = upper.indexOf("</BODY", bodyIdx);
- if (endIdx == -1) {
- env.error(SourcePositionImpl.make(filename, Position.NOPOS, null),
- "javadoc.End_body_missing_from_html_file");
- return "";
- }
- }
- }
- return rawDoc.substring(bodyIdx, endIdx);
}
/**
@@ -256,6 +236,7 @@
/**
* Returns a string representation of this Doc item.
*/
+ @Override
public String toString() {
return qualifiedName();
}
--- a/langtools/src/share/classes/com/sun/tools/javadoc/DocletInvoker.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/DocletInvoker.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -31,14 +31,13 @@
import com.sun.tools.javac.util.List;
-import java.net.*;
+import java.io.File;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.InvocationTargetException;
+import java.net.URL;
+import java.net.URLClassLoader;
-import java.io.File;
-import java.io.IOException;
-import java.util.StringTokenizer;
/**
* Class creates, controls and invokes doclets.
--- a/langtools/src/share/classes/com/sun/tools/javadoc/ExecutableMemberDocImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/ExecutableMemberDocImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -226,7 +226,7 @@
}
private String makeSignature(boolean full) {
- StringBuffer result = new StringBuffer();
+ StringBuilder result = new StringBuilder();
result.append("(");
for (List<Type> types = sym.type.getParameterTypes(); types.nonEmpty(); ) {
Type t = types.head;
@@ -251,6 +251,7 @@
/**
* Generate a key for sorting.
*/
+ @Override
CollationKey generateKey() {
String k = name() + flatSignature() + typeParametersString();
// ',' and '&' are between '$' and 'a': normalize to spaces.
@@ -263,6 +264,7 @@
* Return the source position of the entity, or null if
* no position is available.
*/
+ @Override
public SourcePosition position() {
if (sym.enclClass().sourcefile == null) return null;
return SourcePositionImpl.make(sym.enclClass().sourcefile,
--- a/langtools/src/share/classes/com/sun/tools/javadoc/FieldDocImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/FieldDocImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -142,7 +142,7 @@
return v + (suffix == 'f' || suffix == 'F' ? "" + suffix : "");
}
private static String sourceForm(char c) {
- StringBuffer buf = new StringBuffer(8);
+ StringBuilder buf = new StringBuilder(8);
buf.append('\'');
sourceChar(c, buf);
buf.append('\'');
@@ -152,7 +152,7 @@
return "0x" + Integer.toString(c & 0xff, 16);
}
private static String sourceForm(String s) {
- StringBuffer buf = new StringBuffer(s.length() + 5);
+ StringBuilder buf = new StringBuilder(s.length() + 5);
buf.append('\"');
for (int i=0; i<s.length(); i++) {
char c = s.charAt(i);
@@ -161,7 +161,7 @@
buf.append('\"');
return buf.toString();
}
- private static void sourceChar(char c, StringBuffer buf) {
+ private static void sourceChar(char c, StringBuilder buf) {
switch (c) {
case '\b': buf.append("\\b"); return;
case '\t': buf.append("\\t"); return;
@@ -179,7 +179,7 @@
return;
}
}
- private static void unicodeEscape(char c, StringBuffer buf) {
+ private static void unicodeEscape(char c, StringBuilder buf) {
final String chars = "0123456789abcdef";
buf.append("\\u");
buf.append(chars.charAt(15 & (c>>12)));
@@ -201,6 +201,7 @@
/**
* Is this Doc item a field (but not an enum constant?
*/
+ @Override
public boolean isField() {
return !isEnumConstant();
}
@@ -209,6 +210,7 @@
* Is this Doc item an enum constant?
* (For legacy doclets, return false.)
*/
+ @Override
public boolean isEnumConstant() {
return (getFlags() & Flags.ENUM) != 0 &&
!env.legacyDoclet;
@@ -257,6 +259,7 @@
* Return the source position of the entity, or null if
* no position is available.
*/
+ @Override
public SourcePosition position() {
if (sym.enclClass().sourcefile == null) return null;
return SourcePositionImpl.make(sym.enclClass().sourcefile,
--- a/langtools/src/share/classes/com/sun/tools/javadoc/JavadocClassReader.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/JavadocClassReader.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -44,10 +44,10 @@
return (JavadocClassReader)instance;
}
- public static void preRegister(final Context context) {
+ public static void preRegister(Context context) {
context.put(classReaderKey, new Context.Factory<ClassReader>() {
- public ClassReader make() {
- return new JavadocClassReader(context);
+ public ClassReader make(Context c) {
+ return new JavadocClassReader(c);
}
});
}
--- a/langtools/src/share/classes/com/sun/tools/javadoc/JavadocEnter.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/JavadocEnter.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
* 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,10 +48,10 @@
return (JavadocEnter)instance;
}
- public static void preRegister(final Context context) {
+ public static void preRegister(Context context) {
context.put(enterKey, new Context.Factory<Enter>() {
- public Enter make() {
- return new JavadocEnter(context);
+ public Enter make(Context c) {
+ return new JavadocEnter(c);
}
});
}
--- a/langtools/src/share/classes/com/sun/tools/javadoc/JavadocMemberEnter.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/JavadocMemberEnter.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* 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,10 +46,10 @@
return (JavadocMemberEnter)instance;
}
- public static void preRegister(final Context context) {
+ public static void preRegister(Context context) {
context.put(memberEnterKey, new Context.Factory<MemberEnter>() {
- public MemberEnter make() {
- return new JavadocMemberEnter(context);
+ public MemberEnter make(Context c) {
+ return new JavadocMemberEnter(c);
}
});
}
--- a/langtools/src/share/classes/com/sun/tools/javadoc/JavadocTodo.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/JavadocTodo.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -34,10 +34,10 @@
* @author Neal Gafter
*/
public class JavadocTodo extends Todo {
- public static void preRegister(final Context context) {
+ public static void preRegister(Context context) {
context.put(todoKey, new Context.Factory<Todo>() {
- public Todo make() {
- return new JavadocTodo(context);
+ public Todo make(Context c) {
+ return new JavadocTodo(c);
}
});
}
--- a/langtools/src/share/classes/com/sun/tools/javadoc/Messager.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/Messager.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* 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,23 +57,23 @@
return (Messager)instance;
}
- public static void preRegister(final Context context,
+ public static void preRegister(Context context,
final String programName) {
context.put(logKey, new Context.Factory<Log>() {
- public Log make() {
- return new Messager(context,
+ public Log make(Context c) {
+ return new Messager(c,
programName);
}
});
}
- public static void preRegister(final Context context,
+ public static void preRegister(Context context,
final String programName,
final PrintWriter errWriter,
final PrintWriter warnWriter,
final PrintWriter noticeWriter) {
context.put(logKey, new Context.Factory<Log>() {
- public Log make() {
- return new Messager(context,
+ public Log make(Context c) {
+ return new Messager(c,
programName,
errWriter,
warnWriter,
@@ -143,11 +143,9 @@
* if needed.
*/
private String getString(String key) {
- ResourceBundle messageRB = this.messageRB;
if (messageRB == null) {
try {
- this.messageRB = messageRB =
- ResourceBundle.getBundle(
+ messageRB = ResourceBundle.getBundle(
"com.sun.tools.javadoc.resources.javadoc");
} catch (MissingResourceException e) {
throw new Error("Fatal: Resource for javadoc is missing");
@@ -456,8 +454,6 @@
* Print exit message.
*/
public void exitNotice() {
- int nerrors = nerrors();
- int nwarnings = nwarnings();
if (nerrors > 0) {
notice((nerrors > 1) ? "main.errors" : "main.error",
"" + nerrors);
--- a/langtools/src/share/classes/com/sun/tools/javadoc/ParameterizedTypeImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/ParameterizedTypeImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,15 +25,11 @@
package com.sun.tools.javadoc;
-
import com.sun.javadoc.*;
-import static com.sun.javadoc.LanguageVersion.*;
-
import com.sun.tools.javac.code.Symbol.ClassSymbol;
import com.sun.tools.javac.code.Type;
import com.sun.tools.javac.code.Type.ClassType;
-import com.sun.tools.javac.util.List;
import static com.sun.tools.javac.code.TypeTags.*;
@@ -55,6 +51,7 @@
/**
* Return the generic class or interface that declared this type.
*/
+ @Override
public ClassDoc asClassDoc() {
return env.getClassDoc((ClassSymbol)type.tsym);
}
@@ -111,14 +108,17 @@
// Asking for the "name" of a parameterized type doesn't exactly make
// sense. It's a type expression. Return the name of its generic
// type.
+ @Override
public String typeName() {
return TypeMaker.getTypeName(type, false);
}
+ @Override
public ParameterizedType asParameterizedType() {
return this;
}
+ @Override
public String toString() {
return parameterizedTypeToString(env, (ClassType)type, true);
}
@@ -128,7 +128,7 @@
if (env.legacyDoclet) {
return TypeMaker.getTypeName(cl, full);
}
- StringBuffer s = new StringBuffer();
+ StringBuilder s = new StringBuilder();
if (cl.getEnclosingType().tag != CLASS) { // if not an inner class...
s.append(TypeMaker.getTypeName(cl, full));
} else {
--- a/langtools/src/share/classes/com/sun/tools/javadoc/RootDocImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/RootDocImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -322,6 +322,7 @@
/**
* Do lazy initialization of "documentation" string.
*/
+ @Override
protected String documentation() {
if (documentation == null) {
int cnt = options.length();
@@ -348,6 +349,7 @@
* Return the source position of the entity, or null if
* no position is available.
*/
+ @Override
public SourcePosition position() {
JavaFileObject path;
return ((path = getOverviewPath()) == null) ?
--- a/langtools/src/share/classes/com/sun/tools/javadoc/SeeTagImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/SeeTagImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -358,14 +358,14 @@
String parameters;
- StringBuffer typeId;
+ StringBuilder typeId;
ListBuffer<String> paramList;
ParameterParseMachine(String parameters) {
this.parameters = parameters;
this.paramList = new ListBuffer<String>();
- typeId = new StringBuffer();
+ typeId = new StringBuilder();
}
public String[] parseParameters() {
@@ -464,6 +464,7 @@
/**
* Return the kind of this tag.
*/
+ @Override
public String kind() {
return "@see";
}
--- a/langtools/src/share/classes/com/sun/tools/javadoc/Start.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/Start.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -396,6 +396,10 @@
boolean ok = root != null;
if (ok) ok = docletInvoker.start(root);
+ Messager docletMessager = Messager.instance0(context);
+ messager.nwarnings += docletMessager.nwarnings;
+ messager.nerrors += docletMessager.nerrors;
+
// We're done.
if (compOpts.get("-verbose") != null) {
tm = System.currentTimeMillis() - tm;
--- a/langtools/src/share/classes/com/sun/tools/javadoc/TypeMaker.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/TypeMaker.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -27,15 +27,12 @@
import com.sun.javadoc.*;
-import static com.sun.javadoc.LanguageVersion.*;
-
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.code.Symbol.ClassSymbol;
import com.sun.tools.javac.code.Type;
import com.sun.tools.javac.code.Type.ClassType;
import com.sun.tools.javac.code.Type.TypeVar;
import com.sun.tools.javac.code.Type.ArrayType;
-import com.sun.tools.javac.code.Types;
import com.sun.tools.javac.util.List;
import static com.sun.tools.javac.code.TypeTags.*;
@@ -109,12 +106,13 @@
public static String getTypeName(Type t, boolean full) {
switch (t.tag) {
case ARRAY:
- StringBuffer dimension = new StringBuffer();
+ StringBuilder s = new StringBuilder();
while (t.tag == ARRAY) {
- dimension = dimension.append("[]");
+ s.append("[]");
t = ((ArrayType)t).elemtype;
}
- return getTypeName(t, full) + dimension;
+ s.insert(0, getTypeName(t, full));
+ return s.toString();
case CLASS:
return ClassDocImpl.getClassName((ClassSymbol)t.tsym, full);
default:
@@ -130,12 +128,13 @@
static String getTypeString(DocEnv env, Type t, boolean full) {
switch (t.tag) {
case ARRAY:
- StringBuffer dimension = new StringBuffer();
+ StringBuilder s = new StringBuilder();
while (t.tag == ARRAY) {
- dimension = dimension.append("[]");
+ s.append("[]");
t = env.types.elemtype(t);
}
- return getTypeString(env, t, full) + dimension;
+ s.insert(0, getTypeString(env, t, full));
+ return s.toString();
case CLASS:
return ParameterizedTypeImpl.
parameterizedTypeToString(env, (ClassType)t, full);
@@ -157,7 +156,7 @@
if (env.legacyDoclet || sym.type.getTypeArguments().isEmpty()) {
return "";
}
- StringBuffer s = new StringBuffer();
+ StringBuilder s = new StringBuilder();
for (Type t : sym.type.getTypeArguments()) {
s.append(s.length() == 0 ? "<" : ", ");
s.append(TypeVariableImpl.typeVarToString(env, (TypeVar)t, full));
@@ -175,7 +174,7 @@
if (env.legacyDoclet || cl.getTypeArguments().isEmpty()) {
return "";
}
- StringBuffer s = new StringBuffer();
+ StringBuilder s = new StringBuilder();
for (Type t : cl.getTypeArguments()) {
s.append(s.length() == 0 ? "<" : ", ");
s.append(getTypeString(env, t, full));
@@ -213,9 +212,9 @@
* For example, a two dimensional array of String returns '[][]'.
*/
public String dimension() {
- StringBuffer dimension = new StringBuffer();
+ StringBuilder dimension = new StringBuilder();
for (Type t = arrayType; t.tag == ARRAY; t = env.types.elemtype(t)) {
- dimension = dimension.append("[]");
+ dimension.append("[]");
}
return dimension.toString();
}
@@ -304,6 +303,7 @@
*
* @return name of type including any dimension information.
*/
+ @Override
public String toString() {
return qualifiedTypeName() + dimension();
}
--- a/langtools/src/share/classes/com/sun/tools/javadoc/TypeVariableImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/TypeVariableImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -78,14 +78,17 @@
/**
* Return the ClassDoc of the erasure of this type variable.
*/
+ @Override
public ClassDoc asClassDoc() {
return env.getClassDoc((ClassSymbol)env.types.erasure(type).tsym);
}
+ @Override
public TypeVariable asTypeVariable() {
return this;
}
+ @Override
public String toString() {
return typeVarToString(env, (TypeVar)type, true);
}
@@ -96,7 +99,7 @@
* "extends" clause. Class names are qualified if "full" is true.
*/
static String typeVarToString(DocEnv env, TypeVar v, boolean full) {
- StringBuffer s = new StringBuffer(v.toString());
+ StringBuilder s = new StringBuilder(v.toString());
List<Type> bounds = getBounds(v, env);
if (bounds.nonEmpty()) {
boolean first = true;
--- a/langtools/src/share/classes/com/sun/tools/javadoc/WildcardTypeImpl.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/WildcardTypeImpl.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -28,8 +28,6 @@
import com.sun.javadoc.*;
-import static com.sun.javadoc.LanguageVersion.*;
-
import com.sun.tools.javac.code.Symbol.ClassSymbol;
import com.sun.tools.javac.code.Type;
import com.sun.tools.javac.util.List;
@@ -69,18 +67,24 @@
/**
* Return the ClassDoc of the erasure of this wildcard type.
*/
+ @Override
public ClassDoc asClassDoc() {
return env.getClassDoc((ClassSymbol)env.types.erasure(type).tsym);
}
+ @Override
public WildcardType asWildcardType() {
return this;
}
+ @Override
public String typeName() { return "?"; }
+ @Override
public String qualifiedTypeName() { return "?"; }
+ @Override
public String simpleTypeName() { return "?"; }
+ @Override
public String toString() {
return wildcardTypeToString(env, (Type.WildcardType)type, true);
}
@@ -96,7 +100,7 @@
if (env.legacyDoclet) {
return TypeMaker.getTypeName(env.types.erasure(wildThing), full);
}
- StringBuffer s = new StringBuffer("?");
+ StringBuilder s = new StringBuilder("?");
List<Type> bounds = getExtendsBounds(wildThing);
if (bounds.nonEmpty()) {
s.append(" extends ");
--- a/langtools/src/share/classes/com/sun/tools/javadoc/resources/javadoc.properties Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/resources/javadoc.properties Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -104,7 +104,7 @@
tag.End_delimiter_missing_for_possible_SeeTag=End Delimiter } missing for possible See Tag in comment string: "{0}"
tag.Improper_Use_Of_Link_Tag=Missing closing ''}'' character for inline tag: "{0}"
javadoc.File_Read_Error=Error while reading file {0}
-javadoc.Body_missing_from_html_file=Body tag missing from HTML
+javadoc.Body_missing_from_html_file=Body tag missing from HTML file
javadoc.End_body_missing_from_html_file=Close body tag missing from HTML file
javadoc.Multiple_package_comments=Multiple sources of package comments found for package "{0}"
javadoc.class_not_found=Class {0} not found.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/7023703/T7023703neg.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 7023703
+ * @summary Valid code doesn't compile
+ * @compile/fail/ref=T7023703neg.out -XDrawDiagnostics T7023703neg.java
+ */
+
+class T7023703neg {
+
+ void testForLoop(boolean cond) {
+ final int bug;
+ final int bug2;
+ for (;cond;) {
+ final int item = 0;
+ bug2 = 1; //error
+ }
+ bug = 0; //ok
+ }
+
+ void testForEachLoop(java.util.Collection<Integer> c) {
+ final int bug;
+ final int bug2;
+ for (Integer i : c) {
+ final int item = 0;
+ bug2 = 1; //error
+ }
+ bug = 0; //ok
+ }
+
+ void testWhileLoop(boolean cond) {
+ final int bug;
+ final int bug2;
+ while (cond) {
+ final int item = 0;
+ bug2 = 1; //error
+ }
+ bug = 0; //ok
+ }
+
+ void testDoWhileLoop(boolean cond) {
+ final int bug;
+ final int bug2;
+ do {
+ final int item = 0;
+ bug2 = 1; //error
+ } while (cond);
+ bug = 0; //ok
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/7023703/T7023703neg.out Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,5 @@
+T7023703neg.java:37:13: compiler.err.var.might.be.assigned.in.loop: bug2
+T7023703neg.java:47:13: compiler.err.var.might.be.assigned.in.loop: bug2
+T7023703neg.java:57:13: compiler.err.var.might.be.assigned.in.loop: bug2
+T7023703neg.java:67:13: compiler.err.var.might.be.assigned.in.loop: bug2
+4 errors
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/7023703/T7023703pos.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 7023703
+ * @summary Valid code doesn't compile
+ * @compile T7023703pos.java
+ */
+
+class T7023703pos {
+
+ void testForLoop() {
+ final int bug;
+ for (;"a".equals("b");) {
+ final int item = 0;
+ }
+ bug = 0; //ok
+ }
+
+ void testForEachLoop(boolean cond, java.util.Collection<Integer> c) {
+ final int bug;
+ for (Integer i : c) {
+ if (cond) {
+ final int item = 0;
+ }
+ }
+ bug = 0; //ok
+ }
+
+ void testWhileLoop() {
+ final int bug;
+ while ("a".equals("b")) {
+ final int item = 0;
+ }
+ bug = 0; //ok
+ }
+
+ void testDoWhileLoop() {
+ final int bug;
+ do {
+ final int item = 0;
+ } while ("a".equals("b"));
+ bug = 0; //ok
+ }
+
+ private static class Inner {
+ private final int a, b, c, d, e;
+
+ public Inner() {
+ a = b = c = d = e = 0;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/7024568/T7024568.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 7024568
+ * @summary Very long method resolution causing OOM error
+ * @compile/fail/ref=T7024568.out -XDrawDiagnostics T7024568.java
+ */
+
+class Main {
+ void test(Obj o) {
+ o.test(0, 0, 0, 0, 0, 0, 0, 0, undefined);
+ }
+}
+
+interface Test {
+ public void test(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, String str);
+ public void test(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, long l);
+}
+
+interface Obj extends Test, A, B, C, D, E {}
+interface A extends Test {}
+interface B extends A, Test {}
+interface C extends A, B, Test {}
+interface D extends A, B, C, Test {}
+interface E extends A, B, C, D, Test {}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/7024568/T7024568.out Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,2 @@
+T7024568.java:32:40: compiler.err.cant.resolve.location: kindname.variable, undefined, , , (compiler.misc.location: kindname.class, Main, null)
+1 error
--- a/langtools/test/tools/javac/AnonStaticMember_2.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/AnonStaticMember_2.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,6 +1,6 @@
/*
* @test /nodynamiccopyright/
- * @bug 4279339
+ * @bug 4279339 6969184
* @summary Verify that an anonymous class cannot contain a static method.
* @author maddox
*
--- a/langtools/test/tools/javac/InterfaceInInner.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/InterfaceInInner.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,6 +1,6 @@
/*
* @test /nodynamiccopyright/
- * @bug 4063740
+ * @bug 4063740 6969184
* @summary Interfaces may only be declared in top level classes.
* @author turnidge
*
--- a/langtools/test/tools/javac/QualifiedNew.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/QualifiedNew.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,6 +1,6 @@
/*
* @test /nodynamiccopyright/
- * @bug 4406966
+ * @bug 4406966 6969184
* @summary null qualifying inner instance creation should be error.
* @author gafter
*
--- a/langtools/test/tools/javac/T6900037.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * 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 6900037
- * @summary javac should warn if earlier -source is used and bootclasspath not set
- * @compile T6900037.java
- * @compile -source 1.6 T6900037.java
- * @compile/fail/ref=T6900037.out -XDrawDiagnostics -Werror -source 1.6 T6900037.java
- * @compile -Werror -source 1.6 -Xlint:-options T6900037.java
- */
-
-class T6900037 { }
--- a/langtools/test/tools/javac/T6900037.out Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-- compiler.warn.source.no.bootclasspath: 1.6
-- compiler.err.warnings.and.werror
-1 error
-1 warning
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/TryWithResources/T7022711.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,20 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 7022711
+ * @summary compiler crash in try-with-resources
+ * @compile/fail/ref=T7022711.out -XDrawDiagnostics T7022711.java
+ */
+
+import java.io.*;
+
+class T7022711 {
+ public static void main (String args[]) throws Exception {
+ try (DataInputStream is = new DataInputStream(new FileInputStream("x"))) {
+ while (true) {
+ is.getChar(); // method not found
+ }
+ } catch (EOFException e) {
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/TryWithResources/T7022711.out Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,2 @@
+T7022711.java:14:19: compiler.err.cant.resolve.location.args: kindname.method, getChar, , , (compiler.misc.location.1: kindname.variable, is, java.io.DataInputStream)
+1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/TryWithResources/UnusedResourcesTest.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,250 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 7023233
+ * @summary False positive for -Xlint:try with nested try with resources blocks
+ */
+
+import com.sun.source.util.JavacTask;
+import com.sun.tools.javac.api.JavacTool;
+import com.sun.tools.javac.util.JCDiagnostic;
+import java.net.URI;
+import java.util.Arrays;
+import javax.tools.Diagnostic;
+import javax.tools.JavaCompiler;
+import javax.tools.JavaFileObject;
+import javax.tools.SimpleJavaFileObject;
+import javax.tools.StandardJavaFileManager;
+import javax.tools.ToolProvider;
+
+public class UnusedResourcesTest {
+
+ enum XlintOption {
+ NONE("none"),
+ TRY("try");
+
+ String opt;
+
+ XlintOption(String opt) {
+ this.opt = opt;
+ }
+
+ String getXlintOption() {
+ return "-Xlint:" + opt;
+ }
+ }
+
+ enum TwrStmt {
+ TWR1("res1"),
+ TWR2("res2"),
+ TWR3("res3");
+
+ final String resourceName;
+
+ private TwrStmt(String resourceName) {
+ this.resourceName = resourceName;
+ }
+ }
+
+ enum SuppressLevel {
+ NONE,
+ SUPPRESS;
+
+ String getSuppressAnno() {
+ return this == SUPPRESS ?
+ "@SuppressWarnings(\"try\")" :
+ "";
+ }
+ }
+
+ enum ResourceUsage {
+ NONE(null),
+ USE_R1(TwrStmt.TWR1),
+ USE_R2(TwrStmt.TWR2),
+ USE_R3(TwrStmt.TWR3);
+
+ TwrStmt stmt;
+
+ private ResourceUsage(TwrStmt stmt) {
+ this.stmt = stmt;
+ }
+
+ String usedResourceName() {
+ return stmt != null ? stmt.resourceName : null;
+ }
+
+ boolean isUsedIn(TwrStmt res, TwrStmt stmt) {
+ return this.stmt == res &&
+ stmt.ordinal() >= this.stmt.ordinal();
+ }
+
+ String getUsage(TwrStmt stmt) {
+ return this != NONE && stmt.ordinal() >= this.stmt.ordinal() ?
+ "use(" + usedResourceName() + ");" :
+ "";
+ }
+ }
+
+ static class JavaSource extends SimpleJavaFileObject {
+
+ String template = "class Resource implements AutoCloseable {\n" +
+ "public void close() {}\n" +
+ "}\n" +
+ "class Test {\n" +
+ "void use(Resource r) {}\n" +
+ "#S void test() {\n" +
+ "try (Resource #R1 = new Resource()) {\n" +
+ "#U1_R1\n" +
+ "#U1_R2\n" +
+ "#U1_R3\n" +
+ "try (Resource #R2 = new Resource()) {\n" +
+ "#U2_R1\n" +
+ "#U2_R2\n" +
+ "#U2_R3\n" +
+ "try (Resource #R3 = new Resource()) {\n" +
+ "#U3_R1\n" +
+ "#U3_R2\n" +
+ "#U3_R3\n" +
+ "}\n" +
+ "}\n" +
+ "}\n" +
+ "}\n" +
+ "}\n";
+
+ String source;
+
+ public JavaSource(SuppressLevel suppressLevel, ResourceUsage usage1,
+ ResourceUsage usage2, ResourceUsage usage3) {
+ super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
+ source = template.replace("#S", suppressLevel.getSuppressAnno()).
+ replace("#R1", TwrStmt.TWR1.resourceName).
+ replace("#R2", TwrStmt.TWR2.resourceName).
+ replace("#R3", TwrStmt.TWR3.resourceName).
+ replace("#U1_R1", usage1.getUsage(TwrStmt.TWR1)).
+ replace("#U1_R2", usage2.getUsage(TwrStmt.TWR1)).
+ replace("#U1_R3", usage3.getUsage(TwrStmt.TWR1)).
+ replace("#U2_R1", usage1.getUsage(TwrStmt.TWR2)).
+ replace("#U2_R2", usage2.getUsage(TwrStmt.TWR2)).
+ replace("#U2_R3", usage3.getUsage(TwrStmt.TWR2)).
+ replace("#U3_R1", usage1.getUsage(TwrStmt.TWR3)).
+ replace("#U3_R2", usage2.getUsage(TwrStmt.TWR3)).
+ replace("#U3_R3", usage3.getUsage(TwrStmt.TWR3));
+ }
+
+ @Override
+ public CharSequence getCharContent(boolean ignoreEncodingErrors) {
+ return source;
+ }
+ }
+
+ public static void main(String... args) throws Exception {
+ for (XlintOption xlint : XlintOption.values()) {
+ for (SuppressLevel suppressLevel : SuppressLevel.values()) {
+ for (ResourceUsage usage1 : ResourceUsage.values()) {
+ for (ResourceUsage usage2 : ResourceUsage.values()) {
+ for (ResourceUsage usage3 : ResourceUsage.values()) {
+ test(xlint,
+ suppressLevel,
+ usage1,
+ usage2,
+ usage3);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Create a single file manager and reuse it for each compile to save time.
+ static StandardJavaFileManager fm = JavacTool.create().getStandardFileManager(null, null, null);
+
+ static void test(XlintOption xlint, SuppressLevel suppressLevel, ResourceUsage usage1,
+ ResourceUsage usage2, ResourceUsage usage3) throws Exception {
+ final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
+ JavaSource source = new JavaSource(suppressLevel, usage1, usage2, usage3);
+ DiagnosticChecker dc = new DiagnosticChecker();
+ JavacTask ct = (JavacTask)tool.getTask(null, fm, dc,
+ Arrays.asList(xlint.getXlintOption()), null, Arrays.asList(source));
+ ct.analyze();
+ check(source, xlint, suppressLevel, usage1, usage2, usage3, dc);
+ }
+
+ static void check(JavaSource source, XlintOption xlint, SuppressLevel suppressLevel,
+ ResourceUsage usage1, ResourceUsage usage2, ResourceUsage usage3, DiagnosticChecker dc) {
+
+ ResourceUsage[] usages = { usage1, usage2, usage3 };
+ boolean[] unusedFound = { dc.unused_r1, dc.unused_r2, dc.unused_r3 };
+ boolean[] usedResources = { false, false, false };
+
+ for (TwrStmt res : TwrStmt.values()) {
+ outer: for (TwrStmt stmt : TwrStmt.values()) {
+ for (ResourceUsage usage : usages) {
+ if (usage.isUsedIn(res, stmt)) {
+ usedResources[res.ordinal()] = true;
+ break outer;
+ }
+ }
+ }
+ }
+
+ for (TwrStmt stmt : TwrStmt.values()) {
+ boolean unused = !usedResources[stmt.ordinal()] &&
+ xlint == XlintOption.TRY &&
+ suppressLevel != SuppressLevel.SUPPRESS;
+ if (unused != unusedFound[stmt.ordinal()]) {
+ throw new Error("invalid diagnostics for source:\n" +
+ source.getCharContent(true) +
+ "\nOptions: " + xlint.getXlintOption() +
+ "\nFound unused res1: " + unusedFound[0] +
+ "\nFound unused res2: " + unusedFound[1] +
+ "\nFound unused res3: " + unusedFound[2] +
+ "\nExpected unused res1: " + !usedResources[0] +
+ "\nExpected unused res2: " + !usedResources[1] +
+ "\nExpected unused res3: " + !usedResources[2]);
+ }
+ }
+ }
+
+ static class DiagnosticChecker implements javax.tools.DiagnosticListener<JavaFileObject> {
+
+ boolean unused_r1 = false;
+ boolean unused_r2 = false;
+ boolean unused_r3 = false;
+
+ public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
+ if (diagnostic.getKind() == Diagnostic.Kind.WARNING &&
+ diagnostic.getCode().contains("try.resource.not.referenced")) {
+ String varName = ((JCDiagnostic)diagnostic).getArgs()[0].toString();
+ if (varName.equals(TwrStmt.TWR1.resourceName)) {
+ unused_r1 = true;
+ } else if (varName.equals(TwrStmt.TWR2.resourceName)) {
+ unused_r2 = true;
+ } else if (varName.equals(TwrStmt.TWR3.resourceName)) {
+ unused_r3 = true;
+ }
+ }
+ }
+ }
+}
--- a/langtools/test/tools/javac/api/6557752/T6557752.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/api/6557752/T6557752.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -119,7 +119,7 @@
Types types = task.getTypes();
if (types.asElement(trees.getOriginalType((ErrorType)typeMirror)) != null) {
- throw new AssertionError("Ttypes.asElement() error!");
+ throw new AssertionError("Types.asElement() error!");
}
foundError = true;
}
--- a/langtools/test/tools/javac/diags/ArgTypeCompilerFactory.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/diags/ArgTypeCompilerFactory.java Wed Mar 16 10:47:45 2011 -0400
@@ -34,6 +34,7 @@
import com.sun.tools.javac.code.*;
import com.sun.tools.javac.file.*;
import com.sun.tools.javac.main.Main;
+import com.sun.tools.javac.main.JavaCompiler;
import com.sun.tools.javac.parser.Token;
import com.sun.tools.javac.util.*;
import com.sun.tools.javac.util.AbstractDiagnosticFormatter.SimpleConfiguration;
@@ -107,8 +108,7 @@
JavacTaskImpl t = (JavacTaskImpl) tool.getTask(out, fm, null, opts, null, fos);
Context c = t.getContext();
ArgTypeMessages.preRegister(c);
- Options options = Options.instance(c);
- Log.instance(c).setDiagnosticFormatter(new ArgTypeDiagnosticFormatter(options));
+ ArgTypeJavaCompiler.preRegister(c);
Boolean ok = t.call();
return ok;
@@ -144,7 +144,7 @@
}
};
JavacFileManager.preRegister(c); // can't create it until Log has been set up
- ArgTypeDiagnosticFormatter.preRegister(c);
+ ArgTypeJavaCompiler.preRegister(c);
ArgTypeMessages.preRegister(c);
int result = main.compile(args.toArray(new String[args.size()]), c);
@@ -170,7 +170,7 @@
Context c = new Context();
JavacFileManager.preRegister(c); // can't create it until Log has been set up
- ArgTypeDiagnosticFormatter.preRegister(c);
+ ArgTypeJavaCompiler.preRegister(c);
ArgTypeMessages.preRegister(c);
com.sun.tools.javac.main.Main m = new com.sun.tools.javac.main.Main("javac", out);
int rc = m.compile(args.toArray(new String[args.size()]), c);
@@ -189,17 +189,6 @@
* arg types.
*/
static class ArgTypeDiagnosticFormatter extends AbstractDiagnosticFormatter {
- static void preRegister(final Context context) {
- context.put(Log.logKey, new Context.Factory<Log>() {
- public Log make() {
- Log log = new Log(context) { };
- Options options = Options.instance(context);
- log.setDiagnosticFormatter(new ArgTypeDiagnosticFormatter(options));
- return log;
- }
- });
-
- }
ArgTypeDiagnosticFormatter(Options options) {
super(null, new SimpleConfiguration(options,
@@ -246,14 +235,37 @@
}
/**
+ * 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.
*/
static class ArgTypeMessages extends JavacMessages {
- static void preRegister(final Context c) {
- c.put(JavacMessages.messagesKey, new Context.Factory<JavacMessages>() {
- public JavacMessages make() {
+ static void preRegister(Context context) {
+ context.put(JavacMessages.messagesKey, new Context.Factory<JavacMessages>() {
+ public JavacMessages make(Context c) {
return new ArgTypeMessages(c) {
@Override
public String getLocalizedString(Locale l, String key, Object... args) {
--- a/langtools/test/tools/javac/diags/CheckResourceKeys.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/diags/CheckResourceKeys.java Wed Mar 16 10:47:45 2011 -0400
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 6964768 6964461 6964469 6964487 6964460 6964481
+ * @bug 6964768 6964461 6964469 6964487 6964460 6964481 6980021
* @summary need test program to validate javac resource bundles
*/
--- a/langtools/test/tools/javac/diags/Example.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/diags/Example.java Wed Mar 16 10:47:45 2011 -0400
@@ -486,7 +486,7 @@
if (verbose)
System.err.println("run_simple: " + opts + " " + files);
- List<String> args = new ArrayList<String>(opts);
+ List<String> args = new ArrayList<String>();
if (out != null && raw)
args.add("-XDrawDiagnostics");
@@ -522,10 +522,10 @@
super(context);
}
- static void preRegister(final Context c, final Set<String> keys) {
+ static void preRegister(Context c, final Set<String> keys) {
if (keys != null) {
c.put(JavacMessages.messagesKey, new Context.Factory<JavacMessages>() {
- public JavacMessages make() {
+ public JavacMessages make(Context c) {
return new MessageTracker(c) {
@Override
public String getLocalizedString(Locale l, String key, Object... args) {
--- a/langtools/test/tools/javac/diags/examples.not-yet.txt Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/diags/examples.not-yet.txt Wed Mar 16 10:47:45 2011 -0400
@@ -70,7 +70,6 @@
compiler.misc.kindname.type.variable
compiler.misc.kindname.type.variable.bound
compiler.misc.kindname.value
-compiler.misc.non.denotable.type
compiler.misc.no.unique.minimal.instance.exists
compiler.misc.resume.abort # prompt for a response
compiler.misc.source.unavailable # DiagnosticSource
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/diags/examples/DiamondAndAnonClass.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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.misc.diamond.and.anon.class
+// key: compiler.err.cant.apply.diamond.1
+
+import java.util.*;
+
+class DiamondAndAnonClass {
+ void m() {
+ List<String> list = new ArrayList<>() {};
+ }
+}
--- a/langtools/test/tools/javac/diags/examples/DiamondInvalidArg.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * 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.misc.diamond.invalid.arg
-// key: compiler.misc.diamond
-// key: compiler.err.cant.apply.diamond.1
-
-class DiamondInvalidArg {
- static class Foo<X extends Number & Comparable<Number>> { }
- Foo<?> foo = new Foo<>();
-}
--- a/langtools/test/tools/javac/diags/examples/DiamondInvalidArgs.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * 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.misc.diamond.invalid.args
-// key: compiler.misc.diamond
-// key: compiler.err.cant.apply.diamond.1
-
-class DiamondInvalidArgs {
- static class Foo<X extends Number & Comparable<Number>,
- Y extends Number & Comparable<Number>> { }
- Foo<?,?> foo = new Foo<>();
-}
--- a/langtools/test/tools/javac/generics/6969184/T6969184.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/6969184/T6969184.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,6 +1,6 @@
/*
* @test /nodynamiccopyright/
- * @bug 6956758
+ * @bug 6969184
*
* @summary poor error recovery after symbol not found
* @author Maurizio Cimadamore
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/7015430/T7015430.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,131 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 7015430
+ *
+ * @summary Incorrect thrown type determined for unchecked invocations
+ * @author Daniel Smith
+ * @compile/fail/ref=T7015430.out -Xlint:unchecked -XDrawDiagnostics T7015430.java
+ *
+ */
+
+class T7015430 {
+ static <E extends Exception> Iterable<E> empty(Iterable<E> arg) throws E {
+ return null;
+ }
+
+ <E extends Exception> T7015430(Iterable<E> arg) throws E { }
+
+ static <E extends Exception> Iterable<E> empty2(Iterable x) throws E {
+ return null;
+ }
+
+ static class Foo<X extends Exception> {
+ Foo() throws X {}
+ }
+
+ /**
+ * Method invocation, no unchecked
+ * inferred: RuntimeException - should pass
+ */
+ void m1() {
+ Iterable<RuntimeException> i = java.util.Collections.emptyList();
+ empty(i);
+ }
+
+ /**
+ * Method invocation, unchecked, inferred arguments
+ * inferred: Exception - should fail
+ */
+ void m2() {
+ Iterable i = java.util.Collections.EMPTY_LIST;
+ empty(i);
+ }
+
+ /**
+ * Method invocation, unchecked, explicit arguments
+ * inferred: RuntimeException - should pass
+ */
+ void m3() {
+ Iterable i = java.util.Collections.EMPTY_LIST;
+ T7015430.<RuntimeException>empty(i);
+ }
+
+ /**
+ * Constructor invocation, no unchecked
+ * inferred: RuntimeException - should pass
+ */
+ void m4() {
+ Iterable<RuntimeException> i = java.util.Collections.emptyList();
+ new T7015430(i);
+ }
+
+ /**
+ * Constructor invocation, unchecked, inferred arguments
+ * inferred: Exception - should fail
+ */
+ void m5() {
+ Iterable i = java.util.Collections.EMPTY_LIST;
+ new T7015430(i);
+ }
+
+ /**
+ * Constructor invocation, unchecked, explicit arguments
+ * inferred: RuntimeException - should pass
+ */
+ void m6() {
+ Iterable i = java.util.Collections.EMPTY_LIST;
+ new <RuntimeException>T7015430(i);
+ }
+
+ /**
+ * Method invocation, no unchecked, inferred arguments
+ * inferred: RuntimeException - should pass
+ */
+ void m7() {
+ Iterable i = java.util.Collections.EMPTY_LIST;
+ Iterable<RuntimeException> e = empty2(i);
+ }
+
+ /**
+ * Method invocation, no unchecked, inferred arguments
+ * inferred: Exception - should fail
+ */
+ void m8() {
+ Iterable i = java.util.Collections.EMPTY_LIST;
+ empty2(i);
+ }
+
+ /**
+ * Constructor invocation, unchecked, explicit arguments
+ * inferred: RuntimeException - should pass
+ */
+ void m9() {
+ Iterable i = java.util.Collections.EMPTY_LIST;
+ new <RuntimeException> T7015430(i);
+ }
+
+ /**
+ * Constructor invocation, unchecked, inferred arguments
+ * inferred: Exception - should fail
+ */
+ void m10() {
+ Iterable i = java.util.Collections.EMPTY_LIST;
+ new T7015430(i);
+ }
+
+ /**
+ * Constructor invocation, no unchecked, inferred arguments (diamond)
+ * inferred: RuntimeException - should pass
+ */
+ void m11() {
+ Foo<RuntimeException> o = new Foo<>();
+ }
+
+ /**
+ * Constructor invocation, no unchecked, inferred arguments (diamond)
+ * inferred: Exception - should fail
+ */
+ void m12() {
+ new Foo<>();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/7015430/T7015430.out Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,19 @@
+T7015430.java:41:15: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E>
+T7015430.java:41:14: compiler.warn.unchecked.meth.invocation.applied: kindname.method, empty, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430
+T7015430.java:50:42: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<java.lang.RuntimeException>
+T7015430.java:50:41: compiler.warn.unchecked.meth.invocation.applied: kindname.method, empty, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430
+T7015430.java:68:22: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E>
+T7015430.java:68:9: compiler.warn.unchecked.meth.invocation.applied: kindname.constructor, <init>, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430
+T7015430.java:77:40: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<java.lang.RuntimeException>
+T7015430.java:77:9: compiler.warn.unchecked.meth.invocation.applied: kindname.constructor, <init>, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430
+T7015430.java:104:41: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<java.lang.RuntimeException>
+T7015430.java:104:9: compiler.warn.unchecked.meth.invocation.applied: kindname.constructor, <init>, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430
+T7015430.java:113:22: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E>
+T7015430.java:113:9: compiler.warn.unchecked.meth.invocation.applied: kindname.constructor, <init>, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430
+T7015430.java:41:14: compiler.err.unreported.exception.need.to.catch.or.throw: java.lang.Exception
+T7015430.java:68:9: compiler.err.unreported.exception.need.to.catch.or.throw: java.lang.Exception
+T7015430.java:95:15: compiler.err.unreported.exception.need.to.catch.or.throw: java.lang.Exception
+T7015430.java:113:9: compiler.err.unreported.exception.need.to.catch.or.throw: java.lang.Exception
+T7015430.java:129:9: compiler.err.unreported.exception.need.to.catch.or.throw: java.lang.Exception
+5 errors
+12 warnings
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/7020657/T7020657neg.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,23 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 7020657 6985719
+ *
+ * @summary Javac rejects a fairly common idiom with raw override and interfaces
+ * @author Maurizio Cimadamore
+ * @compile/fail/ref=T7020657neg.out -XDrawDiagnostics T7020657neg.java
+ *
+ */
+
+import java.util.*;
+
+class T7020657neg {
+ interface A {
+ int get(List<String> l);
+ }
+
+ interface B {
+ int get(List<Integer> l);
+ }
+
+ interface C extends A, B { }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/7020657/T7020657neg.out Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,2 @@
+T7020657neg.java:22:5: compiler.err.name.clash.same.erasure.no.override: get(java.util.List<java.lang.Integer>), T7020657neg.B, get(java.util.List<java.lang.String>), T7020657neg.A
+1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/7020657/T7020657pos.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 7020657 6985719
+ *
+ * @summary Javac rejects a fairly common idiom with raw override and interfaces
+ * @author Robert Field
+ * @compile T7020657pos.java
+ *
+ */
+
+import java.util.*;
+
+class T7020657pos {
+ interface A {
+ int get(List<String> l);
+ }
+
+ interface B {
+ int get(List<Integer> l);
+ }
+
+ interface C extends A, B {
+ int get(List l);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/7022054/T7022054neg1.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,17 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 7022054
+ *
+ * @summary Invalid compiler error on covariant overriding methods with the same erasure
+ * @compile/fail/ref=T7022054neg1.out -XDrawDiagnostics T7022054neg1.java
+ *
+ */
+
+class T7022054neg1 {
+ static class A {
+ A m(String s) { return null; }
+ }
+ static class B extends A {
+ <X extends String> A m(X s) { return null; }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/7022054/T7022054neg1.out Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,2 @@
+T7022054neg1.java:15:30: compiler.err.name.clash.same.erasure.no.override: <X>m(X), T7022054neg1.B, m(java.lang.String), T7022054neg1.A, <X>m(X), T7022054neg1.B
+1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/7022054/T7022054neg2.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,17 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 7022054
+ *
+ * @summary Invalid compiler error on covariant overriding methods with the same erasure
+ * @compile/fail/ref=T7022054neg2.out -XDrawDiagnostics T7022054neg2.java
+ *
+ */
+
+class T7022054neg2 {
+ static class A {
+ static A m(String s) { return null; }
+ }
+ static class B extends A {
+ static <X extends String> A m(X s) { return null; }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/7022054/T7022054neg2.out Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,2 @@
+T7022054neg2.java:15:37: compiler.err.name.clash.same.erasure.no.hide: <X>m(X), T7022054neg2.B, m(java.lang.String), T7022054neg2.A
+1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/7022054/T7022054pos1.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 7022054
+ *
+ * @summary Invalid compiler error on covariant overriding methods with the same erasure
+ * @compile T7022054pos1.java
+ *
+ */
+
+class T7022054pos1 {
+ static class A {
+ A m(String s) { return null; }
+ }
+ static class B extends A {
+ <X extends B> X m(String s) { return null; }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/7022054/T7022054pos2.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 7022054
+ *
+ * @summary Invalid compiler error on covariant overriding methods with the same erasure
+ * @compile T7022054pos2.java
+ *
+ */
+
+class T7022054pos2 {
+ static class A {
+ static A m(String s) { return null; }
+ }
+ static class B extends A {
+ static <X extends B> X m(String s) { return null; }
+ }
+}
--- a/langtools/test/tools/javac/generics/diamond/6996914/T6996914a.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/6996914/T6996914a.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 6996914
+ * @bug 6996914 7020044
* @summary Diamond inference: problem when accessing protected constructor
* @run main T6996914a
*/
@@ -53,17 +53,6 @@
}
}
- enum DiamondKind {
- STANDARD("new Foo<>();"),
- ANON("new Foo<>() {};");
-
- String expr;
-
- DiamondKind(String expr) {
- this.expr = expr;
- }
- }
-
enum ConstructorKind {
PACKAGE(""),
PROTECTED("protected"),
@@ -104,14 +93,14 @@
final static String sourceStub =
"#I\n" +
"class Test {\n" +
- " Foo<String> fs = #D\n" +
+ " Foo<String> fs = new Foo<>();\n" +
"}\n";
String source;
- public ClientClass(PackageKind pk, DiamondKind dk) {
+ public ClientClass(PackageKind pk) {
super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
- source = sourceStub.replace("#I", pk.importDecl).replace("#D", dk.expr);
+ source = sourceStub.replace("#I", pk.importDecl);
}
@Override
@@ -123,22 +112,20 @@
public static void main(String... args) throws Exception {
for (PackageKind pk : PackageKind.values()) {
for (ConstructorKind ck : ConstructorKind.values()) {
- for (DiamondKind dk : DiamondKind.values()) {
- compileAndCheck(pk, ck, dk);
- }
+ compileAndCheck(pk, ck);
}
}
}
- static void compileAndCheck(PackageKind pk, ConstructorKind ck, DiamondKind dk) throws Exception {
+ static void compileAndCheck(PackageKind pk, ConstructorKind ck) throws Exception {
FooClass foo = new FooClass(pk, ck);
- ClientClass client = new ClientClass(pk, dk);
+ ClientClass client = new ClientClass(pk);
final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
ErrorListener el = new ErrorListener();
JavacTask ct = (JavacTask)tool.getTask(null, null, el,
null, null, Arrays.asList(foo, client));
ct.analyze();
- if (el.errors > 0 == check(pk, ck, dk)) {
+ if (el.errors > 0 == check(pk, ck)) {
String msg = el.errors > 0 ?
"Error compiling files" :
"No error when compiling files";
@@ -146,10 +133,9 @@
}
}
- static boolean check(PackageKind pk, ConstructorKind ck, DiamondKind dk) {
+ static boolean check(PackageKind pk, ConstructorKind ck) {
switch (pk) {
- case A: return ck == ConstructorKind.PUBLIC ||
- (ck == ConstructorKind.PROTECTED && dk == DiamondKind.ANON);
+ case A: return ck == ConstructorKind.PUBLIC;
case DEFAULT: return ck != ConstructorKind.PRIVATE;
default: throw new AssertionError("Unknown package kind");
}
--- a/langtools/test/tools/javac/generics/diamond/6996914/T6996914b.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/6996914/T6996914b.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 6996914
+ * @bug 6996914 7020044
* @summary Diamond inference: problem when accessing protected constructor
* @compile T6996914b.java
*/
@@ -35,5 +35,4 @@
class Test {
Super<String,Integer> ssi1 = new Super<>(1, "", 2);
- Super<String,Integer> ssi2 = new Super<>(1, "", 2) {};
}
--- a/langtools/test/tools/javac/generics/diamond/T6939780.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/T6939780.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,6 +1,6 @@
/*
* @test /nodynamiccopyright/
- * @bug 6939780
+ * @bug 6939780 7020044
*
* @summary add a warning to detect diamond sites
* @author mcimadamore
--- a/langtools/test/tools/javac/generics/diamond/T6939780.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/T6939780.out Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,3 @@
T6939780.java:19:28: compiler.warn.diamond.redundant.args: Foo<java.lang.Number>, Foo<java.lang.Number>
T6939780.java:20:28: compiler.warn.diamond.redundant.args.1: Foo<java.lang.Integer>, Foo<java.lang.Number>
-T6939780.java:22:28: compiler.warn.diamond.redundant.args: Foo<java.lang.Number>, Foo<java.lang.Number>
-T6939780.java:23:28: compiler.warn.diamond.redundant.args.1: Foo<java.lang.Integer>, Foo<java.lang.Number>
-4 warnings
+2 warnings
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg01.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg01.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,8 +1,9 @@
/*
* @test /nodynamiccopyright/
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary Check that diamond fails when inference violates declared bounds
+ * (basic test with nested class, generic/non-generic constructors)
* @author mcimadamore
* @compile/fail/ref=Neg01.out Neg01.java -XDrawDiagnostics
*
@@ -20,19 +21,9 @@
Neg01<?> n3 = new Neg01<>("");
Neg01<? super String> n4 = new Neg01<>("");
- Neg01<String> n5 = new Neg01<>(""){};
- Neg01<? extends String> n6 = new Neg01<>(""){};
- Neg01<?> n7 = new Neg01<>(""){};
- Neg01<? super String> n8 = new Neg01<>(""){};
-
- Neg01<String> n9 = new Neg01<>("", "");
- Neg01<? extends String> n10 = new Neg01<>("", "");
- Neg01<?> n11 = new Neg01<>("", "");
- Foo<? super String> n12 = new Neg01<>("", "");
-
- Neg01<String> n13 = new Neg01<>("", ""){};
- Neg01<? extends String> n14 = new Neg01<>("", ""){};
- Neg01<?> n15 = new Neg01<>("", ""){};
- Neg01<? super String> n16 = new Neg01<>("", ""){};
+ Neg01<String> n5 = new Neg01<>("", "");
+ Neg01<? extends String> n6 = new Neg01<>("", "");
+ Neg01<?> n7 = new Neg01<>("", "");
+ Foo<? super String> n8 = new Neg01<>("", "");
}
}
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg01.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg01.out Wed Mar 16 10:47:45 2011 -0400
@@ -1,29 +1,15 @@
-Neg01.java:18:15: compiler.err.not.within.bounds: java.lang.String, X
-Neg01.java:18:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:19:15: compiler.err.not.within.bounds: ? extends java.lang.String, X
-Neg01.java:19:38: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:20:23: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:21:15: compiler.err.not.within.bounds: ? super java.lang.String, X
-Neg01.java:21:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:23:15: compiler.err.not.within.bounds: java.lang.String, X
-Neg01.java:23:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:24:15: compiler.err.not.within.bounds: ? extends java.lang.String, X
-Neg01.java:24:38: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:25:23: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:26:15: compiler.err.not.within.bounds: ? super java.lang.String, X
-Neg01.java:26:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:28:15: compiler.err.not.within.bounds: java.lang.String, X
-Neg01.java:28:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:29:15: compiler.err.not.within.bounds: ? extends java.lang.String, X
-Neg01.java:29:39: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:30:24: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:31:9: compiler.err.cant.resolve.location: kindname.class, Foo, , , (compiler.misc.location: kindname.class, Neg01<X>, null)
-Neg01.java:31:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:33:15: compiler.err.not.within.bounds: java.lang.String, X
-Neg01.java:33:29: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:34:15: compiler.err.not.within.bounds: ? extends java.lang.String, X
-Neg01.java:34:39: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:35:24: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-Neg01.java:36:15: compiler.err.not.within.bounds: ? super java.lang.String, X
-Neg01.java:36:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
-28 errors
+Neg01.java:19:15: compiler.err.not.within.bounds: java.lang.String, X
+Neg01.java:19:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
+Neg01.java:20:15: compiler.err.not.within.bounds: ? extends java.lang.String, X
+Neg01.java:20:38: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
+Neg01.java:21:23: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
+Neg01.java:22:15: compiler.err.not.within.bounds: ? super java.lang.String, X
+Neg01.java:22:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
+Neg01.java:24:15: compiler.err.not.within.bounds: java.lang.String, X
+Neg01.java:24:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
+Neg01.java:25:15: compiler.err.not.within.bounds: ? extends java.lang.String, X
+Neg01.java:25:38: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
+Neg01.java:26:23: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
+Neg01.java:27:9: compiler.err.cant.resolve.location: kindname.class, Foo, , , (compiler.misc.location: kindname.class, Neg01<X>, null)
+Neg01.java:27:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null
+14 errors
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg02.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg02.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,8 +1,9 @@
/*
* @test /nodynamiccopyright/
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary Check that diamond fails when inference violates declared bounds
+ * (test with nested class, qualified/simple type expressions)
* @author mcimadamore
* @compile/fail/ref=Neg02.out Neg02.java -XDrawDiagnostics
*
@@ -21,20 +22,10 @@
Foo<?> f3 = new Foo<>("");
Foo<? super String> f4 = new Foo<>("");
- Foo<String> f5 = new Foo<>(""){};
- Foo<? extends String> f6 = new Foo<>(""){};
- Foo<?> f7 = new Foo<>(""){};
- Foo<? super String> f8 = new Foo<>(""){};
-
- Foo<String> f9 = new Foo<>("", "");
- Foo<? extends String> f10 = new Foo<>("", "");
- Foo<?> f11 = new Foo<>("", "");
- Foo<? super String> f12 = new Foo<>("", "");
-
- Foo<String> f13 = new Foo<>("", ""){};
- Foo<? extends String> f14 = new Foo<>("", ""){};
- Foo<?> f15 = new Foo<>("", ""){};
- Foo<? super String> f16 = new Foo<>("", ""){};
+ Foo<String> f5 = new Foo<>("", "");
+ Foo<? extends String> f6 = new Foo<>("", "");
+ Foo<?> f7 = new Foo<>("", "");
+ Foo<? super String> f8 = new Foo<>("", "");
}
void testQualified() {
@@ -43,19 +34,9 @@
Foo<?> f3 = new Neg02.Foo<>("");
Foo<? super String> f4 = new Neg02.Foo<>("");
- Foo<String> f5 = new Neg02.Foo<>(""){};
- Foo<? extends String> f6 = new Neg02.Foo<>(""){};
- Foo<?> f7 = new Neg02.Foo<>(""){};
- Foo<? super String> f8 = new Neg02.Foo<>(""){};
-
- Foo<String> f9 = new Neg02.Foo<>("", "");
- Foo<? extends String> f10 = new Neg02.Foo<>("", "");
- Foo<?> f11 = new Neg02.Foo<>("", "");
- Foo<? super String> f12 = new Neg02.Foo<>("", "");
-
- Foo<String> f13 = new Neg02.Foo<>("", ""){};
- Foo<? extends String> f14 = new Neg02.Foo<>("", ""){};
- Foo<?> f15 = new Neg02.Foo<>("", ""){};
- Foo<? super String> f16 = new Neg02.Foo<>("", ""){};
+ Foo<String> f5 = new Neg02.Foo<>("", "");
+ Foo<? extends String> f6 = new Neg02.Foo<>("", "");
+ Foo<?> f7 = new Neg02.Foo<>("", "");
+ Foo<? super String> f8 = new Neg02.Foo<>("", "");
}
}
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg02.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg02.out Wed Mar 16 10:47:45 2011 -0400
@@ -1,57 +1,29 @@
-Neg02.java:19:13: compiler.err.not.within.bounds: java.lang.String, X
-Neg02.java:19:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:20:13: compiler.err.not.within.bounds: ? extends java.lang.String, X
-Neg02.java:20:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:21:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:22:13: compiler.err.not.within.bounds: ? super java.lang.String, X
-Neg02.java:22:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:24:13: compiler.err.not.within.bounds: java.lang.String, X
-Neg02.java:24:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:25:13: compiler.err.not.within.bounds: ? extends java.lang.String, X
-Neg02.java:25:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:26:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:27:13: compiler.err.not.within.bounds: ? super java.lang.String, X
-Neg02.java:27:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:29:13: compiler.err.not.within.bounds: java.lang.String, X
-Neg02.java:29:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:30:13: compiler.err.not.within.bounds: ? extends java.lang.String, X
-Neg02.java:30:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:31:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:32:13: compiler.err.not.within.bounds: ? super java.lang.String, X
-Neg02.java:32:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:34:13: compiler.err.not.within.bounds: java.lang.String, X
-Neg02.java:34:27: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:35:13: compiler.err.not.within.bounds: ? extends java.lang.String, X
-Neg02.java:35:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:36:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:37:13: compiler.err.not.within.bounds: ? super java.lang.String, X
-Neg02.java:37:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:41:13: compiler.err.not.within.bounds: java.lang.String, X
-Neg02.java:41:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:42:13: compiler.err.not.within.bounds: ? extends java.lang.String, X
-Neg02.java:42:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:43:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:44:13: compiler.err.not.within.bounds: ? super java.lang.String, X
-Neg02.java:44:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:46:13: compiler.err.not.within.bounds: java.lang.String, X
-Neg02.java:46:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:47:13: compiler.err.not.within.bounds: ? extends java.lang.String, X
-Neg02.java:47:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:48:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:49:13: compiler.err.not.within.bounds: ? super java.lang.String, X
-Neg02.java:49:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:51:13: compiler.err.not.within.bounds: java.lang.String, X
-Neg02.java:51:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:52:13: compiler.err.not.within.bounds: ? extends java.lang.String, X
-Neg02.java:52:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:53:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:54:13: compiler.err.not.within.bounds: ? super java.lang.String, X
-Neg02.java:54:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:56:13: compiler.err.not.within.bounds: java.lang.String, X
-Neg02.java:56:27: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:57:13: compiler.err.not.within.bounds: ? extends java.lang.String, X
-Neg02.java:57:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:58:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-Neg02.java:59:13: compiler.err.not.within.bounds: ? super java.lang.String, X
-Neg02.java:59:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
-56 errors
+Neg02.java:20:13: compiler.err.not.within.bounds: java.lang.String, X
+Neg02.java:20:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:21:13: compiler.err.not.within.bounds: ? extends java.lang.String, X
+Neg02.java:21:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:22:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:23:13: compiler.err.not.within.bounds: ? super java.lang.String, X
+Neg02.java:23:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:25:13: compiler.err.not.within.bounds: java.lang.String, X
+Neg02.java:25:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:26:13: compiler.err.not.within.bounds: ? extends java.lang.String, X
+Neg02.java:26:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:27:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:28:13: compiler.err.not.within.bounds: ? super java.lang.String, X
+Neg02.java:28:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:32:13: compiler.err.not.within.bounds: java.lang.String, X
+Neg02.java:32:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:33:13: compiler.err.not.within.bounds: ? extends java.lang.String, X
+Neg02.java:33:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:34:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:35:13: compiler.err.not.within.bounds: ? super java.lang.String, X
+Neg02.java:35:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:37:13: compiler.err.not.within.bounds: java.lang.String, X
+Neg02.java:37:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:38:13: compiler.err.not.within.bounds: ? extends java.lang.String, X
+Neg02.java:38:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:39:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+Neg02.java:40:13: compiler.err.not.within.bounds: ? super java.lang.String, X
+Neg02.java:40:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null
+28 errors
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg03.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg03.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,8 +1,9 @@
/*
* @test /nodynamiccopyright/
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary Check that diamond fails when inference violates declared bounds
+ * (test with inner class, qualified/simple type expressions)
* @author mcimadamore
* @compile/fail/ref=Neg03.out Neg03.java -XDrawDiagnostics
*
@@ -21,20 +22,10 @@
Foo<?> f3 = new Foo<>("");
Foo<? super String> f4 = new Foo<>("");
- Foo<String> f5 = new Foo<>(""){};
- Foo<? extends String> f6 = new Foo<>(""){};
- Foo<?> f7 = new Foo<>(""){};
- Foo<? super String> f8 = new Foo<>(""){};
-
- Foo<String> f9 = new Foo<>("", "");
- Foo<? extends String> f10 = new Foo<>("", "");
- Foo<?> f11 = new Foo<>("", "");
- Foo<? super String> f12 = new Foo<>("", "");
-
- Foo<String> f13 = new Foo<>("", ""){};
- Foo<? extends String> f14 = new Foo<>("", ""){};
- Foo<?> f15 = new Foo<>("", ""){};
- Foo<? super String> f16 = new Foo<>("", ""){};
+ Foo<String> f5 = new Foo<>("", "");
+ Foo<? extends String> f6 = new Foo<>("", "");
+ Foo<?> f7 = new Foo<>("", "");
+ Foo<? super String> f8 = new Foo<>("", "");
}
void testQualified_1() {
@@ -43,20 +34,10 @@
Foo<?> f3 = new Neg03<U>.Foo<>("");
Foo<? super String> f4 = new Neg03<U>.Foo<>("");
- Foo<String> f5 = new Neg03<U>.Foo<>(""){};
- Foo<? extends String> f6 = new Neg03<U>.Foo<>(""){};
- Foo<?> f7 = new Neg03<U>.Foo<>(""){};
- Foo<? super String> f8 = new Neg03<U>.Foo<>(""){};
-
- Foo<String> f9 = new Neg03<U>.Foo<>("", "");
- Foo<? extends String> f10 = new Neg03<U>.Foo<>("", "");
- Foo<?> f11 = new Neg03<U>.Foo<>("", "");
- Foo<? super String> f12 = new Neg03<U>.Foo<>("", "");
-
- Foo<String> f13 = new Neg03<U>.Foo<>("", ""){};
- Foo<? extends String> f14 = new Neg03<U>.Foo<>("", ""){};
- Foo<?> f15 = new Neg03<U>.Foo<>("", ""){};
- Foo<? super String> f16 = new Neg03<U>.Foo<>("", ""){};
+ Foo<String> f5 = new Neg03<U>.Foo<>("", "");
+ Foo<? extends String> f6 = new Neg03<U>.Foo<>("", "");
+ Foo<?> f7 = new Neg03<U>.Foo<>("", "");
+ Foo<? super String> f8 = new Neg03<U>.Foo<>("", "");
}
void testQualified_2(Neg03<U> n) {
@@ -65,19 +46,9 @@
Foo<?> f3 = n.new Foo<>("");
Foo<? super String> f4 = n.new Foo<>("");
- Foo<String> f5 = n.new Foo<>(""){};
- Foo<? extends String> f6 = n.new Foo<>(""){};
- Foo<?> f7 = n.new Foo<>(""){};
- Foo<? super String> f8 = n.new Foo<>(""){};
-
- Foo<String> f9 = n.new Foo<>("", "");
- Foo<? extends String> f10 = n.new Foo<>("", "");
- Foo<?> f11 = n.new Foo<>("", "");
- Foo<? super String> f12 = n.new Foo<>("", "");
-
- Foo<String> f13 = n.new Foo<>("", ""){};
- Foo<? extends String> f14 = n.new Foo<>("", ""){};
- Foo<?> f15 = n.new Foo<>("", ""){};
- Foo<? super String> f16 = n.new Foo<>("", ""){};
+ Foo<String> f5 = n.new Foo<>("", "");
+ Foo<? extends String> f6 = n.new Foo<>("", "");
+ Foo<?> f7 = n.new Foo<>("", "");
+ Foo<? super String> f8 = n.new Foo<>("", "");
}
}
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg03.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg03.out Wed Mar 16 10:47:45 2011 -0400
@@ -1,85 +1,43 @@
-Neg03.java:19:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg03.java:19:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:20:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg03.java:20:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:21:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:22:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg03.java:22:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:24:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg03.java:24:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:25:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg03.java:25:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:26:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:27:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg03.java:27:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:29:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg03.java:29:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:30:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg03.java:30:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:31:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:32:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg03.java:32:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:34:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg03.java:34:27: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:35:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg03.java:35:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:36:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:37:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg03.java:37:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:41:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg03.java:41:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:42:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg03.java:42:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:43:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:44:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg03.java:44:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:46:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg03.java:46:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:47:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
+Neg03.java:20:13: compiler.err.not.within.bounds: java.lang.String, V
+Neg03.java:20:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:21:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
+Neg03.java:21:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:22:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:23:13: compiler.err.not.within.bounds: ? super java.lang.String, V
+Neg03.java:23:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:25:13: compiler.err.not.within.bounds: java.lang.String, V
+Neg03.java:25:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:26:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
+Neg03.java:26:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:27:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:28:13: compiler.err.not.within.bounds: ? super java.lang.String, V
+Neg03.java:28:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:32:13: compiler.err.not.within.bounds: java.lang.String, V
+Neg03.java:32:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:33:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
+Neg03.java:33:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:34:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:35:13: compiler.err.not.within.bounds: ? super java.lang.String, V
+Neg03.java:35:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:37:13: compiler.err.not.within.bounds: java.lang.String, V
+Neg03.java:37:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:38:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
+Neg03.java:38:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:39:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:40:13: compiler.err.not.within.bounds: ? super java.lang.String, V
+Neg03.java:40:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:44:13: compiler.err.not.within.bounds: java.lang.String, V
+Neg03.java:44:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:45:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
+Neg03.java:45:38: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:46:23: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:47:13: compiler.err.not.within.bounds: ? super java.lang.String, V
Neg03.java:47:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:48:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:49:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg03.java:49:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:51:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg03.java:51:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:52:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg03.java:52:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:53:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:54:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg03.java:54:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:56:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg03.java:56:27: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:57:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg03.java:57:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:58:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:59:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg03.java:59:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:63:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg03.java:63:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:64:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg03.java:64:38: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:65:23: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:66:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg03.java:66:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:68:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg03.java:68:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:69:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg03.java:69:38: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:70:23: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:71:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg03.java:71:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:73:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg03.java:73:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:74:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg03.java:74:39: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:75:24: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:76:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg03.java:76:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:78:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg03.java:78:29: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:79:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg03.java:79:39: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:80:24: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-Neg03.java:81:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg03.java:81:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
-84 errors
+Neg03.java:49:13: compiler.err.not.within.bounds: java.lang.String, V
+Neg03.java:49:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:50:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
+Neg03.java:50:38: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:51:23: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+Neg03.java:52:13: compiler.err.not.within.bounds: ? super java.lang.String, V
+Neg03.java:52:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null
+42 errors
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg04.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg04.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,8 +1,9 @@
/*
* @test /nodynamiccopyright/
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary Check that diamond fails when inference violates declared bounds
+ * (test with local class, qualified/simple type expressions)
* @author mcimadamore
* @compile/fail/ref=Neg04.out Neg04.java -XDrawDiagnostics
*
@@ -20,19 +21,9 @@
Foo<?> n3 = new Foo<>("");
Foo<? super String> n4 = new Foo<>("");
- Foo<String> n5 = new Foo<>(""){};
- Foo<? extends String> n6 = new Foo<>(""){};
- Foo<?> n7 = new Foo<>(""){};
- Foo<? super String> n8 = new Foo<>(""){};
-
- Foo<String> n9 = new Foo<>("", "");
- Foo<? extends String> n10 = new Foo<>("", "");
- Foo<?> n11 = new Foo<>("", "");
- Foo<? super String> n12 = new Foo<>("", "");
-
- Foo<String> n13 = new Foo<>("", ""){};
- Foo<? extends String> n14 = new Foo<>("", ""){};
- Foo<?> n15 = new Foo<>("", ""){};
- Foo<? super String> n16 = new Foo<>("", ""){};
+ Foo<String> n5 = new Foo<>("", "");
+ Foo<? extends String> n6 = new Foo<>("", "");
+ Foo<?> n7 = new Foo<>("", "");
+ Foo<? super String> n8 = new Foo<>("", "");
}
}
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg04.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg04.out Wed Mar 16 10:47:45 2011 -0400
@@ -1,29 +1,15 @@
-Neg04.java:18:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg04.java:18:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:19:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg04.java:19:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:20:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:21:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg04.java:21:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:23:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg04.java:23:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:24:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg04.java:24:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:25:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:26:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg04.java:26:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:28:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg04.java:28:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:29:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg04.java:29:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:30:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:31:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg04.java:31:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:33:13: compiler.err.not.within.bounds: java.lang.String, V
-Neg04.java:33:27: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:34:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
-Neg04.java:34:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:35:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-Neg04.java:36:13: compiler.err.not.within.bounds: ? super java.lang.String, V
-Neg04.java:36:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
-28 errors
+Neg04.java:19:13: compiler.err.not.within.bounds: java.lang.String, V
+Neg04.java:19:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
+Neg04.java:20:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
+Neg04.java:20:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
+Neg04.java:21:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
+Neg04.java:22:13: compiler.err.not.within.bounds: ? super java.lang.String, V
+Neg04.java:22:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
+Neg04.java:24:13: compiler.err.not.within.bounds: java.lang.String, V
+Neg04.java:24:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
+Neg04.java:25:13: compiler.err.not.within.bounds: ? extends java.lang.String, V
+Neg04.java:25:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
+Neg04.java:26:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
+Neg04.java:27:13: compiler.err.not.within.bounds: ? super java.lang.String, V
+Neg04.java:27:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null
+14 errors
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg05.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg05.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,8 +1,8 @@
/*
* @test /nodynamiccopyright/
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary Check that usage of rare types doesn't cause spurious diamond diagnostics
* @author mcimadamore
* @compile/fail/ref=Neg05.out Neg05.java -XDrawDiagnostics
*
@@ -21,20 +21,10 @@
Neg05<?>.Foo<?> f3 = new Neg05.Foo<>("");
Neg05<?>.Foo<? super String> f4 = new Neg05.Foo<>("");
- Neg05<?>.Foo<String> f5 = new Neg05.Foo<>(""){};
- Neg05<?>.Foo<? extends String> f6 = new Neg05.Foo<>(""){};
- Neg05<?>.Foo<?> f7 = new Neg05.Foo<>(""){};
- Neg05<?>.Foo<? super String> f8 = new Neg05.Foo<>(""){};
-
- Neg05<?>.Foo<String> f9 = new Neg05.Foo<>("", "");
- Neg05<?>.Foo<? extends String> f10 = new Neg05.Foo<>("", "");
- Neg05<?>.Foo<?> f11 = new Neg05.Foo<>("", "");
- Neg05<?>.Foo<? super String> f12 = new Neg05.Foo<>("", "");
-
- Neg05<?>.Foo<String> f13 = new Neg05.Foo<>("", ""){};
- Neg05<?>.Foo<? extends String> f14 = new Neg05.Foo<>("", ""){};
- Neg05<?>.Foo<?> f15 = new Neg05.Foo<>("", ""){};
- Neg05<?>.Foo<? super String> f16 = new Neg05.Foo<>("", ""){};
+ Neg05<?>.Foo<String> f5 = new Neg05.Foo<>("", "");
+ Neg05<?>.Foo<? extends String> f6 = new Neg05.Foo<>("", "");
+ Neg05<?>.Foo<?> f7 = new Neg05.Foo<>("", "");
+ Neg05<?>.Foo<? super String> f8 = new Neg05.Foo<>("", "");
}
void testRare_2(Neg05 n) {
@@ -43,19 +33,9 @@
Neg05<?>.Foo<?> f3 = n.new Foo<>("");
Neg05<?>.Foo<? super String> f4 = n.new Foo<>("");
- Neg05<?>.Foo<String> f5 = n.new Foo<>(""){};
- Neg05<?>.Foo<? extends String> f6 = n.new Foo<>(""){};
- Neg05<?>.Foo<?> f7 = n.new Foo<>(""){};
- Neg05<?>.Foo<? super String> f8 = n.new Foo<>(""){};
-
- Neg05<?>.Foo<String> f9 = n.new Foo<>("", "");
- Neg05<?>.Foo<? extends String> f10 = n.new Foo<>("", "");
- Neg05<?>.Foo<?> f11 = n.new Foo<>("", "");
- Neg05<?>.Foo<? super String> f12 = n.new Foo<>("", "");
-
- Neg05<?>.Foo<String> f13 = n.new Foo<>("", ""){};
- Neg05<?>.Foo<? extends String> f14 = n.new Foo<>("", ""){};
- Neg05<?>.Foo<?> f15 = n.new Foo<>("", ""){};
- Neg05<?>.Foo<? super String> f16 = n.new Foo<>("", ""){};
+ Neg05<?>.Foo<String> f5 = n.new Foo<>("", "");
+ Neg05<?>.Foo<? extends String> f6 = n.new Foo<>("", "");
+ Neg05<?>.Foo<?> f7 = n.new Foo<>("", "");
+ Neg05<?>.Foo<? super String> f8 = n.new Foo<>("", "");
}
}
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg05.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg05.out Wed Mar 16 10:47:45 2011 -0400
@@ -7,43 +7,19 @@
Neg05.java:22:56: compiler.err.improperly.formed.type.inner.raw.param
Neg05.java:22:43: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo<java.lang.String>, Neg05<?>.Foo<? super java.lang.String>
Neg05.java:24:48: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:24:35: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo<java.lang.String>, Neg05<?>.Foo<java.lang.String>
+Neg05.java:24:35: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo<java.lang.String>, Neg05<?>.Foo<java.lang.String>
Neg05.java:25:58: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:25:45: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo<java.lang.String>, Neg05<?>.Foo<? extends java.lang.String>
+Neg05.java:25:45: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo<java.lang.String>, Neg05<?>.Foo<? extends java.lang.String>
Neg05.java:26:43: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:26:30: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo<java.lang.String>, Neg05<?>.Foo<?>
+Neg05.java:26:30: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo<java.lang.String>, Neg05<?>.Foo<?>
Neg05.java:27:56: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:27:43: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo<java.lang.String>, Neg05<?>.Foo<? super java.lang.String>
-Neg05.java:29:48: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:29:35: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo<java.lang.String>, Neg05<?>.Foo<java.lang.String>
-Neg05.java:30:59: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:30:46: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo<java.lang.String>, Neg05<?>.Foo<? extends java.lang.String>
-Neg05.java:31:44: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:31:31: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo<java.lang.String>, Neg05<?>.Foo<?>
-Neg05.java:32:57: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:32:44: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo<java.lang.String>, Neg05<?>.Foo<? super java.lang.String>
-Neg05.java:34:49: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:34:36: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo<java.lang.String>, Neg05<?>.Foo<java.lang.String>
-Neg05.java:35:59: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:35:46: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo<java.lang.String>, Neg05<?>.Foo<? extends java.lang.String>
-Neg05.java:36:44: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:36:31: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo<java.lang.String>, Neg05<?>.Foo<?>
-Neg05.java:37:57: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:37:44: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo<java.lang.String>, Neg05<?>.Foo<? super java.lang.String>
-Neg05.java:41:37: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:42:47: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:43:32: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:44:45: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:46:37: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:47:47: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:48:32: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:49:45: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:51:37: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:52:48: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:53:33: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:54:46: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:56:38: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:57:48: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:58:33: compiler.err.improperly.formed.type.inner.raw.param
-Neg05.java:59:46: compiler.err.improperly.formed.type.inner.raw.param
-48 errors
+Neg05.java:27:43: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo<java.lang.String>, Neg05<?>.Foo<? super java.lang.String>
+Neg05.java:31:37: compiler.err.improperly.formed.type.inner.raw.param
+Neg05.java:32:47: compiler.err.improperly.formed.type.inner.raw.param
+Neg05.java:33:32: compiler.err.improperly.formed.type.inner.raw.param
+Neg05.java:34:45: compiler.err.improperly.formed.type.inner.raw.param
+Neg05.java:36:37: compiler.err.improperly.formed.type.inner.raw.param
+Neg05.java:37:47: compiler.err.improperly.formed.type.inner.raw.param
+Neg05.java:38:32: compiler.err.improperly.formed.type.inner.raw.param
+Neg05.java:39:45: compiler.err.improperly.formed.type.inner.raw.param
+24 errors
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg06.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg06.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,21 +1,17 @@
/*
* @test /nodynamiccopyright/
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary Check that diamond works where LHS is supertype of RHS (nilary constructor)
* @author mcimadamore
* @compile/fail/ref=Neg06.out Neg06.java -XDrawDiagnostics
*
*/
class Neg06 {
- interface ISuperFoo<X> {}
- interface IFoo<X extends Number> extends ISuperFoo<X> {}
static class CSuperFoo<X> {}
static class CFoo<X extends Number> extends CSuperFoo<X> {}
- ISuperFoo<String> isf = new IFoo<>() {};
CSuperFoo<String> csf1 = new CFoo<>();
- CSuperFoo<String> csf2 = new CFoo<>() {};
}
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg06.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg06.out Wed Mar 16 10:47:45 2011 -0400
@@ -1,4 +1,2 @@
-Neg06.java:18:36: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg06.IFoo), (compiler.misc.infer.no.conforming.instance.exists: X, Neg06.IFoo<X>, Neg06.ISuperFoo<java.lang.String>)
-Neg06.java:19:37: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg06.CFoo), (compiler.misc.infer.no.conforming.instance.exists: X, Neg06.CFoo<X>, Neg06.CSuperFoo<java.lang.String>)
-Neg06.java:20:37: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg06.CFoo), (compiler.misc.infer.no.conforming.instance.exists: X, Neg06.CFoo<X>, Neg06.CSuperFoo<java.lang.String>)
-3 errors
+Neg06.java:16:37: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg06.CFoo), (compiler.misc.infer.no.conforming.instance.exists: X, Neg06.CFoo<X>, Neg06.CSuperFoo<java.lang.String>)
+1 error
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg07.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg07.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,8 +1,8 @@
/*
* @test /nodynamiccopyright/
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary Check that diamond works where LHS is supertype of RHS (1-ary constructor)
* @author mcimadamore
* @compile/fail/ref=Neg07.out Neg07.java -XDrawDiagnostics
*
@@ -15,5 +15,4 @@
}
SuperFoo<String> sf1 = new Foo<>("");
- SuperFoo<String> sf2 = new Foo<>("") {};
}
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg07.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg07.out Wed Mar 16 10:47:45 2011 -0400
@@ -1,3 +1,2 @@
Neg07.java:17:27: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg07.Foo), (compiler.misc.inferred.do.not.conform.to.bounds: java.lang.String, java.lang.Number)
-Neg07.java:18:27: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg07.Foo), (compiler.misc.inferred.do.not.conform.to.bounds: java.lang.String, java.lang.Number)
-2 errors
+1 error
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg08.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg08.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,30 +1,15 @@
/*
* @test /nodynamiccopyright/
- * @bug 6939620 6894753
+ * @bug 7020043 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
- * @author mcimadamore
+ * @summary Check that diamond is not allowed with non-generic class types
+ * @author Rémi Forax
* @compile/fail/ref=Neg08.out Neg08.java -XDrawDiagnostics
*
*/
class Neg08 {
- static class Foo<X> {
- Foo(X x) { }
- }
-
- static class DoubleFoo<X,Y> {
- DoubleFoo(X x,Y y) { }
- }
-
- static class TripleFoo<X,Y,Z> {
- TripleFoo(X x,Y y,Z z) { }
- }
-
- Foo<? extends Integer> fi = new Foo<>(1);
- Foo<?> fw = new Foo<>(fi);
- Foo<? extends Double> fd = new Foo<>(3.0);
- DoubleFoo<?,?> dw = new DoubleFoo<>(fi,fd);
- Foo<String> fs = new Foo<>("one");
- TripleFoo<?,?,?> tw = new TripleFoo<>(fi,fd,fs);
+ public static void main(String[] args) {
+ String s = new String<>("foo");
+ }
}
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg08.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg08.out Wed Mar 16 10:47:45 2011 -0400
@@ -1,4 +1,2 @@
-Neg08.java:25:24: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg08.Foo), (compiler.misc.diamond.invalid.arg: Neg08.Foo<compiler.misc.type.captureof: 1, ? extends java.lang.Integer>, (compiler.misc.diamond: Neg08.Foo))
-Neg08.java:27:38: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg08.DoubleFoo), (compiler.misc.diamond.invalid.args: Neg08.Foo<compiler.misc.type.captureof: 1, ? extends java.lang.Integer>,Neg08.Foo<compiler.misc.type.captureof: 2, ? extends java.lang.Double>, (compiler.misc.diamond: Neg08.DoubleFoo))
-Neg08.java:29:40: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg08.TripleFoo), (compiler.misc.diamond.invalid.args: Neg08.Foo<compiler.misc.type.captureof: 1, ? extends java.lang.Integer>,Neg08.Foo<compiler.misc.type.captureof: 2, ? extends java.lang.Double>, (compiler.misc.diamond: Neg08.TripleFoo))
-3 errors
+Neg08.java:13:27: compiler.err.cant.apply.diamond.1: java.lang.String, (compiler.misc.diamond.non.generic: java.lang.String)
+1 error
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg09.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg09.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,22 +1,25 @@
/*
* @test /nodynamiccopyright/
- * @bug 6939620 6894753
+ * @bug 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
- * @author mcimadamore
+ * @summary Check that diamond is not allowed with anonymous inner class expressions
+ * @author Maurizio Cimadamore
* @compile/fail/ref=Neg09.out Neg09.java -XDrawDiagnostics
*
*/
class Neg09 {
- static class Foo<X extends Number & Comparable<Number>> {}
- static class DoubleFoo<X extends Number & Comparable<Number>,
- Y extends Number & Comparable<Number>> {}
- static class TripleFoo<X extends Number & Comparable<Number>,
- Y extends Number & Comparable<Number>,
- Z> {}
+ class Member<X> {}
+
+ static class Nested<X> {}
- Foo<?> fw = new Foo<>();
- DoubleFoo<?,?> dw = new DoubleFoo<>();
- TripleFoo<?,?,?> tw = new TripleFoo<>();
+ void testSimple() {
+ Member<?> m1 = new Member<>() {};
+ Nested<?> m2 = new Nested<>() {};
+ }
+
+ void testQualified() {
+ Member<?> m1 = this.new Member<>() {};
+ Nested<?> m2 = new Neg09.Nested<>() {};
+ }
}
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg09.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg09.out Wed Mar 16 10:47:45 2011 -0400
@@ -1,4 +1,5 @@
-Neg09.java:19:24: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg09.Foo), (compiler.misc.diamond.invalid.arg: java.lang.Number&java.lang.Comparable<java.lang.Number>, (compiler.misc.diamond: Neg09.Foo))
-Neg09.java:20:38: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg09.DoubleFoo), (compiler.misc.diamond.invalid.args: java.lang.Number&java.lang.Comparable<java.lang.Number>,java.lang.Number&java.lang.Comparable<java.lang.Number>, (compiler.misc.diamond: Neg09.DoubleFoo))
-Neg09.java:21:40: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg09.TripleFoo), (compiler.misc.diamond.invalid.args: java.lang.Number&java.lang.Comparable<java.lang.Number>,java.lang.Number&java.lang.Comparable<java.lang.Number>, (compiler.misc.diamond: Neg09.TripleFoo))
-3 errors
+Neg09.java:17:34: compiler.err.cant.apply.diamond.1: Neg09.Member, (compiler.misc.diamond.and.anon.class: Neg09.Member)
+Neg09.java:18:34: compiler.err.cant.apply.diamond.1: Neg09.Nested, (compiler.misc.diamond.and.anon.class: Neg09.Nested)
+Neg09.java:22:39: compiler.err.cant.apply.diamond.1: Neg09.Member, (compiler.misc.diamond.and.anon.class: Neg09.Member)
+Neg09.java:23:40: compiler.err.cant.apply.diamond.1: Neg09.Nested, (compiler.misc.diamond.and.anon.class: Neg09.Nested)
+4 errors
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg10.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg10.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,8 +1,8 @@
/*
* @test /nodynamiccopyright/
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary Check that 'complex' diamond can infer type that is too specific
* @author mcimadamore
* @compile/fail/ref=Neg10.out Neg10.java -XDrawDiagnostics
*
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg11.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg11.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,8 +1,8 @@
/*
* @test /nodynamiccopyright/
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary Check that unresolved symbols doesn't cause spurious diamond diagnostics
* @author mcimadamore
* @compile/fail/ref=Neg11.out Neg11.java -XDrawDiagnostics
*
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg12.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-/*
- * @test /nodynamiccopyright/
- * @bug 7020043
- *
- * @summary Project Coin: diamond allowed on non-generic type
- * @author Rémi Forax
- * @compile/fail/ref=Neg12.out Neg12.java -XDrawDiagnostics
- *
- */
-
-class DiamondRaw {
- public static void main(String[] args) {
- String s = new String<>("foo");
- }
-}
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg12.out Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-Neg12.java:13:27: compiler.err.cant.apply.diamond.1: java.lang.String, (compiler.misc.diamond.non.generic: java.lang.String)
-1 error
--- a/langtools/test/tools/javac/generics/diamond/pos/Pos01.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/pos/Pos01.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,9 @@
/*
* @test
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary basic test for diamond (generic/non-generic constructors)
* @author mcimadamore
* @compile Pos01.java
* @run main Pos01
@@ -44,20 +44,10 @@
Pos01<?> p3 = new Pos01<>(1);
Pos01<? super Integer> p4 = new Pos01<>(1);
- Pos01<Integer> p5 = new Pos01<>(1){};
- Pos01<? extends Integer> p6 = new Pos01<>(1){};
- Pos01<?> p7 = new Pos01<>(1){};
- Pos01<? super Integer> p8 = new Pos01<>(1){};
-
- Pos01<Integer> p9 = new Pos01<>(1, "");
- Pos01<? extends Integer> p10 = new Pos01<>(1, "");
- Pos01<?> p11 = new Pos01<>(1, "");
- Pos01<? super Integer> p12 = new Pos01<>(1, "");
-
- Pos01<Integer> p13 = new Pos01<>(1, ""){};
- Pos01<? extends Integer> p14= new Pos01<>(1, ""){};
- Pos01<?> p15 = new Pos01<>(1, ""){};
- Pos01<? super Integer> p16 = new Pos01<>(1, ""){};
+ Pos01<Integer> p5 = new Pos01<>(1, "");
+ Pos01<? extends Integer> p6 = new Pos01<>(1, "");
+ Pos01<?> p7 = new Pos01<>(1, "");
+ Pos01<? super Integer> p8 = new Pos01<>(1, "");
}
public static void main(String[] args) {
--- a/langtools/test/tools/javac/generics/diamond/pos/Pos02.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/pos/Pos02.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,9 @@
/*
* @test
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary basic test for diamond (simple/qualified type-expressions)
* @author mcimadamore
* @compile Pos02.java
* @run main Pos02
@@ -44,20 +44,10 @@
Foo<?> f3 = new Foo<>(1);
Foo<? super Integer> f4 = new Foo<>(1);
- Foo<Integer> f5 = new Foo<>(1){};
- Foo<? extends Integer> f6 = new Foo<>(1){};
- Foo<?> f7 = new Foo<>(1){};
- Foo<? super Integer> f8 = new Foo<>(1){};
-
- Foo<Integer> f9 = new Foo<>(1, "");
- Foo<? extends Integer> f10 = new Foo<>(1, "");
- Foo<?> f11 = new Foo<>(1, "");
- Foo<? super Integer> f12 = new Foo<>(1, "");
-
- Foo<Integer> f13 = new Foo<>(1, ""){};
- Foo<? extends Integer> f14 = new Foo<>(1, ""){};
- Foo<?> f15 = new Foo<>(1, ""){};
- Foo<? super Integer> f16 = new Foo<>(1, ""){};
+ Foo<Integer> f5 = new Foo<>(1, "");
+ Foo<? extends Integer> f6 = new Foo<>(1, "");
+ Foo<?> f7 = new Foo<>(1, "");
+ Foo<? super Integer> f8 = new Foo<>(1, "");
}
void testQualified() {
@@ -66,20 +56,10 @@
Foo<?> f3 = new Pos02.Foo<>(1);
Foo<? super Integer> f4 = new Pos02.Foo<>(1);
- Foo<Integer> f5 = new Pos02.Foo<>(1){};
- Foo<? extends Integer> f6 = new Pos02.Foo<>(1){};
- Foo<?> f7 = new Pos02.Foo<>(1){};
- Foo<? super Integer> f8 = new Pos02.Foo<>(1){};
-
- Foo<Integer> f9 = new Pos02.Foo<>(1, "");
- Foo<? extends Integer> f10 = new Pos02.Foo<>(1, "");
- Foo<?> f11 = new Pos02.Foo<>(1, "");
- Foo<? super Integer> f12 = new Pos02.Foo<>(1, "");
-
- Foo<Integer> f13 = new Pos02.Foo<>(1, ""){};
- Foo<? extends Integer> f14 = new Pos02.Foo<>(1, ""){};
- Foo<?> f15 = new Pos02.Foo<>(1, ""){};
- Foo<? super Integer> f16 = new Pos02.Foo<>(1, ""){};
+ Foo<Integer> f5 = new Pos02.Foo<>(1, "");
+ Foo<? extends Integer> f6 = new Pos02.Foo<>(1, "");
+ Foo<?> f7 = new Pos02.Foo<>(1, "");
+ Foo<? super Integer> f8 = new Pos02.Foo<>(1, "");
}
public static void main(String[] args) {
--- a/langtools/test/tools/javac/generics/diamond/pos/Pos03.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/pos/Pos03.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,9 @@
/*
* @test
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary basic test for diamond (simple/qualified type-expressions, member inner)
* @author mcimadamore
* @compile Pos03.java
* @run main Pos03
@@ -45,20 +45,10 @@
Foo<?> f3 = new Foo<>(1);
Foo<? super Integer> f4 = new Foo<>(1);
- Foo<Integer> f5 = new Foo<>(1){};
- Foo<? extends Integer> f6 = new Foo<>(1){};
- Foo<?> f7 = new Foo<>(1){};
- Foo<? super Integer> f8 = new Foo<>(1){};
-
- Foo<Integer> f9 = new Foo<>(1, "");
- Foo<? extends Integer> f10 = new Foo<>(1, "");
- Foo<?> f11 = new Foo<>(1, "");
- Foo<? super Integer> f12 = new Foo<>(1, "");
-
- Foo<Integer> f13 = new Foo<>(1, ""){};
- Foo<? extends Integer> f14 = new Foo<>(1, ""){};
- Foo<?> f15 = new Foo<>(1, ""){};
- Foo<? super Integer> f16 = new Foo<>(1, ""){};
+ Foo<Integer> f5 = new Foo<>(1, "");
+ Foo<? extends Integer> f6 = new Foo<>(1, "");
+ Foo<?> f7 = new Foo<>(1, "");
+ Foo<? super Integer> f8 = new Foo<>(1, "");
}
void testQualified_1() {
@@ -67,20 +57,10 @@
Foo<?> f3 = new Pos03<U>.Foo<>(1);
Foo<? super Integer> f4 = new Pos03<U>.Foo<>(1);
- Foo<Integer> f5 = new Pos03<U>.Foo<>(1){};
- Foo<? extends Integer> f6 = new Pos03<U>.Foo<>(1){};
- Foo<?> f7 = new Pos03<U>.Foo<>(1){};
- Foo<? super Integer> f8 = new Pos03<U>.Foo<>(1){};
-
- Foo<Integer> f9 = new Pos03<U>.Foo<>(1, "");
- Foo<? extends Integer> f10 = new Pos03<U>.Foo<>(1, "");
- Foo<?> f11 = new Pos03<U>.Foo<>(1, "");
- Foo<? super Integer> f12 = new Pos03<U>.Foo<>(1, "");
-
- Foo<Integer> f13 = new Pos03<U>.Foo<>(1, ""){};
- Foo<? extends Integer> f14 = new Pos03<U>.Foo<>(1, ""){};
- Foo<?> f15 = new Pos03<U>.Foo<>(1, ""){};
- Foo<? super Integer> f16 = new Pos03<U>.Foo<>(1, ""){};
+ Foo<Integer> f5 = new Pos03<U>.Foo<>(1, "");
+ Foo<? extends Integer> f6 = new Pos03<U>.Foo<>(1, "");
+ Foo<?> f7 = new Pos03<U>.Foo<>(1, "");
+ Foo<? super Integer> f8 = new Pos03<U>.Foo<>(1, "");
}
void testQualified_2(Pos03<U> p) {
@@ -89,20 +69,10 @@
Foo<?> f3 = p.new Foo<>(1);
Foo<? super Integer> f4 = p.new Foo<>(1);
- Foo<Integer> f5 = p.new Foo<>(1){};
- Foo<? extends Integer> f6 = p.new Foo<>(1){};
- Foo<?> f7 = p.new Foo<>(1){};
- Foo<? super Integer> f8 = p.new Foo<>(1){};
-
- Foo<Integer> f9 = p.new Foo<>(1, "");
- Foo<? extends Integer> f10 = p.new Foo<>(1, "");
- Foo<?> f11 = p.new Foo<>(1, "");
- Foo<? super Integer> f12 = p.new Foo<>(1, "");
-
- Foo<Integer> f13 = p.new Foo<>(1, ""){};
- Foo<? extends Integer> f14 = p.new Foo<>(1, ""){};
- Foo<?> f15 = p.new Foo<>(1, ""){};
- Foo<? super Integer> f16 = p.new Foo<>(1, ""){};
+ Foo<Integer> f5 = p.new Foo<>(1, "");
+ Foo<? extends Integer> f6 = p.new Foo<>(1, "");
+ Foo<?> f7 = p.new Foo<>(1, "");
+ Foo<? super Integer> f8 = p.new Foo<>(1, "");
}
public static void main(String[] args) {
--- a/langtools/test/tools/javac/generics/diamond/pos/Pos04.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/pos/Pos04.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,9 @@
/*
* @test
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary basic test for diamond (simple/qualified type-expressions, local class)
* @author mcimadamore
* @compile Pos04.java
* @run main Pos04
@@ -44,20 +44,10 @@
Foo<?> p3 = new Foo<>(1);
Foo<? super Integer> p4 = new Foo<>(1);
- Foo<Integer> p5 = new Foo<>(1){};
- Foo<? extends Integer> p6 = new Foo<>(1){};
- Foo<?> p7 = new Foo<>(1){};
- Foo<? super Integer> p8 = new Foo<>(1){};
-
- Foo<Integer> p9 = new Foo<>(1, "");
- Foo<? extends Integer> p10 = new Foo<>(1, "");
- Foo<?> p11 = new Foo<>(1, "");
- Foo<? super Integer> p12 = new Foo<>(1, "");
-
- Foo<Integer> p13 = new Foo<>(1, ""){};
- Foo<? extends Integer> p14 = new Foo<>(1, ""){};
- Foo<?> p15 = new Foo<>(1, ""){};
- Foo<? super Integer> p16 = new Foo<>(1, ""){};
+ Foo<Integer> p5 = new Foo<>(1, "");
+ Foo<? extends Integer> p6 = new Foo<>(1, "");
+ Foo<?> p7 = new Foo<>(1, "");
+ Foo<? super Integer> p8 = new Foo<>(1, "");
}
public static void main(String[] args) {
--- a/langtools/test/tools/javac/generics/diamond/pos/Pos05.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/generics/diamond/pos/Pos05.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,9 @@
/*
* @test
- * @bug 6939620
+ * @bug 6939620 7020044
*
- * @summary Switch to 'complex' diamond inference scheme
+ * @summary Check that 'complex' inference sometimes works in method context
* @author mcimadamore
* @compile Pos05.java
*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/diamond/pos/Pos06.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6939620 6894753 7020044
+ *
+ * @summary Diamond and subtyping
+ * @author mcimadamore
+ * @compile Pos06.java
+ *
+ */
+
+class Pos06 {
+ static class Foo<X> {
+ Foo(X x) { }
+ }
+
+ static class DoubleFoo<X,Y> {
+ DoubleFoo(X x,Y y) { }
+ }
+
+ static class TripleFoo<X,Y,Z> {
+ TripleFoo(X x,Y y,Z z) { }
+ }
+
+ Foo<? extends Integer> fi = new Foo<>(1);
+ Foo<?> fw = new Foo<>(fi);
+ Foo<? extends Double> fd = new Foo<>(3.0);
+ DoubleFoo<?,?> dw = new DoubleFoo<>(fi,fd);
+ Foo<String> fs = new Foo<>("one");
+ TripleFoo<?,?,?> tw = new TripleFoo<>(fi,fd,fs);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/diamond/pos/Pos07.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6939620 6894753 7020044
+ *
+ * @summary Diamond and intersection types
+ * @author mcimadamore
+ * @compile Pos07.java
+ *
+ */
+
+class Pos07 {
+ static class Foo<X extends Number & Comparable<Number>> {}
+ static class DoubleFoo<X extends Number & Comparable<Number>,
+ Y extends Number & Comparable<Number>> {}
+ static class TripleFoo<X extends Number & Comparable<Number>,
+ Y extends Number & Comparable<Number>,
+ Z> {}
+
+ Foo<?> fw = new Foo<>();
+ DoubleFoo<?,?> dw = new DoubleFoo<>();
+ TripleFoo<?,?,?> tw = new TripleFoo<>();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/inference/T7015715.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 7015715
+ *
+ * @summary lub gets stuck on type with complex supertype
+ * @author Neal Gafter
+ * @compile T7015715.java
+ *
+ */
+
+class T7015715 {
+
+ interface I<T> {}
+
+ interface A<T> extends I<A<A<T>>>{}
+
+ static abstract class X {
+ abstract <T> T foo(T x, T y);
+ void bar(A<Integer> x, A<String> y){
+ foo(x, y);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/implicitThis/6541876/T6541876a.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6541876
+ * @summary "Enclosing Instance" error new in 1.6
+ *
+ */
+
+public class T6541876a {
+ class X {
+ class Y {}
+ }
+
+ class A extends X {
+ class B extends X.Y {}
+ }
+
+ public static void main(String[] args) {
+ new T6541876a().new A().new B();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/implicitThis/6541876/T6541876b.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6541876 6569091
+ * @summary "Enclosing Instance" error new in 1.6
+ *
+ */
+
+public class T6541876b {
+
+ enum ENUM {
+ ENUM_CONST {
+ public AbstractClass method() {
+ return new AbstractClass() {
+ public boolean method() {
+ return true;
+ }
+ };
+ }
+ };
+
+ public abstract AbstractClass method();
+
+ private abstract class AbstractClass {
+ public abstract boolean method();
+ }
+ }
+
+ public static void main(String[] args) {
+ ENUM.ENUM_CONST.method();
+ }
+}
--- a/langtools/test/tools/javac/implicitThis/NewBeforeOuterConstructed3.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/implicitThis/NewBeforeOuterConstructed3.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
* 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,7 +25,6 @@
* @test
* @bug 4704371 6313120
* @summary compiler generates unverifiable code for implicit reference to uninit'd this
- * @compile/fail NewBeforeOuterConstructed3.java
*/
public class NewBeforeOuterConstructed3 {
--- a/langtools/test/tools/javac/multicatch/Neg05.java Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * @test /nodynamiccopyright/
- * @bug 6943289
- *
- * @summary Project Coin: Improved Exception Handling for Java (aka 'multicatch')
- * @author mcimadamore
- * @compile/fail/ref=Neg05.out -XDrawDiagnostics Neg05.java
- *
- */
-
-class Neg02 {
-
- static class Foo<X> {
- Foo(X x) {}
- }
-
- static interface Base<X> {}
- static class A extends Exception implements Base<String> {}
- static class B extends Exception implements Base<Integer> {}
-
- void m() {
- try {
- if (true) {
- throw new A();
- }
- else {
- throw new B();
- }
- } catch (A | B ex) {
- Foo<?> f = new Foo<>(ex);
- }
- }
-}
--- a/langtools/test/tools/javac/multicatch/Neg05.out Thu Mar 10 14:56:11 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-Neg05.java:30:31: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg02.Foo), (compiler.misc.diamond.invalid.arg: java.lang.Exception&Neg02.Base<? extends java.lang.Object&java.io.Serializable&java.lang.Comparable<? extends java.lang.Object&java.io.Serializable&java.lang.Comparable<?>>>, (compiler.misc.diamond: Neg02.Foo))
-1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/multicatch/Pos09.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6943289 7020044
+ *
+ * @summary Project Coin: Improved Exception Handling for Java (aka 'multicatch')
+ * @author mcimadamore
+ * @compile Pos09.java
+ *
+ */
+
+class Pos09 {
+
+ static class Foo<X> {
+ Foo(X x) {}
+ }
+
+ static interface Base<X> {}
+ static class A extends Exception implements Base<String> {}
+ static class B extends Exception implements Base<Integer> {}
+
+ void m() {
+ try {
+ if (true) {
+ throw new A();
+ }
+ else {
+ throw new B();
+ }
+ } catch (A | B ex) {
+ Foo<?> f = new Foo<>(ex);
+ }
+ }
+}
--- a/langtools/test/tools/javac/nested/4903103/T4903103.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/nested/4903103/T4903103.java Wed Mar 16 10:47:45 2011 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
* 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,11 +25,14 @@
* @test
* @bug 4903103
* @summary Can't compile subclasses of inner classes
- * @compile T4903103.java
*/
public class T4903103 {
private class InnerSuperclass extends T4903103 {}
private class InnerSubclass extends InnerSuperclass {}
+
+ public static void main(String[] args) {
+ new T4903103().new InnerSubclass();
+ }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/options/T6900037.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * 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 6900037
+ * @summary javac should warn if earlier -source is used and bootclasspath not set
+ * @compile T6900037.java
+ * @compile -source 1.6 T6900037.java
+ * @compile/fail/ref=T6900037.out -XDrawDiagnostics -Werror -source 1.6 T6900037.java
+ * @compile -Werror -source 1.6 -Xlint:-options T6900037.java
+ */
+
+class T6900037 { }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/options/T6900037.out Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,4 @@
+- compiler.warn.source.no.bootclasspath: 1.6
+- compiler.err.warnings.and.werror
+1 error
+1 warning
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/options/T6986895.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6986895
+ * @summary compiler gives misleading message for no input files
+ */
+
+import java.io.*;
+import java.util.*;
+
+public class T6986895 {
+ public static void main(String... args) throws Exception {
+ new T6986895().run();
+ }
+
+ String noSourceFiles = "no source files";
+ String noSourceFilesOrClasses = "no source files or class names";
+
+ void run() throws Exception {
+ Locale prev = Locale.getDefault();
+ try {
+ Locale.setDefault(Locale.ENGLISH);
+ test(noSourceFiles, "-Werror");
+ test(noSourceFilesOrClasses, "-Werror", "-Xprint");
+ } finally {
+ Locale.setDefault(prev);
+ }
+ }
+
+ void test(String expect, String... args) throws Exception {
+ System.err.println("Test " + expect + ": " + Arrays.asList(args));
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ int rc = com.sun.tools.javac.Main.compile(args, pw);
+ pw.close();
+ System.err.println("compilation failed; rc=" + rc);
+ String out = sw.toString();
+ if (!out.isEmpty())
+ System.err.println(out);
+ if (!out.contains(expect))
+ throw new Exception("expected text not found: " + expect);
+ System.err.println();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/options/T7022337.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 7022337
+ * @summary repeated warnings about bootclasspath not set
+ * @library ../lib
+ * @build JavacTestingAbstractProcessor T7022337
+ * @run main T7022337
+ */
+
+import java.io.*;
+import java.util.*;
+import javax.annotation.processing.*;
+import javax.lang.model.element.*;
+import javax.tools.*;
+
+public class T7022337 extends JavacTestingAbstractProcessor {
+ public static void main(String... args) throws Exception {
+ new T7022337().run();
+ }
+
+ void run() throws Exception {
+ String myName = T7022337.class.getSimpleName();
+ File testSrc = new File(System.getProperty("test.src"));
+ File file = new File(testSrc, myName + ".java");
+
+ String out = compile(
+ "-XDrawDiagnostics",
+ "-d", ".",
+ "-processor", myName,
+ "-source", "6", // explicit use of older source value without bootclasspath
+ file.getPath());
+
+ int count = 0;
+ for (String line: out.split("[\r\n]+")) {
+ if (line.contains("compiler.warn.source.no.bootclasspath"))
+ count++;
+ }
+ if (count != 1)
+ throw new Exception("unexpected number of warnings found: " + count + ", expected: 1");
+ }
+
+ String compile(String... args) throws Exception {
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ int rc = com.sun.tools.javac.Main.compile(args, pw);
+ pw.close();
+ String out = sw.toString();
+ if (!out.isEmpty())
+ System.err.println(out);
+ if (rc != 0)
+ throw new Exception("compilation failed unexpectedly: rc=" + rc);
+ return out;
+ }
+
+ // ----------
+
+ int round = 0;
+
+ @Override
+ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+ round++;
+
+ final int MAXROUNDS = 3;
+ if (round < MAXROUNDS)
+ generate("Gen" + round);
+
+ return true;
+ }
+
+ void generate(String name) {
+ try {
+ JavaFileObject fo = filer.createSourceFile(name);
+ Writer out = fo.openWriter();
+ try {
+ out.write("class " + name + " { }");
+ } finally {
+ out.close();
+ }
+ } catch (IOException e) {
+ throw new Error(e);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/TestWarnErrorCount.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,340 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 7022337
+ * @summary repeated warnings about bootclasspath not set
+ * @library ../lib
+ * @build JavacTestingAbstractProcessor TestWarnErrorCount
+ * @run main TestWarnErrorCount
+ */
+
+import java.io.*;
+import java.util.*;
+import javax.annotation.processing.*;
+import javax.lang.model.element.*;
+import javax.tools.*;
+
+@SupportedOptions({"errKind", "msgrWarnKind", "javaWarnKind"})
+public class TestWarnErrorCount extends JavacTestingAbstractProcessor {
+ public static void main(String... args) throws Exception {
+ new TestWarnErrorCount().run(args);
+ }
+
+ final int MAX_GEN = 10;
+ final int ERROR_ROUND = MAX_GEN / 2; // when to generate error
+
+ /**
+ * Type of errors to generate in test case.
+ */
+ enum ErrorKind {
+ /** No errors. */
+ NONE,
+ /** Source code errors. */
+ JAVA,
+ /** Errors reported to Messager. */
+ MESSAGER,
+ /** Error as a result of using -Werror. */
+ WERROR,
+ }
+
+ /**
+ * Frequency of warnings in test case.
+ */
+ enum WarnKind {
+ /** No warnings. */
+ NONE {
+ boolean warn(int round) { return false; }
+ int count(int start, int end) { return 0; }
+ },
+ /** Generate a warning if round count is a multiple of 2. */
+ EVERY_TWO {
+ boolean warn(int round) { return (round % 2) == 0; }
+ int count(int start, int end) { return (end / 2) - ((start - 1)/ 2); }
+ },
+ /** Generate a warning if round count is a multiple of 3. */
+ EVERY_THREE {
+ boolean warn(int round) { return (round % 3) == 0; }
+ int count(int start, int end) { return (end / 3) - ((start - 1)/ 3); }
+ },
+ /** Generate a warning every round. */
+ ALL {
+ boolean warn(int round) { return true; }
+ int count(int start, int end) { return (end - start + 1); }
+ };
+
+ /** whether to generate a warning in round 'round'. */
+ abstract boolean warn(int round);
+
+ /** number of warnings generated in a range of rounds, inclusive. */
+ abstract int count(int start, int end);
+ }
+
+
+ /**
+ * Run test.
+ * @param args provide ability to specify particular test cases for debugging.
+ */
+ void run(String... args) throws Exception {
+ for (String arg: args) {
+ if (arg.matches("[0-9]+")) {
+ if (testCases == null)
+ testCases = new HashSet<Integer>();
+ testCases.add(Integer.valueOf(arg));
+ } else if (arg.equals("-stopOnError")) {
+ stopOnError = true;
+ } else
+ throw new IllegalArgumentException(arg);
+ }
+
+ run ();
+
+ if (errors > 0)
+ throw new Exception(errors + " errors found");
+ }
+
+ /**
+ * Run test.
+ */
+ void run() throws Exception {
+ for (ErrorKind ek: ErrorKind.values()) {
+ for (WarnKind mwk: WarnKind.values()) {
+ for (WarnKind jwk: WarnKind.values()) {
+ test(ek, mwk, jwk);
+ if (stopOnError && errors > 0)
+ throw new Exception(errors + " errors found");
+ }
+ }
+ }
+ }
+
+ boolean stopOnError;
+ Set<Integer> testCases;
+ int testNum = 0;
+
+ /**
+ * Run a test case.
+ * @param ek The type of errors to generate
+ * @param mwk The frequency of Messager warnings to generate
+ * @param jwk The frequency of Java warnings to generate
+ */
+ void test(ErrorKind ek, WarnKind mwk, WarnKind jwk) {
+ testNum++;
+
+ if (testCases != null && !testCases.contains(testNum))
+ return;
+
+ System.err.println("Test " + testNum + ": ek:" + ek + " mwk:" + mwk + " jwk:" + jwk);
+
+ File testDir = new File("test" + testNum);
+ testDir.mkdirs();
+
+ String myName = TestWarnErrorCount.class.getSimpleName();
+ File testSrc = new File(System.getProperty("test.src"));
+ File file = new File(testSrc, myName + ".java");
+
+ List<String> args = new ArrayList<String>();
+ args.addAll(Arrays.asList(
+ "-XDrawDiagnostics",
+ "-d", testDir.getPath(),
+ "-processor", myName,
+// "-XprintRounds",
+ "-Xlint:all,-path",
+ "-AerrKind=" + ek,
+ "-AmsgrWarnKind=" + mwk,
+ "-AjavaWarnKind=" + jwk));
+ if (ek == ErrorKind.WERROR)
+ args.add("-Werror");
+ args.add(file.getPath());
+
+ String out = compile(args.toArray(new String[args.size()]));
+
+ int errsFound = 0;
+ int errsReported = 0;
+ int warnsFound = 0;
+ int warnsReported = 0;
+
+ // Scan the output looking for messages of interest.
+
+ for (String line: out.split("[\r\n]+")) {
+ if (line.contains("compiler.err.")) {
+ errsFound++;
+ } else if (line.contains("compiler.warn.")) {
+ warnsFound++;
+ } else if (line.matches("[0-9]+ error(?:s?)")) {
+ errsReported = Integer.valueOf(line.substring(0, line.indexOf("error")).trim());
+ } else if (line.matches("[0-9]+ warning(?:s?)")) {
+ warnsReported = Integer.valueOf(line.substring(0, line.indexOf("warning")).trim());
+ }
+ }
+
+ // Compute the expected number of errors and warnings, based on
+ // the test case parameters.
+ // This is highly specific to the annotation processor below, and to
+ // the files it generates.
+ // Generally, the rules are:
+ // -- errors stop annotation processing, allowing for one extra "last round"
+ // -- messager warnings are immediate
+ // -- javac warnings are not shown before the final compilation
+ // (FIXME? -Werror does not stop processing for java warnings)
+ int errsExpected;
+ int msgrWarnsExpected;
+ int javaWarnsExpected;
+ switch (ek) {
+ case NONE:
+ errsExpected = 0;
+ msgrWarnsExpected = mwk.count(1, 1 + MAX_GEN + 1);
+ javaWarnsExpected = jwk.count(2, 1 + MAX_GEN);
+ break;
+ case MESSAGER:
+ errsExpected = 1;
+ msgrWarnsExpected = mwk.count(1, ERROR_ROUND + 1);
+ javaWarnsExpected = 0;
+ break;
+ case JAVA:
+ errsExpected = 2;
+ msgrWarnsExpected = mwk.count(1, ERROR_ROUND + 1);
+ javaWarnsExpected = 0;
+ break;
+ case WERROR:
+ errsExpected = (mwk != WarnKind.NONE || jwk != WarnKind.NONE) ? 1 : 0;
+ switch (mwk) {
+ case NONE:
+ msgrWarnsExpected = 0;
+ javaWarnsExpected = (jwk == WarnKind.NONE)
+ ? 0
+ : 1; // this is surprising: javac only reports warning in first file
+ break;
+ case EVERY_TWO:
+ msgrWarnsExpected = mwk.count(1, 2 + 1);
+ javaWarnsExpected = 0;
+ break;
+ case EVERY_THREE:
+ msgrWarnsExpected = mwk.count(1, 3 + 1);
+ javaWarnsExpected = 0;
+ break;
+ case ALL:
+ msgrWarnsExpected = mwk.count(1, 1 + 1);
+ javaWarnsExpected = 0;
+ break;
+ default:
+ throw new IllegalStateException();
+ }
+ break;
+ default:
+ throw new IllegalStateException();
+ }
+
+ int warnsExpected = msgrWarnsExpected + javaWarnsExpected;
+ System.err.println("mwk: " + msgrWarnsExpected
+ + ", jwk: " + javaWarnsExpected
+ + ", total: " + warnsExpected);
+
+ boolean ok;
+ ok = checkEqual("errors", "reported", errsFound, errsReported);
+ ok &= checkEqual("errors", "expected", errsFound, errsExpected);
+ ok &= checkEqual("warnings", "reported", warnsFound, warnsReported);
+ ok &= checkEqual("warnings", "expected", warnsFound, warnsExpected);
+ if (ok)
+ System.err.println("OK");
+
+ System.err.println();
+ }
+
+ String compile(String... args) {
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ int rc = com.sun.tools.javac.Main.compile(args, pw);
+ pw.close();
+ String out = sw.toString();
+ if (!out.isEmpty())
+ System.err.println(out);
+ if (rc != 0)
+ System.err.println("compilation failed: rc=" + rc);
+ return out;
+ }
+
+ boolean checkEqual(String l1, String l2, int i1, int i2) {
+ if (i1 != i2)
+ error("number of " + l1 + " found, " + i1 + ", does not match number " + l2 + ", " + i2);
+ return (i1 == i2);
+ }
+
+ void error(String msg) {
+ System.err.println("Error: " + msg);
+ errors++;
+ }
+
+ int errors = 0;
+
+ // ----- Annotation processor -----
+
+ int round = 0;
+
+ @Override
+ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+ round++;
+
+ ErrorKind ek = ErrorKind.valueOf(options.get("errKind"));
+ WarnKind mwk = WarnKind.valueOf(options.get("msgrWarnKind"));
+ WarnKind jwk = WarnKind.valueOf(options.get("javaWarnKind"));
+ messager.printMessage(Diagnostic.Kind.NOTE,
+ "Round " + round
+ + " " + roundEnv.getRootElements()
+ + ", last round: " + roundEnv.processingOver());
+ messager.printMessage(Diagnostic.Kind.NOTE,
+ "ek: " + ek + ", mwk: " + mwk + ", jwk: " + jwk);
+
+ if (round <= MAX_GEN && !roundEnv.processingOver())
+ generate("Gen" + round,
+ (ek == ErrorKind.JAVA) && (round == ERROR_ROUND),
+ jwk.warn(round));
+
+ if (mwk.warn(round))
+ messager.printMessage(Diagnostic.Kind.WARNING, "round " + round);
+
+ if ((ek == ErrorKind.MESSAGER) && (round == ERROR_ROUND))
+ messager.printMessage(Diagnostic.Kind.ERROR, "round " + round);
+
+ return true;
+ }
+
+ void generate(String name, boolean error, boolean warn) {
+ try {
+ JavaFileObject fo = filer.createSourceFile(name);
+ Writer out = fo.openWriter();
+ try {
+ out.write("class " + name + " {\n"
+ + (warn ? " int i = (int) 0;\n" : "")
+ + (error ? " ERROR\n" : "")
+ + "}\n");
+ } finally {
+ out.close();
+ }
+ } catch (IOException e) {
+ throw new Error(e);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/TestSymtabItems.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,221 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 7021183
+ * @summary 269: assertion failure getting enclosing element of an undefined name
+ */
+
+import java.lang.reflect.Field;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.TypeParameterElement;
+import javax.lang.model.element.UnknownElementException;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.UnknownTypeException;
+import javax.lang.model.util.ElementScanner7;
+import javax.lang.model.util.SimpleTypeVisitor7;
+import javax.lang.model.util.Types;
+
+import com.sun.tools.javac.code.Symbol.ClassSymbol;
+import com.sun.tools.javac.code.Symtab;
+import com.sun.tools.javac.file.JavacFileManager;
+import com.sun.tools.javac.model.JavacTypes;
+import com.sun.tools.javac.util.Context;
+
+/**
+ * Scan javac Symtab looking for TypeMirrors and Elements, and ensure that
+ * no exceptions are thrown when used with javax.lang.model visitors.
+ *
+ */
+public class TestSymtabItems {
+ public static void main(String... args) throws Exception {
+ new TestSymtabItems().run();
+ }
+
+ void run() throws Exception {
+ Context c = new Context();
+ JavacFileManager.preRegister(c);
+ Symtab syms = Symtab.instance(c);
+ JavacTypes types = JavacTypes.instance(c);
+
+// print("noSymbol", syms.noSymbol);
+// print("errSymbol", syms.errSymbol);
+// print("unknownSymbol", syms.unknownSymbol);
+// print("botType", syms.botType);
+// print("errType", syms.errType);
+// print("unknownType", syms.unknownType);
+
+ for (Field f: Symtab.class.getDeclaredFields()) {
+// System.err.println(f.getType() + " " + f.getName());
+
+ // Temporarily ignore methodHandle and transientMethodHandle
+ // during API evolution
+ if (f.getName().toLowerCase().contains("methodhandle"))
+ continue;
+
+ Class<?> ft = f.getType();
+ if (TypeMirror.class.isAssignableFrom(ft))
+ print(f.getName(), (TypeMirror) f.get(syms), types);
+ else if(Element.class.isAssignableFrom(ft))
+ print(f.getName(), (Element) f.get(syms));
+ }
+
+ if (errors > 0)
+ throw new Exception(errors + " errors occurred");
+ }
+
+ void print(String label, Element e) {
+ ElemPrinter ep = new ElemPrinter();
+ System.err.println("Test " + label);
+ ep.visit(e);
+ System.err.println();
+ }
+
+ void print(String label, TypeMirror t, Types types) {
+ TypePrinter tp = new TypePrinter();
+ System.err.println("Test " + label);
+ tp.visit(t, types);
+ System.err.println();
+ }
+
+ void error(String msg) {
+ System.err.println("Error: " + msg);
+ errors++;
+ }
+
+ int errors;
+
+ class ElemPrinter extends ElementScanner7<Void, Void> {
+ @Override
+ public Void visitPackage(PackageElement e, Void p) {
+ show("package", e);
+ indent(+1);
+ super.visitPackage(e, p);
+ indent(-1);
+ return null;
+ }
+
+ @Override
+ public Void visitType(TypeElement e, Void p) {
+ show("type", e);
+ indent(+1);
+ super.visitType(e, p);
+ indent(-1);
+ return null;
+ }
+
+ @Override
+ public Void visitVariable(VariableElement e, Void p) {
+ show("variable", e);
+ indent(+1);
+ super.visitVariable(e, p);
+ indent(-1);
+ return null;
+ }
+
+ @Override
+ public Void visitExecutable(ExecutableElement e, Void p) {
+ show("executable", e);
+ indent(+1);
+ super.visitExecutable(e, p);
+ indent(-1);
+ return null;
+ }
+
+ @Override
+ public Void visitTypeParameter(TypeParameterElement e, Void p) {
+ show("type parameter", e);
+ indent(+1);
+ super.visitTypeParameter(e, p);
+ indent(-1);
+ return null;
+ }
+
+ @Override
+ public Void visitUnknown(Element e, Void p) {
+ show("unknown", e);
+ indent(+1);
+ try {
+ super.visitUnknown(e, p);
+ } catch (UnknownElementException ex) {
+ System.err.println("caught " + ex);
+ }
+ indent(-1);
+ return null;
+ }
+
+ void indent(int i) {
+ indent += i;
+ }
+
+ String sp(int w) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < w; i++)
+ sb.append(" ");
+ return sb.toString();
+ }
+
+ void show(String label, Element e) {
+ System.err.println(sp(indent) + label
+ + ": mods:" + e.getModifiers()
+ + " " + e.getSimpleName()
+ + ", kind: " + e.getKind()
+ + ", type: " + e.asType()
+ + ", encl: " + e.getEnclosingElement());
+
+ // The following checks help establish why NPE might occur when trying to scan children
+ if (e instanceof ClassSymbol) {
+ ClassSymbol csym = (ClassSymbol) e;
+ if (csym.members_field == null)
+ error("members_field is null");
+ if (csym.type == null)
+ System.err.println("type is null");
+ }
+ }
+
+ int indent;
+ };
+
+ class TypePrinter extends SimpleTypeVisitor7<Void, Types> {
+ @Override
+ public Void defaultAction(TypeMirror m, Types types) {
+ System.err.println(m.getKind() + " " + m + " " + types.asElement(m));
+ return null;
+ }
+
+ @Override
+ public Void visitUnknown(TypeMirror t, Types types) {
+ try {
+ return super.visitUnknown(t, types);
+ } catch (UnknownTypeException ex) {
+ System.err.println("caught " + ex);
+ return null;
+ }
+ }
+ };
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/element/TestMissingElement/InvalidSource.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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.*;
+
+@interface ExpectInterfaces {
+ String value();
+}
+
+@interface ExpectSupertype {
+ String value();
+}
+
+interface OK {
+ void m();
+}
+
+class InvalidSource {
+ /*
+ * The following annotations contain a simple description of the expected
+ * representation of the superclass and superinterfaces of the corresponding
+ * elements.
+ * The strings contain a comma-separated list of descriptions.
+ * Descriptions are composed as follows:
+ * A leading "!:" indicates the type mirror has kind ERROR.
+ * "empty" means that the corresponding element has no enclosed elements.
+ * "clss", "intf" and "tvar" indicate the name refers to a class, interface
+ * or type variable. Each is followed by the declared name of the element.
+ * "pkg" indicates the name of a package element.
+ * An enclosing element is shown in parentheses.
+ * A trailing "!" indicates that the element's type has kind ERROR.
+ */
+
+ @ExpectSupertype("!:empty clss A!")
+ class TestClassMissingClassA extends A { }
+
+ @ExpectSupertype("!:empty clss (pkg A).B!")
+ class TestClassMissingClassAB extends A.B { }
+
+ @ExpectSupertype("!:empty clss (pkg java.util).A!")
+ class TestClassMissingClass_juA extends java.util.A { }
+
+ @ExpectSupertype("!:empty clss A!<tvar T>")
+ class TestClassTMissingClassAT<T> extends A<T> { }
+
+ @ExpectInterfaces("!:empty intf A!")
+ class TestClassMissingIntfA implements A { }
+
+ @ExpectInterfaces("!:empty intf (pkg A).B!")
+ class TestClassMissingIntfAB implements A.B { }
+
+ @ExpectInterfaces("!:empty intf A!, intf OK")
+ abstract class TestClassMissingIntfAOK implements A, OK { }
+
+ @ExpectInterfaces("intf OK, !:empty intf A!")
+ abstract class TestClassOKMissingIntfA implements OK, A { }
+
+ @ExpectInterfaces("!:empty intf A!, !:empty intf B!")
+ class TestClassMissingIntfA_B implements A, B { }
+
+ @ExpectInterfaces("!:empty intf A!")
+ interface TestIntfMissingIntfA extends A { }
+
+ @ExpectInterfaces("!:empty intf A!, intf OK")
+ interface TestIntfMissingIntfAOK extends A, OK { }
+
+ @ExpectInterfaces("intf OK, !:empty intf A!")
+ interface TestIntfOKMissingIntfA extends OK, A { }
+
+ @ExpectInterfaces("!:empty intf A!, !:empty intf B!")
+ interface TestIntfMissingIntfAB extends A, B { }
+
+ @ExpectInterfaces("!:empty intf A!<tvar T>")
+ class TestClassTMissingIntfAT<T> implements A<T> { }
+
+ @ExpectInterfaces("!:empty intf A!<tvar T>, !:empty intf B!")
+ class TestClassTMissingIntfAT_B<T> implements A<T>, B { }
+
+ @ExpectInterfaces("!:empty intf A!<tvar T>")
+ interface TestIntfTMissingIntfAT<T> extends A<T> { }
+
+ @ExpectInterfaces("!:empty intf A!<tvar T>, !:empty intf B!")
+ interface TestIntfTMissingIntfAT_B<T> extends A<T>, B { }
+
+ @ExpectInterfaces("intf (pkg java.util).List<!:empty clss X!>")
+ abstract class TestClassListMissingX implements List<X> { }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/element/TestMissingElement/TestMissingElement.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6639645
+ * @summary Modeling type implementing missing interfaces
+ * @library ../../../../lib
+ * @build JavacTestingAbstractProcessor TestMissingElement
+ * @compile -proc:only -XprintRounds -processor TestMissingElement InvalidSource.java
+ */
+
+import java.util.*;
+import javax.annotation.processing.*;
+import javax.lang.model.element.*;
+import javax.lang.model.type.*;
+import javax.lang.model.util.*;
+import static javax.tools.Diagnostic.Kind.*;
+
+public class TestMissingElement extends JavacTestingAbstractProcessor {
+ @Override
+ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+ for (TypeElement te: ElementFilter.typesIn(roundEnv.getRootElements())) {
+ if (isSimpleName(te, "InvalidSource")) {
+ for (Element c: te.getEnclosedElements()) {
+ for (AnnotationMirror am: c.getAnnotationMirrors()) {
+ Element ate = am.getAnnotationType().asElement();
+ if (isSimpleName(ate, "ExpectInterfaces")) {
+ checkInterfaces((TypeElement) c, getValue(am));
+ } else if (isSimpleName(ate, "ExpectSupertype")) {
+ checkSupertype((TypeElement) c, getValue(am));
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ private boolean isSimpleName(Element e, String name) {
+ return e.getSimpleName().contentEquals(name);
+ }
+
+ private String getValue(AnnotationMirror am) {
+ Map<? extends ExecutableElement, ? extends AnnotationValue> map = am.getElementValues();
+ if (map.size() != 1) throw new IllegalArgumentException();
+ AnnotationValue v = map.values().iterator().next();
+ return (String) v.getValue();
+ }
+
+ private void checkInterfaces(TypeElement te, String expect) {
+ System.err.println("check interfaces: " + te + " -- " + expect);
+ String found = asString(te.getInterfaces(), ", ");
+ checkEqual("interfaces", te, found, expect);
+ }
+
+ private void checkSupertype(TypeElement te, String expect) {
+ System.err.println("check supertype: " + te + " -- " + expect);
+ String found = asString(te.getSuperclass());
+ checkEqual("supertype", te, found, expect);
+ }
+
+ private void checkEqual(String label, TypeElement te, String found, String expect) {
+ if (found.equals(expect)) {
+// messager.printMessage(NOTE, "expected " + label + " found: " + expect, te);
+ } else {
+ System.err.println("unexpected " + label + ": " + te + "\n"
+ + " found: " + found + "\n"
+ + "expect: " + expect);
+ messager.printMessage(ERROR, "unexpected " + label + " found: " + found + "; expected: " + expect, te);
+ }
+ }
+
+ private String asString(List<? extends TypeMirror> ts, String sep) {
+ StringBuilder sb = new StringBuilder();
+ for (TypeMirror t: ts) {
+ if (sb.length() != 0) sb.append(sep);
+ sb.append(asString(t));
+ }
+ return sb.toString();
+ }
+
+ private String asString(TypeMirror t) {
+ if (t == null)
+ return "[typ:null]";
+ return t.accept(new SimpleTypeVisitor7<String, Void>() {
+ @Override
+ public String defaultAction(TypeMirror t, Void ignore) {
+ return "[typ:" + t.toString() + "]";
+ }
+
+ @Override
+ public String visitDeclared(DeclaredType t, Void ignore) {
+ String s = asString(t.asElement());
+ List<? extends TypeMirror> args = t.getTypeArguments();
+ if (!args.isEmpty())
+ s += "<" + asString(args, ",") + ">";
+ return s;
+ }
+
+ @Override
+ public String visitTypeVariable(TypeVariable t, Void ignore) {
+ return "tvar " + t;
+ }
+
+ @Override
+ public String visitError(ErrorType t, Void ignore) {
+ return "!:" + visitDeclared(t, ignore);
+ }
+ }, null);
+ }
+
+ private String asString(Element e) {
+ if (e == null)
+ return "[elt:null]";
+ return e.accept(new SimpleElementVisitor7<String, Void>() {
+ @Override
+ public String defaultAction(Element e, Void ignore) {
+ return "[elt:" + e.getKind() + " " + e.toString() + "]";
+ }
+ @Override
+ public String visitPackage(PackageElement e, Void ignore) {
+ return "pkg " + e.getQualifiedName();
+ }
+ @Override
+ public String visitType(TypeElement e, Void ignore) {
+ StringBuilder sb = new StringBuilder();
+ if (e.getEnclosedElements().isEmpty())
+ sb.append("empty ");
+ ElementKind ek = e.getKind();
+ switch (ek) {
+ case CLASS:
+ sb.append("clss");
+ break;
+ case INTERFACE:
+ sb.append("intf");
+ break;
+ default:
+ sb.append(ek);
+ break;
+ }
+ sb.append(" ");
+ Element encl = e.getEnclosingElement();
+ if (!isUnnamedPackage(encl) && encl.asType().getKind() != TypeKind.NONE) {
+ sb.append("(");
+ sb.append(asString(encl));
+ sb.append(")");
+ sb.append(".");
+ }
+ sb.append(e.getSimpleName());
+ if (e.asType().getKind() == TypeKind.ERROR) sb.append("!");
+ return sb.toString();
+ }
+ }, null);
+ }
+
+ boolean isUnnamedPackage(Element e) {
+ return (e != null && e.getKind() == ElementKind.PACKAGE
+ && ((PackageElement) e).isUnnamed());
+ }
+}
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/element/TestMissingElement2/Generator.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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.*;
+import java.util.*;
+import javax.annotation.processing.*;
+import javax.lang.model.element.*;
+import javax.lang.model.type.*;
+import javax.lang.model.util.*;
+import javax.tools.*;
+
+public class Generator extends JavacTestingAbstractProcessor {
+
+ @Override
+ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+ for (TypeElement te: ElementFilter.typesIn(roundEnv.getRootElements())) {
+ System.err.println(te);
+ generateIfMissing(te.getSuperclass());
+ generateIfMissing(te.getInterfaces());
+ }
+ return true;
+ }
+
+ void generateIfMissing(List<? extends TypeMirror> ts) {
+ for (TypeMirror t: ts)
+ generateIfMissing(t);
+ }
+
+ void generateIfMissing(TypeMirror t) {
+ if (t == null)
+ return;
+ if (t.getKind() == TypeKind.ERROR) {
+ Element e = ((ErrorType) t).asElement();
+ if (e == null)
+ return;
+ if (e.asType().getKind() == TypeKind.ERROR)
+ createFile((TypeElement) e);
+ }
+ }
+
+ void createFile(TypeElement e) {
+ try {
+ JavaFileObject fo = filer.createSourceFile(e.getSimpleName());
+ Writer out = fo.openWriter();
+ try {
+ switch (e.getKind()) {
+ case CLASS:
+ out.write("import java.util.*;\n");
+ out.write("class " + signature(e) + " {\n");
+ out.write(" public void run() {\n");
+ out.write(" Class<?> c = getClass();\n");
+ out.write(" System.out.println(\"class: \" + c);\n");
+ out.write(" System.out.println(\"superclass: \" + c.getSuperclass());\n");
+ out.write(" System.out.println(\"generic superclass: \" +c.getGenericSuperclass());\n");
+ out.write(" System.out.println(\"interfaces: \" + Arrays.asList(c.getInterfaces()));\n");
+ out.write(" System.out.println(\"generic interfaces: \" + Arrays.asList(c.getGenericInterfaces()));\n");
+ out.write(" }\n");
+ out.write("}\n");
+ break;
+ case INTERFACE:
+ out.write("interface " + signature(e) + " {\n");
+ out.write(" void run();\n");
+ out.write("}\n");
+ break;
+ }
+ } finally {
+ out.close();
+ }
+ } catch (IOException ex) {
+ messager.printMessage(Diagnostic.Kind.ERROR, "problem writing file: " + ex);
+ }
+ }
+
+ String signature(TypeElement e) {
+ System.err.println("signature: " + e + " " + e.getTypeParameters());
+ StringBuilder sb = new StringBuilder();
+ sb.append(e.getSimpleName());
+ if (!e.getTypeParameters().isEmpty()) {
+ sb.append("<");
+ String sep = "";
+ for (TypeParameterElement t : e.getTypeParameters()) {
+ sb.append(sep);
+ sb.append(t);
+ sep = ",";
+ }
+ sb.append(">");
+ }
+ return sb.toString();
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/element/TestMissingElement2/TestMissingClass.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6639645
+ * @summary Modeling type implementing missing interfaces
+ * @library ../../../../lib
+ * @build JavacTestingAbstractProcessor Generator
+ * @compile -XprintRounds -processor Generator TestMissingClass.java
+ * @run main TestMissingClass
+ */
+
+public class TestMissingClass extends MissingClass {
+ public static void main(String... args) {
+ new TestMissingClass().run();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/element/TestMissingElement2/TestMissingGenericClass1.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6639645
+ * @summary Modeling type implementing missing interfaces
+ * @library ../../../../lib
+ * @clean MissingGenericClass1
+ * @build JavacTestingAbstractProcessor Generator
+ * @compile -XprintRounds -processor Generator TestMissingGenericClass1.java
+ * @run main TestMissingGenericClass1
+ */
+
+public class TestMissingGenericClass1 extends MissingGenericClass1<String> {
+ public static void main(String... args) {
+ new TestMissingGenericClass1().run();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/element/TestMissingElement2/TestMissingGenericClass2.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6639645
+ * @summary Modeling type implementing missing interfaces
+ * @library ../../../../lib
+ * @clean MissingGenericClass2
+ * @build JavacTestingAbstractProcessor Generator
+ * @compile -XprintRounds -processor Generator TestMissingGenericClass2.java
+ * @run main TestMissingGenericClass2
+ */
+
+public class TestMissingGenericClass2 extends MissingGenericClass2<String,Integer> {
+ public static void main(String... args) {
+ new TestMissingGenericClass2().run();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/element/TestMissingElement2/TestMissingGenericInterface1.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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, asrm
+ * 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 6639645
+ * @summary Modeling type implementing missing interfaces
+ * @library ../../../../lib
+ * @clean MissingGenericInterface1
+ * @build JavacTestingAbstractProcessor Generator
+ * @compile -XprintRounds -processor Generator TestMissingGenericInterface1.java
+ * @run main TestMissingGenericInterface1
+ */
+
+import java.util.*;
+
+public class TestMissingGenericInterface1 implements MissingGenericInterface1<String> {
+ public static void main(String... args) {
+ new TestMissingGenericInterface1().run();
+ }
+
+ @Override
+ public void run() {
+ Class<?> c = getClass();
+ System.out.println("class: " + c);
+ System.out.println("superclass: " + c.getSuperclass());
+ System.out.println("generic superclass: " +c.getGenericSuperclass());
+ System.out.println("interfaces: " + Arrays.asList(c.getInterfaces()));
+ System.out.println("generic interfaces: " + Arrays.asList(c.getGenericInterfaces()));
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/element/TestMissingElement2/TestMissingGenericInterface2.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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, asrm
+ * 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 6639645
+ * @summary Modeling type implementing missing interfaces
+ * @library ../../../../lib
+ * @clean MissingGenericInterface2
+ * @build JavacTestingAbstractProcessor Generator
+ * @compile -XprintRounds -processor Generator TestMissingGenericInterface2.java
+ * @run main TestMissingGenericInterface2
+ */
+
+import java.util.*;
+
+public class TestMissingGenericInterface2 implements MissingGenericInterface2<Integer,String> {
+ public static void main(String... args) {
+ new TestMissingGenericInterface2().run();
+ }
+
+ @Override
+ public void run() {
+ Class<?> c = getClass();
+ System.out.println("class: " + c);
+ System.out.println("superclass: " + c.getSuperclass());
+ System.out.println("generic superclass: " +c.getGenericSuperclass());
+ System.out.println("interfaces: " + Arrays.asList(c.getInterfaces()));
+ System.out.println("generic interfaces: " + Arrays.asList(c.getGenericInterfaces()));
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/element/TestMissingElement2/TestMissingInterface.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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, asrm
+ * 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 6639645
+ * @summary Modeling type implementing missing interfaces
+ * @library ../../../../lib
+ * @build JavacTestingAbstractProcessor Generator
+ * @compile -XprintRounds -processor Generator TestMissingInterface.java
+ * @run main TestMissingInterface
+ */
+
+import java.util.*;
+
+public class TestMissingInterface implements MissingInterface {
+ public static void main(String... args) {
+ new TestMissingInterface().run();
+ }
+
+ @Override
+ public void run() {
+ Class<?> c = getClass();
+ System.out.println("class: " + c);
+ System.out.println("superclass: " + c.getSuperclass());
+ System.out.println("generic superclass: " +c.getGenericSuperclass());
+ System.out.println("interfaces: " + Arrays.asList(c.getInterfaces()));
+ System.out.println("generic interfaces: " + Arrays.asList(c.getGenericInterfaces()));
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/warnings/UseImplicit/C1.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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.
+ */
+
+class C1 extends p.C2 { }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/warnings/UseImplicit/TestProcUseImplicitWarning.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6986892
+ * @summary confusing warning given after errors in annotation processing
+ * @library ../../../lib
+ * @build JavacTestingAbstractProcessor TestProcUseImplicitWarning
+ * @clean C1 p.C2
+ * @compile/fail/ref=err.out -XDrawDiagnostics -processor TestProcUseImplicitWarning -Aerror C1.java
+ * @clean C1 p.C2
+ * @compile/ref=warn.out -XDrawDiagnostics -processor TestProcUseImplicitWarning C1.java
+ */
+
+import java.util.*;
+import javax.annotation.processing.*;
+import javax.lang.model.element.*;
+import static javax.tools.Diagnostic.Kind.*;
+
+@SupportedOptions("error")
+public class TestProcUseImplicitWarning extends JavacTestingAbstractProcessor {
+
+ int round = 0;
+
+ @Override
+ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+ round++;
+
+ if (round == 1) {
+ boolean error = options.containsKey("error");
+ if (error)
+ messager.printMessage(ERROR, "error generated per option");
+ }
+
+ return false;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/warnings/UseImplicit/err.out Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,2 @@
+- compiler.err.proc.messager: error generated per option
+1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/warnings/UseImplicit/p/C2.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p;
+
+public class C2 { }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/warnings/UseImplicit/warn.out Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,2 @@
+- compiler.warn.proc.use.implicit
+1 warning
--- a/langtools/test/tools/javac/processing/warnings/gold_0.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/processing/warnings/gold_0.out Wed Mar 16 10:47:45 2011 -0400
@@ -1,1 +1,2 @@
- compiler.warn.proc.messager: No SourceVersion option given
+1 warning
--- a/langtools/test/tools/javac/processing/warnings/gold_sv_warn_0_2.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/processing/warnings/gold_sv_warn_0_2.out Wed Mar 16 10:47:45 2011 -0400
@@ -1,1 +1,2 @@
- compiler.warn.proc.processor.incompatible.source.version: RELEASE_0, TestSourceVersionWarnings, 1.2
+1 warning
--- a/langtools/test/tools/javac/processing/warnings/gold_sv_warn_2_3.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/processing/warnings/gold_sv_warn_2_3.out Wed Mar 16 10:47:45 2011 -0400
@@ -1,1 +1,2 @@
- compiler.warn.proc.processor.incompatible.source.version: RELEASE_2, TestSourceVersionWarnings, 1.3
+1 warning
--- a/langtools/test/tools/javac/processing/warnings/gold_sv_warn_5_6.out Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/processing/warnings/gold_sv_warn_5_6.out Wed Mar 16 10:47:45 2011 -0400
@@ -1,1 +1,2 @@
- compiler.warn.proc.processor.incompatible.source.version: RELEASE_5, TestSourceVersionWarnings, 1.6
+1 warning
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/util/context/T7021650.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,216 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 7021650
+ * @summary Fix Context issues
+ * @library ../../lib
+ * @build JavacTestingAbstractProcessor T7021650
+ * @run main T7021650
+ */
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+import javax.annotation.processing.*;
+import javax.lang.model.element.*;
+import javax.tools.*;
+
+import com.sun.tools.javac.comp.Attr;
+import com.sun.tools.javac.file.JavacFileManager;
+import com.sun.tools.javac.main.Main;
+import com.sun.tools.javac.processing.JavacProcessingEnvironment;
+import com.sun.tools.javac.util.Context;
+
+public class T7021650 extends JavacTestingAbstractProcessor {
+ public static void main(String... args) throws Exception {
+ new T7021650().run();
+ }
+
+ static File testSrc = new File(System.getProperty("test.src"));
+ static final int MAX_ROUNDS = 3;
+
+ /**
+ * Perform a compilation with custom factories registered in the context,
+ * and verify that corresponding objects are created in each round.
+ */
+ void run() throws Exception {
+ Counter demoCounter = new Counter();
+ Counter myAttrCounter = new Counter();
+
+ Context context = new Context();
+ // Use a custom file manager which creates classloaders for annotation
+ // processors with a sensible delegation parent, so that all instances
+ // of test classes come from the same class loader. This is important
+ // because the test performs class checks on the instances of classes
+ // found in the context for each round or processing.
+ context.put(JavaFileManager.class, new Context.Factory<JavaFileManager>() {
+ public JavaFileManager make(Context c) {
+ return new JavacFileManager(c, true, null) {
+ @Override
+ protected ClassLoader getClassLoader(URL[] urls) {
+ return new URLClassLoader(urls, T7021650.class.getClassLoader());
+ }
+ };
+ }
+ });
+
+ Demo.preRegister(context, demoCounter);
+ MyAttr.preRegister(context, myAttrCounter);
+
+ String[] args = {
+ "-d", ".",
+ "-processor", T7021650.class.getName(),
+ "-XprintRounds",
+ new File(testSrc, T7021650.class.getName() + ".java").getPath()
+ };
+
+ compile(context, args);
+
+ // Expect to create Demo for initial round, then MAX_ROUNDS in which
+ // GenX files are generated, then standard final round of processing.
+ checkEqual("demoCounter", demoCounter.count, MAX_ROUNDS + 2);
+
+ // Expect to create MyAttr for same processing rounds as for Demo,
+ // plus additional context for final compilation.
+ checkEqual("myAttrCounter", myAttrCounter.count, MAX_ROUNDS + 3);
+ }
+
+ void compile(Context context, String... args) throws Exception {
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ Main m = new Main("javac", pw);
+ int rc = m.compile(args, context);
+ pw.close();
+ String out = sw.toString();
+ if (!out.isEmpty())
+ System.err.println(out);
+ if (rc != 0)
+ throw new Exception("compilation failed unexpectedly: rc=" + rc);
+ }
+
+ void checkEqual(String label, int found, int expect) throws Exception {
+ if (found != expect)
+ throw new Exception("unexpected value for " + label
+ + ": expected " + expect
+ + ": found " + found);
+ }
+
+ //---------------
+
+ /*
+ * A custom class unknown to javac but nonetheless registered in the context.
+ */
+ static class Demo {
+ static void preRegister(Context context, final Counter counter) {
+ context.put(Demo.class, new Context.Factory<Demo>() {
+ public Demo make(Context c) {
+ counter.count++;
+ return new Demo(c);
+ }
+ });
+ }
+
+ Demo(Context c) {
+ c.put(Demo.class, this);
+ }
+
+ static Demo instance(Context context) {
+ return context.get(Demo.class);
+ }
+ }
+
+ /**
+ * A custom version of a standard javac component.
+ */
+ static class MyAttr extends Attr {
+ static void preRegister(Context context, final Counter counter) {
+ context.put(attrKey, new Context.Factory<Attr>() {
+ public Attr make(Context c) {
+ counter.count++;
+ return new MyAttr(c);
+ }
+ });
+ }
+
+ MyAttr(Context c) {
+ super(c);
+ }
+ }
+
+ static class Counter {
+ int count;
+ }
+
+ //---------------
+
+ int round = 0;
+
+ @Override
+ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+ round++;
+
+ Context context = ((JavacProcessingEnvironment) processingEnv).getContext();
+
+ // verify items in context as expected
+ check("Demo", Demo.instance(context), Demo.class);
+ check("Attr", Attr.instance(context), MyAttr.class);
+
+ // For a few rounds, generate new source files, so that we can check whether
+ // values in the context are correctly handled in subsequent processing rounds
+ if (round <= MAX_ROUNDS) {
+ String pkg = "p";
+ String currClass = "Gen" + round;
+ String curr = pkg + "." + currClass;
+ String next = (pkg + ".Gen" + (round + 1));
+ StringBuilder text = new StringBuilder();
+ text.append("package ").append(pkg).append(";\n");
+ text.append("public class ").append(currClass).append(" {\n");
+ if (round < MAX_ROUNDS)
+ text.append(" ").append(next).append(" x;\n");
+ text.append("}\n");
+
+ try {
+ JavaFileObject fo = filer.createSourceFile(curr);
+ Writer out = fo.openWriter();
+ try {
+ out.write(text.toString());
+ } finally {
+ out.close();
+ }
+ } catch (IOException e) {
+ throw new Error(e);
+ }
+ }
+
+ return true;
+ }
+
+ void check(String label, Object o, Class<?> clazz) {
+ if (o == null)
+ throw new IllegalStateException(label + ": no item found");
+ if (!clazz.isAssignableFrom(o.getClass()))
+ throw new IllegalStateException(label + ": unexpected class: " + o.getClass());
+ }
+}
--- a/langtools/test/tools/javac/varargs/6199075/T6199075.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/varargs/6199075/T6199075.java Wed Mar 16 10:47:45 2011 -0400
@@ -37,6 +37,7 @@
import com.sun.tools.classfile.Code_attribute;
import com.sun.tools.classfile.ConstantPool.*;
import com.sun.tools.classfile.Method;
+import com.sun.tools.javac.api.JavacTool;
import com.sun.tools.javac.util.List;
import java.io.File;
@@ -47,6 +48,7 @@
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
+import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
public class T6199075 {
@@ -157,11 +159,14 @@
System.out.println("Bytecode checks made: " + bytecodeCheckCount);
}
+ // Create a single file manager and reuse it for each compile to save time.
+ StandardJavaFileManager fm = JavacTool.create().getStandardFileManager(null, null, null);
+
void compileAndCheck(VarargsMethod m1, VarargsMethod m2, TypeKind actual, ArgumentsArity argsArity) throws Exception {
final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
JavaSource source = new JavaSource(m1, m2, actual, argsArity);
ErrorChecker ec = new ErrorChecker();
- JavacTask ct = (JavacTask)tool.getTask(null, null, ec,
+ JavacTask ct = (JavacTask)tool.getTask(null, fm, ec,
null, null, Arrays.asList(source));
ct.generate();
check(source, ec, m1, m2, actual, argsArity);
--- a/langtools/test/tools/javac/varargs/warning/Warn4.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/varargs/warning/Warn4.java Wed Mar 16 10:47:45 2011 -0400
@@ -29,6 +29,7 @@
* @run main Warn4
*/
import com.sun.source.util.JavacTask;
+import com.sun.tools.javac.api.JavacTool;
import java.net.URI;
import java.util.Arrays;
import java.util.Set;
@@ -37,6 +38,7 @@
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
+import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
public class Warn4 {
@@ -187,12 +189,15 @@
}
}
+ // Create a single file manager and reuse it for each compile to save time.
+ static StandardJavaFileManager fm = JavacTool.create().getStandardFileManager(null, null, null);
+
static void test(SourceLevel sourceLevel, TrustMe trustMe, SuppressLevel suppressLevelClient,
SuppressLevel suppressLevelDecl, ModifierKind modKind, Signature vararg_meth, Signature client_meth) throws Exception {
final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
JavaSource source = new JavaSource(trustMe, suppressLevelClient, suppressLevelDecl, modKind, vararg_meth, client_meth);
DiagnosticChecker dc = new DiagnosticChecker();
- JavacTask ct = (JavacTask)tool.getTask(null, null, dc,
+ JavacTask ct = (JavacTask)tool.getTask(null, fm, dc,
Arrays.asList("-Xlint:unchecked", "-source", sourceLevel.sourceKey),
null, Arrays.asList(source));
ct.generate(); //to get mandatory notes
--- a/langtools/test/tools/javac/varargs/warning/Warn5.java Thu Mar 10 14:56:11 2011 -0500
+++ b/langtools/test/tools/javac/varargs/warning/Warn5.java Wed Mar 16 10:47:45 2011 -0400
@@ -29,6 +29,7 @@
* @run main Warn5
*/
import com.sun.source.util.JavacTask;
+import com.sun.tools.javac.api.JavacTool;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
@@ -36,6 +37,7 @@
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
+import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
public class Warn5 {
@@ -207,12 +209,15 @@
}
}
+ // Create a single file manager and reuse it for each compile to save time.
+ static StandardJavaFileManager fm = JavacTool.create().getStandardFileManager(null, null, null);
+
static void test(SourceLevel sourceLevel, XlintOption xlint, TrustMe trustMe, SuppressLevel suppressLevel,
ModifierKind modKind, MethodKind methKind, SignatureKind sig, BodyKind body) throws Exception {
final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
JavaSource source = new JavaSource(trustMe, suppressLevel, modKind, methKind, sig, body);
DiagnosticChecker dc = new DiagnosticChecker();
- JavacTask ct = (JavacTask)tool.getTask(null, null, dc,
+ JavacTask ct = (JavacTask)tool.getTask(null, fm, dc,
Arrays.asList(xlint.getXlintOption(), "-source", sourceLevel.sourceKey), null, Arrays.asList(source));
ct.analyze();
check(sourceLevel, dc, source, xlint, trustMe,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/6227454/Test.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,141 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6227454
+ * @summary package.html and overview.html may not be read fully
+ */
+
+import java.io.*;
+
+import com.sun.javadoc.Doclet;
+import com.sun.javadoc.RootDoc;
+
+public class Test extends Doclet {
+ public static void main(String... args) throws Exception {
+ new Test().run();
+ }
+
+ void run() throws Exception {
+ test("<html><body>ABC XYZ</body></html>");
+ test("<html><body>ABC XYZ</BODY></html>");
+ test("<html><BODY>ABC XYZ</body></html>");
+ test("<html><BODY>ABC XYZ</BODY></html>");
+ test("<html><BoDy>ABC XYZ</bOdY></html>");
+ test("<html> ABC XYZ</bOdY></html>", "Body tag missing from HTML");
+ test("<html><body>ABC XYZ </html>", "Close body tag missing from HTML");
+ test("<html> ABC XYZ </html>", "Body tag missing from HTML");
+ test("<html><body>ABC" + bigText(8192, 40) + "XYZ</body></html>");
+
+ if (errors > 0)
+ throw new Exception(errors + " errors occurred");
+ }
+
+ void test(String text) throws IOException {
+ test(text, null);
+ }
+
+ void test(String text, String expectError) throws IOException {
+ testNum++;
+ System.err.println("test " + testNum);
+ File file = writeFile("overview" + testNum + ".html", text);
+ String thisClassName = Test.class.getName();
+ File testSrc = new File(System.getProperty("test.src"));
+ String[] args = {
+ "-bootclasspath",
+ System.getProperty("java.class.path")
+ + File.pathSeparator
+ + System.getProperty("sun.boot.class.path"),
+ "-classpath", ".",
+ "-package",
+ "-overview", file.getPath(),
+ new File(testSrc, thisClassName + ".java").getPath()
+ };
+
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ int rc = com.sun.tools.javadoc.Main.execute(
+ "javadoc",
+ pw, pw, pw,
+ thisClassName,
+ args);
+ pw.close();
+ String out = sw.toString();
+ if (!out.isEmpty())
+ System.err.println(out);
+ System.err.println("javadoc exit: rc=" + rc);
+
+ if (expectError == null) {
+ if (rc != 0)
+ error("unexpected exit from javadoc; rc:" + rc);
+ } else {
+ if (!out.contains(expectError))
+ error("expected error text not found: " + expectError);
+ }
+ }
+
+ String bigText(int lines, int lineLength) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < lineLength; i++)
+ sb.append(String.valueOf(i % 10));
+ sb.append("\n");
+ String line = sb.toString();
+ sb.setLength(0);
+ for (int i = 0; i < lines; i++)
+ sb.append(line);
+ return sb.toString();
+ }
+
+ File writeFile(String path, String body) throws IOException {
+ File f = new File(path);
+ FileWriter out = new FileWriter(f);
+ try {
+ out.write(body);
+ } finally {
+ out.close();
+ }
+ return f;
+ }
+
+ void error(String msg) {
+ System.err.println("Error: " + msg);
+ errors++;
+ }
+
+ int testNum;
+ int errors;
+
+ public static boolean start(RootDoc root) {
+ String text = root.commentText();
+ if (text.length() < 64)
+ System.err.println("text: '" + text + "'");
+ else
+ System.err.println("text: '"
+ + text.substring(0, 20)
+ + "..."
+ + text.substring(text.length() - 20)
+ + "'");
+ return text.startsWith("ABC") && text.endsWith("XYZ");
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/6964914/Error.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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.
+ */
+
+public class Error {
+ Object x // no semicolon
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/6964914/JavacWarning.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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.
+ */
+
+public class JavacWarning {
+ int enum; // warning in source 1.4
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/6964914/JavadocWarning.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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.
+ */
+
+public class JavadocWarning {
+ /** @see DoesNotExist */
+ int x;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/6964914/Test.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6964914
+ * @summary javadoc does not output number of warnings using user written doclet
+ */
+
+import java.io.*;
+
+public class Test {
+ public static void main(String... args) throws Exception {
+ new Test().run();
+ }
+
+ public void run() throws Exception {
+ javadoc("Error.java", "1 error");
+ javadoc("JavacWarning.java", "1 warning");
+ javadoc("JavadocWarning.java", "1 warning");
+ if (errors > 0)
+ throw new Exception(errors + " errors found");
+ }
+
+ void javadoc(String path, String expect) {
+ File testSrc = new File(System.getProperty("test.src"));
+ String[] args = {
+ "-source", "1.4", // enables certain Parser warnings
+ "-bootclasspath", System.getProperty("sun.boot.class.path"),
+ "-classpath", ".",
+ "-package",
+ new File(testSrc, path).getPath()
+ };
+
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ int rc = com.sun.tools.javadoc.Main.execute(
+ "javadoc",
+ pw, pw, pw,
+ com.sun.tools.doclets.standard.Standard.class.getName(),
+ args);
+ pw.close();
+ String out = sw.toString();
+ if (!out.isEmpty())
+ System.err.println(out);
+ System.err.println("javadoc exit: rc=" + rc);
+
+ if (!out.contains(expect))
+ error("expected text not found: " + expect);
+ }
+
+ void error(String msg) {
+ System.err.println("Error: " + msg);
+ errors++;
+ }
+
+ int errors;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/6964914/TestStdDoclet.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6964914
+ * @summary javadoc does not output number of warnings using user written doclet
+ */
+
+import java.io.*;
+
+/**
+ * Dummy javadoc comment.
+ * @author jjg
+ * @see DoesNotExist
+ */
+public class TestStdDoclet {
+ public static void main(String... args) throws Exception {
+ new TestStdDoclet().run();
+ }
+
+ /**
+ * More dummy comments.
+ * @throws DoesNotExist oops, javadoc does not see this
+ * @see DoesNotExist
+ */
+ void run() throws Exception {
+ File javaHome = new File(System.getProperty("java.home"));
+ if (javaHome.getName().equals("jre"))
+ javaHome = javaHome.getParentFile();
+ File javadoc = new File(new File(javaHome, "bin"), "javadoc");
+ File testSrc = new File(System.getProperty("test.src"));
+
+ // run javadoc in separate process to ensure doclet executed under
+ // normal user conditions w.r.t. classloader
+ String thisClassName = TestStdDoclet.class.getName();
+ Process p = new ProcessBuilder()
+ .command(javadoc.getPath(),
+ "-J-Xbootclasspath:" + System.getProperty("sun.boot.class.path"),
+ "-package",
+ new File(testSrc, thisClassName + ".java").getPath())
+ .redirectErrorStream(true)
+ .start();
+
+ int actualDocletWarnCount = 0;
+ int reportedDocletWarnCount = 0;
+ BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ try {
+ String line;
+ while ((line = in.readLine()) != null) {
+ System.err.println(line);
+ if (line.contains("DoesNotExist"))
+ actualDocletWarnCount++;
+ if (line.matches("[0-9]+ warning(s)?"))
+ reportedDocletWarnCount =
+ Integer.valueOf(line.substring(0, line.indexOf(" ")));
+ }
+ } finally {
+ in.close();
+ }
+ int rc = p.waitFor();
+ if (rc != 0)
+ System.err.println("javadoc failed, rc:" + rc);
+
+ int expectedDocletWarnCount = 2;
+ checkEqual("actual", actualDocletWarnCount, "expected", expectedDocletWarnCount);
+ checkEqual("actual", actualDocletWarnCount, "reported", reportedDocletWarnCount);
+ }
+
+ /**
+ * Private method should not cause a warning.
+ * @see DoesNotExist
+ */
+ private void checkEqual(String l1, int i1, String l2, int i2) throws Exception {
+ if (i1 != i2)
+ throw new Exception(l1 + " warn count, " + i1 + ", does not match "
+ + l2 + " warn count, " + i2);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/6964914/TestUserDoclet.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6964914
+ * @summary javadoc does not output number of warnings using user written doclet
+ */
+
+import java.io.*;
+import com.sun.javadoc.Doclet;
+import com.sun.javadoc.RootDoc;
+
+public class TestUserDoclet extends Doclet {
+ public static void main(String... args) throws Exception {
+ new TestUserDoclet().run();
+ }
+
+ static final String docletWarning = "warning from test doclet";
+
+ /** Main doclet method. */
+ public static boolean start(RootDoc root) {
+ root.printWarning(null, docletWarning);
+ return true;
+ }
+
+ /** Main test method. */
+ void run() throws Exception {
+ File javaHome = new File(System.getProperty("java.home"));
+ if (javaHome.getName().equals("jre"))
+ javaHome = javaHome.getParentFile();
+ File javadoc = new File(new File(javaHome, "bin"), "javadoc");
+ File testSrc = new File(System.getProperty("test.src"));
+ File testClasses = new File(System.getProperty("test.classes"));
+
+ // run javadoc in separate process to ensure doclet executed under
+ // normal user conditions w.r.t. classloader
+ String thisClassName = TestUserDoclet.class.getName();
+ Process p = new ProcessBuilder()
+ .command(javadoc.getPath(),
+ "-J-Xbootclasspath:" + System.getProperty("sun.boot.class.path"),
+ "-doclet", thisClassName,
+ "-docletpath", testClasses.getPath(),
+ new File(testSrc, thisClassName + ".java").getPath())
+ .redirectErrorStream(true)
+ .start();
+
+ int actualDocletWarnCount = 0;
+ int reportedDocletWarnCount = 0;
+ BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ try {
+ String line;
+ while ((line = in.readLine()) != null) {
+ System.err.println(line);
+ if (line.contains(docletWarning))
+ actualDocletWarnCount++;
+ if (line.matches("[0-9]+ warning(s)?"))
+ reportedDocletWarnCount =
+ Integer.valueOf(line.substring(0, line.indexOf(" ")));
+ }
+ } finally {
+ in.close();
+ }
+ int rc = p.waitFor();
+ if (rc != 0)
+ System.err.println("javadoc failed, rc:" + rc);
+
+ int expectedDocletWarnCount = 1;
+ checkEqual("actual", actualDocletWarnCount, "expected", expectedDocletWarnCount);
+ checkEqual("actual", actualDocletWarnCount, "reported", reportedDocletWarnCount);
+ }
+
+ void checkEqual(String l1, int i1, String l2, int i2) throws Exception {
+ if (i1 != i2)
+ throw new Exception(l1 + " warn count, " + i1 + ", does not match "
+ + l2 + " warn count, " + i2);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/T6968833.java Wed Mar 16 10:47:45 2011 -0400
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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 6968833
+ * @summary javadoc reports error but still returns 0
+ */
+
+import java.io.*;
+
+public class T6968833 {
+ public static void main(String... args) throws IOException {
+ new T6968833().run();
+ }
+
+ void run() throws IOException {
+ File srcDir = new File("src");
+ // following file causes error: No public or protected classes found to document.
+ File f = writeFile(srcDir, "Foo.java", "class Foo { }");
+ String[] args = { f.getPath() };
+ int rc = com.sun.tools.javadoc.Main.execute(args);
+ if (rc == 0)
+ throw new Error("Unexpected exit from javadoc: " + rc);
+ }
+
+ File writeFile(File dir, String path, String s) throws IOException {
+ File f = new File(dir, path);
+ f.getParentFile().mkdirs();
+ try (Writer out = new FileWriter(f)) {
+ out.write(s);
+ }
+ return f;
+ }
+}
+