Merge
This commit is contained in:
commit
6b89c2cc7b
@ -240,3 +240,4 @@ d086227bfc45d124f09b3bd72a07956b4073bf71 jdk8-b111
|
|||||||
cbfe5da942c63ef865cab4a7159e01eff7d7fcf5 jdk8-b116
|
cbfe5da942c63ef865cab4a7159e01eff7d7fcf5 jdk8-b116
|
||||||
a4afb0a8d55ef75aef5b0d77b434070468fb89f8 jdk8-b117
|
a4afb0a8d55ef75aef5b0d77b434070468fb89f8 jdk8-b117
|
||||||
0a6db1aac998cdc88e52f9adb97d40ca5b0f1da6 jdk8-b118
|
0a6db1aac998cdc88e52f9adb97d40ca5b0f1da6 jdk8-b118
|
||||||
|
9e90215673be68a3e77a9e444e4232076373734d jdk8-b119
|
||||||
|
6
Makefile
6
Makefile
@ -66,12 +66,12 @@ else
|
|||||||
# First, find out the valid targets
|
# First, find out the valid targets
|
||||||
# Run the makefile with an arbitrary SPEC using -p -q (quiet dry-run and dump rules) to find
|
# Run the makefile with an arbitrary SPEC using -p -q (quiet dry-run and dump rules) to find
|
||||||
# available PHONY targets. Use this list as valid targets to pass on to the repeated calls.
|
# available PHONY targets. Use this list as valid targets to pass on to the repeated calls.
|
||||||
all_phony_targets=$(filter-out $(global_targets) bundles-only, $(strip $(shell \
|
all_phony_targets=$(filter-out $(global_targets) bundles bundles-only final-images-only, $(strip $(shell \
|
||||||
$(MAKE) -p -q -f make/Main.gmk FRC SPEC=$(firstword $(SPEC)) | \
|
cd $(root_dir) && $(MAKE) -p -q FRC SPEC=$(firstword $(SPEC)) | \
|
||||||
grep ^.PHONY: | head -n 1 | cut -d " " -f 2-)))
|
grep ^.PHONY: | head -n 1 | cut -d " " -f 2-)))
|
||||||
|
|
||||||
$(all_phony_targets):
|
$(all_phony_targets):
|
||||||
@$(foreach spec,$(SPEC),($(MAKE) -f NewMakefile.gmk SPEC=$(spec) \
|
@$(foreach spec,$(SPEC),(cd $(root_dir) && $(MAKE) SPEC=$(spec) \
|
||||||
$(VERBOSE) VERBOSE=$(VERBOSE) LOG_LEVEL=$(LOG_LEVEL) $@) &&) true
|
$(VERBOSE) VERBOSE=$(VERBOSE) LOG_LEVEL=$(LOG_LEVEL) $@) &&) true
|
||||||
|
|
||||||
.PHONY: $(all_phony_targets)
|
.PHONY: $(all_phony_targets)
|
||||||
|
@ -236,7 +236,6 @@ HOTSPOT_OUTPUTDIR=$(BUILD_OUTPUT)/hotspot
|
|||||||
JDK_OUTPUTDIR=$(BUILD_OUTPUT)/jdk
|
JDK_OUTPUTDIR=$(BUILD_OUTPUT)/jdk
|
||||||
NASHORN_OUTPUTDIR=$(BUILD_OUTPUT)/nashorn
|
NASHORN_OUTPUTDIR=$(BUILD_OUTPUT)/nashorn
|
||||||
IMAGES_OUTPUTDIR=$(BUILD_OUTPUT)/images
|
IMAGES_OUTPUTDIR=$(BUILD_OUTPUT)/images
|
||||||
JCE_OUTPUTDIR=$(BUILD_OUTPUT)/jce-release
|
|
||||||
|
|
||||||
LANGTOOLS_DIST=$(LANGTOOLS_OUTPUTDIR)/dist
|
LANGTOOLS_DIST=$(LANGTOOLS_OUTPUTDIR)/dist
|
||||||
CORBA_DIST=$(CORBA_OUTPUTDIR)/dist
|
CORBA_DIST=$(CORBA_OUTPUTDIR)/dist
|
||||||
|
@ -240,3 +240,4 @@ a259ff3e42d91da68f4d4f09d7eb9dc22bc024fc jdk8-b113
|
|||||||
5fdc4465208933ba704825b2b05e1afd062235fb jdk8-b116
|
5fdc4465208933ba704825b2b05e1afd062235fb jdk8-b116
|
||||||
e53d1ee4d2ae898f1cf58688d45a5afe7c482173 jdk8-b117
|
e53d1ee4d2ae898f1cf58688d45a5afe7c482173 jdk8-b117
|
||||||
d6820a414f182a011a53a29a52370c696cd58dab jdk8-b118
|
d6820a414f182a011a53a29a52370c696cd58dab jdk8-b118
|
||||||
|
379fc7609beb7a3d85ebc0cc21a8a51c60d3c7d3 jdk8-b119
|
||||||
|
@ -399,3 +399,5 @@ f573d00213b7170c2ff856f9cd83cd148437f5b9 jdk8-b117
|
|||||||
abad3b2d905d9e1ad767c94baa94aba6ed5b207b hs25-b60
|
abad3b2d905d9e1ad767c94baa94aba6ed5b207b hs25-b60
|
||||||
c9f439732b18ea16f7e65815327d5ea7092cc258 jdk8-b118
|
c9f439732b18ea16f7e65815327d5ea7092cc258 jdk8-b118
|
||||||
b2426da30009cd3069d03de073f351e6432c7682 hs25-b61
|
b2426da30009cd3069d03de073f351e6432c7682 hs25-b61
|
||||||
|
ce42d815dd2130250acf6132b51b624001638f0d jdk8-b119
|
||||||
|
05fedd51e40da22c9460bf17c7185889e435db3d hs25-b62
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@ -27,4 +27,4 @@
|
|||||||
|
|
||||||
. `dirname $0`/saenv64.sh
|
. `dirname $0`/saenv64.sh
|
||||||
|
|
||||||
$SA_JAVA_CMD sun.jvm.hotspot.tools.JSDB $*
|
$SA_JAVA_CMD sun.jvm.hotspot.tools.soql.JSDB $*
|
||||||
|
@ -103,14 +103,14 @@ public class G1HeapRegionTable extends VMObject {
|
|||||||
@Override
|
@Override
|
||||||
public void remove() { /* not supported */ }
|
public void remove() { /* not supported */ }
|
||||||
|
|
||||||
HeapRegionIterator(Address addr) {
|
HeapRegionIterator(long committedLength) {
|
||||||
index = 0;
|
index = 0;
|
||||||
length = length();
|
length = committedLength;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterator<HeapRegion> heapRegionIterator() {
|
public Iterator<HeapRegion> heapRegionIterator(long committedLength) {
|
||||||
return new HeapRegionIterator(addr);
|
return new HeapRegionIterator(committedLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
public G1HeapRegionTable(Address addr) {
|
public G1HeapRegionTable(Address addr) {
|
||||||
|
@ -42,6 +42,8 @@ import sun.jvm.hotspot.types.TypeDataBase;
|
|||||||
public class HeapRegionSeq extends VMObject {
|
public class HeapRegionSeq extends VMObject {
|
||||||
// G1HeapRegionTable _regions
|
// G1HeapRegionTable _regions
|
||||||
static private long regionsFieldOffset;
|
static private long regionsFieldOffset;
|
||||||
|
// uint _committed_length
|
||||||
|
static private CIntegerField committedLengthField;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
VM.registerVMInitializedObserver(new Observer() {
|
VM.registerVMInitializedObserver(new Observer() {
|
||||||
@ -55,6 +57,7 @@ public class HeapRegionSeq extends VMObject {
|
|||||||
Type type = db.lookupType("HeapRegionSeq");
|
Type type = db.lookupType("HeapRegionSeq");
|
||||||
|
|
||||||
regionsFieldOffset = type.getField("_regions").getOffset();
|
regionsFieldOffset = type.getField("_regions").getOffset();
|
||||||
|
committedLengthField = type.getCIntegerField("_committed_length");
|
||||||
}
|
}
|
||||||
|
|
||||||
private G1HeapRegionTable regions() {
|
private G1HeapRegionTable regions() {
|
||||||
@ -67,8 +70,12 @@ public class HeapRegionSeq extends VMObject {
|
|||||||
return regions().length();
|
return regions().length();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long committedLength() {
|
||||||
|
return committedLengthField.getValue(addr);
|
||||||
|
}
|
||||||
|
|
||||||
public Iterator<HeapRegion> heapRegionIterator() {
|
public Iterator<HeapRegion> heapRegionIterator() {
|
||||||
return regions().heapRegionIterator();
|
return regions().heapRegionIterator(committedLength());
|
||||||
}
|
}
|
||||||
|
|
||||||
public HeapRegionSeq(Address addr) {
|
public HeapRegionSeq(Address addr) {
|
||||||
|
@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2013
|
|||||||
|
|
||||||
HS_MAJOR_VER=25
|
HS_MAJOR_VER=25
|
||||||
HS_MINOR_VER=0
|
HS_MINOR_VER=0
|
||||||
HS_BUILD_NUMBER=61
|
HS_BUILD_NUMBER=62
|
||||||
|
|
||||||
JDK_MAJOR_VER=1
|
JDK_MAJOR_VER=1
|
||||||
JDK_MINOR_VER=8
|
JDK_MINOR_VER=8
|
||||||
|
@ -89,6 +89,27 @@ void VM_Version::initialize() {
|
|||||||
_supports_cx8 = has_v9();
|
_supports_cx8 = has_v9();
|
||||||
_supports_atomic_getset4 = true; // swap instruction
|
_supports_atomic_getset4 = true; // swap instruction
|
||||||
|
|
||||||
|
// There are Fujitsu Sparc64 CPUs which support blk_init as well so
|
||||||
|
// we have to take this check out of the 'is_niagara()' block below.
|
||||||
|
if (has_blk_init()) {
|
||||||
|
// When using CMS or G1, we cannot use memset() in BOT updates
|
||||||
|
// because the sun4v/CMT version in libc_psr uses BIS which
|
||||||
|
// exposes "phantom zeros" to concurrent readers. See 6948537.
|
||||||
|
if (FLAG_IS_DEFAULT(UseMemSetInBOT) && (UseConcMarkSweepGC || UseG1GC)) {
|
||||||
|
FLAG_SET_DEFAULT(UseMemSetInBOT, false);
|
||||||
|
}
|
||||||
|
// Issue a stern warning if the user has explicitly set
|
||||||
|
// UseMemSetInBOT (it is known to cause issues), but allow
|
||||||
|
// use for experimentation and debugging.
|
||||||
|
if (UseConcMarkSweepGC || UseG1GC) {
|
||||||
|
if (UseMemSetInBOT) {
|
||||||
|
assert(!FLAG_IS_DEFAULT(UseMemSetInBOT), "Error");
|
||||||
|
warning("Experimental flag -XX:+UseMemSetInBOT is known to cause instability"
|
||||||
|
" on sun4v; please understand that you are using at your own risk!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (is_niagara()) {
|
if (is_niagara()) {
|
||||||
// Indirect branch is the same cost as direct
|
// Indirect branch is the same cost as direct
|
||||||
if (FLAG_IS_DEFAULT(UseInlineCaches)) {
|
if (FLAG_IS_DEFAULT(UseInlineCaches)) {
|
||||||
@ -98,12 +119,6 @@ void VM_Version::initialize() {
|
|||||||
if (FLAG_IS_DEFAULT(OptoLoopAlignment)) {
|
if (FLAG_IS_DEFAULT(OptoLoopAlignment)) {
|
||||||
FLAG_SET_DEFAULT(OptoLoopAlignment, 4);
|
FLAG_SET_DEFAULT(OptoLoopAlignment, 4);
|
||||||
}
|
}
|
||||||
// When using CMS or G1, we cannot use memset() in BOT updates
|
|
||||||
// because the sun4v/CMT version in libc_psr uses BIS which
|
|
||||||
// exposes "phantom zeros" to concurrent readers. See 6948537.
|
|
||||||
if (FLAG_IS_DEFAULT(UseMemSetInBOT) && (UseConcMarkSweepGC || UseG1GC)) {
|
|
||||||
FLAG_SET_DEFAULT(UseMemSetInBOT, false);
|
|
||||||
}
|
|
||||||
#ifdef _LP64
|
#ifdef _LP64
|
||||||
// 32-bit oops don't make sense for the 64-bit VM on sparc
|
// 32-bit oops don't make sense for the 64-bit VM on sparc
|
||||||
// since the 32-bit VM has the same registers and smaller objects.
|
// since the 32-bit VM has the same registers and smaller objects.
|
||||||
|
@ -94,7 +94,13 @@ protected:
|
|||||||
static bool is_M_family(int features) { return (features & M_family_m) != 0; }
|
static bool is_M_family(int features) { return (features & M_family_m) != 0; }
|
||||||
static bool is_T_family(int features) { return (features & T_family_m) != 0; }
|
static bool is_T_family(int features) { return (features & T_family_m) != 0; }
|
||||||
static bool is_niagara() { return is_T_family(_features); }
|
static bool is_niagara() { return is_T_family(_features); }
|
||||||
DEBUG_ONLY( static bool is_niagara(int features) { return (features & sun4v_m) != 0; } )
|
#ifdef ASSERT
|
||||||
|
static bool is_niagara(int features) {
|
||||||
|
// 'sun4v_m' may be defined on both Sun/Oracle Sparc CPUs as well as
|
||||||
|
// on Fujitsu Sparc64 CPUs, but only Sun/Oracle Sparcs can be 'niagaras'.
|
||||||
|
return (features & sun4v_m) != 0 && (features & sparc64_family_m) == 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Returns true if it is niagara1 (T1).
|
// Returns true if it is niagara1 (T1).
|
||||||
static bool is_T1_model(int features) { return is_T_family(features) && ((features & T1_model_m) != 0); }
|
static bool is_T1_model(int features) { return is_T_family(features) && ((features & T1_model_m) != 0); }
|
||||||
|
@ -1719,10 +1719,12 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
|||||||
|
|
||||||
BarrierSet* bs = Universe::heap()->barrier_set();
|
BarrierSet* bs = Universe::heap()->barrier_set();
|
||||||
CardTableModRefBS* ct = (CardTableModRefBS*)bs;
|
CardTableModRefBS* ct = (CardTableModRefBS*)bs;
|
||||||
|
assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
|
||||||
|
|
||||||
Label done;
|
Label done;
|
||||||
Label runtime;
|
Label runtime;
|
||||||
|
|
||||||
// At this point we know new_value is non-NULL and the new_value crosses regsion.
|
// At this point we know new_value is non-NULL and the new_value crosses regions.
|
||||||
// Must check to see if card is already dirty
|
// Must check to see if card is already dirty
|
||||||
|
|
||||||
const Register thread = NOT_LP64(rax) LP64_ONLY(r15_thread);
|
const Register thread = NOT_LP64(rax) LP64_ONLY(r15_thread);
|
||||||
@ -1735,26 +1737,17 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
|||||||
__ push(rax);
|
__ push(rax);
|
||||||
__ push(rcx);
|
__ push(rcx);
|
||||||
|
|
||||||
NOT_LP64(__ get_thread(thread);)
|
const Register cardtable = rax;
|
||||||
ExternalAddress cardtable((address)ct->byte_map_base);
|
|
||||||
assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
|
|
||||||
|
|
||||||
const Register card_addr = rcx;
|
const Register card_addr = rcx;
|
||||||
#ifdef _LP64
|
|
||||||
const Register tmp = rscratch1;
|
|
||||||
f.load_argument(0, card_addr);
|
|
||||||
__ shrq(card_addr, CardTableModRefBS::card_shift);
|
|
||||||
__ lea(tmp, cardtable);
|
|
||||||
// get the address of the card
|
|
||||||
__ addq(card_addr, tmp);
|
|
||||||
#else
|
|
||||||
const Register card_index = rcx;
|
|
||||||
f.load_argument(0, card_index);
|
|
||||||
__ shrl(card_index, CardTableModRefBS::card_shift);
|
|
||||||
|
|
||||||
Address index(noreg, card_index, Address::times_1);
|
f.load_argument(0, card_addr);
|
||||||
__ leal(card_addr, __ as_Address(ArrayAddress(cardtable, index)));
|
__ shrptr(card_addr, CardTableModRefBS::card_shift);
|
||||||
#endif
|
// Do not use ExternalAddress to load 'byte_map_base', since 'byte_map_base' is NOT
|
||||||
|
// a valid address and therefore is not properly handled by the relocation code.
|
||||||
|
__ movptr(cardtable, (intptr_t)ct->byte_map_base);
|
||||||
|
__ addptr(card_addr, cardtable);
|
||||||
|
|
||||||
|
NOT_LP64(__ get_thread(thread);)
|
||||||
|
|
||||||
__ cmpb(Address(card_addr, 0), (int)G1SATBCardTableModRefBS::g1_young_card_val());
|
__ cmpb(Address(card_addr, 0), (int)G1SATBCardTableModRefBS::g1_young_card_val());
|
||||||
__ jcc(Assembler::equal, done);
|
__ jcc(Assembler::equal, done);
|
||||||
|
@ -3354,6 +3354,8 @@ void MacroAssembler::g1_write_barrier_post(Register store_addr,
|
|||||||
|
|
||||||
BarrierSet* bs = Universe::heap()->barrier_set();
|
BarrierSet* bs = Universe::heap()->barrier_set();
|
||||||
CardTableModRefBS* ct = (CardTableModRefBS*)bs;
|
CardTableModRefBS* ct = (CardTableModRefBS*)bs;
|
||||||
|
assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
|
||||||
|
|
||||||
Label done;
|
Label done;
|
||||||
Label runtime;
|
Label runtime;
|
||||||
|
|
||||||
@ -3371,28 +3373,16 @@ void MacroAssembler::g1_write_barrier_post(Register store_addr,
|
|||||||
|
|
||||||
// storing region crossing non-NULL, is card already dirty?
|
// storing region crossing non-NULL, is card already dirty?
|
||||||
|
|
||||||
ExternalAddress cardtable((address) ct->byte_map_base);
|
|
||||||
assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
|
|
||||||
#ifdef _LP64
|
|
||||||
const Register card_addr = tmp;
|
const Register card_addr = tmp;
|
||||||
|
const Register cardtable = tmp2;
|
||||||
|
|
||||||
movq(card_addr, store_addr);
|
movptr(card_addr, store_addr);
|
||||||
shrq(card_addr, CardTableModRefBS::card_shift);
|
shrptr(card_addr, CardTableModRefBS::card_shift);
|
||||||
|
// Do not use ExternalAddress to load 'byte_map_base', since 'byte_map_base' is NOT
|
||||||
|
// a valid address and therefore is not properly handled by the relocation code.
|
||||||
|
movptr(cardtable, (intptr_t)ct->byte_map_base);
|
||||||
|
addptr(card_addr, cardtable);
|
||||||
|
|
||||||
lea(tmp2, cardtable);
|
|
||||||
|
|
||||||
// get the address of the card
|
|
||||||
addq(card_addr, tmp2);
|
|
||||||
#else
|
|
||||||
const Register card_index = tmp;
|
|
||||||
|
|
||||||
movl(card_index, store_addr);
|
|
||||||
shrl(card_index, CardTableModRefBS::card_shift);
|
|
||||||
|
|
||||||
Address index(noreg, card_index, Address::times_1);
|
|
||||||
const Register card_addr = tmp;
|
|
||||||
lea(card_addr, as_Address(ArrayAddress(cardtable, index)));
|
|
||||||
#endif
|
|
||||||
cmpb(Address(card_addr, 0), (int)G1SATBCardTableModRefBS::g1_young_card_val());
|
cmpb(Address(card_addr, 0), (int)G1SATBCardTableModRefBS::g1_young_card_val());
|
||||||
jcc(Assembler::equal, done);
|
jcc(Assembler::equal, done);
|
||||||
|
|
||||||
@ -3416,7 +3406,7 @@ void MacroAssembler::g1_write_barrier_post(Register store_addr,
|
|||||||
movq(Address(tmp2, 0), card_addr);
|
movq(Address(tmp2, 0), card_addr);
|
||||||
#else
|
#else
|
||||||
addl(tmp2, queue_index);
|
addl(tmp2, queue_index);
|
||||||
movl(Address(tmp2, 0), card_index);
|
movl(Address(tmp2, 0), card_addr);
|
||||||
#endif
|
#endif
|
||||||
jmp(done);
|
jmp(done);
|
||||||
|
|
||||||
@ -3468,25 +3458,19 @@ void MacroAssembler::store_check_part_2(Register obj) {
|
|||||||
|
|
||||||
// The calculation for byte_map_base is as follows:
|
// The calculation for byte_map_base is as follows:
|
||||||
// byte_map_base = _byte_map - (uintptr_t(low_bound) >> card_shift);
|
// byte_map_base = _byte_map - (uintptr_t(low_bound) >> card_shift);
|
||||||
// So this essentially converts an address to a displacement and
|
// So this essentially converts an address to a displacement and it will
|
||||||
// it will never need to be relocated. On 64bit however the value may be too
|
// never need to be relocated. On 64bit however the value may be too
|
||||||
// large for a 32bit displacement
|
// large for a 32bit displacement.
|
||||||
|
|
||||||
intptr_t disp = (intptr_t) ct->byte_map_base;
|
intptr_t disp = (intptr_t) ct->byte_map_base;
|
||||||
if (is_simm32(disp)) {
|
if (is_simm32(disp)) {
|
||||||
Address cardtable(noreg, obj, Address::times_1, disp);
|
Address cardtable(noreg, obj, Address::times_1, disp);
|
||||||
movb(cardtable, 0);
|
movb(cardtable, 0);
|
||||||
} else {
|
} else {
|
||||||
// By doing it as an ExternalAddress disp could be converted to a rip-relative
|
// By doing it as an ExternalAddress 'disp' could be converted to a rip-relative
|
||||||
// displacement and done in a single instruction given favorable mapping and
|
// displacement and done in a single instruction given favorable mapping and a
|
||||||
// a smarter version of as_Address. Worst case it is two instructions which
|
// smarter version of as_Address. However, 'ExternalAddress' generates a relocation
|
||||||
// is no worse off then loading disp into a register and doing as a simple
|
// entry and that entry is not properly handled by the relocation code.
|
||||||
// Address() as above.
|
AddressLiteral cardtable((address)ct->byte_map_base, relocInfo::none);
|
||||||
// We can't do as ExternalAddress as the only style since if disp == 0 we'll
|
|
||||||
// assert since NULL isn't acceptable in a reloci (see 6644928). In any case
|
|
||||||
// in some cases we'll get a single instruction version.
|
|
||||||
|
|
||||||
ExternalAddress cardtable((address)disp);
|
|
||||||
Address index(noreg, obj, Address::times_1);
|
Address index(noreg, obj, Address::times_1);
|
||||||
movb(as_Address(ArrayAddress(cardtable, index)), 0);
|
movb(as_Address(ArrayAddress(cardtable, index)), 0);
|
||||||
}
|
}
|
||||||
|
@ -625,13 +625,13 @@ static GrowableArray<EmptyVtableSlot*>* find_empty_vtable_slots(
|
|||||||
while (super != NULL) {
|
while (super != NULL) {
|
||||||
for (int i = 0; i < super->methods()->length(); ++i) {
|
for (int i = 0; i < super->methods()->length(); ++i) {
|
||||||
Method* m = super->methods()->at(i);
|
Method* m = super->methods()->at(i);
|
||||||
if (m->is_overpass()) {
|
if (m->is_overpass() || m->is_static()) {
|
||||||
// m is a method that would have been a miranda if not for the
|
// m is a method that would have been a miranda if not for the
|
||||||
// default method processing that occurred on behalf of our superclass,
|
// default method processing that occurred on behalf of our superclass,
|
||||||
// so it's a method we want to re-examine in this new context. That is,
|
// so it's a method we want to re-examine in this new context. That is,
|
||||||
// unless we have a real implementation of it in the current class.
|
// unless we have a real implementation of it in the current class.
|
||||||
Method* impl = klass->lookup_method(m->name(), m->signature());
|
Method* impl = klass->lookup_method(m->name(), m->signature());
|
||||||
if (impl == NULL || impl->is_overpass()) {
|
if (impl == NULL || impl->is_overpass() || impl->is_static()) {
|
||||||
if (!already_in_vtable_slots(slots, m)) {
|
if (!already_in_vtable_slots(slots, m)) {
|
||||||
slots->append(new EmptyVtableSlot(m));
|
slots->append(new EmptyVtableSlot(m));
|
||||||
}
|
}
|
||||||
@ -648,7 +648,7 @@ static GrowableArray<EmptyVtableSlot*>* find_empty_vtable_slots(
|
|||||||
// so it's a method we want to re-examine in this new context. That is,
|
// so it's a method we want to re-examine in this new context. That is,
|
||||||
// unless we have a real implementation of it in the current class.
|
// unless we have a real implementation of it in the current class.
|
||||||
Method* impl = klass->lookup_method(m->name(), m->signature());
|
Method* impl = klass->lookup_method(m->name(), m->signature());
|
||||||
if (impl == NULL || impl->is_overpass()) {
|
if (impl == NULL || impl->is_overpass() || impl->is_static()) {
|
||||||
if (!already_in_vtable_slots(slots, m)) {
|
if (!already_in_vtable_slots(slots, m)) {
|
||||||
slots->append(new EmptyVtableSlot(m));
|
slots->append(new EmptyVtableSlot(m));
|
||||||
}
|
}
|
||||||
|
@ -66,29 +66,10 @@ void MarkSweep::AdjustKlassClosure::do_klass(Klass* klass) {
|
|||||||
klass->oops_do(&MarkSweep::adjust_pointer_closure);
|
klass->oops_do(&MarkSweep::adjust_pointer_closure);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MarkSweep::follow_klass(Klass* klass) {
|
|
||||||
ClassLoaderData* cld = klass->class_loader_data();
|
|
||||||
// The actual processing of the klass is done when we
|
|
||||||
// traverse the list of Klasses in the class loader data.
|
|
||||||
MarkSweep::follow_class_loader(cld);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MarkSweep::adjust_klass(Klass* klass) {
|
|
||||||
ClassLoaderData* cld = klass->class_loader_data();
|
|
||||||
// The actual processing of the klass is done when we
|
|
||||||
// traverse the list of Klasses in the class loader data.
|
|
||||||
MarkSweep::adjust_class_loader(cld);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MarkSweep::follow_class_loader(ClassLoaderData* cld) {
|
void MarkSweep::follow_class_loader(ClassLoaderData* cld) {
|
||||||
cld->oops_do(&MarkSweep::mark_and_push_closure, &MarkSweep::follow_klass_closure, true);
|
cld->oops_do(&MarkSweep::mark_and_push_closure, &MarkSweep::follow_klass_closure, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MarkSweep::adjust_class_loader(ClassLoaderData* cld) {
|
|
||||||
cld->oops_do(&MarkSweep::adjust_pointer_closure, &MarkSweep::adjust_klass_closure, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MarkSweep::follow_stack() {
|
void MarkSweep::follow_stack() {
|
||||||
do {
|
do {
|
||||||
while (!_marking_stack.is_empty()) {
|
while (!_marking_stack.is_empty()) {
|
||||||
|
@ -172,10 +172,8 @@ class MarkSweep : AllStatic {
|
|||||||
static void follow_stack(); // Empty marking stack.
|
static void follow_stack(); // Empty marking stack.
|
||||||
|
|
||||||
static void follow_klass(Klass* klass);
|
static void follow_klass(Klass* klass);
|
||||||
static void adjust_klass(Klass* klass);
|
|
||||||
|
|
||||||
static void follow_class_loader(ClassLoaderData* cld);
|
static void follow_class_loader(ClassLoaderData* cld);
|
||||||
static void adjust_class_loader(ClassLoaderData* cld);
|
|
||||||
|
|
||||||
static void preserve_mark(oop p, markOop mark);
|
static void preserve_mark(oop p, markOop mark);
|
||||||
// Save the mark word so it can be restored later
|
// Save the mark word so it can be restored later
|
||||||
|
@ -44,6 +44,11 @@ inline void MarkSweep::mark_object(oop obj) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void MarkSweep::follow_klass(Klass* klass) {
|
||||||
|
oop op = klass->klass_holder();
|
||||||
|
MarkSweep::mark_and_push(&op);
|
||||||
|
}
|
||||||
|
|
||||||
template <class T> inline void MarkSweep::follow_root(T* p) {
|
template <class T> inline void MarkSweep::follow_root(T* p) {
|
||||||
assert(!Universe::heap()->is_in_reserved(p),
|
assert(!Universe::heap()->is_in_reserved(p),
|
||||||
"roots shouldn't be things within the heap");
|
"roots shouldn't be things within the heap");
|
||||||
|
@ -242,7 +242,7 @@ void LinkResolver::resolve_klass(KlassHandle& result, constantPoolHandle pool, i
|
|||||||
|
|
||||||
// Look up method in klasses, including static methods
|
// Look up method in klasses, including static methods
|
||||||
// Then look up local default methods
|
// Then look up local default methods
|
||||||
void LinkResolver::lookup_method_in_klasses(methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS) {
|
void LinkResolver::lookup_method_in_klasses(methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, bool checkpolymorphism, TRAPS) {
|
||||||
Method* result_oop = klass->uncached_lookup_method(name, signature);
|
Method* result_oop = klass->uncached_lookup_method(name, signature);
|
||||||
if (result_oop == NULL) {
|
if (result_oop == NULL) {
|
||||||
Array<Method*>* default_methods = InstanceKlass::cast(klass())->default_methods();
|
Array<Method*>* default_methods = InstanceKlass::cast(klass())->default_methods();
|
||||||
@ -251,7 +251,7 @@ void LinkResolver::lookup_method_in_klasses(methodHandle& result, KlassHandle kl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EnableInvokeDynamic && result_oop != NULL) {
|
if (checkpolymorphism && EnableInvokeDynamic && result_oop != NULL) {
|
||||||
vmIntrinsics::ID iid = result_oop->intrinsic_id();
|
vmIntrinsics::ID iid = result_oop->intrinsic_id();
|
||||||
if (MethodHandles::is_signature_polymorphic(iid)) {
|
if (MethodHandles::is_signature_polymorphic(iid)) {
|
||||||
// Do not link directly to these. The VM must produce a synthetic one using lookup_polymorphic_method.
|
// Do not link directly to these. The VM must produce a synthetic one using lookup_polymorphic_method.
|
||||||
@ -267,8 +267,8 @@ void LinkResolver::lookup_instance_method_in_klasses(methodHandle& result, Klass
|
|||||||
Method* result_oop = klass->uncached_lookup_method(name, signature);
|
Method* result_oop = klass->uncached_lookup_method(name, signature);
|
||||||
result = methodHandle(THREAD, result_oop);
|
result = methodHandle(THREAD, result_oop);
|
||||||
while (!result.is_null() && result->is_static() && result->method_holder()->super() != NULL) {
|
while (!result.is_null() && result->is_static() && result->method_holder()->super() != NULL) {
|
||||||
klass = KlassHandle(THREAD, result->method_holder()->super());
|
KlassHandle super_klass = KlassHandle(THREAD, result->method_holder()->super());
|
||||||
result = methodHandle(THREAD, klass->uncached_lookup_method(name, signature));
|
result = methodHandle(THREAD, super_klass->uncached_lookup_method(name, signature));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.is_null()) {
|
if (result.is_null()) {
|
||||||
@ -503,11 +503,14 @@ void LinkResolver::resolve_method_statically(methodHandle& resolved_method, Klas
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (code == Bytecodes::_invokeinterface) {
|
if (code == Bytecodes::_invokeinterface) {
|
||||||
resolve_interface_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, true, CHECK);
|
resolve_interface_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, true, true, CHECK);
|
||||||
} else if (code == Bytecodes::_invokevirtual) {
|
} else if (code == Bytecodes::_invokevirtual) {
|
||||||
resolve_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, true, true, CHECK);
|
resolve_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, true, true, CHECK);
|
||||||
} else {
|
} else if (!resolved_klass->is_interface()) {
|
||||||
resolve_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, true, false, CHECK);
|
resolve_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, true, false, CHECK);
|
||||||
|
} else {
|
||||||
|
bool nostatics = (code == Bytecodes::_invokestatic) ? false : true;
|
||||||
|
resolve_interface_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, true, nostatics, CHECK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -528,7 +531,7 @@ void LinkResolver::resolve_method(methodHandle& resolved_method, KlassHandle res
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 2. lookup method in resolved klass and its super klasses
|
// 2. lookup method in resolved klass and its super klasses
|
||||||
lookup_method_in_klasses(resolved_method, resolved_klass, method_name, method_signature, CHECK);
|
lookup_method_in_klasses(resolved_method, resolved_klass, method_name, method_signature, true, CHECK);
|
||||||
|
|
||||||
if (resolved_method.is_null()) { // not found in the class hierarchy
|
if (resolved_method.is_null()) { // not found in the class hierarchy
|
||||||
// 3. lookup method in all the interfaces implemented by the resolved klass
|
// 3. lookup method in all the interfaces implemented by the resolved klass
|
||||||
@ -612,7 +615,8 @@ void LinkResolver::resolve_interface_method(methodHandle& resolved_method,
|
|||||||
Symbol* method_name,
|
Symbol* method_name,
|
||||||
Symbol* method_signature,
|
Symbol* method_signature,
|
||||||
KlassHandle current_klass,
|
KlassHandle current_klass,
|
||||||
bool check_access, TRAPS) {
|
bool check_access,
|
||||||
|
bool nostatics, TRAPS) {
|
||||||
|
|
||||||
// check if klass is interface
|
// check if klass is interface
|
||||||
if (!resolved_klass->is_interface()) {
|
if (!resolved_klass->is_interface()) {
|
||||||
@ -623,7 +627,8 @@ void LinkResolver::resolve_interface_method(methodHandle& resolved_method,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// lookup method in this interface or its super, java.lang.Object
|
// lookup method in this interface or its super, java.lang.Object
|
||||||
lookup_instance_method_in_klasses(resolved_method, resolved_klass, method_name, method_signature, CHECK);
|
// JDK8: also look for static methods
|
||||||
|
lookup_method_in_klasses(resolved_method, resolved_klass, method_name, method_signature, false, CHECK);
|
||||||
|
|
||||||
if (resolved_method.is_null()) {
|
if (resolved_method.is_null()) {
|
||||||
// lookup method in all the super-interfaces
|
// lookup method in all the super-interfaces
|
||||||
@ -638,6 +643,16 @@ void LinkResolver::resolve_interface_method(methodHandle& resolved_method,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nostatics && resolved_method->is_static()) {
|
||||||
|
ResourceMark rm(THREAD);
|
||||||
|
char buf[200];
|
||||||
|
jio_snprintf(buf, sizeof(buf), "Expected instance not static method %s", Method::name_and_sig_as_C_string(resolved_klass(),
|
||||||
|
resolved_method->name(),
|
||||||
|
resolved_method->signature()));
|
||||||
|
THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (check_access) {
|
if (check_access) {
|
||||||
// JDK8 adds non-public interface methods, and accessability check requirement
|
// JDK8 adds non-public interface methods, and accessability check requirement
|
||||||
assert(current_klass.not_null() , "current_klass should not be null");
|
assert(current_klass.not_null() , "current_klass should not be null");
|
||||||
@ -864,7 +879,11 @@ void LinkResolver::linktime_resolve_static_method(methodHandle& resolved_method,
|
|||||||
Symbol* method_name, Symbol* method_signature,
|
Symbol* method_name, Symbol* method_signature,
|
||||||
KlassHandle current_klass, bool check_access, TRAPS) {
|
KlassHandle current_klass, bool check_access, TRAPS) {
|
||||||
|
|
||||||
|
if (!resolved_klass->is_interface()) {
|
||||||
resolve_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, false, CHECK);
|
resolve_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, false, CHECK);
|
||||||
|
} else {
|
||||||
|
resolve_interface_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, false, CHECK);
|
||||||
|
}
|
||||||
assert(resolved_method->name() != vmSymbols::class_initializer_name(), "should have been checked in verifier");
|
assert(resolved_method->name() != vmSymbols::class_initializer_name(), "should have been checked in verifier");
|
||||||
|
|
||||||
// check if static
|
// check if static
|
||||||
@ -898,7 +917,11 @@ void LinkResolver::linktime_resolve_special_method(methodHandle& resolved_method
|
|||||||
// and the selected method is recalculated relative to the direct superclass
|
// and the selected method is recalculated relative to the direct superclass
|
||||||
// superinterface.method, which explicitly does not check shadowing
|
// superinterface.method, which explicitly does not check shadowing
|
||||||
|
|
||||||
|
if (!resolved_klass->is_interface()) {
|
||||||
resolve_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, false, CHECK);
|
resolve_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, false, CHECK);
|
||||||
|
} else {
|
||||||
|
resolve_interface_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, true, CHECK);
|
||||||
|
}
|
||||||
|
|
||||||
// check if method name is <init>, that it is found in same klass as static type
|
// check if method name is <init>, that it is found in same klass as static type
|
||||||
if (resolved_method->name() == vmSymbols::object_initializer_name() &&
|
if (resolved_method->name() == vmSymbols::object_initializer_name() &&
|
||||||
@ -1219,7 +1242,7 @@ void LinkResolver::resolve_interface_call(CallInfo& result, Handle recv, KlassHa
|
|||||||
void LinkResolver::linktime_resolve_interface_method(methodHandle& resolved_method, KlassHandle resolved_klass, Symbol* method_name,
|
void LinkResolver::linktime_resolve_interface_method(methodHandle& resolved_method, KlassHandle resolved_klass, Symbol* method_name,
|
||||||
Symbol* method_signature, KlassHandle current_klass, bool check_access, TRAPS) {
|
Symbol* method_signature, KlassHandle current_klass, bool check_access, TRAPS) {
|
||||||
// normal interface method resolution
|
// normal interface method resolution
|
||||||
resolve_interface_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, CHECK);
|
resolve_interface_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, true, CHECK);
|
||||||
|
|
||||||
assert(resolved_method->name() != vmSymbols::object_initializer_name(), "should have been checked in verifier");
|
assert(resolved_method->name() != vmSymbols::object_initializer_name(), "should have been checked in verifier");
|
||||||
assert(resolved_method->name() != vmSymbols::class_initializer_name (), "should have been checked in verifier");
|
assert(resolved_method->name() != vmSymbols::class_initializer_name (), "should have been checked in verifier");
|
||||||
|
@ -124,7 +124,7 @@ class LinkResolver: AllStatic {
|
|||||||
friend class klassItable;
|
friend class klassItable;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void lookup_method_in_klasses (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
|
static void lookup_method_in_klasses (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, bool checkpolymorphism, TRAPS);
|
||||||
static void lookup_instance_method_in_klasses (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
|
static void lookup_instance_method_in_klasses (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
|
||||||
static void lookup_method_in_interfaces (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
|
static void lookup_method_in_interfaces (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
|
||||||
static void lookup_polymorphic_method (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature,
|
static void lookup_polymorphic_method (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature,
|
||||||
@ -134,7 +134,7 @@ class LinkResolver: AllStatic {
|
|||||||
|
|
||||||
static void resolve_pool (KlassHandle& resolved_klass, Symbol*& method_name, Symbol*& method_signature, KlassHandle& current_klass, constantPoolHandle pool, int index, TRAPS);
|
static void resolve_pool (KlassHandle& resolved_klass, Symbol*& method_name, Symbol*& method_signature, KlassHandle& current_klass, constantPoolHandle pool, int index, TRAPS);
|
||||||
|
|
||||||
static void resolve_interface_method(methodHandle& resolved_method, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, bool check_access, TRAPS);
|
static void resolve_interface_method(methodHandle& resolved_method, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, bool check_access, bool nostatics, TRAPS);
|
||||||
static void resolve_method (methodHandle& resolved_method, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, bool check_access, bool require_methodref, TRAPS);
|
static void resolve_method (methodHandle& resolved_method, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, bool check_access, bool require_methodref, TRAPS);
|
||||||
|
|
||||||
static void linktime_resolve_static_method (methodHandle& resolved_method, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, bool check_access, TRAPS);
|
static void linktime_resolve_static_method (methodHandle& resolved_method, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, bool check_access, TRAPS);
|
||||||
|
@ -1427,6 +1427,17 @@ Method* InstanceKlass::find_method(Symbol* name, Symbol* signature) const {
|
|||||||
return InstanceKlass::find_method(methods(), name, signature);
|
return InstanceKlass::find_method(methods(), name, signature);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// find_instance_method looks up the name/signature in the local methods array
|
||||||
|
// and skips over static methods
|
||||||
|
Method* InstanceKlass::find_instance_method(
|
||||||
|
Array<Method*>* methods, Symbol* name, Symbol* signature) {
|
||||||
|
Method* meth = InstanceKlass::find_method(methods, name, signature);
|
||||||
|
if (meth != NULL && meth->is_static()) {
|
||||||
|
meth = NULL;
|
||||||
|
}
|
||||||
|
return meth;
|
||||||
|
}
|
||||||
|
|
||||||
// find_method looks up the name/signature in the local methods array
|
// find_method looks up the name/signature in the local methods array
|
||||||
Method* InstanceKlass::find_method(
|
Method* InstanceKlass::find_method(
|
||||||
Array<Method*>* methods, Symbol* name, Symbol* signature) {
|
Array<Method*>* methods, Symbol* name, Symbol* signature) {
|
||||||
@ -2169,7 +2180,6 @@ int InstanceKlass::oop_adjust_pointers(oop obj) {
|
|||||||
obj, \
|
obj, \
|
||||||
MarkSweep::adjust_pointer(p), \
|
MarkSweep::adjust_pointer(p), \
|
||||||
assert_is_in)
|
assert_is_in)
|
||||||
MarkSweep::adjust_klass(obj->klass());
|
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -515,6 +515,7 @@ class InstanceKlass: public Klass {
|
|||||||
// find a local method (returns NULL if not found)
|
// find a local method (returns NULL if not found)
|
||||||
Method* find_method(Symbol* name, Symbol* signature) const;
|
Method* find_method(Symbol* name, Symbol* signature) const;
|
||||||
static Method* find_method(Array<Method*>* methods, Symbol* name, Symbol* signature);
|
static Method* find_method(Array<Method*>* methods, Symbol* name, Symbol* signature);
|
||||||
|
static Method* find_instance_method(Array<Method*>* methods, Symbol* name, Symbol* signature);
|
||||||
|
|
||||||
// find a local method index in default_methods (returns -1 if not found)
|
// find a local method index in default_methods (returns -1 if not found)
|
||||||
static int find_method_index(Array<Method*>* methods, Symbol* name, Symbol* signature);
|
static int find_method_index(Array<Method*>* methods, Symbol* name, Symbol* signature);
|
||||||
|
@ -155,7 +155,13 @@ void InstanceMirrorKlass::oop_follow_contents(oop obj) {
|
|||||||
// Follow the klass field in the mirror.
|
// Follow the klass field in the mirror.
|
||||||
Klass* klass = java_lang_Class::as_Klass(obj);
|
Klass* klass = java_lang_Class::as_Klass(obj);
|
||||||
if (klass != NULL) {
|
if (klass != NULL) {
|
||||||
|
// For anonymous classes we need to handle the class loader data,
|
||||||
|
// otherwise it won't be claimed and can be unloaded.
|
||||||
|
if (klass->oop_is_instance() && InstanceKlass::cast(klass)->is_anonymous()) {
|
||||||
|
MarkSweep::follow_class_loader(klass->class_loader_data());
|
||||||
|
} else {
|
||||||
MarkSweep::follow_klass(klass);
|
MarkSweep::follow_klass(klass);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// If klass is NULL then this a mirror for a primitive type.
|
// If klass is NULL then this a mirror for a primitive type.
|
||||||
// We don't have to follow them, since they are handled as strong
|
// We don't have to follow them, since they are handled as strong
|
||||||
@ -196,17 +202,6 @@ int InstanceMirrorKlass::oop_adjust_pointers(oop obj) {
|
|||||||
int size = oop_size(obj);
|
int size = oop_size(obj);
|
||||||
InstanceKlass::oop_adjust_pointers(obj);
|
InstanceKlass::oop_adjust_pointers(obj);
|
||||||
|
|
||||||
// Follow the klass field in the mirror.
|
|
||||||
Klass* klass = java_lang_Class::as_Klass(obj);
|
|
||||||
if (klass != NULL) {
|
|
||||||
MarkSweep::adjust_klass(klass);
|
|
||||||
} else {
|
|
||||||
// If klass is NULL then this a mirror for a primitive type.
|
|
||||||
// We don't have to follow them, since they are handled as strong
|
|
||||||
// roots in Universe::oops_do.
|
|
||||||
assert(java_lang_Class::is_primitive(obj), "Sanity check");
|
|
||||||
}
|
|
||||||
|
|
||||||
InstanceMirrorKlass_OOP_ITERATE( \
|
InstanceMirrorKlass_OOP_ITERATE( \
|
||||||
start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj), \
|
start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj), \
|
||||||
MarkSweep::adjust_pointer(p), \
|
MarkSweep::adjust_pointer(p), \
|
||||||
|
@ -665,6 +665,11 @@ bool klassVtable::is_miranda_entry_at(int i) {
|
|||||||
|
|
||||||
// check if a method is a miranda method, given a class's methods table,
|
// check if a method is a miranda method, given a class's methods table,
|
||||||
// its default_method table and its super
|
// its default_method table and its super
|
||||||
|
// Miranda methods are calculated twice:
|
||||||
|
// first: before vtable size calculation: including abstract and default
|
||||||
|
// This is seen by default method creation
|
||||||
|
// Second: recalculated during vtable initialization: only abstract
|
||||||
|
// This is seen by link resolution and selection.
|
||||||
// "miranda" means not static, not defined by this class.
|
// "miranda" means not static, not defined by this class.
|
||||||
// private methods in interfaces do not belong in the miranda list.
|
// private methods in interfaces do not belong in the miranda list.
|
||||||
// the caller must make sure that the method belongs to an interface implemented by the class
|
// the caller must make sure that the method belongs to an interface implemented by the class
|
||||||
@ -678,7 +683,8 @@ bool klassVtable::is_miranda(Method* m, Array<Method*>* class_methods,
|
|||||||
}
|
}
|
||||||
Symbol* name = m->name();
|
Symbol* name = m->name();
|
||||||
Symbol* signature = m->signature();
|
Symbol* signature = m->signature();
|
||||||
if (InstanceKlass::find_method(class_methods, name, signature) == NULL) {
|
|
||||||
|
if (InstanceKlass::find_instance_method(class_methods, name, signature) == NULL) {
|
||||||
// did not find it in the method table of the current class
|
// did not find it in the method table of the current class
|
||||||
if ((default_methods == NULL) ||
|
if ((default_methods == NULL) ||
|
||||||
InstanceKlass::find_method(default_methods, name, signature) == NULL) {
|
InstanceKlass::find_method(default_methods, name, signature) == NULL) {
|
||||||
@ -688,6 +694,12 @@ bool klassVtable::is_miranda(Method* m, Array<Method*>* class_methods,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Method* mo = InstanceKlass::cast(super)->lookup_method(name, signature);
|
Method* mo = InstanceKlass::cast(super)->lookup_method(name, signature);
|
||||||
|
while (mo != NULL && mo->access_flags().is_static()
|
||||||
|
&& mo->method_holder() != NULL
|
||||||
|
&& mo->method_holder()->super() != NULL)
|
||||||
|
{
|
||||||
|
mo = mo->method_holder()->super()->uncached_lookup_method(name, signature);
|
||||||
|
}
|
||||||
if (mo == NULL || mo->access_flags().is_private() ) {
|
if (mo == NULL || mo->access_flags().is_private() ) {
|
||||||
// super class hierarchy does not implement it or protection is different
|
// super class hierarchy does not implement it or protection is different
|
||||||
return true;
|
return true;
|
||||||
|
@ -569,7 +569,6 @@ int ObjArrayKlass::oop_adjust_pointers(oop obj) {
|
|||||||
// Get size before changing pointers.
|
// Get size before changing pointers.
|
||||||
// Don't call size() or oop_size() since that is a virtual call.
|
// Don't call size() or oop_size() since that is a virtual call.
|
||||||
int size = a->object_size();
|
int size = a->object_size();
|
||||||
MarkSweep::adjust_klass(a->klass());
|
|
||||||
ObjArrayKlass_OOP_ITERATE(a, p, MarkSweep::adjust_pointer(p))
|
ObjArrayKlass_OOP_ITERATE(a, p, MarkSweep::adjust_pointer(p))
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
@ -637,7 +637,7 @@
|
|||||||
diagnostic(bool, OptimizeExpensiveOps, true, \
|
diagnostic(bool, OptimizeExpensiveOps, true, \
|
||||||
"Find best control for expensive operations") \
|
"Find best control for expensive operations") \
|
||||||
\
|
\
|
||||||
product(bool, UseMathExactIntrinsics, true, \
|
experimental(bool, UseMathExactIntrinsics, false, \
|
||||||
"Enables intrinsification of various java.lang.Math functions") \
|
"Enables intrinsification of various java.lang.Math functions") \
|
||||||
\
|
\
|
||||||
experimental(bool, ReplaceInParentMaps, false, \
|
experimental(bool, ReplaceInParentMaps, false, \
|
||||||
|
@ -269,11 +269,20 @@ class VM_GetCurrentLocation : public VM_Operation {
|
|||||||
void doit() {
|
void doit() {
|
||||||
ResourceMark rmark; // _thread != Thread::current()
|
ResourceMark rmark; // _thread != Thread::current()
|
||||||
RegisterMap rm(_thread, false);
|
RegisterMap rm(_thread, false);
|
||||||
|
// There can be a race condition between a VM_Operation reaching a safepoint
|
||||||
|
// and the target thread exiting from Java execution.
|
||||||
|
// We must recheck the last Java frame still exists.
|
||||||
|
if (_thread->has_last_Java_frame()) {
|
||||||
javaVFrame* vf = _thread->last_java_vframe(&rm);
|
javaVFrame* vf = _thread->last_java_vframe(&rm);
|
||||||
assert(vf != NULL, "must have last java frame");
|
assert(vf != NULL, "must have last java frame");
|
||||||
Method* method = vf->method();
|
Method* method = vf->method();
|
||||||
_method_id = method->jmethod_id();
|
_method_id = method->jmethod_id();
|
||||||
_bci = vf->bci();
|
_bci = vf->bci();
|
||||||
|
} else {
|
||||||
|
// Clear current location as the target thread has no Java frames anymore.
|
||||||
|
_method_id = (jmethodID)NULL;
|
||||||
|
_bci = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void get_current_location(jmethodID *method_id, int *bci) {
|
void get_current_location(jmethodID *method_id, int *bci) {
|
||||||
*method_id = _method_id;
|
*method_id = _method_id;
|
||||||
|
@ -299,7 +299,7 @@ public:
|
|||||||
static inline bool is_breakpoint(address bcp);
|
static inline bool is_breakpoint(address bcp);
|
||||||
|
|
||||||
static void oops_do(OopClosure* f);
|
static void oops_do(OopClosure* f);
|
||||||
static void metadata_do(void f(Metadata*));
|
static void metadata_do(void f(Metadata*)) NOT_JVMTI_RETURN;
|
||||||
static void gc_epilogue();
|
static void gc_epilogue();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2278,18 +2278,6 @@ bool Arguments::check_vm_args_consistency() {
|
|||||||
status = status && verify_percentage(MarkSweepDeadRatio, "MarkSweepDeadRatio");
|
status = status && verify_percentage(MarkSweepDeadRatio, "MarkSweepDeadRatio");
|
||||||
|
|
||||||
status = status && verify_min_value(MarkSweepAlwaysCompactCount, 1, "MarkSweepAlwaysCompactCount");
|
status = status && verify_min_value(MarkSweepAlwaysCompactCount, 1, "MarkSweepAlwaysCompactCount");
|
||||||
#ifdef SPARC
|
|
||||||
if (UseConcMarkSweepGC || UseG1GC) {
|
|
||||||
// Issue a stern warning if the user has explicitly set
|
|
||||||
// UseMemSetInBOT (it is known to cause issues), but allow
|
|
||||||
// use for experimentation and debugging.
|
|
||||||
if (VM_Version::is_sun4v() && UseMemSetInBOT) {
|
|
||||||
assert(!FLAG_IS_DEFAULT(UseMemSetInBOT), "Error");
|
|
||||||
warning("Experimental flag -XX:+UseMemSetInBOT is known to cause instability"
|
|
||||||
" on sun4v; please understand that you are using at your own risk!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif // SPARC
|
|
||||||
|
|
||||||
if (PrintNMTStatistics) {
|
if (PrintNMTStatistics) {
|
||||||
#if INCLUDE_NMT
|
#if INCLUDE_NMT
|
||||||
|
@ -70,7 +70,6 @@ needs_jdk = \
|
|||||||
runtime/7107135/Test7107135.sh \
|
runtime/7107135/Test7107135.sh \
|
||||||
runtime/7158988/FieldMonitor.java \
|
runtime/7158988/FieldMonitor.java \
|
||||||
runtime/7194254/Test7194254.java \
|
runtime/7194254/Test7194254.java \
|
||||||
runtime/8026365/InvokeSpecialAnonTest.java \
|
|
||||||
runtime/jsig/Test8017498.sh \
|
runtime/jsig/Test8017498.sh \
|
||||||
runtime/Metaspace/FragmentMetaspace.java \
|
runtime/Metaspace/FragmentMetaspace.java \
|
||||||
runtime/NMT/BaselineWithParameter.java \
|
runtime/NMT/BaselineWithParameter.java \
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8024924
|
* @bug 8024924
|
||||||
* @summary Test non constant addExact
|
* @summary Test non constant addExact
|
||||||
* @compile AddExactICondTest.java
|
* @compile AddExactICondTest.java
|
||||||
* @run main AddExactICondTest
|
* @run main AddExactICondTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8024924
|
* @bug 8024924
|
||||||
* @summary Test constant addExact
|
* @summary Test constant addExact
|
||||||
* @compile AddExactIConstantTest.java Verify.java
|
* @compile AddExactIConstantTest.java Verify.java
|
||||||
* @run main AddExactIConstantTest
|
* @run main AddExactIConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8024924
|
* @bug 8024924
|
||||||
* @summary Test non constant addExact
|
* @summary Test non constant addExact
|
||||||
* @compile AddExactILoadTest.java Verify.java
|
* @compile AddExactILoadTest.java Verify.java
|
||||||
* @run main AddExactILoadTest
|
* @run main AddExactILoadTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8024924
|
* @bug 8024924
|
||||||
* @summary Test non constant addExact
|
* @summary Test non constant addExact
|
||||||
* @compile AddExactILoopDependentTest.java Verify.java
|
* @compile AddExactILoopDependentTest.java Verify.java
|
||||||
* @run main AddExactILoopDependentTest
|
* @run main AddExactILoopDependentTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8024924
|
* @bug 8024924
|
||||||
* @summary Test non constant addExact
|
* @summary Test non constant addExact
|
||||||
* @compile AddExactINonConstantTest.java Verify.java
|
* @compile AddExactINonConstantTest.java Verify.java
|
||||||
* @run main AddExactINonConstantTest
|
* @run main AddExactINonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8025657
|
* @bug 8025657
|
||||||
* @summary Test repeating addExact
|
* @summary Test repeating addExact
|
||||||
* @compile AddExactIRepeatTest.java Verify.java
|
* @compile AddExactIRepeatTest.java Verify.java
|
||||||
* @run main AddExactIRepeatTest
|
* @run main AddExactIRepeatTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test constant addExact
|
* @summary Test constant addExact
|
||||||
* @compile AddExactLConstantTest.java Verify.java
|
* @compile AddExactLConstantTest.java Verify.java
|
||||||
* @run main AddExactLConstantTest
|
* @run main AddExactLConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test non constant addExact
|
* @summary Test non constant addExact
|
||||||
* @compile AddExactLNonConstantTest.java Verify.java
|
* @compile AddExactLNonConstantTest.java Verify.java
|
||||||
* @run main AddExactLNonConstantTest
|
* @run main AddExactLNonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026722
|
* @bug 8026722
|
||||||
* @summary Verify that the compare after addExact is a signed compare
|
* @summary Verify that the compare after addExact is a signed compare
|
||||||
* @compile CompareTest.java
|
* @compile CompareTest.java
|
||||||
* @run main CompareTest
|
* @run main CompareTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test decrementExact
|
* @summary Test decrementExact
|
||||||
* @compile DecExactITest.java Verify.java
|
* @compile DecExactITest.java Verify.java
|
||||||
* @run main DecExactITest
|
* @run main DecExactITest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -25,8 +25,8 @@
|
|||||||
* @test
|
* @test
|
||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test decrementExact
|
* @summary Test decrementExact
|
||||||
* @compile DecExactITest.java Verify.java
|
* @compile DecExactLTest.java Verify.java
|
||||||
* @run main DecExactITest
|
* @run main DecExactLTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8028207
|
* @bug 8028207
|
||||||
* @summary Verify that GVN doesn't mess up the two addExacts
|
* @summary Verify that GVN doesn't mess up the two addExacts
|
||||||
* @compile GVNTest.java
|
* @compile GVNTest.java
|
||||||
* @run main GVNTest
|
* @run main GVNTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test incrementExact
|
* @summary Test incrementExact
|
||||||
* @compile IncExactITest.java Verify.java
|
* @compile IncExactITest.java Verify.java
|
||||||
* @run main IncExactITest
|
* @run main IncExactITest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test incrementExact
|
* @summary Test incrementExact
|
||||||
* @compile IncExactLTest.java Verify.java
|
* @compile IncExactLTest.java Verify.java
|
||||||
* @run main IncExactLTest
|
* @run main IncExactLTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test multiplyExact as condition
|
* @summary Test multiplyExact as condition
|
||||||
* @compile MulExactICondTest.java
|
* @compile MulExactICondTest.java
|
||||||
* @run main MulExactICondTest
|
* @run main MulExactICondTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test constant multiplyExact
|
* @summary Test constant multiplyExact
|
||||||
* @compile MulExactIConstantTest.java Verify.java
|
* @compile MulExactIConstantTest.java Verify.java
|
||||||
* @run main MulExactIConstantTest
|
* @run main MulExactIConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test multiplyExact
|
* @summary Test multiplyExact
|
||||||
* @compile MulExactILoadTest.java Verify.java
|
* @compile MulExactILoadTest.java Verify.java
|
||||||
* @run main MulExactILoadTest
|
* @run main MulExactILoadTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test loop dependent multiplyExact
|
* @summary Test loop dependent multiplyExact
|
||||||
* @compile MulExactILoopDependentTest.java Verify.java
|
* @compile MulExactILoopDependentTest.java Verify.java
|
||||||
* @run main MulExactILoopDependentTest
|
* @run main MulExactILoopDependentTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class MulExactILoopDependentTest {
|
public class MulExactILoopDependentTest {
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test non constant multiplyExact
|
* @summary Test non constant multiplyExact
|
||||||
* @compile MulExactINonConstantTest.java Verify.java
|
* @compile MulExactINonConstantTest.java Verify.java
|
||||||
* @run main MulExactINonConstantTest
|
* @run main MulExactINonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test repeating multiplyExact
|
* @summary Test repeating multiplyExact
|
||||||
* @compile MulExactIRepeatTest.java Verify.java
|
* @compile MulExactIRepeatTest.java Verify.java
|
||||||
* @run main MulExactIRepeatTest
|
* @run main MulExactIRepeatTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test constant mulExact
|
* @summary Test constant mulExact
|
||||||
* @compile MulExactLConstantTest.java Verify.java
|
* @compile MulExactLConstantTest.java Verify.java
|
||||||
* @run main MulExactLConstantTest
|
* @run main MulExactLConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test non constant mulExact
|
* @summary Test non constant mulExact
|
||||||
* @compile MulExactLNonConstantTest.java Verify.java
|
* @compile MulExactLNonConstantTest.java Verify.java
|
||||||
* @run main MulExactLNonConstantTest
|
* @run main MulExactLNonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test constant negExact
|
* @summary Test constant negExact
|
||||||
* @compile NegExactIConstantTest.java Verify.java
|
* @compile NegExactIConstantTest.java Verify.java
|
||||||
* @run main NegExactIConstantTest
|
* @run main NegExactIConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test negExact
|
* @summary Test negExact
|
||||||
* @compile NegExactILoadTest.java Verify.java
|
* @compile NegExactILoadTest.java Verify.java
|
||||||
* @run main NegExactILoadTest
|
* @run main NegExactILoadTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test negExact loop dependent
|
* @summary Test negExact loop dependent
|
||||||
* @compile NegExactILoopDependentTest.java Verify.java
|
* @compile NegExactILoopDependentTest.java Verify.java
|
||||||
* @run main NegExactILoopDependentTest
|
* @run main NegExactILoopDependentTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class NegExactILoopDependentTest {
|
public class NegExactILoopDependentTest {
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test non constant negExact
|
* @summary Test non constant negExact
|
||||||
* @compile NegExactINonConstantTest.java Verify.java
|
* @compile NegExactINonConstantTest.java Verify.java
|
||||||
* @run main NegExactINonConstantTest
|
* @run main NegExactINonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test constant negExact
|
* @summary Test constant negExact
|
||||||
* @compile NegExactLConstantTest.java Verify.java
|
* @compile NegExactLConstantTest.java Verify.java
|
||||||
* @run main NegExactLConstantTest
|
* @run main NegExactLConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test constant negExact
|
* @summary Test constant negExact
|
||||||
* @compile NegExactLNonConstantTest.java Verify.java
|
* @compile NegExactLNonConstantTest.java Verify.java
|
||||||
* @run main NegExactLNonConstantTest
|
* @run main NegExactLNonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8027444
|
* @bug 8027444
|
||||||
* @summary Test nested loops
|
* @summary Test nested loops
|
||||||
* @compile NestedMathExactTest.java
|
* @compile NestedMathExactTest.java
|
||||||
* @run main NestedMathExactTest
|
* @run main NestedMathExactTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8028198
|
* @bug 8028198
|
||||||
* @summary Verify that split through phi does the right thing
|
* @summary Verify that split through phi does the right thing
|
||||||
* @compile SplitThruPhiTest.java
|
* @compile SplitThruPhiTest.java
|
||||||
* @run main SplitThruPhiTest
|
* @run main SplitThruPhiTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test subtractExact as condition
|
* @summary Test subtractExact as condition
|
||||||
* @compile SubExactICondTest.java Verify.java
|
* @compile SubExactICondTest.java Verify.java
|
||||||
* @run main SubExactICondTest
|
* @run main SubExactICondTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test constant subtractExact
|
* @summary Test constant subtractExact
|
||||||
* @compile SubExactIConstantTest.java Verify.java
|
* @compile SubExactIConstantTest.java Verify.java
|
||||||
* @run main SubExactIConstantTest
|
* @run main SubExactIConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test non constant subtractExact
|
* @summary Test non constant subtractExact
|
||||||
* @compile SubExactILoadTest.java Verify.java
|
* @compile SubExactILoadTest.java Verify.java
|
||||||
* @run main SubExactILoadTest
|
* @run main SubExactILoadTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test non constant subtractExact
|
* @summary Test non constant subtractExact
|
||||||
* @compile SubExactILoopDependentTest.java Verify.java
|
* @compile SubExactILoopDependentTest.java Verify.java
|
||||||
* @run main SubExactILoopDependentTest
|
* @run main SubExactILoopDependentTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test non constant subtractExact
|
* @summary Test non constant subtractExact
|
||||||
* @compile SubExactINonConstantTest.java Verify.java
|
* @compile SubExactINonConstantTest.java Verify.java
|
||||||
* @run main SubExactINonConstantTest
|
* @run main SubExactINonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @bug 8026844
|
* @bug 8026844
|
||||||
* @summary Test repeating subtractExact
|
* @summary Test repeating subtractExact
|
||||||
* @compile SubExactIRepeatTest.java Verify.java
|
* @compile SubExactIRepeatTest.java Verify.java
|
||||||
* @run main SubExactIRepeatTest
|
* @run main SubExactIRepeatTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
* @bug 8027353
|
* @bug 8027353
|
||||||
* @summary Test constant subtractExact
|
* @summary Test constant subtractExact
|
||||||
* @compile SubExactLConstantTest.java Verify.java
|
* @compile SubExactLConstantTest.java Verify.java
|
||||||
* @run main SubExactLConstantTest
|
* @run main SubExactLConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
* @bug 8027353
|
* @bug 8027353
|
||||||
* @summary Test non constant subtractExact
|
* @summary Test non constant subtractExact
|
||||||
* @compile SubExactLNonConstantTest.java Verify.java
|
* @compile SubExactLNonConstantTest.java Verify.java
|
||||||
* @run main SubExactLNonConstantTest
|
* @run main SubExactLNonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* @ignore 8028741
|
||||||
* @test
|
* @test
|
||||||
* @bug 8024804
|
* @bug 8024804
|
||||||
* @summary registerNatives() interface resolution should receive IAE
|
* @summary registerNatives() interface resolution should receive IAE
|
||||||
|
@ -240,3 +240,4 @@ f610fd46463e6b0533dd92bce11a1e7d84984e64 jdk8-b115
|
|||||||
e757eb9aee3d6bec7da074c47e07616104a8df33 jdk8-b116
|
e757eb9aee3d6bec7da074c47e07616104a8df33 jdk8-b116
|
||||||
c1d234d4f16472a5163464420fa00b25ffa5298a jdk8-b117
|
c1d234d4f16472a5163464420fa00b25ffa5298a jdk8-b117
|
||||||
e4e5069250e717defcb556e2f6be291460988c51 jdk8-b118
|
e4e5069250e717defcb556e2f6be291460988c51 jdk8-b118
|
||||||
|
69a930376c70beb9877970128bad0f04cb0c6eb1 jdk8-b119
|
||||||
|
@ -262,9 +262,7 @@ class FactoryFinder {
|
|||||||
}
|
}
|
||||||
if (systemProp != null) {
|
if (systemProp != null) {
|
||||||
dPrint("found system property, value=" + systemProp);
|
dPrint("found system property, value=" + systemProp);
|
||||||
// There's a bug here - because 'cl' is ignored.
|
return newInstance(type, systemProp, cl, true);
|
||||||
// This will be handled separately.
|
|
||||||
return newInstance(type, systemProp, null, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (SecurityException se) {
|
catch (SecurityException se) {
|
||||||
@ -303,9 +301,7 @@ class FactoryFinder {
|
|||||||
|
|
||||||
if (factoryClassName != null) {
|
if (factoryClassName != null) {
|
||||||
dPrint("found in " + configFile + " value=" + factoryClassName);
|
dPrint("found in " + configFile + " value=" + factoryClassName);
|
||||||
// There's a bug here - because 'cl' is ignored.
|
return newInstance(type, factoryClassName, cl, true);
|
||||||
// This will be handled separately.
|
|
||||||
return newInstance(type, factoryClassName, null, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
@ -314,7 +310,7 @@ class FactoryFinder {
|
|||||||
|
|
||||||
if (type.getName().equals(factoryId)) {
|
if (type.getName().equals(factoryId)) {
|
||||||
// Try Jar Service Provider Mechanism
|
// Try Jar Service Provider Mechanism
|
||||||
final T provider = findServiceProvider(type);
|
final T provider = findServiceProvider(type, cl);
|
||||||
if (provider != null) {
|
if (provider != null) {
|
||||||
return provider;
|
return provider;
|
||||||
}
|
}
|
||||||
@ -340,12 +336,18 @@ class FactoryFinder {
|
|||||||
*
|
*
|
||||||
* @return instance of provider class if found or null
|
* @return instance of provider class if found or null
|
||||||
*/
|
*/
|
||||||
private static <T> T findServiceProvider(final Class<T> type) {
|
private static <T> T findServiceProvider(final Class<T> type, final ClassLoader cl) {
|
||||||
try {
|
try {
|
||||||
return AccessController.doPrivileged(new PrivilegedAction<T>() {
|
return AccessController.doPrivileged(new PrivilegedAction<T>() {
|
||||||
@Override
|
@Override
|
||||||
public T run() {
|
public T run() {
|
||||||
final ServiceLoader<T> serviceLoader = ServiceLoader.load(type);
|
final ServiceLoader<T> serviceLoader;
|
||||||
|
if (cl == null) {
|
||||||
|
//the current thread's context class loader
|
||||||
|
serviceLoader = ServiceLoader.load(type);
|
||||||
|
} else {
|
||||||
|
serviceLoader = ServiceLoader.load(type, cl);
|
||||||
|
}
|
||||||
final Iterator<T> iterator = serviceLoader.iterator();
|
final Iterator<T> iterator = serviceLoader.iterator();
|
||||||
if (iterator.hasNext()) {
|
if (iterator.hasNext()) {
|
||||||
return iterator.next();
|
return iterator.next();
|
||||||
|
@ -158,9 +158,10 @@ public abstract class XMLEventFactory {
|
|||||||
* If {@code factoryId} is "javax.xml.stream.XMLEventFactory",
|
* If {@code factoryId} is "javax.xml.stream.XMLEventFactory",
|
||||||
* use the service-provider loading facilities, defined by the
|
* use the service-provider loading facilities, defined by the
|
||||||
* {@link java.util.ServiceLoader} class, to attempt to locate and load an
|
* {@link java.util.ServiceLoader} class, to attempt to locate and load an
|
||||||
* implementation of the service using the {@linkplain
|
* implementation of the service using the specified {@code ClassLoader}.
|
||||||
* java.util.ServiceLoader#load(java.lang.Class) default loading mechanism}:
|
* If {@code classLoader} is null, the {@linkplain
|
||||||
* the service-provider loading facility will use the {@linkplain
|
* java.util.ServiceLoader#load(java.lang.Class) default loading mechanism} will apply:
|
||||||
|
* That is, the service-provider loading facility will use the {@linkplain
|
||||||
* java.lang.Thread#getContextClassLoader() current thread's context class loader}
|
* java.lang.Thread#getContextClassLoader() current thread's context class loader}
|
||||||
* to attempt to load the service. If the context class
|
* to attempt to load the service. If the context class
|
||||||
* loader is null, the {@linkplain
|
* loader is null, the {@linkplain
|
||||||
@ -179,6 +180,10 @@ public abstract class XMLEventFactory {
|
|||||||
* to the deprecated method.
|
* to the deprecated method.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
|
* @apiNote The parameter factoryId defined here is inconsistent with that
|
||||||
|
* of other JAXP factories where the first parameter is fully qualified
|
||||||
|
* factory class name that provides implementation of the factory.
|
||||||
|
*
|
||||||
* @param factoryId Name of the factory to find, same as
|
* @param factoryId Name of the factory to find, same as
|
||||||
* a property name
|
* a property name
|
||||||
* @param classLoader classLoader to use
|
* @param classLoader classLoader to use
|
||||||
|
@ -248,9 +248,10 @@ public abstract class XMLInputFactory {
|
|||||||
* If {@code factoryId} is "javax.xml.stream.XMLInputFactory",
|
* If {@code factoryId} is "javax.xml.stream.XMLInputFactory",
|
||||||
* use the service-provider loading facilities, defined by the
|
* use the service-provider loading facilities, defined by the
|
||||||
* {@link java.util.ServiceLoader} class, to attempt to locate and load an
|
* {@link java.util.ServiceLoader} class, to attempt to locate and load an
|
||||||
* implementation of the service using the {@linkplain
|
* implementation of the service using the specified {@code ClassLoader}.
|
||||||
* java.util.ServiceLoader#load(java.lang.Class) default loading mechanism}:
|
* If {@code classLoader} is null, the {@linkplain
|
||||||
* the service-provider loading facility will use the {@linkplain
|
* java.util.ServiceLoader#load(java.lang.Class) default loading mechanism} will apply:
|
||||||
|
* That is, the service-provider loading facility will use the {@linkplain
|
||||||
* java.lang.Thread#getContextClassLoader() current thread's context class loader}
|
* java.lang.Thread#getContextClassLoader() current thread's context class loader}
|
||||||
* to attempt to load the service. If the context class
|
* to attempt to load the service. If the context class
|
||||||
* loader is null, the {@linkplain
|
* loader is null, the {@linkplain
|
||||||
@ -269,6 +270,10 @@ public abstract class XMLInputFactory {
|
|||||||
* to the deprecated method.
|
* to the deprecated method.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
|
* @apiNote The parameter factoryId defined here is inconsistent with that
|
||||||
|
* of other JAXP factories where the first parameter is fully qualified
|
||||||
|
* factory class name that provides implementation of the factory.
|
||||||
|
*
|
||||||
* @param factoryId Name of the factory to find, same as
|
* @param factoryId Name of the factory to find, same as
|
||||||
* a property name
|
* a property name
|
||||||
* @param classLoader classLoader to use
|
* @param classLoader classLoader to use
|
||||||
|
@ -222,9 +222,10 @@ public abstract class XMLOutputFactory {
|
|||||||
* If {@code factoryId} is "javax.xml.stream.XMLOutputFactory",
|
* If {@code factoryId} is "javax.xml.stream.XMLOutputFactory",
|
||||||
* use the service-provider loading facilities, defined by the
|
* use the service-provider loading facilities, defined by the
|
||||||
* {@link java.util.ServiceLoader} class, to attempt to locate and load an
|
* {@link java.util.ServiceLoader} class, to attempt to locate and load an
|
||||||
* implementation of the service using the {@linkplain
|
* implementation of the service using the specified {@code ClassLoader}.
|
||||||
* java.util.ServiceLoader#load(java.lang.Class) default loading mechanism}:
|
* If {@code classLoader} is null, the {@linkplain
|
||||||
* the service-provider loading facility will use the {@linkplain
|
* java.util.ServiceLoader#load(java.lang.Class) default loading mechanism} will apply:
|
||||||
|
* That is, the service-provider loading facility will use the {@linkplain
|
||||||
* java.lang.Thread#getContextClassLoader() current thread's context class loader}
|
* java.lang.Thread#getContextClassLoader() current thread's context class loader}
|
||||||
* to attempt to load the service. If the context class
|
* to attempt to load the service. If the context class
|
||||||
* loader is null, the {@linkplain
|
* loader is null, the {@linkplain
|
||||||
@ -235,6 +236,10 @@ public abstract class XMLOutputFactory {
|
|||||||
* </li>
|
* </li>
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
|
* @apiNote The parameter factoryId defined here is inconsistent with that
|
||||||
|
* of other JAXP factories where the first parameter is fully qualified
|
||||||
|
* factory class name that provides implementation of the factory.
|
||||||
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* Note that this is a new method that replaces the deprecated
|
* Note that this is a new method that replaces the deprecated
|
||||||
* {@link #newInstance(java.lang.String, java.lang.ClassLoader)
|
* {@link #newInstance(java.lang.String, java.lang.ClassLoader)
|
||||||
|
@ -240,3 +240,4 @@ e126d8eca69b83a1cc159c2375b7c33140346d2b jdk8-b115
|
|||||||
587560c222a2476066852224ed02d39b5090a299 jdk8-b116
|
587560c222a2476066852224ed02d39b5090a299 jdk8-b116
|
||||||
fe56ba456fd32758c72db629938d69067468d89c jdk8-b117
|
fe56ba456fd32758c72db629938d69067468d89c jdk8-b117
|
||||||
76a598cf50c4e1dc1fc8adc08b451943aa1a3179 jdk8-b118
|
76a598cf50c4e1dc1fc8adc08b451943aa1a3179 jdk8-b118
|
||||||
|
172b8e056ff259044ca48c5425d643dc8e2e05c8 jdk8-b119
|
||||||
|
@ -240,3 +240,4 @@ f82b730c798b6bf38946baaba8a7d80fd5efaa70 jdk8-b115
|
|||||||
0dc0067f3b8efb299a4c23f76ee26ea64df9e1d7 jdk8-b116
|
0dc0067f3b8efb299a4c23f76ee26ea64df9e1d7 jdk8-b116
|
||||||
fc4ac66aa657e09de5f8257c3174f240ed0cbaf7 jdk8-b117
|
fc4ac66aa657e09de5f8257c3174f240ed0cbaf7 jdk8-b117
|
||||||
28ca338366ff2774ac9002f9f6eaff4101a3ea3b jdk8-b118
|
28ca338366ff2774ac9002f9f6eaff4101a3ea3b jdk8-b118
|
||||||
|
e4499a6529e8c3e762ba86f45cdd774c92a8e7bc jdk8-b119
|
||||||
|
@ -54,7 +54,7 @@ $(JCE_MANIFEST): $(MAINMANIFEST)
|
|||||||
##########################################################################################
|
##########################################################################################
|
||||||
# For security and crypto jars, always build the jar, but for closed, install the prebuilt
|
# For security and crypto jars, always build the jar, but for closed, install the prebuilt
|
||||||
# signed version instead of the newly built jar. Unsigned jars are treated as intermediate
|
# signed version instead of the newly built jar. Unsigned jars are treated as intermediate
|
||||||
# targets and explicitly added to the JARS list. For open, signing is not needed. See
|
# targets and explicitly added to the TARGETS list. For open, signing is not needed. See
|
||||||
# SignJars.gmk for more information.
|
# SignJars.gmk for more information.
|
||||||
#
|
#
|
||||||
# The source for the crypto jars is not available for all licensees. The BUILD_CRYPTO
|
# The source for the crypto jars is not available for all licensees. The BUILD_CRYPTO
|
||||||
@ -63,7 +63,7 @@ $(JCE_MANIFEST): $(MAINMANIFEST)
|
|||||||
# other way to get the jars than to build them.
|
# other way to get the jars than to build them.
|
||||||
|
|
||||||
SUNPKCS11_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunpkcs11.jar
|
SUNPKCS11_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunpkcs11.jar
|
||||||
SUNPKCS11_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/sunpkcs11.jar
|
SUNPKCS11_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/jce/unsigned/sunpkcs11.jar
|
||||||
|
|
||||||
$(eval $(call SetupArchive,BUILD_SUNPKCS11_JAR, , \
|
$(eval $(call SetupArchive,BUILD_SUNPKCS11_JAR, , \
|
||||||
SRCS := $(JDK_OUTPUTDIR)/classes_security, \
|
SRCS := $(JDK_OUTPUTDIR)/classes_security, \
|
||||||
@ -78,19 +78,19 @@ $(SUNPKCS11_JAR_UNSIGNED): $(JCE_MANIFEST)
|
|||||||
ifndef OPENJDK
|
ifndef OPENJDK
|
||||||
SUNPKCS11_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/pkcs11/sunpkcs11.jar
|
SUNPKCS11_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/pkcs11/sunpkcs11.jar
|
||||||
$(SUNPKCS11_JAR_DST): $(SUNPKCS11_JAR_SRC)
|
$(SUNPKCS11_JAR_DST): $(SUNPKCS11_JAR_SRC)
|
||||||
@$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt SunPKCS11 provider..."
|
@$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
else
|
else
|
||||||
$(SUNPKCS11_JAR_DST): $(SUNPKCS11_JAR_UNSIGNED)
|
$(SUNPKCS11_JAR_DST): $(SUNPKCS11_JAR_UNSIGNED)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
JARS += $(SUNPKCS11_JAR_UNSIGNED) $(SUNPKCS11_JAR_DST)
|
TARGETS += $(SUNPKCS11_JAR_UNSIGNED) $(SUNPKCS11_JAR_DST)
|
||||||
|
|
||||||
##########################################################################################
|
##########################################################################################
|
||||||
|
|
||||||
SUNEC_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunec.jar
|
SUNEC_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunec.jar
|
||||||
SUNEC_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/sunec.jar
|
SUNEC_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/jce/unsigned/sunec.jar
|
||||||
|
|
||||||
$(eval $(call SetupArchive,BUILD_SUNEC_JAR, , \
|
$(eval $(call SetupArchive,BUILD_SUNEC_JAR, , \
|
||||||
SRCS := $(JDK_OUTPUTDIR)/classes_security, \
|
SRCS := $(JDK_OUTPUTDIR)/classes_security, \
|
||||||
@ -105,19 +105,19 @@ $(SUNEC_JAR_UNSIGNED): $(JCE_MANIFEST)
|
|||||||
ifndef OPENJDK
|
ifndef OPENJDK
|
||||||
SUNEC_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/ec/sunec.jar
|
SUNEC_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/ec/sunec.jar
|
||||||
$(SUNEC_JAR_DST): $(SUNEC_JAR_SRC)
|
$(SUNEC_JAR_DST): $(SUNEC_JAR_SRC)
|
||||||
@$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt SunEC provider..."
|
@$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
else
|
else
|
||||||
$(SUNEC_JAR_DST): $(SUNEC_JAR_UNSIGNED)
|
$(SUNEC_JAR_DST): $(SUNEC_JAR_UNSIGNED)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
JARS += $(SUNEC_JAR_UNSIGNED) $(SUNEC_JAR_DST)
|
TARGETS += $(SUNEC_JAR_UNSIGNED) $(SUNEC_JAR_DST)
|
||||||
|
|
||||||
##########################################################################################
|
##########################################################################################
|
||||||
|
|
||||||
SUNJCE_PROVIDER_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunjce_provider.jar
|
SUNJCE_PROVIDER_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunjce_provider.jar
|
||||||
SUNJCE_PROVIDER_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/sunjce_provider.jar
|
SUNJCE_PROVIDER_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/jce/unsigned/sunjce_provider.jar
|
||||||
|
|
||||||
ifneq ($(BUILD_CRYPTO), no)
|
ifneq ($(BUILD_CRYPTO), no)
|
||||||
$(eval $(call SetupArchive,BUILD_SUNJCE_PROVIDER_JAR, , \
|
$(eval $(call SetupArchive,BUILD_SUNJCE_PROVIDER_JAR, , \
|
||||||
@ -130,25 +130,25 @@ ifneq ($(BUILD_CRYPTO), no)
|
|||||||
|
|
||||||
$(SUNJCE_PROVIDER_JAR_UNSIGNED): $(JCE_MANIFEST)
|
$(SUNJCE_PROVIDER_JAR_UNSIGNED): $(JCE_MANIFEST)
|
||||||
|
|
||||||
JARS += $(SUNJCE_PROVIDER_JAR_UNSIGNED)
|
TARGETS += $(SUNJCE_PROVIDER_JAR_UNSIGNED)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef OPENJDK
|
ifndef OPENJDK
|
||||||
SUNJCE_PROVIDER_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/jce/sunjce_provider.jar
|
SUNJCE_PROVIDER_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/jce/sunjce_provider.jar
|
||||||
$(SUNJCE_PROVIDER_JAR_DST): $(SUNJCE_PROVIDER_JAR_SRC)
|
$(SUNJCE_PROVIDER_JAR_DST): $(SUNJCE_PROVIDER_JAR_SRC)
|
||||||
@$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt SunJCE provider..."
|
@$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
else
|
else
|
||||||
$(SUNJCE_PROVIDER_JAR_DST): $(SUNJCE_PROVIDER_JAR_UNSIGNED)
|
$(SUNJCE_PROVIDER_JAR_DST): $(SUNJCE_PROVIDER_JAR_UNSIGNED)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
JARS += $(SUNJCE_PROVIDER_JAR_DST)
|
TARGETS += $(SUNJCE_PROVIDER_JAR_DST)
|
||||||
|
|
||||||
##########################################################################################
|
##########################################################################################
|
||||||
|
|
||||||
JCE_JAR_DST := $(JDK_OUTPUTDIR)/lib/jce.jar
|
JCE_JAR_DST := $(JDK_OUTPUTDIR)/lib/jce.jar
|
||||||
JCE_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/jce.jar
|
JCE_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/jce/unsigned/jce.jar
|
||||||
|
|
||||||
ifneq ($(BUILD_CRYPTO), no)
|
ifneq ($(BUILD_CRYPTO), no)
|
||||||
$(eval $(call SetupArchive,BUILD_JCE_JAR, , \
|
$(eval $(call SetupArchive,BUILD_JCE_JAR, , \
|
||||||
@ -161,36 +161,43 @@ ifneq ($(BUILD_CRYPTO), no)
|
|||||||
|
|
||||||
$(JCE_JAR_UNSIGNED): $(JCE_MANIFEST)
|
$(JCE_JAR_UNSIGNED): $(JCE_MANIFEST)
|
||||||
|
|
||||||
JARS += $(JCE_JAR_UNSIGNED)
|
TARGETS += $(JCE_JAR_UNSIGNED)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef OPENJDK
|
ifndef OPENJDK
|
||||||
JCE_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/jce/jce.jar
|
JCE_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/jce/jce.jar
|
||||||
$(JCE_JAR_DST): $(JCE_JAR_SRC)
|
$(JCE_JAR_DST): $(JCE_JAR_SRC)
|
||||||
@$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt jce.jar..."
|
@$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
else
|
else
|
||||||
$(JCE_JAR_DST): $(JCE_JAR_UNSIGNED)
|
$(JCE_JAR_DST): $(JCE_JAR_UNSIGNED)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
JARS += $(JCE_JAR_DST)
|
TARGETS += $(JCE_JAR_DST)
|
||||||
|
|
||||||
##########################################################################################
|
##########################################################################################
|
||||||
|
|
||||||
US_EXPORT_POLICY_JAR_DST := $(JDK_OUTPUTDIR)/lib/security/US_export_policy.jar
|
US_EXPORT_POLICY_JAR_DST := $(JDK_OUTPUTDIR)/lib/security/US_export_policy.jar
|
||||||
US_EXPORT_POLICY_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/US_export_policy.jar
|
|
||||||
|
|
||||||
ifneq ($(BUILD_CRYPTO), no)
|
ifneq ($(BUILD_CRYPTO), no)
|
||||||
|
|
||||||
|
US_EXPORT_POLICY_JAR_LIMITED_UNSIGNED := \
|
||||||
|
$(JDK_OUTPUTDIR)/jce/unsigned/policy/limited/US_export_policy.jar
|
||||||
|
US_EXPORT_POLICY_JAR_UNLIMITED_UNSIGNED := \
|
||||||
|
$(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/US_export_policy.jar
|
||||||
|
|
||||||
#
|
#
|
||||||
# TODO fix so that SetupArchive does not write files into SRCS
|
# TODO fix so that SetupArchive does not write files into SRCS
|
||||||
# then we don't need this extra copying
|
# then we don't need this extra copying
|
||||||
#
|
#
|
||||||
# NOTE: We currently do not place restrictions on our limited export
|
# NOTE: We currently do not place restrictions on our limited export
|
||||||
# policy. This was not a typo.
|
# policy. This was not a typo. This means we are shipping the same file
|
||||||
|
# for both limimted and unlimited US_export_policy.jar.
|
||||||
#
|
#
|
||||||
US_EXPORT_POLICY_JAR_SRC_DIR := $(JDK_TOPDIR)/make/data/cryptopolicy/unlimited
|
US_EXPORT_POLICY_JAR_SRC_DIR := $(JDK_TOPDIR)/make/data/cryptopolicy/unlimited
|
||||||
US_EXPORT_POLICY_JAR_TMP := $(JDK_OUTPUTDIR)/US_export_policy_jar.tmp
|
US_EXPORT_POLICY_JAR_TMP := \
|
||||||
|
$(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/US_export_policy_jar.tmp
|
||||||
|
|
||||||
$(US_EXPORT_POLICY_JAR_TMP)/%: $(US_EXPORT_POLICY_JAR_SRC_DIR)/%
|
$(US_EXPORT_POLICY_JAR_TMP)/%: $(US_EXPORT_POLICY_JAR_SRC_DIR)/%
|
||||||
$(install-file)
|
$(install-file)
|
||||||
@ -200,77 +207,113 @@ ifneq ($(BUILD_CRYPTO), no)
|
|||||||
$(eval $(call SetupArchive,BUILD_US_EXPORT_POLICY_JAR, $(US_EXPORT_POLICY_JAR_DEPS), \
|
$(eval $(call SetupArchive,BUILD_US_EXPORT_POLICY_JAR, $(US_EXPORT_POLICY_JAR_DEPS), \
|
||||||
SRCS := $(US_EXPORT_POLICY_JAR_TMP), \
|
SRCS := $(US_EXPORT_POLICY_JAR_TMP), \
|
||||||
SUFFIXES := .policy, \
|
SUFFIXES := .policy, \
|
||||||
JAR := $(US_EXPORT_POLICY_JAR_UNSIGNED), \
|
JAR := $(US_EXPORT_POLICY_JAR_UNLIMITED_UNSIGNED), \
|
||||||
EXTRA_MANIFEST_ATTR := Crypto-Strength: unlimited, \
|
EXTRA_MANIFEST_ATTR := Crypto-Strength: unlimited, \
|
||||||
SKIP_METAINF := true))
|
SKIP_METAINF := true))
|
||||||
|
|
||||||
JARS += $(US_EXPORT_POLICY_JAR_UNSIGNED)
|
$(US_EXPORT_POLICY_JAR_LIMITED_UNSIGNED): $(US_EXPORT_POLICY_JAR_UNLIMITED_UNSIGNED)
|
||||||
|
$(ECHO) $(LOG_INFO) Copying unlimited $(patsubst $(OUTPUT_ROOT)/%,%,$@)
|
||||||
|
$(install-file)
|
||||||
|
|
||||||
|
TARGETS += $(US_EXPORT_POLICY_JAR_LIMITED_UNSIGNED) \
|
||||||
|
$(US_EXPORT_POLICY_JAR_UNLIMITED_UNSIGNED)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef OPENJDK
|
ifndef OPENJDK
|
||||||
|
ifeq ($(UNLIMITED_CRYPTO), true)
|
||||||
|
$(error No prebuilt unlimited crypto jars available)
|
||||||
|
endif
|
||||||
$(US_EXPORT_POLICY_JAR_DST): $(JDK_TOPDIR)/make/closed/tools/crypto/jce/US_export_policy.jar
|
$(US_EXPORT_POLICY_JAR_DST): $(JDK_TOPDIR)/make/closed/tools/crypto/jce/US_export_policy.jar
|
||||||
$(ECHO) $(LOG_INFO) Copying $(@F)
|
$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
else
|
else
|
||||||
$(US_EXPORT_POLICY_JAR_DST): $(US_EXPORT_POLICY_JAR_UNSIGNED)
|
ifeq ($(UNLIMITED_CRYPTO), true)
|
||||||
|
$(US_EXPORT_POLICY_JAR_DST): $(US_EXPORT_POLICY_JAR_UNLIMITED_UNSIGNED)
|
||||||
|
$(install-file)
|
||||||
|
else
|
||||||
|
$(US_EXPORT_POLICY_JAR_DST): $(US_EXPORT_POLICY_JAR_LIMITED_UNSIGNED)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
JARS += $(US_EXPORT_POLICY_JAR_DST)
|
TARGETS += $(US_EXPORT_POLICY_JAR_DST)
|
||||||
|
|
||||||
##########################################################################################
|
##########################################################################################
|
||||||
|
|
||||||
LOCAL_POLICY_JAR_DST := $(JDK_OUTPUTDIR)/lib/security/local_policy.jar
|
LOCAL_POLICY_JAR_DST := $(JDK_OUTPUTDIR)/lib/security/local_policy.jar
|
||||||
LOCAL_POLICY_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/local_policy.jar
|
|
||||||
|
|
||||||
ifneq ($(BUILD_CRYPTO), no)
|
ifneq ($(BUILD_CRYPTO), no)
|
||||||
|
|
||||||
|
LOCAL_POLICY_JAR_LIMITED_UNSIGNED := \
|
||||||
|
$(JDK_OUTPUTDIR)/jce/unsigned/policy/limited/local_policy.jar
|
||||||
|
LOCAL_POLICY_JAR_UNLIMITED_UNSIGNED := \
|
||||||
|
$(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/local_policy.jar
|
||||||
|
|
||||||
#
|
#
|
||||||
# TODO fix so that SetupArchive does not write files into SRCS
|
# TODO fix so that SetupArchive does not write files into SRCS
|
||||||
# then we don't need this extra copying
|
# then we don't need this extra copying
|
||||||
#
|
#
|
||||||
LOCAL_POLICY_JAR_TMP := $(JDK_OUTPUTDIR)/local_policy_jar.tmp
|
LOCAL_POLICY_JAR_LIMITED_TMP := \
|
||||||
|
$(JDK_OUTPUTDIR)/jce/unsigned/policy/limited/local_policy_jar.tmp
|
||||||
|
LOCAL_POLICY_JAR_UNLIMITED_TMP := \
|
||||||
|
$(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/local_policy_jar.tmp
|
||||||
|
|
||||||
ifeq ($(UNLIMITED_CRYPTO), true)
|
$(LOCAL_POLICY_JAR_LIMITED_TMP)/%: $(JDK_TOPDIR)/make/data/cryptopolicy/limited/%
|
||||||
LOCAL_POLICY_JAR_SRC_DIR := $(JDK_TOPDIR)/make/data/cryptopolicy/unlimited
|
|
||||||
LOCAL_POLICY_JAR_DEPS := $(LOCAL_POLICY_JAR_TMP)/default_local.policy
|
|
||||||
LOCAL_POLICY_JAR_ATTR := Crypto-Strength: unlimited
|
|
||||||
else
|
|
||||||
LOCAL_POLICY_JAR_SRC_DIR := $(JDK_TOPDIR)/make/data/cryptopolicy/limited
|
|
||||||
LOCAL_POLICY_JAR_DEPS := $(LOCAL_POLICY_JAR_TMP)/exempt_local.policy \
|
|
||||||
$(LOCAL_POLICY_JAR_TMP)/default_local.policy
|
|
||||||
LOCAL_POLICY_JAR_ATTR := Crypto-Strength: limited
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(LOCAL_POLICY_JAR_TMP)/%: $(LOCAL_POLICY_JAR_SRC_DIR)/%
|
|
||||||
$(install-file)
|
$(install-file)
|
||||||
|
|
||||||
$(eval $(call SetupArchive,BUILD_LOCAL_POLICY_JAR, $(LOCAL_POLICY_JAR_DEPS), \
|
$(LOCAL_POLICY_JAR_UNLIMITED_TMP)/%: $(JDK_TOPDIR)/make/data/cryptopolicy/unlimited/%
|
||||||
SRCS := $(LOCAL_POLICY_JAR_TMP), \
|
$(install-file)
|
||||||
|
|
||||||
|
$(eval $(call SetupArchive,BUILD_LOCAL_POLICY_JAR_LIMITED, \
|
||||||
|
$(LOCAL_POLICY_JAR_LIMITED_TMP)/exempt_local.policy \
|
||||||
|
$(LOCAL_POLICY_JAR_LIMITED_TMP)/default_local.policy, \
|
||||||
|
SRCS := $(LOCAL_POLICY_JAR_LIMITED_TMP), \
|
||||||
SUFFIXES := .policy, \
|
SUFFIXES := .policy, \
|
||||||
JAR := $(LOCAL_POLICY_JAR_UNSIGNED), \
|
JAR := $(LOCAL_POLICY_JAR_LIMITED_UNSIGNED), \
|
||||||
EXTRA_MANIFEST_ATTR := $(LOCAL_POLICY_JAR_ATTR), \
|
EXTRA_MANIFEST_ATTR := Crypto-Strength: limited, \
|
||||||
SKIP_METAINF := true))
|
SKIP_METAINF := true))
|
||||||
|
|
||||||
JARS += $(LOCAL_POLICY_JAR_UNSIGNED)
|
$(eval $(call SetupArchive,BUILD_LOCAL_POLICY_JAR_UNLIMITED, \
|
||||||
|
$(LOCAL_POLICY_JAR_UNLIMITED_TMP)/default_local.policy, \
|
||||||
|
SRCS := $(LOCAL_POLICY_JAR_UNLIMITED_TMP), \
|
||||||
|
SUFFIXES := .policy, \
|
||||||
|
JAR := $(LOCAL_POLICY_JAR_UNLIMITED_UNSIGNED), \
|
||||||
|
EXTRA_MANIFEST_ATTR := Crypto-Strength: unlimited, \
|
||||||
|
SKIP_METAINF := true))
|
||||||
|
|
||||||
|
TARGETS += $(LOCAL_POLICY_JAR_LIMITED_UNSIGNED) $(LOCAL_POLICY_JAR_UNLIMITED_UNSIGNED)
|
||||||
|
|
||||||
|
ifndef OPENJDK
|
||||||
|
$(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/README.txt: \
|
||||||
|
$(JDK_TOPDIR)/make/closed/javax/crypto/doc/README.txt
|
||||||
|
$(install-file)
|
||||||
|
|
||||||
|
TARGETS += $(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/README.txt
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef OPENJDK
|
ifndef OPENJDK
|
||||||
$(LOCAL_POLICY_JAR_DST): $(JDK_TOPDIR)/make/closed/tools/crypto/jce/local_policy.jar
|
$(LOCAL_POLICY_JAR_DST): $(JDK_TOPDIR)/make/closed/tools/crypto/jce/local_policy.jar
|
||||||
$(ECHO) $(LOG_INFO) Copying $(@F)
|
$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
else
|
else
|
||||||
$(LOCAL_POLICY_JAR_DST): $(LOCAL_POLICY_JAR_UNSIGNED)
|
ifeq ($(UNLIMITED_CRYPTO), true)
|
||||||
|
$(LOCAL_POLICY_JAR_DST): $(LOCAL_POLICY_JAR_UNLIMITED_UNSIGNED)
|
||||||
|
$(install-file)
|
||||||
|
else
|
||||||
|
$(LOCAL_POLICY_JAR_DST): $(LOCAL_POLICY_JAR_LIMITED_UNSIGNED)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
JARS += $(LOCAL_POLICY_JAR_DST)
|
TARGETS += $(LOCAL_POLICY_JAR_DST)
|
||||||
|
|
||||||
##########################################################################################
|
##########################################################################################
|
||||||
|
|
||||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||||
|
|
||||||
SUNMSCAPI_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunmscapi.jar
|
SUNMSCAPI_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunmscapi.jar
|
||||||
SUNMSCAPI_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/sunmscapi.jar
|
SUNMSCAPI_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/jce/unsigned/sunmscapi.jar
|
||||||
|
|
||||||
$(eval $(call SetupArchive,BUILD_SUNMSCAPI_JAR, , \
|
$(eval $(call SetupArchive,BUILD_SUNMSCAPI_JAR, , \
|
||||||
SRCS := $(JDK_OUTPUTDIR)/classes_security, \
|
SRCS := $(JDK_OUTPUTDIR)/classes_security, \
|
||||||
@ -285,14 +328,14 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
|||||||
ifndef OPENJDK
|
ifndef OPENJDK
|
||||||
SUNMSCAPI_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/mscapi/sunmscapi.jar
|
SUNMSCAPI_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/mscapi/sunmscapi.jar
|
||||||
$(SUNMSCAPI_JAR_DST): $(SUNMSCAPI_JAR_SRC)
|
$(SUNMSCAPI_JAR_DST): $(SUNMSCAPI_JAR_SRC)
|
||||||
@$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt SunMSCAPI provider..."
|
@$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
else
|
else
|
||||||
$(SUNMSCAPI_JAR_DST): $(SUNMSCAPI_JAR_UNSIGNED)
|
$(SUNMSCAPI_JAR_DST): $(SUNMSCAPI_JAR_UNSIGNED)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
JARS += $(SUNMSCAPI_JAR_UNSIGNED) $(SUNMSCAPI_JAR_DST)
|
TARGETS += $(SUNMSCAPI_JAR_UNSIGNED) $(SUNMSCAPI_JAR_DST)
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -302,7 +345,7 @@ ifeq ($(OPENJDK_TARGET_OS), solaris)
|
|||||||
ifndef OPENJDK
|
ifndef OPENJDK
|
||||||
|
|
||||||
UCRYPTO_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/ucrypto.jar
|
UCRYPTO_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/ucrypto.jar
|
||||||
UCRYPTO_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/ucrypto.jar
|
UCRYPTO_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/jce/unsigned/ucrypto.jar
|
||||||
UCRYPTO_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/ucrypto/ucrypto.jar
|
UCRYPTO_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/ucrypto/ucrypto.jar
|
||||||
|
|
||||||
$(eval $(call SetupArchive,BUILD_UCRYPTO_JAR, , \
|
$(eval $(call SetupArchive,BUILD_UCRYPTO_JAR, , \
|
||||||
@ -316,14 +359,14 @@ ifeq ($(OPENJDK_TARGET_OS), solaris)
|
|||||||
$(UCRYPTO_JAR_UNSIGNED): $(JCE_MANIFEST)
|
$(UCRYPTO_JAR_UNSIGNED): $(JCE_MANIFEST)
|
||||||
|
|
||||||
$(UCRYPTO_JAR_DST): $(UCRYPTO_JAR_SRC)
|
$(UCRYPTO_JAR_DST): $(UCRYPTO_JAR_SRC)
|
||||||
@$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt OracleUcrypto provider..."
|
@$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
|
||||||
$(install-file)
|
$(install-file)
|
||||||
|
|
||||||
JARS += $(UCRYPTO_JAR_UNSIGNED) $(UCRYPTO_JAR_DST)
|
TARGETS += $(UCRYPTO_JAR_UNSIGNED) $(UCRYPTO_JAR_DST)
|
||||||
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
all: $(JARS)
|
all: $(TARGETS)
|
||||||
|
|
||||||
.PHONY: default all
|
.PHONY: default all
|
||||||
|
@ -80,7 +80,7 @@ check-keystore:
|
|||||||
exit 2; \
|
exit 2; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$(JCE_OUTPUTDIR)/%: $(JDK_OUTPUTDIR)/unsigned/%
|
$(JDK_OUTPUTDIR)/jce/signed/%: $(JDK_OUTPUTDIR)/jce/unsigned/%
|
||||||
$(call install-file)
|
$(call install-file)
|
||||||
$(JARSIGNER) -keystore $(SIGNING_KEYSTORE) \
|
$(JARSIGNER) -keystore $(SIGNING_KEYSTORE) \
|
||||||
$@ $(SIGNING_ALIAS) < $(SIGNING_PASSPHRASE)
|
$@ $(SIGNING_ALIAS) < $(SIGNING_PASSPHRASE)
|
||||||
@ -88,26 +88,33 @@ $(JCE_OUTPUTDIR)/%: $(JDK_OUTPUTDIR)/unsigned/%
|
|||||||
|
|
||||||
JAR_LIST := \
|
JAR_LIST := \
|
||||||
jce.jar \
|
jce.jar \
|
||||||
local_policy.jar \
|
policy/limited/local_policy.jar \
|
||||||
|
policy/limited/US_export_policy.jar \
|
||||||
|
policy/unlimited/local_policy.jar \
|
||||||
|
policy/unlimited/US_export_policy.jar \
|
||||||
sunec.jar \
|
sunec.jar \
|
||||||
sunjce_provider.jar \
|
sunjce_provider.jar \
|
||||||
sunpkcs11.jar \
|
sunpkcs11.jar \
|
||||||
US_export_policy.jar \
|
|
||||||
sunmscapi.jar \
|
sunmscapi.jar \
|
||||||
ucrypto.jar \
|
ucrypto.jar \
|
||||||
#
|
#
|
||||||
|
|
||||||
UNSIGNED_JARS := $(wildcard $(addprefix $(JDK_OUTPUTDIR)/unsigned/, $(JAR_LIST)))
|
UNSIGNED_JARS := $(wildcard $(addprefix $(JDK_OUTPUTDIR)/jce/unsigned/, $(JAR_LIST)))
|
||||||
|
|
||||||
ifeq ($(UNSIGNED_JARS), )
|
ifeq ($(UNSIGNED_JARS), )
|
||||||
$(error No jars found in $(JDK_OUTPUTDIR)/unsigned/)
|
$(error No jars found in $(JDK_OUTPUTDIR)/jce/unsigned/)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
SIGNED_JARS := $(patsubst $(JDK_OUTPUTDIR)/unsigned/%,$(JCE_OUTPUTDIR)/%, $(UNSIGNED_JARS))
|
SIGNED_JARS := $(patsubst $(JDK_OUTPUTDIR)/jce/unsigned/%,$(JDK_OUTPUTDIR)/jce/signed/%, \
|
||||||
|
$(UNSIGNED_JARS))
|
||||||
|
|
||||||
$(SIGNED_JARS): check-keystore
|
$(SIGNED_JARS): check-keystore
|
||||||
|
|
||||||
all: $(SIGNED_JARS)
|
$(JDK_OUTPUTDIR)/jce/signed/policy/unlimited/README.txt: \
|
||||||
|
$(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/README.txt
|
||||||
|
$(install-file)
|
||||||
|
|
||||||
|
all: $(SIGNED_JARS) $(JDK_OUTPUTDIR)/jce/signed/policy/unlimited/README.txt
|
||||||
@$(PRINTF) "\n*** The jar files built by the 'sign-jars' target are developer ***"
|
@$(PRINTF) "\n*** The jar files built by the 'sign-jars' target are developer ***"
|
||||||
@$(PRINTF) "\n*** builds only and *MUST NOT* be checked into the closed workspace. ***"
|
@$(PRINTF) "\n*** builds only and *MUST NOT* be checked into the closed workspace. ***"
|
||||||
@$(PRINTF) "\n*** ***"
|
@$(PRINTF) "\n*** ***"
|
||||||
|
@ -1 +0,0 @@
|
|||||||
Crypto-Strength: limited
|
|
@ -1 +0,0 @@
|
|||||||
Crypto-Strength: unlimited
|
|
@ -62,7 +62,7 @@ jdeps \- Java class dependency analyzer\&.
|
|||||||
\fIoptions\fR
|
\fIoptions\fR
|
||||||
Command-line options\&. See Options\&.
|
Command-line options\&. See Options\&.
|
||||||
.TP
|
.TP
|
||||||
\fIclass\fR\fIes\fR
|
\fIclasses\fR
|
||||||
Name of the classes to analyze\&. You can specify a class that can be found in the class path, by its file name, a directory, or a JAR file\&.
|
Name of the classes to analyze\&. You can specify a class that can be found in the class path, by its file name, a directory, or a JAR file\&.
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The \fI\fR\f3jdeps\fR command shows the package-level or class-level dependencies of Java class files\&. The input class can be a path name to a \f3\&.class\fR file, a directory, a JAR file, or it can be a fully qualified class name to analyze all class files\&. The options determine the output\&. By default, \f3jdeps\fR outputs the dependencies to the system output\&. It can generate the dependencies in DOT language (see the \f3-dotoutput\fR option)\&.
|
The \fI\fR\f3jdeps\fR command shows the package-level or class-level dependencies of Java class files\&. The input class can be a path name to a \f3\&.class\fR file, a directory, a JAR file, or it can be a fully qualified class name to analyze all class files\&. The options determine the output\&. By default, \f3jdeps\fR outputs the dependencies to the system output\&. It can generate the dependencies in DOT language (see the \f3-dotoutput\fR option)\&.
|
||||||
@ -106,6 +106,12 @@ Finds dependencies in packages matching the specified regular expression pattern
|
|||||||
.br
|
.br
|
||||||
Restricts analysis to classes matching pattern\&. This option filters the list of classes to be analyzed\&. It can be used together with \f3-p\fR and \f3-e\fR which apply pattern to the dependencies\&.
|
Restricts analysis to classes matching pattern\&. This option filters the list of classes to be analyzed\&. It can be used together with \f3-p\fR and \f3-e\fR which apply pattern to the dependencies\&.
|
||||||
.TP
|
.TP
|
||||||
|
-jdkinternals
|
||||||
|
.br
|
||||||
|
Finds class-level dependences in JDK internal APIs\&. By default, it analyzes all classes specified in the \f3-classpath\fR option and in input files unless you specified the \f3-include\fR option\&. You cannot use this option with the \f3-p\fR, \f3-e\fR, and \f3-s\fR options\&.
|
||||||
|
|
||||||
|
\fIWarning\fR: JDK internal APIs may not be accessible in upcoming releases\&.
|
||||||
|
.TP
|
||||||
-P, -profile
|
-P, -profile
|
||||||
.br
|
.br
|
||||||
Shows profile or the file containing a package\&.
|
Shows profile or the file containing a package\&.
|
||||||
|
@ -62,7 +62,7 @@ jdeps \- Java class dependency analyzer\&.
|
|||||||
\fIoptions\fR
|
\fIoptions\fR
|
||||||
Command-line options\&. See Options\&.
|
Command-line options\&. See Options\&.
|
||||||
.TP
|
.TP
|
||||||
\fIclass\fR\fIes\fR
|
\fIclasses\fR
|
||||||
Name of the classes to analyze\&. You can specify a class that can be found in the class path, by its file name, a directory, or a JAR file\&.
|
Name of the classes to analyze\&. You can specify a class that can be found in the class path, by its file name, a directory, or a JAR file\&.
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The \fI\fR\f3jdeps\fR command shows the package-level or class-level dependencies of Java class files\&. The input class can be a path name to a \f3\&.class\fR file, a directory, a JAR file, or it can be a fully qualified class name to analyze all class files\&. The options determine the output\&. By default, \f3jdeps\fR outputs the dependencies to the system output\&. It can generate the dependencies in DOT language (see the \f3-dotoutput\fR option)\&.
|
The \fI\fR\f3jdeps\fR command shows the package-level or class-level dependencies of Java class files\&. The input class can be a path name to a \f3\&.class\fR file, a directory, a JAR file, or it can be a fully qualified class name to analyze all class files\&. The options determine the output\&. By default, \f3jdeps\fR outputs the dependencies to the system output\&. It can generate the dependencies in DOT language (see the \f3-dotoutput\fR option)\&.
|
||||||
@ -106,6 +106,12 @@ Finds dependencies in packages matching the specified regular expression pattern
|
|||||||
.br
|
.br
|
||||||
Restricts analysis to classes matching pattern\&. This option filters the list of classes to be analyzed\&. It can be used together with \f3-p\fR and \f3-e\fR which apply pattern to the dependencies\&.
|
Restricts analysis to classes matching pattern\&. This option filters the list of classes to be analyzed\&. It can be used together with \f3-p\fR and \f3-e\fR which apply pattern to the dependencies\&.
|
||||||
.TP
|
.TP
|
||||||
|
-jdkinternals
|
||||||
|
.br
|
||||||
|
Finds class-level dependences in JDK internal APIs\&. By default, it analyzes all classes specified in the \f3-classpath\fR option and in input files unless you specified the \f3-include\fR option\&. You cannot use this option with the \f3-p\fR, \f3-e\fR, and \f3-s\fR options\&.
|
||||||
|
|
||||||
|
\fIWarning\fR: JDK internal APIs may not be accessible in upcoming releases\&.
|
||||||
|
.TP
|
||||||
-P, -profile
|
-P, -profile
|
||||||
.br
|
.br
|
||||||
Shows profile or the file containing a package\&.
|
Shows profile or the file containing a package\&.
|
||||||
|
@ -916,8 +916,7 @@ public class Krb5LoginModule implements LoginModule {
|
|||||||
char[] tmpPassword = ((PasswordCallback)
|
char[] tmpPassword = ((PasswordCallback)
|
||||||
callbacks[0]).getPassword();
|
callbacks[0]).getPassword();
|
||||||
if (tmpPassword == null) {
|
if (tmpPassword == null) {
|
||||||
// treat a NULL password as an empty password
|
throw new LoginException("No password provided");
|
||||||
tmpPassword = new char[0];
|
|
||||||
}
|
}
|
||||||
password = new char[tmpPassword.length];
|
password = new char[tmpPassword.length];
|
||||||
System.arraycopy(tmpPassword, 0,
|
System.arraycopy(tmpPassword, 0,
|
||||||
|
@ -392,7 +392,7 @@ public class Applet extends Panel {
|
|||||||
* Each element of the array should be a set of three
|
* Each element of the array should be a set of three
|
||||||
* <code>Strings</code> containing the name, the type, and a
|
* <code>Strings</code> containing the name, the type, and a
|
||||||
* description. For example:
|
* description. For example:
|
||||||
* <p><blockquote><pre>
|
* <blockquote><pre>
|
||||||
* String pinfo[][] = {
|
* String pinfo[][] = {
|
||||||
* {"fps", "1-10", "frames per second"},
|
* {"fps", "1-10", "frames per second"},
|
||||||
* {"repeat", "boolean", "repeat image loop"},
|
* {"repeat", "boolean", "repeat image loop"},
|
||||||
|
@ -107,7 +107,7 @@ public interface AppletContext {
|
|||||||
* <code>target</code> argument indicates in which HTML frame the
|
* <code>target</code> argument indicates in which HTML frame the
|
||||||
* document is to be displayed.
|
* document is to be displayed.
|
||||||
* The target argument is interpreted as follows:
|
* The target argument is interpreted as follows:
|
||||||
* <p>
|
*
|
||||||
* <center><table border="3" summary="Target arguments and their descriptions">
|
* <center><table border="3" summary="Target arguments and their descriptions">
|
||||||
* <tr><th>Target Argument</th><th>Description</th></tr>
|
* <tr><th>Target Argument</th><th>Description</th></tr>
|
||||||
* <tr><td><code>"_self"</code> <td>Show in the window and frame that
|
* <tr><td><code>"_self"</code> <td>Show in the window and frame that
|
||||||
|
@ -43,7 +43,6 @@ import java.security.BasicPermission;
|
|||||||
* target names, and for each provides a description of what the
|
* target names, and for each provides a description of what the
|
||||||
* permission allows and a discussion of the risks of granting code
|
* permission allows and a discussion of the risks of granting code
|
||||||
* the permission.
|
* the permission.
|
||||||
* <P>
|
|
||||||
*
|
*
|
||||||
* <table border=1 cellpadding=5 summary="AWTPermission target names, descriptions, and associated risks.">
|
* <table border=1 cellpadding=5 summary="AWTPermission target names, descriptions, and associated risks.">
|
||||||
* <tr>
|
* <tr>
|
||||||
|
@ -175,7 +175,6 @@ import sun.java2d.SunCompositeContext;
|
|||||||
* <em>F<sub>s</sub></em> and <em>F<sub>d</sub></em> and then the resulting
|
* <em>F<sub>s</sub></em> and <em>F<sub>d</sub></em> and then the resulting
|
||||||
* premultiplied components <em>A<sub>r</sub></em> and <em>C<sub>r</sub></em>.
|
* premultiplied components <em>A<sub>r</sub></em> and <em>C<sub>r</sub></em>.
|
||||||
*
|
*
|
||||||
* <p>
|
|
||||||
* <h3>Preparing Results</h3>
|
* <h3>Preparing Results</h3>
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
@ -193,7 +192,6 @@ import sun.java2d.SunCompositeContext;
|
|||||||
* by zero" and the color components are left as
|
* by zero" and the color components are left as
|
||||||
* all zeros.
|
* all zeros.
|
||||||
*
|
*
|
||||||
* <p>
|
|
||||||
* <h3>Performance Considerations</h3>
|
* <h3>Performance Considerations</h3>
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
@ -216,7 +214,6 @@ import sun.java2d.SunCompositeContext;
|
|||||||
* for their pixels. Such sources supply an alpha of 1.0 for
|
* for their pixels. Such sources supply an alpha of 1.0 for
|
||||||
* all of their pixels.
|
* all of their pixels.
|
||||||
*
|
*
|
||||||
* <p>
|
|
||||||
* <li>
|
* <li>
|
||||||
* Many destinations also have no place to store the alpha values
|
* Many destinations also have no place to store the alpha values
|
||||||
* that result from the blending calculations performed by this class.
|
* that result from the blending calculations performed by this class.
|
||||||
@ -227,7 +224,6 @@ import sun.java2d.SunCompositeContext;
|
|||||||
* values by the resulting alpha value before storing the color
|
* values by the resulting alpha value before storing the color
|
||||||
* values and discarding the alpha value.
|
* values and discarding the alpha value.
|
||||||
*
|
*
|
||||||
* <p>
|
|
||||||
* <li>
|
* <li>
|
||||||
* The accuracy of the results depends on the manner in which pixels
|
* The accuracy of the results depends on the manner in which pixels
|
||||||
* are stored in the destination.
|
* are stored in the destination.
|
||||||
@ -248,7 +244,6 @@ import sun.java2d.SunCompositeContext;
|
|||||||
* the need to choose a pixel from a limited palette to match the
|
* the need to choose a pixel from a limited palette to match the
|
||||||
* results of the blending equations.
|
* results of the blending equations.
|
||||||
*
|
*
|
||||||
* <p>
|
|
||||||
* <li>
|
* <li>
|
||||||
* Nearly all formats store pixels as discrete integers rather than
|
* Nearly all formats store pixels as discrete integers rather than
|
||||||
* the floating point values used in the reference equations above.
|
* the floating point values used in the reference equations above.
|
||||||
@ -268,7 +263,6 @@ import sun.java2d.SunCompositeContext;
|
|||||||
* represents 0.0 and 0xff represents
|
* represents 0.0 and 0xff represents
|
||||||
* 1.0.
|
* 1.0.
|
||||||
*
|
*
|
||||||
* <p>
|
|
||||||
* <li>
|
* <li>
|
||||||
* The internal implementation can approximate some of the equations
|
* The internal implementation can approximate some of the equations
|
||||||
* and it can also eliminate some steps to avoid unnecessary operations.
|
* and it can also eliminate some steps to avoid unnecessary operations.
|
||||||
@ -332,7 +326,6 @@ import sun.java2d.SunCompositeContext;
|
|||||||
* <p>
|
* <p>
|
||||||
* and thus they would all match.
|
* and thus they would all match.
|
||||||
*
|
*
|
||||||
* <p>
|
|
||||||
* <li>
|
* <li>
|
||||||
* Because of the technique of simplifying the equations for
|
* Because of the technique of simplifying the equations for
|
||||||
* calculation efficiency, some implementations might perform
|
* calculation efficiency, some implementations might perform
|
||||||
|
@ -39,7 +39,7 @@ import java.lang.annotation.Native;
|
|||||||
* {@link Shape} and the decorations applied at the ends and joins of
|
* {@link Shape} and the decorations applied at the ends and joins of
|
||||||
* path segments of the <code>Shape</code>.
|
* path segments of the <code>Shape</code>.
|
||||||
* These rendering attributes include:
|
* These rendering attributes include:
|
||||||
* <dl compact>
|
* <dl>
|
||||||
* <dt><i>width</i>
|
* <dt><i>width</i>
|
||||||
* <dd>The pen width, measured perpendicularly to the pen trajectory.
|
* <dd>The pen width, measured perpendicularly to the pen trajectory.
|
||||||
* <dt><i>end caps</i>
|
* <dt><i>end caps</i>
|
||||||
|
@ -99,7 +99,7 @@ import java.util.Hashtable;
|
|||||||
* style="float:center; margin: 7px 10px;">
|
* style="float:center; margin: 7px 10px;">
|
||||||
* <p>
|
* <p>
|
||||||
* The code for this applet is as follows:
|
* The code for this applet is as follows:
|
||||||
* <p>
|
*
|
||||||
* <hr><blockquote><pre>
|
* <hr><blockquote><pre>
|
||||||
* import java.awt.*;
|
* import java.awt.*;
|
||||||
* import java.applet.Applet;
|
* import java.applet.Applet;
|
||||||
|
@ -388,7 +388,7 @@ public class Button extends Component implements Accessible {
|
|||||||
* This method is not called unless action events are
|
* This method is not called unless action events are
|
||||||
* enabled for this button. Action events are enabled
|
* enabled for this button. Action events are enabled
|
||||||
* when one of the following occurs:
|
* when one of the following occurs:
|
||||||
* <p><ul>
|
* <ul>
|
||||||
* <li>An <code>ActionListener</code> object is registered
|
* <li>An <code>ActionListener</code> object is registered
|
||||||
* via <code>addActionListener</code>.
|
* via <code>addActionListener</code>.
|
||||||
* <li>Action events are enabled via <code>enableEvents</code>.
|
* <li>Action events are enabled via <code>enableEvents</code>.
|
||||||
|
@ -41,7 +41,7 @@ import javax.accessibility.*;
|
|||||||
* <p>
|
* <p>
|
||||||
* The following code example creates a set of check boxes in
|
* The following code example creates a set of check boxes in
|
||||||
* a grid layout:
|
* a grid layout:
|
||||||
* <p>
|
*
|
||||||
* <hr><blockquote><pre>
|
* <hr><blockquote><pre>
|
||||||
* setLayout(new GridLayout(3, 1));
|
* setLayout(new GridLayout(3, 1));
|
||||||
* add(new Checkbox("one", null, true));
|
* add(new Checkbox("one", null, true));
|
||||||
@ -558,7 +558,7 @@ public class Checkbox extends Component implements ItemSelectable, Accessible {
|
|||||||
* This method is not called unless item events are
|
* This method is not called unless item events are
|
||||||
* enabled for this component. Item events are enabled
|
* enabled for this component. Item events are enabled
|
||||||
* when one of the following occurs:
|
* when one of the following occurs:
|
||||||
* <p><ul>
|
* <ul>
|
||||||
* <li>An <code>ItemListener</code> object is registered
|
* <li>An <code>ItemListener</code> object is registered
|
||||||
* via <code>addItemListener</code>.
|
* via <code>addItemListener</code>.
|
||||||
* <li>Item events are enabled via <code>enableEvents</code>.
|
* <li>Item events are enabled via <code>enableEvents</code>.
|
||||||
|
@ -35,7 +35,7 @@ package java.awt;
|
|||||||
* <p>
|
* <p>
|
||||||
* The following code example produces a new check box group,
|
* The following code example produces a new check box group,
|
||||||
* with three check boxes:
|
* with three check boxes:
|
||||||
* <p>
|
*
|
||||||
* <hr><blockquote><pre>
|
* <hr><blockquote><pre>
|
||||||
* setLayout(new GridLayout(3, 1));
|
* setLayout(new GridLayout(3, 1));
|
||||||
* CheckboxGroup cbg = new CheckboxGroup();
|
* CheckboxGroup cbg = new CheckboxGroup();
|
||||||
|
@ -367,7 +367,7 @@ public class CheckboxMenuItem extends MenuItem implements ItemSelectable, Access
|
|||||||
* This method is not called unless item events are
|
* This method is not called unless item events are
|
||||||
* enabled for this menu item. Item events are enabled
|
* enabled for this menu item. Item events are enabled
|
||||||
* when one of the following occurs:
|
* when one of the following occurs:
|
||||||
* <p><ul>
|
* <ul>
|
||||||
* <li>An <code>ItemListener</code> object is registered
|
* <li>An <code>ItemListener</code> object is registered
|
||||||
* via <code>addItemListener</code>.
|
* via <code>addItemListener</code>.
|
||||||
* <li>Item events are enabled via <code>enableEvents</code>.
|
* <li>Item events are enabled via <code>enableEvents</code>.
|
||||||
|
@ -40,7 +40,7 @@ import javax.accessibility.*;
|
|||||||
* The current choice is displayed as the title of the menu.
|
* The current choice is displayed as the title of the menu.
|
||||||
* <p>
|
* <p>
|
||||||
* The following code example produces a pop-up menu:
|
* The following code example produces a pop-up menu:
|
||||||
* <p>
|
*
|
||||||
* <hr><blockquote><pre>
|
* <hr><blockquote><pre>
|
||||||
* Choice ColorChooser = new Choice();
|
* Choice ColorChooser = new Choice();
|
||||||
* ColorChooser.add("Green");
|
* ColorChooser.add("Green");
|
||||||
@ -609,7 +609,7 @@ public class Choice extends Component implements ItemSelectable, Accessible {
|
|||||||
* This method is not called unless item events are
|
* This method is not called unless item events are
|
||||||
* enabled for this component. Item events are enabled
|
* enabled for this component. Item events are enabled
|
||||||
* when one of the following occurs:
|
* when one of the following occurs:
|
||||||
* <p><ul>
|
* <ul>
|
||||||
* <li>An <code>ItemListener</code> object is registered
|
* <li>An <code>ItemListener</code> object is registered
|
||||||
* via <code>addItemListener</code>.
|
* via <code>addItemListener</code>.
|
||||||
* <li>Item events are enabled via <code>enableEvents</code>.
|
* <li>Item events are enabled via <code>enableEvents</code>.
|
||||||
|
@ -106,7 +106,7 @@ import sun.util.logging.PlatformLogger;
|
|||||||
* adding/removing components to/from containers, the whole hierarchy must be
|
* adding/removing components to/from containers, the whole hierarchy must be
|
||||||
* validated afterwards by means of the {@link Container#validate()} method
|
* validated afterwards by means of the {@link Container#validate()} method
|
||||||
* invoked on the top-most invalid container of the hierarchy.
|
* invoked on the top-most invalid container of the hierarchy.
|
||||||
* <p>
|
*
|
||||||
* <h3>Serialization</h3>
|
* <h3>Serialization</h3>
|
||||||
* It is important to note that only AWT listeners which conform
|
* It is important to note that only AWT listeners which conform
|
||||||
* to the <code>Serializable</code> protocol will be saved when
|
* to the <code>Serializable</code> protocol will be saved when
|
||||||
@ -3859,7 +3859,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
|||||||
* This is a proxy capabilities class used when a FlipBufferStrategy
|
* This is a proxy capabilities class used when a FlipBufferStrategy
|
||||||
* is created instead of the requested Blit strategy.
|
* is created instead of the requested Blit strategy.
|
||||||
*
|
*
|
||||||
* @see sun.awt.SunGraphicsEnvironment#isFlipStrategyPreferred(ComponentPeer)
|
* @see sun.java2d.SunGraphicsEnvironment#isFlipStrategyPreferred(ComponentPeer)
|
||||||
*/
|
*/
|
||||||
private class ProxyCapabilities extends ExtendedBufferCapabilities {
|
private class ProxyCapabilities extends ExtendedBufferCapabilities {
|
||||||
private BufferCapabilities orig;
|
private BufferCapabilities orig;
|
||||||
@ -4515,7 +4515,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
|||||||
* Private class to perform sub-region blitting. Swing will use
|
* Private class to perform sub-region blitting. Swing will use
|
||||||
* this subclass via the SubRegionShowable interface in order to
|
* this subclass via the SubRegionShowable interface in order to
|
||||||
* copy only the area changed during a repaint.
|
* copy only the area changed during a repaint.
|
||||||
* @see javax.swing.BufferStrategyPaintManager
|
* See javax.swing.BufferStrategyPaintManager.
|
||||||
*/
|
*/
|
||||||
private class BltSubRegionBufferStrategy extends BltBufferStrategy
|
private class BltSubRegionBufferStrategy extends BltBufferStrategy
|
||||||
implements SubRegionShowable
|
implements SubRegionShowable
|
||||||
@ -6328,7 +6328,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
|||||||
* This method is not called unless component events are
|
* This method is not called unless component events are
|
||||||
* enabled for this component. Component events are enabled
|
* enabled for this component. Component events are enabled
|
||||||
* when one of the following occurs:
|
* when one of the following occurs:
|
||||||
* <p><ul>
|
* <ul>
|
||||||
* <li>A <code>ComponentListener</code> object is registered
|
* <li>A <code>ComponentListener</code> object is registered
|
||||||
* via <code>addComponentListener</code>.
|
* via <code>addComponentListener</code>.
|
||||||
* <li>Component events are enabled via <code>enableEvents</code>.
|
* <li>Component events are enabled via <code>enableEvents</code>.
|
||||||
@ -6373,7 +6373,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
|||||||
* This method is not called unless focus events are
|
* This method is not called unless focus events are
|
||||||
* enabled for this component. Focus events are enabled
|
* enabled for this component. Focus events are enabled
|
||||||
* when one of the following occurs:
|
* when one of the following occurs:
|
||||||
* <p><ul>
|
* <ul>
|
||||||
* <li>A <code>FocusListener</code> object is registered
|
* <li>A <code>FocusListener</code> object is registered
|
||||||
* via <code>addFocusListener</code>.
|
* via <code>addFocusListener</code>.
|
||||||
* <li>Focus events are enabled via <code>enableEvents</code>.
|
* <li>Focus events are enabled via <code>enableEvents</code>.
|
||||||
@ -6393,7 +6393,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
|||||||
* with a <code>FocusEvent</code> as the argument will result in a
|
* with a <code>FocusEvent</code> as the argument will result in a
|
||||||
* call to the <code>Component</code>'s <code>processFocusEvent</code>
|
* call to the <code>Component</code>'s <code>processFocusEvent</code>
|
||||||
* method regardless of the current <code>KeyboardFocusManager</code>.
|
* method regardless of the current <code>KeyboardFocusManager</code>.
|
||||||
* <p>
|
*
|
||||||
* <p>Note that if the event parameter is <code>null</code>
|
* <p>Note that if the event parameter is <code>null</code>
|
||||||
* the behavior is unspecified and may result in an
|
* the behavior is unspecified and may result in an
|
||||||
* exception.
|
* exception.
|
||||||
@ -6430,7 +6430,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
|||||||
* This method is not called unless key events are
|
* This method is not called unless key events are
|
||||||
* enabled for this component. Key events are enabled
|
* enabled for this component. Key events are enabled
|
||||||
* when one of the following occurs:
|
* when one of the following occurs:
|
||||||
* <p><ul>
|
* <ul>
|
||||||
* <li>A <code>KeyListener</code> object is registered
|
* <li>A <code>KeyListener</code> object is registered
|
||||||
* via <code>addKeyListener</code>.
|
* via <code>addKeyListener</code>.
|
||||||
* <li>Key events are enabled via <code>enableEvents</code>.
|
* <li>Key events are enabled via <code>enableEvents</code>.
|
||||||
@ -6499,7 +6499,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
|||||||
* This method is not called unless mouse events are
|
* This method is not called unless mouse events are
|
||||||
* enabled for this component. Mouse events are enabled
|
* enabled for this component. Mouse events are enabled
|
||||||
* when one of the following occurs:
|
* when one of the following occurs:
|
||||||
* <p><ul>
|
* <ul>
|
||||||
* <li>A <code>MouseListener</code> object is registered
|
* <li>A <code>MouseListener</code> object is registered
|
||||||
* via <code>addMouseListener</code>.
|
* via <code>addMouseListener</code>.
|
||||||
* <li>Mouse events are enabled via <code>enableEvents</code>.
|
* <li>Mouse events are enabled via <code>enableEvents</code>.
|
||||||
@ -6547,7 +6547,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
|||||||
* This method is not called unless mouse motion events are
|
* This method is not called unless mouse motion events are
|
||||||
* enabled for this component. Mouse motion events are enabled
|
* enabled for this component. Mouse motion events are enabled
|
||||||
* when one of the following occurs:
|
* when one of the following occurs:
|
||||||
* <p><ul>
|
* <ul>
|
||||||
* <li>A <code>MouseMotionListener</code> object is registered
|
* <li>A <code>MouseMotionListener</code> object is registered
|
||||||
* via <code>addMouseMotionListener</code>.
|
* via <code>addMouseMotionListener</code>.
|
||||||
* <li>Mouse motion events are enabled via <code>enableEvents</code>.
|
* <li>Mouse motion events are enabled via <code>enableEvents</code>.
|
||||||
@ -6586,7 +6586,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
|||||||
* This method is not called unless mouse wheel events are
|
* This method is not called unless mouse wheel events are
|
||||||
* enabled for this component. Mouse wheel events are enabled
|
* enabled for this component. Mouse wheel events are enabled
|
||||||
* when one of the following occurs:
|
* when one of the following occurs:
|
||||||
* <p><ul>
|
* <ul>
|
||||||
* <li>A <code>MouseWheelListener</code> object is registered
|
* <li>A <code>MouseWheelListener</code> object is registered
|
||||||
* via <code>addMouseWheelListener</code>.
|
* via <code>addMouseWheelListener</code>.
|
||||||
* <li>Mouse wheel events are enabled via <code>enableEvents</code>.
|
* <li>Mouse wheel events are enabled via <code>enableEvents</code>.
|
||||||
@ -6630,7 +6630,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
|||||||
* This method is not called unless input method events
|
* This method is not called unless input method events
|
||||||
* are enabled for this component. Input method events are enabled
|
* are enabled for this component. Input method events are enabled
|
||||||
* when one of the following occurs:
|
* when one of the following occurs:
|
||||||
* <p><ul>
|
* <ul>
|
||||||
* <li>An <code>InputMethodListener</code> object is registered
|
* <li>An <code>InputMethodListener</code> object is registered
|
||||||
* via <code>addInputMethodListener</code>.
|
* via <code>addInputMethodListener</code>.
|
||||||
* <li>Input method events are enabled via <code>enableEvents</code>.
|
* <li>Input method events are enabled via <code>enableEvents</code>.
|
||||||
@ -6669,7 +6669,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
|||||||
* This method is not called unless hierarchy events
|
* This method is not called unless hierarchy events
|
||||||
* are enabled for this component. Hierarchy events are enabled
|
* are enabled for this component. Hierarchy events are enabled
|
||||||
* when one of the following occurs:
|
* when one of the following occurs:
|
||||||
* <p><ul>
|
* <ul>
|
||||||
* <li>An <code>HierarchyListener</code> object is registered
|
* <li>An <code>HierarchyListener</code> object is registered
|
||||||
* via <code>addHierarchyListener</code>.
|
* via <code>addHierarchyListener</code>.
|
||||||
* <li>Hierarchy events are enabled via <code>enableEvents</code>.
|
* <li>Hierarchy events are enabled via <code>enableEvents</code>.
|
||||||
@ -6705,7 +6705,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
|||||||
* This method is not called unless hierarchy bounds events
|
* This method is not called unless hierarchy bounds events
|
||||||
* are enabled for this component. Hierarchy bounds events are enabled
|
* are enabled for this component. Hierarchy bounds events are enabled
|
||||||
* when one of the following occurs:
|
* when one of the following occurs:
|
||||||
* <p><ul>
|
* <ul>
|
||||||
* <li>An <code>HierarchyBoundsListener</code> object is registered
|
* <li>An <code>HierarchyBoundsListener</code> object is registered
|
||||||
* via <code>addHierarchyBoundsListener</code>.
|
* via <code>addHierarchyBoundsListener</code>.
|
||||||
* <li>Hierarchy bounds events are enabled via <code>enableEvents</code>.
|
* <li>Hierarchy bounds events are enabled via <code>enableEvents</code>.
|
||||||
|
@ -185,7 +185,7 @@ public class Container extends Component {
|
|||||||
* the method can return the Container on which it is originally called
|
* the method can return the Container on which it is originally called
|
||||||
* in case if none of its children are the current mouse event targets.
|
* in case if none of its children are the current mouse event targets.
|
||||||
*
|
*
|
||||||
* @see #getMouseEventTarget(int, int, boolean, boolean, boolean)
|
* @see #getMouseEventTarget(int, int, boolean)
|
||||||
*/
|
*/
|
||||||
static final boolean INCLUDE_SELF = true;
|
static final boolean INCLUDE_SELF = true;
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ public class Container extends Component {
|
|||||||
* of <code>getMouseEventTarget</code>. It is used to specify whether
|
* of <code>getMouseEventTarget</code>. It is used to specify whether
|
||||||
* the method should search only lightweight components.
|
* the method should search only lightweight components.
|
||||||
*
|
*
|
||||||
* @see #getMouseEventTarget(int, int, boolean, boolean, boolean)
|
* @see #getMouseEventTarget(int, int, boolean)
|
||||||
*/
|
*/
|
||||||
static final boolean SEARCH_HEAVYWEIGHTS = true;
|
static final boolean SEARCH_HEAVYWEIGHTS = true;
|
||||||
|
|
||||||
@ -1036,7 +1036,7 @@ public class Container extends Component {
|
|||||||
* every add request to a container as all other add methods defer
|
* every add request to a container as all other add methods defer
|
||||||
* to this one. An overriding method should
|
* to this one. An overriding method should
|
||||||
* usually include a call to the superclass's version of the method:
|
* usually include a call to the superclass's version of the method:
|
||||||
* <p>
|
*
|
||||||
* <blockquote>
|
* <blockquote>
|
||||||
* <code>super.addImpl(comp, constraints, index)</code>
|
* <code>super.addImpl(comp, constraints, index)</code>
|
||||||
* </blockquote>
|
* </blockquote>
|
||||||
|
@ -28,20 +28,20 @@ interface EventFilter {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Enumeration for possible values for <code>acceptEvent(AWTEvent ev)</code> method.
|
* Enumeration for possible values for <code>acceptEvent(AWTEvent ev)</code> method.
|
||||||
* @see EventDispatchThread#pumpEventsForFilters(EventFilter)
|
* @see EventDispatchThread#pumpEventsForFilter
|
||||||
*/
|
*/
|
||||||
static enum FilterAction {
|
static enum FilterAction {
|
||||||
/**
|
/**
|
||||||
* ACCEPT means that this filter do not filter the event and allowes other
|
* ACCEPT means that this filter do not filter the event and allowes other
|
||||||
* active filters to proceed it. If all the active filters accept the event, it
|
* active filters to proceed it. If all the active filters accept the event, it
|
||||||
* is dispatched by the <code>EventDispatchThread</code>
|
* is dispatched by the <code>EventDispatchThread</code>
|
||||||
* @see EventDispatchThread#pumpEventsForFilters(EventFilter)
|
* @see EventDispatchThread#pumpEventsForFilter
|
||||||
*/
|
*/
|
||||||
ACCEPT,
|
ACCEPT,
|
||||||
/**
|
/**
|
||||||
* REJECT means that this filter filter the event. No other filters are queried,
|
* REJECT means that this filter filter the event. No other filters are queried,
|
||||||
* and the event is not dispatched by the <code>EventDispatchedThread</code>
|
* and the event is not dispatched by the <code>EventDispatchedThread</code>
|
||||||
* @see EventDispatchThread#pumpEventsForFilters(EventFilter)
|
* @see EventDispatchThread#pumpEventsForFilter
|
||||||
*/
|
*/
|
||||||
REJECT,
|
REJECT,
|
||||||
/**
|
/**
|
||||||
@ -51,7 +51,7 @@ interface EventFilter {
|
|||||||
* It is not recommended to use ACCEPT_IMMEDIATELY as there may be some active
|
* It is not recommended to use ACCEPT_IMMEDIATELY as there may be some active
|
||||||
* filters not queried yet that do not accept this event. It is primarily used
|
* filters not queried yet that do not accept this event. It is primarily used
|
||||||
* by modal filters.
|
* by modal filters.
|
||||||
* @see EventDispatchThread#pumpEventsForFilters(EventFilter)
|
* @see EventDispatchThread#pumpEventsForFilter
|
||||||
* @see ModalEventFilter
|
* @see ModalEventFilter
|
||||||
*/
|
*/
|
||||||
ACCEPT_IMMEDIATELY
|
ACCEPT_IMMEDIATELY
|
||||||
|
@ -652,7 +652,7 @@ public class EventQueue {
|
|||||||
* Dispatches an event. The manner in which the event is
|
* Dispatches an event. The manner in which the event is
|
||||||
* dispatched depends upon the type of the event and the
|
* dispatched depends upon the type of the event and the
|
||||||
* type of the event's source object:
|
* type of the event's source object:
|
||||||
* <p>
|
*
|
||||||
* <table border=1 summary="Event types, source types, and dispatch methods">
|
* <table border=1 summary="Event types, source types, and dispatch methods">
|
||||||
* <tr>
|
* <tr>
|
||||||
* <th>Event Type</th>
|
* <th>Event Type</th>
|
||||||
|
@ -439,7 +439,6 @@ public class FileDialog extends Dialog {
|
|||||||
* Note that the method is private and it's intended to be used
|
* Note that the method is private and it's intended to be used
|
||||||
* by the peers through the AWTAccessor API.
|
* by the peers through the AWTAccessor API.
|
||||||
*
|
*
|
||||||
* @param directory the current directory
|
|
||||||
* @param files the array that contains the short names of
|
* @param files the array that contains the short names of
|
||||||
* all the files that the user selects.
|
* all the files that the user selects.
|
||||||
*
|
*
|
||||||
|
@ -57,7 +57,7 @@ import java.io.IOException;
|
|||||||
* style="float:center; margin: 7px 10px;">
|
* style="float:center; margin: 7px 10px;">
|
||||||
* <p>
|
* <p>
|
||||||
* Here is the code for this applet:
|
* Here is the code for this applet:
|
||||||
* <p>
|
*
|
||||||
* <hr><blockquote><pre>
|
* <hr><blockquote><pre>
|
||||||
* import java.awt.*;
|
* import java.awt.*;
|
||||||
* import java.applet.Applet;
|
* import java.applet.Applet;
|
||||||
@ -129,9 +129,9 @@ public class FlowLayout implements LayoutManager, java.io.Serializable {
|
|||||||
* how each row distributes empty space.
|
* how each row distributes empty space.
|
||||||
* It can be one of the following values:
|
* It can be one of the following values:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <code>LEFT</code>
|
* <li><code>LEFT</code>
|
||||||
* <code>RIGHT</code>
|
* <li><code>RIGHT</code>
|
||||||
* <code>CENTER</code>
|
* <li><code>CENTER</code>
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* @serial
|
* @serial
|
||||||
@ -146,11 +146,11 @@ public class FlowLayout implements LayoutManager, java.io.Serializable {
|
|||||||
* v1.2 and greater.
|
* v1.2 and greater.
|
||||||
* It can be one of the following three values:
|
* It can be one of the following three values:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <code>LEFT</code>
|
* <li><code>LEFT</code>
|
||||||
* <code>RIGHT</code>
|
* <li><code>RIGHT</code>
|
||||||
* <code>CENTER</code>
|
* <li><code>CENTER</code>
|
||||||
* <code>LEADING</code>
|
* <li><code>LEADING</code>
|
||||||
* <code>TRAILING</code>
|
* <li><code>TRAILING</code>
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* @serial
|
* @serial
|
||||||
|
@ -75,13 +75,13 @@ import static sun.font.EAttribute.*;
|
|||||||
*
|
*
|
||||||
* A <em>character</em> is a symbol that represents an item such as a letter,
|
* A <em>character</em> is a symbol that represents an item such as a letter,
|
||||||
* a digit, or punctuation in an abstract way. For example, <code>'g'</code>,
|
* a digit, or punctuation in an abstract way. For example, <code>'g'</code>,
|
||||||
* <font size=-1>LATIN SMALL LETTER G</font>, is a character.
|
* LATIN SMALL LETTER G, is a character.
|
||||||
* <p>
|
* <p>
|
||||||
* A <em>glyph</em> is a shape used to render a character or a sequence of
|
* A <em>glyph</em> is a shape used to render a character or a sequence of
|
||||||
* characters. In simple writing systems, such as Latin, typically one glyph
|
* characters. In simple writing systems, such as Latin, typically one glyph
|
||||||
* represents one character. In general, however, characters and glyphs do not
|
* represents one character. In general, however, characters and glyphs do not
|
||||||
* have one-to-one correspondence. For example, the character 'á'
|
* have one-to-one correspondence. For example, the character 'á'
|
||||||
* <font size=-1>LATIN SMALL LETTER A WITH ACUTE</font>, can be represented by
|
* LATIN SMALL LETTER A WITH ACUTE, can be represented by
|
||||||
* two glyphs: one for 'a' and one for '´'. On the other hand, the
|
* two glyphs: one for 'a' and one for '´'. On the other hand, the
|
||||||
* two-character string "fi" can be represented by a single glyph, an
|
* two-character string "fi" can be represented by a single glyph, an
|
||||||
* "fi" ligature. In complex writing systems, such as Arabic or the South
|
* "fi" ligature. In complex writing systems, such as Arabic or the South
|
||||||
@ -93,7 +93,7 @@ import static sun.font.EAttribute.*;
|
|||||||
* of characters as well as the tables needed to map sequences of characters to
|
* of characters as well as the tables needed to map sequences of characters to
|
||||||
* corresponding sequences of glyphs.
|
* corresponding sequences of glyphs.
|
||||||
*
|
*
|
||||||
* <h4>Physical and Logical Fonts</h4>
|
* <h3>Physical and Logical Fonts</h3>
|
||||||
*
|
*
|
||||||
* The Java Platform distinguishes between two kinds of fonts:
|
* The Java Platform distinguishes between two kinds of fonts:
|
||||||
* <em>physical</em> fonts and <em>logical</em> fonts.
|
* <em>physical</em> fonts and <em>logical</em> fonts.
|
||||||
@ -130,7 +130,7 @@ import static sun.font.EAttribute.*;
|
|||||||
* <a href="http://www.oracle.com/technetwork/java/javase/tech/faq-jsp-138165.html">Internationalization FAQ</a>
|
* <a href="http://www.oracle.com/technetwork/java/javase/tech/faq-jsp-138165.html">Internationalization FAQ</a>
|
||||||
* document.
|
* document.
|
||||||
*
|
*
|
||||||
* <h4>Font Faces and Names</h4>
|
* <h3>Font Faces and Names</h3>
|
||||||
*
|
*
|
||||||
* A <code>Font</code>
|
* A <code>Font</code>
|
||||||
* can have many faces, such as heavy, medium, oblique, gothic and
|
* can have many faces, such as heavy, medium, oblique, gothic and
|
||||||
@ -160,7 +160,7 @@ import static sun.font.EAttribute.*;
|
|||||||
* with varying sizes, styles, transforms and font features via the
|
* with varying sizes, styles, transforms and font features via the
|
||||||
* <code>deriveFont</code> methods in this class.
|
* <code>deriveFont</code> methods in this class.
|
||||||
*
|
*
|
||||||
* <h4>Font and TextAttribute</h4>
|
* <h3>Font and TextAttribute</h3>
|
||||||
*
|
*
|
||||||
* <p><code>Font</code> supports most
|
* <p><code>Font</code> supports most
|
||||||
* <code>TextAttribute</code>s. This makes some operations, such as
|
* <code>TextAttribute</code>s. This makes some operations, such as
|
||||||
@ -197,7 +197,7 @@ import static sun.font.EAttribute.*;
|
|||||||
* avoid this problem. Clients who use input method highlights can
|
* avoid this problem. Clients who use input method highlights can
|
||||||
* convert these to the platform-specific attributes for that
|
* convert these to the platform-specific attributes for that
|
||||||
* highlight on the current platform and set them on the Font as
|
* highlight on the current platform and set them on the Font as
|
||||||
* a workaround.</p>
|
* a workaround.
|
||||||
*
|
*
|
||||||
* <p>The <code>Map</code>-based constructor and
|
* <p>The <code>Map</code>-based constructor and
|
||||||
* <code>deriveFont</code> APIs ignore the FONT attribute, and it is
|
* <code>deriveFont</code> APIs ignore the FONT attribute, and it is
|
||||||
@ -1419,7 +1419,7 @@ public class Font implements java.io.Serializable
|
|||||||
* To ensure that this method returns the desired Font,
|
* To ensure that this method returns the desired Font,
|
||||||
* format the <code>str</code> parameter in
|
* format the <code>str</code> parameter in
|
||||||
* one of these ways
|
* one of these ways
|
||||||
* <p>
|
*
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li><em>fontname-style-pointsize</em>
|
* <li><em>fontname-style-pointsize</em>
|
||||||
* <li><em>fontname-pointsize</em>
|
* <li><em>fontname-pointsize</em>
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user