提交 14082957 编写于 作者: L lana

Merge

...@@ -239,7 +239,7 @@ classes : $(CLASSES_INIT) .delete.classlist .compile.classlist ...@@ -239,7 +239,7 @@ classes : $(CLASSES_INIT) .delete.classlist .compile.classlist
$(CAT) $<.filtered; \ $(CAT) $<.filtered; \
$(ECHO) "# Running javac: $$numfiles files; in $(CURDIR)"; \ $(ECHO) "# Running javac: $$numfiles files; in $(CURDIR)"; \
$(ECHO) $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$<.filtered; \ $(ECHO) $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$<.filtered; \
$(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$<.filtered; \ $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$<.filtered && \
$(ECHO) "# javac finished"; \ $(ECHO) "# javac finished"; \
fi fi
@$(java-vm-cleanup) @$(java-vm-cleanup)
......
...@@ -25,15 +25,15 @@ ...@@ -25,15 +25,15 @@
# Properties for jprt # Properties for jprt
# Release to build for # Locked down to jdk8
jprt.tools.default.release=jdk8 jprt.tools.default.release=jdk8
# The different build flavors we want, we override here so we just get these 2 # The different build flavors we want, we override here so we just get these 2
jprt.build.flavors=product,fastdebug jprt.build.flavors=product,fastdebug
# Standard list of jprt build targets for this source tree # Standard list of jprt build targets for this source tree
jprt.build.targets= \ jprt.build.targets= \
solaris_sparc_5.10-{product|fastdebug}, \ solaris_sparc_5.10-{product|fastdebug}, \
solaris_sparcv9_5.10-{product|fastdebug}, \ solaris_sparcv9_5.10-{product|fastdebug}, \
solaris_i586_5.10-{product|fastdebug}, \ solaris_i586_5.10-{product|fastdebug}, \
solaris_x64_5.10-{product|fastdebug}, \ solaris_x64_5.10-{product|fastdebug}, \
...@@ -45,247 +45,59 @@ jprt.build.targets= \ ...@@ -45,247 +45,59 @@ jprt.build.targets= \
# User can select the test set with jprt submit "-testset name" option # User can select the test set with jprt submit "-testset name" option
jprt.my.test.set=${jprt.test.set} jprt.my.test.set=${jprt.test.set}
# Standard vm test target # Test target list (no fastdebug & limited c2 testing)
jprt.vm.default.test.targets= \ jprt.my.test.target.set= \
solaris_sparc_5.10-product-c1-jvm98, \ solaris_sparc_5.10-product-c1-TESTNAME, \
solaris_sparcv9_5.10-product-c2-jvm98, \ solaris_sparcv9_5.10-product-c2-TESTNAME, \
solaris_i586_5.10-product-c1-jvm98, \ solaris_i586_5.10-product-c1-TESTNAME, \
solaris_x64_5.10-product-c2-jvm98, \ solaris_x64_5.10-product-c2-TESTNAME, \
linux_i586_2.6-product-{c1|c2}-jvm98, \ linux_i586_2.6-product-{c1|c2}-TESTNAME, \
linux_x64_2.6-product-c2-jvm98, \ linux_x64_2.6-product-c2-TESTNAME, \
windows_i586_5.1-product-c1-jvm98, \ windows_i586_5.1-product-c1-TESTNAME, \
windows_x64_5.2-product-c2-jvm98 windows_x64_5.2-product-c2-TESTNAME
# Select vm testlist to use (allow for testset to be empty too) # Default vm test targets (testset=default)
jprt.vm.all.test.targets=${jprt.vm.default.test.targets} jprt.vm.default.test.targets= \
jprt.vm..test.targets=${jprt.vm.default.test.targets} ${jprt.my.test.target.set:TESTNAME=jvm98}
jprt.test.targets=${jprt.vm.${jprt.my.test.set}.test.targets}
# Default jdk test targets in test/Makefile (no fastdebug & limited c2) # Default jdk test targets (testset=default)
jprt.make.rule.default.test.targets= \ jprt.make.rule.default.test.targets= \
\ ${jprt.my.test.target.set:TESTNAME=jdk_beans1}, \
solaris_sparc_5.10-product-c1-jdk_beans1, \ ${jprt.my.test.target.set:TESTNAME=jdk_io}, \
solaris_sparcv9_5.10-product-c2-jdk_beans1, \ ${jprt.my.test.target.set:TESTNAME=jdk_lang}, \
solaris_i586_5.10-product-c1-jdk_beans1, \ ${jprt.my.test.target.set:TESTNAME=jdk_math}, \
solaris_x64_5.10-product-c2-jdk_beans1, \ ${jprt.my.test.target.set:TESTNAME=jdk_misc}, \
linux_i586_2.6-product-{c1|c2}-jdk_beans1, \ ${jprt.my.test.target.set:TESTNAME=jdk_net}, \
linux_x64_2.6-product-c2-jdk_beans1, \ ${jprt.my.test.target.set:TESTNAME=jdk_nio1}, \
windows_i586_5.1-product-c1-jdk_beans1, \ ${jprt.my.test.target.set:TESTNAME=jdk_nio2}, \
windows_x64_5.2-product-c2-jdk_beans1, \ ${jprt.my.test.target.set:TESTNAME=jdk_nio3}, \
\ ${jprt.my.test.target.set:TESTNAME=jdk_security1}, \
solaris_sparc_5.10-product-c1-jdk_io, \ ${jprt.my.test.target.set:TESTNAME=jdk_text}, \
solaris_sparcv9_5.10-product-c2-jdk_io, \ ${jprt.my.test.target.set:TESTNAME=jdk_util}
solaris_i586_5.10-product-c1-jdk_io, \
solaris_x64_5.10-product-c2-jdk_io, \ # All vm test targets (testset=all)
linux_i586_2.6-product-{c1|c2}-jdk_io, \ jprt.vm.all.test.targets= \
linux_x64_2.6-product-c2-jdk_io, \ ${jprt.vm.default.test.targets}, \
windows_i586_5.1-product-c1-jdk_io, \ ${jprt.my.test.target.set:TESTNAME=runThese}, \
windows_x64_5.2-product-c2-jdk_io, \ ${jprt.my.test.target.set:TESTNAME=jbb_default}
\
solaris_sparc_5.10-product-c1-jdk_lang, \
solaris_sparcv9_5.10-product-c2-jdk_lang, \
solaris_i586_5.10-product-c1-jdk_lang, \
solaris_x64_5.10-product-c2-jdk_lang, \
linux_i586_2.6-product-{c1|c2}-jdk_lang, \
linux_x64_2.6-product-c2-jdk_lang, \
windows_i586_5.1-product-c1-jdk_lang, \
windows_x64_5.2-product-c2-jdk_lang, \
\
solaris_sparc_5.10-product-c1-jdk_math, \
solaris_sparcv9_5.10-product-c2-jdk_math, \
solaris_i586_5.10-product-c1-jdk_math, \
solaris_x64_5.10-product-c2-jdk_math, \
linux_i586_2.6-product-{c1|c2}-jdk_math, \
linux_x64_2.6-product-c2-jdk_math, \
windows_i586_5.1-product-c1-jdk_math, \
windows_x64_5.2-product-c2-jdk_math, \
\
solaris_sparc_5.10-product-c1-jdk_misc, \
solaris_sparcv9_5.10-product-c2-jdk_misc, \
solaris_i586_5.10-product-c1-jdk_misc, \
solaris_x64_5.10-product-c2-jdk_misc, \
linux_i586_2.6-product-{c1|c2}-jdk_misc, \
linux_x64_2.6-product-c2-jdk_misc, \
windows_i586_5.1-product-c1-jdk_misc, \
windows_x64_5.2-product-c2-jdk_misc, \
\
solaris_sparc_5.10-product-c1-jdk_net, \
solaris_sparcv9_5.10-product-c2-jdk_net, \
solaris_i586_5.10-product-c1-jdk_net, \
solaris_x64_5.10-product-c2-jdk_net, \
linux_i586_2.6-product-{c1|c2}-jdk_net, \
linux_x64_2.6-product-c2-jdk_net, \
windows_i586_5.1-product-c1-jdk_net, \
windows_x64_5.2-product-c2-jdk_net, \
\
solaris_sparc_5.10-product-c1-jdk_nio1, \
solaris_sparcv9_5.10-product-c2-jdk_nio1, \
solaris_i586_5.10-product-c1-jdk_nio1, \
solaris_x64_5.10-product-c2-jdk_nio1, \
linux_i586_2.6-product-{c1|c2}-jdk_nio1, \
linux_x64_2.6-product-c2-jdk_nio1, \
windows_i586_5.1-product-c1-jdk_nio1, \
windows_x64_5.2-product-c2-jdk_nio1, \
\
solaris_sparc_5.10-product-c1-jdk_nio2, \
solaris_sparcv9_5.10-product-c2-jdk_nio2, \
solaris_i586_5.10-product-c1-jdk_nio2, \
solaris_x64_5.10-product-c2-jdk_nio2, \
linux_i586_2.6-product-{c1|c2}-jdk_nio2, \
linux_x64_2.6-product-c2-jdk_nio2, \
windows_i586_5.1-product-c1-jdk_nio2, \
windows_x64_5.2-product-c2-jdk_nio2, \
\
solaris_sparc_5.10-product-c1-jdk_nio3, \
solaris_sparcv9_5.10-product-c2-jdk_nio3, \
solaris_i586_5.10-product-c1-jdk_nio3, \
solaris_x64_5.10-product-c2-jdk_nio3, \
linux_i586_2.6-product-{c1|c2}-jdk_nio3, \
linux_x64_2.6-product-c2-jdk_nio3, \
windows_i586_5.1-product-c1-jdk_nio3, \
windows_x64_5.2-product-c2-jdk_nio3, \
\
solaris_sparc_5.10-product-c1-jdk_security1, \
solaris_sparcv9_5.10-product-c2-jdk_security1, \
solaris_i586_5.10-product-c1-jdk_security1, \
solaris_x64_5.10-product-c2-jdk_security1, \
linux_i586_2.6-product-{c1|c2}-jdk_security1, \
linux_x64_2.6-product-c2-jdk_security1, \
windows_i586_5.1-product-c1-jdk_security1, \
windows_x64_5.2-product-c2-jdk_security1, \
\
solaris_sparc_5.10-product-c1-jdk_text, \
solaris_sparcv9_5.10-product-c2-jdk_text, \
solaris_i586_5.10-product-c1-jdk_text, \
solaris_x64_5.10-product-c2-jdk_text, \
linux_i586_2.6-product-{c1|c2}-jdk_text, \
linux_x64_2.6-product-c2-jdk_text, \
windows_i586_5.1-product-c1-jdk_text, \
windows_x64_5.2-product-c2-jdk_text, \
\
solaris_sparc_5.10-product-c1-jdk_tools1, \
solaris_sparcv9_5.10-product-c2-jdk_tools1, \
solaris_i586_5.10-product-c1-jdk_tools1, \
solaris_x64_5.10-product-c2-jdk_tools1, \
linux_i586_2.6-product-{c1|c2}-jdk_tools1, \
linux_x64_2.6-product-c2-jdk_tools1, \
windows_i586_5.1-product-c1-jdk_tools1, \
windows_x64_5.2-product-c2-jdk_tools1, \
\
solaris_sparc_5.10-product-c1-jdk_util, \
solaris_sparcv9_5.10-product-c2-jdk_util, \
solaris_i586_5.10-product-c1-jdk_util, \
solaris_x64_5.10-product-c2-jdk_util, \
linux_i586_2.6-product-{c1|c2}-jdk_util, \
linux_x64_2.6-product-c2-jdk_util, \
windows_i586_5.1-product-c1-jdk_util, \
windows_x64_5.2-product-c2-jdk_util
# All jdk test targets in test/Makefile (still no fastdebug & limited c2) # All jdk test targets (testset=all)
jprt.make.rule.all.test.targets= \ jprt.make.rule.all.test.targets= \
\ ${jprt.make.rule.default.test.targets}, \
${jprt.make.rule.default.test.targets}, \ ${jprt.my.test.target.set:TESTNAME=jdk_awt}, \
\ ${jprt.my.test.target.set:TESTNAME=jdk_beans2}, \
solaris_sparc_5.10-product-c1-jdk_awt, \ ${jprt.my.test.target.set:TESTNAME=jdk_beans3}, \
solaris_sparcv9_5.10-product-c2-jdk_awt, \ ${jprt.my.test.target.set:TESTNAME=jdk_management1}, \
solaris_i586_5.10-product-c1-jdk_awt, \ ${jprt.my.test.target.set:TESTNAME=jdk_management2}, \
solaris_x64_5.10-product-c2-jdk_awt, \ ${jprt.my.test.target.set:TESTNAME=jdk_rmi}, \
linux_i586_2.6-product-{c1|c2}-jdk_awt, \ ${jprt.my.test.target.set:TESTNAME=jdk_security2}, \
linux_x64_2.6-product-c2-jdk_awt, \ ${jprt.my.test.target.set:TESTNAME=jdk_security3}, \
windows_i586_5.1-product-c1-jdk_awt, \ ${jprt.my.test.target.set:TESTNAME=jdk_sound}, \
windows_x64_5.2-product-c2-jdk_awt, \ ${jprt.my.test.target.set:TESTNAME=jdk_swing}, \
\ ${jprt.my.test.target.set:TESTNAME=jdk_tools1}, \
solaris_sparc_5.10-product-c1-jdk_beans2, \ ${jprt.my.test.target.set:TESTNAME=jdk_tools2}
solaris_sparcv9_5.10-product-c2-jdk_beans2, \
solaris_i586_5.10-product-c1-jdk_beans2, \
solaris_x64_5.10-product-c2-jdk_beans2, \
linux_i586_2.6-product-{c1|c2}-jdk_beans2, \
linux_x64_2.6-product-c2-jdk_beans2, \
windows_i586_5.1-product-c1-jdk_beans2, \
windows_x64_5.2-product-c2-jdk_beans2, \
\
solaris_sparc_5.10-product-c1-jdk_beans3, \
solaris_sparcv9_5.10-product-c2-jdk_beans3, \
solaris_i586_5.10-product-c1-jdk_beans3, \
solaris_x64_5.10-product-c2-jdk_beans3, \
linux_i586_2.6-product-{c1|c2}-jdk_beans3, \
linux_x64_2.6-product-c2-jdk_beans3, \
windows_i586_5.1-product-c1-jdk_beans3, \
windows_x64_5.2-product-c2-jdk_beans3, \
\
solaris_sparc_5.10-product-c1-jdk_management1, \
solaris_sparcv9_5.10-product-c2-jdk_management1, \
solaris_i586_5.10-product-c1-jdk_management1, \
solaris_x64_5.10-product-c2-jdk_management1, \
linux_i586_2.6-product-{c1|c2}-jdk_management1, \
linux_x64_2.6-product-c2-jdk_management1, \
windows_i586_5.1-product-c1-jdk_management1, \
windows_x64_5.2-product-c2-jdk_management1, \
\
solaris_sparc_5.10-product-c1-jdk_management2, \
solaris_sparcv9_5.10-product-c2-jdk_management2, \
solaris_i586_5.10-product-c1-jdk_management2, \
solaris_x64_5.10-product-c2-jdk_management2, \
linux_i586_2.6-product-{c1|c2}-jdk_management2, \
linux_x64_2.6-product-c2-jdk_management2, \
windows_i586_5.1-product-c1-jdk_management2, \
windows_x64_5.2-product-c2-jdk_management2, \
\
solaris_sparc_5.10-product-c1-jdk_rmi, \
solaris_sparcv9_5.10-product-c2-jdk_rmi, \
solaris_i586_5.10-product-c1-jdk_rmi, \
solaris_x64_5.10-product-c2-jdk_rmi, \
linux_i586_2.6-product-{c1|c2}-jdk_rmi, \
linux_x64_2.6-product-c2-jdk_rmi, \
windows_i586_5.1-product-c1-jdk_rmi, \
windows_x64_5.2-product-c2-jdk_rmi, \
\
solaris_sparc_5.10-product-c1-jdk_security2, \
solaris_sparcv9_5.10-product-c2-jdk_security2, \
solaris_i586_5.10-product-c1-jdk_security2, \
solaris_x64_5.10-product-c2-jdk_security2, \
linux_i586_2.6-product-{c1|c2}-jdk_security2, \
linux_x64_2.6-product-c2-jdk_security2, \
windows_i586_5.1-product-c1-jdk_security2, \
windows_x64_5.2-product-c2-jdk_security2, \
\
solaris_sparc_5.10-product-c1-jdk_security3, \
solaris_sparcv9_5.10-product-c2-jdk_security3, \
solaris_i586_5.10-product-c1-jdk_security3, \
solaris_x64_5.10-product-c2-jdk_security3, \
linux_i586_2.6-product-{c1|c2}-jdk_security3, \
linux_x64_2.6-product-c2-jdk_security3, \
windows_i586_5.1-product-c1-jdk_security3, \
windows_x64_5.2-product-c2-jdk_security3, \
\
solaris_sparc_5.10-product-c1-jdk_sound, \
solaris_sparcv9_5.10-product-c2-jdk_sound, \
solaris_i586_5.10-product-c1-jdk_sound, \
solaris_x64_5.10-product-c2-jdk_sound, \
linux_i586_2.6-product-{c1|c2}-jdk_sound, \
linux_x64_2.6-product-c2-jdk_sound, \
windows_i586_5.1-product-c1-jdk_sound, \
windows_x64_5.2-product-c2-jdk_sound, \
\
solaris_sparc_5.10-product-c1-jdk_swing, \
solaris_sparcv9_5.10-product-c2-jdk_swing, \
solaris_i586_5.10-product-c1-jdk_swing, \
solaris_x64_5.10-product-c2-jdk_swing, \
linux_i586_2.6-product-{c1|c2}-jdk_swing, \
linux_x64_2.6-product-c2-jdk_swing, \
windows_i586_5.1-product-c1-jdk_swing, \
windows_x64_5.2-product-c2-jdk_swing, \
\
solaris_sparc_5.10-product-c1-jdk_tools2, \
solaris_sparcv9_5.10-product-c2-jdk_tools2, \
solaris_i586_5.10-product-c1-jdk_tools2, \
solaris_x64_5.10-product-c2-jdk_tools2, \
linux_i586_2.6-product-{c1|c2}-jdk_tools2, \
linux_x64_2.6-product-c2-jdk_tools2, \
windows_i586_5.1-product-c1-jdk_tools2, \
windows_x64_5.2-product-c2-jdk_tools2
# JCK test targets in test/Makefile (no fastdebug & limited c2, windows broken) # JCK test targets in test/Makefile (no windows)
jprt.my.jck.test.target.set= \ jprt.my.jck.test.target.set= \
solaris_sparc_5.10-product-c1-JCK7TESTRULE, \ solaris_sparc_5.10-product-c1-JCK7TESTRULE, \
solaris_sparcv9_5.10-product-c2-JCK7TESTRULE, \ solaris_sparcv9_5.10-product-c2-JCK7TESTRULE, \
...@@ -301,8 +113,10 @@ jprt.make.rule.jck.test.targets= \ ...@@ -301,8 +113,10 @@ jprt.make.rule.jck.test.targets= \
${jprt.my.jck.test.target.set:JCK7TESTRULE=jck7compiler} ${jprt.my.jck.test.target.set:JCK7TESTRULE=jck7compiler}
# Select list to use (allow for testset to be empty too) # Select list to use (allow for testset to be empty too)
jprt.make.rule..test.targets=${jprt.make.rule.default.test.targets} jprt.make.rule..test.targets=${jprt.make.rule.default.test.targets}
jprt.make.rule.test.targets=${jprt.make.rule.${jprt.my.test.set}.test.targets} jprt.make.rule.test.targets=${jprt.make.rule.${jprt.my.test.set}.test.targets}
jprt.vm..test.targets=${jprt.vm.default.test.targets}
jprt.test.targets=${jprt.vm.${jprt.my.test.set}.test.targets}
# Directories to be excluded from the source bundles # Directories to be excluded from the source bundles
jprt.bundle.exclude.src.dirs=build dist webrev jprt.bundle.exclude.src.dirs=build dist webrev
......
...@@ -35,7 +35,7 @@ class ArrayRegionTypeNode extends AbstractSimpleTypeNode { ...@@ -35,7 +35,7 @@ class ArrayRegionTypeNode extends AbstractSimpleTypeNode {
} }
String javaType() { String javaType() {
return "List"; return "List<?>";
} }
public void genJavaWrite(PrintWriter writer, int depth, public void genJavaWrite(PrintWriter writer, int depth,
......
...@@ -89,7 +89,7 @@ class OutNode extends AbstractTypeListNode { ...@@ -89,7 +89,7 @@ class OutNode extends AbstractTypeListNode {
if (Main.genDebug) { if (Main.genDebug) {
indent(writer, depth+1); indent(writer, depth+1);
writer.println( writer.println(
"if ((vm.traceFlags & vm.TRACE_SENDS) != 0) {"); "if ((vm.traceFlags & VirtualMachineImpl.TRACE_SENDS) != 0) {");
indent(writer, depth+2); indent(writer, depth+2);
writer.print( writer.print(
"vm.printTrace(\"Sending Command(id=\" + ps.pkt.id + \") "); "vm.printTrace(\"Sending Command(id=\" + ps.pkt.id + \") ");
......
...@@ -33,6 +33,7 @@ package com.sun.jdi; ...@@ -33,6 +33,7 @@ package com.sun.jdi;
*/ */
public class AbsentInformationException extends Exception public class AbsentInformationException extends Exception
{ {
private static final long serialVersionUID = 4988939309582416373L;
public AbsentInformationException() public AbsentInformationException()
{ {
super(); super();
......
...@@ -69,6 +69,7 @@ package com.sun.jdi; ...@@ -69,6 +69,7 @@ package com.sun.jdi;
*/ */
public class ClassNotLoadedException extends Exception public class ClassNotLoadedException extends Exception
{ {
private static final long serialVersionUID = -6242978768444298722L;
private String className; private String className;
public ClassNotLoadedException(String className) { public ClassNotLoadedException(String className) {
......
...@@ -33,6 +33,7 @@ package com.sun.jdi; ...@@ -33,6 +33,7 @@ package com.sun.jdi;
* @since 1.3 * @since 1.3
*/ */
public class ClassNotPreparedException extends RuntimeException { public class ClassNotPreparedException extends RuntimeException {
private static final long serialVersionUID = -6120698967144079642L;
public ClassNotPreparedException() public ClassNotPreparedException()
{ {
super(); super();
......
...@@ -34,6 +34,7 @@ package com.sun.jdi; ...@@ -34,6 +34,7 @@ package com.sun.jdi;
*/ */
public class IncompatibleThreadStateException extends Exception public class IncompatibleThreadStateException extends Exception
{ {
private static final long serialVersionUID = 6199174323414551389L;
public IncompatibleThreadStateException() public IncompatibleThreadStateException()
{ {
super(); super();
......
...@@ -35,6 +35,7 @@ package com.sun.jdi; ...@@ -35,6 +35,7 @@ package com.sun.jdi;
* @since 1.3 * @since 1.3
*/ */
public class InconsistentDebugInfoException extends RuntimeException { public class InconsistentDebugInfoException extends RuntimeException {
private static final long serialVersionUID = 7964236415376861808L;
public InconsistentDebugInfoException() { public InconsistentDebugInfoException() {
super(); super();
} }
......
...@@ -33,6 +33,7 @@ package com.sun.jdi; ...@@ -33,6 +33,7 @@ package com.sun.jdi;
* @since 1.3 * @since 1.3
*/ */
public class InternalException extends RuntimeException { public class InternalException extends RuntimeException {
private static final long serialVersionUID = -9171606393104480607L;
private int errorCode; private int errorCode;
public InternalException() { public InternalException() {
......
...@@ -36,6 +36,7 @@ package com.sun.jdi; ...@@ -36,6 +36,7 @@ package com.sun.jdi;
*/ */
@Deprecated @Deprecated
public class InvalidCodeIndexException extends RuntimeException { public class InvalidCodeIndexException extends RuntimeException {
private static final long serialVersionUID = 7416010225133747805L;
public InvalidCodeIndexException() { public InvalidCodeIndexException() {
super(); super();
} }
......
...@@ -36,6 +36,7 @@ package com.sun.jdi; ...@@ -36,6 +36,7 @@ package com.sun.jdi;
*/ */
@Deprecated @Deprecated
public class InvalidLineNumberException extends RuntimeException { public class InvalidLineNumberException extends RuntimeException {
private static final long serialVersionUID = 4048709912372692875L;
public InvalidLineNumberException() { public InvalidLineNumberException() {
super(); super();
} }
......
...@@ -33,6 +33,7 @@ package com.sun.jdi; ...@@ -33,6 +33,7 @@ package com.sun.jdi;
* @since 1.3 * @since 1.3
*/ */
public class InvalidStackFrameException extends RuntimeException { public class InvalidStackFrameException extends RuntimeException {
private static final long serialVersionUID = -1919378296505827922L;
public InvalidStackFrameException() { public InvalidStackFrameException() {
super(); super();
} }
......
...@@ -34,6 +34,7 @@ package com.sun.jdi; ...@@ -34,6 +34,7 @@ package com.sun.jdi;
*/ */
public class InvalidTypeException extends Exception public class InvalidTypeException extends Exception
{ {
private static final long serialVersionUID = 2256667231949650806L;
public InvalidTypeException() public InvalidTypeException()
{ {
super(); super();
......
...@@ -34,6 +34,7 @@ package com.sun.jdi; ...@@ -34,6 +34,7 @@ package com.sun.jdi;
*/ */
public class InvocationException extends Exception public class InvocationException extends Exception
{ {
private static final long serialVersionUID = 6066780907971918568L;
ObjectReference exception; ObjectReference exception;
public InvocationException(ObjectReference exception) public InvocationException(ObjectReference exception)
......
...@@ -79,7 +79,7 @@ package com.sun.jdi; ...@@ -79,7 +79,7 @@ package com.sun.jdi;
*/ */
public final class JDIPermission extends java.security.BasicPermission { public final class JDIPermission extends java.security.BasicPermission {
private static final long serialVersionUID = -6988461416938786271L;
/** /**
* The <code>JDIPermission</code> class represents access rights to the * The <code>JDIPermission</code> class represents access rights to the
* <code>VirtualMachineManager</code> * <code>VirtualMachineManager</code>
......
...@@ -34,6 +34,7 @@ package com.sun.jdi; ...@@ -34,6 +34,7 @@ package com.sun.jdi;
*/ */
public class NativeMethodException extends RuntimeException { public class NativeMethodException extends RuntimeException {
private static final long serialVersionUID = 3924951669039469992L;
public NativeMethodException() { public NativeMethodException() {
super(); super();
} }
......
...@@ -33,6 +33,7 @@ package com.sun.jdi; ...@@ -33,6 +33,7 @@ package com.sun.jdi;
* @since 1.3 * @since 1.3
*/ */
public class ObjectCollectedException extends RuntimeException { public class ObjectCollectedException extends RuntimeException {
private static final long serialVersionUID = -1928428056197269588L;
public ObjectCollectedException() { public ObjectCollectedException() {
super(); super();
} }
......
...@@ -33,6 +33,7 @@ package com.sun.jdi; ...@@ -33,6 +33,7 @@ package com.sun.jdi;
* @since 1.5 * @since 1.5
*/ */
public class VMCannotBeModifiedException extends UnsupportedOperationException { public class VMCannotBeModifiedException extends UnsupportedOperationException {
private static final long serialVersionUID = -4063879815130164009L;
public VMCannotBeModifiedException() { public VMCannotBeModifiedException() {
super(); super();
} }
......
...@@ -35,6 +35,7 @@ package com.sun.jdi; ...@@ -35,6 +35,7 @@ package com.sun.jdi;
*/ */
public class VMDisconnectedException extends RuntimeException { public class VMDisconnectedException extends RuntimeException {
private static final long serialVersionUID = 2892975269768351637L;
public VMDisconnectedException() { public VMDisconnectedException() {
super(); super();
} }
......
...@@ -34,6 +34,7 @@ package com.sun.jdi; ...@@ -34,6 +34,7 @@ package com.sun.jdi;
* @since 1.3 * @since 1.3
*/ */
public class VMMismatchException extends RuntimeException { public class VMMismatchException extends RuntimeException {
private static final long serialVersionUID = 289169358790459564L;
public VMMismatchException() { public VMMismatchException() {
super(); super();
} }
......
...@@ -33,6 +33,7 @@ package com.sun.jdi; ...@@ -33,6 +33,7 @@ package com.sun.jdi;
* @since 1.3 * @since 1.3
*/ */
public class VMOutOfMemoryException extends RuntimeException { public class VMOutOfMemoryException extends RuntimeException {
private static final long serialVersionUID = 71504228548910686L;
public VMOutOfMemoryException() { public VMOutOfMemoryException() {
super(); super();
} }
......
...@@ -38,6 +38,7 @@ import java.util.Collections; ...@@ -38,6 +38,7 @@ import java.util.Collections;
*/ */
public class IllegalConnectorArgumentsException extends Exception public class IllegalConnectorArgumentsException extends Exception
{ {
private static final long serialVersionUID = -3042212603611350941L;
List<String> names; List<String> names;
/** /**
......
...@@ -55,7 +55,7 @@ package com.sun.jdi.connect; ...@@ -55,7 +55,7 @@ package com.sun.jdi.connect;
* @since 1.5 * @since 1.5
*/ */
public class TransportTimeoutException extends java.io.IOException { public class TransportTimeoutException extends java.io.IOException {
private static final long serialVersionUID = 4107035242623365074L;
/** /**
* Constructs a <tt>TransportTimeoutException</tt> with no detail * Constructs a <tt>TransportTimeoutException</tt> with no detail
* message. * message.
......
...@@ -36,6 +36,7 @@ package com.sun.jdi.connect; ...@@ -36,6 +36,7 @@ package com.sun.jdi.connect;
*/ */
public class VMStartException extends Exception public class VMStartException extends Exception
{ {
private static final long serialVersionUID = 6408644824640801020L;
Process process; Process process;
public VMStartException(Process process) { public VMStartException(Process process) {
......
...@@ -46,7 +46,7 @@ package com.sun.jdi.connect.spi; ...@@ -46,7 +46,7 @@ package com.sun.jdi.connect.spi;
* @since 1.5 * @since 1.5
*/ */
public class ClosedConnectionException extends java.io.IOException { public class ClosedConnectionException extends java.io.IOException {
private static final long serialVersionUID = 3877032124297204774L;
/** /**
* Constructs a <tt>ClosedConnectionException</tt> with no detail * Constructs a <tt>ClosedConnectionException</tt> with no detail
* message. * message.
......
...@@ -33,6 +33,7 @@ package com.sun.jdi.request; ...@@ -33,6 +33,7 @@ package com.sun.jdi.request;
*/ */
public class DuplicateRequestException extends RuntimeException public class DuplicateRequestException extends RuntimeException
{ {
private static final long serialVersionUID = -3719784920313411060L;
public DuplicateRequestException() public DuplicateRequestException()
{ {
super(); super();
......
...@@ -36,6 +36,7 @@ package com.sun.jdi.request; ...@@ -36,6 +36,7 @@ package com.sun.jdi.request;
* @since 1.3 * @since 1.3
*/ */
public class InvalidRequestStateException extends RuntimeException { public class InvalidRequestStateException extends RuntimeException {
private static final long serialVersionUID = -3774632428543322148L;
public InvalidRequestStateException() public InvalidRequestStateException()
{ {
super(); super();
......
...@@ -70,8 +70,8 @@ public class ArrayReferenceImpl extends ObjectReferenceImpl ...@@ -70,8 +70,8 @@ public class ArrayReferenceImpl extends ObjectReferenceImpl
} }
public Value getValue(int index) { public Value getValue(int index) {
List list = getValues(index, 1); List<Value> list = getValues(index, 1);
return (Value)list.get(0); return list.get(0);
} }
public List<Value> getValues() { public List<Value> getValues() {
......
...@@ -61,7 +61,7 @@ public class ArrayTypeImpl extends ReferenceTypeImpl ...@@ -61,7 +61,7 @@ public class ArrayTypeImpl extends ReferenceTypeImpl
return findType(componentSignature()); return findType(componentSignature());
} }
void addVisibleMethods(Map map) { void addVisibleMethods(Map<String, Method> map) {
// arrays don't have methods // arrays don't have methods
} }
...@@ -83,10 +83,10 @@ public class ArrayTypeImpl extends ReferenceTypeImpl ...@@ -83,10 +83,10 @@ public class ArrayTypeImpl extends ReferenceTypeImpl
if (PacketStream.isObjectTag(tag)) { if (PacketStream.isObjectTag(tag)) {
// It's a reference type // It's a reference type
JNITypeParser parser = new JNITypeParser(componentSignature()); JNITypeParser parser = new JNITypeParser(componentSignature());
List list = vm.classesByName(parser.typeName()); List<ReferenceType> list = vm.classesByName(parser.typeName());
Iterator iter = list.iterator(); Iterator<ReferenceType> iter = list.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
ReferenceType type = (ReferenceType)iter.next(); ReferenceType type = iter.next();
ClassLoaderReference cl = type.classLoader(); ClassLoaderReference cl = type.classLoader();
if ((cl == null)? if ((cl == null)?
(classLoader() == null) : (classLoader() == null) :
......
...@@ -78,7 +78,7 @@ public class BooleanValueImpl extends PrimitiveValueImpl ...@@ -78,7 +78,7 @@ public class BooleanValueImpl extends PrimitiveValueImpl
} }
public int intValue() { public int intValue() {
return(int)((value)?1:0); return (value)?1:0;
} }
public long longValue() { public long longValue() {
...@@ -90,7 +90,7 @@ public class BooleanValueImpl extends PrimitiveValueImpl ...@@ -90,7 +90,7 @@ public class BooleanValueImpl extends PrimitiveValueImpl
} }
public double doubleValue() { public double doubleValue() {
return(double)((value)?1.0:0.0); return (value)?1.0:0.0;
} }
public String toString() { public String toString() {
......
...@@ -75,7 +75,7 @@ public class CharValueImpl extends PrimitiveValueImpl ...@@ -75,7 +75,7 @@ public class CharValueImpl extends PrimitiveValueImpl
} }
public char charValue() { public char charValue() {
return(char)value; return value;
} }
public short shortValue() { public short shortValue() {
......
...@@ -80,7 +80,7 @@ public class ClassLoaderReferenceImpl extends ObjectReferenceImpl ...@@ -80,7 +80,7 @@ public class ClassLoaderReferenceImpl extends ObjectReferenceImpl
classes = Collections.unmodifiableList(classes); classes = Collections.unmodifiableList(classes);
if (local != null) { if (local != null) {
local.visibleClasses = classes; local.visibleClasses = classes;
if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) { if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
vm.printTrace(description() + vm.printTrace(description() +
" temporarily caching visible classes (count = " + " temporarily caching visible classes (count = " +
classes.size() + ")"); classes.size() + ")");
...@@ -95,9 +95,9 @@ public class ClassLoaderReferenceImpl extends ObjectReferenceImpl ...@@ -95,9 +95,9 @@ public class ClassLoaderReferenceImpl extends ObjectReferenceImpl
Type findType(String signature) throws ClassNotLoadedException { Type findType(String signature) throws ClassNotLoadedException {
List<ReferenceType> types = visibleClasses(); List<ReferenceType> types = visibleClasses();
Iterator iter = types.iterator(); Iterator<ReferenceType> iter = types.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
ReferenceType type = (ReferenceType)iter.next(); ReferenceType type = iter.next();
if (type.signature().equals(signature)) { if (type.signature().equals(signature)) {
return type; return type;
} }
......
...@@ -76,7 +76,7 @@ public class ClassTypeImpl extends ReferenceTypeImpl ...@@ -76,7 +76,7 @@ public class ClassTypeImpl extends ReferenceTypeImpl
List<InterfaceType> immediate = interfaces(); List<InterfaceType> immediate = interfaces();
list.addAll(interfaces()); list.addAll(interfaces());
Iterator iter = immediate.iterator(); Iterator<InterfaceType> iter = immediate.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next(); InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
interfaze.addSuperinterfaces(list); interfaze.addSuperinterfaces(list);
...@@ -389,7 +389,7 @@ public class ClassTypeImpl extends ReferenceTypeImpl ...@@ -389,7 +389,7 @@ public class ClassTypeImpl extends ReferenceTypeImpl
* overwrite them in the hash table * overwrite them in the hash table
*/ */
Iterator iter = interfaces().iterator(); Iterator<InterfaceType> iter = interfaces().iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next(); InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
interfaze.addVisibleMethods(methodMap); interfaze.addVisibleMethods(methodMap);
...@@ -411,7 +411,7 @@ public class ClassTypeImpl extends ReferenceTypeImpl ...@@ -411,7 +411,7 @@ public class ClassTypeImpl extends ReferenceTypeImpl
return true; return true;
} else { } else {
List<InterfaceType> interfaces = interfaces(); List<InterfaceType> interfaces = interfaces();
Iterator iter = interfaces.iterator(); Iterator<InterfaceType> iter = interfaces.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next(); InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
if (interfaze.isAssignableTo(type)) { if (interfaze.isAssignableTo(type)) {
......
...@@ -192,7 +192,7 @@ public class ConcreteMethodImpl extends MethodImpl { ...@@ -192,7 +192,7 @@ public class ConcreteMethodImpl extends MethodImpl {
return super.codeIndexToLineInfo(stratum, codeIndex); return super.codeIndexToLineInfo(stratum, codeIndex);
} }
Iterator iter = lineLocations.iterator(); Iterator<Location> iter = lineLocations.iterator();
/* /*
* Treat code before the beginning of the first line table * Treat code before the beginning of the first line table
* entry as part of the first line. javac will generate * entry as part of the first line. javac will generate
...@@ -221,9 +221,9 @@ public class ConcreteMethodImpl extends MethodImpl { ...@@ -221,9 +221,9 @@ public class ConcreteMethodImpl extends MethodImpl {
List<LocalVariable> variables = getVariables(); List<LocalVariable> variables = getVariables();
List<LocalVariable> retList = new ArrayList<LocalVariable>(2); List<LocalVariable> retList = new ArrayList<LocalVariable>(2);
Iterator iter = variables.iterator(); Iterator<LocalVariable> iter = variables.iterator();
while(iter.hasNext()) { while(iter.hasNext()) {
LocalVariable variable = (LocalVariable)iter.next(); LocalVariable variable = iter.next();
if (variable.name().equals(name)) { if (variable.name().equals(name)) {
retList.add(variable); retList.add(variable);
} }
...@@ -235,9 +235,9 @@ public class ConcreteMethodImpl extends MethodImpl { ...@@ -235,9 +235,9 @@ public class ConcreteMethodImpl extends MethodImpl {
List<LocalVariable> variables = getVariables(); List<LocalVariable> variables = getVariables();
List<LocalVariable> retList = new ArrayList<LocalVariable>(variables.size()); List<LocalVariable> retList = new ArrayList<LocalVariable>(variables.size());
Iterator iter = variables.iterator(); Iterator<LocalVariable> iter = variables.iterator();
while(iter.hasNext()) { while(iter.hasNext()) {
LocalVariable variable = (LocalVariable)iter.next(); LocalVariable variable = iter.next();
if (variable.isArgument()) { if (variable.isArgument()) {
retList.add(variable); retList.add(variable);
} }
...@@ -291,7 +291,7 @@ public class ConcreteMethodImpl extends MethodImpl { ...@@ -291,7 +291,7 @@ public class ConcreteMethodImpl extends MethodImpl {
SDE.LineStratum lastLineStratum = null; SDE.LineStratum lastLineStratum = null;
SDE.Stratum baseStratum = SDE.Stratum baseStratum =
declaringType.stratum(SDE.BASE_STRATUM_NAME); declaringType.stratum(SDE.BASE_STRATUM_NAME);
Iterator it = getBaseLocations().lineLocations.iterator(); Iterator<Location> it = getBaseLocations().lineLocations.iterator();
while(it.hasNext()) { while(it.hasNext()) {
LocationImpl loc = (LocationImpl)it.next(); LocationImpl loc = (LocationImpl)it.next();
int baseLineNumber = loc.lineNumber(baseStratum); int baseLineNumber = loc.lineNumber(baseStratum);
......
...@@ -47,9 +47,9 @@ abstract class ConnectorImpl implements Connector { ...@@ -47,9 +47,9 @@ abstract class ConnectorImpl implements Connector {
public Map<String,Argument> defaultArguments() { public Map<String,Argument> defaultArguments() {
Map<String,Argument> defaults = new java.util.LinkedHashMap<String,Argument>(); Map<String,Argument> defaults = new java.util.LinkedHashMap<String,Argument>();
Collection values = defaultArguments.values(); Collection<Argument> values = defaultArguments.values();
Iterator iter = values.iterator(); Iterator<Argument> iter = values.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
ArgumentImpl argument = (ArgumentImpl)iter.next(); ArgumentImpl argument = (ArgumentImpl)iter.next();
defaults.put(argument.name(), (Argument)argument.clone()); defaults.put(argument.name(), (Argument)argument.clone());
...@@ -96,7 +96,7 @@ abstract class ConnectorImpl implements Connector { ...@@ -96,7 +96,7 @@ abstract class ConnectorImpl implements Connector {
mustSpecify, list)); mustSpecify, list));
} }
ArgumentImpl argument(String name, Map arguments) ArgumentImpl argument(String name, Map<String, ? extends Argument> arguments)
throws IllegalConnectorArgumentsException { throws IllegalConnectorArgumentsException {
ArgumentImpl argument = (ArgumentImpl)arguments.get(name); ArgumentImpl argument = (ArgumentImpl)arguments.get(name);
...@@ -130,7 +130,7 @@ abstract class ConnectorImpl implements Connector { ...@@ -130,7 +130,7 @@ abstract class ConnectorImpl implements Connector {
public String toString() { public String toString() {
String string = name() + " (defaults: "; String string = name() + " (defaults: ";
Iterator iter = defaultArguments().values().iterator(); Iterator<Argument> iter = defaultArguments().values().iterator();
boolean first = true; boolean first = true;
while (iter.hasNext()) { while (iter.hasNext()) {
ArgumentImpl argument = (ArgumentImpl)iter.next(); ArgumentImpl argument = (ArgumentImpl)iter.next();
...@@ -222,7 +222,7 @@ abstract class ConnectorImpl implements Connector { ...@@ -222,7 +222,7 @@ abstract class ConnectorImpl implements Connector {
class BooleanArgumentImpl extends ConnectorImpl.ArgumentImpl class BooleanArgumentImpl extends ConnectorImpl.ArgumentImpl
implements Connector.BooleanArgument { implements Connector.BooleanArgument {
private static final long serialVersionUID = 1624542968639361316L;
BooleanArgumentImpl(String name, String label, String description, BooleanArgumentImpl(String name, String label, String description,
boolean value, boolean value,
boolean mustSpecify) { boolean mustSpecify) {
...@@ -277,7 +277,7 @@ abstract class ConnectorImpl implements Connector { ...@@ -277,7 +277,7 @@ abstract class ConnectorImpl implements Connector {
class IntegerArgumentImpl extends ConnectorImpl.ArgumentImpl class IntegerArgumentImpl extends ConnectorImpl.ArgumentImpl
implements Connector.IntegerArgument { implements Connector.IntegerArgument {
private static final long serialVersionUID = 763286081923797770L;
private final int min; private final int min;
private final int max; private final int max;
...@@ -378,7 +378,7 @@ abstract class ConnectorImpl implements Connector { ...@@ -378,7 +378,7 @@ abstract class ConnectorImpl implements Connector {
class StringArgumentImpl extends ConnectorImpl.ArgumentImpl class StringArgumentImpl extends ConnectorImpl.ArgumentImpl
implements Connector.StringArgument { implements Connector.StringArgument {
private static final long serialVersionUID = 7500484902692107464L;
StringArgumentImpl(String name, String label, String description, StringArgumentImpl(String name, String label, String description,
String value, String value,
boolean mustSpecify) { boolean mustSpecify) {
...@@ -396,7 +396,7 @@ abstract class ConnectorImpl implements Connector { ...@@ -396,7 +396,7 @@ abstract class ConnectorImpl implements Connector {
class SelectedArgumentImpl extends ConnectorImpl.ArgumentImpl class SelectedArgumentImpl extends ConnectorImpl.ArgumentImpl
implements Connector.SelectedArgument { implements Connector.SelectedArgument {
private static final long serialVersionUID = -5689584530908382517L;
private final List<String> choices; private final List<String> choices;
SelectedArgumentImpl(String name, String label, String description, SelectedArgumentImpl(String name, String label, String description,
......
...@@ -101,7 +101,7 @@ public class DoubleValueImpl extends PrimitiveValueImpl ...@@ -101,7 +101,7 @@ public class DoubleValueImpl extends PrimitiveValueImpl
} }
public double doubleValue() { public double doubleValue() {
return(double)value; return value;
} }
byte checkedByteValue() throws InvalidTypeException { byte checkedByteValue() throws InvalidTypeException {
......
...@@ -43,7 +43,7 @@ import java.util.*; ...@@ -43,7 +43,7 @@ import java.util.*;
class EventRequestManagerImpl extends MirrorImpl class EventRequestManagerImpl extends MirrorImpl
implements EventRequestManager implements EventRequestManager
{ {
List[] requestLists; List<? extends EventRequest>[] requestLists;
private static int methodExitEventCmd = 0; private static int methodExitEventCmd = 0;
static int JDWPtoJDISuspendPolicy(byte jdwpPolicy) { static int JDWPtoJDISuspendPolicy(byte jdwpPolicy) {
...@@ -91,7 +91,7 @@ class EventRequestManagerImpl extends MirrorImpl ...@@ -91,7 +91,7 @@ class EventRequestManagerImpl extends MirrorImpl
* access/modification should be protected by synchronizing on * access/modification should be protected by synchronizing on
* the enclosing instance of EventRequestImpl. * the enclosing instance of EventRequestImpl.
*/ */
List filters = new ArrayList(); List<Object> filters = new ArrayList<>();
boolean isEnabled = false; boolean isEnabled = false;
boolean deleted = false; boolean deleted = false;
...@@ -195,7 +195,6 @@ class EventRequestManagerImpl extends MirrorImpl ...@@ -195,7 +195,6 @@ class EventRequestManagerImpl extends MirrorImpl
*/ */
synchronized void set() { synchronized void set() {
JDWP.EventRequest.Set.Modifier[] mods = JDWP.EventRequest.Set.Modifier[] mods =
(JDWP.EventRequest.Set.Modifier[])
filters.toArray( filters.toArray(
new JDWP.EventRequest.Set.Modifier[filters.size()]); new JDWP.EventRequest.Set.Modifier[filters.size()]);
try { try {
...@@ -582,10 +581,10 @@ class EventRequestManagerImpl extends MirrorImpl ...@@ -582,10 +581,10 @@ class EventRequestManagerImpl extends MirrorImpl
/* /*
* Make sure this isn't a duplicate * Make sure this isn't a duplicate
*/ */
List requests = stepRequests(); List<StepRequest> requests = stepRequests();
Iterator iter = requests.iterator(); Iterator<StepRequest> iter = requests.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
StepRequest request = (StepRequest)iter.next(); StepRequest request = iter.next();
if ((request != this) && if ((request != this) &&
request.isEnabled() && request.isEnabled() &&
request.thread().equals(thread)) { request.thread().equals(thread)) {
...@@ -735,7 +734,7 @@ class EventRequestManagerImpl extends MirrorImpl ...@@ -735,7 +734,7 @@ class EventRequestManagerImpl extends MirrorImpl
} }
requestLists = new List[highest+1]; requestLists = new List[highest+1];
for (int i=0; i <= highest; i++) { for (int i=0; i <= highest; i++) {
requestLists[i] = new ArrayList(); requestLists[i] = new ArrayList<>();
} }
} }
...@@ -852,7 +851,7 @@ class EventRequestManagerImpl extends MirrorImpl ...@@ -852,7 +851,7 @@ class EventRequestManagerImpl extends MirrorImpl
public void deleteEventRequests(List<? extends EventRequest> eventRequests) { public void deleteEventRequests(List<? extends EventRequest> eventRequests) {
validateMirrors(eventRequests); validateMirrors(eventRequests);
// copy the eventRequests to avoid ConcurrentModificationException // copy the eventRequests to avoid ConcurrentModificationException
Iterator iter = (new ArrayList(eventRequests)).iterator(); Iterator<? extends EventRequest> iter = (new ArrayList<>(eventRequests)).iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
((EventRequestImpl)iter.next()).delete(); ((EventRequestImpl)iter.next()).delete();
} }
...@@ -869,76 +868,76 @@ class EventRequestManagerImpl extends MirrorImpl ...@@ -869,76 +868,76 @@ class EventRequestManagerImpl extends MirrorImpl
} }
public List<StepRequest> stepRequests() { public List<StepRequest> stepRequests() {
return unmodifiableRequestList(JDWP.EventKind.SINGLE_STEP); return (List<StepRequest>)unmodifiableRequestList(JDWP.EventKind.SINGLE_STEP);
} }
public List<ClassPrepareRequest> classPrepareRequests() { public List<ClassPrepareRequest> classPrepareRequests() {
return unmodifiableRequestList(JDWP.EventKind.CLASS_PREPARE); return (List<ClassPrepareRequest>)unmodifiableRequestList(JDWP.EventKind.CLASS_PREPARE);
} }
public List<ClassUnloadRequest> classUnloadRequests() { public List<ClassUnloadRequest> classUnloadRequests() {
return unmodifiableRequestList(JDWP.EventKind.CLASS_UNLOAD); return (List<ClassUnloadRequest>)unmodifiableRequestList(JDWP.EventKind.CLASS_UNLOAD);
} }
public List<ThreadStartRequest> threadStartRequests() { public List<ThreadStartRequest> threadStartRequests() {
return unmodifiableRequestList(JDWP.EventKind.THREAD_START); return (List<ThreadStartRequest>)unmodifiableRequestList(JDWP.EventKind.THREAD_START);
} }
public List<ThreadDeathRequest> threadDeathRequests() { public List<ThreadDeathRequest> threadDeathRequests() {
return unmodifiableRequestList(JDWP.EventKind.THREAD_DEATH); return (List<ThreadDeathRequest>)unmodifiableRequestList(JDWP.EventKind.THREAD_DEATH);
} }
public List<ExceptionRequest> exceptionRequests() { public List<ExceptionRequest> exceptionRequests() {
return unmodifiableRequestList(JDWP.EventKind.EXCEPTION); return (List<ExceptionRequest>)unmodifiableRequestList(JDWP.EventKind.EXCEPTION);
} }
public List<BreakpointRequest> breakpointRequests() { public List<BreakpointRequest> breakpointRequests() {
return unmodifiableRequestList(JDWP.EventKind.BREAKPOINT); return (List<BreakpointRequest>)unmodifiableRequestList(JDWP.EventKind.BREAKPOINT);
} }
public List<AccessWatchpointRequest> accessWatchpointRequests() { public List<AccessWatchpointRequest> accessWatchpointRequests() {
return unmodifiableRequestList(JDWP.EventKind.FIELD_ACCESS); return (List<AccessWatchpointRequest>)unmodifiableRequestList(JDWP.EventKind.FIELD_ACCESS);
} }
public List<ModificationWatchpointRequest> modificationWatchpointRequests() { public List<ModificationWatchpointRequest> modificationWatchpointRequests() {
return unmodifiableRequestList(JDWP.EventKind.FIELD_MODIFICATION); return (List<ModificationWatchpointRequest>)unmodifiableRequestList(JDWP.EventKind.FIELD_MODIFICATION);
} }
public List<MethodEntryRequest> methodEntryRequests() { public List<MethodEntryRequest> methodEntryRequests() {
return unmodifiableRequestList(JDWP.EventKind.METHOD_ENTRY); return (List<MethodEntryRequest>)unmodifiableRequestList(JDWP.EventKind.METHOD_ENTRY);
} }
public List<MethodExitRequest> methodExitRequests() { public List<MethodExitRequest> methodExitRequests() {
return unmodifiableRequestList( return (List<MethodExitRequest>)unmodifiableRequestList(
EventRequestManagerImpl.methodExitEventCmd); EventRequestManagerImpl.methodExitEventCmd);
} }
public List<MonitorContendedEnterRequest> monitorContendedEnterRequests() { public List<MonitorContendedEnterRequest> monitorContendedEnterRequests() {
return unmodifiableRequestList(JDWP.EventKind.MONITOR_CONTENDED_ENTER); return (List<MonitorContendedEnterRequest>)unmodifiableRequestList(JDWP.EventKind.MONITOR_CONTENDED_ENTER);
} }
public List<MonitorContendedEnteredRequest> monitorContendedEnteredRequests() { public List<MonitorContendedEnteredRequest> monitorContendedEnteredRequests() {
return unmodifiableRequestList(JDWP.EventKind.MONITOR_CONTENDED_ENTERED); return (List<MonitorContendedEnteredRequest>)unmodifiableRequestList(JDWP.EventKind.MONITOR_CONTENDED_ENTERED);
} }
public List<MonitorWaitRequest> monitorWaitRequests() { public List<MonitorWaitRequest> monitorWaitRequests() {
return unmodifiableRequestList(JDWP.EventKind.MONITOR_WAIT); return (List<MonitorWaitRequest>)unmodifiableRequestList(JDWP.EventKind.MONITOR_WAIT);
} }
public List<MonitorWaitedRequest> monitorWaitedRequests() { public List<MonitorWaitedRequest> monitorWaitedRequests() {
return unmodifiableRequestList(JDWP.EventKind.MONITOR_WAITED); return (List<MonitorWaitedRequest>)unmodifiableRequestList(JDWP.EventKind.MONITOR_WAITED);
} }
public List<VMDeathRequest> vmDeathRequests() { public List<VMDeathRequest> vmDeathRequests() {
return unmodifiableRequestList(JDWP.EventKind.VM_DEATH); return (List<VMDeathRequest>)unmodifiableRequestList(JDWP.EventKind.VM_DEATH);
} }
List unmodifiableRequestList(int eventCmd) { List<? extends EventRequest> unmodifiableRequestList(int eventCmd) {
return Collections.unmodifiableList(requestList(eventCmd)); return Collections.unmodifiableList(requestList(eventCmd));
} }
EventRequest request(int eventCmd, int requestId) { EventRequest request(int eventCmd, int requestId) {
List rl = requestList(eventCmd); List<? extends EventRequest> rl = requestList(eventCmd);
for (int i = rl.size() - 1; i >= 0; i--) { for (int i = rl.size() - 1; i >= 0; i--) {
EventRequestImpl er = (EventRequestImpl)rl.get(i); EventRequestImpl er = (EventRequestImpl)rl.get(i);
if (er.id == requestId) { if (er.id == requestId) {
......
...@@ -47,7 +47,7 @@ enum EventDestination {UNKNOWN_EVENT, INTERNAL_EVENT, CLIENT_EVENT}; ...@@ -47,7 +47,7 @@ enum EventDestination {UNKNOWN_EVENT, INTERNAL_EVENT, CLIENT_EVENT};
* that is on the queues are all for client requests. * that is on the queues are all for client requests.
*/ */
public class EventSetImpl extends ArrayList<Event> implements EventSet { public class EventSetImpl extends ArrayList<Event> implements EventSet {
private static final long serialVersionUID = -4857338819787924570L;
private VirtualMachineImpl vm; // we implement Mirror private VirtualMachineImpl vm; // we implement Mirror
private Packet pkt; private Packet pkt;
private byte suspendPolicy; private byte suspendPolicy;
...@@ -607,7 +607,7 @@ public class EventSetImpl extends ArrayList<Event> implements EventSet { ...@@ -607,7 +607,7 @@ public class EventSetImpl extends ArrayList<Event> implements EventSet {
PacketStream ps = new PacketStream(vm, pkt); PacketStream ps = new PacketStream(vm, pkt);
JDWP.Event.Composite compEvt = new JDWP.Event.Composite(vm, ps); JDWP.Event.Composite compEvt = new JDWP.Event.Composite(vm, ps);
suspendPolicy = compEvt.suspendPolicy; suspendPolicy = compEvt.suspendPolicy;
if ((vm.traceFlags & vm.TRACE_EVENTS) != 0) { if ((vm.traceFlags & VirtualMachine.TRACE_EVENTS) != 0) {
switch(suspendPolicy) { switch(suspendPolicy) {
case JDWP.SuspendPolicy.ALL: case JDWP.SuspendPolicy.ALL:
vm.printTrace("EventSet: SUSPEND_ALL"); vm.printTrace("EventSet: SUSPEND_ALL");
...@@ -626,7 +626,7 @@ public class EventSetImpl extends ArrayList<Event> implements EventSet { ...@@ -626,7 +626,7 @@ public class EventSetImpl extends ArrayList<Event> implements EventSet {
ThreadReference fix6485605 = null; ThreadReference fix6485605 = null;
for (int i = 0; i < compEvt.events.length; i++) { for (int i = 0; i < compEvt.events.length; i++) {
EventImpl evt = createEvent(compEvt.events[i]); EventImpl evt = createEvent(compEvt.events[i]);
if ((vm.traceFlags & vm.TRACE_EVENTS) != 0) { if ((vm.traceFlags & VirtualMachine.TRACE_EVENTS) != 0) {
try { try {
vm.printTrace("Event: " + evt); vm.printTrace("Event: " + evt);
} catch (VMDisconnectedException ee) { } catch (VMDisconnectedException ee) {
......
...@@ -97,7 +97,7 @@ public class FloatValueImpl extends PrimitiveValueImpl ...@@ -97,7 +97,7 @@ public class FloatValueImpl extends PrimitiveValueImpl
} }
public float floatValue() { public float floatValue() {
return(float)value; return value;
} }
public double doubleValue() { public double doubleValue() {
......
...@@ -105,7 +105,7 @@ public class GenericAttachingConnector ...@@ -105,7 +105,7 @@ public class GenericAttachingConnector
/** /**
* Attach to a target VM using the specified address and Connector arguments. * Attach to a target VM using the specified address and Connector arguments.
*/ */
public VirtualMachine attach(String address, Map args) public VirtualMachine attach(String address, Map<String, ? extends Connector.Argument> args)
throws IOException, IllegalConnectorArgumentsException throws IOException, IllegalConnectorArgumentsException
{ {
String ts = argument(ARG_TIMEOUT, args).value(); String ts = argument(ARG_TIMEOUT, args).value();
......
...@@ -83,7 +83,7 @@ public class IntegerValueImpl extends PrimitiveValueImpl ...@@ -83,7 +83,7 @@ public class IntegerValueImpl extends PrimitiveValueImpl
} }
public int intValue() { public int intValue() {
return(int)value; return value;
} }
public long longValue() { public long longValue() {
......
...@@ -128,9 +128,9 @@ public class InterfaceTypeImpl extends ReferenceTypeImpl ...@@ -128,9 +128,9 @@ public class InterfaceTypeImpl extends ReferenceTypeImpl
* list being built. * list being built.
*/ */
List<InterfaceType> immediate = new ArrayList<InterfaceType>(superinterfaces()); List<InterfaceType> immediate = new ArrayList<InterfaceType>(superinterfaces());
Iterator iter = immediate.iterator(); Iterator<InterfaceType> iter = immediate.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
InterfaceType interfaze = (InterfaceType)iter.next(); InterfaceType interfaze = iter.next();
if (list.contains(interfaze)) { if (list.contains(interfaze)) {
iter.remove(); iter.remove();
} }
......
...@@ -59,7 +59,7 @@ public class InternalEventHandler implements Runnable ...@@ -59,7 +59,7 @@ public class InternalEventHandler implements Runnable
ClassUnloadEvent cuEvent = (ClassUnloadEvent)event; ClassUnloadEvent cuEvent = (ClassUnloadEvent)event;
vm.removeReferenceType(cuEvent.classSignature()); vm.removeReferenceType(cuEvent.classSignature());
if ((vm.traceFlags & vm.TRACE_EVENTS) != 0) { if ((vm.traceFlags & VirtualMachine.TRACE_EVENTS) != 0) {
vm.printTrace("Handled Unload Event for " + vm.printTrace("Handled Unload Event for " +
cuEvent.classSignature()); cuEvent.classSignature());
} }
...@@ -68,7 +68,7 @@ public class InternalEventHandler implements Runnable ...@@ -68,7 +68,7 @@ public class InternalEventHandler implements Runnable
((ReferenceTypeImpl)cpEvent.referenceType()) ((ReferenceTypeImpl)cpEvent.referenceType())
.markPrepared(); .markPrepared();
if ((vm.traceFlags & vm.TRACE_EVENTS) != 0) { if ((vm.traceFlags & VirtualMachine.TRACE_EVENTS) != 0) {
vm.printTrace("Handled Prepare Event for " + vm.printTrace("Handled Prepare Event for " +
cpEvent.referenceType().name()); cpEvent.referenceType().name());
} }
......
...@@ -27,7 +27,7 @@ package com.sun.tools.jdi; ...@@ -27,7 +27,7 @@ package com.sun.tools.jdi;
import com.sun.jdi.*; import com.sun.jdi.*;
class JDWPException extends Exception { class JDWPException extends Exception {
private static final long serialVersionUID = -6321344442751299874L;
short errorCode; short errorCode;
JDWPException(short errorCode) { JDWPException(short errorCode) {
......
/*
* Copyright (c) 1998, 2000, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.tools.jdi;
import java.io.*;
import java.util.*;
/**
* Hash table based implementation of the Map interface. This implementation
* provides all of the optional Map operations, and permits null values and
* the null key. (HashMap is roughly equivalent to Hashtable, except that it
* is unsynchronized and permits nulls.) In addition, elements in the map are
* ordered and doubly linked together.
* <p>
* This implementation provides constant-time performance for the basic
* operations (get and put), assuming the the hash function disperses the
* elements properly among the buckets. Iteration over Collection views
* requires time proportional to its size (the number of key-value mappings)
* and returns elements in the order they are linked. In a HashMap the
* iteration would require time proportional to the capacity of the map
* plus the map size.
* <p>
* An instance of LinkedHashMap has two parameters that affect its efficiency:
* its <i>capacity</i> and its <i>load factor</i>. The load factor should be
* between 0.0 and 1.0. When the number of mappings in the LinkedHashMap exceeds
* the product of the load factor and the current capacity, the capacity is
* increased by calling the rehash method which requires time proportional
* to the number of key-value mappings in the map. Larger load factors
* use memory more efficiently, at the expense of larger expected time per
* lookup.
* <p>
* If many mappings are to be stored in a LinkedHashMap, creating it with a
* sufficiently large capacity will allow the mappings to be stored more
* efficiently than letting it perform automatic rehashing as needed to grow
* the table.
* <p>
* <strong>Note that this implementation is not synchronized.</strong> If
* multiple threads access a LinkedHashMap concurrently, and at least one of the
* threads modifies the LinkedHashMap structurally, it <em>must</em> be
* synchronized externally. (A structural modification is any operation that
* adds or deletes one or more mappings; merely changing the value associated
* with a key that is already contained in the Table is not a structural
* modification.) This is typically accomplished by synchronizing on some
* object that naturally encapsulates the LinkedHashMap. If no such object
* exists, the LinkedHashMap should be "wrapped" using the
* Collections.synchronizedSet method. This is best done at creation time, to
* prevent accidental unsynchronized access to the LinkedHashMap:
* <pre>
* Map m = Collections.synchronizedMap(new LinkedHashMap(...));
* </pre>
* <p>
* The Iterators returned by the iterator methods of the Collections returned
* by all of LinkedHashMap's "collection view methods" are <em>fail-fast</em>:
* if the LinkedHashMap is structurally modified at any time after the Iterator
* is created, in any way except through the Iterator's own remove or add
* methods, the Iterator will throw a ConcurrentModificationException. Thus,
* in the face of concurrent modification, the Iterator fails quickly and
* cleanly, rather than risking arbitrary, non-deterministic behavior at an
* undetermined time in the future.
*
* @author Josh Bloch
* @author Arthur van Hoff
* @author Zhenghua Li
* @see Object#hashCode()
* @see java.util.Collection
* @see java.util.Map
* @see java.util.TreeMap
* @see java.util.Hashtable
* @see java.util.HashMap
*/
import java.io.Serializable;
public class LinkedHashMap extends AbstractMap implements Map, Serializable {
/**
* The hash table data.
*/
private transient Entry table[];
/**
* The head of the double linked list.
*/
private transient Entry header;
/**
* The total number of mappings in the hash table.
*/
private transient int count;
/**
* Rehashes the table when count exceeds this threshold.
*/
private int threshold;
/**
* The load factor for the LinkedHashMap.
*/
private float loadFactor;
/**
* The number of times this LinkedHashMap has been structurally modified
* Structural modifications are those that change the number of mappings in
* the LinkedHashMap or otherwise modify its internal structure (e.g.,
* rehash). This field is used to make iterators on Collection-views of
* the LinkedHashMap fail-fast. (See ConcurrentModificationException).
*/
private transient int modCount = 0;
/**
* Constructs a new, empty LinkedHashMap with the specified initial
* capacity and the specified load factor.
*
* @param initialCapacity the initial capacity of the LinkedHashMap.
* @param loadFactor a number between 0.0 and 1.0.
* @exception IllegalArgumentException if the initial capacity is less
* than or equal to zero, or if the load factor is less than
* or equal to zero.
*/
public LinkedHashMap(int initialCapacity, float loadFactor) {
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Initial Capacity: "+
initialCapacity);
if ((loadFactor > 1) || (loadFactor <= 0))
throw new IllegalArgumentException("Illegal Load factor: "+
loadFactor);
if (initialCapacity==0)
initialCapacity = 1;
this.loadFactor = loadFactor;
table = new Entry[initialCapacity];
threshold = (int)(initialCapacity * loadFactor);
header = new Entry(-1, null, null, null);
header.before = header.after = header;
}
/**
* Constructs a new, empty LinkedHashMap with the specified initial capacity
* and default load factor.
*
* @param initialCapacity the initial capacity of the LinkedHashMap.
*/
public LinkedHashMap(int initialCapacity) {
this(initialCapacity, 0.75f);
}
/**
* Constructs a new, empty LinkedHashMap with a default capacity and load
* factor.
*/
public LinkedHashMap() {
this(101, 0.75f);
}
/**
* Constructs a new LinkedHashMap with the same mappings as the given
* Map. The LinkedHashMap is created with a capacity of thrice the number
* of mappings in the given Map or 11 (whichever is greater), and a
* default load factor.
*/
public LinkedHashMap(Map t) {
this(Math.max(3*t.size(), 11), 0.75f);
putAll(t);
}
/**
* Returns the number of key-value mappings in this Map.
*/
public int size() {
return count;
}
/**
* Returns true if this Map contains no key-value mappings.
*/
public boolean isEmpty() {
return count == 0;
}
/**
* Returns true if this LinkedHashMap maps one or more keys to the specified
* value.
*
* @param value value whose presence in this Map is to be tested.
*/
public boolean containsValue(Object value) {
if (value==null) {
for (Entry e = header.after; e != header; e = e.after)
if (e.value==null)
return true;
} else {
for (Entry e = header.after; e != header; e = e.after)
if (value.equals(e.value))
return true;
}
return false;
}
/**
* Returns true if this LinkedHashMap contains a mapping for the specified
* key.
*
* @param key key whose presence in this Map is to be tested.
*/
public boolean containsKey(Object key) {
Entry tab[] = table;
if (key != null) {
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
for (Entry e = tab[index]; e != null; e = e.next)
if (e.hash==hash && e.key.equals(key))
return true;
} else {
for (Entry e = tab[0]; e != null; e = e.next)
if (e.key==null)
return true;
}
return false;
}
/**
* Returns the value to which this LinkedHashMap maps the specified key.
* Returns null if the LinkedHashMap contains no mapping for this key.
* A return value of null does not <em>necessarily</em> indicate that the
* LinkedHashMap contains no mapping for the key; it's also possible that
* the LinkedHashMap explicitly maps the key to null. The containsKey
* operation may be used to distinguish these two cases.
*
* @param key key whose associated value is to be returned.
*/
public Object get(Object key) {
Entry e = getEntry(key);
return e==null ? null : e.value;
}
/**
* Returns the entry associated with the specified key in the LinkedHashMap.
* Returns null if the LinkedHashMap contains no mapping for this key.
*/
private Entry getEntry(Object key) {
Entry tab[] = table;
if (key != null) {
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
for (Entry e = tab[index]; e != null; e = e.next)
if ((e.hash == hash) && e.key.equals(key))
return e;
} else {
for (Entry e = tab[0]; e != null; e = e.next)
if (e.key==null)
return e;
}
return null;
}
/**
* Rehashes the contents of the LinkedHashMap into a LinkedHashMap with a
* larger capacity. This method is called automatically when the
* number of keys in the LinkedHashMap exceeds this LinkedHashMap's capacity
* and load factor.
*/
private void rehash() {
int oldCapacity = table.length;
Entry oldMap[] = table;
int newCapacity = oldCapacity * 2 + 1;
Entry newMap[] = new Entry[newCapacity];
modCount++;
threshold = (int)(newCapacity * loadFactor);
table = newMap;
for (Entry e = header.after; e != header; e = e.after) {
int index = (e.hash & 0x7FFFFFFF) % newCapacity;
e.next = newMap[index];
newMap[index] = e;
}
}
/**
* Remove an entry from the linked list.
*/
private void listRemove(Entry entry) {
if (entry == null) {
return;
}
entry.before.after = entry.after;
entry.after.before = entry.before;
}
/**
* Add the specified entry before the specified existing entry to
* the linked list.
*/
private void listAddBefore(Entry entry, Entry existEntry) {
entry.after = existEntry;
entry.before = existEntry.before;
entry.before.after = entry;
entry.after.before = entry;
}
/**
* Returns the position of the mapping for the specified key
* in the ordered map.
*
* @param key the specified key.
* @return index of the key mapping.
*/
public int indexOf(Object key) {
int i = 0;
if (key == null) {
for (Entry e = header.after; e != header; e = e.after, i++)
if (e.key == null)
return i;
} else {
for (Entry e = header.after; e != header; e = e.after, i++)
if(key.equals(e.key))
return i;
}
return -1;
}
/**
* Associates the specified value with the specified key in this
* LinkedHashMap. If the LinkedHashMap previously contained a mapping for
* this key, the old value is replaced and the position of this mapping
* entry in the double linked list remains the same. Otherwise, a new
* mapping entry is created and inserted into the list before the specified
* existing mapping entry. The method returns the previous value associated
* with the specified key, or null if there was no mapping for key. A null
* return can also indicate that the LinkedHashMap previously associated
* null with the specified key.
*/
private Object putAhead(Object key, Object value, Entry existEntry) {
// Makes sure the key is not already in the LinkedHashMap.
Entry tab[] = table;
int hash = 0;
int index = 0;
if (key != null) {
hash = key.hashCode();
index = (hash & 0x7FFFFFFF) % tab.length;
for (Entry e = tab[index] ; e != null ; e = e.next) {
if ((e.hash == hash) && e.key.equals(key)) {
Object old = e.value;
e.value = value;
return old;
}
}
} else {
for (Entry e = tab[0] ; e != null ; e = e.next) {
if (e.key == null) {
Object old = e.value;
e.value = value;
return old;
}
}
}
modCount++;
if (count >= threshold) {
// Rehash the table if the threshold is exceeded
rehash();
tab = table;
index = (hash & 0x7FFFFFFF) % tab.length;
}
// Creates the new entry.
Entry e = new Entry(hash, key, value, tab[index]);
tab[index] = e;
listAddBefore(e, existEntry);
count++;
return null;
}
/**
* Associates the specified value with the specified key in this
* LinkedHashMap and position the mapping at the specified index.
* If the LinkedHashMap previously contained a mapping for this key,
* the old value is replaced and the position of this mapping entry
* in the double linked list remains the same. Otherwise, a new mapping
* entry is created and inserted into the list at the specified
* position.
*
* @param index the position to put the key-value mapping.
* @param key key with which the specified value is to be associated.
* @param value value to be associated with the specified key.
* @return previous value associated with specified key, or null if there
* was no mapping for key. A null return can also indicate that
* the LinkedHashMap previously associated null with the specified
* key.
*/
public Object put(int index, Object key, Object value) {
if (index < 0 || index > count)
throw new IndexOutOfBoundsException();
Entry e = header.after;
if (index == count)
return putAhead(key, value, header); //fast approach for append
else {
for (int i = 0; i < index; i++)
e = e.after;
return putAhead(key, value, e);
}
}
/**
* Associates the specified value with the specified key in this
* LinkedHashMap. If the LinkedHashMap previously contained a mapping for
* this key, the old value is replaced. The mapping entry is also appended
* to the end of the ordered linked list.
*
* @param key key with which the specified value is to be associated.
* @param value value to be associated with the specified key.
* @return previous value associated with specified key, or null if there
* was no mapping for key. A null return can also indicate that
* the LinkedHashMap previously associated null with the specified
* key.
*/
public Object put(Object key, Object value) {
return putAhead(key, value, header);
}
/**
* Removes the mapping for this key from this LinkedHashMap if present.
* The mapping would also be removed from the double linked list.
*
* @param key key whose mapping is to be removed from the Map.
* @return previous value associated with specified key, or null if there
* was no mapping for key. A null return can also indicate that
* the LinkedHashMap previously associated null with the specified
* key.
*/
public Object remove(Object key) {
Entry tab[] = table;
if (key != null) {
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
for (Entry e = tab[index], prev = null; e != null;
prev = e, e = e.next) {
if ((e.hash == hash) && e.key.equals(key)) {
modCount++;
if (prev != null)
prev.next = e.next;
else
tab[index] = e.next;
count--;
Object oldValue = e.value;
e.value = null;
listRemove(e);
return oldValue;
}
}
} else {
for (Entry e = tab[0], prev = null; e != null;
prev = e, e = e.next) {
if (e.key == null) {
modCount++;
if (prev != null)
prev.next = e.next;
else
tab[0] = e.next;
count--;
Object oldValue = e.value;
e.value = null;
listRemove(e);
return oldValue;
}
}
}
return null;
}
/**
* Copies all of the mappings from the specified Map to this LinkedHashMap
* These mappings will replace any mappings that this LinkedHashMap had for
* any of the keys currently in the specified Map.
*
* @param t Mappings to be stored in this Map.
*/
public void putAll(Map t) {
Iterator i = t.entrySet().iterator();
while (i.hasNext()) {
Map.Entry e = (Map.Entry) i.next();
put(e.getKey(), e.getValue());
}
}
/**
* Removes all mappings from this LinkedHashMap.
*/
public void clear() {
Entry tab[] = table;
modCount++;
for (int index = tab.length; --index >= 0; )
tab[index] = null;
count = 0;
header.before = header.after = header;
}
/**
* Returns a shallow copy of this LinkedHashMap. The keys and values
* themselves are not cloned.
*/
public Object clone() {
return new LinkedHashMap(this);
}
// Views
private transient Set keySet = null;
private transient Set entries = null;
private transient Collection values = null;
/**
* Returns a Set view of the keys contained in this LinkedHashMap. The Set
* is backed by the LinkedHashMap, so changes to the LinkedHashMap are
* reflected in the Set, and vice-versa. The Set supports element removal,
* which removes the corresponding mapping from the LinkedHashMap, via the
* Iterator.remove, Set.remove, removeAll retainAll, and clear operations.
* It does not support the add or addAll operations.
*/
public Set keySet() {
if (keySet == null) {
keySet = new AbstractSet() {
public Iterator iterator() {
return new HashIterator(KEYS);
}
public int size() {
return count;
}
public boolean contains(Object o) {
return containsKey(o);
}
public boolean remove(Object o) {
return LinkedHashMap.this.remove(o) != null;
}
public void clear() {
LinkedHashMap.this.clear();
}
};
}
return keySet;
}
/**
* Returns a Collection view of the values contained in this LinkedHashMap.
* The Collection is backed by the LinkedHashMap, so changes to the
* LinkedHashMap are reflected in the Collection, and vice-versa. The
* Collection supports element removal, which removes the corresponding
* mapping from the LinkedHashMap, via the Iterator.remove,
* Collection.remove, removeAll, retainAll and clear operations. It does
* not support the add or addAll operations.
*/
public Collection values() {
if (values==null) {
values = new AbstractCollection() {
public Iterator iterator() {
return new HashIterator(VALUES);
}
public int size() {
return count;
}
public boolean contains(Object o) {
return containsValue(o);
}
public void clear() {
LinkedHashMap.this.clear();
}
};
}
return values;
}
/**
* Returns a Collection view of the mappings contained in this
* LinkedHashMap. Each element in the returned collection is a Map.Entry.
* The Collection is backed by the LinkedHashMap, so changes to the
* LinkedHashMap are reflected in the Collection, and vice-versa. The
* Collection supports element removal, which removes the corresponding
* mapping from the LinkedHashMap, via the Iterator.remove,
* Collection.remove, removeAll, retainAll and clear operations. It does
* not support the add or addAll operations.
*
* @see java.util.Map.Entry
*/
public Set entrySet() {
if (entries==null) {
entries = new AbstractSet() {
public Iterator iterator() {
return new HashIterator(ENTRIES);
}
public boolean contains(Object o) {
if (!(o instanceof Map.Entry))
return false;
Map.Entry entry = (Map.Entry)o;
Object key = entry.getKey();
Entry tab[] = table;
int hash = (key==null ? 0 : key.hashCode());
int index = (hash & 0x7FFFFFFF) % tab.length;
for (Entry e = tab[index]; e != null; e = e.next)
if (e.hash==hash && e.equals(entry))
return true;
return false;
}
public boolean remove(Object o) {
if (!(o instanceof Map.Entry))
return false;
Map.Entry entry = (Map.Entry)o;
Object key = entry.getKey();
Entry tab[] = table;
int hash = (key==null ? 0 : key.hashCode());
int index = (hash & 0x7FFFFFFF) % tab.length;
for (Entry e = tab[index], prev = null; e != null;
prev = e, e = e.next) {
if (e.hash==hash && e.equals(entry)) {
modCount++;
if (prev != null)
prev.next = e.next;
else
tab[index] = e.next;
count--;
e.value = null;
listRemove(e);
return true;
}
}
return false;
}
public int size() {
return count;
}
public void clear() {
LinkedHashMap.this.clear();
}
};
}
return entries;
}
/**
* Compares the specified Object with this Map for equality.
* Returns true if the given object is also a LinkedHashMap and the two
* Maps represent the same mappings in the same order. More formally,
* two Maps <code>t1</code> and <code>t2</code> represent the same mappings
* if <code>t1.keySet().equals(t2.keySet())</code> and for every
* key <code>k</code> in <code>t1.keySet()</code>, <code>
* (t1.get(k)==null ? t2.get(k)==null : t1.get(k).equals(t2.get(k)))
* </code>.
* <p>
* This implementation first checks if the specified Object is this Map;
* if so it returns true. Then, it checks if the specified Object is
* a Map whose size is identical to the size of this Set; if not, it
* it returns false. If so, it iterates over this Map and the specified
* Map's entrySet() Collection, and checks that the specified Map contains
* each mapping that this Map contains at the same position. If the
* specified Map fails to contain such a mapping in the right order, false
* is returned. If the iteration completes, true is returned.
*
* @param o Object to be compared for equality with this Map.
* @return true if the specified Object is equal to this Map.
*
*/
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof LinkedHashMap))
return false;
LinkedHashMap t = (LinkedHashMap) o;
if (t.size() != size())
return false;
Iterator i1 = entrySet().iterator();
Iterator i2 = t.entrySet().iterator();
while (i1.hasNext()) {
Entry e1 = (Entry) i1.next();
Entry e2 = (Entry) i2.next();
Object key1 = e1.getKey();
Object value1 = e1.getValue();
Object key2 = e2.getKey();
Object value2 = e2.getValue();
if ((key1 == null ? key2 == null : key1.equals(key2)) &&
(value1 == null ? value2 == null : value1.equals(value2))) {
continue;
} else {
return false;
}
}
return true;
}
/**
* LinkedHashMap collision list entry.
*/
private static class Entry implements Map.Entry {
int hash;
Object key;
Object value;
Entry next;
// These fields comprise the doubly linked list that is used for
// iteration.
Entry before, after;
Entry(int hash, Object key, Object value, Entry next) {
this.hash = hash;
this.key = key;
this.value = value;
this.next = next;
}
// Map.Entry Ops
public Object getKey() {
return key;
}
public Object getValue() {
return value;
}
public Object setValue(Object value) {
Object oldValue = this.value;
this.value = value;
return oldValue;
}
public boolean equals(Object o) {
if (!(o instanceof Map.Entry))
return false;
Map.Entry e = (Map.Entry)o;
return (key==null ? e.getKey()==null : key.equals(e.getKey())) &&
(value==null ? e.getValue()==null : value.equals(e.getValue()));
}
public int hashCode() {
return hash ^ (value==null ? 0 : value.hashCode());
}
public String toString() {
return key+"="+value;
}
}
// Types of Iterators
private static final int KEYS = 0;
private static final int VALUES = 1;
private static final int ENTRIES = 2;
private class HashIterator implements Iterator {
private Entry[] table = LinkedHashMap.this.table;
private Entry entry = null;
private Entry lastReturned = null;
private int type;
/**
* The modCount value that the iterator believes that the backing
* List should have. If this expectation is violated, the iterator
* has detected concurrent modification.
*/
private int expectedModCount = modCount;
HashIterator(int type) {
this.type = type;
this.entry = LinkedHashMap.this.header.after;
}
public boolean hasNext() {
return entry != header;
}
public Object next() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
if (entry == LinkedHashMap.this.header)
throw new NoSuchElementException();
Entry e = lastReturned = entry;
entry = e.after;
return type == KEYS ? e.key : (type == VALUES ? e.value : e);
}
public void remove() {
if (lastReturned == null)
throw new IllegalStateException();
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
Entry[] tab = LinkedHashMap.this.table;
int index = (lastReturned.hash & 0x7FFFFFFF) % tab.length;
for (Entry e = tab[index], prev = null; e != null;
prev = e, e = e.next) {
if (e == lastReturned) {
modCount++;
expectedModCount++;
if (prev == null)
tab[index] = e.next;
else
prev.next = e.next;
count--;
listRemove(e);
lastReturned = null;
return;
}
}
throw new ConcurrentModificationException();
}
}
/**
* Save the state of the LinkedHashMap to a stream (i.e., serialize it).
* The objects will be written out in the order they are linked
* in the list.
*/
private void writeObject(java.io.ObjectOutputStream s)
throws IOException
{
// Write out the threshold, loadfactor, and any hidden stuff
s.defaultWriteObject();
// Write out number of buckets
s.writeInt(table.length);
// Write out size (number of Mappings)
s.writeInt(count);
// Write out keys and values (alternating)
for (Entry e = header.after; e != header; e = e.after) {
s.writeObject(e.key);
s.writeObject(e.value);
}
}
/**
* Reconstitute the LinkedHashMap from a stream (i.e., deserialize it).
*/
private void readObject(java.io.ObjectInputStream s)
throws IOException, ClassNotFoundException
{
// Read in the threshold, loadfactor, and any hidden stuff
s.defaultReadObject();
// Read in number of buckets and allocate the bucket array;
int numBuckets = s.readInt();
table = new Entry[numBuckets];
header = new Entry(-1, null, null, null);
header.before = header;
header.after = header;
// Read in size (number of Mappings)
int size = s.readInt();
// Read the keys and values, and put the mappings in the LinkedHashMap
for (int i=0; i<size; i++) {
Object key = s.readObject();
Object value = s.readObject();
put(key, value);
}
}
}
...@@ -93,7 +93,7 @@ public class LongValueImpl extends PrimitiveValueImpl ...@@ -93,7 +93,7 @@ public class LongValueImpl extends PrimitiveValueImpl
} }
public long longValue() { public long longValue() {
return(long)value; return value;
} }
public float floatValue() { public float floatValue() {
......
...@@ -362,7 +362,7 @@ public abstract class MethodImpl extends TypeComponentImpl ...@@ -362,7 +362,7 @@ public abstract class MethodImpl extends TypeComponentImpl
int argSize = arguments.size(); int argSize = arguments.size();
JNITypeParser parser = new JNITypeParser(signature()); JNITypeParser parser = new JNITypeParser(signature());
List signatures = parser.argumentSignatures(); List<String> signatures = parser.argumentSignatures();
if (signatures.size() != argSize) { if (signatures.size() != argSize) {
throw new IllegalArgumentException("Invalid argument count: expected " + throw new IllegalArgumentException("Invalid argument count: expected " +
......
...@@ -83,8 +83,8 @@ abstract class MirrorImpl extends Object implements Mirror { ...@@ -83,8 +83,8 @@ abstract class MirrorImpl extends Object implements Mirror {
* Throw NullPointerException on null mirrors. * Throw NullPointerException on null mirrors.
* Throw VMMismatchException on wrong VM. * Throw VMMismatchException on wrong VM.
*/ */
void validateMirrors(Collection mirrors) { void validateMirrors(Collection<? extends Mirror> mirrors) {
Iterator iter = mirrors.iterator(); Iterator<? extends Mirror> iter = mirrors.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
MirrorImpl mirror = (MirrorImpl)iter.next(); MirrorImpl mirror = (MirrorImpl)iter.next();
if (!vm.equals(mirror.vm)) { if (!vm.equals(mirror.vm)) {
...@@ -96,8 +96,8 @@ abstract class MirrorImpl extends Object implements Mirror { ...@@ -96,8 +96,8 @@ abstract class MirrorImpl extends Object implements Mirror {
* Allow null mirrors. * Allow null mirrors.
* Throw VMMismatchException on wrong VM. * Throw VMMismatchException on wrong VM.
*/ */
void validateMirrorsOrNulls(Collection mirrors) { void validateMirrorsOrNulls(Collection<? extends Mirror> mirrors) {
Iterator iter = mirrors.iterator(); Iterator<? extends Mirror> iter = mirrors.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
MirrorImpl mirror = (MirrorImpl)iter.next(); MirrorImpl mirror = (MirrorImpl)iter.next();
if ((mirror != null) && !vm.equals(mirror.vm)) { if ((mirror != null) && !vm.equals(mirror.vm)) {
......
...@@ -110,7 +110,7 @@ public class ObjectReferenceImpl extends ValueImpl ...@@ -110,7 +110,7 @@ public class ObjectReferenceImpl extends ValueImpl
public boolean vmNotSuspended(VMAction action) { public boolean vmNotSuspended(VMAction action) {
// make sure that cache and listener management are synchronized // make sure that cache and listener management are synchronized
synchronized (vm.state()) { synchronized (vm.state()) {
if (cache != null && (vm.traceFlags & vm.TRACE_OBJREFS) != 0) { if (cache != null && (vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
vm.printTrace("Clearing temporary cache for " + description()); vm.printTrace("Clearing temporary cache for " + description());
} }
disableCache(); disableCache();
...@@ -163,8 +163,8 @@ public class ObjectReferenceImpl extends ValueImpl ...@@ -163,8 +163,8 @@ public class ObjectReferenceImpl extends ValueImpl
public Value getValue(Field sig) { public Value getValue(Field sig) {
List<Field> list = new ArrayList<Field>(1); List<Field> list = new ArrayList<Field>(1);
list.add(sig); list.add(sig);
Map map = getValues(list); Map<Field, Value> map = getValues(list);
return(Value)map.get(sig); return map.get(sig);
} }
public Map<Field,Value> getValues(List<? extends Field> theFields) { public Map<Field,Value> getValues(List<? extends Field> theFields) {
...@@ -487,7 +487,7 @@ public class ObjectReferenceImpl extends ValueImpl ...@@ -487,7 +487,7 @@ public class ObjectReferenceImpl extends ValueImpl
info = JDWP.ObjectReference.MonitorInfo.process(vm, this); info = JDWP.ObjectReference.MonitorInfo.process(vm, this);
if (local != null) { if (local != null) {
local.monitorInfo = info; local.monitorInfo = info;
if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) { if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
vm.printTrace("ObjectReference " + uniqueID() + vm.printTrace("ObjectReference " + uniqueID() +
" temporarily caching monitor info"); " temporarily caching monitor info");
} }
......
...@@ -127,7 +127,7 @@ public class ProcessAttachingConnector ...@@ -127,7 +127,7 @@ public class ProcessAttachingConnector
} else { } else {
if (lib.equals("dt_shmem")) { if (lib.equals("dt_shmem")) {
try { try {
Class c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService"); Class<?> c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService");
ts = (TransportService)c.newInstance(); ts = (TransportService)c.newInstance();
} catch (Exception x) { } } catch (Exception x) { }
} }
......
...@@ -53,7 +53,7 @@ public class RawCommandLineLauncher extends AbstractLauncher implements Launchin ...@@ -53,7 +53,7 @@ public class RawCommandLineLauncher extends AbstractLauncher implements Launchin
super(); super();
try { try {
Class c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService"); Class<?> c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService");
transportService = (TransportService)c.newInstance(); transportService = (TransportService)c.newInstance();
transport = new Transport() { transport = new Transport() {
public String name() { public String name() {
......
...@@ -99,7 +99,7 @@ implements ReferenceType { ...@@ -99,7 +99,7 @@ implements ReferenceType {
// Fetch all methods for the class, check performance impact // Fetch all methods for the class, check performance impact
// Needs no synchronization now, since methods() returns // Needs no synchronization now, since methods() returns
// unmodifiable local data // unmodifiable local data
Iterator it = methods().iterator(); Iterator<Method> it = methods().iterator();
while (it.hasNext()) { while (it.hasNext()) {
MethodImpl method = (MethodImpl)it.next(); MethodImpl method = (MethodImpl)it.next();
if (method.ref() == ref) { if (method.ref() == ref) {
...@@ -113,7 +113,7 @@ implements ReferenceType { ...@@ -113,7 +113,7 @@ implements ReferenceType {
// Fetch all fields for the class, check performance impact // Fetch all fields for the class, check performance impact
// Needs no synchronization now, since fields() returns // Needs no synchronization now, since fields() returns
// unmodifiable local data // unmodifiable local data
Iterator it = fields().iterator(); Iterator<Field>it = fields().iterator();
while (it.hasNext()) { while (it.hasNext()) {
FieldImpl field = (FieldImpl)it.next(); FieldImpl field = (FieldImpl)it.next();
if (field.ref() == ref) { if (field.ref() == ref) {
...@@ -385,7 +385,7 @@ implements ReferenceType { ...@@ -385,7 +385,7 @@ implements ReferenceType {
/* Add inherited, visible fields */ /* Add inherited, visible fields */
List<? extends ReferenceType> types = inheritedTypes(); List<? extends ReferenceType> types = inheritedTypes();
Iterator iter = types.iterator(); Iterator<? extends ReferenceType> iter = types.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
/* /*
* TO DO: Be defensive and check for cyclic interface inheritance * TO DO: Be defensive and check for cyclic interface inheritance
...@@ -419,7 +419,7 @@ implements ReferenceType { ...@@ -419,7 +419,7 @@ implements ReferenceType {
/* Add inherited fields */ /* Add inherited fields */
List<? extends ReferenceType> types = inheritedTypes(); List<? extends ReferenceType> types = inheritedTypes();
Iterator iter = types.iterator(); Iterator<? extends ReferenceType> iter = types.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next(); ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next();
type.addAllFields(fieldList, typeSet); type.addAllFields(fieldList, typeSet);
...@@ -434,13 +434,10 @@ implements ReferenceType { ...@@ -434,13 +434,10 @@ implements ReferenceType {
} }
public Field fieldByName(String fieldName) { public Field fieldByName(String fieldName) {
java.util.List searchList; List<Field> searchList = visibleFields();
Field f;
searchList = visibleFields();
for (int i=0; i<searchList.size(); i++) { for (int i=0; i<searchList.size(); i++) {
f = (Field)searchList.get(i); Field f = searchList.get(i);
if (f.name().equals(fieldName)) { if (f.name().equals(fieldName)) {
return f; return f;
...@@ -575,13 +572,13 @@ implements ReferenceType { ...@@ -575,13 +572,13 @@ implements ReferenceType {
} }
public List<ReferenceType> nestedTypes() { public List<ReferenceType> nestedTypes() {
List all = vm.allClasses(); List<ReferenceType> all = vm.allClasses();
List<ReferenceType> nested = new ArrayList<ReferenceType>(); List<ReferenceType> nested = new ArrayList<ReferenceType>();
String outername = name(); String outername = name();
int outerlen = outername.length(); int outerlen = outername.length();
Iterator iter = all.iterator(); Iterator<ReferenceType> iter = all.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
ReferenceType refType = (ReferenceType)iter.next(); ReferenceType refType = iter.next();
String name = refType.name(); String name = refType.name();
int len = name.length(); int len = name.length();
/* The separator is historically '$' but could also be '#' */ /* The separator is historically '$' but could also be '#' */
...@@ -598,8 +595,8 @@ implements ReferenceType { ...@@ -598,8 +595,8 @@ implements ReferenceType {
public Value getValue(Field sig) { public Value getValue(Field sig) {
List<Field> list = new ArrayList<Field>(1); List<Field> list = new ArrayList<Field>(1);
list.add(sig); list.add(sig);
Map map = getValues(list); Map<Field, Value> map = getValues(list);
return(Value)map.get(sig); return map.get(sig);
} }
...@@ -847,7 +844,7 @@ implements ReferenceType { ...@@ -847,7 +844,7 @@ implements ReferenceType {
SDE.Stratum stratum = stratum(stratumID); SDE.Stratum stratum = stratum(stratumID);
List<Location> list = new ArrayList<Location>(); // location list List<Location> list = new ArrayList<Location>(); // location list
for (Iterator iter = methods().iterator(); iter.hasNext(); ) { for (Iterator<Method> iter = methods().iterator(); iter.hasNext(); ) {
MethodImpl method = (MethodImpl)iter.next(); MethodImpl method = (MethodImpl)iter.next();
try { try {
list.addAll( list.addAll(
...@@ -887,7 +884,7 @@ implements ReferenceType { ...@@ -887,7 +884,7 @@ implements ReferenceType {
List<Location> list = new ArrayList<Location>(); List<Location> list = new ArrayList<Location>();
Iterator iter = methods.iterator(); Iterator<Method> iter = methods.iterator();
while(iter.hasNext()) { while(iter.hasNext()) {
MethodImpl method = (MethodImpl)iter.next(); MethodImpl method = (MethodImpl)iter.next();
// eliminate native and abstract to eliminate // eliminate native and abstract to eliminate
......
...@@ -79,7 +79,7 @@ public class ShortValueImpl extends PrimitiveValueImpl ...@@ -79,7 +79,7 @@ public class ShortValueImpl extends PrimitiveValueImpl
} }
public short shortValue() { public short shortValue() {
return(short)value; return value;
} }
public int intValue() { public int intValue() {
......
...@@ -64,7 +64,7 @@ public class SunCommandLineLauncher extends AbstractLauncher implements Launchin ...@@ -64,7 +64,7 @@ public class SunCommandLineLauncher extends AbstractLauncher implements Launchin
* transport or the socket transport * transport or the socket transport
*/ */
try { try {
Class c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService"); Class<?> c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService");
transportService = (TransportService)c.newInstance(); transportService = (TransportService)c.newInstance();
transport = new Transport() { transport = new Transport() {
public String name() { public String name() {
......
...@@ -178,7 +178,7 @@ public class TargetVM implements Runnable { ...@@ -178,7 +178,7 @@ public class TargetVM implements Runnable {
// Closing a queue causes a VMDisconnectEvent to // Closing a queue causes a VMDisconnectEvent to
// be put onto the queue. // be put onto the queue.
synchronized(eventQueues) { synchronized(eventQueues) {
Iterator iter = eventQueues.iterator(); Iterator<EventQueue> iter = eventQueues.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
((EventQueueImpl)iter.next()).close(); ((EventQueueImpl)iter.next()).close();
} }
...@@ -187,9 +187,9 @@ public class TargetVM implements Runnable { ...@@ -187,9 +187,9 @@ public class TargetVM implements Runnable {
// indirectly throw VMDisconnectedException to // indirectly throw VMDisconnectedException to
// command requesters. // command requesters.
synchronized(waitingQueue) { synchronized(waitingQueue) {
Iterator iter = waitingQueue.values().iterator(); Iterator<Packet> iter = waitingQueue.values().iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
Packet packet = (Packet)iter.next(); Packet packet = iter.next();
synchronized(packet) { synchronized(packet) {
packet.notify(); packet.notify();
} }
...@@ -252,7 +252,7 @@ public class TargetVM implements Runnable { ...@@ -252,7 +252,7 @@ public class TargetVM implements Runnable {
void notifyDequeueEventSet() { void notifyDequeueEventSet() {
int maxQueueSize = 0; int maxQueueSize = 0;
synchronized(eventQueues) { synchronized(eventQueues) {
Iterator iter = eventQueues.iterator(); Iterator<EventQueue> iter = eventQueues.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
EventQueueImpl queue = (EventQueueImpl)iter.next(); EventQueueImpl queue = (EventQueueImpl)iter.next();
maxQueueSize = Math.max(maxQueueSize, queue.size()); maxQueueSize = Math.max(maxQueueSize, queue.size());
...@@ -265,7 +265,7 @@ public class TargetVM implements Runnable { ...@@ -265,7 +265,7 @@ public class TargetVM implements Runnable {
int maxQueueSize = 0; int maxQueueSize = 0;
synchronized(eventQueues) { synchronized(eventQueues) {
Iterator iter = eventQueues.iterator(); Iterator<EventQueue> iter = eventQueues.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
EventQueueImpl queue = (EventQueueImpl)iter.next(); EventQueueImpl queue = (EventQueueImpl)iter.next();
queue.enqueue(eventSet); queue.enqueue(eventSet);
......
...@@ -33,6 +33,7 @@ import java.util.EventObject; ...@@ -33,6 +33,7 @@ import java.util.EventObject;
* with JDI events. * with JDI events.
*/ */
class ThreadAction extends EventObject { class ThreadAction extends EventObject {
private static final long serialVersionUID = 5690763191100515283L;
// Event ids // Event ids
/*static final int THREAD_SUSPENDED = 1;*/ /*static final int THREAD_SUSPENDED = 1;*/
static final int THREAD_RESUMABLE = 2; static final int THREAD_RESUMABLE = 2;
......
...@@ -118,7 +118,7 @@ public class ThreadGroupReferenceImpl extends ObjectReferenceImpl ...@@ -118,7 +118,7 @@ public class ThreadGroupReferenceImpl extends ObjectReferenceImpl
.process(vm, this); .process(vm, this);
if (local != null) { if (local != null) {
local.kids = kids; local.kids = kids;
if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) { if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
vm.printTrace(description() + vm.printTrace(description() +
" temporarily caching children "); " temporarily caching children ");
} }
......
...@@ -240,7 +240,7 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl ...@@ -240,7 +240,7 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl
public void stop(ObjectReference throwable) throws InvalidTypeException { public void stop(ObjectReference throwable) throws InvalidTypeException {
validateMirror(throwable); validateMirror(throwable);
// Verify that the given object is a Throwable instance // Verify that the given object is a Throwable instance
List list = vm.classesByName("java.lang.Throwable"); List<ReferenceType> list = vm.classesByName("java.lang.Throwable");
ClassTypeImpl throwableClass = (ClassTypeImpl)list.get(0); ClassTypeImpl throwableClass = (ClassTypeImpl)list.get(0);
if ((throwable == null) || if ((throwable == null) ||
!throwableClass.isAssignableFrom(throwable)) { !throwableClass.isAssignableFrom(throwable)) {
...@@ -296,10 +296,10 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl ...@@ -296,10 +296,10 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl
try { try {
StackFrame frame = frame(0); StackFrame frame = frame(0);
Location location = frame.location(); Location location = frame.location();
List requests = vm.eventRequestManager().breakpointRequests(); List<BreakpointRequest> requests = vm.eventRequestManager().breakpointRequests();
Iterator iter = requests.iterator(); Iterator<BreakpointRequest> iter = requests.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
BreakpointRequest request = (BreakpointRequest)iter.next(); BreakpointRequest request = iter.next();
if (location.equals(request.location())) { if (location.equals(request.location())) {
return true; return true;
} }
...@@ -352,8 +352,8 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl ...@@ -352,8 +352,8 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl
} }
public StackFrame frame(int index) throws IncompatibleThreadStateException { public StackFrame frame(int index) throws IncompatibleThreadStateException {
List list = privateFrames(index, 1); List<StackFrame> list = privateFrames(index, 1);
return (StackFrame)list.get(0); return list.get(0);
} }
/** /**
...@@ -447,7 +447,7 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl ...@@ -447,7 +447,7 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl
snapshot.ownedMonitors = Arrays.asList( snapshot.ownedMonitors = Arrays.asList(
(ObjectReference[])JDWP.ThreadReference.OwnedMonitors. (ObjectReference[])JDWP.ThreadReference.OwnedMonitors.
process(vm, this).owned); process(vm, this).owned);
if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) { if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
vm.printTrace(description() + vm.printTrace(description() +
" temporarily caching owned monitors"+ " temporarily caching owned monitors"+
" (count = " + snapshot.ownedMonitors.size() + ")"); " (count = " + snapshot.ownedMonitors.size() + ")");
...@@ -475,7 +475,7 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl ...@@ -475,7 +475,7 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl
process(vm, this).monitor; process(vm, this).monitor;
snapshot.triedCurrentContended = true; snapshot.triedCurrentContended = true;
if ((snapshot.contendedMonitor != null) && if ((snapshot.contendedMonitor != null) &&
((vm.traceFlags & vm.TRACE_OBJREFS) != 0)) { ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0)) {
vm.printTrace(description() + vm.printTrace(description() +
" temporarily caching contended monitor"+ " temporarily caching contended monitor"+
" (id = " + snapshot.contendedMonitor.uniqueID() + ")"); " (id = " + snapshot.contendedMonitor.uniqueID() + ")");
...@@ -509,7 +509,7 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl ...@@ -509,7 +509,7 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl
snapshot.ownedMonitorsInfo.add(mon); snapshot.ownedMonitorsInfo.add(mon);
} }
if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) { if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
vm.printTrace(description() + vm.printTrace(description() +
" temporarily caching owned monitors"+ " temporarily caching owned monitors"+
" (count = " + snapshot.ownedMonitorsInfo.size() + ")"); " (count = " + snapshot.ownedMonitorsInfo.size() + ")");
...@@ -601,9 +601,9 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl ...@@ -601,9 +601,9 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl
void removeListener(ThreadListener listener) { void removeListener(ThreadListener listener) {
synchronized (vm.state()) { synchronized (vm.state()) {
Iterator iter = listeners.iterator(); Iterator<WeakReference<ThreadListener>> iter = listeners.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
WeakReference ref = (WeakReference)iter.next(); WeakReference<ThreadListener> ref = iter.next();
if (listener.equals(ref.get())) { if (listener.equals(ref.get())) {
iter.remove(); iter.remove();
break; break;
...@@ -619,10 +619,10 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl ...@@ -619,10 +619,10 @@ public class ThreadReferenceImpl extends ObjectReferenceImpl
*/ */
private void processThreadAction(ThreadAction action) { private void processThreadAction(ThreadAction action) {
synchronized (vm.state()) { synchronized (vm.state()) {
Iterator iter = listeners.iterator(); Iterator<WeakReference<ThreadListener>> iter = listeners.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
WeakReference ref = (WeakReference)iter.next(); WeakReference<ThreadListener> ref = iter.next();
ThreadListener listener = (ThreadListener)ref.get(); ThreadListener listener = ref.get();
if (listener != null) { if (listener != null) {
switch (action.id()) { switch (action.id()) {
case ThreadAction.THREAD_RESUMABLE: case ThreadAction.THREAD_RESUMABLE:
......
...@@ -33,6 +33,8 @@ import java.util.EventObject; ...@@ -33,6 +33,8 @@ import java.util.EventObject;
* with JDI events. * with JDI events.
*/ */
class VMAction extends EventObject { class VMAction extends EventObject {
private static final long serialVersionUID = -1701944679310296090L;
// Event ids // Event ids
static final int VM_SUSPENDED = 1; static final int VM_SUSPENDED = 1;
static final int VM_NOT_SUSPENDED = 2; static final int VM_NOT_SUSPENDED = 2;
......
...@@ -34,7 +34,7 @@ class VMState { ...@@ -34,7 +34,7 @@ class VMState {
private final VirtualMachineImpl vm; private final VirtualMachineImpl vm;
// Listeners // Listeners
private final List<WeakReference> listeners = new ArrayList<WeakReference>(); // synchronized (this) private final List<WeakReference<VMListener>> listeners = new ArrayList<WeakReference<VMListener>>(); // synchronized (this)
private boolean notifyingListeners = false; // synchronized (this) private boolean notifyingListeners = false; // synchronized (this)
/* /*
...@@ -129,7 +129,7 @@ class VMState { ...@@ -129,7 +129,7 @@ class VMState {
*/ */
synchronized void thaw(ThreadReference resumingThread) { synchronized void thaw(ThreadReference resumingThread) {
if (cache != null) { if (cache != null) {
if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) { if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
vm.printTrace("Clearing VM suspended cache"); vm.printTrace("Clearing VM suspended cache");
} }
disableCache(); disableCache();
...@@ -142,10 +142,10 @@ class VMState { ...@@ -142,10 +142,10 @@ class VMState {
// Prevent recursion // Prevent recursion
notifyingListeners = true; notifyingListeners = true;
Iterator iter = listeners.iterator(); Iterator<WeakReference<VMListener>> iter = listeners.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
WeakReference ref = (WeakReference)iter.next(); WeakReference<VMListener> ref = iter.next();
VMListener listener = (VMListener)ref.get(); VMListener listener = ref.get();
if (listener != null) { if (listener != null) {
boolean keep = true; boolean keep = true;
switch (action.id()) { switch (action.id()) {
...@@ -178,9 +178,9 @@ class VMState { ...@@ -178,9 +178,9 @@ class VMState {
} }
synchronized void removeListener(VMListener listener) { synchronized void removeListener(VMListener listener) {
Iterator iter = listeners.iterator(); Iterator<WeakReference<VMListener>> iter = listeners.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
WeakReference ref = (WeakReference)iter.next(); WeakReference<VMListener> ref = iter.next();
if (listener.equals(ref.get())) { if (listener.equals(ref.get())) {
iter.remove(); iter.remove();
break; break;
...@@ -202,7 +202,7 @@ class VMState { ...@@ -202,7 +202,7 @@ class VMState {
process(vm).threads); process(vm).threads);
if (local != null) { if (local != null) {
local.threads = threads; local.threads = threads;
if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) { if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
vm.printTrace("Caching all threads (count = " + vm.printTrace("Caching all threads (count = " +
threads.size() + ") while VM suspended"); threads.size() + ") while VM suspended");
} }
...@@ -229,7 +229,7 @@ class VMState { ...@@ -229,7 +229,7 @@ class VMState {
process(vm).groups); process(vm).groups);
if (local != null) { if (local != null) {
local.groups = groups; local.groups = groups;
if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) { if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
vm.printTrace( vm.printTrace(
"Caching top level thread groups (count = " + "Caching top level thread groups (count = " +
groups.size() + ") while VM suspended"); groups.size() + ") while VM suspended");
......
...@@ -300,9 +300,9 @@ class VirtualMachineImpl extends MirrorImpl ...@@ -300,9 +300,9 @@ class VirtualMachineImpl extends MirrorImpl
if (!canRedefineClasses()) { if (!canRedefineClasses()) {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
Iterator it = classToBytes.entrySet().iterator(); Iterator<?> it = classToBytes.entrySet().iterator();
for (int i = 0; it.hasNext(); i++) { for (int i = 0; it.hasNext(); i++) {
Map.Entry entry = (Map.Entry)it.next(); Map.Entry<?,?> entry = (Map.Entry)it.next();
ReferenceTypeImpl refType = (ReferenceTypeImpl)entry.getKey(); ReferenceTypeImpl refType = (ReferenceTypeImpl)entry.getKey();
validateMirror(refType); validateMirror(refType);
defs[i] = new JDWP.VirtualMachine.RedefineClasses defs[i] = new JDWP.VirtualMachine.RedefineClasses
...@@ -801,7 +801,7 @@ class VirtualMachineImpl extends MirrorImpl ...@@ -801,7 +801,7 @@ class VirtualMachineImpl extends MirrorImpl
* we can't differentiate here, we first remove all * we can't differentiate here, we first remove all
* matching classes from our cache... * matching classes from our cache...
*/ */
Iterator iter = typesBySignature.iterator(); Iterator<ReferenceType> iter = typesBySignature.iterator();
int matches = 0; int matches = 0;
while (iter.hasNext()) { while (iter.hasNext()) {
ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next(); ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next();
...@@ -833,7 +833,7 @@ class VirtualMachineImpl extends MirrorImpl ...@@ -833,7 +833,7 @@ class VirtualMachineImpl extends MirrorImpl
if (typesByID == null) { if (typesByID == null) {
return new ArrayList<ReferenceType>(0); return new ArrayList<ReferenceType>(0);
} }
Iterator iter = typesBySignature.iterator(); Iterator<ReferenceType> iter = typesBySignature.iterator();
List<ReferenceType> list = new ArrayList<ReferenceType>(); List<ReferenceType> list = new ArrayList<ReferenceType>();
while (iter.hasNext()) { while (iter.hasNext()) {
ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next(); ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next();
...@@ -1041,10 +1041,10 @@ class VirtualMachineImpl extends MirrorImpl ...@@ -1041,10 +1041,10 @@ class VirtualMachineImpl extends MirrorImpl
} }
Type findBootType(String signature) throws ClassNotLoadedException { Type findBootType(String signature) throws ClassNotLoadedException {
List types = allClasses(); List<ReferenceType> types = allClasses();
Iterator iter = types.iterator(); Iterator<ReferenceType> iter = types.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
ReferenceType type = (ReferenceType)iter.next(); ReferenceType type = iter.next();
if ((type.classLoader() == null) && if ((type.classLoader() == null) &&
(type.signature().equals(signature))) { (type.signature().equals(signature))) {
return type; return type;
...@@ -1227,7 +1227,7 @@ class VirtualMachineImpl extends MirrorImpl ...@@ -1227,7 +1227,7 @@ class VirtualMachineImpl extends MirrorImpl
} }
private void processQueue() { private void processQueue() {
Reference ref; Reference<?> ref;
//if ((traceFlags & TRACE_OBJREFS) != 0) { //if ((traceFlags & TRACE_OBJREFS) != 0) {
// printTrace("Checking for softly reachable objects"); // printTrace("Checking for softly reachable objects");
//} //}
......
...@@ -60,7 +60,8 @@ public final class Boolean implements java.io.Serializable, ...@@ -60,7 +60,8 @@ public final class Boolean implements java.io.Serializable,
* *
* @since JDK1.1 * @since JDK1.1
*/ */
public static final Class<Boolean> TYPE = Class.getPrimitiveClass("boolean"); @SuppressWarnings("unchecked")
public static final Class<Boolean> TYPE = (Class<Boolean>) Class.getPrimitiveClass("boolean");
/** /**
* The value of the Boolean. * The value of the Boolean.
......
...@@ -59,6 +59,7 @@ public final class Byte extends Number implements Comparable<Byte> { ...@@ -59,6 +59,7 @@ public final class Byte extends Number implements Comparable<Byte> {
* The {@code Class} instance representing the primitive type * The {@code Class} instance representing the primitive type
* {@code byte}. * {@code byte}.
*/ */
@SuppressWarnings("unchecked")
public static final Class<Byte> TYPE = (Class<Byte>) Class.getPrimitiveClass("byte"); public static final Class<Byte> TYPE = (Class<Byte>) Class.getPrimitiveClass("byte");
/** /**
......
...@@ -172,7 +172,7 @@ class Character implements java.io.Serializable, Comparable<Character> { ...@@ -172,7 +172,7 @@ class Character implements java.io.Serializable, Comparable<Character> {
* @since 1.1 * @since 1.1
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static final Class<Character> TYPE = Class.getPrimitiveClass("char"); public static final Class<Character> TYPE = (Class<Character>) Class.getPrimitiveClass("char");
/* /*
* Normative general types * Normative general types
......
...@@ -101,6 +101,8 @@ class CharacterName { ...@@ -101,6 +101,8 @@ class CharacterName {
if (lookup[cp>>8] == null || if (lookup[cp>>8] == null ||
(off = lookup[cp>>8][cp&0xff]) == 0) (off = lookup[cp>>8][cp&0xff]) == 0)
return null; return null;
return new String(strPool, 0, off >>> 8, off & 0xff); // ASCII @SuppressWarnings("deprecation")
String result = new String(strPool, 0, off >>> 8, off & 0xff); // ASCII
return result;
} }
} }
...@@ -631,6 +631,7 @@ public final ...@@ -631,6 +631,7 @@ public final
* <cite>The Java&trade; Virtual Machine Specification</cite> * <cite>The Java&trade; Virtual Machine Specification</cite>
* @since 1.5 * @since 1.5
*/ */
@SuppressWarnings("unchecked")
public TypeVariable<Class<T>>[] getTypeParameters() { public TypeVariable<Class<T>>[] getTypeParameters() {
if (getGenericSignature() != null) if (getGenericSignature() != null)
return (TypeVariable<Class<T>>[])getGenericInfo().getTypeParameters(); return (TypeVariable<Class<T>>[])getGenericInfo().getTypeParameters();
...@@ -1303,7 +1304,7 @@ public final ...@@ -1303,7 +1304,7 @@ public final
return java.security.AccessController.doPrivileged( return java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Class<?>[]>() { new java.security.PrivilegedAction<Class<?>[]>() {
public Class[] run() { public Class<?>[] run() {
List<Class<?>> list = new ArrayList<>(); List<Class<?>> list = new ArrayList<>();
Class<?> currentClass = Class.this; Class<?> currentClass = Class.this;
while (currentClass != null) { while (currentClass != null) {
...@@ -1315,7 +1316,7 @@ public final ...@@ -1315,7 +1316,7 @@ public final
} }
currentClass = currentClass.getSuperclass(); currentClass = currentClass.getSuperclass();
} }
return list.toArray(new Class[0]); return list.toArray(new Class<?>[0]);
} }
}); });
} }
...@@ -2150,7 +2151,7 @@ public final ...@@ -2150,7 +2151,7 @@ public final
* Return the Virtual Machine's Class object for the named * Return the Virtual Machine's Class object for the named
* primitive type. * primitive type.
*/ */
static native Class getPrimitiveClass(String name); static native Class<?> getPrimitiveClass(String name);
/* /*
...@@ -2395,7 +2396,9 @@ public final ...@@ -2395,7 +2396,9 @@ public final
} }
// No cached value available; request value from VM // No cached value available; request value from VM
if (isInterface()) { if (isInterface()) {
res = new Constructor[0]; @SuppressWarnings("unchecked")
Constructor<T>[] temporaryRes = (Constructor<T>[]) new Constructor<?>[0];
res = temporaryRes;
} else { } else {
res = getDeclaredConstructors0(publicOnly); res = getDeclaredConstructors0(publicOnly);
} }
...@@ -2951,7 +2954,9 @@ public final ...@@ -2951,7 +2954,9 @@ public final
return null; return null;
} }
}); });
enumConstants = (T[])values.invoke(null); @SuppressWarnings("unchecked")
T[] temporaryConstants = (T[])values.invoke(null);
enumConstants = temporaryConstants;
} }
// These can happen when users concoct enum-like classes // These can happen when users concoct enum-like classes
// that don't comply with the enum spec. // that don't comply with the enum spec.
...@@ -2996,6 +3001,7 @@ public final ...@@ -2996,6 +3001,7 @@ public final
* *
* @since 1.5 * @since 1.5
*/ */
@SuppressWarnings("unchecked")
public T cast(Object obj) { public T cast(Object obj) {
if (obj != null && !isInstance(obj)) if (obj != null && !isInstance(obj))
throw new ClassCastException(cannotCastMsg(obj)); throw new ClassCastException(cannotCastMsg(obj));
...@@ -3026,6 +3032,7 @@ public final ...@@ -3026,6 +3032,7 @@ public final
* the class itself). * the class itself).
* @since 1.5 * @since 1.5
*/ */
@SuppressWarnings("unchecked")
public <U> Class<? extends U> asSubclass(Class<U> clazz) { public <U> Class<? extends U> asSubclass(Class<U> clazz) {
if (clazz.isAssignableFrom(this)) if (clazz.isAssignableFrom(this))
return (Class<? extends U>) this; return (Class<? extends U>) this;
...@@ -3037,6 +3044,7 @@ public final ...@@ -3037,6 +3044,7 @@ public final
* @throws NullPointerException {@inheritDoc} * @throws NullPointerException {@inheritDoc}
* @since 1.5 * @since 1.5
*/ */
@SuppressWarnings("unchecked")
public <A extends Annotation> A getAnnotation(Class<A> annotationClass) { public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {
if (annotationClass == null) if (annotationClass == null)
throw new NullPointerException(); throw new NullPointerException();
......
...@@ -1167,7 +1167,8 @@ public abstract class ClassLoader { ...@@ -1167,7 +1167,8 @@ public abstract class ClassLoader {
* @since 1.2 * @since 1.2
*/ */
public Enumeration<URL> getResources(String name) throws IOException { public Enumeration<URL> getResources(String name) throws IOException {
Enumeration[] tmp = new Enumeration[2]; @SuppressWarnings("unchecked")
Enumeration<URL>[] tmp = (Enumeration<URL>[]) new Enumeration<?>[2];
if (parent != null) { if (parent != null) {
tmp[0] = parent.getResources(name); tmp[0] = parent.getResources(name);
} else { } else {
......
...@@ -92,15 +92,15 @@ final class ConditionalSpecialCasing { ...@@ -92,15 +92,15 @@ final class ConditionalSpecialCasing {
}; };
// A hash table that contains the above entries // A hash table that contains the above entries
static Hashtable entryTable = new Hashtable(); static Hashtable<Integer, HashSet<Entry>> entryTable = new Hashtable<>();
static { static {
// create hashtable from the entry // create hashtable from the entry
for (int i = 0; i < entry.length; i ++) { for (int i = 0; i < entry.length; i ++) {
Entry cur = entry[i]; Entry cur = entry[i];
Integer cp = new Integer(cur.getCodePoint()); Integer cp = new Integer(cur.getCodePoint());
HashSet set = (HashSet)entryTable.get(cp); HashSet<Entry> set = entryTable.get(cp);
if (set == null) { if (set == null) {
set = new HashSet(); set = new HashSet<Entry>();
} }
set.add(cur); set.add(cur);
entryTable.put(cp, set); entryTable.put(cp, set);
...@@ -151,13 +151,13 @@ final class ConditionalSpecialCasing { ...@@ -151,13 +151,13 @@ final class ConditionalSpecialCasing {
} }
private static char[] lookUpTable(String src, int index, Locale locale, boolean bLowerCasing) { private static char[] lookUpTable(String src, int index, Locale locale, boolean bLowerCasing) {
HashSet set = (HashSet)entryTable.get(new Integer(src.codePointAt(index))); HashSet<Entry> set = entryTable.get(new Integer(src.codePointAt(index)));
if (set != null) { if (set != null) {
Iterator iter = set.iterator(); Iterator<Entry> iter = set.iterator();
String currentLang = locale.getLanguage(); String currentLang = locale.getLanguage();
while (iter.hasNext()) { while (iter.hasNext()) {
Entry entry = (Entry)iter.next(); Entry entry = iter.next();
String conditionLang= entry.getLanguage(); String conditionLang= entry.getLanguage();
if (((conditionLang == null) || (conditionLang.equals(currentLang))) && if (((conditionLang == null) || (conditionLang.equals(currentLang))) &&
isConditionMet(src, index, locale, entry.getCondition())) { isConditionMet(src, index, locale, entry.getCondition())) {
......
...@@ -128,6 +128,7 @@ public final class Double extends Number implements Comparable<Double> { ...@@ -128,6 +128,7 @@ public final class Double extends Number implements Comparable<Double> {
* *
* @since JDK1.1 * @since JDK1.1
*/ */
@SuppressWarnings("unchecked")
public static final Class<Double> TYPE = (Class<Double>) Class.getPrimitiveClass("double"); public static final Class<Double> TYPE = (Class<Double>) Class.getPrimitiveClass("double");
/** /**
...@@ -715,7 +716,7 @@ public final class Double extends Number implements Comparable<Double> { ...@@ -715,7 +716,7 @@ public final class Double extends Number implements Comparable<Double> {
* @return the {@code double} value represented by this object * @return the {@code double} value represented by this object
*/ */
public double doubleValue() { public double doubleValue() {
return (double)value; return value;
} }
/** /**
......
...@@ -36,6 +36,7 @@ package java.lang; ...@@ -36,6 +36,7 @@ package java.lang;
* @see java.lang.reflect.AnnotatedElement * @see java.lang.reflect.AnnotatedElement
* @since 1.5 * @since 1.5
*/ */
@SuppressWarnings("rawtypes") /* rawtypes are part of the public api */
public class EnumConstantNotPresentException extends RuntimeException { public class EnumConstantNotPresentException extends RuntimeException {
private static final long serialVersionUID = -6046998521960521108L; private static final long serialVersionUID = -6046998521960521108L;
......
...@@ -126,7 +126,8 @@ public final class Float extends Number implements Comparable<Float> { ...@@ -126,7 +126,8 @@ public final class Float extends Number implements Comparable<Float> {
* *
* @since JDK1.1 * @since JDK1.1
*/ */
public static final Class<Float> TYPE = Class.getPrimitiveClass("float"); @SuppressWarnings("unchecked")
public static final Class<Float> TYPE = (Class<Float>) Class.getPrimitiveClass("float");
/** /**
* Returns a string representation of the {@code float} * Returns a string representation of the {@code float}
......
...@@ -68,6 +68,7 @@ public final class Integer extends Number implements Comparable<Integer> { ...@@ -68,6 +68,7 @@ public final class Integer extends Number implements Comparable<Integer> {
* *
* @since JDK1.1 * @since JDK1.1
*/ */
@SuppressWarnings("unchecked")
public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int"); public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
/** /**
......
...@@ -66,6 +66,7 @@ public final class Long extends Number implements Comparable<Long> { ...@@ -66,6 +66,7 @@ public final class Long extends Number implements Comparable<Long> {
* *
* @since JDK1.1 * @since JDK1.1
*/ */
@SuppressWarnings("unchecked")
public static final Class<Long> TYPE = (Class<Long>) Class.getPrimitiveClass("long"); public static final Class<Long> TYPE = (Class<Long>) Class.getPrimitiveClass("long");
/** /**
...@@ -734,7 +735,7 @@ public final class Long extends Number implements Comparable<Long> { ...@@ -734,7 +735,7 @@ public final class Long extends Number implements Comparable<Long> {
* {@code long} value. * {@code long} value.
*/ */
public long longValue() { public long longValue() {
return (long)value; return value;
} }
/** /**
......
...@@ -58,6 +58,7 @@ public final class Short extends Number implements Comparable<Short> { ...@@ -58,6 +58,7 @@ public final class Short extends Number implements Comparable<Short> {
* The {@code Class} instance representing the primitive type * The {@code Class} instance representing the primitive type
* {@code short}. * {@code short}.
*/ */
@SuppressWarnings("unchecked")
public static final Class<Short> TYPE = (Class<Short>) Class.getPrimitiveClass("short"); public static final Class<Short> TYPE = (Class<Short>) Class.getPrimitiveClass("short");
/** /**
......
...@@ -1032,7 +1032,7 @@ public final class System { ...@@ -1032,7 +1032,7 @@ public final class System {
*/ */
@Deprecated @Deprecated
public static void runFinalizersOnExit(boolean value) { public static void runFinalizersOnExit(boolean value) {
Runtime.getRuntime().runFinalizersOnExit(value); Runtime.runFinalizersOnExit(value);
} }
/** /**
......
...@@ -144,8 +144,11 @@ public class ThreadLocal<T> { ...@@ -144,8 +144,11 @@ public class ThreadLocal<T> {
ThreadLocalMap map = getMap(t); ThreadLocalMap map = getMap(t);
if (map != null) { if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this); ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null) if (e != null) {
return (T)e.value; @SuppressWarnings("unchecked")
T result = (T)e.value;
return result;
}
} }
return setInitialValue(); return setInitialValue();
} }
...@@ -268,11 +271,11 @@ public class ThreadLocal<T> { ...@@ -268,11 +271,11 @@ public class ThreadLocal<T> {
* entry can be expunged from table. Such entries are referred to * entry can be expunged from table. Such entries are referred to
* as "stale entries" in the code that follows. * as "stale entries" in the code that follows.
*/ */
static class Entry extends WeakReference<ThreadLocal> { static class Entry extends WeakReference<ThreadLocal<?>> {
/** The value associated with this ThreadLocal. */ /** The value associated with this ThreadLocal. */
Object value; Object value;
Entry(ThreadLocal k, Object v) { Entry(ThreadLocal<?> k, Object v) {
super(k); super(k);
value = v; value = v;
} }
...@@ -325,7 +328,7 @@ public class ThreadLocal<T> { ...@@ -325,7 +328,7 @@ public class ThreadLocal<T> {
* ThreadLocalMaps are constructed lazily, so we only create * ThreadLocalMaps are constructed lazily, so we only create
* one when we have at least one entry to put in it. * one when we have at least one entry to put in it.
*/ */
ThreadLocalMap(ThreadLocal firstKey, Object firstValue) { ThreadLocalMap(ThreadLocal<?> firstKey, Object firstValue) {
table = new Entry[INITIAL_CAPACITY]; table = new Entry[INITIAL_CAPACITY];
int i = firstKey.threadLocalHashCode & (INITIAL_CAPACITY - 1); int i = firstKey.threadLocalHashCode & (INITIAL_CAPACITY - 1);
table[i] = new Entry(firstKey, firstValue); table[i] = new Entry(firstKey, firstValue);
...@@ -348,7 +351,8 @@ public class ThreadLocal<T> { ...@@ -348,7 +351,8 @@ public class ThreadLocal<T> {
for (int j = 0; j < len; j++) { for (int j = 0; j < len; j++) {
Entry e = parentTable[j]; Entry e = parentTable[j];
if (e != null) { if (e != null) {
ThreadLocal key = e.get(); @SuppressWarnings("unchecked")
ThreadLocal<Object> key = (ThreadLocal<Object>) e.get();
if (key != null) { if (key != null) {
Object value = key.childValue(e.value); Object value = key.childValue(e.value);
Entry c = new Entry(key, value); Entry c = new Entry(key, value);
...@@ -372,7 +376,7 @@ public class ThreadLocal<T> { ...@@ -372,7 +376,7 @@ public class ThreadLocal<T> {
* @param key the thread local object * @param key the thread local object
* @return the entry associated with key, or null if no such * @return the entry associated with key, or null if no such
*/ */
private Entry getEntry(ThreadLocal key) { private Entry getEntry(ThreadLocal<?> key) {
int i = key.threadLocalHashCode & (table.length - 1); int i = key.threadLocalHashCode & (table.length - 1);
Entry e = table[i]; Entry e = table[i];
if (e != null && e.get() == key) if (e != null && e.get() == key)
...@@ -390,12 +394,12 @@ public class ThreadLocal<T> { ...@@ -390,12 +394,12 @@ public class ThreadLocal<T> {
* @param e the entry at table[i] * @param e the entry at table[i]
* @return the entry associated with key, or null if no such * @return the entry associated with key, or null if no such
*/ */
private Entry getEntryAfterMiss(ThreadLocal key, int i, Entry e) { private Entry getEntryAfterMiss(ThreadLocal<?> key, int i, Entry e) {
Entry[] tab = table; Entry[] tab = table;
int len = tab.length; int len = tab.length;
while (e != null) { while (e != null) {
ThreadLocal k = e.get(); ThreadLocal<?> k = e.get();
if (k == key) if (k == key)
return e; return e;
if (k == null) if (k == null)
...@@ -413,7 +417,7 @@ public class ThreadLocal<T> { ...@@ -413,7 +417,7 @@ public class ThreadLocal<T> {
* @param key the thread local object * @param key the thread local object
* @param value the value to be set * @param value the value to be set
*/ */
private void set(ThreadLocal key, Object value) { private void set(ThreadLocal<?> key, Object value) {
// We don't use a fast path as with get() because it is at // We don't use a fast path as with get() because it is at
// least as common to use set() to create new entries as // least as common to use set() to create new entries as
...@@ -427,7 +431,7 @@ public class ThreadLocal<T> { ...@@ -427,7 +431,7 @@ public class ThreadLocal<T> {
for (Entry e = tab[i]; for (Entry e = tab[i];
e != null; e != null;
e = tab[i = nextIndex(i, len)]) { e = tab[i = nextIndex(i, len)]) {
ThreadLocal k = e.get(); ThreadLocal<?> k = e.get();
if (k == key) { if (k == key) {
e.value = value; e.value = value;
...@@ -449,7 +453,7 @@ public class ThreadLocal<T> { ...@@ -449,7 +453,7 @@ public class ThreadLocal<T> {
/** /**
* Remove the entry for key. * Remove the entry for key.
*/ */
private void remove(ThreadLocal key) { private void remove(ThreadLocal<?> key) {
Entry[] tab = table; Entry[] tab = table;
int len = tab.length; int len = tab.length;
int i = key.threadLocalHashCode & (len-1); int i = key.threadLocalHashCode & (len-1);
...@@ -479,7 +483,7 @@ public class ThreadLocal<T> { ...@@ -479,7 +483,7 @@ public class ThreadLocal<T> {
* @param staleSlot index of the first stale entry encountered while * @param staleSlot index of the first stale entry encountered while
* searching for key. * searching for key.
*/ */
private void replaceStaleEntry(ThreadLocal key, Object value, private void replaceStaleEntry(ThreadLocal<?> key, Object value,
int staleSlot) { int staleSlot) {
Entry[] tab = table; Entry[] tab = table;
int len = tab.length; int len = tab.length;
...@@ -501,7 +505,7 @@ public class ThreadLocal<T> { ...@@ -501,7 +505,7 @@ public class ThreadLocal<T> {
for (int i = nextIndex(staleSlot, len); for (int i = nextIndex(staleSlot, len);
(e = tab[i]) != null; (e = tab[i]) != null;
i = nextIndex(i, len)) { i = nextIndex(i, len)) {
ThreadLocal k = e.get(); ThreadLocal<?> k = e.get();
// If we find key, then we need to swap it // If we find key, then we need to swap it
// with the stale entry to maintain hash table order. // with the stale entry to maintain hash table order.
...@@ -563,7 +567,7 @@ public class ThreadLocal<T> { ...@@ -563,7 +567,7 @@ public class ThreadLocal<T> {
for (i = nextIndex(staleSlot, len); for (i = nextIndex(staleSlot, len);
(e = tab[i]) != null; (e = tab[i]) != null;
i = nextIndex(i, len)) { i = nextIndex(i, len)) {
ThreadLocal k = e.get(); ThreadLocal<?> k = e.get();
if (k == null) { if (k == null) {
e.value = null; e.value = null;
tab[i] = null; tab[i] = null;
...@@ -650,7 +654,7 @@ public class ThreadLocal<T> { ...@@ -650,7 +654,7 @@ public class ThreadLocal<T> {
for (int j = 0; j < oldLen; ++j) { for (int j = 0; j < oldLen; ++j) {
Entry e = oldTab[j]; Entry e = oldTab[j];
if (e != null) { if (e != null) {
ThreadLocal k = e.get(); ThreadLocal<?> k = e.get();
if (k == null) { if (k == null) {
e.value = null; // Help the GC e.value = null; // Help the GC
} else { } else {
......
...@@ -40,7 +40,8 @@ class Void { ...@@ -40,7 +40,8 @@ class Void {
* The {@code Class} object representing the pseudo-type corresponding to * The {@code Class} object representing the pseudo-type corresponding to
* the keyword {@code void}. * the keyword {@code void}.
*/ */
public static final Class<Void> TYPE = Class.getPrimitiveClass("void"); @SuppressWarnings("unchecked")
public static final Class<Void> TYPE = (Class<Void>) Class.getPrimitiveClass("void");
/* /*
* The Void class cannot be instantiated. * The Void class cannot be instantiated.
......
...@@ -72,6 +72,10 @@ public final class HttpCookie implements Cloneable { ...@@ -72,6 +72,10 @@ public final class HttpCookie implements Cloneable {
private boolean httpOnly; // HttpOnly ... i.e. not accessible to scripts private boolean httpOnly; // HttpOnly ... i.e. not accessible to scripts
private int version = 1; // Version=1 ... RFC 2965 style private int version = 1; // Version=1 ... RFC 2965 style
// The original header this cookie was consructed from, if it was
// constructed by parsing a header, otherwise null.
private final String header;
// Hold the creation time (in seconds) of the http cookie for later // Hold the creation time (in seconds) of the http cookie for later
// expiration calculation // expiration calculation
private final long whenCreated; private final long whenCreated;
...@@ -128,6 +132,10 @@ public final class HttpCookie implements Cloneable { ...@@ -128,6 +132,10 @@ public final class HttpCookie implements Cloneable {
* @see #setVersion * @see #setVersion
*/ */
public HttpCookie(String name, String value) { public HttpCookie(String name, String value) {
this(name, value, null /*header*/);
}
private HttpCookie(String name, String value, String header) {
name = name.trim(); name = name.trim();
if (name.length() == 0 || !isToken(name) || isReserved(name)) { if (name.length() == 0 || !isToken(name) || isReserved(name)) {
throw new IllegalArgumentException("Illegal cookie name"); throw new IllegalArgumentException("Illegal cookie name");
...@@ -140,6 +148,7 @@ public final class HttpCookie implements Cloneable { ...@@ -140,6 +148,7 @@ public final class HttpCookie implements Cloneable {
whenCreated = System.currentTimeMillis(); whenCreated = System.currentTimeMillis();
portlist = null; portlist = null;
this.header = header;
} }
/** /**
...@@ -163,6 +172,15 @@ public final class HttpCookie implements Cloneable { ...@@ -163,6 +172,15 @@ public final class HttpCookie implements Cloneable {
* if the header string is {@code null} * if the header string is {@code null}
*/ */
public static List<HttpCookie> parse(String header) { public static List<HttpCookie> parse(String header) {
return parse(header, false);
}
// Private version of parse() that will store the original header used to
// create the cookie, in the cookie itself. This can be useful for filtering
// Set-Cookie[2] headers, using the internal parsing logic defined in this
// class.
private static List<HttpCookie> parse(String header, boolean retainHeader) {
int version = guessCookieVersion(header); int version = guessCookieVersion(header);
// if header start with set-cookie or set-cookie2, strip it off // if header start with set-cookie or set-cookie2, strip it off
...@@ -178,7 +196,7 @@ public final class HttpCookie implements Cloneable { ...@@ -178,7 +196,7 @@ public final class HttpCookie implements Cloneable {
// so the parse logic is slightly different // so the parse logic is slightly different
if (version == 0) { if (version == 0) {
// Netscape draft cookie // Netscape draft cookie
HttpCookie cookie = parseInternal(header); HttpCookie cookie = parseInternal(header, retainHeader);
cookie.setVersion(0); cookie.setVersion(0);
cookies.add(cookie); cookies.add(cookie);
} else { } else {
...@@ -187,7 +205,7 @@ public final class HttpCookie implements Cloneable { ...@@ -187,7 +205,7 @@ public final class HttpCookie implements Cloneable {
// it'll separate them with comma // it'll separate them with comma
List<String> cookieStrings = splitMultiCookies(header); List<String> cookieStrings = splitMultiCookies(header);
for (String cookieStr : cookieStrings) { for (String cookieStr : cookieStrings) {
HttpCookie cookie = parseInternal(cookieStr); HttpCookie cookie = parseInternal(cookieStr, retainHeader);
cookie.setVersion(1); cookie.setVersion(1);
cookies.add(cookie); cookies.add(cookie);
} }
...@@ -804,7 +822,8 @@ public final class HttpCookie implements Cloneable { ...@@ -804,7 +822,8 @@ public final class HttpCookie implements Cloneable {
* @throws IllegalArgumentException * @throws IllegalArgumentException
* if header string violates the cookie specification * if header string violates the cookie specification
*/ */
private static HttpCookie parseInternal(String header) private static HttpCookie parseInternal(String header,
boolean retainHeader)
{ {
HttpCookie cookie = null; HttpCookie cookie = null;
String namevaluePair = null; String namevaluePair = null;
...@@ -819,7 +838,13 @@ public final class HttpCookie implements Cloneable { ...@@ -819,7 +838,13 @@ public final class HttpCookie implements Cloneable {
if (index != -1) { if (index != -1) {
String name = namevaluePair.substring(0, index).trim(); String name = namevaluePair.substring(0, index).trim();
String value = namevaluePair.substring(index + 1).trim(); String value = namevaluePair.substring(index + 1).trim();
cookie = new HttpCookie(name, stripOffSurroundingQuote(value)); if (retainHeader)
cookie = new HttpCookie(name,
stripOffSurroundingQuote(value),
header);
else
cookie = new HttpCookie(name,
stripOffSurroundingQuote(value));
} else { } else {
// no "=" in name-value pair; it's an error // no "=" in name-value pair; it's an error
throw new IllegalArgumentException("Invalid cookie name-value pair"); throw new IllegalArgumentException("Invalid cookie name-value pair");
...@@ -972,6 +997,28 @@ public final class HttpCookie implements Cloneable { ...@@ -972,6 +997,28 @@ public final class HttpCookie implements Cloneable {
} }
} }
static {
sun.misc.SharedSecrets.setJavaNetHttpCookieAccess(
new sun.misc.JavaNetHttpCookieAccess() {
public List<HttpCookie> parse(String header) {
return HttpCookie.parse(header, true);
}
public String header(HttpCookie cookie) {
return cookie.header;
}
}
);
}
/*
* Returns the original header this cookie was consructed from, if it was
* constructed by parsing a header, otherwise null.
*/
private String header() {
return header;
}
/* /*
* Constructs a string representation of this cookie. The string format is * Constructs a string representation of this cookie. The string format is
* as Netscape spec, but without leading "Cookie:" token. * as Netscape spec, but without leading "Cookie:" token.
......
...@@ -373,11 +373,13 @@ public abstract class FileSystemProvider { ...@@ -373,11 +373,13 @@ public abstract class FileSystemProvider {
{ {
if (options.length > 0) { if (options.length > 0) {
for (OpenOption opt: options) { for (OpenOption opt: options) {
if (opt != StandardOpenOption.READ) // All OpenOption values except for APPEND and WRITE are allowed
if (opt == StandardOpenOption.APPEND ||
opt == StandardOpenOption.WRITE)
throw new UnsupportedOperationException("'" + opt + "' not allowed"); throw new UnsupportedOperationException("'" + opt + "' not allowed");
} }
} }
return Channels.newInputStream(Files.newByteChannel(path)); return Channels.newInputStream(Files.newByteChannel(path, options));
} }
/** /**
......
...@@ -737,10 +737,6 @@ public final class Locale implements Cloneable, Serializable { ...@@ -737,10 +737,6 @@ public final class Locale implements Cloneable, Serializable {
*/ */
public static Locale getDefault() { public static Locale getDefault() {
// do not synchronize this method - see 4071298 // do not synchronize this method - see 4071298
// it's OK if more than one default locale happens to be created
if (defaultLocale == null) {
initDefault();
}
return defaultLocale; return defaultLocale;
} }
...@@ -762,16 +758,23 @@ public final class Locale implements Cloneable, Serializable { ...@@ -762,16 +758,23 @@ public final class Locale implements Cloneable, Serializable {
*/ */
public static Locale getDefault(Locale.Category category) { public static Locale getDefault(Locale.Category category) {
// do not synchronize this method - see 4071298 // do not synchronize this method - see 4071298
// it's OK if more than one default locale happens to be created
switch (category) { switch (category) {
case DISPLAY: case DISPLAY:
if (defaultDisplayLocale == null) { if (defaultDisplayLocale == null) {
initDefault(category); synchronized(Locale.class) {
if (defaultDisplayLocale == null) {
defaultDisplayLocale = initDefault(category);
}
}
} }
return defaultDisplayLocale; return defaultDisplayLocale;
case FORMAT: case FORMAT:
if (defaultFormatLocale == null) { if (defaultFormatLocale == null) {
initDefault(category); synchronized(Locale.class) {
if (defaultFormatLocale == null) {
defaultFormatLocale = initDefault(category);
}
}
} }
return defaultFormatLocale; return defaultFormatLocale;
default: default:
...@@ -780,7 +783,7 @@ public final class Locale implements Cloneable, Serializable { ...@@ -780,7 +783,7 @@ public final class Locale implements Cloneable, Serializable {
return getDefault(); return getDefault();
} }
private static void initDefault() { private static Locale initDefault() {
String language, region, script, country, variant; String language, region, script, country, variant;
language = AccessController.doPrivileged( language = AccessController.doPrivileged(
new GetPropertyAction("user.language", "en")); new GetPropertyAction("user.language", "en"));
...@@ -806,16 +809,12 @@ public final class Locale implements Cloneable, Serializable { ...@@ -806,16 +809,12 @@ public final class Locale implements Cloneable, Serializable {
variant = AccessController.doPrivileged( variant = AccessController.doPrivileged(
new GetPropertyAction("user.variant", "")); new GetPropertyAction("user.variant", ""));
} }
defaultLocale = getInstance(language, script, country, variant, null);
}
private static void initDefault(Locale.Category category) { return getInstance(language, script, country, variant, null);
// make sure defaultLocale is initialized }
if (defaultLocale == null) {
initDefault();
}
Locale defaultCategoryLocale = getInstance( private static Locale initDefault(Locale.Category category) {
return getInstance(
AccessController.doPrivileged( AccessController.doPrivileged(
new GetPropertyAction(category.languageKey, defaultLocale.getLanguage())), new GetPropertyAction(category.languageKey, defaultLocale.getLanguage())),
AccessController.doPrivileged( AccessController.doPrivileged(
...@@ -825,15 +824,6 @@ public final class Locale implements Cloneable, Serializable { ...@@ -825,15 +824,6 @@ public final class Locale implements Cloneable, Serializable {
AccessController.doPrivileged( AccessController.doPrivileged(
new GetPropertyAction(category.variantKey, defaultLocale.getVariant())), new GetPropertyAction(category.variantKey, defaultLocale.getVariant())),
null); null);
switch (category) {
case DISPLAY:
defaultDisplayLocale = defaultCategoryLocale;
break;
case FORMAT:
defaultFormatLocale = defaultCategoryLocale;
break;
}
} }
/** /**
...@@ -1916,9 +1906,9 @@ public final class Locale implements Cloneable, Serializable { ...@@ -1916,9 +1906,9 @@ public final class Locale implements Cloneable, Serializable {
*/ */
private transient volatile int hashCodeValue = 0; private transient volatile int hashCodeValue = 0;
private static Locale defaultLocale = null; private volatile static Locale defaultLocale = initDefault();
private static Locale defaultDisplayLocale = null; private volatile static Locale defaultDisplayLocale = null;
private static Locale defaultFormatLocale = null; private volatile static Locale defaultFormatLocale = null;
/** /**
* Return an array of the display names of the variant. * Return an array of the display names of the variant.
......
...@@ -131,8 +131,9 @@ public class ArrayBlockingQueue<E> extends AbstractQueue<E> ...@@ -131,8 +131,9 @@ public class ArrayBlockingQueue<E> extends AbstractQueue<E>
/** /**
* Returns item at index i. * Returns item at index i.
*/ */
@SuppressWarnings("unchecked")
final E itemAt(int i) { final E itemAt(int i) {
return this.<E>cast(items[i]); return (E) items[i];
} }
/** /**
...@@ -162,7 +163,8 @@ public class ArrayBlockingQueue<E> extends AbstractQueue<E> ...@@ -162,7 +163,8 @@ public class ArrayBlockingQueue<E> extends AbstractQueue<E>
*/ */
private E extract() { private E extract() {
final Object[] items = this.items; final Object[] items = this.items;
E x = this.<E>cast(items[takeIndex]); @SuppressWarnings("unchecked")
E x = (E) items[takeIndex];
items[takeIndex] = null; items[takeIndex] = null;
takeIndex = inc(takeIndex); takeIndex = inc(takeIndex);
--count; --count;
...@@ -647,7 +649,9 @@ public class ArrayBlockingQueue<E> extends AbstractQueue<E> ...@@ -647,7 +649,9 @@ public class ArrayBlockingQueue<E> extends AbstractQueue<E>
int n = 0; int n = 0;
int max = count; int max = count;
while (n < max) { while (n < max) {
c.add(this.<E>cast(items[i])); @SuppressWarnings("unchecked")
E x = (E) items[i];
c.add(x);
items[i] = null; items[i] = null;
i = inc(i); i = inc(i);
++n; ++n;
...@@ -684,7 +688,9 @@ public class ArrayBlockingQueue<E> extends AbstractQueue<E> ...@@ -684,7 +688,9 @@ public class ArrayBlockingQueue<E> extends AbstractQueue<E>
int n = 0; int n = 0;
int max = (maxElements < count) ? maxElements : count; int max = (maxElements < count) ? maxElements : count;
while (n < max) { while (n < max) {
c.add(this.<E>cast(items[i])); @SuppressWarnings("unchecked")
E x = (E) items[i];
c.add(x);
items[i] = null; items[i] = null;
i = inc(i); i = inc(i);
++n; ++n;
......
...@@ -37,9 +37,6 @@ package java.util.concurrent; ...@@ -37,9 +37,6 @@ package java.util.concurrent;
import java.util.concurrent.locks.*; import java.util.concurrent.locks.*;
import java.util.*; import java.util.*;
import java.io.Serializable; import java.io.Serializable;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/** /**
* A hash table supporting full concurrency of retrievals and * A hash table supporting full concurrency of retrievals and
...@@ -228,7 +225,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -228,7 +225,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = HashEntry.class; Class<?> k = HashEntry.class;
nextOffset = UNSAFE.objectFieldOffset nextOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("next")); (k.getDeclaredField("next"));
} catch (Exception e) { } catch (Exception e) {
...@@ -433,7 +430,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -433,7 +430,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
int newCapacity = oldCapacity << 1; int newCapacity = oldCapacity << 1;
threshold = (int)(newCapacity * loadFactor); threshold = (int)(newCapacity * loadFactor);
HashEntry<K,V>[] newTable = HashEntry<K,V>[] newTable =
(HashEntry<K,V>[]) new HashEntry[newCapacity]; (HashEntry<K,V>[]) new HashEntry<?,?>[newCapacity];
int sizeMask = newCapacity - 1; int sizeMask = newCapacity - 1;
for (int i = 0; i < oldCapacity ; i++) { for (int i = 0; i < oldCapacity ; i++) {
HashEntry<K,V> e = oldTable[i]; HashEntry<K,V> e = oldTable[i];
...@@ -677,7 +674,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -677,7 +674,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
int cap = proto.table.length; int cap = proto.table.length;
float lf = proto.loadFactor; float lf = proto.loadFactor;
int threshold = (int)(cap * lf); int threshold = (int)(cap * lf);
HashEntry<K,V>[] tab = (HashEntry<K,V>[])new HashEntry[cap]; HashEntry<K,V>[] tab = (HashEntry<K,V>[])new HashEntry<?,?>[cap];
if ((seg = (Segment<K,V>)UNSAFE.getObjectVolatile(ss, u)) if ((seg = (Segment<K,V>)UNSAFE.getObjectVolatile(ss, u))
== null) { // recheck == null) { // recheck
Segment<K,V> s = new Segment<K,V>(lf, threshold, tab); Segment<K,V> s = new Segment<K,V>(lf, threshold, tab);
...@@ -694,7 +691,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -694,7 +691,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
// Hash-based segment and entry accesses // Hash-based segment and entry accesses
/** /**
* Get the segment for the given hash * Gets the segment for the given hash code.
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private Segment<K,V> segmentForHash(int h) { private Segment<K,V> segmentForHash(int h) {
...@@ -703,7 +700,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -703,7 +700,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
} }
/** /**
* Gets the table entry for the given segment and hash * Gets the table entry for the given segment and hash code.
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
static final <K,V> HashEntry<K,V> entryForHash(Segment<K,V> seg, int h) { static final <K,V> HashEntry<K,V> entryForHash(Segment<K,V> seg, int h) {
...@@ -758,8 +755,8 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -758,8 +755,8 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
// create segments and segments[0] // create segments and segments[0]
Segment<K,V> s0 = Segment<K,V> s0 =
new Segment<K,V>(loadFactor, (int)(cap * loadFactor), new Segment<K,V>(loadFactor, (int)(cap * loadFactor),
(HashEntry<K,V>[])new HashEntry[cap]); (HashEntry<K,V>[])new HashEntry<?,?>[cap]);
Segment<K,V>[] ss = (Segment<K,V>[])new Segment[ssize]; Segment<K,V>[] ss = (Segment<K,V>[])new Segment<?,?>[ssize];
UNSAFE.putOrderedObject(ss, SBASE, s0); // ordered write of segments[0] UNSAFE.putOrderedObject(ss, SBASE, s0); // ordered write of segments[0]
this.segments = ss; this.segments = ss;
} }
...@@ -916,6 +913,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -916,6 +913,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
* *
* @throws NullPointerException if the specified key is null * @throws NullPointerException if the specified key is null
*/ */
@SuppressWarnings("unchecked")
public V get(Object key) { public V get(Object key) {
Segment<K,V> s; // manually integrate access methods to reduce overhead Segment<K,V> s; // manually integrate access methods to reduce overhead
HashEntry<K,V>[] tab; HashEntry<K,V>[] tab;
...@@ -1026,7 +1024,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -1026,7 +1024,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
* full compatibility with class {@link java.util.Hashtable}, * full compatibility with class {@link java.util.Hashtable},
* which supported this method prior to introduction of the * which supported this method prior to introduction of the
* Java Collections framework. * Java Collections framework.
*
* @param value a value to search for * @param value a value to search for
* @return <tt>true</tt> if and only if some key maps to the * @return <tt>true</tt> if and only if some key maps to the
* <tt>value</tt> argument in this table as * <tt>value</tt> argument in this table as
...@@ -1262,7 +1260,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -1262,7 +1260,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
} }
/** /**
* Set nextEntry to first node of next non-empty table * Sets nextEntry to first node of next non-empty table
* (in backwards order, to simplify checks). * (in backwards order, to simplify checks).
*/ */
final void advance() { final void advance() {
...@@ -1326,12 +1324,14 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -1326,12 +1324,14 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
final class WriteThroughEntry final class WriteThroughEntry
extends AbstractMap.SimpleEntry<K,V> extends AbstractMap.SimpleEntry<K,V>
{ {
static final long serialVersionUID = 7249069246763182397L;
WriteThroughEntry(K k, V v) { WriteThroughEntry(K k, V v) {
super(k,v); super(k,v);
} }
/** /**
* Set our entry's value and write through to the map. The * Sets our entry's value and writes through to the map. The
* value to return is somewhat arbitrary here. Since a * value to return is somewhat arbitrary here. Since a
* WriteThroughEntry does not necessarily track asynchronous * WriteThroughEntry does not necessarily track asynchronous
* changes, the most recent "previous" value could be * changes, the most recent "previous" value could be
...@@ -1427,15 +1427,16 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -1427,15 +1427,16 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
/* ---------------- Serialization Support -------------- */ /* ---------------- Serialization Support -------------- */
/** /**
* Save the state of the <tt>ConcurrentHashMap</tt> instance to a * Saves the state of the <tt>ConcurrentHashMap</tt> instance to a
* stream (i.e., serialize it). * stream (i.e., serializes it).
* @param s the stream * @param s the stream
* @serialData * @serialData
* the key (Object) and value (Object) * the key (Object) and value (Object)
* for each key-value mapping, followed by a null pair. * for each key-value mapping, followed by a null pair.
* The key-value mappings are emitted in no particular order. * The key-value mappings are emitted in no particular order.
*/ */
private void writeObject(java.io.ObjectOutputStream s) throws IOException { private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException {
// force all segments for serialization compatibility // force all segments for serialization compatibility
for (int k = 0; k < segments.length; ++k) for (int k = 0; k < segments.length; ++k)
ensureSegment(k); ensureSegment(k);
...@@ -1463,13 +1464,13 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -1463,13 +1464,13 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
} }
/** /**
* Reconstitute the <tt>ConcurrentHashMap</tt> instance from a * Reconstitutes the <tt>ConcurrentHashMap</tt> instance from a
* stream (i.e., deserialize it). * stream (i.e., deserializes it).
* @param s the stream * @param s the stream
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private void readObject(java.io.ObjectInputStream s) private void readObject(java.io.ObjectInputStream s)
throws IOException, ClassNotFoundException { throws java.io.IOException, ClassNotFoundException {
s.defaultReadObject(); s.defaultReadObject();
// Re-initialize segments to be minimally sized, and let grow. // Re-initialize segments to be minimally sized, and let grow.
...@@ -1479,7 +1480,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -1479,7 +1480,7 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
Segment<K,V> seg = segments[k]; Segment<K,V> seg = segments[k];
if (seg != null) { if (seg != null) {
seg.threshold = (int)(cap * seg.loadFactor); seg.threshold = (int)(cap * seg.loadFactor);
seg.table = (HashEntry<K,V>[]) new HashEntry[cap]; seg.table = (HashEntry<K,V>[]) new HashEntry<?,?>[cap];
} }
} }
...@@ -1504,8 +1505,8 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> ...@@ -1504,8 +1505,8 @@ public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
int ss, ts; int ss, ts;
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class tc = HashEntry[].class; Class<?> tc = HashEntry[].class;
Class sc = Segment[].class; Class<?> sc = Segment[].class;
TBASE = UNSAFE.arrayBaseOffset(tc); TBASE = UNSAFE.arrayBaseOffset(tc);
SBASE = UNSAFE.arrayBaseOffset(sc); SBASE = UNSAFE.arrayBaseOffset(sc);
ts = UNSAFE.arrayIndexScale(tc); ts = UNSAFE.arrayIndexScale(tc);
......
...@@ -335,7 +335,7 @@ public class ConcurrentLinkedDeque<E> ...@@ -335,7 +335,7 @@ public class ConcurrentLinkedDeque<E>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = Node.class; Class<?> k = Node.class;
prevOffset = UNSAFE.objectFieldOffset prevOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("prev")); (k.getDeclaredField("prev"));
itemOffset = UNSAFE.objectFieldOffset itemOffset = UNSAFE.objectFieldOffset
...@@ -1457,7 +1457,7 @@ public class ConcurrentLinkedDeque<E> ...@@ -1457,7 +1457,7 @@ public class ConcurrentLinkedDeque<E>
NEXT_TERMINATOR.prev = NEXT_TERMINATOR; NEXT_TERMINATOR.prev = NEXT_TERMINATOR;
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = ConcurrentLinkedDeque.class; Class<?> k = ConcurrentLinkedDeque.class;
headOffset = UNSAFE.objectFieldOffset headOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("head")); (k.getDeclaredField("head"));
tailOffset = UNSAFE.objectFieldOffset tailOffset = UNSAFE.objectFieldOffset
......
...@@ -208,7 +208,7 @@ public class ConcurrentLinkedQueue<E> extends AbstractQueue<E> ...@@ -208,7 +208,7 @@ public class ConcurrentLinkedQueue<E> extends AbstractQueue<E>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = Node.class; Class<?> k = Node.class;
itemOffset = UNSAFE.objectFieldOffset itemOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("item")); (k.getDeclaredField("item"));
nextOffset = UNSAFE.objectFieldOffset nextOffset = UNSAFE.objectFieldOffset
...@@ -823,7 +823,7 @@ public class ConcurrentLinkedQueue<E> extends AbstractQueue<E> ...@@ -823,7 +823,7 @@ public class ConcurrentLinkedQueue<E> extends AbstractQueue<E>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = ConcurrentLinkedQueue.class; Class<?> k = ConcurrentLinkedQueue.class;
headOffset = UNSAFE.objectFieldOffset headOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("head")); (k.getDeclaredField("head"));
tailOffset = UNSAFE.objectFieldOffset tailOffset = UNSAFE.objectFieldOffset
......
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
package java.util.concurrent; package java.util.concurrent;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.*;
/** /**
* A scalable concurrent {@link ConcurrentNavigableMap} implementation. * A scalable concurrent {@link ConcurrentNavigableMap} implementation.
...@@ -90,6 +89,7 @@ import java.util.concurrent.atomic.*; ...@@ -90,6 +89,7 @@ import java.util.concurrent.atomic.*;
* @param <V> the type of mapped values * @param <V> the type of mapped values
* @since 1.6 * @since 1.6
*/ */
@SuppressWarnings("unchecked")
public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
implements ConcurrentNavigableMap<K,V>, implements ConcurrentNavigableMap<K,V>,
Cloneable, Cloneable,
...@@ -352,11 +352,11 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -352,11 +352,11 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
private transient int randomSeed; private transient int randomSeed;
/** Lazily initialized key set */ /** Lazily initialized key set */
private transient KeySet keySet; private transient KeySet<K> keySet;
/** Lazily initialized entry set */ /** Lazily initialized entry set */
private transient EntrySet entrySet; private transient EntrySet<K,V> entrySet;
/** Lazily initialized values collection */ /** Lazily initialized values collection */
private transient Values values; private transient Values<V> values;
/** Lazily initialized descending key set */ /** Lazily initialized descending key set */
private transient ConcurrentNavigableMap<K,V> descendingMap; private transient ConcurrentNavigableMap<K,V> descendingMap;
...@@ -517,7 +517,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -517,7 +517,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = Node.class; Class<?> k = Node.class;
valueOffset = UNSAFE.objectFieldOffset valueOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("value")); (k.getDeclaredField("value"));
nextOffset = UNSAFE.objectFieldOffset nextOffset = UNSAFE.objectFieldOffset
...@@ -597,7 +597,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -597,7 +597,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = Index.class; Class<?> k = Index.class;
rightOffset = UNSAFE.objectFieldOffset rightOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("right")); (k.getDeclaredField("right"));
} catch (Exception e) { } catch (Exception e) {
...@@ -933,7 +933,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -933,7 +933,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
* direction. * direction.
*/ */
level = max + 1; level = max + 1;
Index<K,V>[] idxs = (Index<K,V>[])new Index[level+1]; Index<K,V>[] idxs = (Index<K,V>[])new Index<?,?>[level+1];
Index<K,V> idx = null; Index<K,V> idx = null;
for (int i = 1; i <= level; ++i) for (int i = 1; i <= level; ++i)
idxs[i] = idx = new Index<K,V>(z, idx, null); idxs[i] = idx = new Index<K,V>(z, idx, null);
...@@ -1436,16 +1436,16 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -1436,16 +1436,16 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
* @return a shallow copy of this map * @return a shallow copy of this map
*/ */
public ConcurrentSkipListMap<K,V> clone() { public ConcurrentSkipListMap<K,V> clone() {
ConcurrentSkipListMap<K,V> clone = null;
try { try {
clone = (ConcurrentSkipListMap<K,V>) super.clone(); @SuppressWarnings("unchecked")
ConcurrentSkipListMap<K,V> clone =
(ConcurrentSkipListMap<K,V>) super.clone();
clone.initialize();
clone.buildFromSorted(this);
return clone;
} catch (CloneNotSupportedException e) { } catch (CloneNotSupportedException e) {
throw new InternalError(); throw new InternalError();
} }
clone.initialize();
clone.buildFromSorted(this);
return clone;
} }
/** /**
...@@ -1507,7 +1507,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -1507,7 +1507,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
/* ---------------- Serialization -------------- */ /* ---------------- Serialization -------------- */
/** /**
* Save the state of this map to a stream. * Saves the state of this map to a stream (that is, serializes it).
* *
* @serialData The key (Object) and value (Object) for each * @serialData The key (Object) and value (Object) for each
* key-value mapping represented by the map, followed by * key-value mapping represented by the map, followed by
...@@ -1532,7 +1532,9 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -1532,7 +1532,9 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
} }
/** /**
* Reconstitute the map from a stream. * Reconstitutes the map from a stream (that is, deserializes it).
*
* @param s the stream
*/ */
private void readObject(final java.io.ObjectInputStream s) private void readObject(final java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException { throws java.io.IOException, ClassNotFoundException {
...@@ -1755,13 +1757,13 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -1755,13 +1757,13 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
* @return a navigable set view of the keys in this map * @return a navigable set view of the keys in this map
*/ */
public NavigableSet<K> keySet() { public NavigableSet<K> keySet() {
KeySet ks = keySet; KeySet<K> ks = keySet;
return (ks != null) ? ks : (keySet = new KeySet(this)); return (ks != null) ? ks : (keySet = new KeySet<K>(this));
} }
public NavigableSet<K> navigableKeySet() { public NavigableSet<K> navigableKeySet() {
KeySet ks = keySet; KeySet<K> ks = keySet;
return (ks != null) ? ks : (keySet = new KeySet(this)); return (ks != null) ? ks : (keySet = new KeySet<K>(this));
} }
/** /**
...@@ -1783,8 +1785,8 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -1783,8 +1785,8 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
* reflect any modifications subsequent to construction. * reflect any modifications subsequent to construction.
*/ */
public Collection<V> values() { public Collection<V> values() {
Values vs = values; Values<V> vs = values;
return (vs != null) ? vs : (values = new Values(this)); return (vs != null) ? vs : (values = new Values<V>(this));
} }
/** /**
...@@ -1812,8 +1814,8 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -1812,8 +1814,8 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
* sorted in ascending key order * sorted in ascending key order
*/ */
public Set<Map.Entry<K,V>> entrySet() { public Set<Map.Entry<K,V>> entrySet() {
EntrySet es = entrySet; EntrySet<K,V> es = entrySet;
return (es != null) ? es : (entrySet = new EntrySet(this)); return (es != null) ? es : (entrySet = new EntrySet<K,V>(this));
} }
public ConcurrentNavigableMap<K,V> descendingMap() { public ConcurrentNavigableMap<K,V> descendingMap() {
...@@ -2304,8 +2306,8 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -2304,8 +2306,8 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
static final class KeySet<E> static final class KeySet<E>
extends AbstractSet<E> implements NavigableSet<E> { extends AbstractSet<E> implements NavigableSet<E> {
private final ConcurrentNavigableMap<E,Object> m; private final ConcurrentNavigableMap<E,?> m;
KeySet(ConcurrentNavigableMap<E,Object> map) { m = map; } KeySet(ConcurrentNavigableMap<E,?> map) { m = map; }
public int size() { return m.size(); } public int size() { return m.size(); }
public boolean isEmpty() { return m.isEmpty(); } public boolean isEmpty() { return m.isEmpty(); }
public boolean contains(Object o) { return m.containsKey(o); } public boolean contains(Object o) { return m.containsKey(o); }
...@@ -2319,11 +2321,11 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -2319,11 +2321,11 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
public E first() { return m.firstKey(); } public E first() { return m.firstKey(); }
public E last() { return m.lastKey(); } public E last() { return m.lastKey(); }
public E pollFirst() { public E pollFirst() {
Map.Entry<E,Object> e = m.pollFirstEntry(); Map.Entry<E,?> e = m.pollFirstEntry();
return (e == null) ? null : e.getKey(); return (e == null) ? null : e.getKey();
} }
public E pollLast() { public E pollLast() {
Map.Entry<E,Object> e = m.pollLastEntry(); Map.Entry<E,?> e = m.pollLastEntry();
return (e == null) ? null : e.getKey(); return (e == null) ? null : e.getKey();
} }
public Iterator<E> iterator() { public Iterator<E> iterator() {
...@@ -2374,20 +2376,20 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -2374,20 +2376,20 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
return tailSet(fromElement, true); return tailSet(fromElement, true);
} }
public NavigableSet<E> descendingSet() { public NavigableSet<E> descendingSet() {
return new KeySet(m.descendingMap()); return new KeySet<E>(m.descendingMap());
} }
} }
static final class Values<E> extends AbstractCollection<E> { static final class Values<E> extends AbstractCollection<E> {
private final ConcurrentNavigableMap<Object, E> m; private final ConcurrentNavigableMap<?, E> m;
Values(ConcurrentNavigableMap<Object, E> map) { Values(ConcurrentNavigableMap<?, E> map) {
m = map; m = map;
} }
public Iterator<E> iterator() { public Iterator<E> iterator() {
if (m instanceof ConcurrentSkipListMap) if (m instanceof ConcurrentSkipListMap)
return ((ConcurrentSkipListMap<Object,E>)m).valueIterator(); return ((ConcurrentSkipListMap<?,E>)m).valueIterator();
else else
return ((SubMap<Object,E>)m).valueIterator(); return ((SubMap<?,E>)m).valueIterator();
} }
public boolean isEmpty() { public boolean isEmpty() {
return m.isEmpty(); return m.isEmpty();
...@@ -2421,14 +2423,14 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -2421,14 +2423,14 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
public boolean contains(Object o) { public boolean contains(Object o) {
if (!(o instanceof Map.Entry)) if (!(o instanceof Map.Entry))
return false; return false;
Map.Entry<K1,V1> e = (Map.Entry<K1,V1>)o; Map.Entry<?,?> e = (Map.Entry<?,?>)o;
V1 v = m.get(e.getKey()); V1 v = m.get(e.getKey());
return v != null && v.equals(e.getValue()); return v != null && v.equals(e.getValue());
} }
public boolean remove(Object o) { public boolean remove(Object o) {
if (!(o instanceof Map.Entry)) if (!(o instanceof Map.Entry))
return false; return false;
Map.Entry<K1,V1> e = (Map.Entry<K1,V1>)o; Map.Entry<?,?> e = (Map.Entry<?,?>)o;
return m.remove(e.getKey(), return m.remove(e.getKey(),
e.getValue()); e.getValue());
} }
...@@ -2568,9 +2570,9 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -2568,9 +2570,9 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
if (lo == null) if (lo == null)
return m.findFirst(); return m.findFirst();
else if (loInclusive) else if (loInclusive)
return m.findNear(lo, m.GT|m.EQ); return m.findNear(lo, GT|EQ);
else else
return m.findNear(lo, m.GT); return m.findNear(lo, GT);
} }
/** /**
...@@ -2581,9 +2583,9 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -2581,9 +2583,9 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
if (hi == null) if (hi == null)
return m.findLast(); return m.findLast();
else if (hiInclusive) else if (hiInclusive)
return m.findNear(hi, m.LT|m.EQ); return m.findNear(hi, LT|EQ);
else else
return m.findNear(hi, m.LT); return m.findNear(hi, LT);
} }
/** /**
...@@ -2665,15 +2667,15 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -2665,15 +2667,15 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
*/ */
private Map.Entry<K,V> getNearEntry(K key, int rel) { private Map.Entry<K,V> getNearEntry(K key, int rel) {
if (isDescending) { // adjust relation for direction if (isDescending) { // adjust relation for direction
if ((rel & m.LT) == 0) if ((rel & LT) == 0)
rel |= m.LT; rel |= LT;
else else
rel &= ~m.LT; rel &= ~LT;
} }
if (tooLow(key)) if (tooLow(key))
return ((rel & m.LT) != 0) ? null : lowestEntry(); return ((rel & LT) != 0) ? null : lowestEntry();
if (tooHigh(key)) if (tooHigh(key))
return ((rel & m.LT) != 0) ? highestEntry() : null; return ((rel & LT) != 0) ? highestEntry() : null;
for (;;) { for (;;) {
Node<K,V> n = m.findNear(key, rel); Node<K,V> n = m.findNear(key, rel);
if (n == null || !inBounds(n.key)) if (n == null || !inBounds(n.key))
...@@ -2688,13 +2690,13 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -2688,13 +2690,13 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
// Almost the same as getNearEntry, except for keys // Almost the same as getNearEntry, except for keys
private K getNearKey(K key, int rel) { private K getNearKey(K key, int rel) {
if (isDescending) { // adjust relation for direction if (isDescending) { // adjust relation for direction
if ((rel & m.LT) == 0) if ((rel & LT) == 0)
rel |= m.LT; rel |= LT;
else else
rel &= ~m.LT; rel &= ~LT;
} }
if (tooLow(key)) { if (tooLow(key)) {
if ((rel & m.LT) == 0) { if ((rel & LT) == 0) {
ConcurrentSkipListMap.Node<K,V> n = loNode(); ConcurrentSkipListMap.Node<K,V> n = loNode();
if (isBeforeEnd(n)) if (isBeforeEnd(n))
return n.key; return n.key;
...@@ -2702,7 +2704,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -2702,7 +2704,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
return null; return null;
} }
if (tooHigh(key)) { if (tooHigh(key)) {
if ((rel & m.LT) != 0) { if ((rel & LT) != 0) {
ConcurrentSkipListMap.Node<K,V> n = hiNode(); ConcurrentSkipListMap.Node<K,V> n = hiNode();
if (n != null) { if (n != null) {
K last = n.key; K last = n.key;
...@@ -2734,7 +2736,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -2734,7 +2736,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
public V get(Object key) { public V get(Object key) {
if (key == null) throw new NullPointerException(); if (key == null) throw new NullPointerException();
K k = (K)key; K k = (K)key;
return ((!inBounds(k)) ? null : m.get(k)); return (!inBounds(k)) ? null : m.get(k);
} }
public V put(K key, V value) { public V put(K key, V value) {
...@@ -2901,35 +2903,35 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -2901,35 +2903,35 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
/* ---------------- Relational methods -------------- */ /* ---------------- Relational methods -------------- */
public Map.Entry<K,V> ceilingEntry(K key) { public Map.Entry<K,V> ceilingEntry(K key) {
return getNearEntry(key, (m.GT|m.EQ)); return getNearEntry(key, GT|EQ);
} }
public K ceilingKey(K key) { public K ceilingKey(K key) {
return getNearKey(key, (m.GT|m.EQ)); return getNearKey(key, GT|EQ);
} }
public Map.Entry<K,V> lowerEntry(K key) { public Map.Entry<K,V> lowerEntry(K key) {
return getNearEntry(key, (m.LT)); return getNearEntry(key, LT);
} }
public K lowerKey(K key) { public K lowerKey(K key) {
return getNearKey(key, (m.LT)); return getNearKey(key, LT);
} }
public Map.Entry<K,V> floorEntry(K key) { public Map.Entry<K,V> floorEntry(K key) {
return getNearEntry(key, (m.LT|m.EQ)); return getNearEntry(key, LT|EQ);
} }
public K floorKey(K key) { public K floorKey(K key) {
return getNearKey(key, (m.LT|m.EQ)); return getNearKey(key, LT|EQ);
} }
public Map.Entry<K,V> higherEntry(K key) { public Map.Entry<K,V> higherEntry(K key) {
return getNearEntry(key, (m.GT)); return getNearEntry(key, GT);
} }
public K higherKey(K key) { public K higherKey(K key) {
return getNearKey(key, (m.GT)); return getNearKey(key, GT);
} }
public K firstKey() { public K firstKey() {
...@@ -2960,22 +2962,22 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -2960,22 +2962,22 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
public NavigableSet<K> keySet() { public NavigableSet<K> keySet() {
KeySet<K> ks = keySetView; KeySet<K> ks = keySetView;
return (ks != null) ? ks : (keySetView = new KeySet(this)); return (ks != null) ? ks : (keySetView = new KeySet<K>(this));
} }
public NavigableSet<K> navigableKeySet() { public NavigableSet<K> navigableKeySet() {
KeySet<K> ks = keySetView; KeySet<K> ks = keySetView;
return (ks != null) ? ks : (keySetView = new KeySet(this)); return (ks != null) ? ks : (keySetView = new KeySet<K>(this));
} }
public Collection<V> values() { public Collection<V> values() {
Collection<V> vs = valuesView; Collection<V> vs = valuesView;
return (vs != null) ? vs : (valuesView = new Values(this)); return (vs != null) ? vs : (valuesView = new Values<V>(this));
} }
public Set<Map.Entry<K,V>> entrySet() { public Set<Map.Entry<K,V>> entrySet() {
Set<Map.Entry<K,V>> es = entrySetView; Set<Map.Entry<K,V>> es = entrySetView;
return (es != null) ? es : (entrySetView = new EntrySet(this)); return (es != null) ? es : (entrySetView = new EntrySet<K,V>(this));
} }
public NavigableSet<K> descendingKeySet() { public NavigableSet<K> descendingKeySet() {
...@@ -3109,7 +3111,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> ...@@ -3109,7 +3111,7 @@ public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = ConcurrentSkipListMap.class; Class<?> k = ConcurrentSkipListMap.class;
headOffset = UNSAFE.objectFieldOffset headOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("head")); (k.getDeclaredField("head"));
} catch (Exception e) { } catch (Exception e) {
......
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
package java.util.concurrent; package java.util.concurrent;
import java.util.*; import java.util.*;
import sun.misc.Unsafe;
/** /**
* A scalable concurrent {@link NavigableSet} implementation based on * A scalable concurrent {@link NavigableSet} implementation based on
...@@ -158,15 +157,15 @@ public class ConcurrentSkipListSet<E> ...@@ -158,15 +157,15 @@ public class ConcurrentSkipListSet<E>
* @return a shallow copy of this set * @return a shallow copy of this set
*/ */
public ConcurrentSkipListSet<E> clone() { public ConcurrentSkipListSet<E> clone() {
ConcurrentSkipListSet<E> clone = null;
try { try {
clone = (ConcurrentSkipListSet<E>) super.clone(); @SuppressWarnings("unchecked")
clone.setMap(new ConcurrentSkipListMap(m)); ConcurrentSkipListSet<E> clone =
(ConcurrentSkipListSet<E>) super.clone();
clone.setMap(new ConcurrentSkipListMap<E,Object>(m));
return clone;
} catch (CloneNotSupportedException e) { } catch (CloneNotSupportedException e) {
throw new InternalError(); throw new InternalError();
} }
return clone;
} }
/* ---------------- Set operations -------------- */ /* ---------------- Set operations -------------- */
...@@ -322,8 +321,8 @@ public class ConcurrentSkipListSet<E> ...@@ -322,8 +321,8 @@ public class ConcurrentSkipListSet<E>
public boolean removeAll(Collection<?> c) { public boolean removeAll(Collection<?> c) {
// Override AbstractSet version to avoid unnecessary call to size() // Override AbstractSet version to avoid unnecessary call to size()
boolean modified = false; boolean modified = false;
for (Iterator<?> i = c.iterator(); i.hasNext(); ) for (Object e : c)
if (remove(i.next())) if (remove(e))
modified = true; modified = true;
return modified; return modified;
} }
...@@ -468,7 +467,7 @@ public class ConcurrentSkipListSet<E> ...@@ -468,7 +467,7 @@ public class ConcurrentSkipListSet<E>
* @return a reverse order view of this set * @return a reverse order view of this set
*/ */
public NavigableSet<E> descendingSet() { public NavigableSet<E> descendingSet() {
return new ConcurrentSkipListSet(m.descendingMap()); return new ConcurrentSkipListSet<E>(m.descendingMap());
} }
// Support for resetting map in clone // Support for resetting map in clone
...@@ -481,7 +480,7 @@ public class ConcurrentSkipListSet<E> ...@@ -481,7 +480,7 @@ public class ConcurrentSkipListSet<E>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = ConcurrentSkipListSet.class; Class<?> k = ConcurrentSkipListSet.class;
mapOffset = UNSAFE.objectFieldOffset mapOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("m")); (k.getDeclaredField("m"));
} catch (Exception e) { } catch (Exception e) {
......
...@@ -36,7 +36,6 @@ ...@@ -36,7 +36,6 @@
package java.util.concurrent; package java.util.concurrent;
import java.util.*; import java.util.*;
import java.util.concurrent.locks.*; import java.util.concurrent.locks.*;
import sun.misc.Unsafe;
/** /**
* A thread-safe variant of {@link java.util.ArrayList} in which all mutative * A thread-safe variant of {@link java.util.ArrayList} in which all mutative
...@@ -281,9 +280,11 @@ public class CopyOnWriteArrayList<E> ...@@ -281,9 +280,11 @@ public class CopyOnWriteArrayList<E>
*/ */
public Object clone() { public Object clone() {
try { try {
CopyOnWriteArrayList c = (CopyOnWriteArrayList)(super.clone()); @SuppressWarnings("unchecked")
c.resetLock(); CopyOnWriteArrayList<E> clone =
return c; (CopyOnWriteArrayList<E>) super.clone();
clone.resetLock();
return clone;
} catch (CloneNotSupportedException e) { } catch (CloneNotSupportedException e) {
// this shouldn't happen, since we are Cloneable // this shouldn't happen, since we are Cloneable
throw new InternalError(); throw new InternalError();
...@@ -1330,7 +1331,7 @@ public class CopyOnWriteArrayList<E> ...@@ -1330,7 +1331,7 @@ public class CopyOnWriteArrayList<E>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = CopyOnWriteArrayList.class; Class<?> k = CopyOnWriteArrayList.class;
lockOffset = UNSAFE.objectFieldOffset lockOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("lock")); (k.getDeclaredField("lock"));
} catch (Exception e) { } catch (Exception e) {
......
...@@ -531,7 +531,7 @@ public class DelayQueue<E extends Delayed> extends AbstractQueue<E> ...@@ -531,7 +531,7 @@ public class DelayQueue<E extends Delayed> extends AbstractQueue<E>
// not just a .equals element. // not just a .equals element.
lock.lock(); lock.lock();
try { try {
for (Iterator it = q.iterator(); it.hasNext(); ) { for (Iterator<E> it = q.iterator(); it.hasNext(); ) {
if (it.next() == x) { if (it.next() == x) {
it.remove(); it.remove();
return; return;
......
...@@ -279,6 +279,7 @@ public class Exchanger<V> { ...@@ -279,6 +279,7 @@ public class Exchanger<V> {
* into hole. This class cannot be parameterized as "V" because * into hole. This class cannot be parameterized as "V" because
* of the use of non-V CANCEL sentinels. * of the use of non-V CANCEL sentinels.
*/ */
@SuppressWarnings("serial")
private static final class Node extends AtomicReference<Object> { private static final class Node extends AtomicReference<Object> {
/** The element offered by the Thread creating this node. */ /** The element offered by the Thread creating this node. */
public final Object item; public final Object item;
...@@ -303,6 +304,7 @@ public class Exchanger<V> { ...@@ -303,6 +304,7 @@ public class Exchanger<V> {
* would improve throughput more than enough to outweigh using * would improve throughput more than enough to outweigh using
* extra space. * extra space.
*/ */
@SuppressWarnings("serial")
private static final class Slot extends AtomicReference<Object> { private static final class Slot extends AtomicReference<Object> {
// Improve likelihood of isolation on <= 64 byte cache lines // Improve likelihood of isolation on <= 64 byte cache lines
long q0, q1, q2, q3, q4, q5, q6, q7, q8, q9, qa, qb, qc, qd, qe; long q0, q1, q2, q3, q4, q5, q6, q7, q8, q9, qa, qb, qc, qd, qe;
...@@ -616,13 +618,14 @@ public class Exchanger<V> { ...@@ -616,13 +618,14 @@ public class Exchanger<V> {
* @throws InterruptedException if the current thread was * @throws InterruptedException if the current thread was
* interrupted while waiting * interrupted while waiting
*/ */
@SuppressWarnings("unchecked")
public V exchange(V x) throws InterruptedException { public V exchange(V x) throws InterruptedException {
if (!Thread.interrupted()) { if (!Thread.interrupted()) {
Object v = doExchange((x == null) ? NULL_ITEM : x, false, 0); Object o = doExchange((x == null) ? NULL_ITEM : x, false, 0);
if (v == NULL_ITEM) if (o == NULL_ITEM)
return null; return null;
if (v != CANCEL) if (o != CANCEL)
return (V)v; return (V)o;
Thread.interrupted(); // Clear interrupt status on IE throw Thread.interrupted(); // Clear interrupt status on IE throw
} }
throw new InterruptedException(); throw new InterruptedException();
...@@ -670,15 +673,16 @@ public class Exchanger<V> { ...@@ -670,15 +673,16 @@ public class Exchanger<V> {
* @throws TimeoutException if the specified waiting time elapses * @throws TimeoutException if the specified waiting time elapses
* before another thread enters the exchange * before another thread enters the exchange
*/ */
@SuppressWarnings("unchecked")
public V exchange(V x, long timeout, TimeUnit unit) public V exchange(V x, long timeout, TimeUnit unit)
throws InterruptedException, TimeoutException { throws InterruptedException, TimeoutException {
if (!Thread.interrupted()) { if (!Thread.interrupted()) {
Object v = doExchange((x == null) ? NULL_ITEM : x, Object o = doExchange((x == null) ? NULL_ITEM : x,
true, unit.toNanos(timeout)); true, unit.toNanos(timeout));
if (v == NULL_ITEM) if (o == NULL_ITEM)
return null; return null;
if (v != CANCEL) if (o != CANCEL)
return (V)v; return (V)o;
if (!Thread.interrupted()) if (!Thread.interrupted())
throw new TimeoutException(); throw new TimeoutException();
} }
......
...@@ -2150,7 +2150,7 @@ public class ForkJoinPool extends AbstractExecutorService { ...@@ -2150,7 +2150,7 @@ public class ForkJoinPool extends AbstractExecutorService {
int s; int s;
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = ForkJoinPool.class; Class<?> k = ForkJoinPool.class;
ctlOffset = UNSAFE.objectFieldOffset ctlOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("ctl")); (k.getDeclaredField("ctl"));
stealCountOffset = UNSAFE.objectFieldOffset stealCountOffset = UNSAFE.objectFieldOffset
...@@ -2163,7 +2163,7 @@ public class ForkJoinPool extends AbstractExecutorService { ...@@ -2163,7 +2163,7 @@ public class ForkJoinPool extends AbstractExecutorService {
(k.getDeclaredField("scanGuard")); (k.getDeclaredField("scanGuard"));
nextWorkerNumberOffset = UNSAFE.objectFieldOffset nextWorkerNumberOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("nextWorkerNumber")); (k.getDeclaredField("nextWorkerNumber"));
Class a = ForkJoinTask[].class; Class<?> a = ForkJoinTask[].class;
ABASE = UNSAFE.arrayBaseOffset(a); ABASE = UNSAFE.arrayBaseOffset(a);
s = UNSAFE.arrayIndexScale(a); s = UNSAFE.arrayIndexScale(a);
} catch (Exception e) { } catch (Exception e) {
......
...@@ -520,7 +520,7 @@ public abstract class ForkJoinTask<V> implements Future<V>, Serializable { ...@@ -520,7 +520,7 @@ public abstract class ForkJoinTask<V> implements Future<V>, Serializable {
if (e == null || (ex = e.ex) == null) if (e == null || (ex = e.ex) == null)
return null; return null;
if (e.thrower != Thread.currentThread().getId()) { if (e.thrower != Thread.currentThread().getId()) {
Class ec = ex.getClass(); Class<? extends Throwable> ec = ex.getClass();
try { try {
Constructor<?> noArgCtor = null; Constructor<?> noArgCtor = null;
Constructor<?>[] cs = ec.getConstructors();// public ctors only Constructor<?>[] cs = ec.getConstructors();// public ctors only
......
...@@ -192,7 +192,7 @@ public class ForkJoinWorkerThread extends Thread { ...@@ -192,7 +192,7 @@ public class ForkJoinWorkerThread extends Thread {
/** /**
* The work-stealing queue array. Size must be a power of two. * The work-stealing queue array. Size must be a power of two.
* Initialized when started (as oposed to when constructed), to * Initialized when started (as opposed to when constructed), to
* improve memory locality. * improve memory locality.
*/ */
ForkJoinTask<?>[] queue; ForkJoinTask<?>[] queue;
...@@ -360,7 +360,7 @@ public class ForkJoinWorkerThread extends Thread { ...@@ -360,7 +360,7 @@ public class ForkJoinWorkerThread extends Thread {
*/ */
protected void onStart() { protected void onStart() {
queue = new ForkJoinTask<?>[INITIAL_QUEUE_CAPACITY]; queue = new ForkJoinTask<?>[INITIAL_QUEUE_CAPACITY];
int r = pool.workerSeedGenerator.nextInt(); int r = ForkJoinPool.workerSeedGenerator.nextInt();
seed = (r == 0) ? 1 : r; // must be nonzero seed = (r == 0) ? 1 : r; // must be nonzero
} }
...@@ -846,7 +846,7 @@ public class ForkJoinWorkerThread extends Thread { ...@@ -846,7 +846,7 @@ public class ForkJoinWorkerThread extends Thread {
(b = v.queueBase) != v.queueTop && (b = v.queueBase) != v.queueTop &&
(q = v.queue) != null && (q = v.queue) != null &&
(i = (q.length - 1) & b) >= 0 && (i = (q.length - 1) & b) >= 0 &&
q[i] == t) { q[i] == t) {
long u = (i << ASHIFT) + ABASE; long u = (i << ASHIFT) + ABASE;
if (v.queueBase == b && if (v.queueBase == b &&
UNSAFE.compareAndSwapObject(q, u, t, null)) { UNSAFE.compareAndSwapObject(q, u, t, null)) {
...@@ -984,7 +984,7 @@ public class ForkJoinWorkerThread extends Thread { ...@@ -984,7 +984,7 @@ public class ForkJoinWorkerThread extends Thread {
int s; int s;
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class a = ForkJoinTask[].class; Class<?> a = ForkJoinTask[].class;
ABASE = UNSAFE.arrayBaseOffset(a); ABASE = UNSAFE.arrayBaseOffset(a);
s = UNSAFE.arrayIndexScale(a); s = UNSAFE.arrayIndexScale(a);
} catch (Exception e) { } catch (Exception e) {
......
...@@ -330,8 +330,8 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E> ...@@ -330,8 +330,8 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E>
* of less-contended queues. During spins threads check their * of less-contended queues. During spins threads check their
* interrupt status and generate a thread-local random number * interrupt status and generate a thread-local random number
* to decide to occasionally perform a Thread.yield. While * to decide to occasionally perform a Thread.yield. While
* yield has underdefined specs, we assume that might it help, * yield has underdefined specs, we assume that it might help,
* and will not hurt in limiting impact of spinning on busy * and will not hurt, in limiting impact of spinning on busy
* systems. We also use smaller (1/2) spins for nodes that are * systems. We also use smaller (1/2) spins for nodes that are
* not known to be front but whose predecessors have not * not known to be front but whose predecessors have not
* blocked -- these "chained" spins avoid artifacts of * blocked -- these "chained" spins avoid artifacts of
...@@ -542,7 +542,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E> ...@@ -542,7 +542,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = Node.class; Class<?> k = Node.class;
itemOffset = UNSAFE.objectFieldOffset itemOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("item")); (k.getDeclaredField("item"));
nextOffset = UNSAFE.objectFieldOffset nextOffset = UNSAFE.objectFieldOffset
...@@ -627,7 +627,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E> ...@@ -627,7 +627,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E>
break; // unless slack < 2 break; // unless slack < 2
} }
LockSupport.unpark(p.waiter); LockSupport.unpark(p.waiter);
return this.<E>cast(item); return LinkedTransferQueue.<E>cast(item);
} }
} }
Node n = p.next; Node n = p.next;
...@@ -705,7 +705,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E> ...@@ -705,7 +705,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E>
if (item != e) { // matched if (item != e) { // matched
// assert item != s; // assert item != s;
s.forgetContents(); // avoid garbage s.forgetContents(); // avoid garbage
return this.<E>cast(item); return LinkedTransferQueue.<E>cast(item);
} }
if ((w.isInterrupted() || (timed && nanos <= 0)) && if ((w.isInterrupted() || (timed && nanos <= 0)) &&
s.casItem(e, s)) { // cancel s.casItem(e, s)) { // cancel
...@@ -786,7 +786,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E> ...@@ -786,7 +786,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E>
Object item = p.item; Object item = p.item;
if (p.isData) { if (p.isData) {
if (item != null && item != p) if (item != null && item != p)
return this.<E>cast(item); return LinkedTransferQueue.<E>cast(item);
} }
else if (item == null) else if (item == null)
return null; return null;
...@@ -1008,7 +1008,6 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E> ...@@ -1008,7 +1008,6 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E>
return false; return false;
} }
/** /**
* Creates an initially empty {@code LinkedTransferQueue}. * Creates an initially empty {@code LinkedTransferQueue}.
*/ */
...@@ -1045,7 +1044,8 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E> ...@@ -1045,7 +1044,8 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E>
* return {@code false}. * return {@code false}.
* *
* @return {@code true} (as specified by * @return {@code true} (as specified by
* {@link BlockingQueue#offer(Object,long,TimeUnit) BlockingQueue.offer}) * {@link java.util.concurrent.BlockingQueue#offer(Object,long,TimeUnit)
* BlockingQueue.offer})
* @throws NullPointerException if the specified element is null * @throws NullPointerException if the specified element is null
*/ */
public boolean offer(E e, long timeout, TimeUnit unit) { public boolean offer(E e, long timeout, TimeUnit unit) {
...@@ -1162,8 +1162,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E> ...@@ -1162,8 +1162,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E>
if (c == this) if (c == this)
throw new IllegalArgumentException(); throw new IllegalArgumentException();
int n = 0; int n = 0;
E e; for (E e; (e = poll()) != null;) {
while ( (e = poll()) != null) {
c.add(e); c.add(e);
++n; ++n;
} }
...@@ -1180,8 +1179,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E> ...@@ -1180,8 +1179,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E>
if (c == this) if (c == this)
throw new IllegalArgumentException(); throw new IllegalArgumentException();
int n = 0; int n = 0;
E e; for (E e; n < maxElements && (e = poll()) != null;) {
while (n < maxElements && (e = poll()) != null) {
c.add(e); c.add(e);
++n; ++n;
} }
...@@ -1288,7 +1286,8 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E> ...@@ -1288,7 +1286,8 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E>
* {@code LinkedTransferQueue} is not capacity constrained. * {@code LinkedTransferQueue} is not capacity constrained.
* *
* @return {@code Integer.MAX_VALUE} (as specified by * @return {@code Integer.MAX_VALUE} (as specified by
* {@link BlockingQueue#remainingCapacity()}) * {@link java.util.concurrent.BlockingQueue#remainingCapacity()
* BlockingQueue.remainingCapacity})
*/ */
public int remainingCapacity() { public int remainingCapacity() {
return Integer.MAX_VALUE; return Integer.MAX_VALUE;
...@@ -1320,7 +1319,8 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E> ...@@ -1320,7 +1319,8 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E>
throws java.io.IOException, ClassNotFoundException { throws java.io.IOException, ClassNotFoundException {
s.defaultReadObject(); s.defaultReadObject();
for (;;) { for (;;) {
@SuppressWarnings("unchecked") E item = (E) s.readObject(); @SuppressWarnings("unchecked")
E item = (E) s.readObject();
if (item == null) if (item == null)
break; break;
else else
...@@ -1337,7 +1337,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E> ...@@ -1337,7 +1337,7 @@ public class LinkedTransferQueue<E> extends AbstractQueue<E>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = LinkedTransferQueue.class; Class<?> k = LinkedTransferQueue.class;
headOffset = UNSAFE.objectFieldOffset headOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("head")); (k.getDeclaredField("head"));
tailOffset = UNSAFE.objectFieldOffset tailOffset = UNSAFE.objectFieldOffset
......
...@@ -1142,7 +1142,7 @@ public class Phaser { ...@@ -1142,7 +1142,7 @@ public class Phaser {
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = Phaser.class; Class<?> k = Phaser.class;
stateOffset = UNSAFE.objectFieldOffset stateOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("state")); (k.getDeclaredField("state"));
} catch (Exception e) { } catch (Exception e) {
......
...@@ -94,6 +94,7 @@ import java.util.*; ...@@ -94,6 +94,7 @@ import java.util.*;
* @author Doug Lea * @author Doug Lea
* @param <E> the type of elements held in this collection * @param <E> the type of elements held in this collection
*/ */
@SuppressWarnings("unchecked")
public class PriorityBlockingQueue<E> extends AbstractQueue<E> public class PriorityBlockingQueue<E> extends AbstractQueue<E>
implements BlockingQueue<E>, java.io.Serializable { implements BlockingQueue<E>, java.io.Serializable {
private static final long serialVersionUID = 5595510919245408276L; private static final long serialVersionUID = 5595510919245408276L;
...@@ -168,7 +169,7 @@ public class PriorityBlockingQueue<E> extends AbstractQueue<E> ...@@ -168,7 +169,7 @@ public class PriorityBlockingQueue<E> extends AbstractQueue<E>
* to maintain compatibility with previous versions * to maintain compatibility with previous versions
* of this class. Non-null only during serialization/deserialization. * of this class. Non-null only during serialization/deserialization.
*/ */
private PriorityQueue q; private PriorityQueue<E> q;
/** /**
* Creates a {@code PriorityBlockingQueue} with the default * Creates a {@code PriorityBlockingQueue} with the default
...@@ -968,7 +969,7 @@ public class PriorityBlockingQueue<E> extends AbstractQueue<E> ...@@ -968,7 +969,7 @@ public class PriorityBlockingQueue<E> extends AbstractQueue<E>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = PriorityBlockingQueue.class; Class<?> k = PriorityBlockingQueue.class;
allocationSpinLockOffset = UNSAFE.objectFieldOffset allocationSpinLockOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("allocationSpinLock")); (k.getDeclaredField("allocationSpinLock"));
} catch (Exception e) { } catch (Exception e) {
......
...@@ -34,8 +34,10 @@ ...@@ -34,8 +34,10 @@
*/ */
package java.util.concurrent; package java.util.concurrent;
import java.util.concurrent.atomic.*; import static java.util.concurrent.TimeUnit.NANOSECONDS;
import java.util.concurrent.locks.*; import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
import java.util.*; import java.util.*;
/** /**
...@@ -166,7 +168,7 @@ public class ScheduledThreadPoolExecutor ...@@ -166,7 +168,7 @@ public class ScheduledThreadPoolExecutor
* Sequence number to break scheduling ties, and in turn to * Sequence number to break scheduling ties, and in turn to
* guarantee FIFO order among tied entries. * guarantee FIFO order among tied entries.
*/ */
private static final AtomicLong sequencer = new AtomicLong(0); private static final AtomicLong sequencer = new AtomicLong();
/** /**
* Returns current nanosecond time. * Returns current nanosecond time.
...@@ -231,7 +233,7 @@ public class ScheduledThreadPoolExecutor ...@@ -231,7 +233,7 @@ public class ScheduledThreadPoolExecutor
} }
public long getDelay(TimeUnit unit) { public long getDelay(TimeUnit unit) {
return unit.convert(time - now(), TimeUnit.NANOSECONDS); return unit.convert(time - now(), NANOSECONDS);
} }
public int compareTo(Delayed other) { public int compareTo(Delayed other) {
...@@ -249,8 +251,8 @@ public class ScheduledThreadPoolExecutor ...@@ -249,8 +251,8 @@ public class ScheduledThreadPoolExecutor
else else
return 1; return 1;
} }
long d = (getDelay(TimeUnit.NANOSECONDS) - long d = (getDelay(NANOSECONDS) -
other.getDelay(TimeUnit.NANOSECONDS)); other.getDelay(NANOSECONDS));
return (d == 0) ? 0 : ((d < 0) ? -1 : 1); return (d == 0) ? 0 : ((d < 0) ? -1 : 1);
} }
...@@ -424,7 +426,7 @@ public class ScheduledThreadPoolExecutor ...@@ -424,7 +426,7 @@ public class ScheduledThreadPoolExecutor
* @throws IllegalArgumentException if {@code corePoolSize < 0} * @throws IllegalArgumentException if {@code corePoolSize < 0}
*/ */
public ScheduledThreadPoolExecutor(int corePoolSize) { public ScheduledThreadPoolExecutor(int corePoolSize) {
super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS, super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
new DelayedWorkQueue()); new DelayedWorkQueue());
} }
...@@ -441,7 +443,7 @@ public class ScheduledThreadPoolExecutor ...@@ -441,7 +443,7 @@ public class ScheduledThreadPoolExecutor
*/ */
public ScheduledThreadPoolExecutor(int corePoolSize, public ScheduledThreadPoolExecutor(int corePoolSize,
ThreadFactory threadFactory) { ThreadFactory threadFactory) {
super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS, super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
new DelayedWorkQueue(), threadFactory); new DelayedWorkQueue(), threadFactory);
} }
...@@ -458,7 +460,7 @@ public class ScheduledThreadPoolExecutor ...@@ -458,7 +460,7 @@ public class ScheduledThreadPoolExecutor
*/ */
public ScheduledThreadPoolExecutor(int corePoolSize, public ScheduledThreadPoolExecutor(int corePoolSize,
RejectedExecutionHandler handler) { RejectedExecutionHandler handler) {
super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS, super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
new DelayedWorkQueue(), handler); new DelayedWorkQueue(), handler);
} }
...@@ -479,7 +481,7 @@ public class ScheduledThreadPoolExecutor ...@@ -479,7 +481,7 @@ public class ScheduledThreadPoolExecutor
public ScheduledThreadPoolExecutor(int corePoolSize, public ScheduledThreadPoolExecutor(int corePoolSize,
ThreadFactory threadFactory, ThreadFactory threadFactory,
RejectedExecutionHandler handler) { RejectedExecutionHandler handler) {
super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS, super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
new DelayedWorkQueue(), threadFactory, handler); new DelayedWorkQueue(), threadFactory, handler);
} }
...@@ -508,7 +510,7 @@ public class ScheduledThreadPoolExecutor ...@@ -508,7 +510,7 @@ public class ScheduledThreadPoolExecutor
private long overflowFree(long delay) { private long overflowFree(long delay) {
Delayed head = (Delayed) super.getQueue().peek(); Delayed head = (Delayed) super.getQueue().peek();
if (head != null) { if (head != null) {
long headDelay = head.getDelay(TimeUnit.NANOSECONDS); long headDelay = head.getDelay(NANOSECONDS);
if (headDelay < 0 && (delay - headDelay < 0)) if (headDelay < 0 && (delay - headDelay < 0))
delay = Long.MAX_VALUE + headDelay; delay = Long.MAX_VALUE + headDelay;
} }
...@@ -616,7 +618,7 @@ public class ScheduledThreadPoolExecutor ...@@ -616,7 +618,7 @@ public class ScheduledThreadPoolExecutor
* @throws NullPointerException {@inheritDoc} * @throws NullPointerException {@inheritDoc}
*/ */
public void execute(Runnable command) { public void execute(Runnable command) {
schedule(command, 0, TimeUnit.NANOSECONDS); schedule(command, 0, NANOSECONDS);
} }
// Override AbstractExecutorService methods // Override AbstractExecutorService methods
...@@ -626,7 +628,7 @@ public class ScheduledThreadPoolExecutor ...@@ -626,7 +628,7 @@ public class ScheduledThreadPoolExecutor
* @throws NullPointerException {@inheritDoc} * @throws NullPointerException {@inheritDoc}
*/ */
public Future<?> submit(Runnable task) { public Future<?> submit(Runnable task) {
return schedule(task, 0, TimeUnit.NANOSECONDS); return schedule(task, 0, NANOSECONDS);
} }
/** /**
...@@ -634,8 +636,7 @@ public class ScheduledThreadPoolExecutor ...@@ -634,8 +636,7 @@ public class ScheduledThreadPoolExecutor
* @throws NullPointerException {@inheritDoc} * @throws NullPointerException {@inheritDoc}
*/ */
public <T> Future<T> submit(Runnable task, T result) { public <T> Future<T> submit(Runnable task, T result) {
return schedule(Executors.callable(task, result), return schedule(Executors.callable(task, result), 0, NANOSECONDS);
0, TimeUnit.NANOSECONDS);
} }
/** /**
...@@ -643,7 +644,7 @@ public class ScheduledThreadPoolExecutor ...@@ -643,7 +644,7 @@ public class ScheduledThreadPoolExecutor
* @throws NullPointerException {@inheritDoc} * @throws NullPointerException {@inheritDoc}
*/ */
public <T> Future<T> submit(Callable<T> task) { public <T> Future<T> submit(Callable<T> task) {
return schedule(task, 0, TimeUnit.NANOSECONDS); return schedule(task, 0, NANOSECONDS);
} }
/** /**
...@@ -831,8 +832,8 @@ public class ScheduledThreadPoolExecutor ...@@ -831,8 +832,8 @@ public class ScheduledThreadPoolExecutor
*/ */
private static final int INITIAL_CAPACITY = 16; private static final int INITIAL_CAPACITY = 16;
private RunnableScheduledFuture[] queue = private RunnableScheduledFuture<?>[] queue =
new RunnableScheduledFuture[INITIAL_CAPACITY]; new RunnableScheduledFuture<?>[INITIAL_CAPACITY];
private final ReentrantLock lock = new ReentrantLock(); private final ReentrantLock lock = new ReentrantLock();
private int size = 0; private int size = 0;
...@@ -863,7 +864,7 @@ public class ScheduledThreadPoolExecutor ...@@ -863,7 +864,7 @@ public class ScheduledThreadPoolExecutor
/** /**
* Set f's heapIndex if it is a ScheduledFutureTask. * Set f's heapIndex if it is a ScheduledFutureTask.
*/ */
private void setIndex(RunnableScheduledFuture f, int idx) { private void setIndex(RunnableScheduledFuture<?> f, int idx) {
if (f instanceof ScheduledFutureTask) if (f instanceof ScheduledFutureTask)
((ScheduledFutureTask)f).heapIndex = idx; ((ScheduledFutureTask)f).heapIndex = idx;
} }
...@@ -872,10 +873,10 @@ public class ScheduledThreadPoolExecutor ...@@ -872,10 +873,10 @@ public class ScheduledThreadPoolExecutor
* Sift element added at bottom up to its heap-ordered spot. * Sift element added at bottom up to its heap-ordered spot.
* Call only when holding lock. * Call only when holding lock.
*/ */
private void siftUp(int k, RunnableScheduledFuture key) { private void siftUp(int k, RunnableScheduledFuture<?> key) {
while (k > 0) { while (k > 0) {
int parent = (k - 1) >>> 1; int parent = (k - 1) >>> 1;
RunnableScheduledFuture e = queue[parent]; RunnableScheduledFuture<?> e = queue[parent];
if (key.compareTo(e) >= 0) if (key.compareTo(e) >= 0)
break; break;
queue[k] = e; queue[k] = e;
...@@ -890,11 +891,11 @@ public class ScheduledThreadPoolExecutor ...@@ -890,11 +891,11 @@ public class ScheduledThreadPoolExecutor
* Sift element added at top down to its heap-ordered spot. * Sift element added at top down to its heap-ordered spot.
* Call only when holding lock. * Call only when holding lock.
*/ */
private void siftDown(int k, RunnableScheduledFuture key) { private void siftDown(int k, RunnableScheduledFuture<?> key) {
int half = size >>> 1; int half = size >>> 1;
while (k < half) { while (k < half) {
int child = (k << 1) + 1; int child = (k << 1) + 1;
RunnableScheduledFuture c = queue[child]; RunnableScheduledFuture<?> c = queue[child];
int right = child + 1; int right = child + 1;
if (right < size && c.compareTo(queue[right]) > 0) if (right < size && c.compareTo(queue[right]) > 0)
c = queue[child = right]; c = queue[child = right];
...@@ -959,7 +960,7 @@ public class ScheduledThreadPoolExecutor ...@@ -959,7 +960,7 @@ public class ScheduledThreadPoolExecutor
setIndex(queue[i], -1); setIndex(queue[i], -1);
int s = --size; int s = --size;
RunnableScheduledFuture replacement = queue[s]; RunnableScheduledFuture<?> replacement = queue[s];
queue[s] = null; queue[s] = null;
if (s != i) { if (s != i) {
siftDown(i, replacement); siftDown(i, replacement);
...@@ -990,7 +991,7 @@ public class ScheduledThreadPoolExecutor ...@@ -990,7 +991,7 @@ public class ScheduledThreadPoolExecutor
return Integer.MAX_VALUE; return Integer.MAX_VALUE;
} }
public RunnableScheduledFuture peek() { public RunnableScheduledFuture<?> peek() {
final ReentrantLock lock = this.lock; final ReentrantLock lock = this.lock;
lock.lock(); lock.lock();
try { try {
...@@ -1003,7 +1004,7 @@ public class ScheduledThreadPoolExecutor ...@@ -1003,7 +1004,7 @@ public class ScheduledThreadPoolExecutor
public boolean offer(Runnable x) { public boolean offer(Runnable x) {
if (x == null) if (x == null)
throw new NullPointerException(); throw new NullPointerException();
RunnableScheduledFuture e = (RunnableScheduledFuture)x; RunnableScheduledFuture<?> e = (RunnableScheduledFuture<?>)x;
final ReentrantLock lock = this.lock; final ReentrantLock lock = this.lock;
lock.lock(); lock.lock();
try { try {
...@@ -1045,9 +1046,9 @@ public class ScheduledThreadPoolExecutor ...@@ -1045,9 +1046,9 @@ public class ScheduledThreadPoolExecutor
* holding lock. * holding lock.
* @param f the task to remove and return * @param f the task to remove and return
*/ */
private RunnableScheduledFuture finishPoll(RunnableScheduledFuture f) { private RunnableScheduledFuture<?> finishPoll(RunnableScheduledFuture<?> f) {
int s = --size; int s = --size;
RunnableScheduledFuture x = queue[s]; RunnableScheduledFuture<?> x = queue[s];
queue[s] = null; queue[s] = null;
if (s != 0) if (s != 0)
siftDown(0, x); siftDown(0, x);
...@@ -1055,12 +1056,12 @@ public class ScheduledThreadPoolExecutor ...@@ -1055,12 +1056,12 @@ public class ScheduledThreadPoolExecutor
return f; return f;
} }
public RunnableScheduledFuture poll() { public RunnableScheduledFuture<?> poll() {
final ReentrantLock lock = this.lock; final ReentrantLock lock = this.lock;
lock.lock(); lock.lock();
try { try {
RunnableScheduledFuture first = queue[0]; RunnableScheduledFuture<?> first = queue[0];
if (first == null || first.getDelay(TimeUnit.NANOSECONDS) > 0) if (first == null || first.getDelay(NANOSECONDS) > 0)
return null; return null;
else else
return finishPoll(first); return finishPoll(first);
...@@ -1069,16 +1070,16 @@ public class ScheduledThreadPoolExecutor ...@@ -1069,16 +1070,16 @@ public class ScheduledThreadPoolExecutor
} }
} }
public RunnableScheduledFuture take() throws InterruptedException { public RunnableScheduledFuture<?> take() throws InterruptedException {
final ReentrantLock lock = this.lock; final ReentrantLock lock = this.lock;
lock.lockInterruptibly(); lock.lockInterruptibly();
try { try {
for (;;) { for (;;) {
RunnableScheduledFuture first = queue[0]; RunnableScheduledFuture<?> first = queue[0];
if (first == null) if (first == null)
available.await(); available.await();
else { else {
long delay = first.getDelay(TimeUnit.NANOSECONDS); long delay = first.getDelay(NANOSECONDS);
if (delay <= 0) if (delay <= 0)
return finishPoll(first); return finishPoll(first);
else if (leader != null) else if (leader != null)
...@@ -1102,21 +1103,21 @@ public class ScheduledThreadPoolExecutor ...@@ -1102,21 +1103,21 @@ public class ScheduledThreadPoolExecutor
} }
} }
public RunnableScheduledFuture poll(long timeout, TimeUnit unit) public RunnableScheduledFuture<?> poll(long timeout, TimeUnit unit)
throws InterruptedException { throws InterruptedException {
long nanos = unit.toNanos(timeout); long nanos = unit.toNanos(timeout);
final ReentrantLock lock = this.lock; final ReentrantLock lock = this.lock;
lock.lockInterruptibly(); lock.lockInterruptibly();
try { try {
for (;;) { for (;;) {
RunnableScheduledFuture first = queue[0]; RunnableScheduledFuture<?> first = queue[0];
if (first == null) { if (first == null) {
if (nanos <= 0) if (nanos <= 0)
return null; return null;
else else
nanos = available.awaitNanos(nanos); nanos = available.awaitNanos(nanos);
} else { } else {
long delay = first.getDelay(TimeUnit.NANOSECONDS); long delay = first.getDelay(NANOSECONDS);
if (delay <= 0) if (delay <= 0)
return finishPoll(first); return finishPoll(first);
if (nanos <= 0) if (nanos <= 0)
...@@ -1148,7 +1149,7 @@ public class ScheduledThreadPoolExecutor ...@@ -1148,7 +1149,7 @@ public class ScheduledThreadPoolExecutor
lock.lock(); lock.lock();
try { try {
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
RunnableScheduledFuture t = queue[i]; RunnableScheduledFuture<?> t = queue[i];
if (t != null) { if (t != null) {
queue[i] = null; queue[i] = null;
setIndex(t, -1); setIndex(t, -1);
...@@ -1164,9 +1165,10 @@ public class ScheduledThreadPoolExecutor ...@@ -1164,9 +1165,10 @@ public class ScheduledThreadPoolExecutor
* Return and remove first element only if it is expired. * Return and remove first element only if it is expired.
* Used only by drainTo. Call only when holding lock. * Used only by drainTo. Call only when holding lock.
*/ */
private RunnableScheduledFuture pollExpired() { private RunnableScheduledFuture<?> pollExpired() {
RunnableScheduledFuture first = queue[0]; // assert lock.isHeldByCurrentThread();
if (first == null || first.getDelay(TimeUnit.NANOSECONDS) > 0) RunnableScheduledFuture<?> first = queue[0];
if (first == null || first.getDelay(NANOSECONDS) > 0)
return null; return null;
return finishPoll(first); return finishPoll(first);
} }
...@@ -1179,7 +1181,7 @@ public class ScheduledThreadPoolExecutor ...@@ -1179,7 +1181,7 @@ public class ScheduledThreadPoolExecutor
final ReentrantLock lock = this.lock; final ReentrantLock lock = this.lock;
lock.lock(); lock.lock();
try { try {
RunnableScheduledFuture first; RunnableScheduledFuture<?> first;
int n = 0; int n = 0;
while ((first = pollExpired()) != null) { while ((first = pollExpired()) != null) {
c.add(first); c.add(first);
...@@ -1201,7 +1203,7 @@ public class ScheduledThreadPoolExecutor ...@@ -1201,7 +1203,7 @@ public class ScheduledThreadPoolExecutor
final ReentrantLock lock = this.lock; final ReentrantLock lock = this.lock;
lock.lock(); lock.lock();
try { try {
RunnableScheduledFuture first; RunnableScheduledFuture<?> first;
int n = 0; int n = 0;
while (n < maxElements && (first = pollExpired()) != null) { while (n < maxElements && (first = pollExpired()) != null) {
c.add(first); c.add(first);
......
...@@ -36,7 +36,6 @@ ...@@ -36,7 +36,6 @@
package java.util.concurrent; package java.util.concurrent;
import java.util.concurrent.locks.*; import java.util.concurrent.locks.*;
import java.util.concurrent.atomic.*;
import java.util.*; import java.util.*;
/** /**
...@@ -163,7 +162,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -163,7 +162,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
/** /**
* Shared internal API for dual stacks and queues. * Shared internal API for dual stacks and queues.
*/ */
abstract static class Transferer { abstract static class Transferer<E> {
/** /**
* Performs a put or take. * Performs a put or take.
* *
...@@ -177,7 +176,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -177,7 +176,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
* the caller can distinguish which of these occurred * the caller can distinguish which of these occurred
* by checking Thread.interrupted. * by checking Thread.interrupted.
*/ */
abstract Object transfer(Object e, boolean timed, long nanos); abstract E transfer(E e, boolean timed, long nanos);
} }
/** The number of CPUs, for spin control */ /** The number of CPUs, for spin control */
...@@ -206,7 +205,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -206,7 +205,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
static final long spinForTimeoutThreshold = 1000L; static final long spinForTimeoutThreshold = 1000L;
/** Dual stack */ /** Dual stack */
static final class TransferStack extends Transferer { static final class TransferStack<E> extends Transferer<E> {
/* /*
* This extends Scherer-Scott dual stack algorithm, differing, * This extends Scherer-Scott dual stack algorithm, differing,
* among other ways, by using "covering" nodes rather than * among other ways, by using "covering" nodes rather than
...@@ -286,7 +285,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -286,7 +285,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = SNode.class; Class<?> k = SNode.class;
matchOffset = UNSAFE.objectFieldOffset matchOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("match")); (k.getDeclaredField("match"));
nextOffset = UNSAFE.objectFieldOffset nextOffset = UNSAFE.objectFieldOffset
...@@ -322,7 +321,8 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -322,7 +321,8 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
/** /**
* Puts or takes an item. * Puts or takes an item.
*/ */
Object transfer(Object e, boolean timed, long nanos) { @SuppressWarnings("unchecked")
E transfer(E e, boolean timed, long nanos) {
/* /*
* Basic algorithm is to loop trying one of three actions: * Basic algorithm is to loop trying one of three actions:
* *
...@@ -363,7 +363,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -363,7 +363,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
} }
if ((h = head) != null && h.next == s) if ((h = head) != null && h.next == s)
casHead(h, s.next); // help s's fulfiller casHead(h, s.next); // help s's fulfiller
return (mode == REQUEST) ? m.item : s.item; return (E) ((mode == REQUEST) ? m.item : s.item);
} }
} else if (!isFulfilling(h.mode)) { // try to fulfill } else if (!isFulfilling(h.mode)) { // try to fulfill
if (h.isCancelled()) // already cancelled if (h.isCancelled()) // already cancelled
...@@ -379,7 +379,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -379,7 +379,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
SNode mn = m.next; SNode mn = m.next;
if (m.tryMatch(s)) { if (m.tryMatch(s)) {
casHead(s, mn); // pop both s and m casHead(s, mn); // pop both s and m
return (mode == REQUEST) ? m.item : s.item; return (E) ((mode == REQUEST) ? m.item : s.item);
} else // lost match } else // lost match
s.casNext(m, mn); // help unlink s.casNext(m, mn); // help unlink
} }
...@@ -513,7 +513,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -513,7 +513,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = TransferStack.class; Class<?> k = TransferStack.class;
headOffset = UNSAFE.objectFieldOffset headOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("head")); (k.getDeclaredField("head"));
} catch (Exception e) { } catch (Exception e) {
...@@ -523,7 +523,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -523,7 +523,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
} }
/** Dual Queue */ /** Dual Queue */
static final class TransferQueue extends Transferer { static final class TransferQueue<E> extends Transferer<E> {
/* /*
* This extends Scherer-Scott dual queue algorithm, differing, * This extends Scherer-Scott dual queue algorithm, differing,
* among other ways, by using modes within nodes rather than * among other ways, by using modes within nodes rather than
...@@ -583,7 +583,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -583,7 +583,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = QNode.class; Class<?> k = QNode.class;
itemOffset = UNSAFE.objectFieldOffset itemOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("item")); (k.getDeclaredField("item"));
nextOffset = UNSAFE.objectFieldOffset nextOffset = UNSAFE.objectFieldOffset
...@@ -640,7 +640,8 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -640,7 +640,8 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
/** /**
* Puts or takes an item. * Puts or takes an item.
*/ */
Object transfer(Object e, boolean timed, long nanos) { @SuppressWarnings("unchecked")
E transfer(E e, boolean timed, long nanos) {
/* Basic algorithm is to loop trying to take either of /* Basic algorithm is to loop trying to take either of
* two actions: * two actions:
* *
...@@ -703,7 +704,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -703,7 +704,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
s.item = s; s.item = s;
s.waiter = null; s.waiter = null;
} }
return (x != null) ? x : e; return (x != null) ? (E)x : e;
} else { // complementary-mode } else { // complementary-mode
QNode m = h.next; // node to fulfill QNode m = h.next; // node to fulfill
...@@ -720,7 +721,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -720,7 +721,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
advanceHead(h, m); // successfully fulfilled advanceHead(h, m); // successfully fulfilled
LockSupport.unpark(m.waiter); LockSupport.unpark(m.waiter);
return (x != null) ? x : e; return (x != null) ? (E)x : e;
} }
} }
} }
...@@ -734,7 +735,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -734,7 +735,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
* @param nanos timeout value * @param nanos timeout value
* @return matched item, or s if cancelled * @return matched item, or s if cancelled
*/ */
Object awaitFulfill(QNode s, Object e, boolean timed, long nanos) { Object awaitFulfill(QNode s, E e, boolean timed, long nanos) {
/* Same idea as TransferStack.awaitFulfill */ /* Same idea as TransferStack.awaitFulfill */
long lastTime = timed ? System.nanoTime() : 0; long lastTime = timed ? System.nanoTime() : 0;
Thread w = Thread.currentThread(); Thread w = Thread.currentThread();
...@@ -827,7 +828,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -827,7 +828,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
static { static {
try { try {
UNSAFE = sun.misc.Unsafe.getUnsafe(); UNSAFE = sun.misc.Unsafe.getUnsafe();
Class k = TransferQueue.class; Class<?> k = TransferQueue.class;
headOffset = UNSAFE.objectFieldOffset headOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("head")); (k.getDeclaredField("head"));
tailOffset = UNSAFE.objectFieldOffset tailOffset = UNSAFE.objectFieldOffset
...@@ -847,7 +848,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -847,7 +848,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
* isn't a noticeable performance penalty for using volatile * isn't a noticeable performance penalty for using volatile
* instead of final here. * instead of final here.
*/ */
private transient volatile Transferer transferer; private transient volatile Transferer<E> transferer;
/** /**
* Creates a <tt>SynchronousQueue</tt> with nonfair access policy. * Creates a <tt>SynchronousQueue</tt> with nonfair access policy.
...@@ -863,7 +864,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -863,7 +864,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
* access; otherwise the order is unspecified. * access; otherwise the order is unspecified.
*/ */
public SynchronousQueue(boolean fair) { public SynchronousQueue(boolean fair) {
transferer = fair ? new TransferQueue() : new TransferStack(); transferer = fair ? new TransferQueue<E>() : new TransferStack<E>();
} }
/** /**
...@@ -922,9 +923,9 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -922,9 +923,9 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
* @throws InterruptedException {@inheritDoc} * @throws InterruptedException {@inheritDoc}
*/ */
public E take() throws InterruptedException { public E take() throws InterruptedException {
Object e = transferer.transfer(null, false, 0); E e = transferer.transfer(null, false, 0);
if (e != null) if (e != null)
return (E)e; return e;
Thread.interrupted(); Thread.interrupted();
throw new InterruptedException(); throw new InterruptedException();
} }
...@@ -939,9 +940,9 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -939,9 +940,9 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
* @throws InterruptedException {@inheritDoc} * @throws InterruptedException {@inheritDoc}
*/ */
public E poll(long timeout, TimeUnit unit) throws InterruptedException { public E poll(long timeout, TimeUnit unit) throws InterruptedException {
Object e = transferer.transfer(null, true, unit.toNanos(timeout)); E e = transferer.transfer(null, true, unit.toNanos(timeout));
if (e != null || !Thread.interrupted()) if (e != null || !Thread.interrupted())
return (E)e; return e;
throw new InterruptedException(); throw new InterruptedException();
} }
...@@ -953,7 +954,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -953,7 +954,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
* element is available. * element is available.
*/ */
public E poll() { public E poll() {
return (E)transferer.transfer(null, true, 0); return transferer.transfer(null, true, 0);
} }
/** /**
...@@ -1065,8 +1066,19 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -1065,8 +1066,19 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
* *
* @return an empty iterator * @return an empty iterator
*/ */
@SuppressWarnings("unchecked")
public Iterator<E> iterator() { public Iterator<E> iterator() {
return Collections.emptyIterator(); return (Iterator<E>) EmptyIterator.EMPTY_ITERATOR;
}
// Replicated from a previous version of Collections
private static class EmptyIterator<E> implements Iterator<E> {
static final EmptyIterator<Object> EMPTY_ITERATOR
= new EmptyIterator<Object>();
public boolean hasNext() { return false; }
public E next() { throw new NoSuchElementException(); }
public void remove() { throw new IllegalStateException(); }
} }
/** /**
...@@ -1103,8 +1115,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -1103,8 +1115,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
if (c == this) if (c == this)
throw new IllegalArgumentException(); throw new IllegalArgumentException();
int n = 0; int n = 0;
E e; for (E e; (e = poll()) != null;) {
while ( (e = poll()) != null) {
c.add(e); c.add(e);
++n; ++n;
} }
...@@ -1123,8 +1134,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -1123,8 +1134,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
if (c == this) if (c == this)
throw new IllegalArgumentException(); throw new IllegalArgumentException();
int n = 0; int n = 0;
E e; for (E e; n < maxElements && (e = poll()) != null;) {
while (n < maxElements && (e = poll()) != null) {
c.add(e); c.add(e);
++n; ++n;
} }
...@@ -1139,6 +1149,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -1139,6 +1149,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
* object is ever serialized or deserialized. * object is ever serialized or deserialized.
*/ */
@SuppressWarnings("serial")
static class WaitQueue implements java.io.Serializable { } static class WaitQueue implements java.io.Serializable { }
static class LifoWaitQueue extends WaitQueue { static class LifoWaitQueue extends WaitQueue {
private static final long serialVersionUID = -3633113410248163686L; private static final long serialVersionUID = -3633113410248163686L;
...@@ -1151,7 +1162,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -1151,7 +1162,7 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
private WaitQueue waitingConsumers; private WaitQueue waitingConsumers;
/** /**
* Save the state to a stream (that is, serialize it). * Saves the state to a stream (that is, serializes it).
* *
* @param s the stream * @param s the stream
*/ */
...@@ -1175,9 +1186,9 @@ public class SynchronousQueue<E> extends AbstractQueue<E> ...@@ -1175,9 +1186,9 @@ public class SynchronousQueue<E> extends AbstractQueue<E>
throws java.io.IOException, ClassNotFoundException { throws java.io.IOException, ClassNotFoundException {
s.defaultReadObject(); s.defaultReadObject();
if (waitingProducers instanceof FifoWaitQueue) if (waitingProducers instanceof FifoWaitQueue)
transferer = new TransferQueue(); transferer = new TransferQueue<E>();
else else
transferer = new TransferStack(); transferer = new TransferStack<E>();
} }
// Unsafe mechanics // Unsafe mechanics
......
...@@ -183,7 +183,7 @@ class JarFile extends ZipFile { ...@@ -183,7 +183,7 @@ class JarFile extends ZipFile {
} else { } else {
man = new Manifest(super.getInputStream(manEntry)); man = new Manifest(super.getInputStream(manEntry));
} }
manRef = new SoftReference(man); manRef = new SoftReference<>(man);
} }
} }
return man; return man;
...@@ -233,13 +233,13 @@ class JarFile extends ZipFile { ...@@ -233,13 +233,13 @@ class JarFile extends ZipFile {
* Returns an enumeration of the zip file entries. * Returns an enumeration of the zip file entries.
*/ */
public Enumeration<JarEntry> entries() { public Enumeration<JarEntry> entries() {
final Enumeration enum_ = super.entries(); final Enumeration<? extends ZipEntry> enum_ = super.entries();
return new Enumeration<JarEntry>() { return new Enumeration<JarEntry>() {
public boolean hasMoreElements() { public boolean hasMoreElements() {
return enum_.hasMoreElements(); return enum_.hasMoreElements();
} }
public JarFileEntry nextElement() { public JarFileEntry nextElement() {
ZipEntry ze = (ZipEntry)enum_.nextElement(); ZipEntry ze = enum_.nextElement();
return new JarFileEntry(ze); return new JarFileEntry(ze);
} }
}; };
...@@ -608,7 +608,7 @@ class JarFile extends ZipFile { ...@@ -608,7 +608,7 @@ class JarFile extends ZipFile {
} }
// screen out entries which are never signed // screen out entries which are never signed
final Enumeration enum_ = super.entries(); final Enumeration<? extends ZipEntry> enum_ = super.entries();
return new Enumeration<JarEntry>() { return new Enumeration<JarEntry>() {
ZipEntry entry; ZipEntry entry;
...@@ -618,7 +618,7 @@ class JarFile extends ZipFile { ...@@ -618,7 +618,7 @@ class JarFile extends ZipFile {
return true; return true;
} }
while (enum_.hasMoreElements()) { while (enum_.hasMoreElements()) {
ZipEntry ze = (ZipEntry) enum_.nextElement(); ZipEntry ze = enum_.nextElement();
if (JarVerifier.isSigningRelated(ze.getName())) { if (JarVerifier.isSigningRelated(ze.getName())) {
continue; continue;
} }
...@@ -649,7 +649,7 @@ class JarFile extends ZipFile { ...@@ -649,7 +649,7 @@ class JarFile extends ZipFile {
* JAR file has no signed content. Is there a non-signing * JAR file has no signed content. Is there a non-signing
* code source? * code source?
*/ */
Enumeration unsigned = unsignedEntryNames(); Enumeration<String> unsigned = unsignedEntryNames();
if (unsigned.hasMoreElements()) { if (unsigned.hasMoreElements()) {
return new CodeSource[]{JarVerifier.getUnsignedCS(url)}; return new CodeSource[]{JarVerifier.getUnsignedCS(url)};
} else { } else {
...@@ -658,7 +658,7 @@ class JarFile extends ZipFile { ...@@ -658,7 +658,7 @@ class JarFile extends ZipFile {
} }
private Enumeration<String> unsignedEntryNames() { private Enumeration<String> unsignedEntryNames() {
final Enumeration entries = entries(); final Enumeration<JarEntry> entries = entries();
return new Enumeration<String>() { return new Enumeration<String>() {
String name; String name;
...@@ -673,7 +673,7 @@ class JarFile extends ZipFile { ...@@ -673,7 +673,7 @@ class JarFile extends ZipFile {
} }
while (entries.hasMoreElements()) { while (entries.hasMoreElements()) {
String value; String value;
ZipEntry e = (ZipEntry) entries.nextElement(); ZipEntry e = entries.nextElement();
value = e.getName(); value = e.getName();
if (e.isDirectory() || JarVerifier.isSigningRelated(value)) { if (e.isDirectory() || JarVerifier.isSigningRelated(value)) {
continue; continue;
...@@ -726,11 +726,11 @@ class JarFile extends ZipFile { ...@@ -726,11 +726,11 @@ class JarFile extends ZipFile {
} }
} }
List getManifestDigests() { List<Object> getManifestDigests() {
ensureInitialization(); ensureInitialization();
if (jv != null) { if (jv != null) {
return jv.getManifestDigests(); return jv.getManifestDigests();
} }
return new ArrayList(); return new ArrayList<Object>();
} }
} }
...@@ -51,7 +51,7 @@ public class Manifest implements Cloneable { ...@@ -51,7 +51,7 @@ public class Manifest implements Cloneable {
private Attributes attr = new Attributes(); private Attributes attr = new Attributes();
// manifest entries // manifest entries
private Map entries = new HashMap(); private Map<String, Attributes> entries = new HashMap<>();
/** /**
* Constructs a new, empty Manifest. * Constructs a new, empty Manifest.
...@@ -148,11 +148,11 @@ public class Manifest implements Cloneable { ...@@ -148,11 +148,11 @@ public class Manifest implements Cloneable {
// Write out the main attributes for the manifest // Write out the main attributes for the manifest
attr.writeMain(dos); attr.writeMain(dos);
// Now write out the pre-entry attributes // Now write out the pre-entry attributes
Iterator it = entries.entrySet().iterator(); Iterator<Map.Entry<String, Attributes>> it = entries.entrySet().iterator();
while (it.hasNext()) { while (it.hasNext()) {
Map.Entry e = (Map.Entry)it.next(); Map.Entry<String, Attributes> e = it.next();
StringBuffer buffer = new StringBuffer("Name: "); StringBuffer buffer = new StringBuffer("Name: ");
String value = (String)e.getKey(); String value = e.getKey();
if (value != null) { if (value != null) {
byte[] vb = value.getBytes("UTF8"); byte[] vb = value.getBytes("UTF8");
value = new String(vb, 0, 0, vb.length); value = new String(vb, 0, 0, vb.length);
...@@ -161,7 +161,7 @@ public class Manifest implements Cloneable { ...@@ -161,7 +161,7 @@ public class Manifest implements Cloneable {
buffer.append("\r\n"); buffer.append("\r\n");
make72Safe(buffer); make72Safe(buffer);
dos.writeBytes(buffer.toString()); dos.writeBytes(buffer.toString());
((Attributes)e.getValue()).write(dos); e.getValue().write(dos);
} }
dos.flush(); dos.flush();
} }
......
...@@ -179,10 +179,10 @@ public class LogManager { ...@@ -179,10 +179,10 @@ public class LogManager {
cname = System.getProperty("java.util.logging.manager"); cname = System.getProperty("java.util.logging.manager");
if (cname != null) { if (cname != null) {
try { try {
Class clz = ClassLoader.getSystemClassLoader().loadClass(cname); Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(cname);
manager = (LogManager) clz.newInstance(); manager = (LogManager) clz.newInstance();
} catch (ClassNotFoundException ex) { } catch (ClassNotFoundException ex) {
Class clz = Thread.currentThread().getContextClassLoader().loadClass(cname); Class<?> clz = Thread.currentThread().getContextClassLoader().loadClass(cname);
manager = (LogManager) clz.newInstance(); manager = (LogManager) clz.newInstance();
} }
} }
...@@ -200,8 +200,8 @@ public class LogManager { ...@@ -200,8 +200,8 @@ public class LogManager {
// Adding the global Logger. Doing so in the Logger.<clinit> // Adding the global Logger. Doing so in the Logger.<clinit>
// would deadlock with the LogManager.<clinit>. // would deadlock with the LogManager.<clinit>.
Logger.global.setLogManager(manager); Logger.getGlobal().setLogManager(manager);
manager.addLogger(Logger.global); manager.addLogger(Logger.getGlobal());
// We don't call readConfiguration() here, as we may be running // We don't call readConfiguration() here, as we may be running
// very early in the JVM startup sequence. Instead readConfiguration // very early in the JVM startup sequence. Instead readConfiguration
...@@ -415,8 +415,8 @@ public class LogManager { ...@@ -415,8 +415,8 @@ public class LogManager {
for (int i = 0; i < names.length; i++) { for (int i = 0; i < names.length; i++) {
String word = names[i]; String word = names[i];
try { try {
Class clz = ClassLoader.getSystemClassLoader().loadClass(word); Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(word);
Handler hdl = (Handler) clz.newInstance(); Handler hdl = (Handler) clz.newInstance();
try { try {
// Check if there is a property defining the // Check if there is a property defining the
// this handler's level. // this handler's level.
...@@ -782,11 +782,11 @@ public class LogManager { ...@@ -782,11 +782,11 @@ public class LogManager {
// responsibility to initialize the logging configuration, by // responsibility to initialize the logging configuration, by
// calling readConfiguration(InputStream) with a suitable stream. // calling readConfiguration(InputStream) with a suitable stream.
try { try {
Class clz = ClassLoader.getSystemClassLoader().loadClass(cname); Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(cname);
clz.newInstance(); clz.newInstance();
return; return;
} catch (ClassNotFoundException ex) { } catch (ClassNotFoundException ex) {
Class clz = Thread.currentThread().getContextClassLoader().loadClass(cname); Class<?> clz = Thread.currentThread().getContextClassLoader().loadClass(cname);
clz.newInstance(); clz.newInstance();
return; return;
} }
...@@ -837,9 +837,9 @@ public class LogManager { ...@@ -837,9 +837,9 @@ public class LogManager {
// the global handlers, if they haven't been initialized yet. // the global handlers, if they haven't been initialized yet.
initializedGlobalHandlers = true; initializedGlobalHandlers = true;
} }
Enumeration enum_ = getLoggerNames(); Enumeration<String> enum_ = getLoggerNames();
while (enum_.hasMoreElements()) { while (enum_.hasMoreElements()) {
String name = (String)enum_.nextElement(); String name = enum_.nextElement();
resetLogger(name); resetLogger(name);
} }
} }
...@@ -926,7 +926,7 @@ public class LogManager { ...@@ -926,7 +926,7 @@ public class LogManager {
for (int i = 0; i < names.length; i++) { for (int i = 0; i < names.length; i++) {
String word = names[i]; String word = names[i];
try { try {
Class clz = ClassLoader.getSystemClassLoader().loadClass(word); Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(word);
clz.newInstance(); clz.newInstance();
} catch (Exception ex) { } catch (Exception ex) {
System.err.println("Can't load config class \"" + word + "\""); System.err.println("Can't load config class \"" + word + "\"");
...@@ -1024,7 +1024,7 @@ public class LogManager { ...@@ -1024,7 +1024,7 @@ public class LogManager {
String val = getProperty(name); String val = getProperty(name);
try { try {
if (val != null) { if (val != null) {
Class clz = ClassLoader.getSystemClassLoader().loadClass(val); Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(val);
return (Filter) clz.newInstance(); return (Filter) clz.newInstance();
} }
} catch (Exception ex) { } catch (Exception ex) {
...@@ -1045,7 +1045,7 @@ public class LogManager { ...@@ -1045,7 +1045,7 @@ public class LogManager {
String val = getProperty(name); String val = getProperty(name);
try { try {
if (val != null) { if (val != null) {
Class clz = ClassLoader.getSystemClassLoader().loadClass(val); Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(val);
return (Formatter) clz.newInstance(); return (Formatter) clz.newInstance();
} }
} catch (Exception ex) { } catch (Exception ex) {
...@@ -1163,7 +1163,7 @@ public class LogManager { ...@@ -1163,7 +1163,7 @@ public class LogManager {
// Private method to be called when the configuration has // Private method to be called when the configuration has
// changed to apply any level settings to any pre-existing loggers. // changed to apply any level settings to any pre-existing loggers.
synchronized private void setLevelsOnExistingLoggers() { synchronized private void setLevelsOnExistingLoggers() {
Enumeration enum_ = props.propertyNames(); Enumeration<?> enum_ = props.propertyNames();
while (enum_.hasMoreElements()) { while (enum_.hasMoreElements()) {
String key = (String)enum_.nextElement(); String key = (String)enum_.nextElement();
if (!key.endsWith(".level")) { if (!key.endsWith(".level")) {
......
...@@ -413,7 +413,7 @@ public abstract class Preferences { ...@@ -413,7 +413,7 @@ public abstract class Preferences {
* @throws IllegalArgumentException if the package has node preferences * @throws IllegalArgumentException if the package has node preferences
* node associated with it. * node associated with it.
*/ */
private static String nodeName(Class c) { private static String nodeName(Class<?> c) {
if (c.isArray()) if (c.isArray())
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Arrays have no associated preferences node."); "Arrays have no associated preferences node.");
......
...@@ -106,7 +106,7 @@ class XmlSupport { ...@@ -106,7 +106,7 @@ class XmlSupport {
xmlRoot.setAttribute("type", (p.isUserNode() ? "user" : "system")); xmlRoot.setAttribute("type", (p.isUserNode() ? "user" : "system"));
// Get bottom-up list of nodes from p to root, excluding root // Get bottom-up list of nodes from p to root, excluding root
List ancestors = new ArrayList(); List<Preferences> ancestors = new ArrayList<>();
for (Preferences kid = p, dad = kid.parent(); dad != null; for (Preferences kid = p, dad = kid.parent(); dad != null;
kid = dad, dad = kid.parent()) { kid = dad, dad = kid.parent()) {
...@@ -116,7 +116,7 @@ class XmlSupport { ...@@ -116,7 +116,7 @@ class XmlSupport {
for (int i=ancestors.size()-1; i >= 0; i--) { for (int i=ancestors.size()-1; i >= 0; i--) {
e.appendChild(doc.createElement("map")); e.appendChild(doc.createElement("map"));
e = (Element) e.appendChild(doc.createElement("node")); e = (Element) e.appendChild(doc.createElement("node"));
e.setAttribute("name", ((Preferences)ancestors.get(i)).name()); e.setAttribute("name", ancestors.get(i).name());
} }
putPreferencesInXml(e, doc, p, subTree); putPreferencesInXml(e, doc, p, subTree);
...@@ -339,17 +339,17 @@ class XmlSupport { ...@@ -339,17 +339,17 @@ class XmlSupport {
* @throws IOException if writing to the specified output stream * @throws IOException if writing to the specified output stream
* results in an <tt>IOException</tt>. * results in an <tt>IOException</tt>.
*/ */
static void exportMap(OutputStream os, Map map) throws IOException { static void exportMap(OutputStream os, Map<String, String> map) throws IOException {
Document doc = createPrefsDoc("map"); Document doc = createPrefsDoc("map");
Element xmlMap = doc.getDocumentElement( ) ; Element xmlMap = doc.getDocumentElement( ) ;
xmlMap.setAttribute("MAP_XML_VERSION", MAP_XML_VERSION); xmlMap.setAttribute("MAP_XML_VERSION", MAP_XML_VERSION);
for (Iterator i = map.entrySet().iterator(); i.hasNext(); ) { for (Iterator<Map.Entry<String, String>> i = map.entrySet().iterator(); i.hasNext(); ) {
Map.Entry e = (Map.Entry) i.next(); Map.Entry<String, String> e = i.next();
Element xe = (Element) Element xe = (Element)
xmlMap.appendChild(doc.createElement("entry")); xmlMap.appendChild(doc.createElement("entry"));
xe.setAttribute("key", (String) e.getKey()); xe.setAttribute("key", e.getKey());
xe.setAttribute("value", (String) e.getValue()); xe.setAttribute("value", e.getValue());
} }
writeDoc(doc, os); writeDoc(doc, os);
...@@ -368,7 +368,7 @@ class XmlSupport { ...@@ -368,7 +368,7 @@ class XmlSupport {
* @throws InvalidPreferencesFormatException Data on input stream does not * @throws InvalidPreferencesFormatException Data on input stream does not
* constitute a valid XML document with the mandated document type. * constitute a valid XML document with the mandated document type.
*/ */
static void importMap(InputStream is, Map m) static void importMap(InputStream is, Map<String, String> m)
throws IOException, InvalidPreferencesFormatException throws IOException, InvalidPreferencesFormatException
{ {
try { try {
......
...@@ -1583,13 +1583,26 @@ loop: for(int x=0, offset=0; x<nCodePoints; x++, offset+=len) { ...@@ -1583,13 +1583,26 @@ loop: for(int x=0, offset=0; x<nCodePoints; x++, offset+=len) {
return; return;
int j = i; int j = i;
i += 2; i += 2;
int[] newtemp = new int[j + 2*(pLen-i) + 2]; int[] newtemp = new int[j + 3*(pLen-i) + 2];
System.arraycopy(temp, 0, newtemp, 0, j); System.arraycopy(temp, 0, newtemp, 0, j);
boolean inQuote = true; boolean inQuote = true;
boolean beginQuote = true;
while (i < pLen) { while (i < pLen) {
int c = temp[i++]; int c = temp[i++];
if (! ASCII.isAscii(c) || ASCII.isAlnum(c)) { if (!ASCII.isAscii(c) || ASCII.isAlpha(c)) {
newtemp[j++] = c;
} else if (ASCII.isDigit(c)) {
if (beginQuote) {
/*
* A unicode escape \[0xu] could be before this quote,
* and we don't want this numeric char to processed as
* part of the escape.
*/
newtemp[j++] = '\\';
newtemp[j++] = 'x';
newtemp[j++] = '3';
}
newtemp[j++] = c; newtemp[j++] = c;
} else if (c != '\\') { } else if (c != '\\') {
if (inQuote) newtemp[j++] = '\\'; if (inQuote) newtemp[j++] = '\\';
...@@ -1606,12 +1619,16 @@ loop: for(int x=0, offset=0; x<nCodePoints; x++, offset+=len) { ...@@ -1606,12 +1619,16 @@ loop: for(int x=0, offset=0; x<nCodePoints; x++, offset+=len) {
if (temp[i] == 'Q') { if (temp[i] == 'Q') {
i++; i++;
inQuote = true; inQuote = true;
beginQuote = true;
continue;
} else { } else {
newtemp[j++] = c; newtemp[j++] = c;
if (i != pLen) if (i != pLen)
newtemp[j++] = temp[i++]; newtemp[j++] = temp[i++];
} }
} }
beginQuote = false;
} }
patternLength = j; patternLength = j;
......
...@@ -281,6 +281,7 @@ class ZipEntry implements ZipConstants, Cloneable { ...@@ -281,6 +281,7 @@ class ZipEntry implements ZipConstants, Cloneable {
* Converts DOS time to Java time (number of milliseconds since epoch). * Converts DOS time to Java time (number of milliseconds since epoch).
*/ */
private static long dosToJavaTime(long dtime) { private static long dosToJavaTime(long dtime) {
@SuppressWarnings("deprecation") // Use of date constructor.
Date d = new Date((int)(((dtime >> 25) & 0x7f) + 80), Date d = new Date((int)(((dtime >> 25) & 0x7f) + 80),
(int)(((dtime >> 21) & 0x0f) - 1), (int)(((dtime >> 21) & 0x0f) - 1),
(int)((dtime >> 16) & 0x1f), (int)((dtime >> 16) & 0x1f),
...@@ -293,6 +294,7 @@ class ZipEntry implements ZipConstants, Cloneable { ...@@ -293,6 +294,7 @@ class ZipEntry implements ZipConstants, Cloneable {
/* /*
* Converts Java time to DOS time. * Converts Java time to DOS time.
*/ */
@SuppressWarnings("deprecation") // Use of date methods
private static long javaToDosTime(long time) { private static long javaToDosTime(long time) {
Date d = new Date(time); Date d = new Date(time);
int year = d.getYear() + 1900; int year = d.getYear() + 1900;
......
...@@ -36,6 +36,8 @@ package javax.script; ...@@ -36,6 +36,8 @@ package javax.script;
*/ */
public class ScriptException extends Exception { public class ScriptException extends Exception {
private static final long serialVersionUID = 8265071037049225001L;
private String fileName; private String fileName;
private int lineNumber; private int lineNumber;
private int columnNumber; private int columnNumber;
......
...@@ -52,5 +52,6 @@ public interface NodeSetData extends Data { ...@@ -52,5 +52,6 @@ public interface NodeSetData extends Data {
* @return an <code>Iterator</code> over the nodes in this * @return an <code>Iterator</code> over the nodes in this
* <code>NodeSetData</code> in document order * <code>NodeSetData</code> in document order
*/ */
@SuppressWarnings("rawtypes")
Iterator iterator(); Iterator iterator();
} }
...@@ -47,13 +47,13 @@ import org.w3c.dom.Element; ...@@ -47,13 +47,13 @@ import org.w3c.dom.Element;
*/ */
public class DOMCryptoContext implements XMLCryptoContext { public class DOMCryptoContext implements XMLCryptoContext {
private HashMap nsMap = new HashMap(); private HashMap<String,String> nsMap = new HashMap<>();
private HashMap idMap = new HashMap(); private HashMap<String,Element> idMap = new HashMap<>();
private HashMap objMap = new HashMap(); private HashMap<Object,Object> objMap = new HashMap<>();
private String baseURI; private String baseURI;
private KeySelector ks; private KeySelector ks;
private URIDereferencer dereferencer; private URIDereferencer dereferencer;
private HashMap propMap = new HashMap(); private HashMap<String,Object> propMap = new HashMap<>();
private String defaultPrefix; private String defaultPrefix;
/** /**
...@@ -73,7 +73,7 @@ public class DOMCryptoContext implements XMLCryptoContext { ...@@ -73,7 +73,7 @@ public class DOMCryptoContext implements XMLCryptoContext {
if (namespaceURI == null) { if (namespaceURI == null) {
throw new NullPointerException("namespaceURI cannot be null"); throw new NullPointerException("namespaceURI cannot be null");
} }
String prefix = (String) nsMap.get(namespaceURI); String prefix = nsMap.get(namespaceURI);
return (prefix != null ? prefix : defaultPrefix); return (prefix != null ? prefix : defaultPrefix);
} }
...@@ -87,7 +87,7 @@ public class DOMCryptoContext implements XMLCryptoContext { ...@@ -87,7 +87,7 @@ public class DOMCryptoContext implements XMLCryptoContext {
if (namespaceURI == null) { if (namespaceURI == null) {
throw new NullPointerException("namespaceURI is null"); throw new NullPointerException("namespaceURI is null");
} }
return (String) nsMap.put(namespaceURI, prefix); return nsMap.put(namespaceURI, prefix);
} }
public String getDefaultNamespacePrefix() { public String getDefaultNamespacePrefix() {
...@@ -170,7 +170,7 @@ public class DOMCryptoContext implements XMLCryptoContext { ...@@ -170,7 +170,7 @@ public class DOMCryptoContext implements XMLCryptoContext {
if (idValue == null) { if (idValue == null) {
throw new NullPointerException("idValue is null"); throw new NullPointerException("idValue is null");
} }
return (Element) idMap.get(idValue); return idMap.get(idValue);
} }
/** /**
...@@ -219,6 +219,7 @@ public class DOMCryptoContext implements XMLCryptoContext { ...@@ -219,6 +219,7 @@ public class DOMCryptoContext implements XMLCryptoContext {
* *
* @return a read-only iterator over the set of mappings * @return a read-only iterator over the set of mappings
*/ */
@SuppressWarnings("rawtypes")
public Iterator iterator() { public Iterator iterator() {
return Collections.unmodifiableMap(idMap).entrySet().iterator(); return Collections.unmodifiableMap(idMap).entrySet().iterator();
} }
......
...@@ -86,5 +86,6 @@ public interface Manifest extends XMLStructure { ...@@ -86,5 +86,6 @@ public interface Manifest extends XMLStructure {
* *
* @return an unmodifiable list of one or more <code>Reference</code>s * @return an unmodifiable list of one or more <code>Reference</code>s
*/ */
@SuppressWarnings("rawtypes")
List getReferences(); List getReferences();
} }
...@@ -85,6 +85,7 @@ public interface Reference extends URIReference, XMLStructure { ...@@ -85,6 +85,7 @@ public interface Reference extends URIReference, XMLStructure {
* @return an unmodifiable list of <code>Transform</code>s * @return an unmodifiable list of <code>Transform</code>s
* (may be empty but never <code>null</code>) * (may be empty but never <code>null</code>)
*/ */
@SuppressWarnings("rawtypes")
List getTransforms(); List getTransforms();
/** /**
......
...@@ -87,5 +87,6 @@ public interface SignatureProperties extends XMLStructure { ...@@ -87,5 +87,6 @@ public interface SignatureProperties extends XMLStructure {
* @return an unmodifiable list of one or more * @return an unmodifiable list of one or more
* <code>SignatureProperty</code>s * <code>SignatureProperty</code>s
*/ */
@SuppressWarnings("rawtypes")
List getProperties(); List getProperties();
} }
...@@ -91,5 +91,6 @@ public interface SignatureProperty extends XMLStructure { ...@@ -91,5 +91,6 @@ public interface SignatureProperty extends XMLStructure {
* *
* @return an unmodifiable list of one or more <code>XMLStructure</code>s * @return an unmodifiable list of one or more <code>XMLStructure</code>s
*/ */
@SuppressWarnings("rawtypes")
List getContent(); List getContent();
} }
...@@ -80,6 +80,7 @@ public interface SignedInfo extends XMLStructure { ...@@ -80,6 +80,7 @@ public interface SignedInfo extends XMLStructure {
* *
* @return an unmodifiable list of one or more {@link Reference}s * @return an unmodifiable list of one or more {@link Reference}s
*/ */
@SuppressWarnings("rawtypes")
List getReferences(); List getReferences();
/** /**
......
...@@ -157,9 +157,9 @@ public abstract class TransformService implements Transform { ...@@ -157,9 +157,9 @@ public abstract class TransformService implements Transform {
if (mechanismType.equals("DOM")) { if (mechanismType.equals("DOM")) {
dom = true; dom = true;
} }
List services = GetInstance.getServices("TransformService", algorithm); List<Service> services = GetInstance.getServices("TransformService", algorithm);
for (Iterator t = services.iterator(); t.hasNext(); ) { for (Iterator<Service> t = services.iterator(); t.hasNext(); ) {
Service s = (Service)t.next(); Service s = t.next();
String value = s.getAttribute("MechanismType"); String value = s.getAttribute("MechanismType");
if ((value == null && dom) || if ((value == null && dom) ||
(value != null && value.equals(mechanismType))) { (value != null && value.equals(mechanismType))) {
...@@ -277,7 +277,7 @@ public abstract class TransformService implements Transform { ...@@ -277,7 +277,7 @@ public abstract class TransformService implements Transform {
+ " mechanism not available"); + " mechanism not available");
} }
private static class MechanismMapEntry implements Map.Entry { private static class MechanismMapEntry implements Map.Entry<String,String> {
private final String mechanism; private final String mechanism;
private final String algorithm; private final String algorithm;
private final String key; private final String key;
...@@ -290,19 +290,19 @@ public abstract class TransformService implements Transform { ...@@ -290,19 +290,19 @@ public abstract class TransformService implements Transform {
if (!(o instanceof Map.Entry)) { if (!(o instanceof Map.Entry)) {
return false; return false;
} }
Map.Entry e = (Map.Entry) o; Map.Entry<?,?> e = (Map.Entry<?,?>) o;
return (getKey()==null ? return (getKey()==null ?
e.getKey()==null : getKey().equals(e.getKey())) && e.getKey()==null : getKey().equals(e.getKey())) &&
(getValue()==null ? (getValue()==null ?
e.getValue()==null : getValue().equals(e.getValue())); e.getValue()==null : getValue().equals(e.getValue()));
} }
public Object getKey() { public String getKey() {
return key; return key;
} }
public Object getValue() { public String getValue() {
return mechanism; return mechanism;
} }
public Object setValue(Object value) { public String setValue(String value) {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
public int hashCode() { public int hashCode() {
......
...@@ -100,6 +100,7 @@ public interface XMLObject extends XMLStructure { ...@@ -100,6 +100,7 @@ public interface XMLObject extends XMLStructure {
* @return an unmodifiable list of <code>XMLStructure</code>s (may be empty * @return an unmodifiable list of <code>XMLStructure</code>s (may be empty
* but never <code>null</code>) * but never <code>null</code>)
*/ */
@SuppressWarnings("rawtypes")
List getContent(); List getContent();
/** /**
......
...@@ -136,6 +136,7 @@ public interface XMLSignature extends XMLStructure { ...@@ -136,6 +136,7 @@ public interface XMLSignature extends XMLStructure {
* @return an unmodifiable list of <code>XMLObject</code>s (may be empty * @return an unmodifiable list of <code>XMLObject</code>s (may be empty
* but never <code>null</code>) * but never <code>null</code>)
*/ */
@SuppressWarnings("rawtypes")
List getObjects(); List getObjects();
/** /**
......
...@@ -365,6 +365,7 @@ public abstract class XMLSignatureFactory { ...@@ -365,6 +365,7 @@ public abstract class XMLSignatureFactory {
* @throws ClassCastException if any of the <code>objects</code> are not of * @throws ClassCastException if any of the <code>objects</code> are not of
* type <code>XMLObject</code> * type <code>XMLObject</code>
*/ */
@SuppressWarnings("rawtypes")
public abstract XMLSignature newXMLSignature(SignedInfo si, KeyInfo ki, public abstract XMLSignature newXMLSignature(SignedInfo si, KeyInfo ki,
List objects, String id, String signatureValueId); List objects, String id, String signatureValueId);
...@@ -398,6 +399,7 @@ public abstract class XMLSignatureFactory { ...@@ -398,6 +399,7 @@ public abstract class XMLSignatureFactory {
* compliant * compliant
* @throws NullPointerException if <code>dm</code> is <code>null</code> * @throws NullPointerException if <code>dm</code> is <code>null</code>
*/ */
@SuppressWarnings("rawtypes")
public abstract Reference newReference(String uri, DigestMethod dm, public abstract Reference newReference(String uri, DigestMethod dm,
List transforms, String type, String id); List transforms, String type, String id);
...@@ -428,6 +430,7 @@ public abstract class XMLSignatureFactory { ...@@ -428,6 +430,7 @@ public abstract class XMLSignatureFactory {
* @throws NullPointerException if <code>dm</code> or * @throws NullPointerException if <code>dm</code> or
* <code>digestValue</code> is <code>null</code> * <code>digestValue</code> is <code>null</code>
*/ */
@SuppressWarnings("rawtypes")
public abstract Reference newReference(String uri, DigestMethod dm, public abstract Reference newReference(String uri, DigestMethod dm,
List transforms, String type, String id, byte[] digestValue); List transforms, String type, String id, byte[] digestValue);
...@@ -470,6 +473,7 @@ public abstract class XMLSignatureFactory { ...@@ -470,6 +473,7 @@ public abstract class XMLSignatureFactory {
* <code>appliedTransforms</code> or <code>result</code> is * <code>appliedTransforms</code> or <code>result</code> is
* <code>null</code> * <code>null</code>
*/ */
@SuppressWarnings("rawtypes")
public abstract Reference newReference(String uri, DigestMethod dm, public abstract Reference newReference(String uri, DigestMethod dm,
List appliedTransforms, Data result, List transforms, String type, List appliedTransforms, Data result, List transforms, String type,
String id); String id);
...@@ -489,6 +493,7 @@ public abstract class XMLSignatureFactory { ...@@ -489,6 +493,7 @@ public abstract class XMLSignatureFactory {
* @throws NullPointerException if any of the parameters * @throws NullPointerException if any of the parameters
* are <code>null</code> * are <code>null</code>
*/ */
@SuppressWarnings("rawtypes")
public abstract SignedInfo newSignedInfo(CanonicalizationMethod cm, public abstract SignedInfo newSignedInfo(CanonicalizationMethod cm,
SignatureMethod sm, List references); SignatureMethod sm, List references);
...@@ -507,6 +512,7 @@ public abstract class XMLSignatureFactory { ...@@ -507,6 +512,7 @@ public abstract class XMLSignatureFactory {
* @throws NullPointerException if <code>cm</code>, <code>sm</code>, or * @throws NullPointerException if <code>cm</code>, <code>sm</code>, or
* <code>references</code> are <code>null</code> * <code>references</code> are <code>null</code>
*/ */
@SuppressWarnings("rawtypes")
public abstract SignedInfo newSignedInfo(CanonicalizationMethod cm, public abstract SignedInfo newSignedInfo(CanonicalizationMethod cm,
SignatureMethod sm, List references, String id); SignatureMethod sm, List references, String id);
...@@ -524,6 +530,7 @@ public abstract class XMLSignatureFactory { ...@@ -524,6 +530,7 @@ public abstract class XMLSignatureFactory {
* @throws ClassCastException if <code>content</code> contains any * @throws ClassCastException if <code>content</code> contains any
* entries that are not of type {@link XMLStructure} * entries that are not of type {@link XMLStructure}
*/ */
@SuppressWarnings("rawtypes")
public abstract XMLObject newXMLObject(List content, String id, public abstract XMLObject newXMLObject(List content, String id,
String mimeType, String encoding); String mimeType, String encoding);
...@@ -540,6 +547,7 @@ public abstract class XMLSignatureFactory { ...@@ -540,6 +547,7 @@ public abstract class XMLSignatureFactory {
* @throws ClassCastException if <code>references</code> contains any * @throws ClassCastException if <code>references</code> contains any
* entries that are not of type {@link Reference} * entries that are not of type {@link Reference}
*/ */
@SuppressWarnings("rawtypes")
public abstract Manifest newManifest(List references); public abstract Manifest newManifest(List references);
/** /**
...@@ -556,6 +564,7 @@ public abstract class XMLSignatureFactory { ...@@ -556,6 +564,7 @@ public abstract class XMLSignatureFactory {
* @throws ClassCastException if <code>references</code> contains any * @throws ClassCastException if <code>references</code> contains any
* entries that are not of type {@link Reference} * entries that are not of type {@link Reference}
*/ */
@SuppressWarnings("rawtypes")
public abstract Manifest newManifest(List references, String id); public abstract Manifest newManifest(List references, String id);
/** /**
...@@ -574,6 +583,7 @@ public abstract class XMLSignatureFactory { ...@@ -574,6 +583,7 @@ public abstract class XMLSignatureFactory {
* @throws ClassCastException if <code>content</code> contains any * @throws ClassCastException if <code>content</code> contains any
* entries that are not of type {@link XMLStructure} * entries that are not of type {@link XMLStructure}
*/ */
@SuppressWarnings("rawtypes")
public abstract SignatureProperty newSignatureProperty public abstract SignatureProperty newSignatureProperty
(List content, String target, String id); (List content, String target, String id);
...@@ -592,6 +602,7 @@ public abstract class XMLSignatureFactory { ...@@ -592,6 +602,7 @@ public abstract class XMLSignatureFactory {
* @throws ClassCastException if <code>properties</code> contains any * @throws ClassCastException if <code>properties</code> contains any
* entries that are not of type {@link SignatureProperty} * entries that are not of type {@link SignatureProperty}
*/ */
@SuppressWarnings("rawtypes")
public abstract SignatureProperties newSignatureProperties public abstract SignatureProperties newSignatureProperties
(List properties, String id); (List properties, String id);
......
...@@ -94,6 +94,7 @@ public interface KeyInfo extends XMLStructure { ...@@ -94,6 +94,7 @@ public interface KeyInfo extends XMLStructure {
* in this <code>KeyInfo</code>. Never returns <code>null</code> or an * in this <code>KeyInfo</code>. Never returns <code>null</code> or an
* empty list. * empty list.
*/ */
@SuppressWarnings("rawtypes")
List getContent(); List getContent();
/** /**
......
...@@ -305,6 +305,7 @@ public abstract class KeyInfoFactory { ...@@ -305,6 +305,7 @@ public abstract class KeyInfoFactory {
* @throws ClassCastException if <code>content</code> contains any entries * @throws ClassCastException if <code>content</code> contains any entries
* that are not of type {@link XMLStructure} * that are not of type {@link XMLStructure}
*/ */
@SuppressWarnings("rawtypes")
public abstract KeyInfo newKeyInfo(List content); public abstract KeyInfo newKeyInfo(List content);
/** /**
...@@ -324,6 +325,7 @@ public abstract class KeyInfoFactory { ...@@ -324,6 +325,7 @@ public abstract class KeyInfoFactory {
* @throws ClassCastException if <code>content</code> contains any entries * @throws ClassCastException if <code>content</code> contains any entries
* that are not of type {@link XMLStructure} * that are not of type {@link XMLStructure}
*/ */
@SuppressWarnings("rawtypes")
public abstract KeyInfo newKeyInfo(List content, String id); public abstract KeyInfo newKeyInfo(List content, String id);
/** /**
...@@ -385,6 +387,7 @@ public abstract class KeyInfoFactory { ...@@ -385,6 +387,7 @@ public abstract class KeyInfoFactory {
* @throws ClassCastException if <code>other</code> contains any * @throws ClassCastException if <code>other</code> contains any
* entries that are not of type {@link XMLStructure} * entries that are not of type {@link XMLStructure}
*/ */
@SuppressWarnings("rawtypes")
public abstract PGPData newPGPData(byte[] keyId, byte[] keyPacket, public abstract PGPData newPGPData(byte[] keyId, byte[] keyPacket,
List other); List other);
...@@ -408,6 +411,7 @@ public abstract class KeyInfoFactory { ...@@ -408,6 +411,7 @@ public abstract class KeyInfoFactory {
* @throws ClassCastException if <code>other</code> contains any * @throws ClassCastException if <code>other</code> contains any
* entries that are not of type {@link XMLStructure} * entries that are not of type {@link XMLStructure}
*/ */
@SuppressWarnings("rawtypes")
public abstract PGPData newPGPData(byte[] keyPacket, List other); public abstract PGPData newPGPData(byte[] keyPacket, List other);
/** /**
...@@ -439,6 +443,7 @@ public abstract class KeyInfoFactory { ...@@ -439,6 +443,7 @@ public abstract class KeyInfoFactory {
* @throws ClassCastException if <code>transforms</code> contains any * @throws ClassCastException if <code>transforms</code> contains any
* entries that are not of type {@link Transform} * entries that are not of type {@link Transform}
*/ */
@SuppressWarnings("rawtypes")
public abstract RetrievalMethod newRetrievalMethod(String uri, String type, public abstract RetrievalMethod newRetrievalMethod(String uri, String type,
List transforms); List transforms);
...@@ -464,6 +469,7 @@ public abstract class KeyInfoFactory { ...@@ -464,6 +469,7 @@ public abstract class KeyInfoFactory {
* @throws ClassCastException if <code>content</code> contains any entries * @throws ClassCastException if <code>content</code> contains any entries
* that are not of one of the valid types mentioned above * that are not of one of the valid types mentioned above
*/ */
@SuppressWarnings("rawtypes")
public abstract X509Data newX509Data(List content); public abstract X509Data newX509Data(List content);
/** /**
......
...@@ -112,5 +112,6 @@ public interface PGPData extends XMLStructure { ...@@ -112,5 +112,6 @@ public interface PGPData extends XMLStructure {
* @return an unmodifiable list of <code>XMLStructure</code>s (may be * @return an unmodifiable list of <code>XMLStructure</code>s (may be
* empty, but never <code>null</code>) * empty, but never <code>null</code>)
*/ */
@SuppressWarnings("rawtypes")
List getExternalElements(); List getExternalElements();
} }
...@@ -80,6 +80,7 @@ public interface RetrievalMethod extends URIReference, XMLStructure { ...@@ -80,6 +80,7 @@ public interface RetrievalMethod extends URIReference, XMLStructure {
* @return an unmodifiable list of <code>Transform</code> objects (may be * @return an unmodifiable list of <code>Transform</code> objects (may be
* empty but never <code>null</code>). * empty but never <code>null</code>).
*/ */
@SuppressWarnings("rawtypes")
List getTransforms(); List getTransforms();
/** /**
......
...@@ -109,5 +109,6 @@ public interface X509Data extends XMLStructure { ...@@ -109,5 +109,6 @@ public interface X509Data extends XMLStructure {
* @return an unmodifiable list of the content in this <code>X509Data</code> * @return an unmodifiable list of the content in this <code>X509Data</code>
* (never <code>null</code> or empty) * (never <code>null</code> or empty)
*/ */
@SuppressWarnings("rawtypes")
List getContent(); List getContent();
} }
...@@ -59,7 +59,7 @@ import java.util.List; ...@@ -59,7 +59,7 @@ import java.util.List;
*/ */
public final class ExcC14NParameterSpec implements C14NMethodParameterSpec { public final class ExcC14NParameterSpec implements C14NMethodParameterSpec {
private List preList; private List<String> preList;
/** /**
* Indicates the default namespace ("#default"). * Indicates the default namespace ("#default").
...@@ -71,7 +71,7 @@ public final class ExcC14NParameterSpec implements C14NMethodParameterSpec { ...@@ -71,7 +71,7 @@ public final class ExcC14NParameterSpec implements C14NMethodParameterSpec {
* list. * list.
*/ */
public ExcC14NParameterSpec() { public ExcC14NParameterSpec() {
preList = Collections.EMPTY_LIST; preList = Collections.emptyList();
} }
/** /**
...@@ -86,17 +86,22 @@ public final class ExcC14NParameterSpec implements C14NMethodParameterSpec { ...@@ -86,17 +86,22 @@ public final class ExcC14NParameterSpec implements C14NMethodParameterSpec {
* @throws ClassCastException if any of the entries in the list are not * @throws ClassCastException if any of the entries in the list are not
* of type <code>String</code> * of type <code>String</code>
*/ */
@SuppressWarnings("rawtypes")
public ExcC14NParameterSpec(List prefixList) { public ExcC14NParameterSpec(List prefixList) {
if (prefixList == null) { if (prefixList == null) {
throw new NullPointerException("prefixList cannot be null"); throw new NullPointerException("prefixList cannot be null");
} }
this.preList = new ArrayList(prefixList); List<?> copy = new ArrayList<>((List<?>)prefixList);
for (int i = 0, size = preList.size(); i < size; i++) { for (int i = 0, size = copy.size(); i < size; i++) {
if (!(preList.get(i) instanceof String)) { if (!(copy.get(i) instanceof String)) {
throw new ClassCastException("not a String"); throw new ClassCastException("not a String");
} }
} }
preList = Collections.unmodifiableList(preList);
@SuppressWarnings("unchecked")
List<String> temp = (List<String>)copy;
preList = Collections.unmodifiableList(temp);
} }
/** /**
...@@ -109,6 +114,7 @@ public final class ExcC14NParameterSpec implements C14NMethodParameterSpec { ...@@ -109,6 +114,7 @@ public final class ExcC14NParameterSpec implements C14NMethodParameterSpec {
* @return the inclusive namespace prefix list (may be empty but never * @return the inclusive namespace prefix list (may be empty but never
* <code>null</code>) * <code>null</code>)
*/ */
@SuppressWarnings("rawtypes")
public List getPrefixList() { public List getPrefixList() {
return preList; return preList;
} }
......
...@@ -46,7 +46,7 @@ import javax.xml.crypto.dsig.Transform; ...@@ -46,7 +46,7 @@ import javax.xml.crypto.dsig.Transform;
*/ */
public final class XPathFilter2ParameterSpec implements TransformParameterSpec { public final class XPathFilter2ParameterSpec implements TransformParameterSpec {
private final List xPathList; private final List<XPathType> xPathList;
/** /**
* Creates an <code>XPathFilter2ParameterSpec</code>. * Creates an <code>XPathFilter2ParameterSpec</code>.
...@@ -59,11 +59,12 @@ public final class XPathFilter2ParameterSpec implements TransformParameterSpec { ...@@ -59,11 +59,12 @@ public final class XPathFilter2ParameterSpec implements TransformParameterSpec {
* @throws NullPointerException if <code>xPathList</code> is * @throws NullPointerException if <code>xPathList</code> is
* <code>null</code> * <code>null</code>
*/ */
@SuppressWarnings("rawtypes")
public XPathFilter2ParameterSpec(List xPathList) { public XPathFilter2ParameterSpec(List xPathList) {
if (xPathList == null) { if (xPathList == null) {
throw new NullPointerException("xPathList cannot be null"); throw new NullPointerException("xPathList cannot be null");
} }
List xPathListCopy = new ArrayList(xPathList); List<?> xPathListCopy = new ArrayList<>((List<?>)xPathList);
if (xPathListCopy.isEmpty()) { if (xPathListCopy.isEmpty()) {
throw new IllegalArgumentException("xPathList cannot be empty"); throw new IllegalArgumentException("xPathList cannot be empty");
} }
...@@ -74,7 +75,11 @@ public final class XPathFilter2ParameterSpec implements TransformParameterSpec { ...@@ -74,7 +75,11 @@ public final class XPathFilter2ParameterSpec implements TransformParameterSpec {
("xPathList["+i+"] is not a valid type"); ("xPathList["+i+"] is not a valid type");
} }
} }
this.xPathList = Collections.unmodifiableList(xPathListCopy);
@SuppressWarnings("unchecked")
List<XPathType> temp = (List<XPathType>)xPathListCopy;
this.xPathList = Collections.unmodifiableList(temp);
} }
/** /**
...@@ -86,6 +91,7 @@ public final class XPathFilter2ParameterSpec implements TransformParameterSpec { ...@@ -86,6 +91,7 @@ public final class XPathFilter2ParameterSpec implements TransformParameterSpec {
* @return a <code>List</code> of <code>XPathType</code> objects * @return a <code>List</code> of <code>XPathType</code> objects
* (never <code>null</code> or empty) * (never <code>null</code> or empty)
*/ */
@SuppressWarnings("rawtypes")
public List getXPathList() { public List getXPathList() {
return xPathList; return xPathList;
} }
......
...@@ -52,7 +52,7 @@ import java.util.Map.Entry; ...@@ -52,7 +52,7 @@ import java.util.Map.Entry;
public final class XPathFilterParameterSpec implements TransformParameterSpec { public final class XPathFilterParameterSpec implements TransformParameterSpec {
private String xPath; private String xPath;
private Map nsMap; private Map<String,String> nsMap;
/** /**
* Creates an <code>XPathFilterParameterSpec</code> with the specified * Creates an <code>XPathFilterParameterSpec</code> with the specified
...@@ -66,7 +66,7 @@ public final class XPathFilterParameterSpec implements TransformParameterSpec { ...@@ -66,7 +66,7 @@ public final class XPathFilterParameterSpec implements TransformParameterSpec {
throw new NullPointerException(); throw new NullPointerException();
} }
this.xPath = xPath; this.xPath = xPath;
this.nsMap = Collections.EMPTY_MAP; this.nsMap = Collections.emptyMap();
} }
/** /**
...@@ -83,21 +83,26 @@ public final class XPathFilterParameterSpec implements TransformParameterSpec { ...@@ -83,21 +83,26 @@ public final class XPathFilterParameterSpec implements TransformParameterSpec {
* @throws ClassCastException if any of the map's keys or entries are not * @throws ClassCastException if any of the map's keys or entries are not
* of type <code>String</code> * of type <code>String</code>
*/ */
@SuppressWarnings("rawtypes")
public XPathFilterParameterSpec(String xPath, Map namespaceMap) { public XPathFilterParameterSpec(String xPath, Map namespaceMap) {
if (xPath == null || namespaceMap == null) { if (xPath == null || namespaceMap == null) {
throw new NullPointerException(); throw new NullPointerException();
} }
this.xPath = xPath; this.xPath = xPath;
nsMap = new HashMap(namespaceMap); Map<?,?> copy = new HashMap<>((Map<?,?>)namespaceMap);
Iterator entries = nsMap.entrySet().iterator(); Iterator<? extends Map.Entry<?,?>> entries = copy.entrySet().iterator();
while (entries.hasNext()) { while (entries.hasNext()) {
Map.Entry me = (Map.Entry) entries.next(); Map.Entry<?,?> me = entries.next();
if (!(me.getKey() instanceof String) || if (!(me.getKey() instanceof String) ||
!(me.getValue() instanceof String)) { !(me.getValue() instanceof String)) {
throw new ClassCastException("not a String"); throw new ClassCastException("not a String");
} }
} }
nsMap = Collections.unmodifiableMap(nsMap);
@SuppressWarnings("unchecked")
Map<String,String> temp = (Map<String,String>)copy;
nsMap = Collections.unmodifiableMap(temp);
} }
/** /**
...@@ -120,6 +125,7 @@ public final class XPathFilterParameterSpec implements TransformParameterSpec { ...@@ -120,6 +125,7 @@ public final class XPathFilterParameterSpec implements TransformParameterSpec {
* @return a <code>Map</code> of namespace prefixes to namespace URIs (may * @return a <code>Map</code> of namespace prefixes to namespace URIs (may
* be empty, but never <code>null</code>) * be empty, but never <code>null</code>)
*/ */
@SuppressWarnings("rawtypes")
public Map getNamespaceMap() { public Map getNamespaceMap() {
return nsMap; return nsMap;
} }
......
...@@ -106,7 +106,7 @@ public class XPathType { ...@@ -106,7 +106,7 @@ public class XPathType {
private final String expression; private final String expression;
private final Filter filter; private final Filter filter;
private Map nsMap; private Map<String,String> nsMap;
/** /**
* Creates an <code>XPathType</code> instance with the specified XPath * Creates an <code>XPathType</code> instance with the specified XPath
...@@ -127,7 +127,7 @@ public class XPathType { ...@@ -127,7 +127,7 @@ public class XPathType {
} }
this.expression = expression; this.expression = expression;
this.filter = filter; this.filter = filter;
this.nsMap = Collections.EMPTY_MAP; this.nsMap = Collections.emptyMap();
} }
/** /**
...@@ -147,21 +147,26 @@ public class XPathType { ...@@ -147,21 +147,26 @@ public class XPathType {
* @throws ClassCastException if any of the map's keys or entries are * @throws ClassCastException if any of the map's keys or entries are
* not of type <code>String</code> * not of type <code>String</code>
*/ */
@SuppressWarnings("rawtypes")
public XPathType(String expression, Filter filter, Map namespaceMap) { public XPathType(String expression, Filter filter, Map namespaceMap) {
this(expression, filter); this(expression, filter);
if (namespaceMap == null) { if (namespaceMap == null) {
throw new NullPointerException("namespaceMap cannot be null"); throw new NullPointerException("namespaceMap cannot be null");
} }
nsMap = new HashMap(namespaceMap); Map<?,?> copy = new HashMap<>((Map<?,?>)namespaceMap);
Iterator entries = nsMap.entrySet().iterator(); Iterator<? extends Map.Entry<?,?>> entries = copy.entrySet().iterator();
while (entries.hasNext()) { while (entries.hasNext()) {
Map.Entry me = (Map.Entry) entries.next(); Map.Entry<?,?> me = entries.next();
if (!(me.getKey() instanceof String) || if (!(me.getKey() instanceof String) ||
!(me.getValue() instanceof String)) { !(me.getValue() instanceof String)) {
throw new ClassCastException("not a String"); throw new ClassCastException("not a String");
} }
} }
nsMap = Collections.unmodifiableMap(nsMap);
@SuppressWarnings("unchecked")
Map<String,String> temp = (Map<String,String>)copy;
nsMap = Collections.unmodifiableMap(temp);
} }
/** /**
...@@ -193,6 +198,7 @@ public class XPathType { ...@@ -193,6 +198,7 @@ public class XPathType {
* @return a <code>Map</code> of namespace prefixes to namespace URIs * @return a <code>Map</code> of namespace prefixes to namespace URIs
* (may be empty, but never <code>null</code>) * (may be empty, but never <code>null</code>)
*/ */
@SuppressWarnings("rawtypes")
public Map getNamespaceMap() { public Map getNamespaceMap() {
return nsMap; return nsMap;
} }
......
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.misc;
import java.net.HttpCookie;
import java.util.List;
public interface JavaNetHttpCookieAccess {
/*
* Constructs cookies from Set-Cookie or Set-Cookie2 header string,
* retaining the original header String in the cookie itself.
*/
public List<HttpCookie> parse(String header);
/*
* Returns the original header this cookie was consructed from, if it was
* constructed by parsing a header, otherwise null.
*/
public String header(HttpCookie cookie);
}
...@@ -47,6 +47,7 @@ public class SharedSecrets { ...@@ -47,6 +47,7 @@ public class SharedSecrets {
private static JavaLangAccess javaLangAccess; private static JavaLangAccess javaLangAccess;
private static JavaIOAccess javaIOAccess; private static JavaIOAccess javaIOAccess;
private static JavaNetAccess javaNetAccess; private static JavaNetAccess javaNetAccess;
private static JavaNetHttpCookieAccess javaNetHttpCookieAccess;
private static JavaNioAccess javaNioAccess; private static JavaNioAccess javaNioAccess;
private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess; private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess;
private static JavaSecurityProtectionDomainAccess javaSecurityProtectionDomainAccess; private static JavaSecurityProtectionDomainAccess javaSecurityProtectionDomainAccess;
...@@ -81,6 +82,16 @@ public class SharedSecrets { ...@@ -81,6 +82,16 @@ public class SharedSecrets {
return javaNetAccess; return javaNetAccess;
} }
public static void setJavaNetHttpCookieAccess(JavaNetHttpCookieAccess a) {
javaNetHttpCookieAccess = a;
}
public static JavaNetHttpCookieAccess getJavaNetHttpCookieAccess() {
if (javaNetHttpCookieAccess == null)
unsafe.ensureClassInitialized(java.net.HttpCookie.class);
return javaNetHttpCookieAccess;
}
public static void setJavaNioAccess(JavaNioAccess jna) { public static void setJavaNioAccess(JavaNioAccess jna) {
javaNioAccess = jna; javaNioAccess = jna;
} }
......
...@@ -32,6 +32,7 @@ import java.net.ProtocolException; ...@@ -32,6 +32,7 @@ import java.net.ProtocolException;
import java.net.HttpRetryException; import java.net.HttpRetryException;
import java.net.PasswordAuthentication; import java.net.PasswordAuthentication;
import java.net.Authenticator; import java.net.Authenticator;
import java.net.HttpCookie;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.net.SocketTimeoutException; import java.net.SocketTimeoutException;
...@@ -46,6 +47,8 @@ import java.net.SecureCacheResponse; ...@@ -46,6 +47,8 @@ import java.net.SecureCacheResponse;
import java.net.CacheRequest; import java.net.CacheRequest;
import java.net.Authenticator.RequestorType; import java.net.Authenticator.RequestorType;
import java.io.*; import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
import java.util.List; import java.util.List;
...@@ -2580,6 +2583,80 @@ public class HttpURLConnection extends java.net.HttpURLConnection { ...@@ -2580,6 +2583,80 @@ public class HttpURLConnection extends java.net.HttpURLConnection {
return false; return false;
} }
// constant strings represent set-cookie header names
private final static String SET_COOKIE = "set-cookie";
private final static String SET_COOKIE2 = "set-cookie2";
/**
* Returns a filtered version of the given headers value.
*
* Note: The implementation currently only filters out HttpOnly cookies
* from Set-Cookie and Set-Cookie2 headers.
*/
private String filterHeaderField(String name, String value) {
if (value == null)
return null;
if (SET_COOKIE.equalsIgnoreCase(name) ||
SET_COOKIE2.equalsIgnoreCase(name)) {
// Filtering only if there is a cookie handler. [Assumption: the
// cookie handler will store/retrieve the HttpOnly cookies]
if (cookieHandler == null)
return value;
sun.misc.JavaNetHttpCookieAccess access =
sun.misc.SharedSecrets.getJavaNetHttpCookieAccess();
StringBuilder retValue = new StringBuilder();
List<HttpCookie> cookies = access.parse(value);
boolean multipleCookies = false;
for (HttpCookie cookie : cookies) {
// skip HttpOnly cookies
if (cookie.isHttpOnly())
continue;
if (multipleCookies)
retValue.append(','); // RFC 2965, comma separated
retValue.append(access.header(cookie));
multipleCookies = true;
}
return retValue.length() == 0 ? null : retValue.toString();
}
return value;
}
// Cache the filtered response headers so that they don't need
// to be generated for every getHeaderFields() call.
private Map<String, List<String>> filteredHeaders; // null
private Map<String, List<String>> getFilteredHeaderFields() {
if (filteredHeaders != null)
return filteredHeaders;
filteredHeaders = new HashMap<>();
Map<String, List<String>> headers;
if (cachedHeaders != null)
headers = cachedHeaders.getHeaders();
else
headers = responses.getHeaders();
for (Map.Entry<String, List<String>> e: headers.entrySet()) {
String key = e.getKey();
List<String> values = e.getValue(), filteredVals = new ArrayList<>();
for (String value : values) {
String fVal = filterHeaderField(key, value);
if (fVal != null)
filteredVals.add(fVal);
}
if (!filteredVals.isEmpty())
filteredHeaders.put(key,
Collections.unmodifiableList(filteredVals));
}
return filteredHeaders;
}
/** /**
* Gets a header field by name. Returns null if not known. * Gets a header field by name. Returns null if not known.
* @param name the name of the header field * @param name the name of the header field
...@@ -2591,10 +2668,10 @@ public class HttpURLConnection extends java.net.HttpURLConnection { ...@@ -2591,10 +2668,10 @@ public class HttpURLConnection extends java.net.HttpURLConnection {
} catch (IOException e) {} } catch (IOException e) {}
if (cachedHeaders != null) { if (cachedHeaders != null) {
return cachedHeaders.findValue(name); return filterHeaderField(name, cachedHeaders.findValue(name));
} }
return responses.findValue(name); return filterHeaderField(name, responses.findValue(name));
} }
/** /**
...@@ -2613,11 +2690,7 @@ public class HttpURLConnection extends java.net.HttpURLConnection { ...@@ -2613,11 +2690,7 @@ public class HttpURLConnection extends java.net.HttpURLConnection {
getInputStream(); getInputStream();
} catch (IOException e) {} } catch (IOException e) {}
if (cachedHeaders != null) { return getFilteredHeaderFields();
return cachedHeaders.getHeaders();
}
return responses.getHeaders();
} }
/** /**
...@@ -2631,9 +2704,10 @@ public class HttpURLConnection extends java.net.HttpURLConnection { ...@@ -2631,9 +2704,10 @@ public class HttpURLConnection extends java.net.HttpURLConnection {
} catch (IOException e) {} } catch (IOException e) {}
if (cachedHeaders != null) { if (cachedHeaders != null) {
return cachedHeaders.getValue(n); return filterHeaderField(cachedHeaders.getKey(n),
cachedHeaders.getValue(n));
} }
return responses.getValue(n); return filterHeaderField(responses.getKey(n), responses.getValue(n));
} }
/** /**
......
...@@ -91,6 +91,7 @@ final class ProcessEnvironment ...@@ -91,6 +91,7 @@ final class ProcessEnvironment
} }
/* Only for use by ProcessBuilder.environment() */ /* Only for use by ProcessBuilder.environment() */
@SuppressWarnings("unchecked")
static Map<String,String> environment() { static Map<String,String> environment() {
return new StringEnvironment return new StringEnvironment
((Map<Variable,Value>)(theEnvironment.clone())); ((Map<Variable,Value>)(theEnvironment.clone()));
......
...@@ -367,11 +367,11 @@ ping4(JNIEnv *env, jint fd, struct sockaddr_in* him, jint timeout, ...@@ -367,11 +367,11 @@ ping4(JNIEnv *env, jint fd, struct sockaddr_in* him, jint timeout,
sizeof(struct sockaddr)); sizeof(struct sockaddr));
if (n < 0 && errno != EINPROGRESS ) { if (n < 0 && errno != EINPROGRESS ) {
#ifdef __linux__ #ifdef __linux__
if (errno != EINVAL) if (errno != EINVAL && errno != EHOSTUNREACH)
/* /*
* On some Linuxes, when bound to the loopback interface, sendto * On some Linuxes, when bound to the loopback interface, sendto
* will fail and errno will be set to EINVAL. When that happens, * will fail and errno will be set to EINVAL or EHOSTUNREACH.
* don't throw an exception, just return false. * When that happens, don't throw an exception, just return false.
*/ */
#endif /*__linux__ */ #endif /*__linux__ */
NET_ThrowNew(env, errno, "Can't send ICMP packet"); NET_ThrowNew(env, errno, "Can't send ICMP packet");
...@@ -525,10 +525,11 @@ Java_java_net_Inet4AddressImpl_isReachable0(JNIEnv *env, jobject this, ...@@ -525,10 +525,11 @@ Java_java_net_Inet4AddressImpl_isReachable0(JNIEnv *env, jobject this,
case EADDRNOTAVAIL: /* address is not available on the remote machine */ case EADDRNOTAVAIL: /* address is not available on the remote machine */
#ifdef __linux__ #ifdef __linux__
case EINVAL: case EINVAL:
case EHOSTUNREACH:
/* /*
* On some Linuxes, when bound to the loopback interface, connect * On some Linuxes, when bound to the loopback interface, connect
* will fail and errno will be set to EINVAL. When that happens, * will fail and errno will be set to EINVAL or EHOSTUNREACH.
* don't throw an exception, just return false. * When that happens, don't throw an exception, just return false.
*/ */
#endif /* __linux__ */ #endif /* __linux__ */
close(fd); close(fd);
......
...@@ -502,11 +502,11 @@ ping6(JNIEnv *env, jint fd, struct sockaddr_in6* him, jint timeout, ...@@ -502,11 +502,11 @@ ping6(JNIEnv *env, jint fd, struct sockaddr_in6* him, jint timeout,
n = sendto(fd, sendbuf, plen, 0, (struct sockaddr*) him, sizeof(struct sockaddr_in6)); n = sendto(fd, sendbuf, plen, 0, (struct sockaddr*) him, sizeof(struct sockaddr_in6));
if (n < 0 && errno != EINPROGRESS) { if (n < 0 && errno != EINPROGRESS) {
#ifdef __linux__ #ifdef __linux__
if (errno != EINVAL) if (errno != EINVAL && errno != EHOSTUNREACH)
/* /*
* On some Linuxes, when bound to the loopback interface, sendto * On some Linuxes, when bound to the loopback interface, sendto
* will fail and errno will be set to EINVAL. When that happens, * will fail and errno will be set to EINVAL or EHOSTUNREACH.
* don't throw an exception, just return false. * When that happens, don't throw an exception, just return false.
*/ */
#endif /*__linux__ */ #endif /*__linux__ */
NET_ThrowNew(env, errno, "Can't send ICMP packet"); NET_ThrowNew(env, errno, "Can't send ICMP packet");
...@@ -670,10 +670,11 @@ Java_java_net_Inet6AddressImpl_isReachable0(JNIEnv *env, jobject this, ...@@ -670,10 +670,11 @@ Java_java_net_Inet6AddressImpl_isReachable0(JNIEnv *env, jobject this,
case EADDRNOTAVAIL: /* address is not available on the remote machine */ case EADDRNOTAVAIL: /* address is not available on the remote machine */
#ifdef __linux__ #ifdef __linux__
case EINVAL: case EINVAL:
case EHOSTUNREACH:
/* /*
* On some Linuxes, when bound to the loopback interface, connect * On some Linuxes, when bound to the loopback interface, connect
* will fail and errno will be set to EINVAL. When that happens, * will fail and errno will be set to EINVAL or EHOSTUNREACH.
* don't throw an exception, just return false. * When that happens, don't throw an exception, just return false.
*/ */
#endif /* __linux__ */ #endif /* __linux__ */
close(fd); close(fd);
......
...@@ -68,6 +68,9 @@ import java.util.*; ...@@ -68,6 +68,9 @@ import java.util.*;
final class ProcessEnvironment extends HashMap<String,String> final class ProcessEnvironment extends HashMap<String,String>
{ {
private static final long serialVersionUID = -8017839552603542824L;
private static String validateName(String name) { private static String validateName(String name) {
// An initial `=' indicates a magic Windows variable name -- OK // An initial `=' indicates a magic Windows variable name -- OK
if (name.indexOf('=', 1) != -1 || if (name.indexOf('=', 1) != -1 ||
...@@ -144,6 +147,7 @@ final class ProcessEnvironment extends HashMap<String,String> ...@@ -144,6 +147,7 @@ final class ProcessEnvironment extends HashMap<String,String>
}; };
} }
private static Map.Entry<String,String> checkedEntry(Object o) { private static Map.Entry<String,String> checkedEntry(Object o) {
@SuppressWarnings("unchecked")
Map.Entry<String,String> e = (Map.Entry<String,String>) o; Map.Entry<String,String> e = (Map.Entry<String,String>) o;
nonNullString(e.getKey()); nonNullString(e.getKey());
nonNullString(e.getValue()); nonNullString(e.getValue());
...@@ -281,6 +285,7 @@ final class ProcessEnvironment extends HashMap<String,String> ...@@ -281,6 +285,7 @@ final class ProcessEnvironment extends HashMap<String,String>
} }
// Only for use by ProcessBuilder.environment() // Only for use by ProcessBuilder.environment()
@SuppressWarnings("unchecked")
static Map<String,String> environment() { static Map<String,String> environment() {
return (Map<String,String>) theEnvironment.clone(); return (Map<String,String>) theEnvironment.clone();
} }
......
...@@ -322,8 +322,8 @@ BUNDLE_UP_AND_EXIT = \ ...@@ -322,8 +322,8 @@ BUNDLE_UP_AND_EXIT = \
################################################################ ################################################################
# Default make rule (runs jtreg_tests) # Default make rule (runs default jdk tests)
all: jtreg_tests all: jdk_default
@$(ECHO) "Testing completed successfully" @$(ECHO) "Testing completed successfully"
# Prep for output # Prep for output
...@@ -422,6 +422,7 @@ endef ...@@ -422,6 +422,7 @@ endef
# ------------------------------------------------------------------ # ------------------------------------------------------------------
# Batches of tests (somewhat arbitrary assigments to jdk_* targets) # Batches of tests (somewhat arbitrary assigments to jdk_* targets)
JDK_DEFAULT_TARGETS =
JDK_ALL_TARGETS = JDK_ALL_TARGETS =
# Stable othervm testruns (minus items from PROBLEM_LIST) # Stable othervm testruns (minus items from PROBLEM_LIST)
...@@ -433,6 +434,7 @@ jdk_awt: $(call TestDirs, com/sun/awt java/awt sun/awt \ ...@@ -433,6 +434,7 @@ jdk_awt: $(call TestDirs, com/sun/awt java/awt sun/awt \
# Stable agentvm testruns (minus items from PROBLEM_LIST) # Stable agentvm testruns (minus items from PROBLEM_LIST)
JDK_ALL_TARGETS += jdk_beans1 JDK_ALL_TARGETS += jdk_beans1
JDK_DEFAULT_TARGETS += jdk_beans1
jdk_beans1: $(call TestDirs, \ jdk_beans1: $(call TestDirs, \
java/beans/beancontext java/beans/PropertyChangeSupport \ java/beans/beancontext java/beans/PropertyChangeSupport \
java/beans/Introspector java/beans/Performance \ java/beans/Introspector java/beans/Performance \
...@@ -459,11 +461,13 @@ jdk_beans: jdk_beans1 jdk_beans2 jdk_beans3 ...@@ -459,11 +461,13 @@ jdk_beans: jdk_beans1 jdk_beans2 jdk_beans3
# Stable agentvm testruns (minus items from PROBLEM_LIST) # Stable agentvm testruns (minus items from PROBLEM_LIST)
JDK_ALL_TARGETS += jdk_io JDK_ALL_TARGETS += jdk_io
JDK_DEFAULT_TARGETS += jdk_io
jdk_io: $(call TestDirs, java/io) jdk_io: $(call TestDirs, java/io)
$(call RunAgentvmBatch) $(call RunAgentvmBatch)
# Stable agentvm testruns (minus items from PROBLEM_LIST) # Stable agentvm testruns (minus items from PROBLEM_LIST)
JDK_ALL_TARGETS += jdk_lang JDK_ALL_TARGETS += jdk_lang
JDK_DEFAULT_TARGETS += jdk_lang
jdk_lang: $(call TestDirs, java/lang) jdk_lang: $(call TestDirs, java/lang)
$(call RunAgentvmBatch) $(call RunAgentvmBatch)
...@@ -485,11 +489,13 @@ jdk_management: jdk_management1 jdk_management2 ...@@ -485,11 +489,13 @@ jdk_management: jdk_management1 jdk_management2
# Stable agentvm testruns (minus items from PROBLEM_LIST) # Stable agentvm testruns (minus items from PROBLEM_LIST)
JDK_ALL_TARGETS += jdk_math JDK_ALL_TARGETS += jdk_math
JDK_DEFAULT_TARGETS += jdk_math
jdk_math: $(call TestDirs, java/math) jdk_math: $(call TestDirs, java/math)
$(call RunAgentvmBatch) $(call RunAgentvmBatch)
# Stable agentvm testruns (minus items from PROBLEM_LIST) # Stable agentvm testruns (minus items from PROBLEM_LIST)
JDK_ALL_TARGETS += jdk_misc JDK_ALL_TARGETS += jdk_misc
JDK_DEFAULT_TARGETS += jdk_misc
jdk_misc: $(call TestDirs, \ jdk_misc: $(call TestDirs, \
demo/jvmti demo/zipfs javax/naming javax/script \ demo/jvmti demo/zipfs javax/naming javax/script \
javax/smartcardio com/sun/jndi com/sun/xml sun/misc) javax/smartcardio com/sun/jndi com/sun/xml sun/misc)
...@@ -497,16 +503,19 @@ jdk_misc: $(call TestDirs, \ ...@@ -497,16 +503,19 @@ jdk_misc: $(call TestDirs, \
# Stable agentvm testruns (minus items from PROBLEM_LIST) # Stable agentvm testruns (minus items from PROBLEM_LIST)
JDK_ALL_TARGETS += jdk_net JDK_ALL_TARGETS += jdk_net
JDK_DEFAULT_TARGETS += jdk_net
jdk_net: $(call TestDirs, com/sun/net java/net sun/net) jdk_net: $(call TestDirs, com/sun/net java/net sun/net)
$(call RunAgentvmBatch) $(call RunAgentvmBatch)
# Stable agentvm testruns (minus items from PROBLEM_LIST) # Stable agentvm testruns (minus items from PROBLEM_LIST)
JDK_ALL_TARGETS += jdk_nio1 JDK_ALL_TARGETS += jdk_nio1
JDK_DEFAULT_TARGETS += jdk_nio1
jdk_nio1: $(call TestDirs, java/nio/file) jdk_nio1: $(call TestDirs, java/nio/file)
$(call RunAgentvmBatch) $(call RunAgentvmBatch)
# Stable agentvm testruns (minus items from PROBLEM_LIST) # Stable agentvm testruns (minus items from PROBLEM_LIST)
JDK_ALL_TARGETS += jdk_nio2 JDK_ALL_TARGETS += jdk_nio2
JDK_DEFAULT_TARGETS += jdk_nio2
jdk_nio2: $(call TestDirs, java/nio/Buffer java/nio/ByteOrder \ jdk_nio2: $(call TestDirs, java/nio/Buffer java/nio/ByteOrder \
java/nio/channels java/nio/MappedByteBuffer) java/nio/channels java/nio/MappedByteBuffer)
$(call SharedLibraryPermissions,java/nio/channels) $(call SharedLibraryPermissions,java/nio/channels)
...@@ -514,6 +523,7 @@ jdk_nio2: $(call TestDirs, java/nio/Buffer java/nio/ByteOrder \ ...@@ -514,6 +523,7 @@ jdk_nio2: $(call TestDirs, java/nio/Buffer java/nio/ByteOrder \
# Stable agentvm testruns (minus items from PROBLEM_LIST) # Stable agentvm testruns (minus items from PROBLEM_LIST)
JDK_ALL_TARGETS += jdk_nio3 JDK_ALL_TARGETS += jdk_nio3
JDK_DEFAULT_TARGETS += jdk_nio3
jdk_nio3: $(call TestDirs, sun/nio) jdk_nio3: $(call TestDirs, sun/nio)
$(call RunAgentvmBatch) $(call RunAgentvmBatch)
...@@ -533,6 +543,7 @@ jdk_rmi: $(call TestDirs, java/rmi javax/rmi sun/rmi) ...@@ -533,6 +543,7 @@ jdk_rmi: $(call TestDirs, java/rmi javax/rmi sun/rmi)
# Stable agentvm testruns (minus items from PROBLEM_LIST) # Stable agentvm testruns (minus items from PROBLEM_LIST)
JDK_ALL_TARGETS += jdk_security1 JDK_ALL_TARGETS += jdk_security1
JDK_DEFAULT_TARGETS += jdk_security1
jdk_security1: $(call TestDirs, java/security) jdk_security1: $(call TestDirs, java/security)
$(call RunAgentvmBatch) $(call RunAgentvmBatch)
...@@ -566,6 +577,7 @@ jdk_swing: $(call TestDirs, javax/swing sun/java2d \ ...@@ -566,6 +577,7 @@ jdk_swing: $(call TestDirs, javax/swing sun/java2d \
# Stable agentvm testruns (minus items from PROBLEM_LIST) # Stable agentvm testruns (minus items from PROBLEM_LIST)
JDK_ALL_TARGETS += jdk_text JDK_ALL_TARGETS += jdk_text
JDK_DEFAULT_TARGETS += jdk_text
jdk_text: $(call TestDirs, java/text sun/text) jdk_text: $(call TestDirs, java/text sun/text)
$(call RunAgentvmBatch) $(call RunAgentvmBatch)
...@@ -589,15 +601,18 @@ jdk_tools: jdk_tools1 jdk_tools2 ...@@ -589,15 +601,18 @@ jdk_tools: jdk_tools1 jdk_tools2
# Stable agentvm testruns (minus items from PROBLEM_LIST) # Stable agentvm testruns (minus items from PROBLEM_LIST)
JDK_ALL_TARGETS += jdk_util JDK_ALL_TARGETS += jdk_util
JDK_DEFAULT_TARGETS += jdk_util
jdk_util: $(call TestDirs, java/util sun/util) jdk_util: $(call TestDirs, java/util sun/util)
$(call RunAgentvmBatch) $(call RunAgentvmBatch)
# ------------------------------------------------------------------ # ------------------------------------------------------------------
# Run default tests
jdk_default: $(JDK_DEFAULT_TARGETS)
@$(SummaryInfo)
# Run all tests # Run all tests
FILTER_OUT_LIST=jdk_awt jdk_rmi jdk_swing jdk_all: $(JDK_ALL_TARGETS)
JDK_ALL_STABLE_TARGETS := $(filter-out $(FILTER_OUT_LIST), $(JDK_ALL_TARGETS))
jdk_all: $(JDK_ALL_STABLE_TARGETS)
@$(SummaryInfo) @$(SummaryInfo)
# These are all phony targets # These are all phony targets
......
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 7087549
* @summary Test custom options with newInputStream.
* @author Brandon Passanisi
* @library ..
* @build CustomOptions PassThroughFileSystem
*/
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.nio.file.*;
import java.nio.file.attribute.FileAttribute;
import java.nio.file.spi.FileSystemProvider;
import java.nio.channels.SeekableByteChannel;
import java.util.Collections;
import java.util.Set;
import java.util.Map;
public class CustomOptions {
// Create a custom option
static enum CustomOption implements OpenOption {
IGNORE,
}
// number of times that IGNORE option is observed
static int ignoreCount;
// A pass through provider that supports a custom open option
static class MyCustomProvider extends PassThroughFileSystem.PassThroughProvider {
public MyCustomProvider() { }
@Override
public SeekableByteChannel newByteChannel(Path path,
Set<? extends OpenOption> options,
FileAttribute<?>... attrs)
throws IOException
{
if (options.contains(CustomOption.IGNORE)) {
ignoreCount++;
options.remove(CustomOption.IGNORE);
}
return super.newByteChannel(path, options, attrs);
}
}
public static void main(String[] args) throws Exception {
FileSystemProvider provider = new MyCustomProvider();
Map<String,?> env = Collections.emptyMap();
URI uri = URI.create("pass:///");
FileSystem fs = provider.newFileSystem(uri, env);
// Create temp dir for testing
Path dir = TestUtil.createTemporaryDirectory();
try {
// Create temp file for testing
Path path = fs.getPath(dir.resolve("foo").toString());
Files.createFile(path);
// Test custom option
Files.newInputStream(path, CustomOption.IGNORE).close();
if (ignoreCount != 1)
throw new RuntimeException("IGNORE option not passed through");
// Test null option
try {
Files.newInputStream(path, new OpenOption[] { null }).close();
throw new RuntimeException("NullPointerException expected");
} catch (NullPointerException ignore) { }
// Test unsupported options
try {
Files.newInputStream(path, StandardOpenOption.WRITE).close();
throw new RuntimeException("UnsupportedOperationException expected");
} catch (UnsupportedOperationException uoe) { }
try {
Files.newInputStream(path, StandardOpenOption.APPEND).close();
throw new RuntimeException("UnsupportedOperationException expected");
} catch (UnsupportedOperationException uoe) { }
} finally {
// Cleanup
TestUtil.removeAll(dir);
}
}
}
...@@ -35,8 +35,6 @@ public class EmptyIterator { ...@@ -35,8 +35,6 @@ public class EmptyIterator {
void test(String[] args) throws Throwable { void test(String[] args) throws Throwable {
testEmptyCollection(Collections.<Object>emptyList()); testEmptyCollection(Collections.<Object>emptyList());
testEmptyCollection(Collections.<Object>emptySet()); testEmptyCollection(Collections.<Object>emptySet());
testEmptyCollection(new java.util.concurrent.
SynchronousQueue<Object>());
testEmptyMap(Collections.<Object, Object>emptyMap()); testEmptyMap(Collections.<Object, Object>emptyMap());
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
* 4872664 4803179 4892980 4900747 4945394 4938995 4979006 4994840 4997476 * 4872664 4803179 4892980 4900747 4945394 4938995 4979006 4994840 4997476
* 5013885 5003322 4988891 5098443 5110268 6173522 4829857 5027748 6376940 * 5013885 5003322 4988891 5098443 5110268 6173522 4829857 5027748 6376940
* 6358731 6178785 6284152 6231989 6497148 6486934 6233084 6504326 6635133 * 6358731 6178785 6284152 6231989 6497148 6486934 6233084 6504326 6635133
* 6350801 6676425 6878475 6919132 6931676 6948903 7014645 7039066 * 6350801 6676425 6878475 6919132 6931676 6948903 6990617 7014645 7039066
*/ */
import java.util.regex.*; import java.util.regex.*;
...@@ -50,6 +50,7 @@ public class RegExTest { ...@@ -50,6 +50,7 @@ public class RegExTest {
private static Random generator = new Random(); private static Random generator = new Random();
private static boolean failure = false; private static boolean failure = false;
private static int failCount = 0; private static int failCount = 0;
private static String firstFailure = null;
/** /**
* Main to interpret arguments and run several tests. * Main to interpret arguments and run several tests.
...@@ -133,15 +134,19 @@ public class RegExTest { ...@@ -133,15 +134,19 @@ public class RegExTest {
hitEndTest(); hitEndTest();
toMatchResultTest(); toMatchResultTest();
surrogatesInClassTest(); surrogatesInClassTest();
removeQEQuotingTest();
namedGroupCaptureTest(); namedGroupCaptureTest();
nonBmpClassComplementTest(); nonBmpClassComplementTest();
unicodePropertiesTest(); unicodePropertiesTest();
unicodeHexNotationTest(); unicodeHexNotationTest();
unicodeClassesTest(); unicodeClassesTest();
if (failure) if (failure) {
throw new RuntimeException("Failure in the RE handling."); throw new
else RuntimeException("RegExTest failed, 1st failure: " +
firstFailure);
} else {
System.err.println("OKAY: All tests passed."); System.err.println("OKAY: All tests passed.");
}
} }
// Utility functions // Utility functions
...@@ -215,8 +220,14 @@ public class RegExTest { ...@@ -215,8 +220,14 @@ public class RegExTest {
String paddedName = paddedNameBuffer.toString(); String paddedName = paddedNameBuffer.toString();
System.err.println(paddedName + ": " + System.err.println(paddedName + ": " +
(failCount==0 ? "Passed":"Failed("+failCount+")")); (failCount==0 ? "Passed":"Failed("+failCount+")"));
if (failCount > 0) if (failCount > 0) {
failure = true; failure = true;
if (firstFailure == null) {
firstFailure = testName;
}
}
failCount = 0; failCount = 0;
} }
...@@ -295,6 +306,22 @@ public class RegExTest { ...@@ -295,6 +306,22 @@ public class RegExTest {
Matcher matcher = pattern.matcher("\ud834\udd22"); Matcher matcher = pattern.matcher("\ud834\udd22");
if (!matcher.find()) if (!matcher.find())
failCount++; failCount++;
report("Surrogate pair in Unicode escape");
}
// This is for bug6990617
// Test if Pattern.RemoveQEQuoting works correctly if the octal unicode
// char encoding is only 2 or 3 digits instead of 4 and the first quoted
// char is an octal digit.
private static void removeQEQuotingTest() throws Exception {
Pattern pattern =
Pattern.compile("\\011\\Q1sometext\\E\\011\\Q2sometext\\E");
Matcher matcher = pattern.matcher("\t1sometext\t2sometext");
if (!matcher.find())
failCount++;
report("Remove Q/E Quoting");
} }
// This is for bug 4988891 // This is for bug 4988891
......
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
* @test
* @bug 7095980
* @summary Ensure HttpURLConnection (and supporting APIs) don't expose
* HttpOnly cookies
*/
import java.io.IOException;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookiePolicy;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.HttpURLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
/*
* 1) start the HTTP server
* 2) populate cookie store with HttpOnly cookies
* 3) make HTTP request that should contain HttpOnly cookies
* 4) check HttpOnly cookies received by server
* 5) server reply with Set-Cookie containing HttpOnly cookie
* 6) check HttpOnly cookies are not accessible from Http client
*/
public class HttpOnly {
static final String URI_PATH = "/xxyyzz/";
static final int SESSION_ID = 12345;
void test(String[] args) throws Exception {
HttpServer server = startHttpServer();
CookieHandler previousHandler = CookieHandler.getDefault();
try {
InetSocketAddress address = server.getAddress();
URI uri = new URI("http://" + InetAddress.getLocalHost().getHostAddress()
+ ":" + address.getPort() + URI_PATH);
populateCookieStore(uri);
doClient(uri);
} finally {
CookieHandler.setDefault(previousHandler);
server.stop(0);
}
}
void populateCookieStore(URI uri)
throws IOException {
CookieManager cm = new CookieManager(null, CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(cm);
Map<String,List<String>> header = new HashMap<>();
List<String> values = new ArrayList<>();
values.add("JSESSIONID=" + SESSION_ID + "; version=1; Path="
+ URI_PATH +"; HttpOnly");
values.add("CUSTOMER=WILE_E_COYOTE; version=1; Path=" + URI_PATH);
header.put("Set-Cookie", values);
cm.put(uri, header);
}
void doClient(URI uri) throws Exception {
HttpURLConnection uc = (HttpURLConnection) uri.toURL().openConnection();
int resp = uc.getResponseCode();
check(resp == 200,
"Unexpected response code. Expected 200, got " + resp);
// TEST 1: check getRequestProperty doesn't return the HttpOnly cookie
// In fact, that it doesn't return any automatically set cookies.
String cookie = uc.getRequestProperty("Cookie");
check(cookie == null,
"Cookie header returned from getRequestProperty, value " + cookie);
// TEST 2: check getRequestProperties doesn't return the HttpOnly cookie.
// In fact, that it doesn't return any automatically set cookies.
Map<String,List<String>> reqHeaders = uc.getRequestProperties();
Set<Map.Entry<String,List<String>>> entries = reqHeaders.entrySet();
for (Map.Entry<String,List<String>> entry : entries) {
String header = entry.getKey();
check(!"Cookie".equalsIgnoreCase(header),
"Cookie header returned from getRequestProperties, value " +
entry.getValue());
}
// TEST 3: check getHeaderField doesn't return Set-Cookie with HttpOnly
String setCookie = uc.getHeaderField("Set-Cookie");
if (setCookie != null) {
debug("Set-Cookie:" + setCookie);
check(!setCookie.toLowerCase().contains("httponly"),
"getHeaderField returned Set-Cookie header with HttpOnly, " +
"value = " + setCookie);
}
// TEST 3.5: check getHeaderField doesn't return Set-Cookie2 with HttpOnly
String setCookie2 = uc.getHeaderField("Set-Cookie2");
if (setCookie2 != null) {
debug("Set-Cookie2:" + setCookie2);
check(!setCookie2.toLowerCase().contains("httponly"),
"getHeaderField returned Set-Cookie2 header with HttpOnly, " +
"value = " + setCookie2);
}
// TEST 4: check getHeaderFields doesn't return Set-Cookie
// or Set-Cookie2 headers with HttpOnly
Map<String,List<String>> respHeaders = uc.getHeaderFields();
Set<Map.Entry<String,List<String>>> respEntries = respHeaders.entrySet();
for (Map.Entry<String,List<String>> entry : respEntries) {
String header = entry.getKey();
if ("Set-Cookie".equalsIgnoreCase(header)) {
List<String> setCookieValues = entry.getValue();
debug("Set-Cookie:" + setCookieValues);
for (String value : setCookieValues)
check(!value.toLowerCase().contains("httponly"),
"getHeaderFields returned Set-Cookie header with HttpOnly, "
+ "value = " + value);
}
if ("Set-Cookie2".equalsIgnoreCase(header)) {
List<String> setCookieValues = entry.getValue();
debug("Set-Cookie2:" + setCookieValues);
for (String value : setCookieValues)
check(!value.toLowerCase().contains("httponly"),
"getHeaderFields returned Set-Cookie2 header with HttpOnly, "
+ "value = " + value);
}
}
// Now add some user set cookies into the mix.
uc = (HttpURLConnection) uri.toURL().openConnection();
uc.addRequestProperty("Cookie", "CUSTOMER_ID=CHEGAR;");
resp = uc.getResponseCode();
check(resp == 200,
"Unexpected response code. Expected 200, got " + resp);
// TEST 5: check getRequestProperty doesn't return the HttpOnly cookie
cookie = uc.getRequestProperty("Cookie");
check(!cookie.toLowerCase().contains("httponly"),
"HttpOnly cookie returned from getRequestProperty, value " + cookie);
// TEST 6: check getRequestProperties doesn't return the HttpOnly cookie.
reqHeaders = uc.getRequestProperties();
entries = reqHeaders.entrySet();
for (Map.Entry<String,List<String>> entry : entries) {
String header = entry.getKey();
if ("Cookie".equalsIgnoreCase(header)) {
for (String val : entry.getValue())
check(!val.toLowerCase().contains("httponly"),
"HttpOnly cookie returned from getRequestProperties," +
" value " + val);
}
}
}
// HTTP Server
HttpServer startHttpServer() throws IOException {
HttpServer httpServer = HttpServer.create(new InetSocketAddress(0), 0);
httpServer.createContext(URI_PATH, new SimpleHandler());
httpServer.start();
return httpServer;
}
class SimpleHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
Headers reqHeaders = t.getRequestHeaders();
// some small sanity check
List<String> cookies = reqHeaders.get("Cookie");
for (String cookie : cookies) {
if (!cookie.contains("JSESSIONID")
|| !cookie.contains("WILE_E_COYOTE"))
t.sendResponseHeaders(400, -1);
}
// return some cookies so we can check getHeaderField(s)
Headers respHeaders = t.getResponseHeaders();
List<String> values = new ArrayList<>();
values.add("ID=JOEBLOGGS; version=1; Path=" + URI_PATH);
values.add("NEW_JSESSIONID=" + (SESSION_ID+1) + "; version=1; Path="
+ URI_PATH +"; HttpOnly");
values.add("NEW_CUSTOMER=WILE_E_COYOTE2; version=1; Path=" + URI_PATH);
respHeaders.put("Set-Cookie", values);
values = new ArrayList<>();
values.add("COOKIE2_CUSTOMER=WILE_E_COYOTE2; version=1; Path="
+ URI_PATH);
respHeaders.put("Set-Cookie2", values);
values.add("COOKIE2_JSESSIONID=" + (SESSION_ID+100)
+ "; version=1; Path=" + URI_PATH +"; HttpOnly");
respHeaders.put("Set-Cookie2", values);
t.sendResponseHeaders(200, -1);
t.close();
}
}
volatile int passed = 0, failed = 0;
boolean debug = false;
void pass() {passed++;}
void fail() {failed++;}
void fail(String msg) {System.err.println(msg); fail();}
void unexpected(Throwable t) {failed++; t.printStackTrace();}
void debug(String message) { if (debug) System.out.println(message); }
void check(boolean cond, String failMessage) {if (cond) pass(); else fail(failMessage);}
public static void main(String[] args) throws Throwable {
Class<?> k = new Object(){}.getClass().getEnclosingClass();
try {k.getMethod("instanceMain",String[].class)
.invoke( k.newInstance(), (Object) args);}
catch (Throwable e) {throw e.getCause();}}
public void instanceMain(String[] args) throws Throwable {
try {test(args);} catch (Throwable t) {unexpected(t);}
System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
if (failed > 0) throw new AssertionError("Some tests failed");}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册