This commit is contained in:
Phil Race 2017-05-25 09:15:55 -07:00
commit 6fa2b9d1b4
138 changed files with 3403 additions and 1005 deletions

View File

@ -1,3 +1,4 @@
898cbe31fbdae2d25d141384fac746cc244a730c jdk-9+170
c7efde2b60fc1ec04630be769d9ad60efb39c39c jdk-9+169
8fd0a4569191f33c98ee90c2709174a342fefb0d jdk-9+167
fcabc74bd44e56c7419d111d59b95669ecb33c55 jdk-9+168
@ -420,3 +421,4 @@ d1cab6c7e608479be4ebfad48a25b0ed48600f62 jdk-10+3
f113ce12fe24fbd24acf02711372d9f1e1c12426 jdk-10+5
1407b19a2ddf6baae162f5a1a5b96af473f4d7d1 jdk-10+6
30e75693ae99fd8e47fd2f5116527aff1b59aff9 jdk-10+7
c42dc7b58b4d4301ea676a76326fd9bbd403d595 jdk-10+8

View File

@ -419,4 +419,7 @@ ba5b16c9c6d80632b61959a33d424b1c3398ce62 jdk-9+166
111e2e7d00f45c983cdbc9c59ae40552152fcc23 jdk-10+5
03fe61bb7670644cf6e46b5cfafb6b27c0e0157e jdk-10+6
b25838a28195f4b6dab34668411eedd2d366a16c jdk-9+169
4d163ec59d989a9261ed7f848bc6303f90869af5 jdk-9+170
aa3c97810d7c484c93a2fd75d3c76ff574deb6d8 jdk-10+7
df33ef1dc163f994177fd97d4d0e73a1e3cb5d85 jdk-10+8

View File

@ -5186,7 +5186,7 @@ VS_SDK_PLATFORM_NAME_2013=
#CUSTOM_AUTOCONF_INCLUDE
# Do not change or remove the following line, it is needed for consistency checks:
DATE_WHEN_GENERATED=1494615666
DATE_WHEN_GENERATED=1494858828
###############################################################################
#
@ -48811,173 +48811,63 @@ $as_echo "yes" >&6; }
# Check whether --with-jtreg was given.
if test "${with_jtreg+set}" = set; then :
withval=$with_jtreg;
else
with_jtreg=no
fi
if test "x$with_jtreg" = xno; then
# jtreg disabled
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jtreg" >&5
$as_echo_n "checking for jtreg... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jtreg test harness" >&5
$as_echo_n "checking for jtreg test harness... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabled" >&5
$as_echo "no, disabled" >&6; }
elif test "x$with_jtreg" != xyes && test "x$with_jtreg" != x; then
# An explicit path is specified, use it.
JT_HOME="$with_jtreg"
if test ! -d "$JT_HOME"; then
as_fn_error $? "jtreg home directory from --with-jtreg=$with_jtreg does not exist" "$LINENO" 5
fi
if test ! -e "$JT_HOME/lib/jtreg.jar"; then
as_fn_error $? "jtreg home directory from --with-jtreg=$with_jtreg is not a valid jtreg home" "$LINENO" 5
fi
JTREGEXE="$JT_HOME/bin/jtreg"
if test ! -x "$JTREGEXE"; then
as_fn_error $? "jtreg home directory from --with-jtreg=$with_jtreg does not contain valid jtreg executable" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jtreg test harness" >&5
$as_echo_n "checking for jtreg test harness... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JT_HOME" >&5
$as_echo "$JT_HOME" >&6; }
else
if test "x$with_jtreg" != xyes; then
# with path specified.
JT_HOME="$with_jtreg"
fi
# Try to locate jtreg
if test "x$JT_HOME" != x; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jtreg" >&5
$as_echo_n "checking for jtreg... " >&6; }
# use JT_HOME enviroment var.
# Only process if variable expands to non-empty
if test "x$JT_HOME" != x; then
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
# Input might be given as Windows format, start by converting to
# unix format.
path="$JT_HOME"
new_path=`$CYGPATH -u "$path"`
# Cygwin tries to hide some aspects of the Windows file system, such that binaries are
# named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
# the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
# "foo.exe" is OK but "foo" is an error.
#
# This test is therefore slightly more accurate than "test -f" to check for file precense.
# It is also a way to make sure we got the proper file name for the real test later on.
test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
if test "x$test_shortpath" = x; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JT_HOME, which resolves as \"$path\", is invalid." >&5
$as_echo "$as_me: The path of JT_HOME, which resolves as \"$path\", is invalid." >&6;}
as_fn_error $? "Cannot locate the the path of JT_HOME" "$LINENO" 5
fi
# Call helper function which possibly converts this using DOS-style short mode.
# If so, the updated path is stored in $new_path.
input_path="$new_path"
# Check if we need to convert this using DOS-style short mode. If the path
# contains just simple characters, use it. Otherwise (spaces, weird characters),
# take no chances and rewrite it.
# Note: m4 eats our [], so we need to use [ and ] instead.
has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]`
if test "x$has_forbidden_chars" != x; then
# Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
shortmode_path=`$CYGPATH -s -m -a "$input_path"`
path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
# Going to short mode and back again did indeed matter. Since short mode is
# case insensitive, let's make it lowercase to improve readability.
shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
# Now convert it back to Unix-style (cygpath)
input_path=`$CYGPATH -u "$shortmode_path"`
new_path="$input_path"
fi
fi
test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
if test "x$test_cygdrive_prefix" = x; then
# As a simple fix, exclude /usr/bin since it's not a real path.
if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then
# The path is in a Cygwin special directory (e.g. /home). We need this converted to
# a path prefixed by /cygdrive for fixpath to work.
new_path="$CYGWIN_ROOT_PATH$input_path"
fi
fi
if test "x$path" != "x$new_path"; then
JT_HOME="$new_path"
{ $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JT_HOME to \"$new_path\"" >&5
$as_echo "$as_me: Rewriting JT_HOME to \"$new_path\"" >&6;}
fi
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
path="$JT_HOME"
has_colon=`$ECHO $path | $GREP ^.:`
new_path="$path"
if test "x$has_colon" = x; then
# Not in mixed or Windows style, start by that.
new_path=`cmd //c echo $path`
fi
input_path="$new_path"
# Check if we need to convert this using DOS-style short mode. If the path
# contains just simple characters, use it. Otherwise (spaces, weird characters),
# take no chances and rewrite it.
# Note: m4 eats our [], so we need to use [ and ] instead.
has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]`
if test "x$has_forbidden_chars" != x; then
# Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
fi
windows_path="$new_path"
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
unix_path=`$CYGPATH -u "$windows_path"`
new_path="$unix_path"
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
new_path="$unix_path"
fi
if test "x$path" != "x$new_path"; then
JT_HOME="$new_path"
{ $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JT_HOME to \"$new_path\"" >&5
$as_echo "$as_me: Rewriting JT_HOME to \"$new_path\"" >&6;}
fi
# Save the first 10 bytes of this path to the storage, so fixpath can work.
all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}")
else
# We're on a unix platform. Hooray! :)
path="$JT_HOME"
has_space=`$ECHO "$path" | $GREP " "`
if test "x$has_space" != x; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JT_HOME, which resolves as \"$path\", is invalid." >&5
$as_echo "$as_me: The path of JT_HOME, which resolves as \"$path\", is invalid." >&6;}
as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5
fi
# Use eval to expand a potential ~
eval path="$path"
if test ! -f "$path" && test ! -d "$path"; then
as_fn_error $? "The path of JT_HOME, which resolves as \"$path\", is not found." "$LINENO" 5
fi
if test -d "$path"; then
JT_HOME="`cd "$path"; $THEPWDCMD -L`"
# JT_HOME set in environment, use it
if test ! -d "$JT_HOME"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring JT_HOME pointing to invalid directory: $JT_HOME" >&5
$as_echo "$as_me: WARNING: Ignoring JT_HOME pointing to invalid directory: $JT_HOME" >&2;}
JT_HOME=
else
dir="`$DIRNAME "$path"`"
base="`$BASENAME "$path"`"
JT_HOME="`cd "$dir"; $THEPWDCMD -L`/$base"
if test ! -e "$JT_HOME/lib/jtreg.jar"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring JT_HOME which is not a valid jtreg home: $JT_HOME" >&5
$as_echo "$as_me: WARNING: Ignoring JT_HOME which is not a valid jtreg home: $JT_HOME" >&2;}
JT_HOME=
elif test ! -x "$JT_HOME/bin/jtreg"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring JT_HOME which does not contain valid jtreg executable: $JT_HOME" >&5
$as_echo "$as_me: WARNING: Ignoring JT_HOME which does not contain valid jtreg executable: $JT_HOME" >&2;}
JT_HOME=
else
JTREGEXE="$JT_HOME/bin/jtreg"
{ $as_echo "$as_me:${as_lineno-$LINENO}: Located jtreg using JT_HOME from environment" >&5
$as_echo "$as_me: Located jtreg using JT_HOME from environment" >&6;}
fi
fi
fi
fi
# jtreg win32 script works for everybody
JTREGEXE="$JT_HOME/bin/jtreg"
if test ! -f "$JTREGEXE"; then
as_fn_error $? "JTReg executable does not exist: $JTREGEXE" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JTREGEXE" >&5
$as_echo "$JTREGEXE" >&6; }
else
# try to find jtreg on path
if test "x$JT_HOME" = x; then
# JT_HOME is not set in environment, or was deemed invalid.
# Try to find jtreg on path
# Publish this variable in the help.
@ -49175,13 +49065,451 @@ $as_echo "$tool_specified" >&6; }
fi
if test "x$JTREGEXE" != x; then
# That's good, now try to derive JT_HOME
JT_HOME=`(cd $($DIRNAME $JTREGEXE)/.. && pwd)`
if test ! -e "$JT_HOME/lib/jtreg.jar"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring jtreg from path since a valid jtreg home cannot be found" >&5
$as_echo "$as_me: WARNING: Ignoring jtreg from path since a valid jtreg home cannot be found" >&2;}
JT_HOME=
JTREGEXE=
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: Located jtreg using jtreg executable in path" >&5
$as_echo "$as_me: Located jtreg using jtreg executable in path" >&6;}
fi
fi
fi
if test "x$JTREGEXE" = x; then
as_fn_error $? "Could not find required tool for JTREGEXE" "$LINENO" 5
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jtreg test harness" >&5
$as_echo_n "checking for jtreg test harness... " >&6; }
if test "x$JT_HOME" != x; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JT_HOME" >&5
$as_echo "$JT_HOME" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no, not found" >&5
$as_echo "no, not found" >&6; }
if test "x$with_jtreg" = xyes; then
as_fn_error $? "--with-jtreg was specified, but no jtreg found." "$LINENO" 5
fi
fi
fi
JT_HOME="`$DIRNAME $JTREGEXE`"
# Only process if variable expands to non-empty
if test "x$JTREGEXE" != x; then
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
# First separate the path from the arguments. This will split at the first
# space.
complete="$JTREGEXE"
path="${complete%% *}"
tmp="$complete EOL"
arguments="${tmp#* }"
# Input might be given as Windows format, start by converting to
# unix format.
new_path=`$CYGPATH -u "$path"`
# Now try to locate executable using which
new_path=`$WHICH "$new_path" 2> /dev/null`
# bat and cmd files are not always considered executable in cygwin causing which
# to not find them
if test "x$new_path" = x \
&& test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
&& test "x`$LS \"$path\" 2>/dev/null`" != x; then
new_path=`$CYGPATH -u "$path"`
fi
if test "x$new_path" = x; then
# Oops. Which didn't find the executable.
# The splitting of arguments from the executable at a space might have been incorrect,
# since paths with space are more likely in Windows. Give it another try with the whole
# argument.
path="$complete"
arguments="EOL"
new_path=`$CYGPATH -u "$path"`
new_path=`$WHICH "$new_path" 2> /dev/null`
# bat and cmd files are not always considered executable in cygwin causing which
# to not find them
if test "x$new_path" = x \
&& test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
&& test "x`$LS \"$path\" 2>/dev/null`" != x; then
new_path=`$CYGPATH -u "$path"`
fi
if test "x$new_path" = x; then
# It's still not found. Now this is an unrecoverable error.
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JTREGEXE, which resolves as \"$complete\", is not found." >&5
$as_echo "$as_me: The path of JTREGEXE, which resolves as \"$complete\", is not found." >&6;}
has_space=`$ECHO "$complete" | $GREP " "`
if test "x$has_space" != x; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5
$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;}
fi
as_fn_error $? "Cannot locate the the path of JTREGEXE" "$LINENO" 5
fi
fi
# Cygwin tries to hide some aspects of the Windows file system, such that binaries are
# named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
# the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
# "foo.exe" is OK but "foo" is an error.
#
# This test is therefore slightly more accurate than "test -f" to check for file presence.
# It is also a way to make sure we got the proper file name for the real test later on.
test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
if test "x$test_shortpath" = x; then
# Short path failed, file does not exist as specified.
# Try adding .exe or .cmd
if test -f "${new_path}.exe"; then
input_to_shortpath="${new_path}.exe"
elif test -f "${new_path}.cmd"; then
input_to_shortpath="${new_path}.cmd"
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JTREGEXE, which resolves as \"$new_path\", is invalid." >&5
$as_echo "$as_me: The path of JTREGEXE, which resolves as \"$new_path\", is invalid." >&6;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5
$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;}
as_fn_error $? "Cannot locate the the path of JTREGEXE" "$LINENO" 5
fi
else
input_to_shortpath="$new_path"
fi
# Call helper function which possibly converts this using DOS-style short mode.
# If so, the updated path is stored in $new_path.
new_path="$input_to_shortpath"
input_path="$input_to_shortpath"
# Check if we need to convert this using DOS-style short mode. If the path
# contains just simple characters, use it. Otherwise (spaces, weird characters),
# take no chances and rewrite it.
# Note: m4 eats our [], so we need to use [ and ] instead.
has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]`
if test "x$has_forbidden_chars" != x; then
# Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
shortmode_path=`$CYGPATH -s -m -a "$input_path"`
path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
# Going to short mode and back again did indeed matter. Since short mode is
# case insensitive, let's make it lowercase to improve readability.
shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
# Now convert it back to Unix-style (cygpath)
input_path=`$CYGPATH -u "$shortmode_path"`
new_path="$input_path"
fi
fi
test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
if test "x$test_cygdrive_prefix" = x; then
# As a simple fix, exclude /usr/bin since it's not a real path.
if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then
# The path is in a Cygwin special directory (e.g. /home). We need this converted to
# a path prefixed by /cygdrive for fixpath to work.
new_path="$CYGWIN_ROOT_PATH$input_path"
fi
fi
# remove trailing .exe if any
new_path="${new_path/%.exe/}"
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
# First separate the path from the arguments. This will split at the first
# space.
complete="$JTREGEXE"
path="${complete%% *}"
tmp="$complete EOL"
arguments="${tmp#* }"
# Input might be given as Windows format, start by converting to
# unix format.
new_path="$path"
windows_path="$new_path"
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
unix_path=`$CYGPATH -u "$windows_path"`
new_path="$unix_path"
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
new_path="$unix_path"
fi
# Now try to locate executable using which
new_path=`$WHICH "$new_path" 2> /dev/null`
if test "x$new_path" = x; then
# Oops. Which didn't find the executable.
# The splitting of arguments from the executable at a space might have been incorrect,
# since paths with space are more likely in Windows. Give it another try with the whole
# argument.
path="$complete"
arguments="EOL"
new_path="$path"
windows_path="$new_path"
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
unix_path=`$CYGPATH -u "$windows_path"`
new_path="$unix_path"
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
new_path="$unix_path"
fi
new_path=`$WHICH "$new_path" 2> /dev/null`
# bat and cmd files are not always considered executable in MSYS causing which
# to not find them
if test "x$new_path" = x \
&& test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
&& test "x`$LS \"$path\" 2>/dev/null`" != x; then
new_path="$path"
windows_path="$new_path"
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
unix_path=`$CYGPATH -u "$windows_path"`
new_path="$unix_path"
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
new_path="$unix_path"
fi
fi
if test "x$new_path" = x; then
# It's still not found. Now this is an unrecoverable error.
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JTREGEXE, which resolves as \"$complete\", is not found." >&5
$as_echo "$as_me: The path of JTREGEXE, which resolves as \"$complete\", is not found." >&6;}
has_space=`$ECHO "$complete" | $GREP " "`
if test "x$has_space" != x; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5
$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;}
fi
as_fn_error $? "Cannot locate the the path of JTREGEXE" "$LINENO" 5
fi
fi
# Now new_path has a complete unix path to the binary
if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then
# Keep paths in /bin as-is, but remove trailing .exe if any
new_path="${new_path/%.exe/}"
# Do not save /bin paths to all_fixpath_prefixes!
else
# Not in mixed or Windows style, start by that.
new_path=`cmd //c echo $new_path`
input_path="$new_path"
# Check if we need to convert this using DOS-style short mode. If the path
# contains just simple characters, use it. Otherwise (spaces, weird characters),
# take no chances and rewrite it.
# Note: m4 eats our [], so we need to use [ and ] instead.
has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]`
if test "x$has_forbidden_chars" != x; then
# Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
fi
# Output is in $new_path
windows_path="$new_path"
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
unix_path=`$CYGPATH -u "$windows_path"`
new_path="$unix_path"
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
new_path="$unix_path"
fi
# remove trailing .exe if any
new_path="${new_path/%.exe/}"
# Save the first 10 bytes of this path to the storage, so fixpath can work.
all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}")
fi
else
# We're on a unix platform. Hooray! :)
# First separate the path from the arguments. This will split at the first
# space.
complete="$JTREGEXE"
path="${complete%% *}"
tmp="$complete EOL"
arguments="${tmp#* }"
# Cannot rely on the command "which" here since it doesn't always work.
is_absolute_path=`$ECHO "$path" | $GREP ^/`
if test -z "$is_absolute_path"; then
# Path to executable is not absolute. Find it.
IFS_save="$IFS"
IFS=:
for p in $PATH; do
if test -f "$p/$path" && test -x "$p/$path"; then
new_path="$p/$path"
break
fi
done
IFS="$IFS_save"
else
# This is an absolute path, we can use it without further modifications.
new_path="$path"
fi
if test "x$new_path" = x; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JTREGEXE, which resolves as \"$complete\", is not found." >&5
$as_echo "$as_me: The path of JTREGEXE, which resolves as \"$complete\", is not found." >&6;}
has_space=`$ECHO "$complete" | $GREP " "`
if test "x$has_space" != x; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5
$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;}
fi
as_fn_error $? "Cannot locate the the path of JTREGEXE" "$LINENO" 5
fi
fi
# Now join together the path and the arguments once again
if test "x$arguments" != xEOL; then
new_complete="$new_path ${arguments% *}"
else
new_complete="$new_path"
fi
if test "x$complete" != "x$new_complete"; then
JTREGEXE="$new_complete"
{ $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JTREGEXE to \"$new_complete\"" >&5
$as_echo "$as_me: Rewriting JTREGEXE to \"$new_complete\"" >&6;}
fi
fi
# Only process if variable expands to non-empty
if test "x$JT_HOME" != x; then
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
# Input might be given as Windows format, start by converting to
# unix format.
path="$JT_HOME"
new_path=`$CYGPATH -u "$path"`
# Cygwin tries to hide some aspects of the Windows file system, such that binaries are
# named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
# the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
# "foo.exe" is OK but "foo" is an error.
#
# This test is therefore slightly more accurate than "test -f" to check for file precense.
# It is also a way to make sure we got the proper file name for the real test later on.
test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
if test "x$test_shortpath" = x; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JT_HOME, which resolves as \"$path\", is invalid." >&5
$as_echo "$as_me: The path of JT_HOME, which resolves as \"$path\", is invalid." >&6;}
as_fn_error $? "Cannot locate the the path of JT_HOME" "$LINENO" 5
fi
# Call helper function which possibly converts this using DOS-style short mode.
# If so, the updated path is stored in $new_path.
input_path="$new_path"
# Check if we need to convert this using DOS-style short mode. If the path
# contains just simple characters, use it. Otherwise (spaces, weird characters),
# take no chances and rewrite it.
# Note: m4 eats our [], so we need to use [ and ] instead.
has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]`
if test "x$has_forbidden_chars" != x; then
# Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
shortmode_path=`$CYGPATH -s -m -a "$input_path"`
path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
# Going to short mode and back again did indeed matter. Since short mode is
# case insensitive, let's make it lowercase to improve readability.
shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
# Now convert it back to Unix-style (cygpath)
input_path=`$CYGPATH -u "$shortmode_path"`
new_path="$input_path"
fi
fi
test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
if test "x$test_cygdrive_prefix" = x; then
# As a simple fix, exclude /usr/bin since it's not a real path.
if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then
# The path is in a Cygwin special directory (e.g. /home). We need this converted to
# a path prefixed by /cygdrive for fixpath to work.
new_path="$CYGWIN_ROOT_PATH$input_path"
fi
fi
if test "x$path" != "x$new_path"; then
JT_HOME="$new_path"
{ $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JT_HOME to \"$new_path\"" >&5
$as_echo "$as_me: Rewriting JT_HOME to \"$new_path\"" >&6;}
fi
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
path="$JT_HOME"
has_colon=`$ECHO $path | $GREP ^.:`
new_path="$path"
if test "x$has_colon" = x; then
# Not in mixed or Windows style, start by that.
new_path=`cmd //c echo $path`
fi
input_path="$new_path"
# Check if we need to convert this using DOS-style short mode. If the path
# contains just simple characters, use it. Otherwise (spaces, weird characters),
# take no chances and rewrite it.
# Note: m4 eats our [], so we need to use [ and ] instead.
has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]`
if test "x$has_forbidden_chars" != x; then
# Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
fi
windows_path="$new_path"
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
unix_path=`$CYGPATH -u "$windows_path"`
new_path="$unix_path"
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
new_path="$unix_path"
fi
if test "x$path" != "x$new_path"; then
JT_HOME="$new_path"
{ $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JT_HOME to \"$new_path\"" >&5
$as_echo "$as_me: Rewriting JT_HOME to \"$new_path\"" >&6;}
fi
# Save the first 10 bytes of this path to the storage, so fixpath can work.
all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}")
else
# We're on a unix platform. Hooray! :)
path="$JT_HOME"
has_space=`$ECHO "$path" | $GREP " "`
if test "x$has_space" != x; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JT_HOME, which resolves as \"$path\", is invalid." >&5
$as_echo "$as_me: The path of JT_HOME, which resolves as \"$path\", is invalid." >&6;}
as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5
fi
# Use eval to expand a potential ~
eval path="$path"
if test ! -f "$path" && test ! -d "$path"; then
as_fn_error $? "The path of JT_HOME, which resolves as \"$path\", is not found." "$LINENO" 5
fi
if test -d "$path"; then
JT_HOME="`cd "$path"; $THEPWDCMD -L`"
else
dir="`$DIRNAME "$path"`"
base="`$BASENAME "$path"`"
JT_HOME="`cd "$dir"; $THEPWDCMD -L`/$base"
fi
fi
fi

View File

@ -271,9 +271,6 @@ BUNDLES_OUTPUTDIR=$(BUILD_OUTPUT)/bundles
TESTMAKE_OUTPUTDIR=$(BUILD_OUTPUT)/test-make
MAKESUPPORT_OUTPUTDIR=$(BUILD_OUTPUT)/make-support
# By default, output javadoc directly into image
JAVADOC_OUTPUTDIR = $(DOCS_IMAGE_DIR)
# This does not get overridden in a bootcycle build
CONFIGURESUPPORT_OUTPUTDIR:=@CONFIGURESUPPORT_OUTPUTDIR@
BUILDJDK_OUTPUTDIR=$(BUILD_OUTPUT)/buildjdk
@ -819,6 +816,8 @@ INTERIM_IMAGE_DIR := $(SUPPORT_OUTPUTDIR)/interim-image
# Docs image
DOCS_IMAGE_SUBDIR := docs
DOCS_IMAGE_DIR = $(IMAGES_OUTPUTDIR)/$(DOCS_IMAGE_SUBDIR)
# Output docs directly into image
DOCS_OUTPUTDIR := $(DOCS_IMAGE_DIR)
# Macosx bundles directory definitions
JDK_MACOSX_BUNDLE_SUBDIR=jdk-bundle

View File

@ -926,41 +926,82 @@ AC_DEFUN_ONCE([TOOLCHAIN_MISC_CHECKS],
AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG],
[
AC_ARG_WITH(jtreg, [AS_HELP_STRING([--with-jtreg],
[Regression Test Harness @<:@probed@:>@])],
[],
[with_jtreg=no])
[Regression Test Harness @<:@probed@:>@])])
if test "x$with_jtreg" = xno; then
# jtreg disabled
AC_MSG_CHECKING([for jtreg])
AC_MSG_RESULT(no)
else
if test "x$with_jtreg" != xyes; then
# with path specified.
JT_HOME="$with_jtreg"
AC_MSG_CHECKING([for jtreg test harness])
AC_MSG_RESULT([no, disabled])
elif test "x$with_jtreg" != xyes && test "x$with_jtreg" != x; then
# An explicit path is specified, use it.
JT_HOME="$with_jtreg"
if test ! -d "$JT_HOME"; then
AC_MSG_ERROR([jtreg home directory from --with-jtreg=$with_jtreg does not exist])
fi
if test ! -e "$JT_HOME/lib/jtreg.jar"; then
AC_MSG_ERROR([jtreg home directory from --with-jtreg=$with_jtreg is not a valid jtreg home])
fi
JTREGEXE="$JT_HOME/bin/jtreg"
if test ! -x "$JTREGEXE"; then
AC_MSG_ERROR([jtreg home directory from --with-jtreg=$with_jtreg does not contain valid jtreg executable])
fi
AC_MSG_CHECKING([for jtreg test harness])
AC_MSG_RESULT([$JT_HOME])
else
# Try to locate jtreg
if test "x$JT_HOME" != x; then
AC_MSG_CHECKING([for jtreg])
# use JT_HOME enviroment var.
BASIC_FIXUP_PATH([JT_HOME])
# jtreg win32 script works for everybody
JTREGEXE="$JT_HOME/bin/jtreg"
if test ! -f "$JTREGEXE"; then
AC_MSG_ERROR([JTReg executable does not exist: $JTREGEXE])
# JT_HOME set in environment, use it
if test ! -d "$JT_HOME"; then
AC_MSG_WARN([Ignoring JT_HOME pointing to invalid directory: $JT_HOME])
JT_HOME=
else
if test ! -e "$JT_HOME/lib/jtreg.jar"; then
AC_MSG_WARN([Ignoring JT_HOME which is not a valid jtreg home: $JT_HOME])
JT_HOME=
elif test ! -x "$JT_HOME/bin/jtreg"; then
AC_MSG_WARN([Ignoring JT_HOME which does not contain valid jtreg executable: $JT_HOME])
JT_HOME=
else
JTREGEXE="$JT_HOME/bin/jtreg"
AC_MSG_NOTICE([Located jtreg using JT_HOME from environment])
fi
fi
fi
AC_MSG_RESULT($JTREGEXE)
if test "x$JT_HOME" = x; then
# JT_HOME is not set in environment, or was deemed invalid.
# Try to find jtreg on path
BASIC_PATH_PROGS(JTREGEXE, jtreg)
if test "x$JTREGEXE" != x; then
# That's good, now try to derive JT_HOME
JT_HOME=`(cd $($DIRNAME $JTREGEXE)/.. && pwd)`
if test ! -e "$JT_HOME/lib/jtreg.jar"; then
AC_MSG_WARN([Ignoring jtreg from path since a valid jtreg home cannot be found])
JT_HOME=
JTREGEXE=
else
AC_MSG_NOTICE([Located jtreg using jtreg executable in path])
fi
fi
fi
AC_MSG_CHECKING([for jtreg test harness])
if test "x$JT_HOME" != x; then
AC_MSG_RESULT([$JT_HOME])
else
# try to find jtreg on path
BASIC_REQUIRE_PROGS(JTREGEXE, jtreg)
JT_HOME="`$DIRNAME $JTREGEXE`"
AC_MSG_RESULT([no, not found])
if test "x$with_jtreg" = xyes; then
AC_MSG_ERROR([--with-jtreg was specified, but no jtreg found.])
fi
fi
fi
BASIC_FIXUP_EXECUTABLE(JTREGEXE)
BASIC_FIXUP_PATH(JT_HOME)
AC_SUBST(JT_HOME)
AC_SUBST(JTREGEXE)
])

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@ -183,7 +183,7 @@ trap 'nice_exit' EXIT
subrepos="corba jaxp jaxws langtools jdk hotspot nashorn"
jdk_subrepos_extra="closed jdk/src/closed jdk/make/closed jdk/test/closed hotspot/make/closed hotspot/src/closed hotspot/test/closed"
subrepos_extra="$jdk_subrepos_extra deploy install sponsors pubs"
subrepos_extra="$jdk_subrepos_extra deploy install sponsors"
# Only look in specific locations for possible forests (avoids long searches)
pull_default=""

View File

@ -997,7 +997,8 @@ var getJibProfilesDependencies = function (input, common) {
ext: "tar.gz",
revision: "2.38.0-1+1.1",
module: "graphviz-" + input.target_platform,
configure_args: "DOT=" + input.get("graphviz", "install_path") + "/dot"
configure_args: "DOT=" + input.get("graphviz", "install_path") + "/dot",
environment_path: input.get("graphviz", "install_path")
},
pandoc: {
@ -1005,7 +1006,8 @@ var getJibProfilesDependencies = function (input, common) {
ext: "tar.gz",
revision: "1.17.2+1.0",
module: "pandoc-" + input.target_platform,
configure_args: "PANDOC=" + input.get("pandoc", "install_path") + "/pandoc/pandoc"
configure_args: "PANDOC=" + input.get("pandoc", "install_path") + "/pandoc/pandoc",
environment_path: input.get("pandoc", "install_path") + "/pandoc"
},
};

View File

@ -6,6 +6,7 @@
<meta name="generator" content="pandoc" />
<title>OpenJDK Build README</title>
<style type="text/css">code{white-space: pre;}</style>
<link rel="stylesheet" href=" ../../jdk/make/data/docs-resources/specs/resources/jdk-default.css" type="text/css" />
</head>
<body>
<div id="header">

View File

@ -6,9 +6,8 @@
<meta name="generator" content="pandoc" />
<title>Testing OpenJDK</title>
<style type="text/css">code{white-space: pre;}</style>
<link rel="stylesheet" href="http://openjdk.java.net/page.css" type="text/css" />
<link rel="stylesheet" href=" ../../jdk/make/data/docs-resources/specs/resources/jdk-default.css" type="text/css" />
<style type="text/css">pre, code, tt { color: #1d6ae5; }</style>
<style type="text/css">pre { font-size: 10pt; }</style>
</head>
<body>
<div id="header">

View File

@ -419,3 +419,6 @@ c7358d703e1282af3dcd8af6c037dc4342de9054 jdk-10+6
43de67f51801b9e16507865fcb7e8344f4ca4aa9 jdk-9+167
03a2cc9c8a1e8f87924c9863e917bc8b91770d5f jdk-9+168
b2218d41edef02ee8f94bb438f885b2ba79bfa08 jdk-9+169
8a4ab3b0ab9a86df73d9a1e337134f2dbe006725 jdk-9+170
aed5a4edc8275c1c50195503756ff92bfe0197f5 jdk-10+7
648b0a00824eb29e71936bc3258d309a25e3b8c0 jdk-10+8

View File

@ -1,4 +1,4 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
@ -6,7 +6,7 @@
<title>package</title>
<!--
Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -52,7 +52,7 @@ import org.omg.CORBA.portable.IDLEntity;
* </OL>
*
* <P>
* <a name="anyOps"></a>
* <a id="anyOps"></a>
* A large part of the <code>Any</code> class consists of pairs of methods
* for inserting values into and extracting values from an
* <code>Any</code> object.

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -85,13 +85,17 @@ import java.security.PrivilegedAction;
* three {@code init} methods. Two of the three methods use the properties
* (associations of a name with a value) shown in the
* table below.<BR>
* <TABLE BORDER=1 SUMMARY="Standard Java CORBA Properties">
* <TR><TH>Property Name</TH> <TH>Property Value</TH></TR>
* <TABLE class="plain">
* <CAPTION>Standard Java CORBA Properties:</CAPTION>
* <thead>
* <TR><TH>Property Name</TH> <TH>Property Value</TH></TR>
* </thead>
* <tbody>
* <TR><TD>org.omg.CORBA.ORBClass</TD>
* <TD>class name of an ORB implementation</TD></TR>
* <TR><TD>org.omg.CORBA.ORBSingletonClass</TD>
* <TD>class name of the ORB returned by {@code init()}</TD></TR>
* </tbody>
* </TABLE>
* <P>
* These properties allow a different vendor's {@code ORB}

View File

@ -1,4 +1,4 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">

View File

@ -1,4 +1,4 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">

View File

@ -1,3 +1,4 @@
<!doctype html>
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
@ -6,7 +7,7 @@
<TITLE>package</TITLE>
<!--
/*
* Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -31,9 +32,8 @@
*/
-->
</HEAD>
<BODY BGCOLOR="#FFFFFF">
Provides the mapping of the OMG CORBA APIs to the Java<SUP><FONT
SIZE=-2>TM</FONT></SUP>
<BODY>
Provides the mapping of the OMG CORBA APIs to the Java&trade;
programming language, including the class <code>ORB</code>, which is implemented
so that a programmer can use it as a fully-functional Object Request Broker
(ORB).
@ -427,7 +427,7 @@ will contain the static methods needed for manipulating instances of the type,
in this case, <code>Account</code> objects.
<a name="narrow"></a>
<a id="narrow"></a>
<h3>The <code>narrow</code> Method</h3>
When an object is the return value for a method, it is returned in the
form of a generic object, either an <code>org.omg.CORBA.Object</code> object
@ -465,7 +465,7 @@ tutorial uses a <code>narrow</code> method that looks like this:
helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));
</PRE>
<a name="basic"></a>
<a id="basic"></a>
<h3>Example of a Basic Helper Class</h3>
A basic helper class, for purposes of this explanation, is one with
the methods that are provided by every helper class, plus a <code>narrow</code>
@ -671,7 +671,7 @@ abstract public class AddressHelper
&nbsp;&nbsp;&nbsp;&nbsp; WStringSeqHelper
&nbsp;&nbsp;&nbsp;&nbsp; WStringValueHelper
</code></PRE>
<a name="adv"></a>
<a id="adv"></a>
<H1>
Other Classes</H1>
The other classes and interfaces in the <code>CORBA</code> package, which are
@ -868,17 +868,17 @@ For overviews, guides, and a tutorial, please see:
<P><A NAME="unimpl"></A>
<P><A id="unimpl"></A>
<H1>
CORBA Features Not Implemented in Java IDL</H1>
<P>Some of the API included in <code>org.omg</code> subpackages is provided for
conformance with the current OMG CORBA specification but is not implemented
in Sun's release of the JDK<SUP><FONT SIZE=-2>TM</FONT></SUP>. This enables
in Sun's release of the JDK&trade;. This enables
other JDK licensees to provide implementations of this API in standard
extensions and products.
<P><A NAME="NO_IMPLEMENT"></A>
<P><A id="NO_IMPLEMENT"></A>
<h2>Features That Throw NO_IMPLEMENT</h2>
<P>Some of the API included in <code>org.omg</code> subpackages throw

View File

@ -1,8 +1,8 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!doctype html>
<html>
<head>
<!--
Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
@ -26,7 +26,7 @@ or visit www.oracle.com if you need additional information or have any
questions.
-->
</head>
<body bgcolor="white">
<body>
Provides a portability layer, that is, a set of ORB APIs
that makes it possible for code generated
@ -38,7 +38,7 @@ can call into these ORB APIs.
<p>
<a name="unimpl"></a>
<a id="unimpl"></a>
<hr>
<h1>CORBA Features Throwing NO_IMPLEMENT() Exceptions</h1>
<hr>

View File

@ -1,4 +1,4 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
@ -6,7 +6,7 @@
<title>package</title>
<!--
/*
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -31,7 +31,7 @@
*/
-->
</head>
<body bgcolor="#FFFFFF">
<body>
The CORBA_2_3 package defines additions to existing CORBA interfaces
in the Java[tm] Standard Edition 6.&nbsp;&nbsp; These changes occurred in recent
revisions to the CORBA API defined by the OMG.&nbsp; The new methods were
@ -46,7 +46,7 @@ the Java[tm] Platform, Standard Edition 6, ORB complies, see <A
HREF="../CORBA/doc-files/compliance.html">Official Specifications for CORBA
support in Java[tm] SE 6</A>.
<P>
<a name="unimpl"></a>
<a id="unimpl"></a>
The following methods in the abstract class
<code>org.omg.CORBA_2_3.ORB</code> are unimplemented:
<UL>

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -425,7 +425,7 @@ module IOP {
* encoded using GIOP 1.2 with a TCS-W of UTF-16. This service context
* may be sent on Reply messages with a reply_status of SYSTEM_EXCEPTION
* or USER_EXCEPTION. The usage of this service context is defined
* by language mappings. <br/> <br/>
* by language mappings. <br> <br>
*
* IDL/Java: ptc/02-01-22: 1.15.2:
* When a System Exception is marshaled, its GIOP Reply message shall

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -580,7 +580,8 @@ module PortableInterceptor {
* to access it will result in a <code>BAD_INV_ORDER</code> being thrown
* with a standard minor code of 14.
*
* <table border=1 summary="Shows the validity of each attribute or operation">
* <table class="plain">
* <caption style="display:none">Shows the validity of each attribute or operation</caption>
* <thead>
* <tr>
* <th>&nbsp;</th>
@ -597,42 +598,42 @@ module PortableInterceptor {
* <td id="ri" colspan=6><i>Inherited from RequestInfo:</i></td>
* </tr>
*
* <tr><th id="req_id"><p align="left">request_id</p></th>
* <tr><th id="req_id"><p style="text-align:left">request_id</p></th>
* <td headers="ri req_id send_req">yes</td>
* <td headers="ri req_id send_poll">yes</td>
* <td headers="ri req_id rec_reply">yes</td>
* <td headers="ri req_id rec_ex">yes</td>
* <td headers="ri req_id rec_oth">yes</td></tr>
*
* <tr><th id="op"><p align="left">operation</p></th>
* <tr><th id="op"><p style="text-align:left">operation</p></th>
* <td headers="ri op send_req">yes</td>
* <td headers="ri op send_poll">yes</td>
* <td headers="ri op rec_reply">yes</td>
* <td headers="ri op rec_ex">yes</td>
* <td headers="ri op rec_oth">yes</td></tr>
*
* <tr><th id="arg"><p align="left">arguments</p></th>
* <tr><th id="arg"><p style="text-align:left">arguments</p></th>
* <td headers="ri arg send_req">yes<sub>1</sub></td>
* <td headers="ri arg send_poll">no </td>
* <td headers="ri arg rec_reply">yes</td>
* <td headers="ri arg rec_ex">no </td>
* <td headers="ri arg rec_oth">no </td></tr>
*
* <tr><th id="exc"><p align="left">exceptions</p></th>
* <tr><th id="exc"><p style="text-align:left">exceptions</p></th>
* <td headers="ri exc send_req">yes</td>
* <td headers="ri exc send_poll">no </td>
* <td headers="ri exc rec_reply">yes</td>
* <td headers="ri exc rec_ex">yes</td>
* <td headers="ri exc rec_oth">yes</td></tr>
*
* <tr><th id="con"><p align="left">contexts</p></th>
* <tr><th id="con"><p style="text-align:left">contexts</p></th>
* <td headers="ri con send_req">yes</td>
* <td headers="ri con send_poll">no </td>
* <td headers="ri con rec_reply">yes</td>
* <td headers="ri con rec_ex">yes</td>
* <td headers="ri con rec_oth">yes</td></tr>
*
* <tr><th id="op_con"><p align="left">operation_context</p></th>
* <tr><th id="op_con"><p style="text-align:left">operation_context</p></th>
* <td headers="ri op_con send_req">yes</td>
* <td headers="ri op_con send_poll">no </td>
* <td headers="ri op_con rec_reply">yes</td>
@ -640,7 +641,7 @@ module PortableInterceptor {
* <td headers="ri op_con rec_oth">yes</td>
* </tr>
*
* <tr><th id="result"><p align="left">result</p></th>
* <tr><th id="result"><p style="text-align:left">result</p></th>
* <td headers="ri result send_req">no </td>
* <td headers="ri result send_poll">no </td>
* <td headers="ri result rec_reply">yes</td>
@ -648,14 +649,14 @@ module PortableInterceptor {
* <td headers="ri result rec_oth">no </td>
* </tr>
*
* <tr><th id="res_exp"><p align="left">response_expected</p></th>
* <tr><th id="res_exp"><p style="text-align:left">response_expected</p></th>
* <td headers="ri res_exp send_req">yes</td>
* <td headers="ri res_exp send_poll">yes</td>
* <td headers="ri res_exp rec_reply">yes</td>
* <td headers="ri res_exp rec_ex">yes</td>
* <td headers="ri res_exp rec_oth">yes</td></tr>
*
* <tr><th id="sync_sco"><p align="left">sync_scope</p></th>
* <tr><th id="sync_sco"><p style="text-align:left">sync_scope</p></th>
* <td headers="ri sync_sco send_req">yes</td>
* <td headers="ri sync_sco send_poll">no </td>
* <td headers="ri sync_sco rec_reply">yes</td>
@ -663,14 +664,14 @@ module PortableInterceptor {
* <td headers="ri sync_sco rec_oth">yes</td>
* </tr>
*
* <tr><th id="rep_stat"><p align="left">reply_status</p></th>
* <tr><th id="rep_stat"><p style="text-align:left">reply_status</p></th>
* <td headers="ri rep_stat send_req">no </td>
* <td headers="ri rep_stat send_poll">no </td>
* <td headers="ri rep_stat rec_reply">yes</td>
* <td headers="ri rep_stat rec_ex">yes</td>
* <td headers="ri rep_stat rec_oth">yes</td></tr>
*
* <tr><th id="for_ref"><p align="left">forward_reference</p></th>
* <tr><th id="for_ref"><p style="text-align:left">forward_reference</p></th>
* <td headers="ri for_ref send_req">no </td>
* <td headers="ri for_ref send_poll">no </td>
* <td headers="ri for_ref rec_reply">no </td>
@ -678,21 +679,21 @@ module PortableInterceptor {
* <td headers="ri for_ref rec_oth">yes<sub>2</sub>
* </td></tr>
*
* <tr><th id="get_slot"><p align="left">get_slot</p></th>
* <tr><th id="get_slot"><p style="text-align:left">get_slot</p></th>
* <td headers="ri get_slot send_req">yes</td>
* <td headers="ri get_slot send_poll">yes</td>
* <td headers="ri get_slot rec_reply">yes</td>
* <td headers="ri get_slot rec_ex">yes</td>
* <td headers="ri get_slot rec_oth">yes</td></tr>
*
* <tr><th id="grsc"><p align="left">get_request_service_context</p></th>
* <tr><th id="grsc"><p style="text-align:left">get_request_service_context</p></th>
* <td headers="ri grsc send_req">yes</td>
* <td headers="ri grsc send_poll">no </td>
* <td headers="ri grsc rec_reply">yes</td>
* <td headers="ri grsc rec_ex">yes</td>
* <td headers="ri grsc rec_oth">yes</td></tr>
*
* <tr><th id="gpsc"><p align="left">get_reply_service_context</p></th>
* <tr><th id="gpsc"><p style="text-align:left">get_reply_service_context</p></th>
* <td headers="ri gpsc send_req">no </td>
* <td headers="ri gpsc send_poll">no </td>
* <td headers="ri gpsc rec_reply">yes</td>
@ -704,14 +705,14 @@ module PortableInterceptor {
* <td id="cri" colspan=6><i>ClientRequestInfo-specific:</i></td>
* </tr>
*
* <tr><th id="target"><p align="left">target</p></th>
* <tr><th id="target"><p style="text-align:left">target</p></th>
* <td headers="cri target send_req">yes</td>
* <td headers="cri target send_poll">yes</td>
* <td headers="cri target rec_reply">yes</td>
* <td headers="cri target rec_ex">yes</td>
* <td headers="cri target rec_oth">yes</td></tr>
*
* <tr><th id="eftarget"><p align="left">effective_target</p></th>
* <tr><th id="eftarget"><p style="text-align:left">effective_target</p></th>
* <td headers="cri eftarget send_req">yes</td>
* <td headers="cri eftarget send_poll">yes</td>
* <td headers="cri eftarget rec_reply">yes</td>
@ -719,49 +720,49 @@ module PortableInterceptor {
* <td headers="cri eftarget rec_oth">yes</td>
* </tr>
*
* <tr><th id="efprof"><p align="left">effective_profile</p></th>
* <tr><th id="efprof"><p style="text-align:left">effective_profile</p></th>
* <td headers="cri efprof send_req">yes</td>
* <td headers="cri efprof send_poll">yes</td>
* <td headers="cri efprof rec_reply">yes</td>
* <td headers="cri efprof rec_ex">yes</td>
* <td headers="cri efprof rec_oth">yes</td></tr>
*
* <tr><th id="rxp"><p align="left">received_exception</p></th>
* <tr><th id="rxp"><p style="text-align:left">received_exception</p></th>
* <td headers="cri rxp send_req">no </td>
* <td headers="cri rxp send_poll">no </td>
* <td headers="cri rxp rec_reply">no </td>
* <td headers="cri rxp rec_ex">yes</td>
* <td headers="cri rxp rec_oth">no </td></tr>
*
* <tr><th id="rei"><p align="left">received_exception_id</p></th>
* <tr><th id="rei"><p style="text-align:left">received_exception_id</p></th>
* <td headers="cri rei send_req">no </td>
* <td headers="cri rei send_poll">no </td>
* <td headers="cri rei rec_reply">no </td>
* <td headers="cri rei rec_ex">yes</td>
* <td headers="cri rei rec_oth">no </td></tr>
*
* <tr><th id="gec"><p align="left">get_effective_component</p></th>
* <tr><th id="gec"><p style="text-align:left">get_effective_component</p></th>
* <td headers="cri gec send_req">yes</td>
* <td headers="cri gec send_poll">no </td>
* <td headers="cri gec rec_reply">yes</td>
* <td headers="cri gec rec_ex">yes</td>
* <td headers="cri gec rec_oth">yes</td></tr>
*
* <tr><th id="gecs"><p align="left">get_effective_components</p></th>
* <tr><th id="gecs"><p style="text-align:left">get_effective_components</p></th>
* <td headers="cri gecs send_req">yes</td>
* <td headers="cri gecs send_poll">no </td>
* <td headers="cri gecs rec_reply">yes</td>
* <td headers="cri gecs rec_ex">yes</td>
* <td headers="cri gecs rec_oth">yes</td></tr>
*
* <tr><th id="grpcy"><p align="left">get_request_policy</p></th>
* <tr><th id="grpcy"><p style="text-align:left">get_request_policy</p></th>
* <td headers="cri grpcy send_req">yes</td>
* <td headers="cri grpcy send_poll">no </td>
* <td headers="cri grpcy rec_reply">yes</td>
* <td headers="cri grpcy rec_ex">yes</td>
* <td headers="cri grpcy rec_oth">yes</td></tr>
*
* <tr><th id="arsc"><p align="left">add_request_service_context</p></th>
* <tr><th id="arsc"><p style="text-align:left">add_request_service_context</p></th>
* <td headers="cri arsc send_req">yes</td>
* <td headers="cri arsc send_poll">no </td>
* <td headers="cri arsc rec_reply">no </td>
@ -935,7 +936,8 @@ module PortableInterceptor {
* standard minor code of 14.
*
*
* <table border=1 summary="Shows the validity of each attribute or operation">
* <table class="plain">
* <caption style="display:none">Shows the validity of each attribute or operation</caption>
* <thead>
* <tr>
* <th>&nbsp;</th>
@ -953,21 +955,21 @@ module PortableInterceptor {
* <td id="ri" colspan=6><i>Inherited from RequestInfo:</i></td>
* </tr>
*
* <tr><th id="req_id"><p align="left">request_id</p></th>
* <tr><th id="req_id"><p style="text-align:left">request_id</p></th>
* <td headers="ri req_id rec_req_ser_con">yes</td>
* <td headers="ri req_id rec_req">yes</td>
* <td headers="ri req_id send_rep">yes</td>
* <td headers="ri req_id send_exc">yes</td>
* <td headers="ri req_id send_oth">yes</td></tr>
*
* <tr><th id="op"><p align="left">operation</p></th>
* <tr><th id="op"><p style="text-align:left">operation</p></th>
* <td headers="ri op rec_req_ser_con">yes</td>
* <td headers="ri op rec_req">yes</td>
* <td headers="ri op send_rep">yes</td>
* <td headers="ri op send_exc">yes</td>
* <td headers="ri op send_oth">yes</td></tr>
*
* <tr><th id="args"><p align="left">arguments</p></th>
* <tr><th id="args"><p style="text-align:left">arguments</p></th>
* <td headers="ri args rec_req_ser_con">no </td>
* <td headers="ri args rec_req">yes<sub>1</sub></td>
* <td headers="ri args send_rep">yes</td>
@ -975,21 +977,21 @@ module PortableInterceptor {
* <td headers="ri args send_oth">no<sub>2</sub>
* </td></tr>
*
* <tr><th id="exps"><p align="left">exceptions</p></th>
* <tr><th id="exps"><p style="text-align:left">exceptions</p></th>
* <td headers="ri exps rec_req_ser_con">no </td>
* <td headers="ri exps rec_req">yes</td>
* <td headers="ri exps send_rep">yes</td>
* <td headers="ri exps send_exc">yes</td>
* <td headers="ri exps send_oth">yes</td></tr>
*
* <tr><th id="contexts"><p align="left">contexts</p></th>
* <tr><th id="contexts"><p style="text-align:left">contexts</p></th>
* <td headers="ri contexts rec_req_ser_con">no </td>
* <td headers="ri contexts rec_req">yes</td>
* <td headers="ri contexts send_rep">yes</td>
* <td headers="ri contexts send_exc">yes</td>
* <td headers="ri contexts send_oth">yes</td></tr>
*
* <tr><th id="op_con"><p align="left">operation_context</p></th>
* <tr><th id="op_con"><p style="text-align:left">operation_context</p></th>
* <td headers="ri op_con rec_req_ser_con">no </td>
* <td headers="ri op_con rec_req">yes</td>
* <td headers="ri op_con send_rep">yes</td>
@ -997,7 +999,7 @@ module PortableInterceptor {
* <td headers="ri op_con send_oth">no </td>
* </tr>
*
* <tr><th id="result"><p align="left">result</p></th>
* <tr><th id="result"><p style="text-align:left">result</p></th>
* <td headers="ri result rec_req_ser_con">no </td>
* <td headers="ri result rec_req">no </td>
* <td headers="ri result send_rep">yes</td>
@ -1005,14 +1007,14 @@ module PortableInterceptor {
* <td headers="ri result send_oth">no </td>
* </tr>
*
* <tr><th id="res_ex"><p align="left">response_expected</p></th>
* <tr><th id="res_ex"><p style="text-align:left">response_expected</p></th>
* <td headers="ri res_ex rec_req_ser_con">yes</td>
* <td headers="ri res_ex rec_req">yes</td>
* <td headers="ri res_ex send_rep">yes</td>
* <td headers="ri res_ex send_exc">yes</td>
* <td headers="ri res_ex send_oth">yes</td></tr>
*
* <tr><th id="syn_scp"><p align="left">sync_scope</p></th>
* <tr><th id="syn_scp"><p style="text-align:left">sync_scope</p></th>
* <td headers="ri syn_scp rec_req_ser_con">yes</td>
* <td headers="ri syn_scp rec_req">yes</td>
* <td headers="ri syn_scp send_rep">yes</td>

View File

@ -1,9 +1,9 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!doctype html>
<html>
<head>
<!--
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
@ -29,7 +29,7 @@ questions.
-->
</head>
<body bgcolor="white">
<body>
Provides a mechanism to register ORB hooks through which ORB services
can intercept the normal flow of execution of the ORB.
@ -52,7 +52,7 @@ See the javadocs for class <code>
{@link org.omg.PortableInterceptor.ORBInitializer ORBInitializer}</code>
for how to go about registering interceptors.
<a name="unimpl"></a>
<a id="unimpl"></a>
<h2>Known limitations / unimplemented methods in package
<code>org.omg.PortableInterceptor</code></h2>

View File

@ -1,9 +1,9 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!doctype html>
<html>
<head>
<!--
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
@ -30,7 +30,7 @@
-->
</head>
<body bgcolor="white">
<body>
Provides classes and interfaces for making the server side of your applications
portable across multivendor ORBs.
@ -160,7 +160,7 @@ follows exactly the same pattern as the other holder classes for basic types.
<A HREF="../../../../technotes/guides/idl/index.html">Java IDL home page</A>.
<H2>Example Code</H2>
<a name="sampleserver"></a>
<a id="sampleserver"></a>
<H3>Example Server Code</H3>
<PRE>
import javax.naming.InitialContext;

View File

@ -579,3 +579,6 @@ c92c6416ca03b1464d5ed99cf6201e52b5ba0a70 jdk-9+165
1ca7ed1b17b5776930d641d1379834f3140a74e4 jdk-9+167
fbb9c802649585d19f6d7e81b4a519d44806225a jdk-9+168
16d692be099c5c38eb48cc9aca78b0c900910d5b jdk-9+169
38a240fd58a287acb1963920b92ed4d9c2fd39e3 jdk-9+170
9d4746eca95aec3e5a344bf2520745dcc1d17eed jdk-10+7
f5ded0cf954c770deeecb80f2ba1ba6a05cd979b jdk-10+8

View File

@ -1,22 +0,0 @@
Copyright (c) %YEARS%, Oracle and/or its affiliates. All rights reserved.
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.

View File

@ -1,20 +0,0 @@
Copyright (c) %YEARS%, Oracle and/or its affiliates. All rights reserved.
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.

View File

@ -1347,6 +1347,16 @@ void LIRGenerator::volatile_field_store(LIR_Opr value, LIR_Address* address,
void LIRGenerator::volatile_field_load(LIR_Address* address, LIR_Opr result,
CodeEmitInfo* info) {
// 8179954: We need to make sure that the code generated for
// volatile accesses forms a sequentially-consistent set of
// operations when combined with STLR and LDAR. Without a leading
// membar it's possible for a simple Dekker test to fail if loads
// use LD;DMB but stores use STLR. This can happen if C2 compiles
// the stores in one method and C1 compiles the loads in another.
if (! UseBarriersForVolatile) {
__ membar();
}
__ volatile_load_mem_reg(address, result, info);
}

View File

@ -2389,17 +2389,31 @@ void TemplateTable::getfield_or_static(int byte_no, bool is_static, RewriteContr
const Register obj = r4;
const Register off = r19;
const Register flags = r0;
const Register raw_flags = r6;
const Register bc = r4; // uses same reg as obj, so don't mix them
resolve_cache_and_index(byte_no, cache, index, sizeof(u2));
jvmti_post_field_access(cache, index, is_static, false);
load_field_cp_cache_entry(obj, cache, index, off, flags, is_static);
load_field_cp_cache_entry(obj, cache, index, off, raw_flags, is_static);
if (!is_static) {
// obj is on the stack
pop_and_check_object(obj);
}
// 8179954: We need to make sure that the code generated for
// volatile accesses forms a sequentially-consistent set of
// operations when combined with STLR and LDAR. Without a leading
// membar it's possible for a simple Dekker test to fail if loads
// use LDR;DMB but stores use STLR. This can happen if C2 compiles
// the stores in one method and we interpret the loads in another.
if (! UseBarriersForVolatile) {
Label notVolatile;
__ tbz(raw_flags, ConstantPoolCacheEntry::is_volatile_shift, notVolatile);
__ membar(MacroAssembler::AnyAny);
__ bind(notVolatile);
}
const Address field(obj, off);
Label Done, notByte, notBool, notInt, notShort, notChar,
@ -2407,7 +2421,8 @@ void TemplateTable::getfield_or_static(int byte_no, bool is_static, RewriteContr
// x86 uses a shift and mask or wings it with a shift plus assert
// the mask is not needed. aarch64 just uses bitfield extract
__ ubfxw(flags, flags, ConstantPoolCacheEntry::tos_state_shift, ConstantPoolCacheEntry::tos_state_bits);
__ ubfxw(flags, raw_flags, ConstantPoolCacheEntry::tos_state_shift,
ConstantPoolCacheEntry::tos_state_bits);
assert(btos == 0, "change code, btos != 0");
__ cbnz(flags, notByte);
@ -2529,9 +2544,11 @@ void TemplateTable::getfield_or_static(int byte_no, bool is_static, RewriteContr
#endif
__ bind(Done);
// It's really not worth bothering to check whether this field
// really is volatile in the slow case.
Label notVolatile;
__ tbz(raw_flags, ConstantPoolCacheEntry::is_volatile_shift, notVolatile);
__ membar(MacroAssembler::LoadLoad | MacroAssembler::LoadStore);
__ bind(notVolatile);
}
@ -2979,6 +2996,19 @@ void TemplateTable::fast_accessfield(TosState state)
__ null_check(r0);
const Address field(r0, r1);
// 8179954: We need to make sure that the code generated for
// volatile accesses forms a sequentially-consistent set of
// operations when combined with STLR and LDAR. Without a leading
// membar it's possible for a simple Dekker test to fail if loads
// use LDR;DMB but stores use STLR. This can happen if C2 compiles
// the stores in one method and we interpret the loads in another.
if (! UseBarriersForVolatile) {
Label notVolatile;
__ tbz(r3, ConstantPoolCacheEntry::is_volatile_shift, notVolatile);
__ membar(MacroAssembler::AnyAny);
__ bind(notVolatile);
}
// access field
switch (bytecode()) {
case Bytecodes::_fast_agetfield:
@ -3027,6 +3057,22 @@ void TemplateTable::fast_xaccess(TosState state)
__ get_cache_and_index_at_bcp(r2, r3, 2);
__ ldr(r1, Address(r2, in_bytes(ConstantPoolCache::base_offset() +
ConstantPoolCacheEntry::f2_offset())));
// 8179954: We need to make sure that the code generated for
// volatile accesses forms a sequentially-consistent set of
// operations when combined with STLR and LDAR. Without a leading
// membar it's possible for a simple Dekker test to fail if loads
// use LDR;DMB but stores use STLR. This can happen if C2 compiles
// the stores in one method and we interpret the loads in another.
if (! UseBarriersForVolatile) {
Label notVolatile;
__ ldrw(r3, Address(r2, in_bytes(ConstantPoolCache::base_offset() +
ConstantPoolCacheEntry::flags_offset())));
__ tbz(r3, ConstantPoolCacheEntry::is_volatile_shift, notVolatile);
__ membar(MacroAssembler::AnyAny);
__ bind(notVolatile);
}
// make sure exception is reported in correct bcp range (getfield is
// next instruction)
__ increment(rbcp);

View File

@ -314,7 +314,11 @@ oop StringTable::intern(const char* utf8_string, TRAPS) {
}
void StringTable::unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) {
buckets_unlink_or_oops_do(is_alive, f, 0, the_table()->table_size(), processed, removed);
BucketUnlinkContext context;
buckets_unlink_or_oops_do(is_alive, f, 0, the_table()->table_size(), &context);
_the_table->bulk_free_entries(&context);
*processed = context._num_processed;
*removed = context._num_removed;
}
void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) {
@ -323,6 +327,7 @@ void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_aliv
assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
const int limit = the_table()->table_size();
BucketUnlinkContext context;
for (;;) {
// Grab next set of buckets to scan
int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
@ -332,8 +337,11 @@ void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_aliv
}
int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
buckets_unlink_or_oops_do(is_alive, f, start_idx, end_idx, processed, removed);
buckets_unlink_or_oops_do(is_alive, f, start_idx, end_idx, &context);
}
_the_table->bulk_free_entries(&context);
*processed = context._num_processed;
*removed = context._num_removed;
}
void StringTable::buckets_oops_do(OopClosure* f, int start_idx, int end_idx) {
@ -359,7 +367,7 @@ void StringTable::buckets_oops_do(OopClosure* f, int start_idx, int end_idx) {
}
}
void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed) {
void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, BucketUnlinkContext* context) {
const int limit = the_table()->table_size();
assert(0 <= start_idx && start_idx <= limit,
@ -383,10 +391,9 @@ void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClos
p = entry->next_addr();
} else {
*p = entry->next();
the_table()->free_entry(entry);
(*removed)++;
context->free_entry(entry);
}
(*processed)++;
context->_num_processed++;
entry = *p;
}
}

View File

@ -61,9 +61,13 @@ private:
// Apply the give oop closure to the entries to the buckets
// in the range [start_idx, end_idx).
static void buckets_oops_do(OopClosure* f, int start_idx, int end_idx);
typedef StringTable::BucketUnlinkContext BucketUnlinkContext;
// Unlink or apply the give oop closure to the entries to the buckets
// in the range [start_idx, end_idx).
static void buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed);
// in the range [start_idx, end_idx). Unlinked bucket entries are collected in the given
// context to be freed later.
// This allows multiple threads to work on the table at once.
static void buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, BucketUnlinkContext* context);
// Hashing algorithm, used as the hash value used by the
// StringTable for bucket selection and comparison (stored in the

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -98,7 +98,7 @@ int SymbolTable::_symbols_removed = 0;
int SymbolTable::_symbols_counted = 0;
volatile int SymbolTable::_parallel_claimed_idx = 0;
void SymbolTable::buckets_unlink(int start_idx, int end_idx, int* processed, int* removed) {
void SymbolTable::buckets_unlink(int start_idx, int end_idx, BucketUnlinkContext* context) {
for (int i = start_idx; i < end_idx; ++i) {
HashtableEntry<Symbol*, mtSymbol>** p = the_table()->bucket_addr(i);
HashtableEntry<Symbol*, mtSymbol>* entry = the_table()->bucket(i);
@ -111,15 +111,14 @@ void SymbolTable::buckets_unlink(int start_idx, int end_idx, int* processed, int
break;
}
Symbol* s = entry->literal();
(*processed)++;
context->_num_processed++;
assert(s != NULL, "just checking");
// If reference count is zero, remove.
if (s->refcount() == 0) {
assert(!entry->is_shared(), "shared entries should be kept live");
delete s;
(*removed)++;
*p = entry->next();
the_table()->free_entry(entry);
context->free_entry(entry);
} else {
p = entry->next_addr();
}
@ -132,17 +131,20 @@ void SymbolTable::buckets_unlink(int start_idx, int end_idx, int* processed, int
// Remove unreferenced symbols from the symbol table
// This is done late during GC.
void SymbolTable::unlink(int* processed, int* removed) {
size_t memory_total = 0;
buckets_unlink(0, the_table()->table_size(), processed, removed);
_symbols_removed += *removed;
_symbols_counted += *processed;
BucketUnlinkContext context;
buckets_unlink(0, the_table()->table_size(), &context);
_the_table->bulk_free_entries(&context);
*processed = context._num_processed;
*removed = context._num_removed;
_symbols_removed = context._num_removed;
_symbols_counted = context._num_processed;
}
void SymbolTable::possibly_parallel_unlink(int* processed, int* removed) {
const int limit = the_table()->table_size();
size_t memory_total = 0;
BucketUnlinkContext context;
for (;;) {
// Grab next set of buckets to scan
int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
@ -152,10 +154,15 @@ void SymbolTable::possibly_parallel_unlink(int* processed, int* removed) {
}
int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
buckets_unlink(start_idx, end_idx, processed, removed);
buckets_unlink(start_idx, end_idx, &context);
}
Atomic::add(*processed, &_symbols_counted);
Atomic::add(*removed, &_symbols_removed);
_the_table->bulk_free_entries(&context);
*processed = context._num_processed;
*removed = context._num_removed;
Atomic::add(context._num_processed, &_symbols_counted);
Atomic::add(context._num_removed, &_symbols_removed);
}
// Create a new table and using alternate hash code, populate the new table

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -154,8 +154,11 @@ private:
static volatile int _parallel_claimed_idx;
// Release any dead symbols
static void buckets_unlink(int start_idx, int end_idx, int* processed, int* removed);
typedef SymbolTable::BucketUnlinkContext BucketUnlinkContext;
// Release any dead symbols. Unlinked bucket entries are collected in the given
// context to be freed later.
// This allows multiple threads to work on the table at once.
static void buckets_unlink(int start_idx, int end_idx, BucketUnlinkContext* context);
public:
enum {
symbol_alloc_batch_size = 8,

View File

@ -675,7 +675,7 @@ typedef RehashableHashtable<Symbol*, mtSymbol> RehashableSymbolHashtable;
\
nonstatic_field(BasicHashtable<mtInternal>, _table_size, int) \
nonstatic_field(BasicHashtable<mtInternal>, _buckets, HashtableBucket<mtInternal>*) \
nonstatic_field(BasicHashtable<mtInternal>, _free_list, BasicHashtableEntry<mtInternal>*) \
volatile_nonstatic_field(BasicHashtable<mtInternal>, _free_list, BasicHashtableEntry<mtInternal>*) \
nonstatic_field(BasicHashtable<mtInternal>, _first_free_entry, char*) \
nonstatic_field(BasicHashtable<mtInternal>, _end_block, char*) \
nonstatic_field(BasicHashtable<mtInternal>, _entry_size, int) \

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -173,6 +173,35 @@ template <MEMFLAGS F> void BasicHashtable<F>::reverse() {
}
}
template <MEMFLAGS F> void BasicHashtable<F>::BucketUnlinkContext::free_entry(BasicHashtableEntry<F>* entry) {
entry->set_next(_removed_head);
_removed_head = entry;
if (_removed_tail == NULL) {
_removed_tail = entry;
}
_num_removed++;
}
template <MEMFLAGS F> void BasicHashtable<F>::bulk_free_entries(BucketUnlinkContext* context) {
if (context->_num_removed == 0) {
assert(context->_removed_head == NULL && context->_removed_tail == NULL,
"Zero entries in the unlink context, but elements linked from " PTR_FORMAT " to " PTR_FORMAT,
p2i(context->_removed_head), p2i(context->_removed_tail));
return;
}
// MT-safe add of the list of BasicHashTableEntrys from the context to the free list.
BasicHashtableEntry<F>* current = _free_list;
while (true) {
context->_removed_tail->set_next(current);
BasicHashtableEntry<F>* old = (BasicHashtableEntry<F>*)Atomic::cmpxchg_ptr(context->_removed_head, &_free_list, current);
if (old == current) {
break;
}
current = old;
}
Atomic::add(-context->_num_removed, &_number_of_entries);
}
// Copy the table to the shared space.

View File

@ -173,11 +173,11 @@ private:
// Instance variables
int _table_size;
HashtableBucket<F>* _buckets;
BasicHashtableEntry<F>* _free_list;
BasicHashtableEntry<F>* volatile _free_list;
char* _first_free_entry;
char* _end_block;
int _entry_size;
int _number_of_entries;
volatile int _number_of_entries;
protected:
@ -225,6 +225,24 @@ protected:
// Free the buckets in this hashtable
void free_buckets();
// Helper data structure containing context for the bucket entry unlink process,
// storing the unlinked buckets in a linked list.
// Also avoids the need to pass around these four members as parameters everywhere.
struct BucketUnlinkContext {
int _num_processed;
int _num_removed;
// Head and tail pointers for the linked list of removed entries.
BasicHashtableEntry<F>* _removed_head;
BasicHashtableEntry<F>* _removed_tail;
BucketUnlinkContext() : _num_processed(0), _num_removed(0), _removed_head(NULL), _removed_tail(NULL) {
}
void free_entry(BasicHashtableEntry<F>* entry);
};
// Add of bucket entries linked together in the given context to the global free list. This method
// is mt-safe wrt. to other calls of this method.
void bulk_free_entries(BucketUnlinkContext* context);
public:
int table_size() { return _table_size; }
void set_entry(int index, BasicHashtableEntry<F>* entry);

View File

@ -24,7 +24,7 @@
import static jdk.test.lib.Asserts.assertEQ;
import static jdk.test.lib.Asserts.assertFalse;
import static jdk.test.lib.Asserts.assertTrue;
import jdk.test.lib.DynamicVMOption;
import jdk.test.lib.management.DynamicVMOption;
/**
* @test TestDynMaxHeapFreeRatio

View File

@ -38,7 +38,7 @@
import static jdk.test.lib.Asserts.assertEQ;
import static jdk.test.lib.Asserts.assertFalse;
import static jdk.test.lib.Asserts.assertTrue;
import jdk.test.lib.DynamicVMOption;
import jdk.test.lib.management.DynamicVMOption;
public class TestDynMinHeapFreeRatio {

View File

@ -26,7 +26,7 @@ import java.util.List;
import java.util.ArrayList;
import jdk.test.lib.ByteCodeLoader;
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.Platform;
import sun.management.ManagementFactoryHelper;

View File

@ -31,7 +31,7 @@
* @library /test/lib /
* @run main/othervm -XX:+UseAdaptiveSizePolicyWithSystemGC -XX:+UseParallelGC -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 -Xmx1g -verbose:gc TestDynShrinkHeap
*/
import jdk.test.lib.DynamicVMOption;
import jdk.test.lib.management.DynamicVMOption;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryUsage;
import java.util.ArrayList;

View File

@ -31,7 +31,7 @@
* @run main BootstrapRedefine
*/
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;

View File

@ -34,7 +34,7 @@
*/
import jdk.test.lib.Asserts;
import jdk.test.lib.DynamicVMOption;
import jdk.test.lib.management.DynamicVMOption;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.dcmd.PidJcmdExecutor;

View File

@ -29,7 +29,7 @@ import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import jdk.test.lib.DynamicVMOption;
import jdk.test.lib.management.DynamicVMOption;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.dcmd.CommandExecutor;

View File

@ -51,7 +51,7 @@ import java.util.List;
import java.util.Properties;
import java.util.Set;
import jdk.test.lib.Asserts;
import jdk.test.lib.DynamicVMOption;
import jdk.test.lib.management.DynamicVMOption;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;

View File

@ -34,15 +34,14 @@
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.lang.NoSuchFieldException;
import java.lang.NoSuchMethodException;
import java.lang.RuntimeException;
import java.lang.instrument.ClassDefinition;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.instrument.Instrumentation;
import java.security.ProtectionDomain;
import jdk.test.lib.*;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
public class ModifyAnonymous {

View File

@ -32,8 +32,8 @@
*/
import java.security.ProtectionDomain;
import java.io.InputStream;
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.internal.misc.Unsafe;
import static jdk.test.lib.Asserts.*;

View File

@ -31,12 +31,9 @@
* @run main NestedUnsafe
*/
import java.security.ProtectionDomain;
import java.io.InputStream;
import java.lang.*;
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.internal.misc.Unsafe;
import static jdk.test.lib.Asserts.*;
// package p;

View File

@ -34,11 +34,10 @@
package p;
import java.security.ProtectionDomain;
import java.io.InputStream;
import java.lang.*;
import jdk.test.lib.*;
import jdk.internal.misc.Unsafe;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
// Test that an anonymous class in package 'p' cannot define its own anonymous class

View File

@ -34,11 +34,10 @@
package p;
import java.security.ProtectionDomain;
import java.io.InputStream;
import java.lang.*;
import jdk.test.lib.*;
import jdk.internal.misc.Unsafe;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
// Test that an anonymous class that gets put in its host's package cannot define

View File

@ -33,7 +33,7 @@
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;

View File

@ -38,8 +38,7 @@
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.InMemoryJavaCompiler;
import java.io.File;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
public class ModuleStress {

View File

@ -30,10 +30,9 @@
* @run main PatchModule2Dirs
*/
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
import java.io.File;
public class PatchModule2Dirs {

View File

@ -31,8 +31,7 @@
* @run main PatchModuleCDS
*/
import java.io.File;
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;

View File

@ -33,7 +33,7 @@
import java.nio.file.Files;
import java.nio.file.Paths;
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;

View File

@ -31,7 +31,7 @@
* @run main PatchModuleJavaBase
*/
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;

View File

@ -31,7 +31,7 @@
* @run main PatchModuleTest
*/
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;

View File

@ -31,7 +31,7 @@
* @run main PatchModuleTestJar
*/
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;

View File

@ -32,8 +32,8 @@
*/
import java.io.File;
import java.nio.file.Files;
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;

View File

@ -32,8 +32,7 @@
* @run main PatchModuleTraceCL
*/
import java.io.File;
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;

View File

@ -36,7 +36,7 @@ import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;

View File

@ -31,7 +31,7 @@
* @run main/othervm XbootcpNoVisibility
*/
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;

View File

@ -36,7 +36,7 @@ import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import jdk.test.lib.InMemoryJavaCompiler;
import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;

View File

@ -419,3 +419,6 @@ ac697b2bdf486ef18caad2092bd24036e14946ac jdk-10+5
646567dcfa64b9a39b33d71330427737d1c1a0d5 jdk-9+167
23a87f409371fb8ce7b764cccb3a74c3f6b29900 jdk-9+168
5d9d2a65fb26aa183019346c11d9314819621665 jdk-9+169
6e78f902f477a093afca85a1042f97410d01eb69 jdk-9+170
09cae4c36242734f5450de739b8264523a030809 jdk-10+7
856998840907b67b7e1fc49259f785ac085a189b jdk-10+8

View File

@ -1,4 +1,5 @@
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -22,14 +23,6 @@
* questions.
*/
/*
* Copyright (c) 2009 by Oracle Corporation. All Rights Reserved.
*/
/*
* $Id: FeatureState.java 3024 2011-03-01 03:46:13Z joehw $
*/
package com.sun.org.apache.xerces.internal.util;
public class FeatureState {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more

View File

@ -1,4 +1,5 @@
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -22,13 +23,6 @@
* questions.
*/
/*
* Copyright (c) 2009 by Oracle Corporation. All Rights Reserved.
*/
/*
* $Id: PropertyState.java 3024 2011-03-01 03:46:13Z joehw $
*/
package com.sun.org.apache.xerces.internal.util;
public class PropertyState {

View File

@ -1,4 +1,5 @@
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -22,13 +23,6 @@
* questions.
*/
/*
* Copyright (c) 2009 by Oracle Corporation. All Rights Reserved.
*/
/*
* $Id: Status.java 3024 2011-03-01 03:46:13Z joehw $
*/
package com.sun.org.apache.xerces.internal.util;
public enum Status {

View File

@ -1,32 +1,21 @@
/*
* Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
* THIS FILE WAS MODIFIED BY SUN MICROSYSTEMS, INC.
*/
/*
* Copyright 2005 The Apache Software Foundation.
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sun.xml.internal.stream.dtd.nonvalidating;

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
@ -23,48 +22,45 @@ 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.
-->
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>javax.xml.transform.stax</title>
<head>
<title>javax.xml.transform.stax</title>
<meta name="CVS"
content="$Id: package.html,v 1.2 2005/11/03 19:34:28 jeffsuttor Exp $" />
<meta name="AUTHOR"
content="Jeff.Suttor@Sun.com" />
<meta name="AUTHOR"
content="Neeraj.Bajaj@Sun.com" />
</head>
<body>
<p>
Provides for StAX-specific transformation APIs.
TODO: better description(s).
</p>
<meta name="CVS"
content="$Id: package.html,v 1.2 2005/11/03 19:34:28 jeffsuttor Exp $" />
<meta name="AUTHOR"
content="Jeff.Suttor@Sun.com" />
<meta name="AUTHOR"
content="Neeraj.Bajaj@Sun.com" />
</head>
<body>
<p>
This package implements StAX-specific transformation APIs. It provides
classes which allow input from a StAX reader, that is,
{@link javax.xml.stream.XMLStreamReader} or {@link javax.xml.stream.XMLEventReader},
and output to a StAX writer, that is,
{@link javax.xml.stream.XMLStreamWriter} or {@link javax.xml.stream.XMLEventWriter}.
</p>
<p>
The {@link javax.xml.transform.stax.StAXSource} class encapsulates a
{@link javax.xml.stream.XMLStreamReader} or {@link javax.xml.stream.XMLEventReader}
and can be used as an input where a {@link javax.xml.transform.Source}
object is accepted.
</p>
<p>
The {@link javax.xml.transform.stax.StAXResult} class encapsulates a
{@link javax.xml.stream.XMLStreamWriter} or {@link javax.xml.stream.XMLEventWriter}
and can be used as an output where a {@link javax.xml.transform.Result}
object is accepted.
</p>
<h2>Package Specification</h2>
<ul>
<li><a href="http://jcp.org/en/jsr/detail?id=173">JSR 173: Streaming API for XML</a></li>
</ul>
<h2>Related Documentation</h2>
<p>For overviews, tutorials, examples, guides, and tool documentation, please see:</p>
<ul>
<li><a href="">TODO: Refer to non-spec documentation</a></li>
</ul>
<!-- Put @see and @since tags down here. -->
<ul>
<li>@see XMLStreamReader</li>
<li>@see XMLEventReader</li>
</ul>
@since 1.6
</body>
@since 1.6
</body>
</html>

View File

@ -422,3 +422,6 @@ ac7e572a6a6ba5bbd7e6aa94a289f88cc86256a4 jdk-10+4
1c610f1b4097c64cdd722a7fb59f5a4d9cc15ca9 jdk-9+167
2746716dcc5a8c28ccf41df0c8fb620b1a1e7098 jdk-9+168
912cf69806d518c5af7fba30b340c4cb5458dd22 jdk-9+169
e75d3abe579a7b39b762fc0a1a337c49eb072d82 jdk-9+170
b0efae7df1dfa14926058baebaf999e4268c955c jdk-10+7
e705867d9989d00e4357f66f18b302c95e13b5e7 jdk-10+8

View File

@ -420,3 +420,5 @@ d1436b2945383cef15edbdba9bb41ef1656c987b jdk-10+5
e78da9db6299b3fcba49300d52e2359e82fdd218 jdk-9+168
177436a54ca13730ffc725a6e5dbfcd9486f3da3 jdk-9+169
ef9954f6896bb0b95ac62bf769f68b59a7a56ccd jdk-9+170
cbd65760a005766610583949b3b5c9ace92e74b3 jdk-10+7
f0adc10ed8316e6cf316e3208c5ecf6835d22bc4 jdk-10+8

View File

@ -1,122 +0,0 @@
/*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.security.ssl;
/*
* enumation of record type
*/
enum RecordType {
RECORD_CHANGE_CIPHER_SPEC (Record.ct_change_cipher_spec,
HandshakeMessage.ht_not_applicable),
RECORD_ALERT (Record.ct_alert,
HandshakeMessage.ht_not_applicable),
RECORD_HELLO_REQUEST (Record.ct_handshake,
HandshakeMessage.ht_hello_request),
RECORD_CLIENT_HELLO (Record.ct_handshake,
HandshakeMessage.ht_client_hello),
RECORD_SERVER_HELLO (Record.ct_handshake,
HandshakeMessage.ht_server_hello),
RECORD_HELLO_VERIFY_REQUEST (Record.ct_handshake,
HandshakeMessage.ht_hello_verify_request),
RECORD_NEW_SESSION_TICKET (Record.ct_handshake,
HandshakeMessage.ht_new_session_ticket),
RECORD_CERTIFICATE (Record.ct_handshake,
HandshakeMessage.ht_certificate),
RECORD_SERVER_KEY_EXCHANGE (Record.ct_handshake,
HandshakeMessage.ht_server_key_exchange),
RECORD_CERTIFICATE_REQUEST (Record.ct_handshake,
HandshakeMessage.ht_certificate_request),
RECORD_SERVER_HELLO_DONE (Record.ct_handshake,
HandshakeMessage.ht_server_hello_done),
RECORD_CERTIFICATE_VERIFY (Record.ct_handshake,
HandshakeMessage.ht_certificate_verify),
RECORD_CLIENT_KEY_EXCHANGE (Record.ct_handshake,
HandshakeMessage.ht_client_key_exchange),
RECORD_FINISHED (Record.ct_handshake,
HandshakeMessage.ht_finished),
RECORD_CERTIFICATE_URL (Record.ct_handshake,
HandshakeMessage.ht_certificate_url),
RECORD_CERTIFICATE_STATUS (Record.ct_handshake,
HandshakeMessage.ht_certificate_status),
RECORD_SUPPLIEMENTAL_DATA (Record.ct_handshake,
HandshakeMessage.ht_supplemental_data),
RECORD_APPLICATION_DATA (Record.ct_application_data,
HandshakeMessage.ht_not_applicable);
byte contentType;
byte handshakeType;
private RecordType(byte contentType, byte handshakeType) {
this.contentType = contentType;
this.handshakeType = handshakeType;
}
static RecordType valueOf(byte contentType, byte handshakeType) {
if (contentType == Record.ct_change_cipher_spec) {
return RECORD_CHANGE_CIPHER_SPEC;
} else if (contentType == Record.ct_alert) {
return RECORD_ALERT;
} else if (contentType == Record.ct_application_data) {
return RECORD_APPLICATION_DATA;
} else if (handshakeType == HandshakeMessage.ht_hello_request) {
return RECORD_HELLO_REQUEST;
} else if (handshakeType == HandshakeMessage.ht_client_hello) {
return RECORD_CLIENT_HELLO;
} else if (handshakeType == HandshakeMessage.ht_server_hello) {
return RECORD_SERVER_HELLO;
} else if (handshakeType == HandshakeMessage.ht_hello_verify_request) {
return RECORD_HELLO_VERIFY_REQUEST;
} else if (handshakeType == HandshakeMessage.ht_new_session_ticket) {
return RECORD_NEW_SESSION_TICKET;
} else if (handshakeType == HandshakeMessage.ht_certificate) {
return RECORD_CERTIFICATE;
} else if (handshakeType == HandshakeMessage.ht_server_key_exchange) {
return RECORD_SERVER_KEY_EXCHANGE;
} else if (handshakeType == HandshakeMessage.ht_certificate_request) {
return RECORD_CERTIFICATE_REQUEST;
} else if (handshakeType == HandshakeMessage.ht_server_hello_done) {
return RECORD_SERVER_HELLO_DONE;
} else if (handshakeType == HandshakeMessage.ht_certificate_verify) {
return RECORD_CERTIFICATE_VERIFY;
} else if (handshakeType == HandshakeMessage.ht_client_key_exchange) {
return RECORD_CLIENT_KEY_EXCHANGE;
} else if (handshakeType == HandshakeMessage.ht_finished) {
return RECORD_FINISHED;
} else if (handshakeType == HandshakeMessage.ht_certificate_url) {
return RECORD_CERTIFICATE_URL;
} else if (handshakeType == HandshakeMessage.ht_certificate_status) {
return RECORD_CERTIFICATE_STATUS;
} else if (handshakeType == HandshakeMessage.ht_supplemental_data) {
return RECORD_SUPPLIEMENTAL_DATA;
}
// otherwise, invalid record type
throw new IllegalArgumentException(
"Invalid record type (ContentType:" + contentType +
", HandshakeType:" + handshakeType + ")");
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -513,7 +513,7 @@ abstract class KeyStore extends KeyStoreSpi {
if (entry != null) {
// Get end-entity certificate and remove from system cert store
X509Certificate[] certChain = entry.getCertificateChain();
if (certChain != null) {
if (certChain != null && certChain.length > 0) {
try {
@ -629,7 +629,9 @@ abstract class KeyStore extends KeyStoreSpi {
for (Map.Entry<String,KeyEntry> mapEntry : entries.entrySet()) {
KeyEntry entry = mapEntry.getValue();
if (entry.certChain != null && entry.certChain[0].equals(cert)) {
if (entry.certChain != null &&
entry.certChain.length > 0 &&
entry.certChain[0].equals(cert)) {
return entry.getAlias();
}
}

View File

@ -27,7 +27,7 @@ import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.LockSupport;
import jdk.testlibrary.LockFreeLogManager;
import jdk.test.lib.LockFreeLogger;
import jdk.testlibrary.Utils;
/**
@ -100,7 +100,7 @@ public class ThreadStateController extends Thread {
private final AtomicInteger iterations = new AtomicInteger();
private final AtomicInteger interrupted = new AtomicInteger();
private final LockFreeLogManager logManager = new LockFreeLogManager();
private final LockFreeLogger logger = new LockFreeLogger();
@Override
public void run() {
@ -349,7 +349,7 @@ public class ThreadStateController extends Thread {
}
private void log(String msg, Object ... params) {
logManager.log(msg, params);
logger.log(msg, params);
}
/**
@ -361,6 +361,6 @@ public class ThreadStateController extends Thread {
public String getLog() throws InterruptedException {
this.join();
return logManager.toString();
return logger.toString();
}
}

View File

@ -31,6 +31,7 @@ import static java.lang.Thread.State.*;
*
* @author Mandy Chung
* @library /lib/testlibrary
* @library /test/lib
* @build jdk.testlibrary.*
* @build ThreadStateTest ThreadStateController
* @run main/othervm -Xmixed ThreadStateTest

View File

@ -29,17 +29,17 @@
* @author Mandy Chung
* @author Jaroslav Bachorik
*
* @library /lib/testlibrary
* @library /test/lib
*
* @build jdk.testlibrary.*
* @run main/othervm Locks
*/
import java.lang.management.*;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.Phaser;
import java.util.function.Predicate;
import jdk.testlibrary.LockFreeLogManager;
import jdk.test.lib.LockFreeLogger;
public class Locks {
@ -47,7 +47,7 @@ public class Locks {
private static final Object OBJB = new Object();
private static final EnhancedWaiter OBJC = new EnhancedWaiter();
private static final ThreadMXBean TM = ManagementFactory.getThreadMXBean();
private static final LockFreeLogManager LOGGER = new LockFreeLogManager();
private static final LockFreeLogger LOGGER = new LockFreeLogger();
private static String getLockName(Object lock) {
if (lock == null) return null;
@ -60,12 +60,12 @@ public class Locks {
if (t == null) {
return;
}
Optional<ThreadInfo> result = Arrays.asList(
TM.getThreadInfo(TM.getAllThreadIds(), true, true)).
stream().
filter(tInfo -> (tInfo != null && tInfo.getLockOwnerName() != null)
? tInfo.getLockOwnerName().equals(t.getName()) : false).
findAny();
String name = t.getName();
Optional<ThreadInfo> result = Arrays.stream(
TM.getThreadInfo(TM.getAllThreadIds(), true, true))
.filter(Objects::nonNull)
.filter(i -> name.equals(i.getLockOwnerName()))
.findAny();
if (result.isPresent()) {
throw new RuntimeException("Thread " + t.getName() + " is not "
+ "supposed to be hold any lock. Currently owning lock : "

View File

@ -31,6 +31,7 @@
*
* @library ../../Thread
* @library /lib/testlibrary
* @library /test/lib
*
* @build jdk.testlibrary.*
* @build ThreadMXBeanStateTest ThreadStateController

View File

@ -0,0 +1,81 @@
/*
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
* 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 8172244
* @summary Verify that no exception is thrown with empty cert chain
* in MSCAPI.
* @requires os.family == "windows"
* @modules java.base/sun.security.tools.keytool java.base/sun.security.x509
* @run main/othervm --add-opens java.base/java.security=ALL-UNNAMED
* KeyStoreEmptyCertChain
*/
import java.security.KeyStore;
import java.security.cert.Certificate;
import sun.security.x509.X500Name;
import sun.security.tools.keytool.CertAndKeyGen;
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.KeyStoreSpi;
import java.lang.reflect.*;
public class KeyStoreEmptyCertChain {
public static void main(String[] args) {
try {
KeyStore keyStore = KeyStore.getInstance("Windows-MY", "SunMSCAPI");
keyStore.load(null, null);
// Generate a certificate to use for testing
CertAndKeyGen gen = new CertAndKeyGen("RSA", "SHA256withRSA");
gen.generate(2048);
Certificate cert =
gen.getSelfCertificate(new X500Name("CN=test"), 3600);
String alias = "JDK-8172244";
char[] password = "password".toCharArray();
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
// generate a private key for the certificate
kpg.initialize(2048);
KeyPair keyPair = kpg.generateKeyPair();
PrivateKey privKey = keyPair.getPrivate();
// need to bypass checks to store the private key without the cert
Field spiField = KeyStore.class.getDeclaredField("keyStoreSpi");
spiField.setAccessible(true);
KeyStoreSpi spi = (KeyStoreSpi) spiField.get(keyStore);
spi.engineSetKeyEntry(alias, privKey, password, new Certificate[0]);
keyStore.store(null, null);
keyStore.getCertificateAlias(cert);
keyStore.deleteEntry(alias);
// test passes if no exception is thrown
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}

View File

@ -25,13 +25,12 @@
* @test
* @bug 8160286
* @summary Test the recording and checking of module hashes
* @library /lib/testlibrary
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.base/jdk.internal.module
* jdk.compiler
* jdk.jartool
* jdk.jlink
* @build CompilerUtils ModuleInfoMaker
* @run testng HashesTest
*/
@ -62,6 +61,8 @@ import jdk.internal.module.ModuleInfo;
import jdk.internal.module.ModuleHashes;
import jdk.internal.module.ModulePath;
import jdk.test.lib.compiler.ModuleInfoMaker;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
@ -382,7 +383,7 @@ public class HashesTest {
makeModule(mn, null, deps);
}
private void makeModule(String mn, ModuleDescriptor.Requires.Modifier mod, String... deps)
private void makeModule(String mn, ModuleDescriptor.Requires.Modifier mod, String... deps)
throws IOException
{
if (mod != null && mod != TRANSITIVE && mod != STATIC) {
@ -390,23 +391,23 @@ public class HashesTest {
}
StringBuilder sb = new StringBuilder();
sb.append("module " + mn + " {").append("\n");
Arrays.stream(deps).forEach(req -> {
sb.append(" requires ");
if (mod != null) {
sb.append(mod.toString().toLowerCase()).append(" ");
}
sb.append(req + ";\n");
});
sb.append("module ")
.append(mn)
.append(" {")
.append("\n");
Arrays.stream(deps)
.forEach(req -> {
sb.append(" requires ");
if (mod != null) {
sb.append(mod.toString().toLowerCase())
.append(" ");
}
sb.append(req)
.append(";\n");
});
sb.append("}\n");
builder.writeJavaFiles(mn, sb.toString());
compileModule(mn, srcDir);
}
private void compileModule(String moduleName, Path src) throws IOException {
Path msrc = src.resolve(moduleName);
assertTrue(CompilerUtils.compile(msrc, mods, "--module-source-path", src.toString()));
builder.compile(mn, mods);
}
private void jmodHashModules(String moduleName, String hashModulesPattern) {

View File

@ -25,9 +25,8 @@
* @test
* @bug 8168836
* @summary Basic argument validation for --add-exports
* @library /lib/testlibrary
* @library /lib/testlibrary /test/lib
* @modules jdk.compiler
* @build AddExportsTestWarningError CompilerUtils ModuleInfoMaker
* @build jdk.testlibrary.*
* @run testng AddExportsTestWarningError
*/
@ -40,6 +39,7 @@ import java.nio.file.Paths;
import java.util.Arrays;
import java.util.stream.Stream;
import jdk.test.lib.compiler.ModuleInfoMaker;
import jdk.testlibrary.OutputAnalyzer;
import static jdk.testlibrary.ProcessTools.*;
@ -48,7 +48,6 @@ import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
@Test
public class AddExportsTestWarningError {

View File

@ -25,9 +25,9 @@
* @test
* @bug 8168836
* @summary Basic argument validation for --add-reads
* @library /lib/testlibrary
* @library /lib/testlibrary /test/lib
* @modules jdk.compiler
* @build AddReadsTestWarningError CompilerUtils ModuleInfoMaker
* @build AddReadsTestWarningError
* @build jdk.testlibrary.*
* @run testng AddReadsTestWarningError
*/
@ -40,6 +40,7 @@ import java.nio.file.Paths;
import java.util.Arrays;
import java.util.stream.Stream;
import jdk.test.lib.compiler.ModuleInfoMaker;
import jdk.testlibrary.OutputAnalyzer;
import static jdk.testlibrary.ProcessTools.*;
@ -48,7 +49,6 @@ import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
@Test
public class AddReadsTestWarningError {

View File

@ -419,3 +419,6 @@ ef9180164e0847387519152d08bbcbcf9da0606d jdk-10+4
f260f1a2acf616509a4ee5a29bc7f2acca3853e3 jdk-9+167
bc21e5ba6bf1538551093f57fa0f1a6571be05cc jdk-9+168
0e522ff8b9f52a9d4929af9a6aa84110f4dcd81d jdk-9+169
18355c879c69a33167f1862896738a7b9a4da729 jdk-9+170
85581ae8a97f20fd2f817a71eb3cd7b04e492722 jdk-10+7
6d9a33d72d0647f3981c9d9c636a6f1290689895 jdk-10+8

View File

@ -25,10 +25,20 @@
include JarArchive.gmk
include JavaCompilation.gmk
include Modules.gmk
include SetupJavaCompilers.gmk
################################################################################
# This is needed to properly setup DOCS_MODULES.
$(eval $(call ReadImportMetaData))
# Modules that should be visible for 9 - the documented modules:
CT_MODULES := $(DOCS_MODULES)
# Get the complete module source path:
CT_MODULESOURCEPATH := $(call GetModuleSrcPath)
CT_DATA_DESCRIPTION ?= $(LANGTOOLS_TOPDIR)/make/data/symbols/symbols
$(eval $(call SetupJavaCompilation, COMPILE_CREATE_SYMBOLS, \
@ -41,6 +51,8 @@ $(eval $(call SetupJavaCompilation, COMPILE_CREATE_SYMBOLS, \
ifeq ($(BOOT_JDK_MODULAR), true)
COMPILECREATESYMBOLS_ADD_EXPORTS := \
--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \
--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
--add-exports=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED \
--add-exports=jdk.jdeps/com.sun.tools.classfile=ALL-UNNAMED
@ -59,6 +71,14 @@ $(SUPPORT_OUTPUTDIR)/symbols/ct.sym-files/_the.symbols: \
build-ctsym \
$(CT_DATA_DESCRIPTION) \
$(@D)
$(MKDIR) $(@D)/9
$(JAVA_SMALL) $(INTERIM_LANGTOOLS_ARGS) \
$(COMPILECREATESYMBOLS_ADD_EXPORTS) \
-classpath $(BUILDTOOLS_OUTPUTDIR)/create_symbols \
build.tools.symbolgenerator.TransitiveDependencies \
$(CT_MODULESOURCEPATH) \
$(CT_MODULES) \
>$(@D)/9/system-modules
$(TOUCH) $@
# Can't generate ct.sym directly into modules libs as the SetupJarArchive macro
@ -66,7 +86,7 @@ $(SUPPORT_OUTPUTDIR)/symbols/ct.sym-files/_the.symbols: \
$(eval $(call SetupJarArchive, CREATE_CTSYM, \
DEPENDENCIES := $(SUPPORT_OUTPUTDIR)/symbols/ct.sym-files/_the.symbols, \
SRCS := $(SUPPORT_OUTPUTDIR)/symbols/ct.sym-files, \
SUFFIXES := .sig, \
SUFFIXES := .sig system-modules, \
JAR := $(SUPPORT_OUTPUTDIR)/symbols/ct.sym, \
))

View File

@ -0,0 +1,103 @@
/*
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
* 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 build.tools.symbolgenerator;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import javax.lang.model.element.ModuleElement.RequiresDirective;
import javax.lang.model.util.Elements;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
import com.sun.tools.javac.api.JavacTaskImpl;
import com.sun.tools.javac.code.Symbol.ModuleSymbol;
/**
* Print reflexive transitive closure of the given modules along their requires transitive edges.
*/
public class TransitiveDependencies {
private static void help() {
System.err.println("java TransitiveDependencies <module-source-path> <root-modules>");
}
public static void main(String... args) throws IOException {
if (args.length < 1) {
help();
return ;
}
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
List<String> options = Arrays.asList("-source", "9",
"-target", "9",
"--system", "none",
"--module-source-path", args[0],
"--add-modules", Arrays.stream(args)
.skip(1)
.collect(Collectors.joining(",")));
List<String> jlObjectList = Arrays.asList("java.lang.Object");
JavacTaskImpl task = (JavacTaskImpl) compiler.getTask(null, null, d -> {}, options, jlObjectList, null);
task.enter();
Elements elements = task.getElements();
List<String> todo = new LinkedList<>();
Arrays.stream(args).skip(1).forEach(todo::add);
Set<String> allModules = new HashSet<>();
while (!todo.isEmpty()) {
String current = todo.remove(0);
if (!allModules.add(current))
continue;
ModuleSymbol mod = (ModuleSymbol) elements.getModuleElement(current);
if (mod == null) {
throw new IllegalStateException("Missing: " + current);
}
//use the internal structure to avoid unnecesarily completing the symbol using the UsesProvidesVisitor:
for (RequiresDirective rd : mod.requires) {
if (rd.isTransitive()) {
todo.add(rd.getDependency().getQualifiedName().toString());
}
}
}
allModules.add("java.base");
allModules.add("jdk.unsupported");
allModules.stream()
.sorted()
.forEach(System.out::println);
}
}

View File

@ -1889,10 +1889,13 @@ public class Infer {
Type i = n_i.data.first();
for (Node n_j : nodes) {
Type j = n_j.data.first();
UndetVar uv_i = (UndetVar)inferenceContext.asUndetVar(i);
if (Type.containsAny(uv_i.getBounds(InferenceBound.values()), List.of(j))) {
//update i's bound dependencies
n_i.addDependency(n_j);
// don't compare a variable to itself
if (i != j) {
UndetVar uv_i = (UndetVar)inferenceContext.asUndetVar(i);
if (Type.containsAny(uv_i.getBounds(InferenceBound.values()), List.of(j))) {
//update i's bound dependencies
n_i.addDependency(n_j);
}
}
}
}

View File

@ -142,6 +142,7 @@ public class Modules extends JCTree.Visitor {
private final ModuleFinder moduleFinder;
private final Source source;
private final boolean allowModules;
private final boolean allowAccessIntoSystem;
public final boolean multiModuleMode;
@ -192,6 +193,7 @@ public class Modules extends JCTree.Visitor {
allowModules = source.allowModules();
Options options = Options.instance(context);
allowAccessIntoSystem = options.isUnset(Option.RELEASE);
lintOptions = options.isUnset(Option.XLINT_CUSTOM, "-" + LintCategory.OPTIONS.option);
Collection<String> xmodules = options.keySet()
@ -1221,7 +1223,7 @@ public class Modules extends JCTree.Visitor {
for (String limit : extraLimitMods) {
limitMods.add(syms.enterModule(names.fromString(limit)));
}
observable = computeTransitiveClosure(limitMods, null);
observable = computeTransitiveClosure(limitMods, rootModules, null);
observable.addAll(rootModules);
if (lintOptions) {
for (ModuleSymbol msym : limitMods) {
@ -1301,7 +1303,7 @@ public class Modules extends JCTree.Visitor {
}
}
Set<ModuleSymbol> result = computeTransitiveClosure(enabledRoot, observable);
Set<ModuleSymbol> result = computeTransitiveClosure(enabledRoot, rootModules, observable);
result.add(syms.unnamedModule);
@ -1339,12 +1341,18 @@ public class Modules extends JCTree.Visitor {
return allModules == null || allModules.contains(msym);
}
private Set<ModuleSymbol> computeTransitiveClosure(Set<? extends ModuleSymbol> base, Set<ModuleSymbol> observable) {
private Set<ModuleSymbol> computeTransitiveClosure(Set<? extends ModuleSymbol> base,
Set<? extends ModuleSymbol> rootModules,
Set<ModuleSymbol> observable) {
List<ModuleSymbol> primaryTodo = List.nil();
List<ModuleSymbol> secondaryTodo = List.nil();
for (ModuleSymbol ms : base) {
primaryTodo = primaryTodo.prepend(ms);
if (rootModules.contains(ms)) {
primaryTodo = primaryTodo.prepend(ms);
} else {
secondaryTodo = secondaryTodo.prepend(ms);
}
}
Set<ModuleSymbol> result = new LinkedHashSet<>();
@ -1367,12 +1375,12 @@ public class Modules extends JCTree.Visitor {
if (!result.add(current) || current == syms.unnamedModule || ((current.flags_field & Flags.AUTOMATIC_MODULE) != 0))
continue;
current.complete();
if (current.kind == ERR && isPrimaryTodo && warnedMissing.add(current)) {
if (current.kind == ERR && (isPrimaryTodo || base.contains(current)) && warnedMissing.add(current)) {
log.error(Errors.ModuleNotFound(current));
}
for (RequiresDirective rd : current.requires) {
if (rd.module == syms.java_base) continue;
if ((rd.isTransitive() && isPrimaryTodo) || base.contains(current)) {
if ((rd.isTransitive() && isPrimaryTodo) || rootModules.contains(current)) {
primaryTodo = primaryTodo.prepend(rd.module);
} else {
secondaryTodo = secondaryTodo.prepend(rd.module);
@ -1479,6 +1487,10 @@ public class Modules extends JCTree.Visitor {
}
}
if (!allowAccessIntoSystem && (msym.flags() & Flags.SYSTEM_MODULE) != 0 &&
msym.patchLocation != null) {
log.error(Errors.PatchModuleWithRelease(msym));
}
}
private Set<ModuleSymbol> retrieveRequiresTransitive(ModuleSymbol msym) {
@ -1604,6 +1616,12 @@ public class Modules extends JCTree.Visitor {
if (!isValidName(packageName))
continue;
if (!allowAccessIntoSystem && (msym.flags() & Flags.SYSTEM_MODULE) != 0) {
log.error(Errors.AddExportsWithRelease(msym));
continue;
}
PackageSymbol p = syms.enterPackage(msym, names.fromString(packageName));
p.modle = msym; // TODO: do we need this?
@ -1679,6 +1697,11 @@ public class Modules extends JCTree.Visitor {
continue;
}
if (!allowAccessIntoSystem && (msym.flags() & Flags.SYSTEM_MODULE) != 0) {
log.error(Errors.AddReadsWithRelease(msym));
continue;
}
for (String targetName : targetNames.split("[ ,]+", -1)) {
ModuleSymbol targetModule;
if (targetName.equals("ALL-UNNAMED")) {

View File

@ -25,6 +25,7 @@
package com.sun.tools.javac.jvm;
import com.sun.tools.javac.tree.TreeInfo.PosKind;
import com.sun.tools.javac.util.*;
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
import com.sun.tools.javac.util.List;
@ -1399,12 +1400,16 @@ public class Gen extends JCTree.Visitor {
catchallpc, 0);
startseg = env.info.gaps.next().intValue();
}
code.statBegin(TreeInfo.finalizerPos(env.tree));
code.statBegin(TreeInfo.finalizerPos(env.tree, PosKind.FIRST_STAT_POS));
code.markStatBegin();
Item excVar = makeTemp(syms.throwableType);
excVar.store();
genFinalizer(env);
code.resolvePending();
code.statBegin(TreeInfo.finalizerPos(env.tree, PosKind.END_POS));
code.markStatBegin();
excVar.load();
registerCatch(body.pos(), startseg,
env.info.gaps.next().intValue(),
@ -1418,7 +1423,7 @@ public class Gen extends JCTree.Visitor {
code.resolve(env.info.cont);
// Mark statement line number
code.statBegin(TreeInfo.finalizerPos(env.tree));
code.statBegin(TreeInfo.finalizerPos(env.tree, PosKind.FIRST_STAT_POS));
code.markStatBegin();
// Save return address.

View File

@ -300,7 +300,8 @@ public class Arguments {
Option.XBOOTCLASSPATH_PREPEND,
Option.ENDORSEDDIRS, Option.DJAVA_ENDORSED_DIRS,
Option.EXTDIRS, Option.DJAVA_EXT_DIRS,
Option.SOURCE, Option.TARGET);
Option.SOURCE, Option.TARGET,
Option.SYSTEM, Option.UPGRADE_MODULE_PATH);
if (platformString != null) {
PlatformDescription platformDescription = PlatformUtils.lookupPlatformDescription(platformString);
@ -331,7 +332,12 @@ public class Arguments {
try {
StandardJavaFileManager sfm = (StandardJavaFileManager) fm;
sfm.setLocationFromPaths(StandardLocation.PLATFORM_CLASS_PATH, platformCP);
if (Source.instance(context).allowModules()) {
sfm.handleOption("--system", Arrays.asList("none").iterator());
sfm.setLocationFromPaths(StandardLocation.UPGRADE_MODULE_PATH, platformCP);
} else {
sfm.setLocationFromPaths(StandardLocation.PLATFORM_CLASS_PATH, platformCP);
}
} catch (IOException ex) {
log.printLines(PrefixKind.JAVAC, "msg.io");
ex.printStackTrace(log.getWriter(WriterKind.NOTICE));

View File

@ -26,6 +26,8 @@
package com.sun.tools.javac.platform;
import java.io.IOException;
import java.net.URI;
import java.nio.charset.Charset;
import java.nio.file.DirectoryStream;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
@ -41,6 +43,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Stream;
import javax.annotation.processing.Processor;
@ -63,7 +66,7 @@ public class JDKPlatformProvider implements PlatformProvider {
@Override
public PlatformDescription getPlatform(String platformName, String options) {
return new PlatformDescriptionImpl(platformName);
return new PlatformDescriptionImpl(platformName.equals("10") ? "9" : platformName);
}
private static final String[] symbolFileLocation = { "lib", "ct.sym" };
@ -90,9 +93,10 @@ public class JDKPlatformProvider implements PlatformProvider {
} catch (IOException | ProviderNotFoundException ex) {
}
}
// Workaround until full support for --release 9 distinct from --release 10
SUPPORTED_JAVA_PLATFORM_VERSIONS.add(targetNumericVersion(Target.JDK1_9));
SUPPORTED_JAVA_PLATFORM_VERSIONS.add(targetNumericVersion(Target.DEFAULT));
if (SUPPORTED_JAVA_PLATFORM_VERSIONS.contains("9")) {
SUPPORTED_JAVA_PLATFORM_VERSIONS.add("10");
}
}
private static String targetNumericVersion(Target target) {
@ -110,12 +114,6 @@ public class JDKPlatformProvider implements PlatformProvider {
@Override
public Collection<Path> getPlatformPath() {
// Comparison should be == Target.DEFAULT once --release 9
// is distinct from 10
if (Target.lookup(version).compareTo(Target.JDK1_9) >= 0) {
return null;
}
List<Path> paths = new ArrayList<>();
Path file = findCtSym();
// file == ${jdk.home}/lib/ct.sym
@ -132,7 +130,21 @@ public class JDKPlatformProvider implements PlatformProvider {
try (DirectoryStream<Path> dir = Files.newDirectoryStream(root)) {
for (Path section : dir) {
if (section.getFileName().toString().contains(version)) {
paths.add(section);
Path systemModules = section.resolve("system-modules");
if (Files.isRegularFile(systemModules)) {
Path modules =
FileSystems.getFileSystem(URI.create("jrt:/"))
.getPath("modules");
try (Stream<String> lines =
Files.lines(systemModules, Charset.forName("UTF-8"))) {
lines.map(line -> modules.resolve(line))
.filter(mod -> Files.exists(mod))
.forEach(mod -> paths.add(mod));
}
} else {
paths.add(section);
}
}
}
} catch (IOException ex) {

View File

@ -3027,6 +3027,18 @@ compiler.warn.module.for.option.not.found=\
compiler.err.addmods.all.module.path.invalid=\
--add-modules ALL-MODULE-PATH can only be used when compiling the unnamed module
# 0: symbol
compiler.err.add.exports.with.release=\
exporting a package from system module {0} is not allowed with --release
# 0: symbol
compiler.err.add.reads.with.release=\
adding read edges for system module {0} is not allowed with --release
# 0: symbol
compiler.err.patch.module.with.release=\
patching system module {0} is not allowed in combination with --release
compiler.warn.addopens.ignored=\
--add-opens has no effect at compile time

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -46,6 +46,8 @@ import static com.sun.tools.javac.tree.JCTree.Tag.SYNCHRONIZED;
import javax.tools.JavaFileObject;
import java.util.function.ToIntFunction;
import static com.sun.tools.javac.tree.JCTree.JCOperatorExpression.OperandPos.LEFT;
import static com.sun.tools.javac.tree.JCTree.JCOperatorExpression.OperandPos.RIGHT;
@ -580,13 +582,29 @@ public class TreeInfo {
};
}
public enum PosKind {
START_POS(TreeInfo::getStartPos),
FIRST_STAT_POS(TreeInfo::firstStatPos),
END_POS(TreeInfo::endPos);
final ToIntFunction<JCTree> posFunc;
PosKind(ToIntFunction<JCTree> posFunc) {
this.posFunc = posFunc;
}
int toPos(JCTree tree) {
return posFunc.applyAsInt(tree);
}
}
/** The position of the finalizer of given try/synchronized statement.
*/
public static int finalizerPos(JCTree tree) {
public static int finalizerPos(JCTree tree, PosKind posKind) {
if (tree.hasTag(TRY)) {
JCTry t = (JCTry) tree;
Assert.checkNonNull(t.finalizer);
return firstStatPos(t.finalizer);
return posKind.toPos(t.finalizer);
} else if (tree.hasTag(SYNCHRONIZED)) {
return endPos(((JCSynchronized) tree).body);
} else {

View File

@ -26,7 +26,7 @@
/**
<p style="font-style: italic; font-size:larger">
<b>Note:</b> The declarations in this package have been superseded by those
in the package {@code jdk.javadoc.doclet}.
in the package {@link jdk.javadoc.doclet}.
For more information, see the <i>Migration Guide</i> in the documentation for that package.
</p>

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -26,16 +26,8 @@
/**
<p style="font-style: italic; font-size:larger">
<b>Note:</b> The declarations in this package have been superseded by those
in the new package {@code jdk.javadoc.doclet}.
in the new package {@link jdk.javadoc.doclet}.
</p>
As of JDK version 1.5, replaced by
{@code com.sun.tools.doclets.internal.toolkit.util}.
<p><b>This is NOT part of any supported API.
If you write code that depends on this, you do so at your own risk.
This code and its internal interfaces are subject to change or
deletion without notice.</b>
*/
package com.sun.tools.doclets;

View File

@ -0,0 +1,33 @@
/*
* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* 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.
*/
/**
<p style="font-style: italic; font-size:larger">
<b>Note:</b> The declarations in this package have been superseded by those
in the new package {@link jdk.javadoc.doclet}.
</p>
*/
package com.sun.tools.doclets.standard;

View File

@ -25,6 +25,7 @@
package jdk.javadoc.internal.doclets.formats.html;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
@ -101,7 +102,7 @@ public abstract class AbstractModuleIndexWriter extends HtmlDocletWriter {
* @param tableSummary summary for the table
* @param body the document tree to which the modules list will be added
*/
protected abstract void addModulesList(Map<ModuleElement, Set<PackageElement>> modules, String text,
protected abstract void addModulesList(Collection<ModuleElement> modules, String text,
String tableSummary, Content body);
/**
@ -173,7 +174,7 @@ public abstract class AbstractModuleIndexWriter extends HtmlDocletWriter {
* @param body the document tree to which the index will be added
*/
protected void addIndex(Content body) {
addIndexContents(modules, "doclet.Module_Summary",
addIndexContents(configuration.modules, "doclet.Module_Summary",
configuration.getText("doclet.Member_Table_Summary",
configuration.getText("doclet.Module_Summary"),
configuration.getText("doclet.modules")), body);
@ -201,7 +202,7 @@ public abstract class AbstractModuleIndexWriter extends HtmlDocletWriter {
* @param tableSummary summary for the table
* @param body the document tree to which the index contents will be added
*/
protected void addIndexContents(Map<ModuleElement, Set<PackageElement>> modules, String text,
protected void addIndexContents(Collection<ModuleElement> modules, String text,
String tableSummary, Content body) {
HtmlTree htmlTree = (configuration.allowTag(HtmlTag.NAV))
? HtmlTree.NAV()

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -25,6 +25,7 @@
package jdk.javadoc.internal.doclets.formats.html;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
@ -81,7 +82,7 @@ public class ModuleIndexFrameWriter extends AbstractModuleIndexWriter {
/**
* {@inheritDoc}
*/
protected void addModulesList(Map<ModuleElement, Set<PackageElement>> modules, String text,
protected void addModulesList(Collection<ModuleElement> modules, String text,
String tableSummary, Content body) {
Content heading = HtmlTree.HEADING(HtmlConstants.MODULE_HEADING, true,
contents.modulesLabel);
@ -90,7 +91,7 @@ public class ModuleIndexFrameWriter extends AbstractModuleIndexWriter {
: HtmlTree.DIV(HtmlStyle.indexContainer, heading);
HtmlTree ul = new HtmlTree(HtmlTag.UL);
ul.setTitle(contents.modulesLabel);
for (ModuleElement mdle: modules.keySet()) {
for (ModuleElement mdle: modules) {
ul.addContent(getModuleLink(mdle));
}
htmlTree.addContent(ul);

View File

@ -30,7 +30,7 @@ import java.util.*;
import javax.lang.model.element.ModuleElement;
import javax.lang.model.element.PackageElement;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlConstants;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -56,11 +56,16 @@ import jdk.javadoc.internal.doclets.toolkit.util.Group;
public class ModuleIndexWriter extends AbstractModuleIndexWriter {
/**
* Set representing the modules.
* Map representing the group of modules as specified on the command line.
*
* @see Group
*/
private final SortedSet<ModuleElement> modules;
private final Map<String, SortedSet<ModuleElement>> groupModuleMap;
/**
* List to store the order groups as specified on the command line.
*/
private final List<String> groupList;
/**
* HTML tree for main tag.
@ -74,7 +79,8 @@ public class ModuleIndexWriter extends AbstractModuleIndexWriter {
*/
public ModuleIndexWriter(ConfigurationImpl configuration, DocPath filename) {
super(configuration, filename);
modules = configuration.modules;
groupModuleMap = configuration.group.groupModules(configuration.modules);
groupList = configuration.group.getGroupList();
}
/**
@ -96,11 +102,13 @@ public class ModuleIndexWriter extends AbstractModuleIndexWriter {
*/
@Override
protected void addIndex(Content body) {
if (modules != null && !modules.isEmpty()) {
addIndexContents(configuration.getText("doclet.Modules"),
configuration.getText("doclet.Member_Table_Summary",
configuration.getText("doclet.Module_Summary"),
configuration.getText("doclet.modules")), body);
for (String groupname : groupList) {
SortedSet<ModuleElement> list = groupModuleMap.get(groupname);
if (list != null && !list.isEmpty()) {
addIndexContents(list,
groupname, configuration.getText("doclet.Member_Table_Summary",
groupname, configuration.getText("doclet.modules")), body);
}
}
}
@ -111,7 +119,7 @@ public class ModuleIndexWriter extends AbstractModuleIndexWriter {
* @param tableSummary summary for the table
* @param body the document tree to which the index contents will be added
*/
protected void addIndexContents(String title, String tableSummary, Content body) {
protected void addIndexContents(Collection<ModuleElement> modules, String title, String tableSummary, Content body) {
HtmlTree htmltree = (configuration.allowTag(HtmlTag.NAV))
? HtmlTree.NAV()
: new HtmlTree(HtmlTag.DIV);
@ -123,7 +131,7 @@ public class ModuleIndexWriter extends AbstractModuleIndexWriter {
}
htmltree.addContent(ul);
body.addContent(htmltree);
addModulesList(title, tableSummary, body);
addModulesList(modules, title, tableSummary, body);
}
/**
@ -133,15 +141,17 @@ public class ModuleIndexWriter extends AbstractModuleIndexWriter {
* @param tableSummary the summary of the table tag
* @param body the content tree to which the module list will be added
*/
protected void addModulesList(String text, String tableSummary, Content body) {
protected void addModulesList(Collection<ModuleElement> modules, String text, String tableSummary, Content body) {
Content table = (configuration.isOutputHtml5())
? HtmlTree.TABLE(HtmlStyle.overviewSummary, getTableCaption(new RawHtml(text)))
: HtmlTree.TABLE(HtmlStyle.overviewSummary, tableSummary, getTableCaption(new RawHtml(text)));
table.addContent(getSummaryTableHeader(moduleTableHeader, "col"));
Content tbody = new HtmlTree(HtmlTag.TBODY);
addModulesList(tbody);
addModulesList(modules, tbody);
table.addContent(tbody);
Content div = HtmlTree.DIV(HtmlStyle.contentContainer, table);
Content anchor = getMarkerAnchor(text);
Content div = HtmlTree.DIV(HtmlStyle.contentContainer, anchor);
div.addContent(table);
if (configuration.allowTag(HtmlTag.MAIN)) {
htmlTree.addContent(div);
} else {
@ -154,7 +164,7 @@ public class ModuleIndexWriter extends AbstractModuleIndexWriter {
*
* @param tbody the documentation tree to which the list will be added
*/
protected void addModulesList(Content tbody) {
protected void addModulesList(Collection<ModuleElement> modules, Content tbody) {
boolean altColor = true;
for (ModuleElement mdle : modules) {
if (!mdle.isUnnamed()) {
@ -260,9 +270,4 @@ public class ModuleIndexWriter extends AbstractModuleIndexWriter {
protected void addModulePackagesList(Map<ModuleElement, Set<PackageElement>> modules, String text,
String tableSummary, Content body, ModuleElement mdle) {
}
@Override
protected void addModulesList(Map<ModuleElement, Set<PackageElement>> modules, String text,
String tableSummary, Content body) {
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -26,6 +26,7 @@
package jdk.javadoc.internal.doclets.formats.html;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -175,7 +176,7 @@ public class ModulePackageIndexFrameWriter extends AbstractModuleIndexWriter {
protected void addOverviewHeader(Content body) {
}
protected void addModulesList(Map<ModuleElement, Set<PackageElement>> modules, String text,
protected void addModulesList(Collection<ModuleElement> modules, String text,
String tableSummary, Content body) {
}

View File

@ -29,11 +29,12 @@ import java.util.*;
import javax.lang.model.element.PackageElement;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlConstants;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException;
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
@ -112,8 +113,8 @@ public class PackageIndexWriter extends AbstractPackageIndexWriter {
SortedSet<PackageElement> list = groupPackageMap.get(groupname);
if (list != null && !list.isEmpty()) {
addIndexContents(list,
groupname, configuration.getText("doclet.Member_Table_Summary",
groupname, configuration.getText("doclet.packages")), body);
groupname, configuration.getText("doclet.Member_Table_Summary",
groupname, configuration.getText("doclet.packages")), body);
}
}
}
@ -131,7 +132,9 @@ public class PackageIndexWriter extends AbstractPackageIndexWriter {
Content tbody = new HtmlTree(HtmlTag.TBODY);
addPackagesList(packages, tbody);
table.addContent(tbody);
Content div = HtmlTree.DIV(HtmlStyle.contentContainer, table);
Content anchor = getMarkerAnchor(text);
Content div = HtmlTree.DIV(HtmlStyle.contentContainer, anchor);
div.addContent(table);
if (configuration.allowTag(HtmlTag.MAIN)) {
htmlTree.addContent(div);
} else {

View File

@ -192,9 +192,9 @@ doclet.ClassUse_No.usage.of.0=No usage of {0}
doclet.Window_ClassUse_Header=Uses of {0} {1}
doclet.ClassUse_Title=Uses of {0}
doclet.navClassUse=Use
doclet.Error_in_packagelist=Error in using -group option: {0} {1}
doclet.Groupname_already_used=In -group option, groupname already used: {0}
doclet.Same_package_name_used=Package name format used twice: {0}
doclet.Error_in_grouplist=Bad -group option: {0} {1}
doclet.Groupname_already_used=In -group option, group name already used: {0}
doclet.Same_element_name_used=Element name or pattern used twice: {0}
# option specifiers
doclet.usage.d.parameters=\
@ -274,9 +274,9 @@ doclet.usage.excludedocfilessubdir.description=\
Exclude any doc-files subdirectories with given name
doclet.usage.group.parameters=\
<name> <p1>:<p2>..
<name> <g1>:<g2>...
doclet.usage.group.description=\
Group specified packages together in overview page
Group specified elements together in overview page
doclet.usage.nocomment.description=\
Suppress description and tags, generate only declarations

View File

@ -699,7 +699,11 @@ public abstract class Configuration {
typeElementCatalog = new TypeElementCatalog(includedTypeElements, this);
initTagletManager(customTagStrs);
groups.stream().forEach((grp) -> {
group.checkPackageGroups(grp.value1, grp.value2);
if (showModules) {
group.checkModuleGroups(grp.value1, grp.value2);
} else {
group.checkPackageGroups(grp.value1, grp.value2);
}
});
}

View File

@ -49,6 +49,7 @@ Use --allow-script-in-comments to allow use of JavaScript.
doclet.Packages=Packages
doclet.Modules=Modules
doclet.Other_Packages=Other Packages
doclet.Other_Modules=Other Modules
doclet.Notice_taglet_registered=Registered Taglet {0} ...
doclet.Notice_taglet_unseen=Note: Custom tags that were not seen: {0}
doclet.Notice_taglet_overriden=Note: Custom tags that override standard tags: {0}

Some files were not shown because too many files have changed in this diff Show More