mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2026-01-04 15:41:38 +01:00
Compare commits
64 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6881cec2c5 | ||
|
|
54494e8c1e | ||
|
|
947381ff17 | ||
|
|
1c26f0f07d | ||
|
|
1b0985ab0a | ||
|
|
a71005b9b8 | ||
|
|
f8cf42bc0f | ||
|
|
463597e361 | ||
|
|
5fd9eb1243 | ||
|
|
82e324dd76 | ||
|
|
25de7b5964 | ||
|
|
568f78d9da | ||
|
|
a39f9a23fb | ||
|
|
87b82757e4 | ||
|
|
8634511ef1 | ||
|
|
5e6c5e0820 | ||
|
|
01b9cd57c9 | ||
|
|
32cdd4768c | ||
|
|
aeb219793c | ||
|
|
13e095af52 | ||
|
|
daca6bd33c | ||
|
|
b3da5c25ea | ||
|
|
15bcc88115 | ||
|
|
e8a6426ff3 | ||
|
|
0a108f9ef2 | ||
|
|
e33ebc7f0a | ||
|
|
c1cd3893bd | ||
|
|
0be5b7d66e | ||
|
|
23e2f27996 | ||
|
|
38f9a938e5 | ||
|
|
ab57f7d628 | ||
|
|
08df6a1f15 | ||
|
|
3341d36131 | ||
|
|
3752a81ec8 | ||
|
|
76879aa9c6 | ||
|
|
0f7b18a9c8 | ||
|
|
c82c50b2a2 | ||
|
|
af83d6ab25 | ||
|
|
1faed205df | ||
|
|
bac2e7fcad | ||
|
|
8c90f4c0a7 | ||
|
|
892d998587 | ||
|
|
be278bc564 | ||
|
|
1a681a434f | ||
|
|
0e4829ef0a | ||
|
|
c06fe155ef | ||
|
|
ac4603144d | ||
|
|
1b64fb2063 | ||
|
|
24f040da36 | ||
|
|
1b75b7de80 | ||
|
|
08304ada3c | ||
|
|
494f9667b4 | ||
|
|
2f5d4c633b | ||
|
|
b81f2f1f48 | ||
|
|
6341f8c077 | ||
|
|
319b4e71e1 | ||
|
|
a5b5712733 | ||
|
|
15999a9f21 | ||
|
|
6dec50a7e8 | ||
|
|
65455ff60b | ||
|
|
bb86779366 | ||
|
|
4862a00f6b | ||
|
|
9ac1ab372d | ||
|
|
7da56dfbf3 |
12
.hgtags
12
.hgtags
@@ -640,15 +640,3 @@ f143729ca00ec14a98ea5c7f73acba88da97746e jdk-15+23
|
||||
93813843680bbe1b7efbca56c03fd137f20a2c31 jdk-16+0
|
||||
93813843680bbe1b7efbca56c03fd137f20a2c31 jdk-15+27
|
||||
4a485c89d5a08b495961835f5308a96038678aeb jdk-16+1
|
||||
06c9f89459daba98395fad726100feb44f89ba71 jdk-15+28
|
||||
bcbe7b8a77b8971bc221c0be1bd2abb6fb68c2d0 jdk-16+2
|
||||
b58fc60580550a4a587cab729d8fd87223ad6932 jdk-15+29
|
||||
76810b3a88c8c641ae3850a8dfd7c40c984aea9d jdk-16+3
|
||||
6909e4a1f25bfe9a2727026f5845fc1fc44a36aa jdk-15+30
|
||||
e2622818f0bd30e736252eba101fe7d2c27f400b jdk-16+4
|
||||
a32f58c6b8be81877411767de7ba9c4cf087c1b5 jdk-15+31
|
||||
143e258f64af490010eb7e0bacc1cfaeceff0993 jdk-16+5
|
||||
2dad000726b8d5db9f3df647fb4949d88f269dd4 jdk-15+32
|
||||
4a8fd81d64bafa523cddb45f82805536edace106 jdk-16+6
|
||||
6b65f4e7a975628df51ef755b02642075390041d jdk-15+33
|
||||
c3a4a7ea7c304cabdacdc31741eb94c51351668d jdk-16+7
|
||||
|
||||
@@ -1,24 +1,37 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
tier1 = .
|
||||
fix() {
|
||||
#convert tabs to spaces
|
||||
find . -name $1 -exec sed -i "" 's/ / /g' {} \;
|
||||
#remove trailing whitespace
|
||||
find . -name $1 -exec sed -i "" 's/[ ]*$//' \{} \;
|
||||
}
|
||||
|
||||
if [ ! -z $1 ]; then
|
||||
fix $1;
|
||||
else
|
||||
fix "*.java"
|
||||
fix "*.js"
|
||||
fi
|
||||
135
bin/nashorn/runopt.sh
Normal file
135
bin/nashorn/runopt.sh
Normal file
@@ -0,0 +1,135 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
###########################################################################################
|
||||
# This is a helper script to evaluate nashorn with optimistic types
|
||||
# it produces a flight recording for every run, and uses the best
|
||||
# known flags for performance for the current configration
|
||||
###########################################################################################
|
||||
|
||||
# Flags to enable assertions, we need the system assertions too, since
|
||||
# this script runs Nashorn in the BCP to override any nashorn.jar that might
|
||||
# reside in your $JAVA_HOME/jre/lib/ext/nashorn.jar
|
||||
#
|
||||
ENABLE_ASSERTIONS_FLAGS="-ea -esa"
|
||||
|
||||
# Flags to instrument lambdaform computation, caching, interpretation and compilation
|
||||
# Default compile threshold for lambdaforms is 30
|
||||
#
|
||||
#LAMBDAFORM_FLAGS="\
|
||||
# -Djava.lang.invoke.MethodHandle.COMPILE_THRESHOLD=3 \
|
||||
# -Djava.lang.invoke.MethodHandle.DUMP_CLASS_FILES=true \
|
||||
# -Djava.lang.invoke.MethodHandle.TRACE_METHOD_LINKAGE=true \
|
||||
# -Djava.lang.invoke.MethodHandle.TRACE_INTERPRETER=true"
|
||||
|
||||
# Flags to run trusted tests from the Nashorn test suite
|
||||
#
|
||||
#TRUSTED_TEST_FLAGS="\
|
||||
#-Djava.security.manager \
|
||||
#-Djava.security.policy=../build/nashorn.policy -Dnashorn.debug"
|
||||
|
||||
# Testing out new code optimizations using the generic hotspot "new code" parameter
|
||||
#
|
||||
#USE_NEW_CODE_FLAGS=-XX:+UnlockDiagnosticVMOptions -XX:+UseNewCode
|
||||
|
||||
#
|
||||
#-Dnashorn.typeInfo.disabled=false \
|
||||
# and for Nashorn options:
|
||||
# --class-cache-size=0 --persistent-code-cache=false
|
||||
|
||||
# Unique timestamped file name for JFR recordings. For JFR, we also have to
|
||||
# crank up the stack cutoff depth to 1024, because of ridiculously long lambda form
|
||||
# stack traces.
|
||||
#
|
||||
# It is also recommended that you go into $JAVA_HOME/jre/lib/jfr/default.jfc and
|
||||
# set the "method-sampling-interval" Normal and Maximum sample time as low as you
|
||||
# can go (10 ms on most platforms). The default is normally higher. The increased
|
||||
# sampling overhead is usually negligible for Nashorn runs, but the data is better
|
||||
|
||||
if [ -z $JFR_FILENAME ]; then
|
||||
JFR_FILENAME="./nashorn_$(date|sed "s/ /_/g"|sed "s/:/_/g").jfr"
|
||||
fi
|
||||
|
||||
# Flight recorder
|
||||
#
|
||||
# see above - already in place, copy the flags down here to disable
|
||||
ENABLE_FLIGHT_RECORDER_FLAGS="\
|
||||
-XX:+FlightRecorder \
|
||||
-XX:FlightRecorderOptions=defaultrecording=true,disk=true,dumponexit=true,dumponexitpath=$JFR_FILENAME,stackdepth=1024"
|
||||
|
||||
# Type specialization and math intrinsic replacement should be enabled by default in 8u20 and nine,
|
||||
# keeping this flag around for experimental reasons. Replace + with - to switch it off
|
||||
#
|
||||
#ENABLE_TYPE_SPECIALIZATION_FLAGS=-XX:+UseTypeSpeculation
|
||||
|
||||
# Same with math intrinsics. They should be enabled by default in 8u20 and 9, so
|
||||
# this disables them if needed
|
||||
#
|
||||
#DISABLE_MATH_INTRINSICS_FLAGS=-XX:-UseMathExactIntrinsics
|
||||
|
||||
# Add timing to time the compilation phases.
|
||||
#ENABLE_TIME_FLAGS=--log=time
|
||||
|
||||
# Add ShowHiddenFrames to get lambda form internals on the stack traces
|
||||
#ENABLE_SHOW_HIDDEN_FRAMES_FLAGS=-XX:+ShowHiddenFrames
|
||||
|
||||
# Add print optoassembly to get an asm dump. This requires 1) a debug build, not product,
|
||||
# That tired compilation is switched off, for C2 only output and that the number of
|
||||
# compiler threads is set to 1 for determinsm.
|
||||
#
|
||||
#PRINT_ASM_FLAGS=-XX:+PrintOptoAssembly -XX:-TieredCompilation -XX:CICompilerCount=1 \
|
||||
|
||||
# Tier compile threasholds. Default value is 10. (1-100 is useful for experiments)
|
||||
#TIER_COMPILATION_THRESHOLD_FLAGS=-XX:IncreaseFirstTierCompileThresholdAt=10
|
||||
|
||||
# Directory where to look for nashorn.jar in a dist folder. The default is "..", assuming
|
||||
# that we run the script from the make dir
|
||||
DIR=..
|
||||
NASHORN_JAR=$DIR/dist/nashorn.jar
|
||||
|
||||
|
||||
# The built Nashorn jar is placed first in the bootclasspath to override the JDK
|
||||
# nashorn.jar in $JAVA_HOME/jre/lib/ext. Thus, we also need -esa, as assertions in
|
||||
# nashorn count as system assertions in this configuration
|
||||
|
||||
# Type profiling default level is 111, 222 adds some compile time, but is faster
|
||||
|
||||
$JAVA_HOME/bin/java \
|
||||
$ENABLE_ASSERTIONS_FLAGS \
|
||||
$LAMBDAFORM_FLAGS \
|
||||
$TRUSTED_FLAGS \
|
||||
$USE_NEW_CODE_FLAGS \
|
||||
$ENABLE_SHOW_HIDDEN_FRAMES_FLAGS \
|
||||
$ENABLE_FLIGHT_RECORDER_FLAGS \
|
||||
$ENABLE_TYPE_SPECIALIZATION_FLAGS \
|
||||
$TIERED_COMPILATION_THRESOLD_FLAGS \
|
||||
$DISABLE_MATH_INTRINSICS_FLAGS \
|
||||
$PRINT_ASM_FLAGS \
|
||||
-Xbootclasspath/p:$NASHORN_JAR \
|
||||
-Xms2G -Xmx2G \
|
||||
-XX:TypeProfileLevel=222 \
|
||||
-cp $CLASSPATH:../build/test/classes/ \
|
||||
jdk.nashorn.tools.Shell $ENABLE_TIME_FLAGS ${@}
|
||||
|
||||
|
||||
@@ -283,7 +283,7 @@
|
||||
<p>The JDK is currently known to be able to compile with at least version 9.2 of gcc.</p>
|
||||
<p>In general, any version between these two should be usable.</p>
|
||||
<h3 id="clang">clang</h3>
|
||||
<p>The minimum accepted version of clang is 3.5. Older versions will not be accepted by <code>configure</code>.</p>
|
||||
<p>The minimum accepted version of clang is 3.2. Older versions will not be accepted by <code>configure</code>.</p>
|
||||
<p>To use clang instead of gcc on Linux, use <code>--with-toolchain-type=clang</code>.</p>
|
||||
<h3 id="apple-xcode">Apple Xcode</h3>
|
||||
<p>The oldest supported version of Xcode is 8.</p>
|
||||
@@ -292,8 +292,9 @@
|
||||
<p>It is advisable to keep an older version of Xcode for building the JDK when updating Xcode. This <a href="http://iosdevelopertips.com/xcode/install-multiple-versions-of-xcode.html">blog page</a> has good suggestions on managing multiple Xcode versions. To use a specific version of Xcode, use <code>xcode-select -s</code> before running <code>configure</code>, or use <code>--with-toolchain-path</code> to point to the version of Xcode to use, e.g. <code>configure --with-toolchain-path=/Applications/Xcode8.app/Contents/Developer/usr/bin</code></p>
|
||||
<p>If you have recently (inadvertently) updated your OS and/or Xcode version, and the JDK can no longer be built, please see the section on <a href="#problems-with-the-build-environment">Problems with the Build Environment</a>, and <a href="#getting-help">Getting Help</a> to find out if there are any recent, non-merged patches available for this update.</p>
|
||||
<h3 id="microsoft-visual-studio">Microsoft Visual Studio</h3>
|
||||
<p>The minimum accepted version of Visual Studio is 2017. Older versions will not be accepted by <code>configure</code> and will not work. The maximum accepted version of Visual Studio is 2019.</p>
|
||||
<p>If you have multiple versions of Visual Studio installed, <code>configure</code> will by default pick the latest. You can request a specific version to be used by setting <code>--with-toolchain-version</code>, e.g. <code>--with-toolchain-version=2017</code>.</p>
|
||||
<p>The minimum accepted version of Visual Studio is 2010. Older versions will not be accepted by <code>configure</code>. The maximum accepted version of Visual Studio is 2019. Versions older than 2017 are unlikely to continue working for long.</p>
|
||||
<p>If you have multiple versions of Visual Studio installed, <code>configure</code> will by default pick the latest. You can request a specific version to be used by setting <code>--with-toolchain-version</code>, e.g. <code>--with-toolchain-version=2015</code>.</p>
|
||||
<p>If you get <code>LINK: fatal error LNK1123: failure during conversion to COFF: file invalid</code> when building using Visual Studio 2010, you have encountered <a href="http://support.microsoft.com/kb/2757355">KB2757355</a>, a bug triggered by a specific installation order. However, the solution suggested by the KB article does not always resolve the problem. See <a href="https://stackoverflow.com/questions/10888391">this stackoverflow discussion</a> for other suggestions.</p>
|
||||
<h3 id="ibm-xl-cc">IBM XL C/C++</h3>
|
||||
<p>Please consult the AIX section of the <a href="https://wiki.openjdk.java.net/display/Build/Supported+Build+Platforms">Supported Build Platforms</a> OpenJDK Build Wiki page for details about which versions of XLC are supported.</p>
|
||||
<h2 id="boot-jdk-requirements">Boot JDK Requirements</h2>
|
||||
|
||||
@@ -323,7 +323,7 @@ In general, any version between these two should be usable.
|
||||
|
||||
### clang
|
||||
|
||||
The minimum accepted version of clang is 3.5. Older versions will not be
|
||||
The minimum accepted version of clang is 3.2. Older versions will not be
|
||||
accepted by `configure`.
|
||||
|
||||
To use clang instead of gcc on Linux, use `--with-toolchain-type=clang`.
|
||||
@@ -355,13 +355,20 @@ available for this update.
|
||||
|
||||
### Microsoft Visual Studio
|
||||
|
||||
The minimum accepted version of Visual Studio is 2017. Older versions will not
|
||||
be accepted by `configure` and will not work. The maximum accepted
|
||||
version of Visual Studio is 2019.
|
||||
The minimum accepted version of Visual Studio is 2010. Older versions will not
|
||||
be accepted by `configure`. The maximum accepted version of Visual Studio is
|
||||
2019. Versions older than 2017 are unlikely to continue working for long.
|
||||
|
||||
If you have multiple versions of Visual Studio installed, `configure` will by
|
||||
default pick the latest. You can request a specific version to be used by
|
||||
setting `--with-toolchain-version`, e.g. `--with-toolchain-version=2017`.
|
||||
setting `--with-toolchain-version`, e.g. `--with-toolchain-version=2015`.
|
||||
|
||||
If you get `LINK: fatal error LNK1123: failure during conversion to COFF: file
|
||||
invalid` when building using Visual Studio 2010, you have encountered
|
||||
[KB2757355](http://support.microsoft.com/kb/2757355), a bug triggered by a
|
||||
specific installation order. However, the solution suggested by the KB article
|
||||
does not always resolve the problem. See [this stackoverflow discussion](
|
||||
https://stackoverflow.com/questions/10888391) for other suggestions.
|
||||
|
||||
### IBM XL C/C++
|
||||
|
||||
|
||||
631
doc/nashorn/DEVELOPER_README
Normal file
631
doc/nashorn/DEVELOPER_README
Normal file
@@ -0,0 +1,631 @@
|
||||
This document describes system properties that are used for internal
|
||||
debugging and instrumentation purposes, along with the system loggers,
|
||||
which are used for the same thing.
|
||||
|
||||
This document is intended as a developer resource, and it is not
|
||||
needed as Nashorn documentation for normal usage. Flags and system
|
||||
properties described herein are subject to change without notice.
|
||||
|
||||
=====================================
|
||||
1. System properties used internally
|
||||
=====================================
|
||||
|
||||
This documentation of the system property flags assume that the
|
||||
default value of the flag is false, unless otherwise specified.
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.args=<string>
|
||||
|
||||
This property takes as its value a space separated list of Nashorn
|
||||
command line options that should be passed to Nashorn. This might be
|
||||
useful in environments where it is hard to tell how a nashorn.jar is
|
||||
launched.
|
||||
|
||||
Example:
|
||||
|
||||
> java -Dnashorn.args="--lazy-complation --log=compiler" large-java-app-with-nashorn.jar
|
||||
> ant -Dnashorn.args="--log=codegen" antjob
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.args.prepend=<string>
|
||||
|
||||
This property behaves like nashorn.args, but adds the given arguments
|
||||
before the existing ones instead of after them. Later arguments will
|
||||
overwrite earlier ones, so this is useful for setting default arguments
|
||||
that can be overwritten.
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.unstable.relink.threshold=x
|
||||
|
||||
NOTE: This property is deprecated in favor of the
|
||||
"--unstable-relink-threshold" command line option. It controls how many
|
||||
call site misses are allowed before a callsite is relinked with "apply"
|
||||
semantics to never change again. In the case of megamorphic callsites,
|
||||
this is necessary, or the program would spend all its time swapping out
|
||||
callsite targets. When neither the system property nor the command line
|
||||
option are specified, defaults to 8, or 16 with optimistic types turned
|
||||
on.
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.compiler.splitter.threshold=x
|
||||
|
||||
This will change the node weight that requires a subgraph of the IR to
|
||||
be split into several classes in order not to run out of bytecode space.
|
||||
The default value is 0x8000 (32768).
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.serialize.compression=<x>
|
||||
|
||||
This property sets the compression level used when deflating serialized
|
||||
AST structures of anonymous split functions. Valid values range from 0 to 9,
|
||||
the default value is 4. Higher values will reduce memory size of serialized
|
||||
AST but increase CPU usage required for compression.
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.codegen.debug.trace=<x>
|
||||
|
||||
See the description of the codegen logger below.
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.fields.objects, -Dnashorn.fields.dual
|
||||
|
||||
When the nashorn.fields.objects property is true, Nashorn will always
|
||||
use object fields for AccessorProperties, requiring boxing for all
|
||||
primitive property values. When nashorn.fields.dual is set, Nashorn
|
||||
will always use dual long/object fields, which allows primitives to be
|
||||
stored without boxing. When neither system property is set, Nashorn
|
||||
chooses a setting depending on the optimistic types setting (dual
|
||||
fields when optimistic types are enabled, object-only fields otherwise).
|
||||
|
||||
With dual fields, Nashorn uses long fields to store primitive values.
|
||||
Ints are represented as the 32 low bits of the long fields. Doubles
|
||||
are represented as the doubleToLongBits of their value. This way a
|
||||
single field can be used for all primitive types. Packing and
|
||||
unpacking doubles to their bit representation is intrinsified by
|
||||
the JVM and extremely fast.
|
||||
|
||||
In the future, this might complement or be replaced by experimental
|
||||
feature sun.misc.TaggedArray, which has been discussed on the mlvm
|
||||
mailing list. TaggedArrays are basically a way to share data space
|
||||
between primitives and references, and have the GC understand this.
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.compiler.symbol.trace=[<x>[,*]],
|
||||
-Dnashorn.compiler.symbol.stacktrace=[<x>[,*]]
|
||||
|
||||
When this property is set, creation and manipulation of any symbol
|
||||
named "x" will show information about when the compiler changes its
|
||||
type assumption, bytecode local variable slot assignment and other
|
||||
data. This is useful if, for example, a symbol shows up as an Object,
|
||||
when you believe it should be a primitive. Usually there is an
|
||||
explanation for this, for example that it exists in the global scope
|
||||
and type analysis has to be more conservative.
|
||||
|
||||
Several symbols names to watch can be specified by comma separation.
|
||||
|
||||
If no variable name is specified (and no equals sign), all symbols
|
||||
will be watched
|
||||
|
||||
By using "stacktrace" instead of or together with "trace", stack
|
||||
traces will be displayed upon symbol changes according to the same
|
||||
semantics.
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.lexer.xmlliterals
|
||||
|
||||
If this property it set, it means that the Lexer should attempt to
|
||||
parse XML literals, which would otherwise generate syntax
|
||||
errors. Warning: there are currently no unit tests for this
|
||||
functionality.
|
||||
|
||||
XML literals, when this is enabled, end up as standard LiteralNodes in
|
||||
the IR.
|
||||
|
||||
|
||||
SYSTEM_PROPERTY: -Dnashorn.debug
|
||||
|
||||
If this property is set to true, Nashorn runs in Debug mode. Debug
|
||||
mode is slightly slower, as for example statistics counters are enabled
|
||||
during the run. Debug mode makes available a NativeDebug instance
|
||||
called "Debug" in the global space that can be used to print property
|
||||
maps and layout for script objects, as well as a "dumpCounters" method
|
||||
that will print the current values of the previously mentioned stats
|
||||
counters.
|
||||
|
||||
These functions currently exists for Debug:
|
||||
|
||||
"map" - print(Debug.map(x)) will dump the PropertyMap for object x to
|
||||
stdout (currently there also exist functions called "embedX", where X
|
||||
is a value from 0 to 3, that will dump the contents of the embed pool
|
||||
for the first spill properties in any script object and "spill", that
|
||||
will dump the contents of the growing spill pool of spill properties
|
||||
in any script object. This is of course subject to change without
|
||||
notice, should we change the script object layout.
|
||||
|
||||
"methodHandle" - this method returns the method handle that is used
|
||||
for invoking a particular script function.
|
||||
|
||||
"identical" - this method compares two script objects for reference
|
||||
equality. It is a == Java comparison
|
||||
|
||||
"equals" - Returns true if two objects are either referentially
|
||||
identical or equal as defined by java.lang.Object.equals.
|
||||
|
||||
"dumpCounters" - will dump the debug counters' current values to
|
||||
stdout.
|
||||
|
||||
Currently we count number of ScriptObjects in the system, number of
|
||||
Scope objects in the system, number of ScriptObject listeners added,
|
||||
removed and dead (without references).
|
||||
|
||||
We also count number of ScriptFunctions, ScriptFunction invocations
|
||||
and ScriptFunction allocations.
|
||||
|
||||
Furthermore we count PropertyMap statistics: how many property maps
|
||||
exist, how many times were property maps cloned, how many times did
|
||||
the property map history cache hit, prevent new allocations, how many
|
||||
prototype invalidations were done, how many time the property map
|
||||
proto cache hit.
|
||||
|
||||
Finally we count callsite misses on a per callsite bases, which occur
|
||||
when a callsite has to be relinked, due to a previous assumption of
|
||||
object layout being invalidated.
|
||||
|
||||
"getContext" - return the current Nashorn context.
|
||||
|
||||
"equalWithoutType" - Returns true if if the two objects are both
|
||||
property maps, and they have identical properties in the same order,
|
||||
but allows the properties to differ in their types.
|
||||
|
||||
"diffPropertyMaps" Returns a diagnostic string representing the difference
|
||||
of two property maps.
|
||||
|
||||
"getClass" - Returns the Java class of an object, or undefined if null.
|
||||
|
||||
"toJavaString" - Returns the Java toString representation of an object.
|
||||
|
||||
"toIdentString" - Returns a string representation of an object consisting
|
||||
of its java class name and hash code.
|
||||
|
||||
"getListenerCount" - Return the number of property listeners for a
|
||||
script object.
|
||||
|
||||
"getEventQueueCapacity" - Get the capacity of the event queue.
|
||||
|
||||
"setEventQueueCapacity" - Set the event queue capacity.
|
||||
|
||||
"addRuntimeEvent" - Add a runtime event to the runtime event queue.
|
||||
The queue has a fixed size (see -Dnashorn.runtime.event.queue.size)
|
||||
and the oldest entry will be thrown out of the queue is about to overflow.
|
||||
|
||||
"expandEventQueueCapacity" - Expands the event queue capacity,
|
||||
or truncates if capacity is lower than current capacity. Then only
|
||||
the newest entries are kept.
|
||||
|
||||
"clearRuntimeEvents" - Clear the runtime event queue.
|
||||
|
||||
"removeRuntimeEvent" - Remove a specific runtime event from the event queue.
|
||||
|
||||
"getRuntimeEvents" - Return all runtime events in the queue as an array.
|
||||
|
||||
"getLastRuntimeEvent" - Return the last runtime event in the queue.
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.methodhandles.debug.stacktrace
|
||||
|
||||
This enhances methodhandles logging (see below) to also dump the
|
||||
stack trace for every instrumented method handle operation.
|
||||
Warning: This is enormously verbose, but provides a pretty
|
||||
decent "grep:able" picture of where the calls are coming from.
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.cce
|
||||
|
||||
Setting this system property causes the Nashorn linker to rely on
|
||||
ClassCastExceptions for triggering a callsite relink. If not set, the linker
|
||||
will add an explicit instanceof guard.
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.spill.threshold=<x>
|
||||
|
||||
This property sets the number of fields in an object from which to use
|
||||
generic array based spill storage instead of Java fields. The default value
|
||||
is 256.
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.tcs.miss.samplePercent=<x>
|
||||
|
||||
When running with the trace callsite option (-tcs), Nashorn will count
|
||||
and instrument any callsite misses that require relinking. As the
|
||||
number of relinks is large and usually produces a lot of output, this
|
||||
system property can be used to constrain the percentage of misses that
|
||||
should be logged. Typically this is set to 1 or 5 (percent). 1% is the
|
||||
default value.
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.persistent.code.cache
|
||||
|
||||
This property can be used to set the directory where Nashorn stores
|
||||
serialized script classes generated with the -pcc/--persistent-code-cache
|
||||
option. The default directory name is "nashorn_code_cache".
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.typeInfo.maxFiles
|
||||
|
||||
Maximum number of files to store in the type info cache. The type info cache
|
||||
is used to cache type data of JavaScript functions when running with
|
||||
optimistic types (-ot/--optimistic-types). There is one file per JavaScript
|
||||
function in the cache.
|
||||
|
||||
The default value is 0 which means the feature is disabled. Setting this
|
||||
to something like 20000 is probably good enough for most applications and
|
||||
will usually cap the cache directory to about 80MB presuming a 4kB
|
||||
filesystem allocation unit. Set this to "unlimited" to run without limit.
|
||||
|
||||
If the value is not 0 or "unlimited", Nashorn will spawn a cleanup thread
|
||||
that makes sure the number of files in the cache does not exceed the given
|
||||
value by deleting the least recently modified files.
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.typeInfo.cacheDir
|
||||
|
||||
This property can be used to set the directory where Nashorn stores the
|
||||
type info cache when -Dnashorn.typeInfo.maxFiles is set to a nonzero
|
||||
value. The default location is platform specific. On Windows, it is
|
||||
"${java.io.tmpdir}\com.oracle.java.NashornTypeInfo". On Linux and
|
||||
Solaris it is "~/.cache/com.oracle.java.NashornTypeInfo". On Mac OS X,
|
||||
it is "~/Library/Caches/com.oracle.java.NashornTypeInfo".
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.typeInfo.cleanupDelaySeconds=<value>
|
||||
|
||||
This sets the delay between cleanups of the typeInfo cache, in seconds.
|
||||
The default delay is 20 seconds.
|
||||
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.profilefile=<filename>
|
||||
|
||||
When running with the profile callsite options (-pcs), Nashorn will
|
||||
dump profiling data for all callsites to stderr as a shutdown hook. To
|
||||
instead redirect this to a file, specify the path to the file using
|
||||
this system property.
|
||||
|
||||
|
||||
SYSTEM_PROPERTY: -Dnashorn.regexp.impl=[jdk|joni]
|
||||
|
||||
This property defines the regular expression engine to be used by
|
||||
Nashorn. Set this flag to "jdk" to get an implementation based on the
|
||||
JDK's java.util.regex package. Set this property to "joni" to install
|
||||
an implementation based on Joni, the regular expression engine used by
|
||||
the JRuby project. The default value for this flag is "joni"
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.runtime.event.queue.size=<value>
|
||||
|
||||
Nashorn provides a fixed sized runtime event queue for debugging purposes.
|
||||
See -Dnashorn.debug for methods to access the event queue.
|
||||
The default value is 1024.
|
||||
|
||||
SYSTEM PROPERTY: -Dnashorn.anonymous.classes.threshold=<value>
|
||||
|
||||
Nashorn can use anonymous classes for loading compiled scripts, depending
|
||||
on the --anonymous-classes=[auto|true|false] option. Anonymous classes load
|
||||
faster, but the loaded classes get less optimization applied to them and
|
||||
therefore usually run slower. In the default "auto" setting, scripts are
|
||||
loaded as anonymous classes if the script size does not exceed 512 bytes.
|
||||
The above system property allows to set this threshold to a user defined
|
||||
value.
|
||||
|
||||
===============
|
||||
2. The loggers.
|
||||
===============
|
||||
|
||||
It is very simple to create your own logger. Use the DebugLogger class
|
||||
and give the subsystem name as a constructor argument.
|
||||
|
||||
The Nashorn loggers can be used to print per-module or per-subsystem
|
||||
debug information with different levels of verbosity. The loggers for
|
||||
a given subsystem are available are enabled by using
|
||||
|
||||
--log=<systemname>[:<level>]
|
||||
|
||||
on the command line.
|
||||
|
||||
Here <systemname> identifies the name of the subsystem to be logged
|
||||
and the optional colon and level argument is a standard
|
||||
java.util.logging.Level name (severe, warning, info, config, fine,
|
||||
finer, finest). If the level is left out for a particular subsystem,
|
||||
it defaults to "info". Any log message logged as the level or a level
|
||||
that is more important will be output to stderr by the logger.
|
||||
|
||||
Several loggers can be enabled by a single command line option, by
|
||||
putting a comma after each subsystem/level tuple (or each subsystem if
|
||||
level is unspecified). The --log option can also be given multiple
|
||||
times on the same command line, with the same effect.
|
||||
|
||||
For example: --log=codegen,fields:finest is equivalent to
|
||||
--log=codegen:info --log=fields:finest
|
||||
|
||||
The following is an incomplete list of subsystems that currently
|
||||
support logging. Look for classes implementing
|
||||
jdk.nashorn.internal.runtime.logging.Loggable for more loggers.
|
||||
|
||||
|
||||
* compiler
|
||||
|
||||
The compiler is in charge of turning source code and function nodes
|
||||
into byte code, and installs the classes into a class loader
|
||||
controlled from the Context. Log messages are, for example, about
|
||||
things like new compile units being allocated. The compiler has global
|
||||
settings that all the tiers of codegen (e.g. Lower and CodeGenerator)
|
||||
use.s
|
||||
|
||||
|
||||
* recompile
|
||||
|
||||
This logger shows information about recompilation of scripts and
|
||||
functions at runtime. Recompilation may happen because a function
|
||||
was called with different parameter types, or because an optimistic
|
||||
assumption failed while executing a function with -ot/--optimistic-types.
|
||||
|
||||
|
||||
* codegen
|
||||
|
||||
The code generator is the emitter stage of the code pipeline, and
|
||||
turns the lowest tier of a FunctionNode into bytecode. Codegen logging
|
||||
shows byte codes as they are being emitted, line number information
|
||||
and jumps. It also shows the contents of the bytecode stack prior to
|
||||
each instruction being emitted. This is a good debugging aid. For
|
||||
example:
|
||||
|
||||
[codegen] #41 line:2 (f)_afc824e
|
||||
[codegen] #42 load symbol x slot=2
|
||||
[codegen] #43 {1:O} load int 0
|
||||
[codegen] #44 {2:I O} dynamic_runtime_call GT:ZOI_I args=2 returnType=boolean
|
||||
[codegen] #45 signature (Ljava/lang/Object;I)Z
|
||||
[codegen] #46 {1:Z} ifeq ternary_false_5402fe28
|
||||
[codegen] #47 load symbol x slot=2
|
||||
[codegen] #48 {1:O} goto ternary_exit_107c1f2f
|
||||
[codegen] #49 ternary_false_5402fe28
|
||||
[codegen] #50 load symbol x slot=2
|
||||
[codegen] #51 {1:O} convert object -> double
|
||||
[codegen] #52 {1:D} neg
|
||||
[codegen] #53 {1:D} convert double -> object
|
||||
[codegen] #54 {1:O} ternary_exit_107c1f2f
|
||||
[codegen] #55 {1:O} return object
|
||||
|
||||
shows a ternary node being generated for the sequence "return x > 0 ?
|
||||
x : -x"
|
||||
|
||||
The first number on the log line is a unique monotonically increasing
|
||||
emission id per bytecode. There is no guarantee this is the same id
|
||||
between runs. depending on non deterministic code
|
||||
execution/compilation, but for small applications it usually is. If
|
||||
the system variable -Dnashorn.codegen.debug.trace=<x> is set, where x
|
||||
is a bytecode emission id, a stack trace will be shown as the
|
||||
particular bytecode is about to be emitted. This can be a quick way to
|
||||
determine where it comes from without attaching the debugger. "Who
|
||||
generated that neg?"
|
||||
|
||||
The --log=codegen option is equivalent to setting the system variable
|
||||
"nashorn.codegen.debug" to true.
|
||||
|
||||
* fold
|
||||
|
||||
Shows constant folding taking place before lowering
|
||||
|
||||
* lower
|
||||
|
||||
This is the first lowering pass.
|
||||
|
||||
Lower is a code generation pass that turns high level IR nodes into
|
||||
lower level one, for example substituting comparisons to RuntimeNodes
|
||||
and inlining finally blocks.
|
||||
|
||||
Lower is also responsible for determining control flow information
|
||||
like end points.
|
||||
|
||||
* symbols
|
||||
|
||||
The symbols logger tracks the assignment os symbols to identifiers.
|
||||
|
||||
* scopedepths
|
||||
|
||||
This logs the calculation of scope depths for non-local symbols.
|
||||
|
||||
* fields
|
||||
|
||||
The --log=fields option (at info level) is equivalent to setting the
|
||||
system variable "nashorn.fields.debug" to true. At the info level it
|
||||
will only show info about type assumptions that were invalidated. If
|
||||
the level is set to finest, it will also trace every AccessorProperty
|
||||
getter and setter in the program, show arguments, return values
|
||||
etc. It will also show the internal representation of respective field
|
||||
(Object in the normal case, unless running with the dual field
|
||||
representation)
|
||||
|
||||
* time
|
||||
|
||||
This enables timers for various phases of script compilation. The timers
|
||||
will be dumped when the Nashorn process exits. We see a percentage value
|
||||
of how much time was spent not executing bytecode (i.e. compilation and
|
||||
internal tasks) at the end of the report.
|
||||
|
||||
A finer level than "info" will show individual compilation timings as they
|
||||
happen.
|
||||
|
||||
Here is an example:
|
||||
|
||||
[time] Accumulated complation phase Timings:
|
||||
[time]
|
||||
[time] 'JavaScript Parsing' 1076 ms
|
||||
[time] 'Constant Folding' 159 ms
|
||||
[time] 'Control Flow Lowering' 303 ms
|
||||
[time] 'Program Point Calculation' 282 ms
|
||||
[time] 'Builtin Replacement' 71 ms
|
||||
[time] 'Code Splitting' 670 ms
|
||||
[time] 'Symbol Assignment' 474 ms
|
||||
[time] 'Scope Depth Computation' 249 ms
|
||||
[time] 'Optimistic Type Assignment' 186 ms
|
||||
[time] 'Local Variable Type Calculation' 526 ms
|
||||
[time] 'Bytecode Generation' 5177 ms
|
||||
[time] 'Class Installation' 1854 ms
|
||||
[time]
|
||||
[time] Total runtime: 11994 ms (Non-runtime: 11027 ms [91%])
|
||||
|
||||
* methodhandles
|
||||
|
||||
If this logger is enabled, each MethodHandle related call that uses
|
||||
the java.lang.invoke package gets its MethodHandle intercepted and an
|
||||
instrumentation printout of arguments and return value appended to
|
||||
it. This shows exactly which method handles are executed and from
|
||||
where. (Also MethodTypes and SwitchPoints).
|
||||
|
||||
* classcache
|
||||
|
||||
This logger shows information about reusing code classes using the
|
||||
in-memory class cache. Nashorn will try to avoid compilation of
|
||||
scripts by using existing classes. This can significantly improve
|
||||
performance when repeatedly evaluating the same script.
|
||||
|
||||
=======================
|
||||
3. Undocumented options
|
||||
=======================
|
||||
|
||||
Here follows a short description of undocumented options for Nashorn.
|
||||
To see a list of all undocumented options, use the (undocumented) flag
|
||||
"-xhelp".
|
||||
|
||||
i.e. jjs -xhelp or java -jar nashorn.jar -xhelp
|
||||
|
||||
Undocumented options are not guaranteed to work, run correctly or be
|
||||
bug free. They are experimental and for internal or debugging use.
|
||||
They are also subject to change without notice.
|
||||
|
||||
In practice, though, all options below not explicitly documented as
|
||||
EXPERIMENTAL can be relied upon, for example --dump-on-error is useful
|
||||
for any JavaScript/Nashorn developer, but there is no guarantee.
|
||||
|
||||
A short summary follows:
|
||||
|
||||
-D (-Dname=value. Set a system property. This option can be repeated.)
|
||||
|
||||
-ccs, --class-cache-size (Size of the Class cache size per global scope.)
|
||||
|
||||
-cp, -classpath (-cp path. Specify where to find user class files.)
|
||||
|
||||
-co, --compile-only (Compile without running.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-d, --dump-debug-dir (specify a destination directory to dump class files.)
|
||||
param: <path>
|
||||
|
||||
--debug-lines (Generate line number table in .class files.)
|
||||
param: [true|false] default: true
|
||||
|
||||
--debug-locals (Generate local variable table in .class files.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-doe, -dump-on-error (Dump a stack trace on errors.)
|
||||
param: [true|false] default: false
|
||||
|
||||
--early-lvalue-error (invalid lvalue expressions should be reported as early errors.)
|
||||
param: [true|false] default: true
|
||||
|
||||
--empty-statements (Preserve empty statements in AST.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-fv, -fullversion (Print full version info of Nashorn.)
|
||||
param: [true|false] default: false
|
||||
|
||||
--function-statement-error (Report an error when function declaration is used as a statement.)
|
||||
param: [true|false] default: false
|
||||
|
||||
--function-statement-warning (Warn when function declaration is used as a statement.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-fx (Launch script as an fx application.)
|
||||
param: [true|false] default: false
|
||||
|
||||
--global-per-engine (Use single Global instance per script engine instance.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-h, -help (Print help for command line flags.)
|
||||
param: [true|false] default: false
|
||||
|
||||
--loader-per-compile (Create a new class loader per compile.)
|
||||
param: [true|false] default: true
|
||||
|
||||
-l, --locale (Set Locale for script execution.)
|
||||
param: <locale> default: en-US
|
||||
|
||||
--log (Enable logging of a given level for a given number of sub systems.
|
||||
[for example: --log=fields:finest,codegen:info].)
|
||||
param: <module:level>,*
|
||||
|
||||
-nj, --no-java (Disable Java support.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-nse, --no-syntax-extensions (Disallow non-standard syntax extensions.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-nta, --no-typed-arrays (Disable typed arrays support.)
|
||||
param: [true|false] default: false
|
||||
|
||||
--parse-only (Parse without compiling.)
|
||||
param: [true|false] default: false
|
||||
|
||||
--print-ast (Print abstract syntax tree.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-pc, --print-code (Print generated bytecode. If a directory is specified, nothing will
|
||||
be dumped to stderr. Also, in that case, .dot files will be generated
|
||||
for all functions or for the function with the specified name only.)
|
||||
param: [dir:<output-dir>,function:<name>]
|
||||
|
||||
--print-lower-ast (Print lowered abstract syntax tree.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-plp, --print-lower-parse (Print the parse tree after lowering.)
|
||||
param: [true|false] default: false
|
||||
|
||||
--print-no-newline (Print function will not print new line char.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-pp, --print-parse (Print the parse tree.)
|
||||
param: [true|false] default: false
|
||||
|
||||
--print-symbols (Print the symbol table.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-pcs, --profile-callsites (Dump callsite profile data.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-scripting (Enable scripting features.)
|
||||
param: [true|false] default: false
|
||||
|
||||
--stderr (Redirect stderr to a filename or to another tty, e.g. stdout.)
|
||||
param: <output console>
|
||||
|
||||
--stdout (Redirect stdout to a filename or to another tty, e.g. stderr.)
|
||||
param: <output console>
|
||||
|
||||
-strict (Run scripts in strict mode.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-t, -timezone (Set timezone for script execution.)
|
||||
param: <timezone> default: Europe/Stockholm
|
||||
|
||||
-tcs, --trace-callsites (Enable callsite trace mode. Options are: miss [trace callsite misses]
|
||||
enterexit [trace callsite enter/exit], objects [print object properties].)
|
||||
param: [=[option,]*]
|
||||
|
||||
-urt, --unstable-relink-threshold (Number of times a dynamic call site has to be relinked before it
|
||||
is considered unstable, when the runtime will try to link it as
|
||||
if it is megamorphic.)
|
||||
|
||||
--verify-code (Verify byte code before running.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-v, -version (Print version info of Nashorn.)
|
||||
param: [true|false] default: false
|
||||
|
||||
-xhelp (Print extended help for command line flags.)
|
||||
param: [true|false] default: false
|
||||
|
||||
988
doc/nashorn/JavaScriptingProgrammersGuide.html
Normal file
988
doc/nashorn/JavaScriptingProgrammersGuide.html
Normal file
@@ -0,0 +1,988 @@
|
||||
<!--
|
||||
Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
|
||||
This code is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License version 2 only, as
|
||||
published by the Free Software Foundation. Oracle designates this
|
||||
particular file as subject to the "Classpath" exception as provided
|
||||
by Oracle in the LICENSE file that accompanied this code.
|
||||
|
||||
This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
version 2 for more details (a copy is included in the LICENSE file that
|
||||
accompanied this code).
|
||||
|
||||
You should have received a copy of the GNU General Public License version
|
||||
2 along with this work; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
or visit www.oracle.com if you need additional information or have any
|
||||
questions.
|
||||
-->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html class=" regenabled gecko radius jsenabled regloaded" xmlns="http://www.w3.org/1999/xhtml"><head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Java Scripting Programmer's Guide</title>
|
||||
|
||||
<!-- ============ -->
|
||||
<!-- MAIN CONTENT -->
|
||||
<!-- ============ -->
|
||||
<table summary="layout" border="0" width="100%">
|
||||
<tbody><tr>
|
||||
<td>
|
||||
|
||||
<div id="sharepage" class="smallpagetitle"><h1>Java Scripting Programmer's Guide</h1><div class="sharepage"> <div class="sharepagew1 share-mailto"> <table summary="" cellpadding="0" cellspacing="0"><tbody><tr> <td id="share-mailto"><a href="mailto:?subject=Java%20Documentation%20Page:%20Java%20Scripting%20Programmer%27s%20Guide&body=Check%20out%20this%20page:%20%0A%0Ahttp%3A%2F%2Fdocs.oracle.com%2Fjavase%2F6%2Fdocs%2Ftechnotes%2Fguides%2Fscripting%2Fprogrammer_guide%2Findex.html" class="sharelink mailto" title="Email this page to a friend"></a></td> <td id="share-technorati"><a href="http://technorati.com/search/http%3A%2F%2Fdocs.oracle.com%2Fjavase%2F6%2Fdocs%2Ftechnotes%2Fguides%2Fscripting%2Fprogrammer_guide%2Findex.html" class="sharelink technorati" title="See who links to this page on Technorati"></a></td> <td id="share-delicious"><a href="http://del.icio.us/post?v=4;url=http%3A%2F%2Fdocs.oracle.com%2Fjavase%2F6%2Fdocs%2Ftechnotes%2Fguides%2Fscripting%2Fprogrammer_guide%2Findex.html;title=Java%20Scripting%20Programmer%27s%20Guide" class="sharelink delicious" title="Bookmark this page in del.icio.us"></a></td> <td id="share-digg"><a href="http://digg.com/submit?phase=2&url=http%3A%2F%2Fdocs.oracle.com%2Fjavase%2F6%2Fdocs%2Ftechnotes%2Fguides%2Fscripting%2Fprogrammer_guide%2Findex.html&title=Java%20Scripting%20Programmer%27s%20Guide" class="sharelink digg" title="Submit this page to Digg"></a></td> <td id="share-slashdot"><a href="http://slashdot.org/bookmark.pl?title=Java%20Scripting%20Programmer%27s%20Guide&url=http%3A%2F%2Fdocs.oracle.com%2Fjavase%2F6%2Fdocs%2Ftechnotes%2Fguides%2Fscripting%2Fprogrammer_guide%2Findex.html" class="sharelink slashdot" title="Submit this page to Slashdot"></a></td> <td id="share-blank"> </td></tr></tbody></table></div></div></div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
<!-- Body text begins here -->
|
||||
<ul>
|
||||
<li><span><a href="#who">Who is the Java Scripting API
|
||||
For?</a></span></li>
|
||||
<li><span><a href="#package">Scripting Package</a></span></li>
|
||||
<li><span><a href="#examples">Examples</a></span>
|
||||
<ul>
|
||||
<li><span><a href="#helloworld">"Hello, World"</a></span></li>
|
||||
<li><span><a href="#evalfile">Evaluating a Script
|
||||
File</a></span></li>
|
||||
<li><span><a href="#scriptvars">Script Variables</a></span></li>
|
||||
<li><span><a href="#invoke">Invoking Script Functions and
|
||||
Methods</a></span></li>
|
||||
<li><span><a href="#interfaces">Implementing Java Interfaces by
|
||||
Scripts</a></span></li>
|
||||
<li><span><a href="#scopes">Multiple Scopes for
|
||||
Scripts</a></span></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><span><a href="#jsengine">JavaScript Script
|
||||
Engine</a></span></li>
|
||||
<li><span><a href="#jstojava">JavaScript to Java
|
||||
Communication</a></span>
|
||||
<ul>
|
||||
<li><span><a href="#jsjavaclass">Accessing Java
|
||||
Classes</a></span></li>
|
||||
<li><span><a href="#jsimport">Importing Java Packages,
|
||||
Classes</a></span></li>
|
||||
<li><span><a href="#jsarrays">Creating, Converting and Using Java
|
||||
Arrays</a></span></li>
|
||||
<li><span><a href="#jsimplement">Implementing Java
|
||||
Interfaces</a></span></li>
|
||||
<li><span><a href="#jsextendabstract">Extending Abstract Java Classes
|
||||
</a></span></li>
|
||||
<li><span><a href="#jsextendconcrete">Extending Concrete Java Classes
|
||||
</a></span></li>
|
||||
<li><span><a href="#jsimplementmultiple">Implementing Multiple Java Interfaces
|
||||
</a></span></li>
|
||||
<li><span><a href="#classBoundImplementations">Class-Bound Implementations
|
||||
</a></span></li>
|
||||
<li><span><a href="#jsoverload">Overload Resolution</a></span></li>
|
||||
<li><span><a href="#dataTypeMapping">Mapping of Data Types Between Java
|
||||
and JavaScript</a></span></li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
<li><span><a href="#engineimpl">Implementing Your Own Script
|
||||
Engine</a></span></li>
|
||||
<li><span><a href="#refs">References</a></span></li>
|
||||
</ul>
|
||||
<span><a name="who" id="who"></a></span>
|
||||
<h2><span>Who is the Java Scripting API For?</span></h2>
|
||||
<span>Some useful characteristics of scripting languages
|
||||
are:</span>
|
||||
<ul>
|
||||
<li><span><b>Convenience</b>: Most scripting languages are
|
||||
dynamically typed. You can usually create new variables without
|
||||
declaring the variable type, and you can reuse variables to store
|
||||
objects of different types. Also, scripting languages tend to
|
||||
perform many type conversions automatically, for example,
|
||||
converting the number 10 to the text "10" as necessary.</span></li>
|
||||
<li><span><b>Developing rapid prototypes</b>: You can avoid the
|
||||
edit-compile-run cycle and just use edit-run!</span></li>
|
||||
<li><span><b>Application extension/customization</b>: You can
|
||||
"externalize" parts of your application - like configuration
|
||||
scripts, business logic/rules and math expressions for financial
|
||||
applications.</span></li>
|
||||
<li><span><b>"Command line" shells for applications</b> -for
|
||||
debugging, runtime/deploy time configuration etc. Most applications
|
||||
have a web-based GUI configuaration tool these days. But
|
||||
sysadmins/deployers frequently prefer command line tools. Instead
|
||||
of inventing ad-hoc scripting language for that purpose, a
|
||||
"standard" scripting language can be used.</span></li>
|
||||
</ul>
|
||||
<p><span>The Java<font size="-1"><sup>TM</sup></font> Scripting API
|
||||
is a scripting language indepedent framework for using script
|
||||
engines from Java code. With the Java Scripting API, it is possible
|
||||
to write customizable/extendable applications in the Java language
|
||||
and leave the customization scripting language choice to the end
|
||||
user. The Java application developer need not choose the extension
|
||||
language during development. If you write your application with
|
||||
JSR-223 API, then your users can use any JSR-223 compliant
|
||||
scripting language.</span></p>
|
||||
<hr>
|
||||
<span><a name="package" id="package"></a></span>
|
||||
<h2><span>Scripting Package</span></h2>
|
||||
<p><span>The Java Scripting functionality is in the <code><a href="http://docs.oracle.com/javase/9/docs/api/javax/script/package-summary.html">javax.script</a></code>
|
||||
package. This is a relatively small, simple API. The starting point
|
||||
of the scripting API is the <code>ScriptEngineManager</code> class.
|
||||
A ScriptEngineManager object can discover script engines through
|
||||
the jar file service discovery mechanism. It can also instantiate
|
||||
ScriptEngine objects that interpret scripts written in a specific
|
||||
scripting language. The simplest way to use the scripting API is as
|
||||
follows:</span></p>
|
||||
<ol>
|
||||
<li><span>Create a <code>ScriptEngineManager</code>
|
||||
object.</span></li>
|
||||
<li><span>Get a <code>ScriptEngine</code> object from the
|
||||
manager.</span></li>
|
||||
<li><span>Evaluate script using the <code>ScriptEngine</code>'s
|
||||
<code>eval</code> methods.</span></li>
|
||||
</ol>
|
||||
<p><span>Now, it is time to look at some sample code. While it is
|
||||
not mandatory, it may be useful to know a bit of JavaScript to read
|
||||
these examples.</span></p>
|
||||
<hr>
|
||||
<span><a name="examples" id="examples"></a></span>
|
||||
<h2><span>Examples</span></h2>
|
||||
<span><a name="helloworld" id="helloworld"></a></span>
|
||||
<h3><span>"Hello, World"</span></h3>
|
||||
<p><span>From the <code>ScriptEngineManager</code> instance, we
|
||||
request a JavaScript engine instance using
|
||||
<code>getEngineByName</code> method. On the script engine, the
|
||||
<code>eval</code> method is called to execute a given String as
|
||||
JavaScript code! For brevity, in this as well as in subsequent
|
||||
examples, we have not shown exception handling. There are checked
|
||||
and runtime exceptions thrown from <code>javax.script</code> API.
|
||||
Needless to say, you have to handle the exceptions
|
||||
appropriately.</span></p>
|
||||
<pre>
|
||||
<span><code>
|
||||
// <a href="source/EvalScript.java">EvalScript.java</a>
|
||||
|
||||
import javax.script.*;
|
||||
public class EvalScript {
|
||||
public static void main(String[] args) throws Exception {
|
||||
// create a script engine manager
|
||||
<span class="classref">ScriptEngineManager</span> factory = new ScriptEngineManager();
|
||||
// create a JavaScript engine
|
||||
<span class="classref">ScriptEngine</span> engine = factory.<span class="methodref">getEngineByName</span>("nashorn");
|
||||
// evaluate JavaScript code from String
|
||||
engine.<span class="methodref">eval</span>("print('Hello, World')");
|
||||
}
|
||||
}
|
||||
</code></span>
|
||||
</pre>
|
||||
<hr>
|
||||
<a name="evalfile" id="evalfile"></a>
|
||||
<h3>Evaluating a Script File</h3>
|
||||
<p>In this example, we call the <code>eval</code> method that
|
||||
accepts <code>java.io.Reader</code> for the input source. The
|
||||
script read by the given reader is executed. This way it is
|
||||
possible to execute scripts from files, URLs and resources by
|
||||
wrapping the relevant input stream objects as readers.</p>
|
||||
<pre>
|
||||
<code>
|
||||
// <a href="source/EvalFile.java">EvalFile.java</a>
|
||||
|
||||
import javax.script.*;
|
||||
|
||||
public class EvalFile {
|
||||
public static void main(String[] args) throws Exception {
|
||||
// create a script engine manager
|
||||
<span class="classref">ScriptEngineManager</span> factory = new ScriptEngineManager();
|
||||
// create JavaScript engine
|
||||
<span class="classref">ScriptEngine</span> engine = factory.<span class="methodref">getEngineByName</span>("nashorn");
|
||||
// evaluate JavaScript code from given file - specified by first argument
|
||||
engine.<span class="methodref">eval</span>(new java.io.FileReader(args[0]));
|
||||
}
|
||||
}
|
||||
</code>
|
||||
</pre>
|
||||
Let us assume that we have the file named <a href="source/test.js">test.js</a> with the
|
||||
following text:
|
||||
<pre><code>
|
||||
print("This is hello from test.js");
|
||||
</code>
|
||||
</pre>
|
||||
We can run the above Java as
|
||||
<pre><code>
|
||||
java EvalFile test.js
|
||||
</code>
|
||||
</pre>
|
||||
<hr>
|
||||
<a name="scriptvars" id="scriptvars"></a>
|
||||
<h3>Script Variables</h3>
|
||||
<p>When you embed script engines and scripts with your Java
|
||||
application, you may want to expose your application objects as
|
||||
global variables to scripts. This example demonstrates how you can
|
||||
expose your application objects as global variables to a script. We
|
||||
create a <code>java.io.File</code> in the application and expose
|
||||
the same as a global variable with the name "file". The script can
|
||||
access the variable - for example, it can call public methods on
|
||||
it. Note that the syntax to access Java objects, methods and fields
|
||||
is dependent on the scripting language. JavaScript supports the
|
||||
most "natural" Java-like syntax.</p>
|
||||
<p>
|
||||
Nashorn script engine pre-defines two global variables named "context"
|
||||
and "engine". The "context" variable is of type javax.script.ScriptContext
|
||||
and refers to the current ScriptContext instance passed to script engine's
|
||||
eval method. The "engine" variable is of type javax.script.ScriptEngine and
|
||||
refers to the current nashorn script engine instance evaluating the script.
|
||||
Both of these variables are non-writable, non-enumerable and non-configurable
|
||||
- which implies script code can not write overwrite the value, for..loop iteration
|
||||
on global object will not iterate these variables and these variables can not be
|
||||
deleted by script.
|
||||
<pre><code>
|
||||
// <a href="source/ScriptVars.java">ScriptVars.java</a>
|
||||
|
||||
import javax.script.*;
|
||||
import java.io.*;
|
||||
|
||||
public class ScriptVars {
|
||||
public static void main(String[] args) throws Exception {
|
||||
ScriptEngineManager manager = new ScriptEngineManager();
|
||||
ScriptEngine engine = manager.getEngineByName("nashorn");
|
||||
|
||||
File f = new File("test.txt");
|
||||
// expose File object as variable to script
|
||||
engine.<span class="methodref">put</span>("file", f);
|
||||
|
||||
// evaluate a script string. The script accesses "file"
|
||||
// variable and calls method on it
|
||||
engine.eval("print(file.getAbsolutePath())");
|
||||
}
|
||||
}
|
||||
|
||||
</code>
|
||||
</pre>
|
||||
<hr>
|
||||
<a name="invoke" id="invoke"></a>
|
||||
<h3>Invoking Script Functions and Methods</h3>
|
||||
<p>Sometimes you may want to call a specific scripting function
|
||||
repeatedly - for example, your application menu functionality might
|
||||
be implemented by a script. In your menu's action event handler you
|
||||
may want to call a specific script function. The following example
|
||||
demonstrates invoking a specific script function from Java
|
||||
code.</p>
|
||||
<pre><code>
|
||||
// <a href="source/InvokeScriptFunction.java">InvokeScriptFunction.java</a>
|
||||
|
||||
import javax.script.*;
|
||||
|
||||
public class InvokeScriptFunction {
|
||||
public static void main(String[] args) throws Exception {
|
||||
ScriptEngineManager manager = new ScriptEngineManager();
|
||||
ScriptEngine engine = manager.getEngineByName("nashorn");
|
||||
|
||||
// JavaScript code in a String
|
||||
String script = "function hello(name) { print('Hello, ' + name); }";
|
||||
// evaluate script
|
||||
engine.eval(script);
|
||||
|
||||
// <code>javax.script.Invocable</code> is an optional interface.
|
||||
// Check whether your script engine implements it or not!
|
||||
// Note that the JavaScript engine implements Invocable interface.
|
||||
<span class="classref">Invocable</span> inv = (Invocable) engine;
|
||||
|
||||
// invoke the global function named "hello"
|
||||
inv.<span class="methodref">invokeFunction</span>("hello", "Scripting!!" );
|
||||
}
|
||||
}
|
||||
|
||||
</code>
|
||||
</pre>
|
||||
<p>If your scripting language is object based (like JavaScript) or
|
||||
object-oriented, then you can invoke a script method on a script
|
||||
object.</p>
|
||||
<pre><code>
|
||||
// <a href="source/InvokeScriptMethod.java">InvokeScriptMethod.java</a>
|
||||
|
||||
import javax.script.*;
|
||||
|
||||
public class InvokeScriptMethod {
|
||||
public static void main(String[] args) throws Exception {
|
||||
ScriptEngineManager manager = new ScriptEngineManager();
|
||||
ScriptEngine engine = manager.getEngineByName("nashorn");
|
||||
|
||||
// JavaScript code in a String. This code defines a script object 'obj'
|
||||
// with one method called 'hello'.
|
||||
String script = "var obj = new Object(); obj.hello = function(name) { print('Hello, ' + name); }";
|
||||
// evaluate script
|
||||
engine.eval(script);
|
||||
|
||||
// <code>javax.script.Invocable</code> is an optional interface.
|
||||
// Check whether your script engine implements or not!
|
||||
// Note that the JavaScript engine implements Invocable interface.
|
||||
<span class="classref">Invocable</span> inv = (Invocable) engine;
|
||||
|
||||
// get script object on which we want to call the method
|
||||
Object obj = engine.<span class="methodref">get</span>("obj");
|
||||
|
||||
// invoke the method named "hello" on the script object "obj"
|
||||
inv.<span class="methodref">invokeMethod</span>(obj, "hello", "Script Method !!" );
|
||||
}
|
||||
}
|
||||
|
||||
</code>
|
||||
</pre>
|
||||
<hr>
|
||||
<a name="interfaces" id="interfaces"></a>
|
||||
<h3>Implementing Java Interfaces by Scripts</h3>
|
||||
<p>Instead of calling specific script functions from Java,
|
||||
sometimes it is convenient to implement a Java interface by script
|
||||
functions or methods. Also, by using interfaces we can avoid having
|
||||
to use the <code>javax.script</code> API in many places. We can get
|
||||
an interface implementor object and pass it to various Java APIs.
|
||||
The following example demonstrates implementing the
|
||||
<code>java.lang.Runnable</code> interface with a script.</p>
|
||||
<pre><code>
|
||||
// <a href="source/RunnableImpl.java">RunnableImpl.java</a>
|
||||
|
||||
import javax.script.*;
|
||||
|
||||
public class RunnableImpl {
|
||||
public static void main(String[] args) throws Exception {
|
||||
ScriptEngineManager manager = new ScriptEngineManager();
|
||||
ScriptEngine engine = manager.getEngineByName("nashorn");
|
||||
|
||||
// JavaScript code in a String
|
||||
String script = "function run() { print('run called'); }";
|
||||
|
||||
// evaluate script
|
||||
engine.eval(script);
|
||||
|
||||
<span class="classref">Invocable</span> inv = (Invocable) engine;
|
||||
|
||||
// get Runnable interface object from engine. This interface methods
|
||||
// are implemented by script functions with the matching name.
|
||||
Runnable r = inv.<span class="methodref">getInterface</span>(Runnable.class);
|
||||
|
||||
// start a new thread that runs the script implemented
|
||||
// runnable interface
|
||||
Thread th = new Thread(r);
|
||||
th.start();
|
||||
th.join();
|
||||
}
|
||||
}
|
||||
</code>
|
||||
</pre>
|
||||
<p>If your scripting language is object-based or object-oriented,
|
||||
it is possible to implement a Java interface by script methods on
|
||||
script objects. This avoids having to call script global functions
|
||||
for interface methods. The script object can store the "state"
|
||||
associated with the interface implementor.</p>
|
||||
<pre><code>
|
||||
// <a href="source/RunnableImplObject.java">RunnableImplObject.java</a>
|
||||
|
||||
import javax.script.*;
|
||||
|
||||
public class RunnableImplObject {
|
||||
public static void main(String[] args) throws Exception {
|
||||
ScriptEngineManager manager = new ScriptEngineManager();
|
||||
ScriptEngine engine = manager.getEngineByName("nashorn");
|
||||
|
||||
// JavaScript code in a String
|
||||
String script = "var obj = new Object(); obj.run = function() { print('run method called'); }";
|
||||
|
||||
// evaluate script
|
||||
engine.eval(script);
|
||||
|
||||
// get script object on which we want to implement the interface with
|
||||
Object obj = engine.<span class="methodref">get</span>("obj");
|
||||
|
||||
<span class="classref">Invocable</span> inv = (Invocable) engine;
|
||||
|
||||
// get Runnable interface object from engine. This interface methods
|
||||
// are implemented by script methods of object 'obj'
|
||||
Runnable r = inv.<span class="methodref">getInterface</span>(obj, Runnable.class);
|
||||
|
||||
// start a new thread that runs the script implemented
|
||||
// runnable interface
|
||||
Thread th = new Thread(r);
|
||||
th.start();
|
||||
th.join();
|
||||
}
|
||||
}
|
||||
</code>
|
||||
</pre>
|
||||
<hr>
|
||||
<a name="scopes" id="scopes"></a>
|
||||
<h3>Multiple Scopes for Scripts</h3>
|
||||
<p>In the <a href="#scriptvars">script variables</a> example, we
|
||||
saw how to expose application objects as script global variables.
|
||||
It is possible to expose multiple global "scopes" for scripts. A
|
||||
single scope is an instance of <code>javax.script.Bindings</code>.
|
||||
This interface is derived from <code>java.util.Map<String,
|
||||
Object></code>. A scope a set of name-value pairs where name is
|
||||
any non-empty, non-null String.
|
||||
<code>javax.script.ScriptContext</code> interface supports multiple
|
||||
scopes with associated Bindings for each
|
||||
scope. By default, every script engine has a default script
|
||||
context. The default script context has atleast one scope called
|
||||
"ENGINE_SCOPE". Various scopes supported by a script context are
|
||||
available through <code>getScopes</code> method.</p>
|
||||
<pre><code>
|
||||
// <a href="source/MultiScopes.java">MultiScopes.java</a>
|
||||
|
||||
import javax.script.*;
|
||||
|
||||
public class MultiScopes {
|
||||
public static void main(String[] args) throws Exception {
|
||||
ScriptEngineManager manager = new ScriptEngineManager();
|
||||
ScriptEngine engine = manager.getEngineByName("nashorn");
|
||||
|
||||
engine.put("x", "hello");
|
||||
// print global variable "x"
|
||||
engine.eval("print(x);");
|
||||
// the above line prints "hello"
|
||||
|
||||
// Now, pass a different script context
|
||||
<span class="classref">ScriptContext</span> newContext = new <span class="classref">SimpleScriptContext</span>();
|
||||
newContext.setBindings(engine.createBindings(), ScriptContext.ENGINE_SCOPE);
|
||||
<span class="classref">Bindings</span> engineScope = newContext.<span class="methodref">getBindings</span>(ScriptContext.ENGINE_SCOPE);
|
||||
|
||||
// add new variable "x" to the new engineScope
|
||||
engineScope.<span class="methodref">put</span>("x", "world");
|
||||
|
||||
// execute the same script - but this time pass a different script context
|
||||
engine.eval("print(x);", newContext);
|
||||
// the above line prints "world"
|
||||
}
|
||||
}
|
||||
|
||||
</code>
|
||||
</pre>
|
||||
<hr>
|
||||
<a name="jsengine" id="jsengine"></a>
|
||||
<h2>JavaScript Script Engine</h2>
|
||||
<p>Oracle's implementation of JDK 8 is co-bundled with the Nashorn ECMAScript
|
||||
script engine.
|
||||
<hr>
|
||||
<a name="jstojava" id="jstojava"></a>
|
||||
<h2>JavaScript to Java Communication</h2>
|
||||
<p>For the most part, accessing Java classes, objects and methods
|
||||
is straightforward. In particular field and method access from
|
||||
JavaScript is the same as it is from Java. We highlight important
|
||||
aspects of JavaScript Java access here.
|
||||
The following examples are JavaScript snippets accessing Java. This
|
||||
section requires knowledge of JavaScript. This section can be
|
||||
skipped if you are planning to use some other JSR-223 scripting
|
||||
language rather than JavaScript.</p>
|
||||
<hr>
|
||||
<a name="jsjavaclass" id=jsjavalass"></a>
|
||||
<h3>Accessing Java Classes</h3>
|
||||
<pre>
|
||||
<code>
|
||||
// <a href="source/javatypes.js">javatypes.js</a>
|
||||
|
||||
var arrayListType = Java.type("java.util.ArrayList")
|
||||
var intType = Java.type("int")
|
||||
var stringArrayType = Java.type("java.lang.String[]")
|
||||
var int2DArrayType = Java.type("int[][]")
|
||||
</code>
|
||||
</pre>
|
||||
|
||||
Note that the name of the type is always a string for a fully qualified name. You can use any of these expressions to create new instances, e.g.:
|
||||
|
||||
<pre><code>
|
||||
var anArrayList = new (Java.type("java.util.ArrayList"))
|
||||
</code></pre>
|
||||
|
||||
or
|
||||
|
||||
<pre><code>
|
||||
var ArrayList = Java.type("java.util.ArrayList")
|
||||
var anArrayList = new ArrayList
|
||||
var anArrayListWithSize = new ArrayList(16)
|
||||
</code></pre>
|
||||
|
||||
In the special case of inner classes, you can either use the JVM fully qualified name, meaning using the dollar sign in the class name, or you can use the dot:
|
||||
|
||||
<pre><code>
|
||||
var ftype = Java.type("java.awt.geom.Arc2D$Float")
|
||||
</code></pre>
|
||||
|
||||
and
|
||||
|
||||
<pre><code>
|
||||
var ftype = Java.type("java.awt.geom.Arc2D.Float")
|
||||
</code></pre>
|
||||
|
||||
both work. Note however that using the dollar sign is faster, as Java.type first tries to resolve the class name as it is originally specified, and the internal JVM names for inner classes use the dollar sign. If you use the dot, Java.type will internally get a ClassNotFoundException and subsequently retry by changing the last dot to dollar sign. As a matter of fact, it'll keep replacing dots with dollar signs until it either successfully loads the class or runs out of all dots in the name. This way it can correctly resolve and load even multiply nested inner classes with the dot notation. Again, this will be slower than using the dollar signs in the name. An alternative way to access the inner class is as a property of the outer class:
|
||||
|
||||
<pre><code>
|
||||
var arctype = Java.type("java.awt.geom.Arc2D")
|
||||
var ftype = arctype.Float
|
||||
</code></pre>
|
||||
<p>
|
||||
You can access both static and non-static inner classes. If you want to create an instance of a non-static inner class, remember to pass an instance of its outer class as the first argument to the constructor.
|
||||
</p>
|
||||
<p>
|
||||
In addition to creating new instances, the type objects returned from <code>Java.type</code> calls can also be used to access the
|
||||
static fields and methods of the classes:
|
||||
<pre><code>
|
||||
var File = Java.type("java.io.File")
|
||||
File.createTempFile("nashorn", ".tmp")
|
||||
</code></pre>
|
||||
<p>
|
||||
Methods with names of the form <code>isXxx()</code>, <code>getXxx()</code>, and <code>setXxx()</code> can also be used as properties, for both instances and statics.
|
||||
</p>
|
||||
<p>
|
||||
A type object returned from <code>Java.type</code> is distinct from a <code>java.lang.Class</code> object. You can obtain one from the other using properties <code>class</code> and <code>static</code> on them.
|
||||
<pre><code>
|
||||
var ArrayList = Java.type("java.util.ArrayList")
|
||||
var a = new ArrayList
|
||||
|
||||
// All of the following print true:
|
||||
print("Type acts as target of instanceof: " + (a instanceof ArrayList))
|
||||
print("Class doesn't act as target of instanceof: " + !(a instanceof a.getClass()))
|
||||
print("Type is not same as instance's getClass(): " + (a.getClass() !== ArrayList))
|
||||
print("Type's `class` property is same as instance getClass(): " + (a.getClass() === ArrayList.class))
|
||||
print("Type is same as instance getClass()'s `static` property: " + (a.getClass().static === ArrayList))
|
||||
</code></pre>
|
||||
<p>
|
||||
You can think of the type object as similar to the class names as used in Java source code: you use them as the
|
||||
arguments to the <code>new</code> and <code>instanceof</code> operators and as the namespace for the static fields
|
||||
and methods, but they are different than the runtime <code>Class</code> objects returned by <code>getClass()</code> calls.
|
||||
Syntactically and semantically, this separation produces code that is most similar to Java code, where a distinction
|
||||
between compile-time class expressions and runtime class objects also exists. (Also, Java can't have the equivalent of <code>static</code>
|
||||
property on a <code>Class</code> object since compile-time class expressions are never reified as objects).
|
||||
</p>
|
||||
<hr>
|
||||
<a name="jsimport" id="jsimport"></a>
|
||||
<h3>Importing Java Packages, Classes</h3>
|
||||
<p>The built-in functions <code>importPackage</code> (in compatibility script) and
|
||||
<code>importClass</code> can be used to import Java packages and
|
||||
classes.</p>
|
||||
<pre><code>
|
||||
|
||||
// <a href="source/importpackageclass.js">importpackageclass.js</a>
|
||||
|
||||
// load compatibility script
|
||||
load("nashorn:mozilla_compat.js");
|
||||
// Import Java packages and classes
|
||||
// like import package.*; in Java
|
||||
<span class="functionref">importPackage</span>(java.awt);
|
||||
// like import java.awt.Frame in Java
|
||||
<span class="functionref">importClass</span>(java.awt.Frame);
|
||||
// Create Java Objects by "new ClassName"
|
||||
var frame = new java.awt.Frame("hello");
|
||||
// Call Java public methods from script
|
||||
frame.setVisible(true);
|
||||
// Access "JavaBean" properties like "fields"
|
||||
print(frame.title);
|
||||
</code>
|
||||
</pre>
|
||||
<p>The <span class="objectref">Packages</span> global variable can
|
||||
be used to access Java packages. Examples:
|
||||
<code>Packages.java.util.Vector</code>,
|
||||
<code>Packages.javax.swing.JFrame</code>. Please note that "java"
|
||||
is a shortcut for "Packages.java". There are equivalent shortcuts
|
||||
for javax, org, edu, com, net prefixes, so pratically all JDK
|
||||
platform classes can be accessed without the "Packages" prefix.</p>
|
||||
<p>Note that java.lang is not imported by default (unlike Java)
|
||||
because that would result in conflicts with JavaScript's built-in
|
||||
Object, Boolean, Math and so on.</p>
|
||||
<p><code>importPackage</code> and <code>importClass</code>
|
||||
functions "pollute" the global variable scope of JavaScript. To
|
||||
avoid that, you may use <span class="functionref">JavaImporter</span>.</p>
|
||||
<pre><code>
|
||||
|
||||
// <a href="source/javaimporter.js">javaimporter.js</a>
|
||||
|
||||
// create JavaImporter with specific packages and classes to import
|
||||
|
||||
var SwingGui = new <span class="functionref">JavaImporter</span>(javax.swing,
|
||||
javax.swing.event,
|
||||
javax.swing.border,
|
||||
java.awt.event);
|
||||
with (SwingGui) {
|
||||
// within this 'with' statement, we can access Swing and AWT
|
||||
// classes by unqualified (simple) names.
|
||||
|
||||
var mybutton = new JButton("test");
|
||||
var myframe = new JFrame("test");
|
||||
}
|
||||
|
||||
</code>
|
||||
</pre>
|
||||
<hr>
|
||||
<a name="jsarrays" id="jsarrays"></a>
|
||||
<h3>Creating, Converting and Using Java Arrays</h3>
|
||||
<p>
|
||||
Array element access or length access is the same as in Java.</p>
|
||||
<pre><code>
|
||||
// <a href="source/javaarray.js">javaarray.js</a>
|
||||
|
||||
// create Java String array of 5 elements
|
||||
var StringArray = Java.type("java.lang.String[]");
|
||||
var a = new StringArray(5);
|
||||
|
||||
// Accessing elements and length access is by usual Java syntax
|
||||
a[0] = "scripting is great!";
|
||||
print(a.length);
|
||||
print(a[0]);
|
||||
</code>
|
||||
</pre>
|
||||
<p>
|
||||
It is also possible to convert between JavaScript and Java arrays.
|
||||
Given a JavaScript array and a Java type, <code>Java.to</code> returns a Java array with the same initial contents, and with the specified array type.
|
||||
</p>
|
||||
<pre><code>
|
||||
var anArray = [1, "13", false]
|
||||
var javaIntArray = Java.to(anArray, "int[]")
|
||||
print(javaIntArray[0]) // prints 1
|
||||
print(javaIntArray[1]) // prints 13, as string "13" was converted to number 13 as per ECMAScript ToNumber conversion
|
||||
print(javaIntArray[2]) // prints 0, as boolean false was converted to number 0 as per ECMAScript ToNumber conversion
|
||||
</code></pre>
|
||||
<p>
|
||||
You can use either a string or a type object returned from <code>Java.type()</code> to specify the type of the array.
|
||||
You can also omit the array type, in which case a <code>Object[]</code> will be created.
|
||||
</p>
|
||||
<p>
|
||||
Given a Java array or Collection, <code>Java.from</code> returns a JavaScript array with a shallow copy of its contents. Note that in most cases, you can use Java arrays and lists natively in Nashorn; in cases where for some reason you need to have an actual JavaScript native array (e.g. to work with the array comprehensions functions), you will want to use this method.
|
||||
</p>
|
||||
<pre><code>
|
||||
var File = Java.type("java.io.File");
|
||||
var listCurDir = new File(".").listFiles();
|
||||
var jsList = Java.from(listCurDir);
|
||||
print(jsList);
|
||||
</code></pre>
|
||||
<hr>
|
||||
<a name="jsimplement" id="jsimplement"></a>
|
||||
<h3>Implementing Java interfaces</h3>
|
||||
<p>A Java interface can be implemented in JavaScript by using a
|
||||
Java anonymous class-like syntax:</p>
|
||||
<pre><code>
|
||||
// <a href="source/runnable.js">runnable.js</a>
|
||||
|
||||
var r = new java.lang.Runnable() {
|
||||
run: function() {
|
||||
print("running...\n");
|
||||
}
|
||||
};
|
||||
|
||||
// "r" can be passed to Java methods that expect java.lang.Runnable
|
||||
var th = new java.lang.Thread(r);
|
||||
th.start();
|
||||
th.join();
|
||||
</code>
|
||||
</pre>
|
||||
<p>When an interface with a single method is expected, you can pass
|
||||
a script function directly.(auto conversion)</p>
|
||||
<pre><code>
|
||||
// <a href="source/samfunc.js">samfunc.js</a>
|
||||
|
||||
function func() {
|
||||
print("I am func!");
|
||||
}
|
||||
|
||||
// pass script function for java.lang.Runnable argument
|
||||
var th = new java.lang.Thread(func);
|
||||
th.start();
|
||||
th.join();
|
||||
</code>
|
||||
</pre>
|
||||
<hr>
|
||||
<a name="jsextendabstract" id="jsextendabstract"></a>
|
||||
<h3>Extending Abstract Java Classes</h3>
|
||||
<p>
|
||||
If a Java class is abstract, you can instantiate an anonymous subclass of it using an argument list that is applicable to any of its public or protected constructors, but inserting a JavaScript object with functions properties that provide JavaScript implementations of the abstract methods. If method names are overloaded, the JavaScript function will provide implementation for all overloads. E.g.:
|
||||
</p>
|
||||
|
||||
<pre><code>
|
||||
var TimerTask = Java.type("java.util.TimerTask")
|
||||
var task = new TimerTask({ run: function() { print("Hello World!") } })
|
||||
</code></pre>
|
||||
|
||||
Nashorn supports a syntactic extension where a "new" expression followed by an argument is identical to invoking the constructor and passing the argument to it, so you can write the above example also as:
|
||||
|
||||
<pre><code>
|
||||
var task = new TimerTask {
|
||||
run: function() {
|
||||
print("Hello World!")
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
|
||||
which is very similar to Java anonymous inner class definition. On the other hand, if the type is an abstract type with a single abstract method (commonly referred to as a "SAM type") or all abstract methods it has share the same overloaded name), then instead of an object, you can just pass a function, so the above example can become even more simplified to:
|
||||
|
||||
<pre><code>
|
||||
var task = new TimerTask(function() { print("Hello World!") })
|
||||
</code></pre>
|
||||
|
||||
<p>
|
||||
Note that in every one of these cases if you are trying to instantiate an abstract class that has constructors that take some arguments, you can invoke those simply by specifying the arguments after the initial implementation object or function.
|
||||
</p>
|
||||
<p>
|
||||
The use of functions can be taken even further; if you are invoking a Java method that takes a SAM type, you can just pass in a function object, and Nashorn will know what you meant:
|
||||
</p>
|
||||
<code><pre>
|
||||
Java.type("java.util.Timer")
|
||||
timer.schedule(function() { print("Hello World!") })
|
||||
</code></pre>
|
||||
|
||||
Here, <code>Timer.schedule()</code> expects a <code>TimerTask</code> as its argument, so Nashorn creates an instance of a TimerTask subclass and uses the passed function to implement its only abstract method, run(). In this usage though, you can't use non-default constructors; the type must be either an interface, or must have a protected or public no-arg constructor.
|
||||
|
||||
<hr>
|
||||
<a name="jsextendconcrete" id="jsextendconcrete"></a>
|
||||
<h3>Extending Concrete Java Classes</h3>
|
||||
<p>
|
||||
To extend a concrete Java class, you have to use <code>Java.extend</code> function.
|
||||
<code>Java.extend</code> returns a type object for a subclass of the specified Java class (or implementation of the specified interface) that acts as a script-to-Java adapter for it.
|
||||
</p>
|
||||
<pre><code>
|
||||
// <a href="source/javaextend.js">javaextend.js</a>
|
||||
|
||||
var ArrayList = Java.type("java.util.ArrayList")
|
||||
var ArrayListExtender = Java.extend(ArrayList)
|
||||
var printSizeInvokedArrayList = new ArrayListExtender() {
|
||||
size: function() { print("size invoked!"); }
|
||||
}
|
||||
var printAddInvokedArrayList = new ArrayListExtender() {
|
||||
add: function(x, y) {
|
||||
if(typeof(y) === "undefined") {
|
||||
print("add(e) invoked!");
|
||||
} else {
|
||||
print("add(i, e) invoked!");
|
||||
}
|
||||
}
|
||||
};
|
||||
printSizeInvokedArrayList.size();
|
||||
printAddInvokedArrayList.add(33, 33);
|
||||
</code></pre>
|
||||
<p>
|
||||
The reason you must use <code>Java.extend()</code> with concrete classes is that with concrete classes, there can be a
|
||||
syntactic ambiguity if you just invoke their constructor. Consider this example:
|
||||
</p>
|
||||
<pre><code>
|
||||
var t = new java.lang.Thread({ run: function() { print("Hello!") } })
|
||||
</code></pre>
|
||||
<p>
|
||||
If we allowed subclassing of concrete classes with constructor syntax, Nashorn couldn't tell if you're creating a new
|
||||
<code>Thread</code> and passing it a <code>Runnable</code> at this point, or you are subclassing <code>Thread</code> and
|
||||
passing it a new implementation for its own <code>run()</code> method.
|
||||
</p>
|
||||
<hr>
|
||||
<a name="jsimplementmultiple" id="jsimplementmultiple"></a>
|
||||
<h3>Implementing Multiple Interfaces</h3>
|
||||
<p>
|
||||
<code>Java.extend</code> can in fact take a list of multiple types. At most one of the types can be a class, and the rest must
|
||||
be interfaces (the class doesn't have to be the first in the list). You will get back an object that extends the class and
|
||||
implements all the interfaces. (Obviously, if you only specify interfaces and no class, the object will extend <code>java.lang.Object</code>).
|
||||
<hr>
|
||||
<a name="classBoundImplementations" id="classBoundImplementations"></a>
|
||||
<h3>Class-Bound Implementations</h3>
|
||||
<p>
|
||||
The methods shown so far for extending Java classes and implementing interfaces – passing an implementation JavaScript object
|
||||
or function to a constructor, or using <code>Java.extend</code> with <code>new</code> – all produce classes that take an
|
||||
extra JavaScript object parameter in their constructors that specifies the implementation. The implementation is therefore always bound
|
||||
to the actual instance being created with <code>new</code>, and not to the whole class. This has some advantages, for example in the
|
||||
memory footprint of the runtime, as Nashorn can just create a single "universal adapter" for every combination of types being implemented.
|
||||
In reality, the below code shows that different instantiations of, say, <code>Runnable</code> have the same class regardless of them having
|
||||
different JavaScript implementation objects:
|
||||
</p>
|
||||
<pre><code>
|
||||
var Runnable = java.lang.Runnable;
|
||||
var r1 = new Runnable(function() { print("I'm runnable 1!") })
|
||||
var r2 = new Runnable(function() { print("I'm runnable 2!") })
|
||||
r1.run()
|
||||
r2.run()
|
||||
print("We share the same class: " + (r1.class === r2.class))
|
||||
</code></pre>
|
||||
<p>
|
||||
prints:
|
||||
</p>
|
||||
<pre><code>
|
||||
I'm runnable 1!
|
||||
I'm runnable 2!
|
||||
We share the same class: true
|
||||
</code></pre>
|
||||
<p>
|
||||
Sometimes, however, you'll want to extend a Java class or implement an interface with implementation bound to the class, not to
|
||||
its instances. Such a need arises, for example, when you need to pass the class for instantiation to an external API; prime example
|
||||
of this is the JavaFX framework where you need to pass an Application class to the FX API and let it instantiate it.
|
||||
</p>
|
||||
<p>
|
||||
Fortunately, there's a solution for that: <code>Java.extend()</code> – aside from being able to take any number of type parameters
|
||||
denoting a class to extend and interfaces to implement – can also take one last argument that has to be a JavaScript object
|
||||
that serves as the implementation for the methods. In this case, <code>Java.extend()</code> will create a class that has the same
|
||||
constructors as the original class had, as they don't need to take an an extra implementation object parameter. The example below
|
||||
shows how you can create class-bound implementations, and shows that in this case, the implementation classes for different invocations
|
||||
are indeed different:
|
||||
</p>
|
||||
<pre><code>
|
||||
var RunnableImpl1 = Java.extend(java.lang.Runnable, function() { print("I'm runnable 1!") })
|
||||
var RunnableImpl2 = Java.extend(java.lang.Runnable, function() { print("I'm runnable 2!") })
|
||||
var r1 = new RunnableImpl1()
|
||||
var r2 = new RunnableImpl2()
|
||||
r1.run()
|
||||
r2.run()
|
||||
print("We share the same class: " + (r1.class === r2.class))
|
||||
</code></pre>
|
||||
<p>
|
||||
prints:
|
||||
</p>
|
||||
<pre><code>
|
||||
I'm runnable 1!
|
||||
I'm runnable 2!
|
||||
We share the same class: false
|
||||
</code></pre>
|
||||
<p>
|
||||
As you can see, the major difference here is that we moved the implementation object into the invocation of <code>Java.extend</code>
|
||||
from the constructor invocations – indeed the constructor invocations now don't even need to take an extra parameter! Since
|
||||
the implementations are bound to a class, the two classes obviously can't be the same, and we indeed see that the two runnables no
|
||||
longer share the same class – every invocation of <code>Java.extend()</code> with a class-specific implementation object triggers
|
||||
the creation of a new Java adapter class.
|
||||
</p>
|
||||
<p>
|
||||
Finally, the adapter classes with class-bound implementations can <i>still</i> take an additional constructor parameter to further
|
||||
override the behavior on a per-instance basis. Thus, you can even combine the two approaches: you can provide part of the implementation
|
||||
in a class-based JavaScript implementation object passed to <code>Java.extend</code>, and part in another object passed to the constructor.
|
||||
Whatever functions are provided by the constructor-passed object will override the functions in the class-bound object.
|
||||
</p>
|
||||
<pre><code>
|
||||
var RunnableImpl = Java.extend(java.lang.Runnable, function() { print("I'm runnable 1!") })
|
||||
var r1 = new RunnableImpl()
|
||||
var r2 = new RunnableImpl(function() { print("I'm runnable 2!") })
|
||||
r1.run()
|
||||
r2.run()
|
||||
print("We share the same class: " + (r1.class === r2.class))
|
||||
</code></pre>
|
||||
<p>
|
||||
prints:
|
||||
</p>
|
||||
<pre><code>
|
||||
I'm runnable 1!
|
||||
I'm runnable 2!
|
||||
We share the same class: true
|
||||
</code></pre>
|
||||
<hr>
|
||||
<a name="jsoverload" id="jsoverload"></a>
|
||||
<h3>Overload Resolution</h3>
|
||||
<p>Java methods can be overloaded by argument types. In Java,
|
||||
overload resolution occurs at compile time (performed by javac).
|
||||
When calling Java methods from Nashorn, the appropriate method will be
|
||||
selected based on the argument types at invocation time. You do not need
|
||||
to do anything special – the correct Java method overload variant
|
||||
is selected based automatically. You still have the option of explicitly
|
||||
specifying a particular overload variant. Reasons for this include
|
||||
either running into a genuine ambiguity with actual argument types, or
|
||||
rarely reasons of performance – if you specify the actual overload
|
||||
then the engine doesn't have to perform resolution during invocation.
|
||||
Individual overloads of a Java methods are exposed as special properties
|
||||
with the name of the method followed with its signature in parentheses.
|
||||
You can invoke them like this:</p>
|
||||
<pre><code>
|
||||
// <a href="source/overload.js">overload.js</a>
|
||||
|
||||
var out = java.lang.System.out;
|
||||
|
||||
// select a particular print function
|
||||
out["println(Object)"]("hello");
|
||||
</code>
|
||||
</pre>
|
||||
<p>
|
||||
Note that you normally don't even have to use qualified class names in
|
||||
the signatures as long as the unqualified name of the type is sufficient
|
||||
for uniquely identifying the signature. In practice this means that only
|
||||
in the extremely unlikely case that two overloads only differ in
|
||||
parameter types that have identical unqualified names but come from
|
||||
different packages would you need to use the fully qualified name of the
|
||||
class.
|
||||
</p>
|
||||
<hr>
|
||||
<a name="dataTypeMapping" id="dataTypeMapping"></a>
|
||||
<h3>Mapping of Data Types Between Java and JavaScript</h3>
|
||||
<p>
|
||||
We have previously shown some of the data type mappings between Java and JavaScript.
|
||||
We saw that arrays need to be explicitly converted. We have also shown that JavaScript functions
|
||||
are automatically converted to SAM types when passed as parameters to Java methods. Most other
|
||||
conversions work as you would expect.
|
||||
</p>
|
||||
<p>
|
||||
Every JavaScript object is also a <code>java.util.Map</code> so APIs receiving maps will receive them directly.
|
||||
</p>
|
||||
<p>
|
||||
When numbers are passed to a Java API, they will be converted to the expected target numeric type, either boxed or
|
||||
primitive, but if the target type is less specific, say <code>Number</code> or <code>Object</code>, you can only
|
||||
count on them being a <code>Number</code>, and have to test specifically for whether it's a boxed <code>Double</code>,
|
||||
<code>Integer</code>, <code>Long</code>, etc. – it can be any of these due to internal optimizations. Also, you
|
||||
can pass any JavaScript value to a Java API expecting either a boxed or primitive number; the JavaScript specification's
|
||||
<code>ToNumber</code> conversion algorithm will be applied to the value.
|
||||
</p>
|
||||
<p>
|
||||
In a similar vein, if a Java method expects a <code>String</code> or a <code>Boolean</code>, the values will be
|
||||
converted using all conversions allowed by the JavaScript specification's <code>ToString</code> and <code>ToBoolean</code>
|
||||
conversions.
|
||||
</p>
|
||||
<p>
|
||||
Finally, a word of caution about strings. Due to internal performance optimizations of string operations, JavaScript strings are
|
||||
not always necessarily of type <code>java.lang.String</code>, but they will always be of type <code>java.lang.CharSequence</code>.
|
||||
If you pass them to a Java method that expects a <code>java.lang.String</code> parameter, then you will naturally receive a Java
|
||||
String, but if the signature of your method is more generic, i.e. it receives a <code>java.lang.Object</code> parameter, you can
|
||||
end up with an object of private engine implementation class that implements <code>CharSequence</code> but is not a Java String.
|
||||
</p>
|
||||
<hr>
|
||||
<a name="engineimpl" id="engineimpl"></a>
|
||||
<h2>Implementing Your Own Script Engine</h2>
|
||||
<p>We will not cover implementation of JSR-223 compliant script
|
||||
engines in detail. Minimally, you need to implement the
|
||||
<code>javax.script.ScriptEngine</code> and
|
||||
<code>javax.script.ScriptEngineFactory</code> interfaces. The
|
||||
abstract class <code>javax.script.AbstractScriptEngine</code>
|
||||
provides useful defaults for a few methods of the
|
||||
<code>ScriptEngine</code> interface.</p>
|
||||
<p>Before starting to implement a JSR-223 engine, you may want to
|
||||
check <a href="http://java.net/projects/Scripting">http://java.net/projects/Scripting</a>
|
||||
project. This project maintains JSR-223 implementations for many
|
||||
popular open source scripting languages.</p>
|
||||
<hr>
|
||||
<a name="refs" id="refs"></a>
|
||||
<h2>References</h2>
|
||||
<ul>
|
||||
<li><a href="http://jcp.org/en/jsr/detail?id=223">JSR-223 Scripting
|
||||
for the Java Platform</a></li>
|
||||
<li><a href="http://java.net/projects/Scripting">http://java.net/projects/Scripting
|
||||
</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<div class="hr"><hr></div>
|
||||
<table summary="layout" border="0" width="100%">
|
||||
<tbody><tr valign="TOP">
|
||||
<td width="30%"> <img src="Java%20Scripting%20Programmer%27s%20Guide_files/logo_oracle_footer.gif" alt="Oracle and/or its affiliates" border="0" height="29" width="100"><br>
|
||||
<font size="+1"> <i>Java Technology</i></font> </td>
|
||||
|
||||
<td width="30%">
|
||||
<p><font size="-2">
|
||||
<a href="http://docs.oracle.com/javase/6/docs/legal/cpyr.html">Copyright <20></a> 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
</font></p>
|
||||
</td>
|
||||
<td width="30%">
|
||||
<p align="right"><font size="-2"><a href="http://download.oracle.com/javase/feedback.html">Contact Us</a></font></p><font size="-2">
|
||||
</font></td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
<div class="hr"><hr></div>
|
||||
</div>
|
||||
|
||||
<!-- Start SiteCatalyst code -->
|
||||
<script language="JavaScript" src="Java%20Scripting%20Programmer%27s%20Guide_files/s_code_download.js"></script>
|
||||
<script language="JavaScript" src="Java%20Scripting%20Programmer%27s%20Guide_files/s_code.js"></script>
|
||||
|
||||
<!-- ********** DO NOT ALTER ANYTHING BELOW THIS LINE ! *********** -->
|
||||
<!-- Below code will send the info to Omniture server -->
|
||||
<script language="javascript">var s_code=s.t();if(s_code)document.write(s_code)</script>
|
||||
|
||||
<!-- End SiteCatalyst code -->
|
||||
|
||||
|
||||
|
||||
</body></html>
|
||||
46
doc/nashorn/source/EvalFile.java
Normal file
46
doc/nashorn/source/EvalFile.java
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptEngineManager;
|
||||
|
||||
@SuppressWarnings("javadoc")
|
||||
public class EvalFile {
|
||||
public static void main(final String[] args) throws Exception {
|
||||
// create a script engine manager
|
||||
final ScriptEngineManager factory = new ScriptEngineManager();
|
||||
// create JavaScript engine
|
||||
final ScriptEngine engine = factory.getEngineByName("nashorn");
|
||||
// evaluate JavaScript code from given file - specified by first argument
|
||||
engine.eval(new java.io.FileReader(args[0]));
|
||||
}
|
||||
}
|
||||
|
||||
46
doc/nashorn/source/EvalScript.java
Normal file
46
doc/nashorn/source/EvalScript.java
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptEngineManager;
|
||||
|
||||
@SuppressWarnings("javadoc")
|
||||
public class EvalScript {
|
||||
public static void main(final String[] args) throws Exception {
|
||||
// create a script engine manager
|
||||
final ScriptEngineManager factory = new ScriptEngineManager();
|
||||
// create a JavaScript engine
|
||||
final ScriptEngine engine = factory.getEngineByName("nashorn");
|
||||
// evaluate JavaScript code from String
|
||||
engine.eval("print('Hello, World')");
|
||||
}
|
||||
}
|
||||
|
||||
58
doc/nashorn/source/InvokeScriptFunction.java
Normal file
58
doc/nashorn/source/InvokeScriptFunction.java
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import javax.script.Invocable;
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptEngineManager;
|
||||
|
||||
@SuppressWarnings("javadoc")
|
||||
public class InvokeScriptFunction {
|
||||
public static void main(final String[] args) throws Exception {
|
||||
final ScriptEngineManager manager = new ScriptEngineManager();
|
||||
final ScriptEngine engine = manager.getEngineByName("nashorn");
|
||||
|
||||
// JavaScript code in a String
|
||||
final String script = "function hello(name) { print('Hello, ' + name); }";
|
||||
// evaluate script
|
||||
engine.eval(script);
|
||||
|
||||
// javax.script.Invocable is an optional interface.
|
||||
// Check whether your script engine implements or not!
|
||||
// Note that the JavaScript engine implements Invocable interface.
|
||||
final Invocable inv = (Invocable) engine;
|
||||
|
||||
// invoke the global function named "hello"
|
||||
inv.invokeFunction("hello", "Scripting!!" );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
59
doc/nashorn/source/InvokeScriptMethod.java
Normal file
59
doc/nashorn/source/InvokeScriptMethod.java
Normal file
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import javax.script.Invocable;
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptEngineManager;
|
||||
|
||||
@SuppressWarnings("javadoc")
|
||||
public class InvokeScriptMethod {
|
||||
public static void main(final String[] args) throws Exception {
|
||||
final ScriptEngineManager manager = new ScriptEngineManager();
|
||||
final ScriptEngine engine = manager.getEngineByName("nashorn");
|
||||
|
||||
// JavaScript code in a String. This code defines a script object 'obj'
|
||||
// with one method called 'hello'.
|
||||
final String script = "var obj = new Object(); obj.hello = function(name) { print('Hello, ' + name); }";
|
||||
// evaluate script
|
||||
engine.eval(script);
|
||||
|
||||
// javax.script.Invocable is an optional interface.
|
||||
// Check whether your script engine implements or not!
|
||||
// Note that the JavaScript engine implements Invocable interface.
|
||||
final Invocable inv = (Invocable) engine;
|
||||
|
||||
// get script object on which we want to call the method
|
||||
final Object obj = engine.get("obj");
|
||||
|
||||
// invoke the method named "hello" on the script object "obj"
|
||||
inv.invokeMethod(obj, "hello", "Script Method !!" );
|
||||
}
|
||||
}
|
||||
63
doc/nashorn/source/MultiScopes.java
Normal file
63
doc/nashorn/source/MultiScopes.java
Normal file
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import javax.script.Bindings;
|
||||
import javax.script.ScriptContext;
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptEngineManager;
|
||||
import javax.script.SimpleScriptContext;
|
||||
|
||||
@SuppressWarnings("javadoc")
|
||||
public class MultiScopes {
|
||||
public static void main(final String[] args) throws Exception {
|
||||
final ScriptEngineManager manager = new ScriptEngineManager();
|
||||
final ScriptEngine engine = manager.getEngineByName("nashorn");
|
||||
|
||||
engine.put("x", "hello");
|
||||
// print global variable "x"
|
||||
engine.eval("print(x);");
|
||||
// the above line prints "hello"
|
||||
|
||||
// Now, pass a different script context
|
||||
final ScriptContext newContext = new SimpleScriptContext();
|
||||
newContext.setBindings(engine.createBindings(), ScriptContext.ENGINE_SCOPE);
|
||||
final Bindings engineScope = newContext.getBindings(ScriptContext.ENGINE_SCOPE);
|
||||
|
||||
// add new variable "x" to the new engineScope
|
||||
engineScope.put("x", "world");
|
||||
|
||||
// execute the same script - but this time pass a different script context
|
||||
engine.eval("print(x);", newContext);
|
||||
// the above line prints "world"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
60
doc/nashorn/source/RunnableImpl.java
Normal file
60
doc/nashorn/source/RunnableImpl.java
Normal file
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import javax.script.Invocable;
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptEngineManager;
|
||||
|
||||
@SuppressWarnings("javadoc")
|
||||
public class RunnableImpl {
|
||||
public static void main(final String[] args) throws Exception {
|
||||
final ScriptEngineManager manager = new ScriptEngineManager();
|
||||
final ScriptEngine engine = manager.getEngineByName("nashorn");
|
||||
|
||||
// JavaScript code in a String
|
||||
final String script = "function run() { print('run called'); }";
|
||||
|
||||
// evaluate script
|
||||
engine.eval(script);
|
||||
|
||||
final Invocable inv = (Invocable) engine;
|
||||
|
||||
// get Runnable interface object from engine. This interface methods
|
||||
// are implemented by script functions with the matching name.
|
||||
final Runnable r = inv.getInterface(Runnable.class);
|
||||
|
||||
// start a new thread that runs the script implemented
|
||||
// runnable interface
|
||||
final Thread th = new Thread(r);
|
||||
th.start();
|
||||
th.join();
|
||||
}
|
||||
}
|
||||
63
doc/nashorn/source/RunnableImplObject.java
Normal file
63
doc/nashorn/source/RunnableImplObject.java
Normal file
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import javax.script.Invocable;
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptEngineManager;
|
||||
|
||||
@SuppressWarnings("javadoc")
|
||||
public class RunnableImplObject {
|
||||
public static void main(final String[] args) throws Exception {
|
||||
final ScriptEngineManager manager = new ScriptEngineManager();
|
||||
final ScriptEngine engine = manager.getEngineByName("nashorn");
|
||||
|
||||
// JavaScript code in a String
|
||||
final String script = "var obj = new Object(); obj.run = function() { print('run method called'); }";
|
||||
|
||||
// evaluate script
|
||||
engine.eval(script);
|
||||
|
||||
// get script object on which we want to implement the interface with
|
||||
final Object obj = engine.get("obj");
|
||||
|
||||
final Invocable inv = (Invocable) engine;
|
||||
|
||||
// get Runnable interface object from engine. This interface methods
|
||||
// are implemented by script methods of object 'obj'
|
||||
final Runnable r = inv.getInterface(obj, Runnable.class);
|
||||
|
||||
// start a new thread that runs the script implemented
|
||||
// runnable interface
|
||||
final Thread th = new Thread(r);
|
||||
th.start();
|
||||
th.join();
|
||||
}
|
||||
}
|
||||
53
doc/nashorn/source/ScriptVars.java
Normal file
53
doc/nashorn/source/ScriptVars.java
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptEngineManager;
|
||||
|
||||
@SuppressWarnings("javadoc")
|
||||
public class ScriptVars {
|
||||
public static void main(final String[] args) throws Exception {
|
||||
final ScriptEngineManager manager = new ScriptEngineManager();
|
||||
final ScriptEngine engine = manager.getEngineByName("nashorn");
|
||||
|
||||
final File f = new File("test.txt");
|
||||
// expose File object as variable to script
|
||||
engine.put("file", f);
|
||||
|
||||
// evaluate a script string. The script accesses "file"
|
||||
// variable and calls method on it
|
||||
engine.eval("print(file.getAbsolutePath())");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
45
doc/nashorn/source/importpackageclass.js
Normal file
45
doc/nashorn/source/importpackageclass.js
Normal file
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
// load compatibility script
|
||||
load("nashorn:mozilla_compat.js");
|
||||
|
||||
// Import Java packages and classes
|
||||
// like import package.*; in Java
|
||||
importPackage(java.awt);
|
||||
// like import java.awt.Frame in Java
|
||||
importClass(java.awt.Frame);
|
||||
// Create Java Objects by "new ClassName"
|
||||
var frame = new java.awt.Frame("hello");
|
||||
// Call Java public methods from script
|
||||
frame.setVisible(true);
|
||||
// Access "JavaBean" properties like "fields"
|
||||
print(frame.title);
|
||||
52
doc/nashorn/source/javaarray.js
Normal file
52
doc/nashorn/source/javaarray.js
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
// create Java String array of 5 elements
|
||||
var StringArray = Java.type("java.lang.String[]");
|
||||
var a = new StringArray(5);
|
||||
|
||||
// Accessing elements and length access is by usual Java syntax
|
||||
a[0] = "scripting is great!";
|
||||
print(a.length);
|
||||
print(a[0]);
|
||||
|
||||
// convert a script array to Java array
|
||||
var anArray = [1, "13", false];
|
||||
var javaIntArray = Java.to(anArray, "int[]");
|
||||
print(javaIntArray[0]);// prints 1
|
||||
print(javaIntArray[1]); // prints 13, as string "13" was converted to number 13 as per ECMAScript ToNumber conversion
|
||||
print(javaIntArray[2]);// prints 0, as boolean false was converted to number 0 as per ECMAScript ToNumber conversion
|
||||
|
||||
// convert a Java array to a JavaScript array
|
||||
var File = Java.type("java.io.File");
|
||||
var listCurDir = new File(".").listFiles();
|
||||
var jsList = Java.from(listCurDir);
|
||||
print(jsList);
|
||||
47
doc/nashorn/source/javaextend.js
Normal file
47
doc/nashorn/source/javaextend.js
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
var ArrayList = Java.type("java.util.ArrayList")
|
||||
var ArrayListExtender = Java.extend(ArrayList)
|
||||
var printSizeInvokedArrayList = new ArrayListExtender() {
|
||||
size: function() { print("size invoked!"); }
|
||||
}
|
||||
var printAddInvokedArrayList = new ArrayListExtender() {
|
||||
add: function(x, y) {
|
||||
if(typeof(y) === "undefined") {
|
||||
print("add(e) invoked!");
|
||||
} else {
|
||||
print("add(i, e) invoked!");
|
||||
}
|
||||
}
|
||||
};
|
||||
printSizeInvokedArrayList.size();
|
||||
printAddInvokedArrayList.add(33, 33);
|
||||
48
doc/nashorn/source/javaimporter.js
Normal file
48
doc/nashorn/source/javaimporter.js
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
// create JavaImporter with specific packages and classes to import
|
||||
|
||||
var SwingGui = new JavaImporter(javax.swing,
|
||||
javax.swing.event,
|
||||
javax.swing.border,
|
||||
java.awt.event);
|
||||
with (SwingGui) {
|
||||
// within this 'with' statement, we can access Swing and AWT
|
||||
// classes by unqualified (simple) names.
|
||||
|
||||
var mybutton = new JButton("test");
|
||||
print(mybutton);
|
||||
var myframe = new JFrame("test");
|
||||
print(myframe);
|
||||
}
|
||||
|
||||
|
||||
50
doc/nashorn/source/javatypes.js
Normal file
50
doc/nashorn/source/javatypes.js
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
// accessing java types
|
||||
var arrayListType = Java.type("java.util.ArrayList")
|
||||
var intType = Java.type("int")
|
||||
var stringArrayType = Java.type("java.lang.String[]")
|
||||
var int2DArrayType = Java.type("int[][]")
|
||||
|
||||
// Using java types
|
||||
var ArrayList = Java.type("java.util.ArrayList")
|
||||
var anArrayList = new ArrayList
|
||||
var anArrayListWithSize = new ArrayList(16)
|
||||
|
||||
// fully qualified name
|
||||
var ftype = Java.type("java.awt.geom.Arc2D$Float")
|
||||
|
||||
// inner class property
|
||||
var arctype = Java.type("java.awt.geom.Arc2D")
|
||||
var ftype = arctype.Float
|
||||
|
||||
36
doc/nashorn/source/overload.js
Normal file
36
doc/nashorn/source/overload.js
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
var out = java.lang.System.out;
|
||||
|
||||
// select a particular print function
|
||||
out["println(java.lang.Object)"]("hello");
|
||||
|
||||
41
doc/nashorn/source/runnable.js
Normal file
41
doc/nashorn/source/runnable.js
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
var r = new java.lang.Runnable() {
|
||||
run: function() {
|
||||
print("running...\n");
|
||||
}
|
||||
};
|
||||
|
||||
// "r" can be passed to Java methods that expect java.lang.Runnable
|
||||
var th = new java.lang.Thread(r);
|
||||
th.start();
|
||||
th.join();
|
||||
39
doc/nashorn/source/samfunc.js
Normal file
39
doc/nashorn/source/samfunc.js
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
function func() {
|
||||
print("I am func!");
|
||||
}
|
||||
|
||||
// pass script function for java.lang.Runnable argument
|
||||
var th = new java.lang.Thread(func);
|
||||
th.start();
|
||||
th.join();
|
||||
32
doc/nashorn/source/test.js
Normal file
32
doc/nashorn/source/test.js
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
print("This is hello from test.js");
|
||||
@@ -137,8 +137,6 @@ TEST FAILURE</code></pre>
|
||||
<h4 id="timeout_factor-1">TIMEOUT_FACTOR</h4>
|
||||
<p>The timeout factor (<code>-timeoutFactor</code>).</p>
|
||||
<p>Defaults to 4.</p>
|
||||
<h4 id="failure_handler_timeout">FAILURE_HANDLER_TIMEOUT</h4>
|
||||
<p>Sets the argument <code>-timeoutHandlerTimeout</code> for JTReg. The default value is 0. This is only valid if the failure handler is built.</p>
|
||||
<h4 id="test_mode">TEST_MODE</h4>
|
||||
<p>The test mode (<code>agentvm</code> or <code>othervm</code>).</p>
|
||||
<p>Defaults to <code>agentvm</code>.</p>
|
||||
@@ -155,10 +153,8 @@ TEST FAILURE</code></pre>
|
||||
<p>Limit memory consumption (<code>-Xmx</code> and <code>-vmoption:-Xmx</code>, or none).</p>
|
||||
<p>Limit memory consumption for JTReg test framework and VM under test. Set to 0 to disable the limits.</p>
|
||||
<p>Defaults to 512m, except for hotspot, where it defaults to 0 (no limit).</p>
|
||||
<h4 id="max_output">MAX_OUTPUT</h4>
|
||||
<p>Set the property <code>javatest.maxOutputSize</code> for the launcher, to change the default JTReg log limit.</p>
|
||||
<h4 id="keywords">KEYWORDS</h4>
|
||||
<p>JTReg keywords sent to JTReg using <code>-k</code>. Please be careful in making sure that spaces and special characters (like <code>!</code>) are properly quoted. To avoid some issues, the special value <code>%20</code> can be used instead of space.</p>
|
||||
<p>JTReg kewords sent to JTReg using <code>-k</code>. Please be careful in making sure that spaces and special characters (like <code>!</code>) are properly quoted. To avoid some issues, the special value <code>%20</code> can be used instead of space.</p>
|
||||
<h4 id="extra_problem_lists">EXTRA_PROBLEM_LISTS</h4>
|
||||
<p>Use additional problem lists file or files, in addition to the default ProblemList.txt located at the JTReg test roots.</p>
|
||||
<p>If multiple file names are specified, they should be separated by space (or, to help avoid quoting issues, the special value <code>%20</code>).</p>
|
||||
@@ -174,8 +170,6 @@ TEST FAILURE</code></pre>
|
||||
<h4 id="vm_options-1">VM_OPTIONS</h4>
|
||||
<p>Additional Java options to be used when compiling and running classes (sent to JTReg as <code>-vmoption</code>).</p>
|
||||
<p>This option is only needed in special circumstances. To pass Java options to your test classes, use <code>JAVA_OPTIONS</code>.</p>
|
||||
<h4 id="launcher_options">LAUNCHER_OPTIONS</h4>
|
||||
<p>Additional Java options that are sent to the java launcher that starts the JTReg harness.</p>
|
||||
<h4 id="aot_modules-1">AOT_MODULES</h4>
|
||||
<p>Generate AOT modules before testing for the specified module, or set of modules. If multiple modules are specified, they should be separated by space (or, to help avoid quoting issues, the special value <code>%20</code>).</p>
|
||||
<h4 id="retry_count">RETRY_COUNT</h4>
|
||||
@@ -211,19 +205,14 @@ TEST FAILURE</code></pre>
|
||||
<p>Docker tests with default parameters may fail on systems with glibc versions not compatible with the one used in the default docker image (e.g., Oracle Linux 7.6 for x86). For example, they pass on Ubuntu 16.04 but fail on Ubuntu 18.04 if run like this on x86:</p>
|
||||
<pre><code>$ make test TEST="jtreg:test/hotspot/jtreg/containers/docker"</code></pre>
|
||||
<p>To run these tests correctly, additional parameters for the correct docker image are required on Ubuntu 18.04 by using <code>JAVA_OPTIONS</code>.</p>
|
||||
<pre><code>$ make test TEST="jtreg:test/hotspot/jtreg/containers/docker" \
|
||||
JTREG="JAVA_OPTIONS=-Djdk.test.docker.image.name=ubuntu
|
||||
-Djdk.test.docker.image.version=latest"</code></pre>
|
||||
<pre><code>$ make test TEST="jtreg:test/hotspot/jtreg/containers/docker" JTREG="JAVA_OPTIONS=-Djdk.test.docker.image.name=ubuntu -Djdk.test.docker.image.version=latest"</code></pre>
|
||||
<h3 id="non-us-locale">Non-US locale</h3>
|
||||
<p>If your locale is non-US, some tests are likely to fail. To work around this you can set the locale to US. On Unix platforms simply setting <code>LANG="en_US"</code> in the environment before running tests should work. On Windows, setting <code>JTREG="VM_OPTIONS=-Duser.language=en -Duser.country=US"</code> helps for most, but not all test cases.</p>
|
||||
<p>For example:</p>
|
||||
<p>If your locale is non-US, some tests are likely to fail. To work around this you can set the locale to US. On Unix platforms simply setting <code>LANG="en_US"</code> in the environment before running tests should work. On Windows, setting <code>JTREG="VM_OPTIONS=-Duser.language=en -Duser.country=US"</code> helps for most, but not all test cases. For example:</p>
|
||||
<pre><code>$ export LANG="en_US" && make test TEST=...
|
||||
$ make test JTREG="VM_OPTIONS=-Duser.language=en -Duser.country=US" TEST=...</code></pre>
|
||||
<h3 id="pkcs11-tests">PKCS11 Tests</h3>
|
||||
<p>It is highly recommended to use the latest NSS version when running PKCS11 tests. Improper NSS version may lead to unexpected failures which are hard to diagnose. For example, sun/security/pkcs11/Secmod/AddTrustedCert.java may fail on Ubuntu 18.04 with the default NSS version in the system. To run these tests correctly, the system property <code>test.nss.lib.paths</code> is required on Ubuntu 18.04 to specify the alternative NSS lib directories.</p>
|
||||
<p>For example:</p>
|
||||
<pre><code>$ make test TEST="jtreg:sun/security/pkcs11/Secmod/AddTrustedCert.java" \
|
||||
JTREG="JAVA_OPTIONS=-Dtest.nss.lib.paths=/path/to/your/latest/NSS-libs"</code></pre>
|
||||
<p>It is highly recommended to use the latest NSS version when running PKCS11 tests. Improper NSS version may lead to unexpected failures which are hard to diagnose. For example, sun/security/pkcs11/Secmod/AddTrustedCert.java may fail on Ubuntu 18.04 with the default NSS version in the system. To run these tests correctly, the system property <code>test.nss.lib.paths</code> is required on Ubuntu 18.04 to specify the alternative NSS lib directories. For example:</p>
|
||||
<pre><code>$ make test TEST="jtreg:sun/security/pkcs11/Secmod/AddTrustedCert.java" JTREG="JAVA_OPTIONS=-Dtest.nss.lib.paths=/path/to/your/latest/NSS-libs"</code></pre>
|
||||
<p>For more notes about the PKCS11 tests, please refer to test/jdk/sun/security/pkcs11/README.</p>
|
||||
<h3 id="client-ui-tests">Client UI Tests</h3>
|
||||
<p>Some Client UI tests use key sequences which may be reserved by the operating system. Usually that causes the test failure. So it is highly recommended to disable system key shortcuts prior testing. The steps to access and disable system key shortcuts for various platforms are provided below.</p>
|
||||
|
||||
158
doc/testing.md
158
doc/testing.md
@@ -37,11 +37,11 @@ Note that this option should point to the JTReg home, i.e. the top directory,
|
||||
containing `lib/jtreg.jar` etc. (An alternative is to set the `JT_HOME`
|
||||
environment variable to point to the JTReg home before running `configure`.)
|
||||
|
||||
To be able to run microbenchmarks, `configure` needs to know where to find the
|
||||
JMH dependency. Use `--with-jmh=<path to JMH jars>` to point to a directory
|
||||
containing the core JMH and transitive dependencies. The recommended
|
||||
dependencies can be retrieved by running `sh make/devkit/createJMHBundle.sh`,
|
||||
after which `--with-jmh=build/jmh/jars` should work.
|
||||
To be able to run microbenchmarks, `configure` needs to know where to find
|
||||
the JMH dependency. Use `--with-jmh=<path to JMH jars>` to point to a directory
|
||||
containing the core JMH and transitive dependencies. The recommended dependencies
|
||||
can be retrieved by running `sh make/devkit/createJMHBundle.sh`, after which
|
||||
`--with-jmh=build/jmh/jars` should work.
|
||||
|
||||
## Test selection
|
||||
|
||||
@@ -182,10 +182,10 @@ variables.
|
||||
These variables use a keyword=value approach to allow multiple values to be
|
||||
set. So, for instance, `JTREG="JOBS=1;TIMEOUT_FACTOR=8"` will set the JTReg
|
||||
concurrency level to 1 and the timeout factor to 8. This is equivalent to
|
||||
setting `JTREG_JOBS=1 JTREG_TIMEOUT_FACTOR=8`, but using the keyword format
|
||||
means that the `JTREG` variable is parsed and verified for correctness, so
|
||||
`JTREG="TMIEOUT_FACTOR=8"` would give an error, while `JTREG_TMIEOUT_FACTOR=8`
|
||||
would just pass unnoticed.
|
||||
setting `JTREG_JOBS=1 JTREG_TIMEOUT_FACTOR=8`, but using the keyword format means that
|
||||
the `JTREG` variable is parsed and verified for correctness, so
|
||||
`JTREG="TMIEOUT_FACTOR=8"` would give an error, while `JTREG_TMIEOUT_FACTOR=8` would just
|
||||
pass unnoticed.
|
||||
|
||||
To separate multiple keyword=value pairs, use `;` (semicolon). Since the shell
|
||||
normally eats `;`, the recommended usage is to write the assignment inside
|
||||
@@ -203,10 +203,9 @@ test suites.
|
||||
|
||||
### General keywords (TEST_OPTS)
|
||||
|
||||
Some keywords are valid across different test suites. If you want to run tests
|
||||
from multiple test suites, or just don't want to care which test suite specific
|
||||
control variable to use, then you can use the general TEST_OPTS control
|
||||
variable.
|
||||
Some keywords are valid across different test suites. If you want to run
|
||||
tests from multiple test suites, or just don't want to care which test suite specific
|
||||
control variable to use, then you can use the general TEST_OPTS control variable.
|
||||
|
||||
There are also some keywords that applies globally to the test runner system,
|
||||
not to any specific test suites. These are also available as TEST_OPTS keywords.
|
||||
@@ -253,13 +252,12 @@ for only recently changed code. JCOV_DIFF_CHANGESET specifies a source
|
||||
revision. A textual report will be generated showing coverage of the diff
|
||||
between the specified revision and the repository tip.
|
||||
|
||||
The report is stored in
|
||||
`build/$BUILD/test-results/jcov-output/diff_coverage_report` file.
|
||||
The report is stored in `build/$BUILD/test-results/jcov-output/diff_coverage_report`
|
||||
file.
|
||||
|
||||
### JTReg keywords
|
||||
|
||||
#### JOBS
|
||||
|
||||
The test concurrency (`-concurrency`).
|
||||
|
||||
Defaults to TEST_JOBS (if set by `--with-test-jobs=`), otherwise it defaults to
|
||||
@@ -267,43 +265,32 @@ JOBS, except for Hotspot, where the default is *number of CPU cores/2*,
|
||||
but never more than *memory size in GB/2*.
|
||||
|
||||
#### TIMEOUT_FACTOR
|
||||
|
||||
The timeout factor (`-timeoutFactor`).
|
||||
|
||||
Defaults to 4.
|
||||
|
||||
#### FAILURE_HANDLER_TIMEOUT
|
||||
|
||||
Sets the argument `-timeoutHandlerTimeout` for JTReg. The default value is 0.
|
||||
This is only valid if the failure handler is built.
|
||||
|
||||
#### TEST_MODE
|
||||
|
||||
The test mode (`agentvm` or `othervm`).
|
||||
|
||||
Defaults to `agentvm`.
|
||||
|
||||
#### ASSERT
|
||||
|
||||
Enable asserts (`-ea -esa`, or none).
|
||||
|
||||
Set to `true` or `false`. If true, adds `-ea -esa`. Defaults to true, except
|
||||
for hotspot.
|
||||
|
||||
#### VERBOSE
|
||||
|
||||
The verbosity level (`-verbose`).
|
||||
|
||||
Defaults to `fail,error,summary`.
|
||||
|
||||
#### RETAIN
|
||||
|
||||
What test data to retain (`-retain`).
|
||||
|
||||
Defaults to `fail,error`.
|
||||
|
||||
#### MAX_MEM
|
||||
|
||||
Limit memory consumption (`-Xmx` and `-vmoption:-Xmx`, or none).
|
||||
|
||||
Limit memory consumption for JTReg test framework and VM under test. Set to 0
|
||||
@@ -311,14 +298,9 @@ to disable the limits.
|
||||
|
||||
Defaults to 512m, except for hotspot, where it defaults to 0 (no limit).
|
||||
|
||||
#### MAX_OUTPUT
|
||||
|
||||
Set the property `javatest.maxOutputSize` for the launcher, to change the
|
||||
default JTReg log limit.
|
||||
|
||||
#### KEYWORDS
|
||||
|
||||
JTReg keywords sent to JTReg using `-k`. Please be careful in making sure that
|
||||
JTReg kewords sent to JTReg using `-k`. Please be careful in making sure that
|
||||
spaces and special characters (like `!`) are properly quoted. To avoid some
|
||||
issues, the special value `%20` can be used instead of space.
|
||||
|
||||
@@ -341,30 +323,23 @@ Set to `true` or `false`.
|
||||
If `true`, JTReg will use `-match:` option, otherwise `-exclude:` will be used.
|
||||
Default is `false`.
|
||||
|
||||
#### OPTIONS
|
||||
|
||||
#### OPTIONS
|
||||
Additional options to the JTReg test framework.
|
||||
|
||||
Use `JTREG="OPTIONS=--help all"` to see all available JTReg options.
|
||||
|
||||
#### JAVA_OPTIONS
|
||||
|
||||
Additional Java options for running test classes (sent to JTReg as
|
||||
`-javaoption`).
|
||||
|
||||
#### VM_OPTIONS
|
||||
|
||||
Additional Java options to be used when compiling and running classes (sent to
|
||||
JTReg as `-vmoption`).
|
||||
|
||||
This option is only needed in special circumstances. To pass Java options to
|
||||
your test classes, use `JAVA_OPTIONS`.
|
||||
|
||||
#### LAUNCHER_OPTIONS
|
||||
|
||||
Additional Java options that are sent to the java launcher that starts the
|
||||
JTReg harness.
|
||||
|
||||
#### AOT_MODULES
|
||||
|
||||
Generate AOT modules before testing for the specified module, or set of
|
||||
@@ -378,7 +353,6 @@ Retry failed tests up to a set number of times. Defaults to 0.
|
||||
### Gtest keywords
|
||||
|
||||
#### REPEAT
|
||||
|
||||
The number of times to repeat the tests (`--gtest_repeat`).
|
||||
|
||||
Default is 1. Set to -1 to repeat indefinitely. This can be especially useful
|
||||
@@ -386,7 +360,6 @@ combined with `OPTIONS=--gtest_break_on_failure` to reproduce an intermittent
|
||||
problem.
|
||||
|
||||
#### OPTIONS
|
||||
|
||||
Additional options to the Gtest test framework.
|
||||
|
||||
Use `GTEST="OPTIONS=--help"` to see all available Gtest options.
|
||||
@@ -400,127 +373,98 @@ modules. If multiple modules are specified, they should be separated by space
|
||||
### Microbenchmark keywords
|
||||
|
||||
#### FORK
|
||||
|
||||
Override the number of benchmark forks to spawn. Same as specifying `-f <num>`.
|
||||
|
||||
#### ITER
|
||||
|
||||
Number of measurement iterations per fork. Same as specifying `-i <num>`.
|
||||
|
||||
#### TIME
|
||||
|
||||
Amount of time to spend in each measurement iteration, in seconds. Same as
|
||||
specifying `-r <num>`
|
||||
|
||||
#### WARMUP_ITER
|
||||
|
||||
Number of warmup iterations to run before the measurement phase in each fork.
|
||||
Same as specifying `-wi <num>`.
|
||||
|
||||
#### WARMUP_TIME
|
||||
|
||||
Amount of time to spend in each warmup iteration. Same as specifying `-w <num>`.
|
||||
|
||||
#### RESULTS_FORMAT
|
||||
|
||||
Specify to have the test run save a log of the values. Accepts the same values
|
||||
as `-rff`, i.e., `text`, `csv`, `scsv`, `json`, or `latex`.
|
||||
|
||||
#### VM_OPTIONS
|
||||
|
||||
Additional VM arguments to provide to forked off VMs. Same as `-jvmArgs <args>`
|
||||
|
||||
#### OPTIONS
|
||||
|
||||
Additional arguments to send to JMH.
|
||||
|
||||
## Notes for Specific Tests
|
||||
|
||||
### Docker Tests
|
||||
|
||||
Docker tests with default parameters may fail on systems with glibc versions
|
||||
not compatible with the one used in the default docker image (e.g., Oracle
|
||||
Linux 7.6 for x86). For example, they pass on Ubuntu 16.04 but fail on Ubuntu
|
||||
18.04 if run like this on x86:
|
||||
Docker tests with default parameters may fail on systems with glibc versions not
|
||||
compatible with the one used in the default docker image (e.g., Oracle Linux 7.6 for x86).
|
||||
For example, they pass on Ubuntu 16.04 but fail on Ubuntu 18.04 if run like this on x86:
|
||||
|
||||
```
|
||||
$ make test TEST="jtreg:test/hotspot/jtreg/containers/docker"
|
||||
```
|
||||
$ make test TEST="jtreg:test/hotspot/jtreg/containers/docker"
|
||||
|
||||
To run these tests correctly, additional parameters for the correct docker
|
||||
image are required on Ubuntu 18.04 by using `JAVA_OPTIONS`.
|
||||
To run these tests correctly, additional parameters for the correct docker image are
|
||||
required on Ubuntu 18.04 by using `JAVA_OPTIONS`.
|
||||
|
||||
```
|
||||
$ make test TEST="jtreg:test/hotspot/jtreg/containers/docker" \
|
||||
JTREG="JAVA_OPTIONS=-Djdk.test.docker.image.name=ubuntu
|
||||
-Djdk.test.docker.image.version=latest"
|
||||
```
|
||||
$ make test TEST="jtreg:test/hotspot/jtreg/containers/docker" JTREG="JAVA_OPTIONS=-Djdk.test.docker.image.name=ubuntu -Djdk.test.docker.image.version=latest"
|
||||
|
||||
### Non-US locale
|
||||
|
||||
If your locale is non-US, some tests are likely to fail. To work around this
|
||||
you can set the locale to US. On Unix platforms simply setting `LANG="en_US"`
|
||||
in the environment before running tests should work. On Windows, setting
|
||||
`JTREG="VM_OPTIONS=-Duser.language=en -Duser.country=US"` helps for most, but
|
||||
not all test cases.
|
||||
|
||||
If your locale is non-US, some tests are likely to fail. To work around this you can
|
||||
set the locale to US. On Unix platforms simply setting `LANG="en_US"` in the
|
||||
environment before running tests should work. On Windows, setting
|
||||
`JTREG="VM_OPTIONS=-Duser.language=en -Duser.country=US"` helps for most, but not all test cases.
|
||||
For example:
|
||||
|
||||
```
|
||||
$ export LANG="en_US" && make test TEST=...
|
||||
$ make test JTREG="VM_OPTIONS=-Duser.language=en -Duser.country=US" TEST=...
|
||||
```
|
||||
$ export LANG="en_US" && make test TEST=...
|
||||
$ make test JTREG="VM_OPTIONS=-Duser.language=en -Duser.country=US" TEST=...
|
||||
|
||||
### PKCS11 Tests
|
||||
|
||||
It is highly recommended to use the latest NSS version when running PKCS11
|
||||
tests. Improper NSS version may lead to unexpected failures which are hard to
|
||||
diagnose. For example, sun/security/pkcs11/Secmod/AddTrustedCert.java may fail
|
||||
on Ubuntu 18.04 with the default NSS version in the system. To run these tests
|
||||
correctly, the system property `test.nss.lib.paths` is required on Ubuntu 18.04
|
||||
to specify the alternative NSS lib directories.
|
||||
|
||||
It is highly recommended to use the latest NSS version when running PKCS11 tests.
|
||||
Improper NSS version may lead to unexpected failures which are hard to diagnose.
|
||||
For example, sun/security/pkcs11/Secmod/AddTrustedCert.java may fail on Ubuntu
|
||||
18.04 with the default NSS version in the system.
|
||||
To run these tests correctly, the system property `test.nss.lib.paths` is required
|
||||
on Ubuntu 18.04 to specify the alternative NSS lib directories.
|
||||
For example:
|
||||
|
||||
```
|
||||
$ make test TEST="jtreg:sun/security/pkcs11/Secmod/AddTrustedCert.java" \
|
||||
JTREG="JAVA_OPTIONS=-Dtest.nss.lib.paths=/path/to/your/latest/NSS-libs"
|
||||
```
|
||||
$ make test TEST="jtreg:sun/security/pkcs11/Secmod/AddTrustedCert.java" JTREG="JAVA_OPTIONS=-Dtest.nss.lib.paths=/path/to/your/latest/NSS-libs"
|
||||
|
||||
For more notes about the PKCS11 tests, please refer to
|
||||
test/jdk/sun/security/pkcs11/README.
|
||||
For more notes about the PKCS11 tests, please refer to test/jdk/sun/security/pkcs11/README.
|
||||
|
||||
### Client UI Tests
|
||||
|
||||
Some Client UI tests use key sequences which may be reserved by the operating
|
||||
system. Usually that causes the test failure. So it is highly recommended to
|
||||
disable system key shortcuts prior testing. The steps to access and disable
|
||||
system key shortcuts for various platforms are provided below.
|
||||
system. Usually that causes the test failure. So it is highly recommended to disable
|
||||
system key shortcuts prior testing. The steps to access and disable system key shortcuts
|
||||
for various platforms are provided below.
|
||||
|
||||
#### MacOS
|
||||
|
||||
Choose Apple menu; System Preferences, click Keyboard, then click Shortcuts;
|
||||
select or deselect desired shortcut.
|
||||
|
||||
For example,
|
||||
test/jdk/javax/swing/TooltipManager/JMenuItemToolTipKeyBindingsTest/JMenuItemToolTipKeyBindingsTest.java
|
||||
fails on MacOS because it uses `CTRL + F1` key sequence to show or hide tooltip
|
||||
message but the key combination is reserved by the operating system. To run the
|
||||
test correctly the default global key shortcut should be disabled using the
|
||||
steps described above, and then deselect "Turn keyboard access on or off"
|
||||
option which is responsible for `CTRL + F1` combination.
|
||||
For example, test/jdk/javax/swing/TooltipManager/JMenuItemToolTipKeyBindingsTest/JMenuItemToolTipKeyBindingsTest.java fails
|
||||
on MacOS because it uses `CTRL + F1` key sequence to show or hide tooltip message
|
||||
but the key combination is reserved by the operating system. To run the test correctly
|
||||
the default global key shortcut should be disabled using the steps described above, and then deselect
|
||||
"Turn keyboard access on or off" option which is responsible for `CTRL + F1` combination.
|
||||
|
||||
#### Linux
|
||||
|
||||
Open the Activities overview and start typing Settings; Choose Settings, click
|
||||
Devices, then click Keyboard; set or override desired shortcut.
|
||||
Open the Activities overview and start typing Settings; Choose Settings, click Devices,
|
||||
then click Keyboard; set or override desired shortcut.
|
||||
|
||||
#### Windows
|
||||
|
||||
Type `gpedit` in the Search and then click Edit group policy; navigate to User
|
||||
Configuration -> Administrative Templates -> Windows Components -> File
|
||||
Explorer; in the right-side pane look for "Turn off Windows key hotkeys" and
|
||||
double click on it; enable or disable hotkeys.
|
||||
Type `gpedit` in the Search and then click Edit group policy; navigate to
|
||||
User Configuration -> Administrative Templates -> Windows Components -> File Explorer;
|
||||
in the right-side pane look for "Turn off Windows key hotkeys" and double click on it;
|
||||
enable or disable hotkeys.
|
||||
|
||||
Note: restart is required to make the settings take effect.
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ TARGETS =
|
||||
# READMEs and other files.
|
||||
|
||||
DEMO_SHARE_SRC := $(TOPDIR)/src/demo/share
|
||||
GLOBAL_VERSION_INFO_RESOURCE := $(TOPDIR)/src/java.base/windows/native/common/version.rc
|
||||
|
||||
DEMO_MANIFEST := $(SUPPORT_OUTPUTDIR)/demos/java-main-manifest.mf
|
||||
|
||||
|
||||
@@ -477,7 +477,6 @@ jdk.internal.vm.compiler_EXCLUDES += \
|
||||
org.graalvm.compiler.options.test \
|
||||
org.graalvm.compiler.phases.common.test \
|
||||
org.graalvm.compiler.processor \
|
||||
org.graalvm.compiler.replacements.jdk10.test \
|
||||
org.graalvm.compiler.replacements.jdk12.test \
|
||||
org.graalvm.compiler.replacements.jdk9.test \
|
||||
org.graalvm.compiler.replacements.processor \
|
||||
|
||||
@@ -36,24 +36,6 @@ TARGETS :=
|
||||
# Hook to include the corresponding custom file, if present.
|
||||
$(eval $(call IncludeCustomExtension, hotspot/CompileTools.gmk))
|
||||
|
||||
################################################################################
|
||||
# Build tools needed for the JFR source code generation
|
||||
|
||||
HOTSPOT_TOOLS_SRCDIR := $(TOPDIR)/make/src/classes
|
||||
|
||||
HOTSPOT_TOOLS_OUTPUTDIR := $(BUILDTOOLS_OUTPUTDIR)/buildtools/hotspot_tools_classes
|
||||
|
||||
$(eval $(call SetupJavaCompilation, BUILD_TOOLS_HOTSPOT, \
|
||||
COMPILER := bootjdk, \
|
||||
SRC := $(HOTSPOT_TOOLS_SRCDIR), \
|
||||
BIN := $(HOTSPOT_TOOLS_OUTPUTDIR), \
|
||||
))
|
||||
|
||||
TARGETS += $(BUILD_TOOLS_HOTSPOT)
|
||||
|
||||
|
||||
################################################################################
|
||||
# Graal build tools
|
||||
ifeq ($(INCLUDE_GRAAL), true)
|
||||
VM_CI_SRC_DIR := $(TOPDIR)/src/jdk.internal.vm.ci/share/classes
|
||||
|
||||
|
||||
@@ -101,9 +101,9 @@ help:
|
||||
$(info $(_) # method is 'auto', 'ignore' or 'fail' (default))
|
||||
$(info $(_) TEST="test1 ..." # Use the given test descriptor(s) for testing, e.g.)
|
||||
$(info $(_) # make test TEST="jdk_lang gtest:all")
|
||||
$(info $(_) JTREG="OPT1=x;OPT2=y" # Control the JTREG test harness, use 'help' to list)
|
||||
$(info $(_) GTEST="OPT1=x;OPT2=y" # Control the GTEST test harness, use 'help' to list)
|
||||
$(info $(_) MICRO="OPT1=x;OPT2=y" # Control the MICRO test harness, use 'help' to list)
|
||||
$(info $(_) JTREG="OPT1=x;OPT2=y" # Control the JTREG test harness)
|
||||
$(info $(_) GTEST="OPT1=x;OPT2=y" # Control the GTEST test harness)
|
||||
$(info $(_) MICRO="OPT1=x;OPT2=y" # Control the MICRO test harness)
|
||||
$(info $(_) TEST_OPTS="OPT1=x;..." # Generic control of all test harnesses)
|
||||
$(info $(_) TEST_VM_OPTS="ARG ..." # Same as setting TEST_OPTS to VM_OPTIONS="ARG ...")
|
||||
$(info )
|
||||
|
||||
@@ -197,7 +197,7 @@ ifeq ($(HAS_SPEC),)
|
||||
COMPARE_BUILD="$(COMPARE_BUILD)" pre-compare-build && \
|
||||
$(MAKE) $(MFLAGS) $(MAKE_LOG_FLAGS) -r -R -j 1 -f $(topdir)/make/Init.gmk \
|
||||
SPEC=$(spec) HAS_SPEC=true $(MAKE_INIT_WITH_SPEC_ARGUMENTS) \
|
||||
COMPARE_BUILD="$(COMPARE_BUILD):NODRYRUN=true" main && \
|
||||
COMPARE_BUILD="$(COMPARE_BUILD)" main && \
|
||||
$(MAKE) $(MFLAGS) $(MAKE_LOG_FLAGS) -r -R -f $(topdir)/make/Init.gmk \
|
||||
SPEC=$(spec) HAS_SPEC=true ACTUAL_TOPDIR=$(topdir) \
|
||||
COMPARE_BUILD="$(COMPARE_BUILD)" post-compare-build && \
|
||||
|
||||
@@ -350,9 +350,6 @@ else # $(HAS_SPEC)=true
|
||||
$$(if $$(filter FAIL=%, $$(part)), \
|
||||
$$(eval COMPARE_BUILD_FAIL=$$(strip $$(subst +, , $$(patsubst FAIL=%, %, $$(part))))) \
|
||||
) \
|
||||
$$(if $$(filter NODRYRUN=%, $$(part)), \
|
||||
$$(eval COMPARE_BUILD_NODRYRUN=$$(strip $$(subst +, , $$(patsubst NODRYRUN=%, %, $$(part))))) \
|
||||
) \
|
||||
)
|
||||
else
|
||||
# Separate handling for single field case, to allow for spaces in values.
|
||||
@@ -375,11 +372,9 @@ else # $(HAS_SPEC)=true
|
||||
else ifeq ($$(wildcard $$(COMPARE_BUILD_PATCH)), )
|
||||
$$(error Patch file $$(COMPARE_BUILD_PATCH) does not exist)
|
||||
endif
|
||||
ifneq ($$(COMPARE_BUILD_NODRYRUN), true)
|
||||
PATCH_DRY_RUN := $$(shell cd $$(topdir) && $$(PATCH) --dry-run -p1 < $$(COMPARE_BUILD_PATCH) > /dev/null 2>&1 || $$(ECHO) FAILED)
|
||||
ifeq ($$(PATCH_DRY_RUN), FAILED)
|
||||
$$(error Patch file $$(COMPARE_BUILD_PATCH) does not apply cleanly)
|
||||
endif
|
||||
PATCH_DRY_RUN := $$(shell cd $$(topdir) && $$(PATCH) --dry-run -p1 < $$(COMPARE_BUILD_PATCH) > /dev/null 2>&1 || $$(ECHO) FAILED)
|
||||
ifeq ($$(PATCH_DRY_RUN), FAILED)
|
||||
$$(error Patch file $$(COMPARE_BUILD_PATCH) does not apply cleanly)
|
||||
endif
|
||||
endif
|
||||
ifneq ($$(COMPARE_BUILD_FAIL), true)
|
||||
|
||||
@@ -640,32 +640,6 @@ $(eval $(call SetupTarget, test-image-jdk-jtreg-native, \
|
||||
DEPS := build-test-jdk-jtreg-native, \
|
||||
))
|
||||
|
||||
# Native files needed by the testlib
|
||||
$(eval $(call SetupTarget, build-test-lib-native, \
|
||||
MAKEFILE := test/BuildTestLibNative, \
|
||||
TARGET := build-test-lib-native, \
|
||||
DEPS := buildtools-jdk java.base-libs, \
|
||||
))
|
||||
|
||||
$(eval $(call SetupTarget, test-image-lib-native, \
|
||||
MAKEFILE := test/BuildTestLibNative, \
|
||||
TARGET := test-image-lib-native, \
|
||||
DEPS := build-test-lib-native, \
|
||||
))
|
||||
|
||||
# Native files needed when testing the testlib itself
|
||||
$(eval $(call SetupTarget, build-test-libtest-jtreg-native, \
|
||||
MAKEFILE := test/JtregNativeLibTest, \
|
||||
TARGET := build-test-libtest-jtreg-native, \
|
||||
DEPS := buildtools-jdk, \
|
||||
))
|
||||
|
||||
$(eval $(call SetupTarget, test-image-libtest-jtreg-native, \
|
||||
MAKEFILE := test/JtregNativeLibTest, \
|
||||
TARGET := test-image-libtest-jtreg-native, \
|
||||
DEPS := build-test-libtest-jtreg-native, \
|
||||
))
|
||||
|
||||
$(eval $(call SetupTarget, build-test-hotspot-jtreg-graal, \
|
||||
MAKEFILE := test/JtregGraalUnit, \
|
||||
TARGET := build-test-hotspot-jtreg-graal, \
|
||||
@@ -818,7 +792,7 @@ else
|
||||
|
||||
# Declare dependencies between hotspot-<variant>* targets
|
||||
$(foreach v, $(JVM_VARIANTS), \
|
||||
$(eval hotspot-$v-gensrc: java.base-copy buildtools-hotspot) \
|
||||
$(eval hotspot-$v-gensrc: java.base-copy) \
|
||||
$(eval hotspot-$v-libs: hotspot-$v-gensrc java.base-copy) \
|
||||
)
|
||||
|
||||
@@ -1008,7 +982,6 @@ else
|
||||
interim-image: $(INTERIM_JMOD_TARGETS)
|
||||
|
||||
build-test-hotspot-jtreg-native: hotspot-$(JVM_VARIANT_MAIN)-libs
|
||||
build-test-libtest-jtreg-native: hotspot-$(JVM_VARIANT_MAIN)-libs
|
||||
|
||||
endif
|
||||
|
||||
@@ -1132,9 +1105,7 @@ endif
|
||||
docs-image: docs-jdk
|
||||
|
||||
# This target builds the test image
|
||||
test-image: prepare-test-image test-image-jdk-jtreg-native \
|
||||
test-image-demos-jdk test-image-libtest-jtreg-native \
|
||||
test-image-lib-native
|
||||
test-image: prepare-test-image test-image-jdk-jtreg-native test-image-demos-jdk
|
||||
|
||||
ifneq ($(JVM_TEST_IMAGE_TARGETS), )
|
||||
# If JVM_TEST_IMAGE_TARGETS is externally defined, use it instead of the
|
||||
|
||||
@@ -143,6 +143,9 @@ endif
|
||||
# Optionally create AOT libraries for specified modules before running tests.
|
||||
# Note, this could not be done during JDK build time.
|
||||
################################################################################
|
||||
|
||||
# Note, this could not be done during JDK build time.
|
||||
|
||||
# Parameter 1 is the name of the rule.
|
||||
#
|
||||
# Remaining parameters are named arguments.
|
||||
@@ -195,10 +198,6 @@ define SetupAotModuleBody
|
||||
$1_AOT_TARGETS += $$($1_AOT_LIB)
|
||||
endef
|
||||
|
||||
################################################################################
|
||||
# Optionally create AOT libraries before running tests.
|
||||
# Note, this could not be done during JDK build time.
|
||||
################################################################################
|
||||
# Parameter 1 is the name of the rule.
|
||||
#
|
||||
# Remaining parameters are named arguments.
|
||||
@@ -292,9 +291,9 @@ $(eval $(call SetTestOpt,FAILURE_HANDLER_TIMEOUT,JTREG))
|
||||
$(eval $(call ParseKeywordVariable, JTREG, \
|
||||
SINGLE_KEYWORDS := JOBS TIMEOUT_FACTOR FAILURE_HANDLER_TIMEOUT \
|
||||
TEST_MODE ASSERT VERBOSE RETAIN MAX_MEM RUN_PROBLEM_LISTS \
|
||||
RETRY_COUNT MAX_OUTPUT, \
|
||||
RETRY_COUNT, \
|
||||
STRING_KEYWORDS := OPTIONS JAVA_OPTIONS VM_OPTIONS KEYWORDS \
|
||||
EXTRA_PROBLEM_LISTS AOT_MODULES LAUNCHER_OPTIONS, \
|
||||
EXTRA_PROBLEM_LISTS AOT_MODULES, \
|
||||
))
|
||||
|
||||
ifneq ($(JTREG), )
|
||||
@@ -343,13 +342,11 @@ hotspot_JTREG_MAX_MEM := 0
|
||||
hotspot_JTREG_ASSERT := false
|
||||
hotspot_JTREG_NATIVEPATH := $(TEST_IMAGE_DIR)/hotspot/jtreg/native
|
||||
jdk_JTREG_NATIVEPATH := $(TEST_IMAGE_DIR)/jdk/jtreg/native
|
||||
lib-test_JTREG_NATIVEPATH := $(TEST_IMAGE_DIR)/lib-test/jtreg/native
|
||||
|
||||
jdk_JTREG_PROBLEM_LIST += $(TOPDIR)/test/jdk/ProblemList.txt
|
||||
jaxp_JTREG_PROBLEM_LIST += $(TOPDIR)/test/jaxp/ProblemList.txt
|
||||
langtools_JTREG_PROBLEM_LIST += $(TOPDIR)/test/langtools/ProblemList.txt
|
||||
hotspot_JTREG_PROBLEM_LIST += $(TOPDIR)/test/hotspot/jtreg/ProblemList.txt
|
||||
lib-test_JTREG_PROBLEM_LIST += $(TOPDIR)/test/lib-test/ProblemList.txt
|
||||
|
||||
langtools_JTREG_MAX_MEM := 768m
|
||||
|
||||
@@ -845,27 +842,15 @@ define SetupRunJtregTestBody
|
||||
JTREG_RUN_PROBLEM_LISTS ?= false
|
||||
JTREG_RETRY_COUNT ?= 0
|
||||
|
||||
ifneq ($$(JTREG_LAUNCHER_OPTIONS), )
|
||||
$1_JTREG_LAUNCHER_OPTIONS += $$(JTREG_LAUNCHER_OPTIONS)
|
||||
endif
|
||||
|
||||
ifneq ($$(JTREG_MAX_OUTPUT), )
|
||||
$1_JTREG_LAUNCHER_OPTIONS += -Djavatest.maxOutputSize=$$(JTREG_MAX_OUTPUT)
|
||||
endif
|
||||
|
||||
ifneq ($$($1_JTREG_MAX_MEM), 0)
|
||||
$1_JTREG_BASIC_OPTIONS += -vmoption:-Xmx$$($1_JTREG_MAX_MEM)
|
||||
$1_JTREG_LAUNCHER_OPTIONS += -Xmx$$($1_JTREG_MAX_MEM)
|
||||
endif
|
||||
|
||||
# Make sure the tmp dir is normalized as some tests will react badly otherwise
|
||||
$1_TEST_TMP_DIR := $$(abspath $$($1_TEST_SUPPORT_DIR)/tmp)
|
||||
|
||||
$1_JTREG_BASIC_OPTIONS += -$$($1_JTREG_TEST_MODE) \
|
||||
-verbose:$$(JTREG_VERBOSE) -retain:$$(JTREG_RETAIN) \
|
||||
-concurrency:$$($1_JTREG_JOBS) -timeoutFactor:$$(JTREG_TIMEOUT_FACTOR) \
|
||||
-vmoption:-XX:MaxRAMPercentage=$$($1_JTREG_MAX_RAM_PERCENTAGE) \
|
||||
-vmoption:-Djava.io.tmpdir="$$($1_TEST_TMP_DIR)"
|
||||
-vmoption:-XX:MaxRAMPercentage=$$($1_JTREG_MAX_RAM_PERCENTAGE)
|
||||
|
||||
$1_JTREG_BASIC_OPTIONS += -automatic -ignore:quiet
|
||||
|
||||
@@ -981,8 +966,7 @@ define SetupRunJtregTestBody
|
||||
run-test-$1: pre-run-test clean-workdir-$1 $$($1_AOT_TARGETS)
|
||||
$$(call LogWarn)
|
||||
$$(call LogWarn, Running test '$$($1_TEST)')
|
||||
$$(call MakeDir, $$($1_TEST_RESULTS_DIR) $$($1_TEST_SUPPORT_DIR) \
|
||||
$$($1_TEST_TMP_DIR))
|
||||
$$(call MakeDir, $$($1_TEST_RESULTS_DIR) $$($1_TEST_SUPPORT_DIR))
|
||||
$$(call ExecuteWithLog, $$($1_TEST_SUPPORT_DIR)/jtreg, ( \
|
||||
$$(COV_ENVIRONMENT) $$($1_COMMAND_LINE) \
|
||||
))
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
ifndef _TOOLS_HOTSPOT_GMK
|
||||
_TOOLS_HOTSPOT_GMK := 1
|
||||
|
||||
include JavaCompilation.gmk
|
||||
|
||||
HOTSPOT_TOOLS_OUTPUTDIR := $(BUILDTOOLS_OUTPUTDIR)/buildtools/hotspot_tools_classes
|
||||
|
||||
################################################################################
|
||||
# To avoid reevaluating the compilation setup for the tools each time this file
|
||||
# is included, the actual compilation is handled by CompileToolsHotspot.gmk. The
|
||||
# following trick is used to be able to declare a dependency on the built tools.
|
||||
BUILD_TOOLS_HOTSPOT := $(call SetupJavaCompilationCompileTarget, \
|
||||
BUILD_TOOLS_HOTSPOT, $(HOTSPOT_TOOLS_OUTPUTDIR))
|
||||
|
||||
################################################################################
|
||||
|
||||
TOOL_JFR_GEN := $(JAVA_SMALL) -cp $(HOTSPOT_TOOLS_OUTPUTDIR) \
|
||||
build.tools.jfr.GenerateJfrFiles
|
||||
|
||||
##########################################################################################
|
||||
|
||||
endif # _TOOLS_HOTSPOT_GMK
|
||||
@@ -86,18 +86,17 @@ AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
|
||||
AC_SUBST(TOPDIR)
|
||||
AC_SUBST(CONFIGURE_START_DIR)
|
||||
|
||||
# We can only call UTIL_FIXUP_PATH after BASIC_CHECK_PATHS_WINDOWS.
|
||||
UTIL_FIXUP_PATH(TOPDIR)
|
||||
UTIL_FIXUP_PATH(CONFIGURE_START_DIR)
|
||||
|
||||
if test "x$CUSTOM_ROOT" != x; then
|
||||
UTIL_FIXUP_PATH(CUSTOM_ROOT)
|
||||
WORKSPACE_ROOT="${CUSTOM_ROOT}"
|
||||
else
|
||||
WORKSPACE_ROOT="${TOPDIR}"
|
||||
fi
|
||||
AC_SUBST(WORKSPACE_ROOT)
|
||||
|
||||
# We can only call UTIL_FIXUP_PATH after BASIC_CHECK_PATHS_WINDOWS.
|
||||
UTIL_FIXUP_PATH(CONFIGURE_START_DIR)
|
||||
UTIL_FIXUP_PATH(TOPDIR)
|
||||
|
||||
# Locate the directory of this script.
|
||||
AUTOCONF_DIR=$TOPDIR/make/autoconf
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -150,10 +150,10 @@ AC_DEFUN_ONCE([BASIC_COMPILE_FIXPATH],
|
||||
fi
|
||||
FIXPATH_SRC_W="$FIXPATH_SRC"
|
||||
FIXPATH_BIN_W="$FIXPATH_BIN"
|
||||
$RM -rf $FIXPATH_BIN $FIXPATH_DIR
|
||||
$MKDIR -p $FIXPATH_DIR $CONFIGURESUPPORT_OUTPUTDIR/bin
|
||||
UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([FIXPATH_SRC_W])
|
||||
UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([FIXPATH_BIN_W])
|
||||
$RM -rf $FIXPATH_BIN $FIXPATH_DIR
|
||||
$MKDIR -p $FIXPATH_DIR $CONFIGURESUPPORT_OUTPUTDIR/bin
|
||||
cd $FIXPATH_DIR
|
||||
$CC $FIXPATH_SRC_W -Fe$FIXPATH_BIN_W > $FIXPATH_DIR/fixpath1.log 2>&1
|
||||
cd $CONFIGURE_START_DIR
|
||||
|
||||
@@ -512,18 +512,6 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_HELPER],
|
||||
fi
|
||||
TOOLCHAIN_CFLAGS_JDK_CONLY="$LANGSTD_CFLAGS $TOOLCHAIN_CFLAGS_JDK_CONLY"
|
||||
|
||||
# CXXFLAGS C++ language level for all of JDK, including Hotspot.
|
||||
if test "x$TOOLCHAIN_TYPE" = xgcc || test "x$TOOLCHAIN_TYPE" = xclang || test "x$TOOLCHAIN_TYPE" = xxlc; then
|
||||
LANGSTD_CXXFLAGS="-std=c++14"
|
||||
elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
|
||||
LANGSTD_CXXFLAGS="-std:c++14"
|
||||
else
|
||||
AC_MSG_ERROR([Don't know how to enable C++14 for this toolchain])
|
||||
fi
|
||||
TOOLCHAIN_CFLAGS_JDK_CXXONLY="$TOOLCHAIN_CFLAGS_JDK_CXXONLY $LANGSTD_CXXFLAGS"
|
||||
TOOLCHAIN_CFLAGS_JVM="$TOOLCHAIN_CFLAGS_JVM $LANGSTD_CXXFLAGS"
|
||||
ADLC_LANGSTD_CXXFLAGS="$LANGSTD_CXXFLAGS"
|
||||
|
||||
# CFLAGS WARNINGS STUFF
|
||||
# Set JVM_CFLAGS warning handling
|
||||
if test "x$TOOLCHAIN_TYPE" = xgcc; then
|
||||
@@ -706,6 +694,13 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
|
||||
$1_CFLAGS_CPU_JDK="${$1_CFLAGS_CPU_JDK} -fno-omit-frame-pointer"
|
||||
fi
|
||||
|
||||
$1_CXXSTD_CXXFLAG="-std=gnu++98"
|
||||
FLAGS_CXX_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [${$1_CXXSTD_CXXFLAG}],
|
||||
PREFIX: $3, IF_FALSE: [$1_CXXSTD_CXXFLAG=""])
|
||||
$1_TOOLCHAIN_CFLAGS_JDK_CXXONLY="${$1_CXXSTD_CXXFLAG}"
|
||||
$1_TOOLCHAIN_CFLAGS_JVM="${$1_TOOLCHAIN_CFLAGS_JVM} ${$1_CXXSTD_CXXFLAG}"
|
||||
$2ADLC_CXXFLAG="${$1_CXXSTD_CXXFLAG}"
|
||||
|
||||
elif test "x$TOOLCHAIN_TYPE" = xclang; then
|
||||
if test "x$FLAGS_OS" = xlinux; then
|
||||
# ppc test not really needed for clang
|
||||
@@ -800,7 +795,7 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
|
||||
AC_SUBST($2CFLAGS_JDKEXE)
|
||||
AC_SUBST($2CXXFLAGS_JDKLIB)
|
||||
AC_SUBST($2CXXFLAGS_JDKEXE)
|
||||
AC_SUBST($2ADLC_LANGSTD_CXXFLAGS)
|
||||
AC_SUBST($2ADLC_CXXFLAG)
|
||||
|
||||
COMPILER_FP_CONTRACT_OFF_FLAG="-ffp-contract=off"
|
||||
# Check that the compiler supports -ffp-contract=off flag
|
||||
|
||||
@@ -53,7 +53,6 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS],
|
||||
|
||||
LDFLAGS_TESTEXE="${TARGET_LDFLAGS_JDK_LIBPATH}"
|
||||
AC_SUBST(LDFLAGS_TESTEXE)
|
||||
AC_SUBST(ADLC_LDFLAGS)
|
||||
])
|
||||
|
||||
################################################################################
|
||||
|
||||
@@ -64,12 +64,39 @@ AC_DEFUN([FLAGS_SETUP_RCFLAGS],
|
||||
[
|
||||
# On Windows, we need to set RC flags.
|
||||
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
|
||||
RCFLAGS="-nologo"
|
||||
RC_FLAGS="-nologo -l0x409"
|
||||
JVM_RCFLAGS="-nologo"
|
||||
if test "x$DEBUG_LEVEL" = xrelease; then
|
||||
RCFLAGS="$RCFLAGS -DNDEBUG"
|
||||
RC_FLAGS="$RC_FLAGS -DNDEBUG"
|
||||
JVM_RCFLAGS="$JVM_RCFLAGS -DNDEBUG"
|
||||
fi
|
||||
|
||||
# The version variables used to create RC_FLAGS may be overridden
|
||||
# in a custom configure script, or possibly the command line.
|
||||
# Let those variables be expanded at make time in spec.gmk.
|
||||
# The \$ are escaped to the shell, and the $(...) variables
|
||||
# are evaluated by make.
|
||||
RC_FLAGS="$RC_FLAGS \
|
||||
-D\"JDK_VERSION_STRING=\$(VERSION_STRING)\" \
|
||||
-D\"JDK_COMPANY=\$(COMPANY_NAME)\" \
|
||||
-D\"JDK_FILEDESC=\$(JDK_RC_NAME) binary\" \
|
||||
-D\"JDK_VER=\$(VERSION_NUMBER)\" \
|
||||
-D\"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\" \
|
||||
-D\"JDK_NAME=\$(JDK_RC_NAME) \$(VERSION_FEATURE)\" \
|
||||
-D\"JDK_FVER=\$(subst .,\$(COMMA),\$(VERSION_NUMBER_FOUR_POSITIONS))\""
|
||||
|
||||
JVM_RCFLAGS="$JVM_RCFLAGS \
|
||||
-D\"HS_VERSION_STRING=\$(VERSION_STRING)\" \
|
||||
-D\"HS_COMPANY=\$(COMPANY_NAME)\" \
|
||||
-D\"HS_VER=\$(VERSION_NUMBER_FOUR_POSITIONS)\" \
|
||||
-D\"HS_INTERNAL_NAME=jvm\" \
|
||||
-D\"HS_COPYRIGHT=Copyright $COPYRIGHT_YEAR\" \
|
||||
-D\"HS_FNAME=jvm.dll\" \
|
||||
-D\"HS_NAME=\$(PRODUCT_NAME) \$(VERSION_SHORT)\" \
|
||||
-D\"HS_FVER=\$(subst .,\$(COMMA),\$(VERSION_NUMBER_FOUR_POSITIONS))\""
|
||||
fi
|
||||
AC_SUBST(RCFLAGS)
|
||||
AC_SUBST(RC_FLAGS)
|
||||
AC_SUBST(JVM_RCFLAGS)
|
||||
])
|
||||
|
||||
################################################################################
|
||||
|
||||
@@ -179,7 +179,7 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
|
||||
AC_MSG_ERROR([--with-version-string must have a value])
|
||||
elif test "x$with_version_string" != x; then
|
||||
# Additional [] needed to keep m4 from mangling shell constructs.
|
||||
if [ [[ $with_version_string =~ ^([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(-([a-zA-Z0-9]+))?(((\+)([0-9]*))?(-([-a-zA-Z0-9.]+))?)?$ ]] ]; then
|
||||
if [ [[ $with_version_string =~ ^([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(-([a-zA-Z]+))?((\+)([0-9]+)?(-([-a-zA-Z0-9.]+))?)?$ ]] ]; then
|
||||
VERSION_FEATURE=${BASH_REMATCH[[1]]}
|
||||
VERSION_INTERIM=${BASH_REMATCH[[3]]}
|
||||
VERSION_UPDATE=${BASH_REMATCH[[5]]}
|
||||
@@ -188,9 +188,9 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
|
||||
VERSION_EXTRA2=${BASH_REMATCH[[11]]}
|
||||
VERSION_EXTRA3=${BASH_REMATCH[[13]]}
|
||||
VERSION_PRE=${BASH_REMATCH[[15]]}
|
||||
version_plus_separator=${BASH_REMATCH[[18]]}
|
||||
VERSION_BUILD=${BASH_REMATCH[[19]]}
|
||||
VERSION_OPT=${BASH_REMATCH[[21]]}
|
||||
version_plus_separator=${BASH_REMATCH[[17]]}
|
||||
VERSION_BUILD=${BASH_REMATCH[[18]]}
|
||||
VERSION_OPT=${BASH_REMATCH[[20]]}
|
||||
# Unspecified numerical fields are interpreted as 0.
|
||||
if test "x$VERSION_INTERIM" = x; then
|
||||
VERSION_INTERIM=0
|
||||
@@ -233,8 +233,8 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
|
||||
# Interpret --without-* as empty string instead of the literal "no"
|
||||
VERSION_PRE=
|
||||
else
|
||||
# Only [a-zA-Z0-9] is allowed in the VERSION_PRE. Outer [ ] to quote m4.
|
||||
[ VERSION_PRE=`$ECHO "$with_version_pre" | $TR -c -d '[a-zA-Z0-9]'` ]
|
||||
# Only [a-zA-Z] is allowed in the VERSION_PRE. Outer [ ] to quote m4.
|
||||
[ VERSION_PRE=`$ECHO "$with_version_pre" | $TR -c -d '[a-z][A-Z]'` ]
|
||||
if test "x$VERSION_PRE" != "x$with_version_pre"; then
|
||||
AC_MSG_WARN([--with-version-pre value has been sanitized from '$with_version_pre' to '$VERSION_PRE'])
|
||||
fi
|
||||
|
||||
@@ -87,20 +87,6 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBFFI],
|
||||
[LIBFFI_FOUND=no]
|
||||
)
|
||||
fi
|
||||
# on macos we need a special case for system's libffi as
|
||||
# headers are located only in sdk in $SYSROOT and in ffi subfolder
|
||||
if test "x$LIBFFI_FOUND" = xno; then
|
||||
if test "x$SYSROOT" != "x"; then
|
||||
AC_CHECK_HEADER([$SYSROOT/usr/include/ffi/ffi.h],
|
||||
[
|
||||
LIBFFI_FOUND=yes
|
||||
LIBFFI_CFLAGS="-I${SYSROOT}/usr/include/ffi"
|
||||
LIBFFI_LIBS=-lffi
|
||||
],
|
||||
[LIBFFI_FOUND=no]
|
||||
)
|
||||
fi
|
||||
fi
|
||||
if test "x$LIBFFI_FOUND" = xno; then
|
||||
HELP_MSG_MISSING_DEPENDENCY([ffi])
|
||||
AC_MSG_ERROR([Could not find libffi! $HELP_MSG])
|
||||
|
||||
@@ -70,7 +70,6 @@ AC_DEFUN_ONCE([LIB_SETUP_STD_LIBS],
|
||||
else
|
||||
LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS"
|
||||
JVM_LDFLAGS="$JVM_LDFLAGS $STATIC_STDCXX_FLAGS"
|
||||
ADLC_LDFLAGS="$ADLC_LDFLAGS $STATIC_STDCXX_FLAGS"
|
||||
# Ideally, we should test stdc++ for the BUILD toolchain separately. For now
|
||||
# just use the same setting as for the TARGET toolchain.
|
||||
OPENJDK_BUILD_JVM_LDFLAGS="$OPENJDK_BUILD_JVM_LDFLAGS $STATIC_STDCXX_FLAGS"
|
||||
|
||||
@@ -476,8 +476,7 @@ DISABLED_WARNINGS_CXX := @DISABLED_WARNINGS_CXX@
|
||||
WARNINGS_AS_ERRORS := @WARNINGS_AS_ERRORS@
|
||||
|
||||
CFLAGS_CCACHE:=@CFLAGS_CCACHE@
|
||||
ADLC_LANGSTD_CXXFLAGS=@ADLC_LANGSTD_CXXFLAGS@
|
||||
ADLC_LDFLAGS=@ADLC_LDFLAGS@
|
||||
ADLC_CXXFLAG=@ADLC_CXXFLAG@
|
||||
|
||||
# Tools that potentially need to be cross compilation aware.
|
||||
CC:=@FIXPATH@ @CCACHE@ @ICECC@ @CC@
|
||||
@@ -495,6 +494,7 @@ JVM_CFLAGS := @JVM_CFLAGS@
|
||||
JVM_LDFLAGS := @JVM_LDFLAGS@
|
||||
JVM_ASFLAGS := @JVM_ASFLAGS@
|
||||
JVM_LIBS := @JVM_LIBS@
|
||||
JVM_RCFLAGS := @JVM_RCFLAGS@
|
||||
|
||||
# These flags might contain variables set by a custom extension that is included later.
|
||||
EXTRA_CFLAGS = @EXTRA_CFLAGS@
|
||||
@@ -665,7 +665,12 @@ NEW_JAVADOC = $(INTERIM_LANGTOOLS_ARGS) $(JAVADOC_MAIN_CLASS)
|
||||
|
||||
JLINK_KEEP_PACKAGED_MODULES:=@JLINK_KEEP_PACKAGED_MODULES@
|
||||
|
||||
RCFLAGS := @RCFLAGS@
|
||||
# Base flags for RC
|
||||
# Guarding this against resetting value. Legacy make files include spec multiple
|
||||
# times.
|
||||
ifndef RC_FLAGS
|
||||
RC_FLAGS:=@RC_FLAGS@
|
||||
endif
|
||||
|
||||
# Tools adhering to a minimal and common standard of posix compliance.
|
||||
AWK:=@AWK@
|
||||
|
||||
@@ -50,9 +50,9 @@ TOOLCHAIN_DESCRIPTION_microsoft="Microsoft Visual Studio"
|
||||
TOOLCHAIN_DESCRIPTION_xlc="IBM XL C/C++"
|
||||
|
||||
# Minimum supported versions, empty means unspecified
|
||||
TOOLCHAIN_MINIMUM_VERSION_clang="3.5"
|
||||
TOOLCHAIN_MINIMUM_VERSION_clang="3.2"
|
||||
TOOLCHAIN_MINIMUM_VERSION_gcc="5.0"
|
||||
TOOLCHAIN_MINIMUM_VERSION_microsoft="19.10.0.0" # VS2017
|
||||
TOOLCHAIN_MINIMUM_VERSION_microsoft="16.00.30319.01" # VS2010
|
||||
TOOLCHAIN_MINIMUM_VERSION_xlc=""
|
||||
|
||||
# Minimum supported linker versions, empty means unspecified
|
||||
|
||||
@@ -25,7 +25,55 @@
|
||||
|
||||
################################################################################
|
||||
# The order of these defines the priority by which we try to find them.
|
||||
VALID_VS_VERSIONS="2019 2017"
|
||||
VALID_VS_VERSIONS="2019 2017 2013 2015 2012 2010"
|
||||
|
||||
VS_DESCRIPTION_2010="Microsoft Visual Studio 2010"
|
||||
VS_VERSION_INTERNAL_2010=100
|
||||
VS_MSVCR_2010=msvcr100.dll
|
||||
# We don't use msvcp on Visual Studio 2010
|
||||
#VS_MSVCP_2010=msvcp100.dll
|
||||
VS_ENVVAR_2010="VS100COMNTOOLS"
|
||||
VS_VS_INSTALLDIR_2010="Microsoft Visual Studio 10.0"
|
||||
VS_SDK_INSTALLDIR_2010="Microsoft SDKs/Windows/v7.1"
|
||||
VS_VS_PLATFORM_NAME_2010="v100"
|
||||
VS_SDK_PLATFORM_NAME_2010="Windows7.1SDK"
|
||||
VS_SUPPORTED_2010=false
|
||||
|
||||
VS_DESCRIPTION_2012="Microsoft Visual Studio 2012"
|
||||
VS_VERSION_INTERNAL_2012=110
|
||||
VS_MSVCR_2012=msvcr110.dll
|
||||
VS_MSVCP_2012=msvcp110.dll
|
||||
VS_ENVVAR_2012="VS110COMNTOOLS"
|
||||
VS_VS_INSTALLDIR_2012="Microsoft Visual Studio 11.0"
|
||||
VS_SDK_INSTALLDIR_2012=
|
||||
VS_VS_PLATFORM_NAME_2012="v110"
|
||||
VS_SDK_PLATFORM_NAME_2012=
|
||||
VS_SUPPORTED_2012=false
|
||||
|
||||
VS_DESCRIPTION_2013="Microsoft Visual Studio 2013"
|
||||
VS_VERSION_INTERNAL_2013=120
|
||||
VS_MSVCR_2013=msvcr120.dll
|
||||
VS_MSVCP_2013=msvcp120.dll
|
||||
VS_ENVVAR_2013="VS120COMNTOOLS"
|
||||
VS_VS_INSTALLDIR_2013="Microsoft Visual Studio 12.0"
|
||||
VS_SDK_INSTALLDIR_2013=
|
||||
VS_VS_PLATFORM_NAME_2013="v120"
|
||||
VS_SDK_PLATFORM_NAME_2013=
|
||||
VS_SUPPORTED_2013=false
|
||||
|
||||
VS_DESCRIPTION_2015="Microsoft Visual Studio 2015"
|
||||
VS_VERSION_INTERNAL_2015=140
|
||||
VS_MSVCR_2015=vcruntime140.dll
|
||||
VS_MSVCP_2015=msvcp140.dll
|
||||
VS_ENVVAR_2015="VS140COMNTOOLS"
|
||||
VS_VS_INSTALLDIR_2015="Microsoft Visual Studio 14.0"
|
||||
VS_SDK_INSTALLDIR_2015=
|
||||
VS_VS_PLATFORM_NAME_2015="v140"
|
||||
VS_SDK_PLATFORM_NAME_2015=
|
||||
# The vcvars of 2015 breaks if 2017 is also installed. Work around this by
|
||||
# explicitly specifying Windows Kit 8.1 to be used.
|
||||
VS_ENV_ARGS_2015="8.1"
|
||||
VS_SUPPORTED_2015=false
|
||||
|
||||
VS_DESCRIPTION_2017="Microsoft Visual Studio 2017"
|
||||
VS_VERSION_INTERNAL_2017=141
|
||||
|
||||
@@ -52,15 +52,7 @@ AC_DEFUN([UTIL_REWRITE_AS_WINDOWS_MIXED_PATH],
|
||||
windows_path=`cmd //c echo $unix_path`
|
||||
$1="$windows_path"
|
||||
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
|
||||
windows_path=`$WSLPATH -m "$unix_path" 2>/dev/null`
|
||||
if test $? -ne 0; then
|
||||
dir=`dirname "$unix_path"`
|
||||
base=`basename "$unix_path"`
|
||||
windows_path=`$WSLPATH -m "$dir"`/"$base"
|
||||
if test $? -ne 0; then
|
||||
AC_MSG_ERROR([Cannot convert "$unix_path" to Windows path])
|
||||
fi
|
||||
fi
|
||||
windows_path=`$WSLPATH -m "$unix_path"`
|
||||
$1="$windows_path"
|
||||
fi
|
||||
])
|
||||
|
||||
@@ -43,7 +43,7 @@ $(eval $(call IncludeCustomExtension, common/FindTests.gmk))
|
||||
TEST_BASEDIRS += $(TOPDIR)/test $(TOPDIR)
|
||||
|
||||
# JTREG_TESTROOTS might have been set by a custom extension
|
||||
JTREG_TESTROOTS += $(addprefix $(TOPDIR)/test/, hotspot/jtreg jdk langtools jaxp lib-test)
|
||||
JTREG_TESTROOTS += $(addprefix $(TOPDIR)/test/, hotspot/jtreg jdk langtools jaxp)
|
||||
|
||||
# Extract the names of the Jtreg group files from the TEST.ROOT files. The
|
||||
# TEST.ROOT files being properties files can be interpreted as makefiles so
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -92,16 +92,6 @@ ProcessDir = \
|
||||
) \
|
||||
)
|
||||
|
||||
GLOBAL_VERSION_INFO_RESOURCE := $(TOPDIR)/src/java.base/windows/native/common/version.rc
|
||||
|
||||
JDK_RCFLAGS=$(RCFLAGS) \
|
||||
-D"JDK_VERSION_STRING=$(VERSION_STRING)" \
|
||||
-D"JDK_COMPANY=$(COMPANY_NAME)" \
|
||||
-D"JDK_VER=$(VERSION_NUMBER_FOUR_POSITIONS)" \
|
||||
-D"JDK_COPYRIGHT=Copyright \xA9 $(COPYRIGHT_YEAR)" \
|
||||
-D"JDK_NAME=$(JDK_RC_NAME) $(VERSION_SHORT)" \
|
||||
-D"JDK_FVER=$(subst .,$(COMMA),$(VERSION_NUMBER_FOUR_POSITIONS))"
|
||||
|
||||
# Setup make rules for creating a native shared library with suitable defaults
|
||||
# for the OpenJDK project.
|
||||
#
|
||||
@@ -110,7 +100,7 @@ JDK_RCFLAGS=$(RCFLAGS) \
|
||||
#
|
||||
# Remaining parameters are named arguments. These are all passed on to
|
||||
# SetupNativeCompilation, except for
|
||||
# EXTRA_RCFLAGS -- additional RCFLAGS to append.
|
||||
# EXTRA_RC_FLAGS -- additional RC_FLAGS to append.
|
||||
# EXTRA_HEADER_DIRS -- additional directories to look for headers in
|
||||
# EXTRA_SRC -- additional directories to look for source in
|
||||
# EXCLUDE_SRC_PATTERNS -- exclude source dirs matching these patterns from
|
||||
@@ -118,7 +108,6 @@ JDK_RCFLAGS=$(RCFLAGS) \
|
||||
# HEADERS_FROM_SRC -- if false, does not add source dirs automatically as
|
||||
# header include dirs. (Defaults to true.)
|
||||
# SRC -- this is passed on, but preprocessed to accept source dir designations
|
||||
# RC_FILEDESC -- override the default FILEDESC for Windows version.rc
|
||||
# such as "java.base:headers".
|
||||
SetupJdkLibrary = $(NamedParamsMacroTemplate)
|
||||
define SetupJdkLibraryBody
|
||||
@@ -148,20 +137,19 @@ define SetupJdkLibraryBody
|
||||
|
||||
ifeq ($$($1_VERSIONINFO_RESOURCE), )
|
||||
$1_VERSIONINFO_RESOURCE := $$(GLOBAL_VERSION_INFO_RESOURCE)
|
||||
else ifeq ($$($1_VERSIONINFO_RESOURCE), DISABLE)
|
||||
$1_VERSIONINFO_RESOURCE :=
|
||||
endif
|
||||
|
||||
ifeq ($$($1_RC_FILEDESC), )
|
||||
$1_RC_FILEDESC := $(JDK_RC_NAME) binary
|
||||
ifeq ($$($1_RC_FLAGS), )
|
||||
$1_RC_FLAGS := $(RC_FLAGS) \
|
||||
-D "JDK_FNAME=$$($1_NAME).dll" \
|
||||
-D "JDK_INTERNAL_NAME=$$($1_NAME)" \
|
||||
-D "JDK_FTYPE=0x2L"
|
||||
else ifeq ($$($1_RC_FLAGS), DISABLE)
|
||||
$1_RC_FLAGS :=
|
||||
endif
|
||||
|
||||
$1_RCFLAGS := $(JDK_RCFLAGS) \
|
||||
-D"JDK_FILEDESC=$$(strip $$($1_RC_FILEDESC))" \
|
||||
-D"JDK_FNAME=$$($1_NAME).dll" \
|
||||
-D"JDK_INTERNAL_NAME=$$($1_NAME)" \
|
||||
-D"JDK_FTYPE=0x2L" \
|
||||
-I$(TOPDIR)/src/java.base/windows/native/common \
|
||||
$$($1_EXTRA_RCFLAGS)
|
||||
|
||||
ifneq ($$($1_HEADERS_FROM_SRC), false)
|
||||
$1_SRC_HEADER_FLAGS := $$(addprefix -I, $$(wildcard $$($1_SRC)))
|
||||
endif
|
||||
@@ -183,6 +171,7 @@ define SetupJdkLibraryBody
|
||||
ifeq ($$($1_CFLAGS)$$($1_CXXFLAGS), )
|
||||
$1_CFLAGS += $$($1_SRC_HEADER_FLAGS) $$($1_EXTRA_HEADER_FLAGS)
|
||||
endif
|
||||
$1_RC_FLAGS += $$($1_EXTRA_RC_FLAGS)
|
||||
|
||||
# Since we reuse the rule name ($1), all our arguments will pass through.
|
||||
# We lose in transparency, but gain in brevity in this call...
|
||||
@@ -197,7 +186,7 @@ endef
|
||||
#
|
||||
# Remaining parameters are named arguments. These are all passed on to
|
||||
# SetupNativeCompilation, except for
|
||||
# EXTRA_RCFLAGS -- additional RCFLAGS to append.
|
||||
# EXTRA_RC_FLAGS -- additional RC_FLAGS to append.
|
||||
SetupJdkExecutable = $(NamedParamsMacroTemplate)
|
||||
define SetupJdkExecutableBody
|
||||
$1_TYPE := EXECUTABLE
|
||||
@@ -212,15 +201,20 @@ define SetupJdkExecutableBody
|
||||
|
||||
ifeq ($$($1_VERSIONINFO_RESOURCE), )
|
||||
$1_VERSIONINFO_RESOURCE := $$(GLOBAL_VERSION_INFO_RESOURCE)
|
||||
else ifeq ($$($1_VERSIONINFO_RESOURCE), DISABLE)
|
||||
$1_VERSIONINFO_RESOURCE :=
|
||||
endif
|
||||
|
||||
$1_RCFLAGS := $(JDK_RCFLAGS) \
|
||||
-D"JDK_FILEDESC=$(JDK_RC_NAME) binary" \
|
||||
-D"JDK_FNAME=$$($1_NAME).exe" \
|
||||
-D"JDK_INTERNAL_NAME=$$($1_NAME)" \
|
||||
-D"JDK_FTYPE=0x1L" \
|
||||
-I$(TOPDIR)/src/java.base/windows/native/common \
|
||||
$$($1_EXTRA_RCFLAGS)
|
||||
ifeq ($$($1_RC_FLAGS), )
|
||||
$1_RC_FLAGS := $(RC_FLAGS) \
|
||||
-D "JDK_FNAME=$$($1_NAME).exe" \
|
||||
-D "JDK_INTERNAL_NAME=$$($1_NAME)" \
|
||||
-D "JDK_FTYPE=0x01L"
|
||||
else ifeq ($$($1_RC_FLAGS), DISABLE)
|
||||
$1_RC_FLAGS :=
|
||||
endif
|
||||
|
||||
$1_RC_FLAGS += $$($1_EXTRA_RC_FLAGS)
|
||||
|
||||
# Since we reuse the rule name ($1), all our arguments will pass through.
|
||||
# We lose in transparency, but gain in brevity in this call...
|
||||
|
||||
@@ -484,7 +484,7 @@ endif
|
||||
# Defines the sub directory structure to store variable value file in
|
||||
DependOnVariableDirName = \
|
||||
$(strip $(addsuffix $(if $(MODULE),/$(MODULE)), \
|
||||
$(subst $(WORKSPACE_ROOT)/,, $(if $(filter /%, $(firstword $(MAKEFILE_LIST))), \
|
||||
$(subst $(TOPDIR)/,, $(if $(filter /%, $(firstword $(MAKEFILE_LIST))), \
|
||||
$(firstword $(MAKEFILE_LIST)), \
|
||||
$(CURDIR)/$(firstword $(MAKEFILE_LIST))))))
|
||||
|
||||
@@ -496,13 +496,6 @@ DependOnVariableFileName = \
|
||||
$(strip $(if $(strip $2), $2, \
|
||||
$(MAKESUPPORT_OUTPUTDIR)/vardeps/$(DependOnVariableDirName)/$(strip $1).vardeps))
|
||||
|
||||
# Writes the vardeps file. Assumes $1_filename has been setup
|
||||
# Param 1 - Name of variable
|
||||
DependOnVariableWriteFile = \
|
||||
$(call MakeDir, $(dir $($1_filename))) \
|
||||
$(call WriteFile, $1_old:=$(call DoubleDollar,$(call EscapeHash,$($1))), \
|
||||
$($1_filename)) \
|
||||
|
||||
# Does the actual work with parameters stripped.
|
||||
# If the file exists AND the contents is the same as the variable, do nothing
|
||||
# else print a new file.
|
||||
@@ -512,18 +505,14 @@ DependOnVariableWriteFile = \
|
||||
DependOnVariableHelper = \
|
||||
$(strip \
|
||||
$(eval $1_filename := $(call DependOnVariableFileName, $1, $2)) \
|
||||
$(if $(wildcard $($1_filename)), \
|
||||
$(eval include $($1_filename)) \
|
||||
$(if $(call equals, $(strip $($1)), $(strip $($1_old))),,\
|
||||
$(if $(findstring $(LOG_LEVEL), trace), \
|
||||
$(info NewVariable $1: >$(strip $($1))<) \
|
||||
$(info OldVariable $1: >$(strip $($1_old))<) \
|
||||
) \
|
||||
$(call DependOnVariableWriteFile,$1) \
|
||||
) \
|
||||
, \
|
||||
$(call DependOnVariableWriteFile,$1) \
|
||||
) \
|
||||
$(if $(wildcard $($1_filename)), $(eval include $($1_filename))) \
|
||||
$(if $(call equals, $(strip $($1)), $(strip $($1_old))),,\
|
||||
$(call MakeDir, $(dir $($1_filename))) \
|
||||
$(if $(findstring $(LOG_LEVEL), trace), \
|
||||
$(info NewVariable $1: >$(strip $($1))<) \
|
||||
$(info OldVariable $1: >$(strip $($1_old))<)) \
|
||||
$(call WriteFile, $1_old:=$(call DoubleDollar,$(call EscapeHash,$($1))), \
|
||||
$($1_filename))) \
|
||||
$($1_filename) \
|
||||
)
|
||||
|
||||
|
||||
@@ -346,7 +346,6 @@ $(MODULE_DEPS_MAKEFILE): $(MODULE_INFOS) \
|
||||
sub(/\/\*.*\*\//, ""); \
|
||||
gsub(/^ +\*.*/, ""); \
|
||||
gsub(/ /, ""); \
|
||||
gsub(/\r/, ""); \
|
||||
printf(" %s", $$0) } \
|
||||
END { printf("\n") }' $m && \
|
||||
$(PRINTF) "TRANSITIVE_MODULES_$(call GetModuleNameFromModuleInfo, $m) :=" && \
|
||||
@@ -360,7 +359,6 @@ $(MODULE_DEPS_MAKEFILE): $(MODULE_INFOS) \
|
||||
sub(/\/\*.*\*\//, ""); \
|
||||
gsub(/^ +\*.*/, ""); \
|
||||
gsub(/ /, ""); \
|
||||
gsub(/\r/, ""); \
|
||||
printf(" %s", $$0) } \
|
||||
END { printf("\n") }' $m \
|
||||
) >> $@ $(NEWLINE))
|
||||
|
||||
@@ -457,7 +457,7 @@ endef
|
||||
# EXTRA_OBJECT_FILES List of extra object files to include when linking
|
||||
# EXTRA_DEPS List of extra dependencies to be added to each compiled file
|
||||
# VERSIONINFO_RESOURCE Input file for RC. Setting this implies that RC will be run
|
||||
# RCFLAGS flags for RC.
|
||||
# RC_FLAGS flags for RC.
|
||||
# EMBED_MANIFEST if true, embed manifest on Windows.
|
||||
# MAPFILE mapfile
|
||||
# USE_MAPFILE_FOR_SYMBOLS if true and this is a STATIC_BUILD, just copy the
|
||||
@@ -860,7 +860,7 @@ define SetupNativeCompilationBody
|
||||
-include $$($1_RES_DEPS_FILE)
|
||||
-include $$($1_RES_DEPS_TARGETS_FILE)
|
||||
|
||||
$1_RES_VARDEPS := $$($1_RC) $$($1_RCFLAGS)
|
||||
$1_RES_VARDEPS := $$($1_RC) $$($1_RC_FLAGS)
|
||||
$1_RES_VARDEPS_FILE := $$(call DependOnVariable, $1_RES_VARDEPS, \
|
||||
$$($1_RES).vardeps)
|
||||
|
||||
@@ -868,7 +868,7 @@ define SetupNativeCompilationBody
|
||||
$$(call LogInfo, Compiling resource $$(notdir $$($1_VERSIONINFO_RESOURCE)) (for $$($1_BASENAME)))
|
||||
$$(call MakeDir, $$(@D) $$($1_OBJECT_DIR))
|
||||
$$(call ExecuteWithLog, $$@, $$(call MakeCommandRelative, \
|
||||
$$($1_RC) $$($1_RCFLAGS) $$($1_SYSROOT_CFLAGS) $(CC_OUT_OPTION)$$@ \
|
||||
$$($1_RC) $$($1_RC_FLAGS) $$($1_SYSROOT_CFLAGS) $(CC_OUT_OPTION)$$@ \
|
||||
$$($1_VERSIONINFO_RESOURCE) 2>&1 ))
|
||||
# Windows RC compiler does not support -showIncludes, so we mis-use CL
|
||||
# for this. Filter out RC specific arguments that are unknown to CL.
|
||||
@@ -876,7 +876,7 @@ define SetupNativeCompilationBody
|
||||
# includes to stderr so need to redirect it to hide the output from the
|
||||
# main log.
|
||||
$$(call ExecuteWithLog, $$($1_RES_DEPS_FILE).obj, \
|
||||
$$($1_CC) $$(filter-out -l%, $$($1_RCFLAGS)) \
|
||||
$$($1_CC) $$(filter-out -l%, $$($1_RC_FLAGS)) \
|
||||
$$($1_SYSROOT_CFLAGS) -showIncludes -nologo -TC \
|
||||
$(CC_OUT_OPTION)$$($1_RES_DEPS_FILE).obj -P -Fi$$($1_RES_DEPS_FILE).pp \
|
||||
$$($1_VERSIONINFO_RESOURCE)) 2>&1 \
|
||||
|
||||
@@ -62,11 +62,7 @@ define SetupTestFilesCompilationBody
|
||||
$1_OUTPUT_SUBDIR := lib
|
||||
$1_BASE_CFLAGS := $(CFLAGS_JDKLIB)
|
||||
$1_BASE_CXXFLAGS := $(CXXFLAGS_JDKLIB)
|
||||
ifeq ($(call isTargetOs, windows), false)
|
||||
$1_LDFLAGS := $(LDFLAGS_JDKLIB) $$(call SET_SHARED_LIBRARY_ORIGIN) -pthread
|
||||
else
|
||||
$1_LDFLAGS := $(LDFLAGS_JDKLIB) $$(call SET_SHARED_LIBRARY_ORIGIN)
|
||||
endif
|
||||
$1_LDFLAGS := $(LDFLAGS_JDKLIB) $$(call SET_SHARED_LIBRARY_ORIGIN)
|
||||
$1_COMPILATION_TYPE := LIBRARY
|
||||
else ifeq ($$($1_TYPE), PROGRAM)
|
||||
$1_PREFIX = exe
|
||||
|
||||
@@ -220,10 +220,6 @@ define ParseKeywordVariableBody
|
||||
$$(eval mangled_part_eval := $$(call DoubleDollar, $$(mangled_part))) \
|
||||
$$(eval part := $$$$(subst ||||,$$$$(SPACE),$$$$(mangled_part_eval))) \
|
||||
$$(eval $1_NO_MATCH := true) \
|
||||
$$(if $$(filter help, $$(part)), \
|
||||
$$(info Valid keywords for $1:) \
|
||||
$$(info $$($1_SINGLE_KEYWORDS) $$($1_STRING_KEYWORDS).) \
|
||||
$$(error Re-run without 'help' to continue)) \
|
||||
$$(foreach keyword, $$($1_SINGLE_KEYWORDS), \
|
||||
$$(eval keyword_eval := $$(call DoubleDollar, $$(keyword))) \
|
||||
$$(if $$(filter $$(keyword)=%, $$(part)), \
|
||||
|
||||
@@ -48,6 +48,7 @@ LAUNCHER_CFLAGS += -I$(TOPDIR)/src/java.base/share/native/launcher \
|
||||
-I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjli \
|
||||
-I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/native/libjli \
|
||||
#
|
||||
GLOBAL_VERSION_INFO_RESOURCE := $(TOPDIR)/src/java.base/windows/native/common/version.rc
|
||||
MACOSX_PLIST_DIR := $(TOPDIR)/src/java.base/macosx/native/launcher
|
||||
JAVA_MANIFEST := $(TOPDIR)/src/java.base/windows/native/launcher/java.manifest
|
||||
|
||||
@@ -70,7 +71,7 @@ JAVA_MANIFEST := $(TOPDIR)/src/java.base/windows/native/launcher/java.manifest
|
||||
# compile time defines exceeding Visual Studio 2013 limitations.
|
||||
# CFLAGS Additional CFLAGS
|
||||
# CFLAGS_windows Additional CFLAGS_windows
|
||||
# EXTRA_RCFLAGS Additional EXTRA_RCFLAGS
|
||||
# EXTRA_RC_FLAGS Additional EXTRA_RC_FLAGS
|
||||
# MACOSX_PRIVILEGED On macosx, allow to access other processes
|
||||
# OPTIMIZATION Override default optimization level (LOW)
|
||||
# OUTPUT_DIR Override default output directory
|
||||
@@ -159,7 +160,7 @@ define SetupBuildLauncherBody
|
||||
$(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib, \
|
||||
OUTPUT_DIR := $$($1_OUTPUT_DIR), \
|
||||
VERSIONINFO_RESOURCE := $$($1_VERSION_INFO_RESOURCE), \
|
||||
EXTRA_RCFLAGS := $$($1_EXTRA_RCFLAGS), \
|
||||
EXTRA_RC_FLAGS := $$($1_EXTRA_RC_FLAGS), \
|
||||
MANIFEST := $(JAVA_MANIFEST), \
|
||||
MANIFEST_VERSION := $(VERSION_NUMBER_FOUR_POSITIONS), \
|
||||
))
|
||||
|
||||
@@ -27,6 +27,8 @@ include JdkNativeCompilation.gmk
|
||||
|
||||
################################################################################
|
||||
|
||||
GLOBAL_VERSION_INFO_RESOURCE := $(TOPDIR)/src/java.base/windows/native/common/version.rc
|
||||
|
||||
# Absolute paths to lib files on windows for use in LIBS. Should figure out a more
|
||||
# elegant solution to this.
|
||||
WIN_JAVA_LIB := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib
|
||||
|
||||
@@ -960,7 +960,7 @@ var getJibProfilesDependencies = function (input, common) {
|
||||
|
||||
var devkit_platform_revisions = {
|
||||
linux_x64: "gcc9.2.0-OL6.4+1.0",
|
||||
macosx_x64: "Xcode11.3.1-MacOSX10.15+1.0",
|
||||
macosx_x64: "Xcode10.1-MacOSX10.14+1.0",
|
||||
windows_x64: "VS2019-16.5.3+1.0",
|
||||
linux_aarch64: "gcc9.2.0-OL7.6+1.0",
|
||||
linux_arm: "gcc8.2.0-Fedora27+1.0",
|
||||
|
||||
@@ -530,7 +530,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
"returned for each class. "
|
||||
"Generic signatures are described in the signature attribute "
|
||||
"section in "
|
||||
"<cite>The Java Virtual Machine Specification</cite>. "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. "
|
||||
"Since JDWP version 1.5."
|
||||
(Out
|
||||
)
|
||||
@@ -643,7 +643,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
)
|
||||
(Reply
|
||||
(int modBits "Modifier bits as defined in Chapter 4 of "
|
||||
"<cite>The Java Virtual Machine Specification</cite>")
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>")
|
||||
)
|
||||
(ErrorSet
|
||||
(Error INVALID_CLASS "refType is not the ID of a reference "
|
||||
@@ -671,7 +671,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
"which provide additional information on the "
|
||||
"field declaration. Individual flag values are "
|
||||
"defined in Chapter 4 of "
|
||||
"<cite>The Java Virtual Machine Specification</cite>. "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. "
|
||||
"In addition, The <code>0xf0000000</code> bit identifies "
|
||||
"the field as synthetic, if the synthetic attribute "
|
||||
"<a href=\"#JDWP_VirtualMachine_Capabilities\">capability</a> is available.")
|
||||
@@ -706,7 +706,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
"which provide additional information on the "
|
||||
"method declaration. Individual flag values are "
|
||||
"defined in Chapter 4 of "
|
||||
"<cite>The Java Virtual Machine Specification</cite>. "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. "
|
||||
"In addition, The <code>0xf0000000</code> bit identifies "
|
||||
"the method as synthetic, if the synthetic attribute "
|
||||
"<a href=\"#JDWP_VirtualMachine_Capabilities\">capability</a> is available.")
|
||||
@@ -793,7 +793,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
"Returns the current status of the reference type. The status "
|
||||
"indicates the extent to which the reference type has been "
|
||||
"initialized, as described in section 2.1.6 of "
|
||||
"<cite>The Java Virtual Machine Specification</cite>. "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. "
|
||||
"If the class is linked the PREPARED and VERIFIED bits in the returned status bits "
|
||||
"will be set. If the class is initialized the INITIALIZED bit in the returned "
|
||||
"status bits will be set. If an error occured during initialization then the "
|
||||
@@ -872,7 +872,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
"generic signature if there is one. "
|
||||
"Generic signatures are described in the signature attribute "
|
||||
"section in "
|
||||
"<cite>The Java Virtual Machine Specification</cite>. "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. "
|
||||
"Since JDWP version 1.5."
|
||||
(Out
|
||||
(referenceType refType "The reference type ID.")
|
||||
@@ -900,7 +900,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
"Fields are returned in the order they occur in the class file. "
|
||||
"Generic signatures are described in the signature attribute "
|
||||
"section in "
|
||||
"<cite>The Java Virtual Machine Specification</cite>. "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. "
|
||||
"Since JDWP version 1.5."
|
||||
(Out
|
||||
(referenceType refType "The reference type ID.")
|
||||
@@ -917,7 +917,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
"which provide additional information on the "
|
||||
"field declaration. Individual flag values are "
|
||||
"defined in Chapter 4 of "
|
||||
"<cite>The Java Virtual Machine Specification</cite>. "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. "
|
||||
"In addition, The <code>0xf0000000</code> bit identifies "
|
||||
"the field as synthetic, if the synthetic attribute "
|
||||
"<a href=\"#JDWP_VirtualMachine_Capabilities\">capability</a> is available.")
|
||||
@@ -942,7 +942,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
"Methods are returned in the order they occur in the class file. "
|
||||
"Generic signatures are described in the signature attribute "
|
||||
"section in "
|
||||
"<cite>The Java Virtual Machine Specification</cite>. "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. "
|
||||
"Since JDWP version 1.5."
|
||||
(Out
|
||||
(referenceType refType "The reference type ID.")
|
||||
@@ -959,7 +959,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
"which provide additional information on the "
|
||||
"method declaration. Individual flag values are "
|
||||
"defined in Chapter 4 of "
|
||||
"<cite>The Java Virtual Machine Specification</cite>. "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. "
|
||||
"In addition, The <code>0xf0000000</code> bit identifies "
|
||||
"the method as synthetic, if the synthetic attribute "
|
||||
"<a href=\"#JDWP_VirtualMachine_Capabilities\">capability</a> is available.")
|
||||
@@ -1022,7 +1022,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
(Command ConstantPool=18
|
||||
"Return the raw bytes of the constant pool in the format of the "
|
||||
"constant_pool item of the Class File Format in "
|
||||
"<cite>The Java Virtual Machine Specification</cite>. "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. "
|
||||
"<p>Since JDWP version 1.6. Requires canGetConstantPool capability - see "
|
||||
"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>.""
|
||||
(Out
|
||||
@@ -1032,7 +1032,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
(int count "Total number of constant pool entries plus one. This "
|
||||
"corresponds to the constant_pool_count item of the "
|
||||
"Class File Format in "
|
||||
"<cite>The Java Virtual Machine Specification</cite>. ")
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. ")
|
||||
(Repeat bytes
|
||||
(byte cpbytes "Raw bytes of constant pool")
|
||||
)
|
||||
@@ -1435,7 +1435,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
)
|
||||
(Command Bytecodes=3
|
||||
"Retrieve the method's bytecodes as defined in "
|
||||
"<cite>The Java Virtual Machine Specification</cite>. "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. "
|
||||
"Requires canGetBytecodes capability - see "
|
||||
"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
|
||||
(Out
|
||||
@@ -1491,7 +1491,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
"table. Also, synthetic variables may be present. "
|
||||
"Generic signatures are described in the signature attribute "
|
||||
"section in "
|
||||
"<cite>The Java Virtual Machine Specification</cite>. "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. "
|
||||
"Since JDWP version 1.5."
|
||||
(Out
|
||||
(referenceType refType "The class.")
|
||||
@@ -2082,7 +2082,7 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
"The method which will return early is referred to as the "
|
||||
"called method. The called method is the current method (as "
|
||||
"defined by the Frames section in "
|
||||
"<cite>The Java Virtual Machine Specification</cite>) "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>) "
|
||||
"for the specified thread at the time this command "
|
||||
"is received. "
|
||||
"<p>"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 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
|
||||
@@ -632,37 +632,10 @@ class name java/security/cert/X509CRL
|
||||
class name java/security/cert/X509Certificate
|
||||
-method name verify descriptor (Ljava/security/PublicKey;Ljava/security/Provider;)V
|
||||
|
||||
class name java/security/interfaces/RSAKey
|
||||
-method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec;
|
||||
|
||||
-class name java/security/spec/DSAGenParameterSpec
|
||||
|
||||
class name java/security/spec/MGF1ParameterSpec
|
||||
-field name SHA224 descriptor Ljava/security/spec/MGF1ParameterSpec;
|
||||
-field name SHA512_224 descriptor Ljava/security/spec/MGF1ParameterSpec;
|
||||
-field name SHA512_256 descriptor Ljava/security/spec/MGF1ParameterSpec;
|
||||
|
||||
class name java/security/spec/PSSParameterSpec
|
||||
-field name TRAILER_FIELD_BC descriptor I
|
||||
-method name toString descriptor ()Ljava/lang/String;
|
||||
|
||||
class name java/security/spec/RSAKeyGenParameterSpec
|
||||
-method name <init> descriptor (ILjava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
|
||||
-method name getKeyParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec;
|
||||
|
||||
class name java/security/spec/RSAMultiPrimePrivateCrtKeySpec
|
||||
-method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;[Ljava/security/spec/RSAOtherPrimeInfo;Ljava/security/spec/AlgorithmParameterSpec;)V
|
||||
|
||||
class name java/security/spec/RSAPrivateCrtKeySpec
|
||||
-method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
|
||||
|
||||
class name java/security/spec/RSAPrivateKeySpec
|
||||
-method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
|
||||
-method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec;
|
||||
|
||||
class name java/security/spec/RSAPublicKeySpec
|
||||
-method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
|
||||
-method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec;
|
||||
|
||||
class name java/text/Collator
|
||||
-method name getInstance descriptor (Ljava/util/Locale;)Ljava/text/Collator;
|
||||
@@ -1484,14 +1457,6 @@ method name newUpdater descriptor (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/
|
||||
|
||||
-class name java/util/function/UnaryOperator
|
||||
|
||||
class name java/util/jar/Attributes$Name
|
||||
-field name EXTENSION_INSTALLATION descriptor Ljava/util/jar/Attributes$Name;
|
||||
-field name IMPLEMENTATION_VENDOR_ID descriptor Ljava/util/jar/Attributes$Name;
|
||||
-field name IMPLEMENTATION_URL descriptor Ljava/util/jar/Attributes$Name;
|
||||
field name EXTENSION_INSTALLATION descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name IMPLEMENTATION_VENDOR_ID descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name IMPLEMENTATION_URL descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
|
||||
class name java/util/jar/JarFile
|
||||
-method name stream descriptor ()Ljava/util/stream/Stream;
|
||||
|
||||
@@ -1570,9 +1535,6 @@ class name java/util/zip/ZipEntry
|
||||
class name java/util/zip/ZipFile
|
||||
-method name stream descriptor ()Ljava/util/stream/Stream;
|
||||
|
||||
class name javax/crypto/SealedObject
|
||||
header extends java/lang/Object implements java/io/Serializable flags 21
|
||||
|
||||
class name javax/crypto/SecretKey
|
||||
header extends java/lang/Object implements java/security/Key flags 601
|
||||
|
||||
@@ -1597,12 +1559,6 @@ class name javax/net/ssl/ExtendedSSLSession
|
||||
|
||||
-class name javax/net/ssl/SNIServerName
|
||||
|
||||
class name javax/net/ssl/SSLEngine
|
||||
-method name getApplicationProtocol descriptor ()Ljava/lang/String;
|
||||
-method name getHandshakeApplicationProtocol descriptor ()Ljava/lang/String;
|
||||
-method name setHandshakeApplicationProtocolSelector descriptor (Ljava/util/function/BiFunction;)V
|
||||
-method name getHandshakeApplicationProtocolSelector descriptor ()Ljava/util/function/BiFunction;
|
||||
|
||||
class name javax/net/ssl/SSLParameters
|
||||
-method name setServerNames descriptor (Ljava/util/List;)V
|
||||
-method name getServerNames descriptor ()Ljava/util/List;
|
||||
@@ -1610,14 +1566,6 @@ class name javax/net/ssl/SSLParameters
|
||||
-method name getSNIMatchers descriptor ()Ljava/util/Collection;
|
||||
-method name setUseCipherSuitesOrder descriptor (Z)V
|
||||
-method name getUseCipherSuitesOrder descriptor ()Z
|
||||
-method name getApplicationProtocols descriptor ()[Ljava/lang/String;
|
||||
-method name setApplicationProtocols descriptor ([Ljava/lang/String;)V
|
||||
|
||||
class name javax/net/ssl/SSLSocket
|
||||
-method name getApplicationProtocol descriptor ()Ljava/lang/String;
|
||||
-method name getHandshakeApplicationProtocol descriptor ()Ljava/lang/String;
|
||||
-method name setHandshakeApplicationProtocolSelector descriptor (Ljava/util/function/BiFunction;)V
|
||||
-method name getHandshakeApplicationProtocolSelector descriptor ()Ljava/util/function/BiFunction;
|
||||
|
||||
class name javax/net/ssl/SSLSocketFactory
|
||||
-method name createSocket descriptor (Ljava/net/Socket;Ljava/io/InputStream;Z)Ljava/net/Socket;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 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
|
||||
@@ -8200,7 +8200,6 @@ method name getW descriptor ()Ljava/security/spec/ECPoint; flags 401
|
||||
class name java/security/interfaces/RSAKey
|
||||
header extends java/lang/Object flags 601 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
method name getModulus descriptor ()Ljava/math/BigInteger; flags 401
|
||||
method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; flags 1
|
||||
|
||||
class name java/security/interfaces/RSAMultiPrimePrivateCrtKey
|
||||
header extends java/lang/Object implements java/security/interfaces/RSAPrivateKey flags 601 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
@@ -8364,8 +8363,6 @@ field name SHA224 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19
|
||||
field name SHA256 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19
|
||||
field name SHA384 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19
|
||||
field name SHA512 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19
|
||||
field name SHA512_224 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19
|
||||
field name SHA512_256 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19
|
||||
method name <init> descriptor (Ljava/lang/String;)V flags 1
|
||||
method name getDigestAlgorithm descriptor ()Ljava/lang/String; flags 1
|
||||
|
||||
@@ -8378,7 +8375,6 @@ method name getFormat descriptor ()Ljava/lang/String; flags 11
|
||||
class name java/security/spec/PSSParameterSpec
|
||||
header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
field name DEFAULT descriptor Ljava/security/spec/PSSParameterSpec; flags 19
|
||||
field name TRAILER_FIELD_BC descriptor I constantValue 1 flags 19
|
||||
method name <init> descriptor (Ljava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;II)V flags 1
|
||||
method name <init> descriptor (I)V flags 1
|
||||
method name getDigestAlgorithm descriptor ()Ljava/lang/String; flags 1
|
||||
@@ -8386,7 +8382,6 @@ method name getMGFAlgorithm descriptor ()Ljava/lang/String; flags 1
|
||||
method name getMGFParameters descriptor ()Ljava/security/spec/AlgorithmParameterSpec; flags 1
|
||||
method name getSaltLength descriptor ()I flags 1
|
||||
method name getTrailerField descriptor ()I flags 1
|
||||
method name toString descriptor ()Ljava/lang/String; flags 1
|
||||
|
||||
class name java/security/spec/RSAKeyGenParameterSpec
|
||||
header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
@@ -8395,8 +8390,6 @@ field name F4 descriptor Ljava/math/BigInteger; flags 19
|
||||
method name <init> descriptor (ILjava/math/BigInteger;)V flags 1
|
||||
method name getKeysize descriptor ()I flags 1
|
||||
method name getPublicExponent descriptor ()Ljava/math/BigInteger; flags 1
|
||||
method name <init> descriptor (ILjava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V flags 1
|
||||
method name getKeyParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; flags 1
|
||||
|
||||
class name java/security/spec/RSAMultiPrimePrivateCrtKeySpec
|
||||
header extends java/security/spec/RSAPrivateKeySpec flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
@@ -8408,7 +8401,6 @@ method name getPrimeExponentP descriptor ()Ljava/math/BigInteger; flags 1
|
||||
method name getPrimeExponentQ descriptor ()Ljava/math/BigInteger; flags 1
|
||||
method name getCrtCoefficient descriptor ()Ljava/math/BigInteger; flags 1
|
||||
method name getOtherPrimeInfo descriptor ()[Ljava/security/spec/RSAOtherPrimeInfo; flags 1
|
||||
method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;[Ljava/security/spec/RSAOtherPrimeInfo;Ljava/security/spec/AlgorithmParameterSpec;)V flags 1
|
||||
|
||||
class name java/security/spec/RSAOtherPrimeInfo
|
||||
header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
@@ -8426,23 +8418,18 @@ method name getPrimeQ descriptor ()Ljava/math/BigInteger; flags 1
|
||||
method name getPrimeExponentP descriptor ()Ljava/math/BigInteger; flags 1
|
||||
method name getPrimeExponentQ descriptor ()Ljava/math/BigInteger; flags 1
|
||||
method name getCrtCoefficient descriptor ()Ljava/math/BigInteger; flags 1
|
||||
method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V flags 1
|
||||
|
||||
class name java/security/spec/RSAPrivateKeySpec
|
||||
header extends java/lang/Object implements java/security/spec/KeySpec flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;)V flags 1
|
||||
method name getModulus descriptor ()Ljava/math/BigInteger; flags 1
|
||||
method name getPrivateExponent descriptor ()Ljava/math/BigInteger; flags 1
|
||||
method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V flags 1
|
||||
method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; flags 1
|
||||
|
||||
class name java/security/spec/RSAPublicKeySpec
|
||||
header extends java/lang/Object implements java/security/spec/KeySpec flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;)V flags 1
|
||||
method name getModulus descriptor ()Ljava/math/BigInteger; flags 1
|
||||
method name getPublicExponent descriptor ()Ljava/math/BigInteger; flags 1
|
||||
method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V flags 1
|
||||
method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; flags 1
|
||||
|
||||
class name java/security/spec/X509EncodedKeySpec
|
||||
header extends java/security/spec/EncodedKeySpec flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
@@ -10442,7 +10429,6 @@ method name values descriptor ()[Ljava/time/chrono/JapaneseEra; flags 9
|
||||
method name getValue descriptor ()I flags 1
|
||||
method name range descriptor (Ljava/time/temporal/TemporalField;)Ljava/time/temporal/ValueRange; flags 1
|
||||
method name toString descriptor ()Ljava/lang/String; flags 1
|
||||
method name getDisplayName descriptor (Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String; flags 1
|
||||
|
||||
class name java/time/chrono/MinguoChronology
|
||||
header extends java/time/chrono/AbstractChronology implements java/io/Serializable flags 31 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
@@ -15577,15 +15563,15 @@ field name MAIN_CLASS descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name SEALED descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name EXTENSION_LIST descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name EXTENSION_NAME descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name EXTENSION_INSTALLATION descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name IMPLEMENTATION_TITLE descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name IMPLEMENTATION_VERSION descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name IMPLEMENTATION_VENDOR descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name IMPLEMENTATION_VENDOR_ID descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name IMPLEMENTATION_URL descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name SPECIFICATION_TITLE descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name SPECIFICATION_VERSION descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name SPECIFICATION_VENDOR descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
field name EXTENSION_INSTALLATION descriptor Ljava/util/jar/Attributes$Name; flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
|
||||
field name IMPLEMENTATION_VENDOR_ID descriptor Ljava/util/jar/Attributes$Name; flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
|
||||
field name IMPLEMENTATION_URL descriptor Ljava/util/jar/Attributes$Name; flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
|
||||
method name <init> descriptor (Ljava/lang/String;)V flags 1
|
||||
method name equals descriptor (Ljava/lang/Object;)Z flags 1
|
||||
method name hashCode descriptor ()I flags 1
|
||||
@@ -16712,7 +16698,6 @@ method name <init> descriptor ()V flags 1
|
||||
|
||||
class name javax/crypto/SealedObject
|
||||
header extends java/lang/Object implements java/io/Serializable flags 21
|
||||
innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
|
||||
field name encodedParams descriptor [B flags 4
|
||||
method name <init> descriptor (Ljava/io/Serializable;Ljavax/crypto/Cipher;)V thrownTypes java/io/IOException,javax/crypto/IllegalBlockSizeException flags 1
|
||||
method name <init> descriptor (Ljavax/crypto/SealedObject;)V flags 4
|
||||
@@ -17101,10 +17086,6 @@ method name setEnableSessionCreation descriptor (Z)V flags 401
|
||||
method name getEnableSessionCreation descriptor ()Z flags 401
|
||||
method name getSSLParameters descriptor ()Ljavax/net/ssl/SSLParameters; flags 1
|
||||
method name setSSLParameters descriptor (Ljavax/net/ssl/SSLParameters;)V flags 1
|
||||
method name getApplicationProtocol descriptor ()Ljava/lang/String; flags 1
|
||||
method name getHandshakeApplicationProtocol descriptor ()Ljava/lang/String; flags 1
|
||||
method name setHandshakeApplicationProtocolSelector descriptor (Ljava/util/function/BiFunction;)V flags 1 signature (Ljava/util/function/BiFunction<Ljavax/net/ssl/SSLEngine;Ljava/util/List<Ljava/lang/String;>;Ljava/lang/String;>;)V
|
||||
method name getHandshakeApplicationProtocolSelector descriptor ()Ljava/util/function/BiFunction; flags 1 signature ()Ljava/util/function/BiFunction<Ljavax/net/ssl/SSLEngine;Ljava/util/List<Ljava/lang/String;>;Ljava/lang/String;>;
|
||||
|
||||
class name javax/net/ssl/SSLEngineResult
|
||||
header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
@@ -17175,8 +17156,6 @@ method name setSNIMatchers descriptor (Ljava/util/Collection;)V flags 11 signatu
|
||||
method name getSNIMatchers descriptor ()Ljava/util/Collection; flags 11 signature ()Ljava/util/Collection<Ljavax/net/ssl/SNIMatcher;>;
|
||||
method name setUseCipherSuitesOrder descriptor (Z)V flags 11
|
||||
method name getUseCipherSuitesOrder descriptor ()Z flags 11
|
||||
method name getApplicationProtocols descriptor ()[Ljava/lang/String; flags 1
|
||||
method name setApplicationProtocols descriptor ([Ljava/lang/String;)V flags 1
|
||||
|
||||
class name javax/net/ssl/SSLPeerUnverifiedException
|
||||
header extends javax/net/ssl/SSLException flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
@@ -17293,10 +17272,6 @@ method name setEnableSessionCreation descriptor (Z)V flags 401
|
||||
method name getEnableSessionCreation descriptor ()Z flags 401
|
||||
method name getSSLParameters descriptor ()Ljavax/net/ssl/SSLParameters; flags 1
|
||||
method name setSSLParameters descriptor (Ljavax/net/ssl/SSLParameters;)V flags 1
|
||||
method name getApplicationProtocol descriptor ()Ljava/lang/String; flags 1
|
||||
method name getHandshakeApplicationProtocol descriptor ()Ljava/lang/String; flags 1
|
||||
method name setHandshakeApplicationProtocolSelector descriptor (Ljava/util/function/BiFunction;)V flags 1 signature (Ljava/util/function/BiFunction<Ljavax/net/ssl/SSLSocket;Ljava/util/List<Ljava/lang/String;>;Ljava/lang/String;>;)V
|
||||
method name getHandshakeApplicationProtocolSelector descriptor ()Ljava/util/function/BiFunction; flags 1 signature ()Ljava/util/function/BiFunction<Ljavax/net/ssl/SSLSocket;Ljava/util/List<Ljava/lang/String;>;Ljava/lang/String;>;
|
||||
|
||||
class name javax/net/ssl/SSLSocketFactory
|
||||
header extends javax/net/SocketFactory flags 421 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 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
|
||||
@@ -2083,42 +2083,13 @@ method name equals descriptor (Ljava/lang/Object;)Z flags 1
|
||||
method name toString descriptor ()Ljava/lang/String; flags 1
|
||||
method name clone descriptor ()Ljava/lang/Object; thrownTypes java/lang/CloneNotSupportedException flags 1041
|
||||
|
||||
class name java/security/interfaces/RSAKey
|
||||
-method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec;
|
||||
|
||||
class name java/security/spec/EncodedKeySpec
|
||||
method name <init> descriptor ([BLjava/lang/String;)V flags 4
|
||||
method name getAlgorithm descriptor ()Ljava/lang/String; flags 1
|
||||
|
||||
class name java/security/spec/MGF1ParameterSpec
|
||||
-field name SHA512_224 descriptor Ljava/security/spec/MGF1ParameterSpec;
|
||||
-field name SHA512_256 descriptor Ljava/security/spec/MGF1ParameterSpec;
|
||||
|
||||
class name java/security/spec/PKCS8EncodedKeySpec
|
||||
method name <init> descriptor ([BLjava/lang/String;)V flags 1
|
||||
|
||||
class name java/security/spec/PSSParameterSpec
|
||||
-field name TRAILER_FIELD_BC descriptor I
|
||||
-method name toString descriptor ()Ljava/lang/String;
|
||||
|
||||
class name java/security/spec/RSAKeyGenParameterSpec
|
||||
-method name <init> descriptor (ILjava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
|
||||
-method name getKeyParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec;
|
||||
|
||||
class name java/security/spec/RSAMultiPrimePrivateCrtKeySpec
|
||||
-method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;[Ljava/security/spec/RSAOtherPrimeInfo;Ljava/security/spec/AlgorithmParameterSpec;)V
|
||||
|
||||
class name java/security/spec/RSAPrivateCrtKeySpec
|
||||
-method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
|
||||
|
||||
class name java/security/spec/RSAPrivateKeySpec
|
||||
-method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
|
||||
-method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec;
|
||||
|
||||
class name java/security/spec/RSAPublicKeySpec
|
||||
-method name <init> descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
|
||||
-method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec;
|
||||
|
||||
class name java/security/spec/X509EncodedKeySpec
|
||||
method name <init> descriptor ([BLjava/lang/String;)V flags 1
|
||||
|
||||
@@ -2253,6 +2224,9 @@ innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang
|
||||
class name java/time/chrono/IsoChronology
|
||||
method name epochSecond descriptor (IIIIIILjava/time/ZoneOffset;)J flags 1
|
||||
|
||||
class name java/time/chrono/JapaneseEra
|
||||
method name getDisplayName descriptor (Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String; flags 1
|
||||
|
||||
class name java/time/format/DateTimeFormatter
|
||||
header extends java/lang/Object flags 31
|
||||
innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
|
||||
@@ -3247,6 +3221,12 @@ header extends java/lang/Object implements java/util/function/Function flags 601
|
||||
innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
|
||||
|
||||
class name java/util/jar/Attributes$Name
|
||||
-field name EXTENSION_INSTALLATION descriptor Ljava/util/jar/Attributes$Name;
|
||||
-field name IMPLEMENTATION_VENDOR_ID descriptor Ljava/util/jar/Attributes$Name;
|
||||
-field name IMPLEMENTATION_URL descriptor Ljava/util/jar/Attributes$Name;
|
||||
field name EXTENSION_INSTALLATION descriptor Ljava/util/jar/Attributes$Name; flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
|
||||
field name IMPLEMENTATION_VENDOR_ID descriptor Ljava/util/jar/Attributes$Name; flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
|
||||
field name IMPLEMENTATION_URL descriptor Ljava/util/jar/Attributes$Name; flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
|
||||
field name MULTI_RELEASE descriptor Ljava/util/jar/Attributes$Name; flags 19
|
||||
|
||||
class name java/util/jar/JarFile
|
||||
@@ -3401,9 +3381,6 @@ method name finalize descriptor ()V thrownTypes java/io/IOException flags 4 depr
|
||||
class name javax/crypto/ExemptionMechanism
|
||||
-method name finalize descriptor ()V
|
||||
|
||||
class name javax/crypto/SealedObject
|
||||
header extends java/lang/Object implements java/io/Serializable flags 21
|
||||
|
||||
class name javax/net/ssl/ExtendedSSLSession
|
||||
method name getStatusResponses descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List<[B>;
|
||||
|
||||
@@ -3411,6 +3388,12 @@ class name javax/net/ssl/HandshakeCompletedEvent
|
||||
-method name getPeerCertificateChain descriptor ()[Ljavax/security/cert/X509Certificate;
|
||||
method name getPeerCertificateChain descriptor ()[Ljavax/security/cert/X509Certificate; thrownTypes javax/net/ssl/SSLPeerUnverifiedException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9")
|
||||
|
||||
class name javax/net/ssl/SSLEngine
|
||||
method name getApplicationProtocol descriptor ()Ljava/lang/String; flags 1
|
||||
method name getHandshakeApplicationProtocol descriptor ()Ljava/lang/String; flags 1
|
||||
method name setHandshakeApplicationProtocolSelector descriptor (Ljava/util/function/BiFunction;)V flags 1 signature (Ljava/util/function/BiFunction<Ljavax/net/ssl/SSLEngine;Ljava/util/List<Ljava/lang/String;>;Ljava/lang/String;>;)V
|
||||
method name getHandshakeApplicationProtocolSelector descriptor ()Ljava/util/function/BiFunction; flags 1 signature ()Ljava/util/function/BiFunction<Ljavax/net/ssl/SSLEngine;Ljava/util/List<Ljava/lang/String;>;Ljava/lang/String;>;
|
||||
|
||||
class name javax/net/ssl/SSLEngineResult
|
||||
header extends java/lang/Object flags 21
|
||||
innerclass innerClass javax/net/ssl/SSLEngineResult$HandshakeStatus outerClass javax/net/ssl/SSLEngineResult innerClassName HandshakeStatus flags 4019
|
||||
@@ -3426,11 +3409,19 @@ method name setEnableRetransmissions descriptor (Z)V flags 1
|
||||
method name getEnableRetransmissions descriptor ()Z flags 1
|
||||
method name setMaximumPacketSize descriptor (I)V flags 1
|
||||
method name getMaximumPacketSize descriptor ()I flags 1
|
||||
method name getApplicationProtocols descriptor ()[Ljava/lang/String; flags 1
|
||||
method name setApplicationProtocols descriptor ([Ljava/lang/String;)V flags 1
|
||||
|
||||
class name javax/net/ssl/SSLSession
|
||||
-method name getPeerCertificateChain descriptor ()[Ljavax/security/cert/X509Certificate;
|
||||
method name getPeerCertificateChain descriptor ()[Ljavax/security/cert/X509Certificate; thrownTypes javax/net/ssl/SSLPeerUnverifiedException flags 401 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9")
|
||||
|
||||
class name javax/net/ssl/SSLSocket
|
||||
method name getApplicationProtocol descriptor ()Ljava/lang/String; flags 1
|
||||
method name getHandshakeApplicationProtocol descriptor ()Ljava/lang/String; flags 1
|
||||
method name setHandshakeApplicationProtocolSelector descriptor (Ljava/util/function/BiFunction;)V flags 1 signature (Ljava/util/function/BiFunction<Ljavax/net/ssl/SSLSocket;Ljava/util/List<Ljava/lang/String;>;Ljava/lang/String;>;)V
|
||||
method name getHandshakeApplicationProtocolSelector descriptor ()Ljava/util/function/BiFunction; flags 1 signature ()Ljava/util/function/BiFunction<Ljavax/net/ssl/SSLSocket;Ljava/util/List<Ljava/lang/String;>;Ljava/lang/String;>;
|
||||
|
||||
class name javax/security/auth/Policy
|
||||
header extends java/lang/Object flags 421 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.4")
|
||||
|
||||
|
||||
@@ -107,7 +107,6 @@ innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang
|
||||
innerclass innerClass java/lang/invoke/MethodHandles$Lookup$ClassOption outerClass java/lang/invoke/MethodHandles$Lookup innerClassName ClassOption flags 4019
|
||||
innerclass innerClass java/lang/invoke/VarHandle$AccessMode outerClass java/lang/invoke/VarHandle innerClassName AccessMode flags 4019
|
||||
method name defineHiddenClass descriptor ([BZ[Ljava/lang/invoke/MethodHandles$Lookup$ClassOption;)Ljava/lang/invoke/MethodHandles$Lookup; thrownTypes java/lang/IllegalAccessException flags 81
|
||||
method name ensureInitialized descriptor (Ljava/lang/Class;)Ljava/lang/Class; thrownTypes java/lang/IllegalAccessException flags 1 signature (Ljava/lang/Class<*>;)Ljava/lang/Class<*>;
|
||||
|
||||
class name java/lang/invoke/MethodHandles$Lookup$ClassOption
|
||||
header extends java/lang/Enum nestHost java/lang/invoke/MethodHandles flags 4031 signature Ljava/lang/Enum<Ljava/lang/invoke/MethodHandles$Lookup$ClassOption;>;
|
||||
@@ -182,20 +181,6 @@ class name java/nio/channels/spi/SelectorProvider
|
||||
method name openSocketChannel descriptor (Ljava/net/ProtocolFamily;)Ljava/nio/channels/SocketChannel; thrownTypes java/io/IOException flags 1
|
||||
method name openServerSocketChannel descriptor (Ljava/net/ProtocolFamily;)Ljava/nio/channels/ServerSocketChannel; thrownTypes java/io/IOException flags 1
|
||||
|
||||
class name java/security/KeyStore
|
||||
header extends java/lang/Object nestMembers java/security/KeyStore$Builder,java/security/KeyStore$TrustedCertificateEntry,java/security/KeyStore$SecretKeyEntry,java/security/KeyStore$PrivateKeyEntry,java/security/KeyStore$Entry,java/security/KeyStore$Entry$Attribute,java/security/KeyStore$CallbackHandlerProtection,java/security/KeyStore$PasswordProtection,java/security/KeyStore$ProtectionParameter,java/security/KeyStore$LoadStoreParameter flags 21
|
||||
innerclass innerClass java/security/KeyStore$LoadStoreParameter outerClass java/security/KeyStore innerClassName LoadStoreParameter flags 609
|
||||
innerclass innerClass java/security/KeyStore$ProtectionParameter outerClass java/security/KeyStore innerClassName ProtectionParameter flags 609
|
||||
innerclass innerClass java/security/KeyStore$Entry outerClass java/security/KeyStore innerClassName Entry flags 609
|
||||
innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9
|
||||
innerclass innerClass java/security/KeyStore$Builder outerClass java/security/KeyStore innerClassName Builder flags 409
|
||||
innerclass innerClass java/security/KeyStore$TrustedCertificateEntry outerClass java/security/KeyStore innerClassName TrustedCertificateEntry flags 19
|
||||
innerclass innerClass java/security/KeyStore$SecretKeyEntry outerClass java/security/KeyStore innerClassName SecretKeyEntry flags 19
|
||||
innerclass innerClass java/security/KeyStore$PrivateKeyEntry outerClass java/security/KeyStore innerClassName PrivateKeyEntry flags 19
|
||||
innerclass innerClass java/security/KeyStore$CallbackHandlerProtection outerClass java/security/KeyStore innerClassName CallbackHandlerProtection flags 9
|
||||
innerclass innerClass java/security/KeyStore$PasswordProtection outerClass java/security/KeyStore innerClassName PasswordProtection flags 9
|
||||
innerclass innerClass java/security/KeyStore$Entry$Attribute outerClass java/security/KeyStore$Entry innerClassName Attribute flags 609
|
||||
|
||||
class name java/security/interfaces/EdECKey
|
||||
header extends java/lang/Object flags 601
|
||||
method name getParams descriptor ()Ljava/security/spec/NamedParameterSpec; flags 401
|
||||
@@ -254,18 +239,18 @@ method name merge descriptor (Ljava/lang/Object;Ljava/lang/Object;Ljava/util/fun
|
||||
|
||||
class name java/util/concurrent/locks/StampedLock
|
||||
header extends java/lang/Object implements java/io/Serializable flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
|
||||
-method name tryWriteLock descriptor ()J
|
||||
-method name writeLockInterruptibly descriptor ()J
|
||||
-method name tryReadLock descriptor ()J
|
||||
-method name tryReadLock descriptor (JLjava/util/concurrent/TimeUnit;)J
|
||||
-method name readLockInterruptibly descriptor ()J
|
||||
-method name unlock descriptor (J)V
|
||||
method name tryWriteLock descriptor ()J flags 1
|
||||
method name writeLockInterruptibly descriptor ()J thrownTypes java/lang/InterruptedException flags 1
|
||||
method name tryReadLock descriptor ()J flags 1
|
||||
method name tryReadLock descriptor (JLjava/util/concurrent/TimeUnit;)J thrownTypes java/lang/InterruptedException flags 1
|
||||
method name readLockInterruptibly descriptor ()J thrownTypes java/lang/InterruptedException flags 1
|
||||
method name unlock descriptor (J)V flags 1
|
||||
-method name tryWriteLock descriptor ()J
|
||||
-method name writeLockInterruptibly descriptor ()J
|
||||
-method name tryReadLock descriptor ()J
|
||||
-method name tryReadLock descriptor (JLjava/util/concurrent/TimeUnit;)J
|
||||
-method name readLockInterruptibly descriptor ()J
|
||||
-method name unlock descriptor (J)V
|
||||
|
||||
class name javax/net/ssl/SSLSession
|
||||
-method name getPeerCertificateChain descriptor ()[Ljavax/security/cert/X509Certificate;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 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
|
||||
@@ -77,9 +77,6 @@ class name javax/swing/ImageIcon
|
||||
field name component descriptor Ljava/awt/Component; flags 1c
|
||||
field name tracker descriptor Ljava/awt/MediaTracker; flags 1c
|
||||
|
||||
class name javax/swing/JComboBox
|
||||
-method name processKeyBinding descriptor (Ljavax/swing/KeyStroke;Ljava/awt/event/KeyEvent;IZ)Z
|
||||
|
||||
class name javax/swing/JComponent
|
||||
field name accessibleContext descriptor Ljavax/accessibility/AccessibleContext; flags 4
|
||||
-method name hide descriptor ()V
|
||||
@@ -93,12 +90,8 @@ field name accessibleFocusHandler descriptor Ljava/awt/event/FocusListener; flag
|
||||
class name javax/swing/JDesktopPane
|
||||
-method name remove descriptor (Ljava/awt/Component;)V
|
||||
|
||||
class name javax/swing/JList$AccessibleJList$AccessibleJListChild
|
||||
method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; flags 1
|
||||
|
||||
class name javax/swing/plaf/basic/BasicRadioButtonUI
|
||||
-method name installListeners descriptor (Ljavax/swing/AbstractButton;)V
|
||||
-method name uninstallListeners descriptor (Ljavax/swing/AbstractButton;)V
|
||||
class name javax/swing/JViewport
|
||||
-method name addNotify descriptor ()V
|
||||
|
||||
class name javax/swing/tree/DefaultMutableTreeNode
|
||||
-method name setParent descriptor (Ljavax/swing/tree/MutableTreeNode;)V
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 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
|
||||
@@ -13524,7 +13524,6 @@ method name getItemAt descriptor (I)Ljava/lang/Object; flags 1 signature (I)TE;
|
||||
method name createDefaultKeySelectionManager descriptor ()Ljavax/swing/JComboBox$KeySelectionManager; flags 4
|
||||
method name paramString descriptor ()Ljava/lang/String; flags 4
|
||||
method name getAccessibleContext descriptor ()Ljavax/accessibility/AccessibleContext; flags 1
|
||||
method name processKeyBinding descriptor (Ljavax/swing/KeyStroke;Ljava/awt/event/KeyEvent;IZ)Z flags 4
|
||||
|
||||
class name javax/swing/JComboBox$AccessibleJComboBox
|
||||
header extends javax/swing/JComponent$AccessibleJComponent implements javax/accessibility/AccessibleAction,javax/accessibility/AccessibleSelection flags 21
|
||||
@@ -14605,6 +14604,7 @@ method name getAccessibleChild descriptor (I)Ljavax/accessibility/Accessible; fl
|
||||
method name getLocale descriptor ()Ljava/util/Locale; flags 1
|
||||
method name addPropertyChangeListener descriptor (Ljava/beans/PropertyChangeListener;)V flags 1
|
||||
method name removePropertyChangeListener descriptor (Ljava/beans/PropertyChangeListener;)V flags 1
|
||||
method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; flags 1
|
||||
method name getAccessibleComponent descriptor ()Ljavax/accessibility/AccessibleComponent; flags 1
|
||||
method name getAccessibleSelection descriptor ()Ljavax/accessibility/AccessibleSelection; flags 1
|
||||
method name getAccessibleText descriptor ()Ljavax/accessibility/AccessibleText; flags 1
|
||||
@@ -16720,6 +16720,7 @@ method name updateUI descriptor ()V flags 1
|
||||
method name getUIClassID descriptor ()Ljava/lang/String; flags 1
|
||||
method name addImpl descriptor (Ljava/awt/Component;Ljava/lang/Object;I)V flags 4
|
||||
method name remove descriptor (Ljava/awt/Component;)V flags 1
|
||||
method name addNotify descriptor ()V flags 1
|
||||
method name scrollRectToVisible descriptor (Ljava/awt/Rectangle;)V flags 1
|
||||
method name setBorder descriptor (Ljavax/swing/border/Border;)V flags 11
|
||||
method name getInsets descriptor ()Ljava/awt/Insets; flags 11
|
||||
@@ -20280,8 +20281,6 @@ method name getDefaultIcon descriptor ()Ljavax/swing/Icon; flags 1
|
||||
method name paint descriptor (Ljava/awt/Graphics;Ljavax/swing/JComponent;)V flags 21
|
||||
method name paintFocus descriptor (Ljava/awt/Graphics;Ljava/awt/Rectangle;Ljava/awt/Dimension;)V flags 4
|
||||
method name getPreferredSize descriptor (Ljavax/swing/JComponent;)Ljava/awt/Dimension; flags 1
|
||||
method name installListeners descriptor (Ljavax/swing/AbstractButton;)V flags 4
|
||||
method name uninstallListeners descriptor (Ljavax/swing/AbstractButton;)V flags 4
|
||||
|
||||
class name javax/swing/plaf/basic/BasicRootPaneUI
|
||||
header extends javax/swing/plaf/RootPaneUI implements java/beans/PropertyChangeListener flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I4)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 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
|
||||
@@ -2524,6 +2524,7 @@ method name getPopupMenuListeners descriptor ()[Ljavax/swing/event/PopupMenuList
|
||||
method name setAction descriptor (Ljavax/swing/Action;)V flags 1 runtimeAnnotations @Ljava/beans/BeanProperty;(visualUpdate=Ztrue,description="the\u005C;u0020;Action\u005C;u0020;instance\u005C;u0020;connected\u005C;u0020;with\u005C;u0020;this\u005C;u0020;ActionEvent\u005C;u0020;source")
|
||||
method name getSelectedObjects descriptor ()[Ljava/lang/Object; flags 1 runtimeAnnotations @Ljava/beans/BeanProperty;(bound=Zfalse)
|
||||
method name setEnabled descriptor (Z)V flags 1 runtimeAnnotations @Ljava/beans/BeanProperty;(description="The\u005C;u0020;enabled\u005C;u0020;state\u005C;u0020;of\u005C;u0020;the\u005C;u0020;component.",preferred=Ztrue)
|
||||
method name processKeyBinding descriptor (Ljavax/swing/KeyStroke;Ljava/awt/event/KeyEvent;IZ)Z flags 4
|
||||
method name setKeySelectionManager descriptor (Ljavax/swing/JComboBox$KeySelectionManager;)V flags 1 runtimeAnnotations @Ljava/beans/BeanProperty;(expert=Ztrue,bound=Zfalse,description="The\u005C;u0020;objects\u005C;u0020;that\u005C;u0020;changes\u005C;u0020;the\u005C;u0020;selection\u005C;u0020;when\u005C;u0020;a\u005C;u0020;key\u005C;u0020;is\u005C;u0020;pressed.")
|
||||
method name getItemCount descriptor ()I flags 1 runtimeAnnotations @Ljava/beans/BeanProperty;(bound=Zfalse)
|
||||
method name getAccessibleContext descriptor ()Ljavax/accessibility/AccessibleContext; flags 1 runtimeAnnotations @Ljava/beans/BeanProperty;(bound=Zfalse)
|
||||
@@ -3038,7 +3039,6 @@ class name javax/swing/JList$AccessibleJList$AccessibleJListChild
|
||||
header extends javax/accessibility/AccessibleContext implements javax/accessibility/Accessible,javax/accessibility/AccessibleComponent,javax/accessibility/AccessibleAction flags 21
|
||||
innerclass innerClass javax/swing/JList$AccessibleJList outerClass javax/swing/JList innerClassName AccessibleJList flags 4
|
||||
innerclass innerClass javax/swing/JList$AccessibleJList$AccessibleJListChild outerClass javax/swing/JList$AccessibleJList innerClassName AccessibleJListChild flags 4
|
||||
method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; flags 1
|
||||
method name doAccessibleAction descriptor (I)Z flags 1
|
||||
method name getAccessibleActionDescription descriptor (I)Ljava/lang/String; flags 1
|
||||
method name getAccessibleActionCount descriptor ()I flags 1
|
||||
@@ -3907,6 +3907,7 @@ innerclass innerClass javax/swing/JViewport$AccessibleJViewport outerClass javax
|
||||
innerclass innerClass javax/swing/JViewport$ViewListener outerClass javax/swing/JViewport innerClassName ViewListener flags 4
|
||||
innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
|
||||
-method name setUI descriptor (Ljavax/swing/plaf/ViewportUI;)V
|
||||
-method name addNotify descriptor ()V
|
||||
-method name getInsets descriptor (Ljava/awt/Insets;)Ljava/awt/Insets;
|
||||
-method name setScrollMode descriptor (I)V
|
||||
method name setUI descriptor (Ljavax/swing/plaf/ViewportUI;)V flags 1 runtimeAnnotations @Ljava/beans/BeanProperty;(hidden=Ztrue,visualUpdate=Ztrue,description="The\u005C;u0020;UI\u005C;u0020;object\u005C;u0020;that\u005C;u0020;implements\u005C;u0020;the\u005C;u0020;Component's\u005C;u0020;LookAndFeel.")
|
||||
@@ -4401,6 +4402,8 @@ innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang
|
||||
class name javax/swing/plaf/basic/BasicRadioButtonUI
|
||||
header extends javax/swing/plaf/basic/BasicToggleButtonUI flags 21
|
||||
innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
|
||||
method name installListeners descriptor (Ljavax/swing/AbstractButton;)V flags 4
|
||||
method name uninstallListeners descriptor (Ljavax/swing/AbstractButton;)V flags 4
|
||||
|
||||
class name javax/swing/plaf/basic/BasicScrollBarUI
|
||||
header extends javax/swing/plaf/ScrollBarUI implements java/awt/LayoutManager,javax/swing/SwingConstants flags 21
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# 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 IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
|
||||
# ##########################################################
|
||||
#
|
||||
class name java/rmi/activation/Activatable
|
||||
header extends java/rmi/server/RemoteServer flags 421 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
|
||||
class name java/rmi/activation/ActivateFailedException
|
||||
header extends java/rmi/RemoteException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
|
||||
class name java/rmi/activation/ActivationDesc
|
||||
header extends java/lang/Object implements java/io/Serializable flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
|
||||
class name java/rmi/activation/ActivationException
|
||||
header extends java/lang/Exception flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
|
||||
|
||||
class name java/rmi/activation/ActivationGroup
|
||||
header extends java/rmi/server/UnicastRemoteObject implements java/rmi/activation/ActivationInstantiator flags 421 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
|
||||
|
||||
class name java/rmi/activation/ActivationGroupDesc
|
||||
header extends java/lang/Object implements java/io/Serializable nestMembers java/rmi/activation/ActivationGroupDesc$CommandEnvironment flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
innerclass innerClass java/rmi/activation/ActivationGroupDesc$CommandEnvironment outerClass java/rmi/activation/ActivationGroupDesc innerClassName CommandEnvironment flags 9
|
||||
|
||||
class name java/rmi/activation/ActivationGroupID
|
||||
header extends java/lang/Object implements java/io/Serializable flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
|
||||
class name java/rmi/activation/ActivationGroup_Stub
|
||||
header extends java/rmi/server/RemoteStub implements java/rmi/activation/ActivationInstantiator,java/rmi/Remote flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
|
||||
class name java/rmi/activation/ActivationID
|
||||
header extends java/lang/Object implements java/io/Serializable flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
|
||||
|
||||
class name java/rmi/activation/ActivationInstantiator
|
||||
header extends java/lang/Object implements java/rmi/Remote flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
|
||||
class name java/rmi/activation/ActivationMonitor
|
||||
header extends java/lang/Object implements java/rmi/Remote flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
|
||||
class name java/rmi/activation/ActivationSystem
|
||||
header extends java/lang/Object implements java/rmi/Remote flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
|
||||
class name java/rmi/activation/Activator
|
||||
header extends java/lang/Object implements java/rmi/Remote flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
|
||||
class name java/rmi/activation/UnknownGroupException
|
||||
header extends java/rmi/activation/ActivationException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
|
||||
class name java/rmi/activation/UnknownObjectException
|
||||
header extends java/rmi/activation/ActivationException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")
|
||||
|
||||
@@ -27,6 +27,6 @@
|
||||
# ##########################################################
|
||||
#
|
||||
class name javax/xml/stream/XMLInputFactory
|
||||
-method name newFactory descriptor ()Ljavax/xml/stream/XMLInputFactory;
|
||||
method name newFactory descriptor ()Ljavax/xml/stream/XMLInputFactory; thrownTypes javax/xml/stream/FactoryConfigurationError flags 9
|
||||
-method name newFactory descriptor ()Ljavax/xml/stream/XMLInputFactory;
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# 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 IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
|
||||
# ##########################################################
|
||||
#
|
||||
class name com/sun/jdi/VirtualMachine
|
||||
-method name canAddMethod descriptor ()Z
|
||||
-method name canUnrestrictedlyRedefineClasses descriptor ()Z
|
||||
method name canAddMethod descriptor ()Z flags 401 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="15")
|
||||
method name canUnrestrictedlyRedefineClasses descriptor ()Z flags 401 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="15")
|
||||
|
||||
@@ -27,11 +27,5 @@
|
||||
# ##########################################################
|
||||
#
|
||||
class name jdk/net/ExtendedSocketOptions
|
||||
header extends java/lang/Object flags 31
|
||||
-field name SO_FLOW_SLA descriptor Ljava/net/SocketOption;
|
||||
field name SO_INCOMING_NAPI_ID descriptor Ljava/net/SocketOption; flags 19 signature Ljava/net/SocketOption<Ljava/lang/Integer;>;
|
||||
|
||||
-class name jdk/net/SocketFlow
|
||||
|
||||
-class name jdk/net/SocketFlow$Status
|
||||
|
||||
|
||||
@@ -29,10 +29,6 @@
|
||||
class name sun/misc/Unsafe
|
||||
header extends java/lang/Object flags 31 classAnnotations @Lsun/Proprietary+Annotation;
|
||||
innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
|
||||
-method name shouldBeInitialized descriptor (Ljava/lang/Class;)Z
|
||||
-method name ensureClassInitialized descriptor (Ljava/lang/Class;)V
|
||||
-method name defineAnonymousClass descriptor (Ljava/lang/Class;[B[Ljava/lang/Object;)Ljava/lang/Class;
|
||||
method name shouldBeInitialized descriptor (Ljava/lang/Class;)Z flags 1 deprecated true signature (Ljava/lang/Class<*>;)Z runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")@Ljdk/internal/vm/annotation/ForceInline;
|
||||
method name ensureClassInitialized descriptor (Ljava/lang/Class;)V flags 1 deprecated true signature (Ljava/lang/Class<*>;)V runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="15")@Ljdk/internal/vm/annotation/ForceInline;
|
||||
method name defineAnonymousClass descriptor (Ljava/lang/Class;[B[Ljava/lang/Object;)Ljava/lang/Class; flags 1 deprecated true signature (Ljava/lang/Class<*>;[B[Ljava/lang/Object;)Ljava/lang/Class<*>; runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljava/lang/Deprecated;(forRemoval=Zfalse,since="15")
|
||||
|
||||
|
||||
@@ -38,4 +38,4 @@ platform version B base A files java.activation-B.sym.txt:java.base-B.sym.txt:ja
|
||||
platform version C base B files java.base-C.sym.txt:java.compiler-C.sym.txt:java.desktop-C.sym.txt:java.naming-C.sym.txt:java.rmi-C.sym.txt:java.xml-C.sym.txt:jdk.compiler-C.sym.txt:jdk.jfr-C.sym.txt:jdk.jsobject-C.sym.txt:jdk.unsupported-C.sym.txt
|
||||
platform version D base C files java.base-D.sym.txt:java.compiler-D.sym.txt:java.desktop-D.sym.txt:java.management-D.sym.txt:java.management.rmi-D.sym.txt:java.net.http-D.sym.txt:java.security.jgss-D.sym.txt:java.xml-D.sym.txt:java.xml.crypto-D.sym.txt:jdk.compiler-D.sym.txt:jdk.httpserver-D.sym.txt:jdk.jartool-D.sym.txt:jdk.javadoc-D.sym.txt:jdk.jlink-D.sym.txt:jdk.jshell-D.sym.txt
|
||||
platform version E base D files java.base-E.sym.txt:java.compiler-E.sym.txt:java.desktop-E.sym.txt:java.xml-E.sym.txt:jdk.compiler-E.sym.txt:jdk.httpserver-E.sym.txt:jdk.incubator.foreign-E.sym.txt:jdk.incubator.jpackage-E.sym.txt:jdk.jfr-E.sym.txt:jdk.jlink-E.sym.txt:jdk.jshell-E.sym.txt:jdk.jsobject-E.sym.txt:jdk.management-E.sym.txt:jdk.net-E.sym.txt:jdk.pack-E.sym.txt
|
||||
platform version F base E files java.base-F.sym.txt:java.compiler-F.sym.txt:java.desktop-F.sym.txt:java.management.rmi-F.sym.txt:java.naming-F.sym.txt:java.rmi-F.sym.txt:java.xml-F.sym.txt:jdk.compiler-F.sym.txt:jdk.incubator.foreign-F.sym.txt:jdk.jartool-F.sym.txt:jdk.javadoc-F.sym.txt:jdk.jdi-F.sym.txt:jdk.net-F.sym.txt:jdk.nio.mapmode-F.sym.txt:jdk.rmic-F.sym.txt:jdk.scripting.nashorn-F.sym.txt:jdk.unsupported-F.sym.txt
|
||||
platform version F base E files java.base-F.sym.txt:java.compiler-F.sym.txt:java.desktop-F.sym.txt:java.management.rmi-F.sym.txt:java.naming-F.sym.txt:java.xml-F.sym.txt:jdk.compiler-F.sym.txt:jdk.incubator.foreign-F.sym.txt:jdk.jartool-F.sym.txt:jdk.javadoc-F.sym.txt:jdk.net-F.sym.txt:jdk.nio.mapmode-F.sym.txt:jdk.rmic-F.sym.txt:jdk.scripting.nashorn-F.sym.txt:jdk.unsupported-F.sym.txt
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -63,42 +63,45 @@ mkdir -p $DEVKIT_ROOT
|
||||
################################################################################
|
||||
# Copy the relevant parts of Xcode.app, removing things that are both big and
|
||||
# unecessary for our purposes, without building an impossibly long exclude list.
|
||||
#
|
||||
# Not including WatchSimulator.platform makes ibtool crashes in some situations.
|
||||
# It doesn't seem to matter which extra platform is included, but that is the
|
||||
# smallest one.
|
||||
|
||||
EXCLUDE_DIRS=" \
|
||||
Contents/_CodeSignature \
|
||||
Contents/Applications \
|
||||
Contents/Resources \
|
||||
Contents/Library \
|
||||
Contents/XPCServices \
|
||||
Contents/OtherFrameworks \
|
||||
Contents/Developer/Documentation \
|
||||
Contents/Developer/usr/share \
|
||||
Contents/Developer/usr/libexec/git-core \
|
||||
Contents/Developer/usr/bin/git* \
|
||||
Contents/Developer/usr/bin/svn* \
|
||||
Contents/Developer/usr/lib/libgit* \
|
||||
Contents/Developer/usr/lib/libsvn* \
|
||||
Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/share/man \
|
||||
Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/${SDK_VERSION}.sdk/usr/share/man \
|
||||
Contents/Developer/Platforms/MacOSX.platform/Developer/usr/share/man \
|
||||
Contents/Developer/Platforms/MacOSX.platform/usr \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift* \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift* \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/sourcekitd.framework \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/libexec/swift* \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/swift* \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/arc \
|
||||
$XCODE_APP_DIR_NAME/Contents/Applications \
|
||||
$XCODE_APP_DIR_NAME/Contents/Resources \
|
||||
$XCODE_APP_DIR_NAME/Contents/Library \
|
||||
$XCODE_APP_DIR_NAME/Contents/XPCServices \
|
||||
$XCODE_APP_DIR_NAME/Contents/OtherFrameworks \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/Documentation \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/usr/share \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/usr/libexec/git-core \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/usr/bin/git* \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/usr/bin/svn* \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/usr/lib/libgit* \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/usr/lib/libsvn* \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/share/man \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/${SDK_VERSION}.sdk/usr/share/man \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/share/man \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/Platforms/MacOSX.platform/usr \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift* \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift* \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/sourcekitd.framework \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/libexec/swift* \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/swift* \
|
||||
$XCODE_APP_DIR_NAME/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/arc \
|
||||
Platforms/AppleTVSimulator.platform \
|
||||
Platforms/iPhoneSimulator.platform \
|
||||
Platforms/WatchSimulator.platform \
|
||||
Contents/SharedFrameworks/LLDB.framework \
|
||||
Contents/SharedFrameworks/ModelIO.framework \
|
||||
Contents/SharedFrameworks/XCSUI.framework \
|
||||
Contents/SharedFrameworks/SceneKit.framework \
|
||||
Contents/SharedFrameworks/XCBuild.framework \
|
||||
Contents/SharedFrameworks/GPUTools*.framework \
|
||||
Contents/SharedFrameworks/DNTDocumentationSupport.framework/Versions/A/Resources/external \
|
||||
$(cd $XCODE_APP && ls -d Contents/Developer/Platforms/* \
|
||||
$XCODE_APP_DIR_NAME/Contents/SharedFrameworks/LLDB.framework \
|
||||
$XCODE_APP_DIR_NAME/Contents/SharedFrameworks/ModelIO.framework \
|
||||
$XCODE_APP_DIR_NAME/Contents/SharedFrameworks/XCSUI.framework \
|
||||
$XCODE_APP_DIR_NAME/Contents/SharedFrameworks/SceneKit.framework \
|
||||
$XCODE_APP_DIR_NAME/Contents/SharedFrameworks/XCBuild.framework \
|
||||
$XCODE_APP_DIR_NAME/Contents/SharedFrameworks/GPUTools.framework \
|
||||
$(cd $XCODE_APP/.. && ls -d $XCODE_APP_DIR_NAME/Contents/Developer/Platforms/* \
|
||||
| grep -v MacOSX.platform | grep -v WatchSimulator.platform) \
|
||||
"
|
||||
|
||||
@@ -107,8 +110,8 @@ for ex in $EXCLUDE_DIRS; do
|
||||
done
|
||||
|
||||
echo "Copying Xcode.app..."
|
||||
echo rsync -rlH $INCLUDE_ARGS $EXCLUDE_ARGS "$XCODE_APP/." $DEVKIT_ROOT/Xcode.app/
|
||||
rsync -rlH $INCLUDE_ARGS $EXCLUDE_ARGS "$XCODE_APP/." $DEVKIT_ROOT/Xcode.app/
|
||||
echo rsync -rlH $INCLUDE_ARGS $EXCLUDE_ARGS "$XCODE_APP" $DEVKIT_ROOT/
|
||||
rsync -rlH $INCLUDE_ARGS $EXCLUDE_ARGS "$XCODE_APP" $DEVKIT_ROOT/
|
||||
|
||||
################################################################################
|
||||
|
||||
|
||||
@@ -37,18 +37,18 @@ ifeq ($(call check-jvm-feature, compiler2), true)
|
||||
ifeq ($(call isBuildOs, linux), true)
|
||||
ADLC_CFLAGS := -fno-exceptions -DLINUX
|
||||
else ifeq ($(call isBuildOs, aix), true)
|
||||
ADLC_LDFLAGS += -q64
|
||||
ADLC_LDFLAGS := -q64
|
||||
ADLC_CFLAGS := -qnortti -qeh -q64 -DAIX
|
||||
else ifeq ($(call isBuildOs, windows), true)
|
||||
ADLC_LDFLAGS += -nologo
|
||||
ADLC_LDFLAGS := -nologo
|
||||
ADLC_CFLAGS := -nologo -EHsc
|
||||
# NOTE: The old build also have -D_CRT_SECURE_NO_DEPRECATE but it doesn't
|
||||
# seem needed any more.
|
||||
ADLC_CFLAGS_WARNINGS := -W3 -D_CRT_SECURE_NO_WARNINGS
|
||||
endif
|
||||
|
||||
# Set the C++ standard
|
||||
ADLC_CFLAGS += $(ADLC_LANGSTD_CXXFLAG)
|
||||
# Set the C++ standard if supported
|
||||
ADLC_CFLAGS += $(ADLC_CXXFLAG)
|
||||
|
||||
# NOTE: The old build didn't set -DASSERT for windows but it doesn't seem to
|
||||
# hurt.
|
||||
|
||||
@@ -23,24 +23,40 @@
|
||||
# questions.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Build tools needed for the JFR source code generation
|
||||
|
||||
JFR_TOOLS_SRCDIR := $(TOPDIR)/make/src/classes
|
||||
JFR_TOOLS_OUTPUTDIR := $(JVM_VARIANT_OUTPUTDIR)/buildtools/tools_classes
|
||||
|
||||
$(eval $(call SetupJavaCompilation, BUILD_JFR_TOOLS, \
|
||||
COMPILER := bootjdk, \
|
||||
SMALL_JAVA := false, \
|
||||
SRC := $(JFR_TOOLS_SRCDIR), \
|
||||
BIN := $(JFR_TOOLS_OUTPUTDIR), \
|
||||
DISABLED_WARNINGS := try, \
|
||||
))
|
||||
|
||||
TARGETS += $(BUILD_JFR_TOOLS)
|
||||
|
||||
################################################################################
|
||||
# Setup make rules for JFR gensrc file generation.
|
||||
#
|
||||
TOOL_JFR_GEN := $(JAVA_SMALL) -cp $(JFR_TOOLS_OUTPUTDIR) build.tools.jfr.GenerateJfrFiles
|
||||
|
||||
include $(TOPDIR)/make/ToolsHotspot.gmk
|
||||
|
||||
JFR_SRCDIR := $(TOPDIR)/src/hotspot/share/jfr/metadata
|
||||
JFR_OUTPUTDIR := $(JVM_VARIANT_OUTPUTDIR)/gensrc/jfrfiles
|
||||
JFR_SRCDIR := $(TOPDIR)/src/hotspot/share/jfr/metadata
|
||||
|
||||
# Changing these will trigger a rebuild of generated jfr files.
|
||||
METADATA_XML := $(JFR_SRCDIR)/metadata.xml
|
||||
METADATA_XSD := $(JFR_SRCDIR)/metadata.xsd
|
||||
|
||||
$(eval $(call SetupExecute, jfr_gen_headers, \
|
||||
$(eval $(call SetupExecute, jfr_gen, \
|
||||
INFO := Generating JFR header files, \
|
||||
DEPS := $(METADATA_XML) $(METADATA_XSD) $(BUILD_TOOLS_HOTSPOT), \
|
||||
DEPS := $(METADATA_XML) $(METADATA_XSD) $(BUILD_JFR_TOOLS), \
|
||||
OUTPUT_DIR := $(JFR_OUTPUTDIR), \
|
||||
COMMAND := $(TOOL_JFR_GEN) --mode headers --xml $(METADATA_XML) --xsd $(METADATA_XSD) --output $(JFR_OUTPUTDIR), \
|
||||
COMMAND := $(TOOL_JFR_GEN) $(METADATA_XML) $(METADATA_XSD) $(JFR_OUTPUTDIR), \
|
||||
))
|
||||
|
||||
TARGETS += $(jfr_gen_headers)
|
||||
JFR_FILES := $(jfr_gen_TARGET)
|
||||
TARGETS += $(JFR_FILES)
|
||||
|
||||
@@ -106,16 +106,14 @@ $(eval $(call SetupJvmtiGeneration, jvmti.h, jvmtiH.xsl, \
|
||||
$(eval $(call SetupJvmtiGeneration, jvmti.html, jvmti.xsl, \
|
||||
-PARAM majorversion $(VERSION_FEATURE)))
|
||||
|
||||
JVMTI_BC_SRCDIR := $(TOPDIR)/src/hotspot/share/interpreter/zero
|
||||
JVMTI_BC_SRCDIR := $(TOPDIR)/src/hotspot/share/interpreter
|
||||
|
||||
ifeq ($(call check-jvm-feature, zero), true)
|
||||
$(eval $(call SetupXslTransform, bytecodeInterpreterWithChecks.cpp, \
|
||||
XML_FILE := $(JVMTI_BC_SRCDIR)/bytecodeInterpreterWithChecks.xml, \
|
||||
XSL_FILE := $(JVMTI_BC_SRCDIR)/bytecodeInterpreterWithChecks.xsl, \
|
||||
OUTPUT_DIR := $(JVMTI_OUTPUTDIR), \
|
||||
DEPS := $(JVMTI_BC_SRCDIR)/bytecodeInterpreter.cpp, \
|
||||
))
|
||||
endif
|
||||
$(eval $(call SetupXslTransform, bytecodeInterpreterWithChecks.cpp, \
|
||||
XML_FILE := $(JVMTI_BC_SRCDIR)/bytecodeInterpreterWithChecks.xml, \
|
||||
XSL_FILE := $(JVMTI_BC_SRCDIR)/bytecodeInterpreterWithChecks.xsl, \
|
||||
OUTPUT_DIR := $(JVMTI_OUTPUTDIR), \
|
||||
DEPS := $(JVMTI_BC_SRCDIR)/bytecodeInterpreter.cpp, \
|
||||
))
|
||||
|
||||
################################################################################
|
||||
# Copy jvmti.h to include dir
|
||||
|
||||
@@ -38,8 +38,9 @@ endif
|
||||
|
||||
################################################################################
|
||||
|
||||
# Disabling all warnings in gtest source code
|
||||
|
||||
$(eval $(call SetupJdkLibrary, BUILD_GTEST_LIBGTEST, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_GTEST_LIBGTEST, \
|
||||
NAME := gtest, \
|
||||
TYPE := STATIC_LIBRARY, \
|
||||
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
|
||||
@@ -49,9 +50,8 @@ $(eval $(call SetupJdkLibrary, BUILD_GTEST_LIBGTEST, \
|
||||
$(GTEST_FRAMEWORK_SRC)/googletest/src \
|
||||
$(GTEST_FRAMEWORK_SRC)/googlemock/src, \
|
||||
INCLUDE_FILES := gtest-all.cc gmock-all.cc, \
|
||||
DISABLED_WARNINGS_gcc := undef unused-result format-nonliteral, \
|
||||
DISABLED_WARNINGS_clang := undef unused-result format-nonliteral, \
|
||||
CFLAGS := $(JVM_CFLAGS) \
|
||||
CFLAGS := $(filter-out $(WARNING_CFLAGS_JVM), $(JVM_CFLAGS)) \
|
||||
-w \
|
||||
-I$(GTEST_FRAMEWORK_SRC)/googletest \
|
||||
-I$(GTEST_FRAMEWORK_SRC)/googletest/include \
|
||||
-I$(GTEST_FRAMEWORK_SRC)/googlemock \
|
||||
@@ -81,9 +81,10 @@ else
|
||||
$(call create-mapfile)
|
||||
endif
|
||||
|
||||
# Additional disabled warnings are due to code in the test source.
|
||||
# Disabling undef, switch, format-nonliteral and tautological-undefined-compare
|
||||
# warnings for clang because of test source.
|
||||
|
||||
$(eval $(call SetupJdkLibrary, BUILD_GTEST_LIBJVM, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_GTEST_LIBJVM, \
|
||||
NAME := jvm, \
|
||||
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
|
||||
OUTPUT_DIR := $(JVM_OUTPUTDIR)/gtest, \
|
||||
@@ -105,7 +106,6 @@ $(eval $(call SetupJdkLibrary, BUILD_GTEST_LIBJVM, \
|
||||
DISABLED_WARNINGS_clang := $(DISABLED_WARNINGS_clang) \
|
||||
undef switch format-nonliteral tautological-undefined-compare \
|
||||
self-assign-overloaded, \
|
||||
DISABLED_WARNINGS_microsoft := $(DISABLED_WARNINGS_microsoft), \
|
||||
LDFLAGS := $(JVM_LDFLAGS), \
|
||||
LDFLAGS_unix := -L$(JVM_OUTPUTDIR)/libgtest, \
|
||||
LIBS := $(JVM_LIBS), \
|
||||
@@ -127,7 +127,7 @@ TARGETS += $(BUILD_GTEST_LIBJVM)
|
||||
|
||||
################################################################################
|
||||
|
||||
$(eval $(call SetupJdkExecutable, BUILD_GTEST_LAUNCHER, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_GTEST_LAUNCHER, \
|
||||
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
|
||||
NAME := gtestLauncher, \
|
||||
TYPE := EXECUTABLE, \
|
||||
|
||||
@@ -95,8 +95,9 @@ DISABLED_WARNINGS_clang := tautological-compare \
|
||||
|
||||
DISABLED_WARNINGS_xlc := tautological-compare shift-negative-value
|
||||
|
||||
DISABLED_WARNINGS_microsoft := 4100 4127 4201 4244 4291 4351 \
|
||||
4511 4512 4514 4624 4996
|
||||
DISABLED_WARNINGS_microsoft :=
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
# Platform specific setup
|
||||
@@ -125,6 +126,13 @@ else ifeq ($(call isTargetCpu, x86_64), true)
|
||||
JVM_EXCLUDE_PATTERNS += x86_32
|
||||
endif
|
||||
|
||||
ifeq ($(call isTargetOs, windows), true)
|
||||
ifeq ($(call isTargetCpuBits, 64), true)
|
||||
RC_DESC := 64-Bit$(SPACE)
|
||||
endif
|
||||
JVM_RCFLAGS += -D"HS_FILEDESC=$(HOTSPOT_VM_DISTRO) $(RC_DESC)$(JVM_VARIANT) VM"
|
||||
endif
|
||||
|
||||
JVM_OPTIMIZATION ?= HIGHEST_JVM
|
||||
|
||||
# Need to set JVM_STRIPFLAGS to the default value from SPEC since the STRIPFLAGS
|
||||
@@ -138,7 +146,7 @@ $(call FillFindCache, $(JVM_SRC_DIRS))
|
||||
################################################################################
|
||||
# Now set up the actual compilation of the main hotspot native library
|
||||
|
||||
$(eval $(call SetupJdkLibrary, BUILD_LIBJVM, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJVM, \
|
||||
NAME := jvm, \
|
||||
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
|
||||
OUTPUT_DIR := $(JVM_LIB_OUTPUTDIR), \
|
||||
@@ -162,7 +170,8 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBJVM, \
|
||||
USE_MAPFILE_FOR_SYMBOLS := true, \
|
||||
STRIPFLAGS := $(JVM_STRIPFLAGS), \
|
||||
EMBED_MANIFEST := true, \
|
||||
RC_FILEDESC := $(HOTSPOT_VM_DISTRO) $(OPENJDK_TARGET_CPU_BITS)-Bit $(JVM_VARIANT) VM, \
|
||||
RC_FLAGS := $(JVM_RCFLAGS), \
|
||||
VERSIONINFO_RESOURCE := $(TOPDIR)/src/hotspot/os/windows/version.rc, \
|
||||
PRECOMPILED_HEADER := $(JVM_PRECOMPILED_HEADER), \
|
||||
PRECOMPILED_HEADER_EXCLUDE := $(JVM_PRECOMPILED_HEADER_EXCLUDE), \
|
||||
))
|
||||
|
||||
@@ -27,7 +27,7 @@ default: all
|
||||
|
||||
include $(SPEC)
|
||||
include MakeBase.gmk
|
||||
include JdkNativeCompilation.gmk
|
||||
include NativeCompilation.gmk
|
||||
|
||||
include HotspotCommon.gmk
|
||||
|
||||
|
||||
@@ -45,17 +45,11 @@ else
|
||||
endif
|
||||
|
||||
ifeq ($(call check-jvm-feature, zero), true)
|
||||
JVM_EXCLUDES += opto libadt
|
||||
JVM_EXCLUDE_PATTERNS += c1_ c1/ c2_ runtime_ /c2/
|
||||
JVM_EXCLUDE_FILES += templateInterpreter.cpp templateInterpreterGenerator.cpp \
|
||||
bcEscapeAnalyzer.cpp ciTypeFlow.cpp
|
||||
JVM_CFLAGS_FEATURES += -DZERO -DZERO_LIBARCH='"$(OPENJDK_TARGET_CPU_LEGACY_LIB)"' $(LIBFFI_CFLAGS)
|
||||
JVM_CFLAGS_FEATURES += -DZERO -DCC_INTERP -DZERO_LIBARCH='"$(OPENJDK_TARGET_CPU_LEGACY_LIB)"' $(LIBFFI_CFLAGS)
|
||||
JVM_LIBS_FEATURES += $(LIBFFI_LIBS)
|
||||
ifeq ($(ENABLE_LIBFFI_BUNDLING), true)
|
||||
JVM_LDFLAGS_FEATURES += $(call SET_EXECUTABLE_ORIGIN,/..)
|
||||
endif
|
||||
else
|
||||
JVM_EXCLUDE_PATTERNS += /zero/
|
||||
endif
|
||||
|
||||
ifeq ($(JVM_VARIANT), custom)
|
||||
|
||||
@@ -92,6 +92,9 @@ else ifeq ($(call isTargetOs, macosx), true)
|
||||
# NOTE: The old build tested clang version to make sure this workaround
|
||||
# for the clang bug was still needed.
|
||||
BUILD_LIBJVM_loopTransform.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE)
|
||||
ifneq ($(DEBUG_LEVEL), slowdebug)
|
||||
BUILD_LIBJVM_unsafe.cpp_CXXFLAGS := -O1
|
||||
endif
|
||||
|
||||
# The following files are compiled at various optimization
|
||||
# levels due to optimization issues encountered at the
|
||||
@@ -107,6 +110,7 @@ else ifeq ($(call isTargetOs, macosx), true)
|
||||
sharedRuntimeTrig.cpp \
|
||||
sharedRuntimeTrans.cpp \
|
||||
loopTransform.cpp \
|
||||
unsafe.cpp \
|
||||
jvmciCompilerToVM.cpp \
|
||||
$(OPT_SPEED_SRC) \
|
||||
#
|
||||
|
||||
@@ -31,7 +31,6 @@ import build.tools.symbolgenerator.CreateSymbols
|
||||
import build.tools.symbolgenerator.CreateSymbols
|
||||
.ModuleHeaderDescription
|
||||
.RequiresDescription;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedOutputStream;
|
||||
@@ -44,7 +43,6 @@ import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.StringWriter;
|
||||
import java.io.Writer;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.FileVisitResult;
|
||||
import java.nio.file.FileVisitor;
|
||||
@@ -222,7 +220,7 @@ public class CreateSymbols {
|
||||
long timestamp, String currentVersion, String systemModules) throws IOException {
|
||||
LoadDescriptions data = load(ctDescriptionFileExtra != null ? Paths.get(ctDescriptionFileExtra)
|
||||
: null,
|
||||
Paths.get(ctDescriptionFile));
|
||||
Paths.get(ctDescriptionFile), null);
|
||||
|
||||
splitHeaders(data.classes);
|
||||
|
||||
@@ -305,7 +303,7 @@ public class CreateSymbols {
|
||||
|
||||
public static String EXTENSION = ".sig";
|
||||
|
||||
LoadDescriptions load(Path ctDescriptionWithExtraContent, Path ctDescriptionOpen) throws IOException {
|
||||
LoadDescriptions load(Path ctDescriptionWithExtraContent, Path ctDescriptionOpen, String deletePlatform) throws IOException {
|
||||
Map<String, PlatformInput> platforms = new LinkedHashMap<>();
|
||||
|
||||
if (ctDescriptionWithExtraContent != null && Files.isRegularFile(ctDescriptionWithExtraContent)) {
|
||||
@@ -319,7 +317,8 @@ public class CreateSymbols {
|
||||
case "platform":
|
||||
PlatformInput platform = PlatformInput.load(ctDescriptionWithExtraContent,
|
||||
reader);
|
||||
platforms.put(platform.version, platform);
|
||||
if (!platform.version.equals(deletePlatform))
|
||||
platforms.put(platform.version, platform);
|
||||
reader.moveNext();
|
||||
break;
|
||||
default:
|
||||
@@ -337,11 +336,13 @@ public class CreateSymbols {
|
||||
case "generate":
|
||||
String[] platformsAttr = reader.attributes.get("platforms").split(":");
|
||||
generatePlatforms = new HashSet<>(List.of(platformsAttr));
|
||||
generatePlatforms.remove(deletePlatform);
|
||||
reader.moveNext();
|
||||
break;
|
||||
case "platform":
|
||||
PlatformInput platform = PlatformInput.load(ctDescriptionOpen, reader);
|
||||
if (!platforms.containsKey(platform.version))
|
||||
if (!platform.version.equals(deletePlatform) &&
|
||||
!platforms.containsKey(platform.version))
|
||||
platforms.put(platform.version, platform);
|
||||
reader.moveNext();
|
||||
break;
|
||||
@@ -407,28 +408,18 @@ public class CreateSymbols {
|
||||
|
||||
ClassList result = new ClassList();
|
||||
|
||||
classes.values().forEach(result::add);
|
||||
return new LoadDescriptions(result,
|
||||
modules,
|
||||
new ArrayList<>(platforms.values()));
|
||||
}
|
||||
|
||||
private static void removeVersion(LoadDescriptions load, String deletePlatform) {
|
||||
for (Iterator<ClassDescription> it = load.classes.iterator(); it.hasNext();) {
|
||||
ClassDescription desc = it.next();
|
||||
for (ClassDescription desc : classes.values()) {
|
||||
Iterator<ClassHeaderDescription> chdIt = desc.header.iterator();
|
||||
|
||||
while (chdIt.hasNext()) {
|
||||
ClassHeaderDescription chd = chdIt.next();
|
||||
|
||||
chd.versions = removeVersion(chd.versions, deletePlatform);
|
||||
if (chd.versions.isEmpty()) {
|
||||
chd.versions = reduce(chd.versions, generatePlatforms);
|
||||
if (chd.versions.isEmpty())
|
||||
chdIt.remove();
|
||||
}
|
||||
}
|
||||
|
||||
if (desc.header.isEmpty()) {
|
||||
it.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -437,7 +428,7 @@ public class CreateSymbols {
|
||||
while (methodIt.hasNext()) {
|
||||
MethodDescription method = methodIt.next();
|
||||
|
||||
method.versions = removeVersion(method.versions, deletePlatform);
|
||||
method.versions = reduce(method.versions, generatePlatforms);
|
||||
if (method.versions.isEmpty())
|
||||
methodIt.remove();
|
||||
}
|
||||
@@ -447,29 +438,37 @@ public class CreateSymbols {
|
||||
while (fieldIt.hasNext()) {
|
||||
FieldDescription field = fieldIt.next();
|
||||
|
||||
field.versions = removeVersion(field.versions, deletePlatform);
|
||||
field.versions = reduce(field.versions, generatePlatforms);
|
||||
if (field.versions.isEmpty())
|
||||
fieldIt.remove();
|
||||
}
|
||||
|
||||
result.add(desc);
|
||||
}
|
||||
|
||||
for (Iterator<ModuleDescription> it = load.modules.values().iterator(); it.hasNext();) {
|
||||
ModuleDescription desc = it.next();
|
||||
Map<String, ModuleDescription> moduleList = new HashMap<>();
|
||||
|
||||
for (ModuleDescription desc : modules.values()) {
|
||||
Iterator<ModuleHeaderDescription> mhdIt = desc.header.iterator();
|
||||
|
||||
while (mhdIt.hasNext()) {
|
||||
ModuleHeaderDescription mhd = mhdIt.next();
|
||||
|
||||
mhd.versions = removeVersion(mhd.versions, deletePlatform);
|
||||
mhd.versions = reduce(mhd.versions, generatePlatforms);
|
||||
if (mhd.versions.isEmpty())
|
||||
mhdIt.remove();
|
||||
}
|
||||
|
||||
if (desc.header.isEmpty()) {
|
||||
it.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
moduleList.put(desc.name, desc);
|
||||
}
|
||||
|
||||
return new LoadDescriptions(result,
|
||||
moduleList,
|
||||
new ArrayList<>(platforms.values()));
|
||||
}
|
||||
|
||||
static final class LoadDescriptions {
|
||||
@@ -551,17 +550,6 @@ public class CreateSymbols {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static String removeVersion(String original, String remove) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
for (char v : original.toCharArray()) {
|
||||
if (v != remove.charAt(0)) {
|
||||
sb.append(v);
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static class PlatformInput {
|
||||
public final String version;
|
||||
public final String basePlatform;
|
||||
@@ -1079,23 +1067,10 @@ public class CreateSymbols {
|
||||
}
|
||||
|
||||
private Annotation createAnnotation(List<CPInfo> constantPool, AnnotationDescription desc) {
|
||||
String annotationType = desc.annotationType;
|
||||
|
||||
if (PREVIEW_FEATURE_ANNOTATION.equals(annotationType)) {
|
||||
//the non-public PreviewFeature annotation will not be available in ct.sym,
|
||||
//replace with purely synthetic javac-internal annotation:
|
||||
annotationType = PREVIEW_FEATURE_ANNOTATION_INTERNAL;
|
||||
}
|
||||
|
||||
return new Annotation(null,
|
||||
addString(constantPool, annotationType),
|
||||
addString(constantPool, desc.annotationType),
|
||||
createElementPairs(constantPool, desc.values));
|
||||
}
|
||||
//where:
|
||||
private static final String PREVIEW_FEATURE_ANNOTATION =
|
||||
"Ljdk/internal/PreviewFeature;";
|
||||
private static final String PREVIEW_FEATURE_ANNOTATION_INTERNAL =
|
||||
"Ljdk/internal/PreviewFeature+Annotation;";
|
||||
|
||||
private element_value_pair[] createElementPairs(List<CPInfo> constantPool, Map<String, Object> annotationAttributes) {
|
||||
element_value_pair[] pairs = new element_value_pair[annotationAttributes.size()];
|
||||
@@ -1283,9 +1258,24 @@ public class CreateSymbols {
|
||||
Map<String, ModuleDescription> modules = new HashMap<>();
|
||||
|
||||
for (VersionDescription desc : versions) {
|
||||
Iterable<byte[]> classFileData = loadClassData(desc.classes);
|
||||
List<byte[]> classFileData = new ArrayList<>();
|
||||
|
||||
loadVersionClasses(classes, modules, classFileData, excludesIncludes, desc.version, null);
|
||||
try (BufferedReader descIn =
|
||||
Files.newBufferedReader(Paths.get(desc.classes))) {
|
||||
String line;
|
||||
while ((line = descIn.readLine()) != null) {
|
||||
ByteArrayOutputStream data = new ByteArrayOutputStream();
|
||||
for (int i = 0; i < line.length(); i += 2) {
|
||||
String hex = line.substring(i, i + 2);
|
||||
data.write(Integer.parseInt(hex, 16));
|
||||
}
|
||||
classFileData.add(data.toByteArray());
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
throw new IllegalStateException(ex);
|
||||
}
|
||||
|
||||
loadVersionClasses(classes, modules, classFileData, excludesIncludes, desc.version);
|
||||
}
|
||||
|
||||
List<PlatformInput> platforms =
|
||||
@@ -1296,7 +1286,7 @@ public class CreateSymbols {
|
||||
null))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
dumpDescriptions(classes, modules, platforms, Set.of(), descDest.resolve("symbols"), args);
|
||||
dumpDescriptions(classes, modules, platforms, descDest.resolve("symbols"), args);
|
||||
}
|
||||
//where:
|
||||
private static final String DO_NO_MODIFY =
|
||||
@@ -1329,33 +1319,11 @@ public class CreateSymbols {
|
||||
"# ##########################################################\n" +
|
||||
"#\n";
|
||||
|
||||
private Iterable<byte[]> loadClassData(String path) {
|
||||
List<byte[]> classFileData = new ArrayList<>();
|
||||
|
||||
try (BufferedReader descIn =
|
||||
Files.newBufferedReader(Paths.get(path))) {
|
||||
String line;
|
||||
while ((line = descIn.readLine()) != null) {
|
||||
ByteArrayOutputStream data = new ByteArrayOutputStream();
|
||||
for (int i = 0; i < line.length(); i += 2) {
|
||||
String hex = line.substring(i, i + 2);
|
||||
data.write(Integer.parseInt(hex, 16));
|
||||
}
|
||||
classFileData.add(data.toByteArray());
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
throw new IllegalStateException(ex);
|
||||
}
|
||||
|
||||
return classFileData;
|
||||
}
|
||||
|
||||
private void loadVersionClasses(ClassList classes,
|
||||
Map<String, ModuleDescription> modules,
|
||||
Iterable<byte[]> classData,
|
||||
ExcludeIncludeList excludesIncludes,
|
||||
String version,
|
||||
String baseline) {
|
||||
String version) {
|
||||
Map<String, ModuleDescription> currentVersionModules =
|
||||
new HashMap<>();
|
||||
|
||||
@@ -1479,12 +1447,12 @@ public class CreateSymbols {
|
||||
ClassDescription existing = classes.find(clazz.name, true);
|
||||
|
||||
if (existing != null) {
|
||||
addClassHeader(existing, header, version, baseline);
|
||||
addClassHeader(existing, header, version);
|
||||
for (MethodDescription currentMethod : clazz.methods) {
|
||||
addMethod(existing, currentMethod, version, baseline);
|
||||
addMethod(existing, currentMethod, version);
|
||||
}
|
||||
for (FieldDescription currentField : clazz.fields) {
|
||||
addField(existing, currentField, version, baseline);
|
||||
addField(existing, currentField, version);
|
||||
}
|
||||
} else {
|
||||
classes.add(clazz);
|
||||
@@ -1521,7 +1489,6 @@ public class CreateSymbols {
|
||||
private void dumpDescriptions(ClassList classes,
|
||||
Map<String, ModuleDescription> modules,
|
||||
List<PlatformInput> versions,
|
||||
Set<String> forceWriteVersions,
|
||||
Path ctDescriptionFile,
|
||||
String[] args) throws IOException {
|
||||
classes.sort();
|
||||
@@ -1588,7 +1555,7 @@ public class CreateSymbols {
|
||||
for (PlatformInput desc : versions) {
|
||||
List<String> files = desc.files;
|
||||
|
||||
if (files == null || forceWriteVersions.contains(desc.version)) {
|
||||
if (files == null) {
|
||||
files = new ArrayList<>();
|
||||
for (Entry<String, List<ClassDescription>> e : module2Classes.entrySet()) {
|
||||
StringWriter data = new StringWriter();
|
||||
@@ -1606,34 +1573,9 @@ public class CreateSymbols {
|
||||
String dataString = data.toString();
|
||||
|
||||
if (!dataString.isEmpty()) {
|
||||
String existingYear = null;
|
||||
boolean hasChange = true;
|
||||
if (Files.isReadable(f)) {
|
||||
String oldContent = Files.readString(f, StandardCharsets.UTF_8);
|
||||
int yearPos = DO_NO_MODIFY.indexOf("{YEAR}");
|
||||
String headerPattern =
|
||||
Pattern.quote(DO_NO_MODIFY.substring(0, yearPos)) +
|
||||
"([0-9]+)(, [0-9]+)?" +
|
||||
Pattern.quote(DO_NO_MODIFY.substring(yearPos + "{YEAR}".length()));
|
||||
String pattern = headerPattern +
|
||||
Pattern.quote(dataString);
|
||||
Matcher m = Pattern.compile(pattern, Pattern.MULTILINE).matcher(oldContent);
|
||||
if (m.matches()) {
|
||||
hasChange = false;
|
||||
} else {
|
||||
m = Pattern.compile(headerPattern).matcher(oldContent);
|
||||
if (m.find()) {
|
||||
existingYear = m.group(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hasChange) {
|
||||
try (Writer out = Files.newBufferedWriter(f, StandardCharsets.UTF_8)) {
|
||||
String currentYear = String.valueOf(year);
|
||||
String yearSpec = (existingYear != null && !currentYear.equals(existingYear) ? existingYear + ", " : "") + currentYear;
|
||||
out.append(DO_NO_MODIFY.replace("{YEAR}", yearSpec));
|
||||
out.write(dataString);
|
||||
}
|
||||
try (Writer out = Files.newBufferedWriter(f)) {
|
||||
out.append(DO_NO_MODIFY.replace("{YEAR}", String.valueOf(year)));
|
||||
out.write(dataString);
|
||||
}
|
||||
files.add(f.getFileName().toString());
|
||||
}
|
||||
@@ -1675,17 +1617,15 @@ public class CreateSymbols {
|
||||
}
|
||||
}
|
||||
|
||||
private void incrementalUpdate(String ctDescriptionFile,
|
||||
String excludeFile,
|
||||
String platformVersion,
|
||||
Iterable<byte[]> classBytes,
|
||||
Function<LoadDescriptions, String> baseline,
|
||||
String[] args) throws IOException {
|
||||
public void createIncrementalBaseLine(String ctDescriptionFile,
|
||||
String excludeFile,
|
||||
String[] args) throws IOException {
|
||||
String specVersion = System.getProperty("java.specification.version");
|
||||
String currentVersion =
|
||||
Integer.toString(Integer.parseInt(platformVersion), Character.MAX_RADIX);
|
||||
String version = currentVersion.toUpperCase(Locale.ROOT);
|
||||
Integer.toString(Integer.parseInt(specVersion), Character.MAX_RADIX);
|
||||
currentVersion = currentVersion.toUpperCase(Locale.ROOT);
|
||||
Path ctDescriptionPath = Paths.get(ctDescriptionFile).toAbsolutePath();
|
||||
LoadDescriptions data = load(null, ctDescriptionPath);
|
||||
LoadDescriptions data = load(null, ctDescriptionPath, currentVersion);
|
||||
|
||||
ClassList classes = data.classes;
|
||||
Map<String, ModuleDescription> modules = data.modules;
|
||||
@@ -1694,70 +1634,23 @@ public class CreateSymbols {
|
||||
ExcludeIncludeList excludeList =
|
||||
ExcludeIncludeList.create(excludeFile);
|
||||
|
||||
loadVersionClasses(classes, modules, classBytes, excludeList, "$", version);
|
||||
|
||||
removeVersion(data, version);
|
||||
|
||||
for (ModuleDescription md : data.modules.values()) {
|
||||
for (ModuleHeaderDescription header : md.header) {
|
||||
header.versions = header.versions.replace("$", version);
|
||||
}
|
||||
}
|
||||
|
||||
for (ClassDescription clazzDesc : data.classes) {
|
||||
for (ClassHeaderDescription header : clazzDesc.header) {
|
||||
header.versions = header.versions.replace("$", version);
|
||||
}
|
||||
for (MethodDescription method : clazzDesc.methods) {
|
||||
method.versions = method.versions.replace("$", version);
|
||||
}
|
||||
for (FieldDescription field : clazzDesc.fields) {
|
||||
field.versions = field.versions.replace("$", version);
|
||||
}
|
||||
}
|
||||
|
||||
if (versions.stream().noneMatch(inp -> version.equals(inp.version))) {
|
||||
versions.add(new PlatformInput(null, version, baseline.apply(data), null));
|
||||
}
|
||||
|
||||
Set<String> writeVersions = new HashSet<>();
|
||||
|
||||
writeVersions.add(version);
|
||||
|
||||
//re-write all platforms that have version as their basline:
|
||||
versions.stream()
|
||||
.filter(inp -> version.equals(inp.basePlatform))
|
||||
.map(inp -> inp.version)
|
||||
.forEach(writeVersions::add);
|
||||
dumpDescriptions(classes, modules, versions, writeVersions, ctDescriptionPath, args);
|
||||
}
|
||||
|
||||
public void createIncrementalBaseLineFromDataFile(String ctDescriptionFile,
|
||||
String excludeFile,
|
||||
String version,
|
||||
String dataFile,
|
||||
String baseline,
|
||||
String[] args) throws IOException {
|
||||
incrementalUpdate(ctDescriptionFile, excludeFile, version, loadClassData(dataFile), x -> baseline, args);
|
||||
}
|
||||
|
||||
public void createIncrementalBaseLine(String ctDescriptionFile,
|
||||
String excludeFile,
|
||||
String[] args) throws IOException {
|
||||
String specVersion = System.getProperty("java.specification.version");
|
||||
Iterable<byte[]> classBytes = dumpCurrentClasses();
|
||||
Function<LoadDescriptions, String> baseline = data -> {
|
||||
if (data.versions.isEmpty()) {
|
||||
return null;
|
||||
} else {
|
||||
return data.versions.stream()
|
||||
.sorted((v1, v2) -> v2.version.compareTo(v1.version))
|
||||
.findFirst()
|
||||
.get()
|
||||
.version;
|
||||
}
|
||||
};
|
||||
incrementalUpdate(ctDescriptionFile, excludeFile, specVersion, classBytes, baseline, args);
|
||||
loadVersionClasses(classes, modules, classBytes, excludeList, currentVersion);
|
||||
|
||||
String baseline;
|
||||
|
||||
if (versions.isEmpty()) {
|
||||
baseline = null;
|
||||
} else {
|
||||
baseline = versions.stream()
|
||||
.sorted((v1, v2) -> v2.version.compareTo(v1.version))
|
||||
.findFirst()
|
||||
.get()
|
||||
.version;
|
||||
}
|
||||
|
||||
versions.add(new PlatformInput(null, currentVersion, baseline, null));
|
||||
dumpDescriptions(classes, modules, versions, ctDescriptionPath, args);
|
||||
}
|
||||
|
||||
private List<byte[]> dumpCurrentClasses() throws IOException {
|
||||
@@ -1851,7 +1744,7 @@ public class CreateSymbols {
|
||||
classes.add(clazzDesc);
|
||||
}
|
||||
|
||||
addClassHeader(clazzDesc, headerDesc, version, null);
|
||||
addClassHeader(clazzDesc, headerDesc, version);
|
||||
|
||||
for (Method m : cf.methods) {
|
||||
if (!include(m.access_flags.flags))
|
||||
@@ -1863,7 +1756,7 @@ public class CreateSymbols {
|
||||
for (Attribute attr : m.attributes) {
|
||||
readAttribute(cf, methDesc, attr);
|
||||
}
|
||||
addMethod(clazzDesc, methDesc, version, null);
|
||||
addMethod(clazzDesc, methDesc, version);
|
||||
}
|
||||
for (Field f : cf.fields) {
|
||||
if (!include(f.access_flags.flags))
|
||||
@@ -1875,7 +1768,7 @@ public class CreateSymbols {
|
||||
for (Attribute attr : f.attributes) {
|
||||
readAttribute(cf, fieldDesc, attr);
|
||||
}
|
||||
addField(clazzDesc, fieldDesc, version, null);
|
||||
addField(clazzDesc, fieldDesc, version);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1934,11 +1827,11 @@ public class CreateSymbols {
|
||||
return (accessFlags & (AccessFlags.ACC_PUBLIC | AccessFlags.ACC_PROTECTED)) != 0;
|
||||
}
|
||||
|
||||
private void addClassHeader(ClassDescription clazzDesc, ClassHeaderDescription headerDesc, String version, String baseline) {
|
||||
private void addClassHeader(ClassDescription clazzDesc, ClassHeaderDescription headerDesc, String version) {
|
||||
//normalize:
|
||||
boolean existed = false;
|
||||
for (ClassHeaderDescription existing : clazzDesc.header) {
|
||||
if (existing.equals(headerDesc) && (!existed || (baseline != null && existing.versions.contains(baseline)))) {
|
||||
if (existing.equals(headerDesc)) {
|
||||
headerDesc = existing;
|
||||
existed = true;
|
||||
}
|
||||
@@ -1974,13 +1867,14 @@ public class CreateSymbols {
|
||||
}
|
||||
}
|
||||
|
||||
private void addMethod(ClassDescription clazzDesc, MethodDescription methDesc, String version, String baseline) {
|
||||
private void addMethod(ClassDescription clazzDesc, MethodDescription methDesc, String version) {
|
||||
//normalize:
|
||||
boolean methodExisted = false;
|
||||
for (MethodDescription existing : clazzDesc.methods) {
|
||||
if (existing.equals(methDesc) && (!methodExisted || (baseline != null && existing.versions.contains(baseline)))) {
|
||||
if (existing.equals(methDesc)) {
|
||||
methodExisted = true;
|
||||
methDesc = existing;
|
||||
break;
|
||||
}
|
||||
}
|
||||
methDesc.versions += version;
|
||||
@@ -1989,12 +1883,13 @@ public class CreateSymbols {
|
||||
}
|
||||
}
|
||||
|
||||
private void addField(ClassDescription clazzDesc, FieldDescription fieldDesc, String version, String baseline) {
|
||||
private void addField(ClassDescription clazzDesc, FieldDescription fieldDesc, String version) {
|
||||
boolean fieldExisted = false;
|
||||
for (FieldDescription existing : clazzDesc.fields) {
|
||||
if (existing.equals(fieldDesc) && (!fieldExisted || (baseline != null && existing.versions.contains(baseline)))) {
|
||||
if (existing.equals(fieldDesc)) {
|
||||
fieldExisted = true;
|
||||
fieldDesc = existing;
|
||||
break;
|
||||
}
|
||||
}
|
||||
fieldDesc.versions += version;
|
||||
@@ -2403,7 +2298,6 @@ public class CreateSymbols {
|
||||
}
|
||||
|
||||
static abstract class FeatureDescription {
|
||||
int flagsNormalization = ~0;
|
||||
int flags;
|
||||
boolean deprecated;
|
||||
String signature;
|
||||
@@ -2468,7 +2362,7 @@ public class CreateSymbols {
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 3;
|
||||
hash = 89 * hash + (this.flags & flagsNormalization);
|
||||
hash = 89 * hash + this.flags;
|
||||
hash = 89 * hash + (this.deprecated ? 1 : 0);
|
||||
hash = 89 * hash + Objects.hashCode(this.signature);
|
||||
hash = 89 * hash + listHashCode(this.classAnnotations);
|
||||
@@ -2485,7 +2379,7 @@ public class CreateSymbols {
|
||||
return false;
|
||||
}
|
||||
final FeatureDescription other = (FeatureDescription) obj;
|
||||
if ((this.flags & flagsNormalization) != (other.flags & flagsNormalization)) {
|
||||
if (this.flags != other.flags) {
|
||||
return false;
|
||||
}
|
||||
if (this.deprecated != other.deprecated) {
|
||||
@@ -3137,7 +3031,6 @@ public class CreateSymbols {
|
||||
}
|
||||
|
||||
static class MethodDescription extends FeatureDescription {
|
||||
static int METHODS_FLAGS_NORMALIZATION = ~0;
|
||||
String name;
|
||||
String descriptor;
|
||||
List<String> thrownTypes;
|
||||
@@ -3145,10 +3038,6 @@ public class CreateSymbols {
|
||||
List<List<AnnotationDescription>> classParameterAnnotations;
|
||||
List<List<AnnotationDescription>> runtimeParameterAnnotations;
|
||||
|
||||
public MethodDescription() {
|
||||
flagsNormalization = METHODS_FLAGS_NORMALIZATION;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = super.hashCode();
|
||||
@@ -3873,24 +3762,6 @@ public class CreateSymbols {
|
||||
args);
|
||||
break;
|
||||
}
|
||||
case "build-description-incremental-file": {
|
||||
if (args.length != 6 && args.length != 7) {
|
||||
help();
|
||||
return ;
|
||||
}
|
||||
|
||||
if (args.length == 7) {
|
||||
if ("--normalize-method-flags".equals(args[6])) {
|
||||
MethodDescription.METHODS_FLAGS_NORMALIZATION = ~(0x100 | 0x20);
|
||||
} else {
|
||||
help();
|
||||
return ;
|
||||
}
|
||||
}
|
||||
|
||||
new CreateSymbols().createIncrementalBaseLineFromDataFile(args[1], args[2], args[3], args[4], "<none>".equals(args[5]) ? null : args[5], args);
|
||||
break;
|
||||
}
|
||||
case "build-description-incremental": {
|
||||
if (args.length != 3) {
|
||||
help();
|
||||
|
||||
@@ -30,13 +30,14 @@ $(eval $(call IncludeCustomExtension, modules/java.base/Launcher.gmk))
|
||||
|
||||
JAVA_VERSION_INFO_RESOURCE := $(TOPDIR)/src/java.base/windows/native/launcher/java.rc
|
||||
|
||||
JAVA_RCFLAGS ?= -I$(TOPDIR)/src/java.base/windows/native/launcher/icons
|
||||
JAVA_RC_FLAGS += -I$(TOPDIR)/src/java.base/windows/native/common
|
||||
JAVA_RC_FLAGS += -I$(TOPDIR)/src/java.base/windows/native/launcher/icons
|
||||
|
||||
################################################################################
|
||||
|
||||
$(eval $(call SetupBuildLauncher, java, \
|
||||
CFLAGS := -DEXPAND_CLASSPATH_WILDCARDS -DENABLE_ARG_FILES, \
|
||||
EXTRA_RCFLAGS := $(JAVA_RCFLAGS), \
|
||||
EXTRA_RC_FLAGS := $(JAVA_RC_FLAGS), \
|
||||
VERSION_INFO_RESOURCE := $(JAVA_VERSION_INFO_RESOURCE), \
|
||||
OPTIMIZATION := HIGH, \
|
||||
))
|
||||
@@ -44,7 +45,7 @@ $(eval $(call SetupBuildLauncher, java, \
|
||||
ifeq ($(call isTargetOs, windows), true)
|
||||
$(eval $(call SetupBuildLauncher, javaw, \
|
||||
CFLAGS := -DJAVAW -DEXPAND_CLASSPATH_WILDCARDS -DENABLE_ARG_FILES, \
|
||||
EXTRA_RCFLAGS := $(JAVA_RCFLAGS), \
|
||||
EXTRA_RC_FLAGS := $(JAVA_RC_FLAGS), \
|
||||
VERSION_INFO_RESOURCE := $(JAVA_VERSION_INFO_RESOURCE), \
|
||||
))
|
||||
endif
|
||||
|
||||
@@ -116,7 +116,7 @@ ifeq ($(call isTargetOs, windows), true)
|
||||
LIBAWT_CFLAGS += -DMLIB_OS64BIT
|
||||
endif
|
||||
|
||||
LIBAWT_RCFLAGS ?= -I$(TOPDIR)/src/java.base/windows/native/launcher/icons
|
||||
LIBAWT_RC_FLAGS ?= -I $(TOPDIR)/src/java.base/windows/native/launcher/icons
|
||||
LIBAWT_VERSIONINFO_RESOURCE := $(TOPDIR)/src/$(MODULE)/windows/native/libawt/windows/awt.rc
|
||||
endif
|
||||
|
||||
@@ -169,7 +169,10 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBAWT, \
|
||||
comdlg32.lib winmm.lib comctl32.lib shlwapi.lib \
|
||||
delayimp.lib jvm.lib $(WIN_JAVA_LIB) advapi32.lib, \
|
||||
VERSIONINFO_RESOURCE := $(LIBAWT_VERSIONINFO_RESOURCE), \
|
||||
EXTRA_RCFLAGS := $(LIBAWT_RCFLAGS), \
|
||||
RC_FLAGS := $(RC_FLAGS) $(LIBAWT_RC_FLAGS) \
|
||||
-D "JDK_FNAME=awt.dll" \
|
||||
-D "JDK_INTERNAL_NAME=awt" \
|
||||
-D "JDK_FTYPE=0x2L", \
|
||||
))
|
||||
|
||||
$(BUILD_LIBAWT): $(call FindLib, java.base, java)
|
||||
@@ -277,13 +280,6 @@ else
|
||||
BUILD_LIBLCMS_INCLUDE_FILES :=
|
||||
endif
|
||||
|
||||
ifeq ($(TOOLCHAIN_TYPE), clang)
|
||||
ifeq ($(TOOLCHAIN_VERSION), 10.1)
|
||||
# Work around an optimizer bug seen with Xcode 10.1, but fixed by 10.3
|
||||
BUILD_LIBLCMS_cmsopt.c_CFLAGS := -O0
|
||||
endif
|
||||
endif
|
||||
|
||||
$(eval $(call SetupJdkLibrary, BUILD_LIBLCMS, \
|
||||
NAME := lcms, \
|
||||
INCLUDE_FILES := $(BUILD_LIBLCMS_INCLUDE_FILES), \
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
# 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,20 +25,17 @@
|
||||
|
||||
include LauncherCommon.gmk
|
||||
|
||||
################################################################################
|
||||
# jabswitch
|
||||
|
||||
ifeq ($(call isTargetOs, windows), true)
|
||||
|
||||
ACCESSIBILITY_SRCDIR := $(TOPDIR)/src/jdk.accessibility/windows/native
|
||||
TOOLS_CFLAGS := $(addprefix -I, \
|
||||
$(ACCESSIBILITY_SRCDIR)/include/bridge \
|
||||
$(ACCESSIBILITY_SRCDIR)/common \
|
||||
$(ACCESSIBILITY_SRCDIR)/toolscommon)
|
||||
|
||||
##############################################################################
|
||||
# jabswitch
|
||||
JABSWITCH_SRC := $(TOPDIR)/src/jdk.accessibility/windows/native/jabswitch
|
||||
ACCESSBRIDGE_SRC := $(TOPDIR)/src/jdk.accessibility/windows/native/common
|
||||
|
||||
$(eval $(call SetupJdkExecutable, BUILD_JABSWITCH, \
|
||||
NAME := jabswitch, \
|
||||
SRC := $(ACCESSIBILITY_SRCDIR)/jabswitch, \
|
||||
SRC := $(JABSWITCH_SRC), \
|
||||
INCLUDE_FILES := jabswitch.cpp, \
|
||||
CFLAGS := $(filter-out -Zc:wchar_t-, $(CFLAGS_JDKEXE)) -Zc:wchar_t \
|
||||
-analyze- -Od -Gd -D_WINDOWS \
|
||||
@@ -46,15 +43,21 @@ ifeq ($(call isTargetOs, windows), true)
|
||||
DISABLED_WARNINGS_microsoft := 4267 4996, \
|
||||
LDFLAGS := $(LDFLAGS_JDKEXE), \
|
||||
LIBS := advapi32.lib version.lib user32.lib, \
|
||||
VERSIONINFO_RESOURCE := $(ACCESSIBILITY_SRCDIR)/common/AccessBridgeStatusWindow.rc, \
|
||||
MANIFEST := $(ACCESSIBILITY_SRCDIR)/jabswitch/jabswitch.manifest, \
|
||||
VERSIONINFO_RESOURCE := $(ACCESSBRIDGE_SRC)/AccessBridgeStatusWindow.rc, \
|
||||
MANIFEST := $(JABSWITCH_SRC)/jabswitch.manifest, \
|
||||
MANIFEST_VERSION := $(VERSION_NUMBER_FOUR_POSITIONS), \
|
||||
))
|
||||
|
||||
TARGETS += $(BUILD_JABSWITCH)
|
||||
|
||||
##############################################################################
|
||||
# jaccessinspector
|
||||
################################################################################
|
||||
# jaccessinspector
|
||||
|
||||
TOPDIR := $(TOPDIR)/src/jdk.accessibility/windows/native
|
||||
TOOLS_CFLAGS := $(addprefix -I, \
|
||||
$(TOPDIR)/include/bridge \
|
||||
$(TOPDIR)/common \
|
||||
$(TOPDIR)/toolscommon)
|
||||
|
||||
define SetupInspector
|
||||
# Parameter 1 File name suffix
|
||||
@@ -62,20 +65,20 @@ ifeq ($(call isTargetOs, windows), true)
|
||||
|
||||
$$(eval $$(call SetupJdkExecutable, BUILD_JACCESSINSPECTOR$1, \
|
||||
NAME := jaccessinspector$1, \
|
||||
SRC := $(ACCESSIBILITY_SRCDIR)/jaccessinspector $(ACCESSIBILITY_SRCDIR)/common \
|
||||
$(ACCESSIBILITY_SRCDIR)/toolscommon $(ACCESSIBILITY_SRCDIR)/bridge, \
|
||||
SRC := $(TOPDIR)/jaccessinspector $(TOPDIR)/common \
|
||||
$(TOPDIR)/toolscommon $(TOPDIR)/bridge, \
|
||||
CFLAGS := $$(CFLAGS_JDKEXE) $(TOOLS_CFLAGS) -DACCESSBRIDGE_ARCH_$2 -EHsc, \
|
||||
LDFLAGS := $$(LDFLAGS_JDKEXE) -stack:655360, \
|
||||
LIBS := advapi32.lib user32.lib, \
|
||||
VERSIONINFO_RESOURCE := $(ACCESSIBILITY_SRCDIR)/jaccessinspector/jaccessinspectorWindow.rc, \
|
||||
VERSIONINFO_RESOURCE := $(TOPDIR)/jaccessinspector/jaccessinspectorWindow.rc, \
|
||||
))
|
||||
|
||||
TARGETS += $$(BUILD_JACCESSINSPECTOR$1)
|
||||
|
||||
endef
|
||||
|
||||
##############################################################################
|
||||
# jaccesswalker
|
||||
################################################################################
|
||||
# jaccesswalker
|
||||
|
||||
define SetupWalker
|
||||
# Parameter 1 File name suffix
|
||||
@@ -83,12 +86,12 @@ ifeq ($(call isTargetOs, windows), true)
|
||||
|
||||
$$(eval $$(call SetupJdkExecutable, BUILD_JACCESSWALKER$1, \
|
||||
NAME := jaccesswalker$1, \
|
||||
SRC := $(ACCESSIBILITY_SRCDIR)/jaccesswalker $(ACCESSIBILITY_SRCDIR)/common \
|
||||
$(ACCESSIBILITY_SRCDIR)/toolscommon $(ACCESSIBILITY_SRCDIR)/bridge, \
|
||||
SRC := $(TOPDIR)/jaccesswalker $(TOPDIR)/common \
|
||||
$(TOPDIR)/toolscommon $(TOPDIR)/bridge, \
|
||||
CFLAGS := $$(CFLAGS_JDKEXE) $(TOOLS_CFLAGS) -DACCESSBRIDGE_ARCH_$2 -EHsc, \
|
||||
LDFLAGS := $$(LDFLAGS_JDKEXE) -stack:655360, \
|
||||
LIBS := advapi32.lib comctl32.lib gdi32.lib user32.lib, \
|
||||
VERSIONINFO_RESOURCE := $(ACCESSIBILITY_SRCDIR)/jaccesswalker/jaccesswalkerWindow.rc, \
|
||||
VERSIONINFO_RESOURCE := $(TOPDIR)/jaccesswalker/jaccesswalkerWindow.rc, \
|
||||
))
|
||||
|
||||
TARGETS += $$(BUILD_JACCESSWALKER$1)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
# 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 @@ include LibCommon.gmk
|
||||
|
||||
ifeq ($(call isTargetOs, windows), true)
|
||||
|
||||
ACCESSIBILITY_SRCDIR := $(TOPDIR)/src/jdk.accessibility/windows/native
|
||||
ROOT_SRCDIR := $(TOPDIR)/src/jdk.accessibility/windows/native
|
||||
|
||||
define SetupJavaDLL
|
||||
# Parameter 1 Suffix
|
||||
@@ -52,7 +52,7 @@ ifeq ($(call isTargetOs, windows), true)
|
||||
winspool.lib comdlg32.lib advapi32.lib shell32.lib \
|
||||
$(SUPPORT_OUTPUTDIR)/native/java.desktop/libjawt/jawt.lib \
|
||||
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib, \
|
||||
VERSIONINFO_RESOURCE := $(ACCESSIBILITY_SRCDIR)/common/AccessBridgeStatusWindow.rc, \
|
||||
VERSIONINFO_RESOURCE := $(ROOT_SRCDIR)/common/AccessBridgeStatusWindow.rc, \
|
||||
)
|
||||
|
||||
$$(BUILD_JAVAACCESSBRIDGE$1): $(call FindStaticLib, java.desktop, jawt, /libjawt)
|
||||
@@ -75,11 +75,11 @@ ifeq ($(call isTargetOs, windows), true)
|
||||
include/bridge \
|
||||
java.base:include, \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
||||
-def:$(ACCESSIBILITY_SRCDIR)/libwindowsaccessbridge/WinAccessBridge.DEF, \
|
||||
-def:$(ROOT_SRCDIR)/libwindowsaccessbridge/WinAccessBridge.DEF, \
|
||||
LIBS := kernel32.lib user32.lib gdi32.lib \
|
||||
winspool.lib comdlg32.lib advapi32.lib shell32.lib \
|
||||
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib, \
|
||||
VERSIONINFO_RESOURCE := $(ACCESSIBILITY_SRCDIR)/common/AccessBridgeStatusWindow.rc, \
|
||||
VERSIONINFO_RESOURCE := $(ROOT_SRCDIR)/common/AccessBridgeStatusWindow.rc, \
|
||||
)
|
||||
|
||||
TARGETS += $$(BUILD_WINDOWSACCESSBRIDGE$1)
|
||||
@@ -93,7 +93,7 @@ ifeq ($(call isTargetOs, windows), true)
|
||||
OPTIMIZATION := LOW, \
|
||||
CFLAGS := $(CFLAGS_JDKLIB), \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB), \
|
||||
VERSIONINFO_RESOURCE := $(ACCESSIBILITY_SRCDIR)/common/AccessBridgeStatusWindow.rc, \
|
||||
VERSIONINFO_RESOURCE := $(ROOT_SRCDIR)/common/AccessBridgeStatusWindow.rc, \
|
||||
)
|
||||
|
||||
TARGETS += $$(BUILD_ACCESSBRIDGESYSINFO)
|
||||
|
||||
@@ -66,7 +66,6 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBSA, \
|
||||
CXXFLAGS := $(CXXFLAGS_JDKLIB) $(SA_CFLAGS) $(SA_CXXFLAGS), \
|
||||
EXTRA_SRC := $(LIBSA_EXTRA_SRC), \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB), \
|
||||
LIBS := $(LIBCXX), \
|
||||
LIBS_linux := $(LIBDL), \
|
||||
LIBS_macosx := -framework Foundation -framework JavaNativeFoundation \
|
||||
-framework JavaRuntimeSupport -framework Security -framework CoreFoundation, \
|
||||
|
||||
@@ -27,6 +27,14 @@ include CopyCommon.gmk
|
||||
|
||||
################################################################################
|
||||
|
||||
$(eval $(call SetupCopyFiles, COPY_JFR_METADATA, \
|
||||
SRC := $(TOPDIR)/src/hotspot/share/jfr/metadata, \
|
||||
DEST := $(JDK_OUTPUTDIR)/modules/jdk.jfr/jdk/jfr/internal/types, \
|
||||
FILES := metadata.xml \
|
||||
))
|
||||
|
||||
TARGETS += $(COPY_JFR_METADATA)
|
||||
|
||||
JFR_CONF_DIR := $(TOPDIR)/src/jdk.jfr/share/conf/jfr
|
||||
$(eval $(call SetupCopyFiles, COPY_JFR_CONF, \
|
||||
DEST := $(LIB_DST_DIR)/jfr, \
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
|
||||
include ToolsHotspot.gmk
|
||||
include Execute.gmk
|
||||
|
||||
JFR_SRCDIR := $(TOPDIR)/src/hotspot/share/jfr/metadata
|
||||
JFR_DATA_OUTPUTDIR := $(OUTPUTDIR)/jdk/modules/jdk.jfr/jdk/jfr/internal/types
|
||||
JFR_DATA_OUTPUTFILE := $(JFR_DATA_OUTPUTDIR)/metadata.bin
|
||||
JFR_DATA_SUPPORTDIR := $(SUPPORT_OUTPUTDIR)/gendata/jdk.jfr
|
||||
|
||||
# Changing these will trigger a rebuild of generated jfr files.
|
||||
METADATA_XML := $(JFR_SRCDIR)/metadata.xml
|
||||
METADATA_XSD := $(JFR_SRCDIR)/metadata.xsd
|
||||
|
||||
$(eval $(call SetupExecute, jfr_gen_metadata, \
|
||||
INFO := Generating JFR metadata, \
|
||||
DEPS := $(METADATA_XML) $(METADATA_XSD) $(BUILD_TOOLS_HOTSPOT), \
|
||||
OUTPUT_FILE := $(JFR_DATA_OUTPUTFILE), \
|
||||
SUPPORT_DIR := $(JFR_DATA_SUPPORTDIR), \
|
||||
COMMAND := $(TOOL_JFR_GEN) --mode metadata --xml $(METADATA_XML) --xsd $(METADATA_XSD) --output $(JFR_DATA_OUTPUTFILE), \
|
||||
))
|
||||
|
||||
TARGETS += $(jfr_gen_metadata)
|
||||
@@ -1,19 +1,16 @@
|
||||
package build.tools.jfr;
|
||||
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.Closeable;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.StringJoiner;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
@@ -28,107 +25,94 @@ import org.xml.sax.SAXException;
|
||||
import org.xml.sax.SAXParseException;
|
||||
import org.xml.sax.helpers.DefaultHandler;
|
||||
|
||||
/**
|
||||
* Purpose of this program is twofold:
|
||||
*
|
||||
* 1) Generate C++ classes to be used when writing native events for HotSpot.
|
||||
*
|
||||
* 2) Generate metadata (label, descriptions, field layout etc.) from XML
|
||||
* (metadata.xml) into a binary format (metadata.bin) that can be read quickly
|
||||
* during startup by the jdk.jfr module.
|
||||
*
|
||||
* INPUT FILES:
|
||||
*
|
||||
* - metadata.xml File that contains descriptions of events and types
|
||||
* - metadata.xsd Schema that verifies that metadata.xml is legit XML
|
||||
*
|
||||
* OUTPUT FILES:
|
||||
*
|
||||
* MODE: headers
|
||||
*
|
||||
* - jfrEventIds.hpp List of IDs so events can be identified from native
|
||||
* - jfrTypes.hpp List of IDs so types can be identified from native
|
||||
* - jfrPeriodic.hpp Dispatch mechanism so Java can emit native periodic events
|
||||
* - jfrEventControl.hpp Data structure for native event settings.
|
||||
* - jfrEventClasses.hpp C++ event classes that can write data into native buffers
|
||||
*
|
||||
* MODE: metadata
|
||||
*
|
||||
* - metadata.bin Binary representation of the information in metadata.xml
|
||||
*
|
||||
*/
|
||||
public class GenerateJfrFiles {
|
||||
|
||||
enum OutputMode {
|
||||
headers, metadata
|
||||
}
|
||||
|
||||
private static void printUsage(PrintStream out) {
|
||||
out.println("Usage: java GenerateJfrFiles[.java]");
|
||||
out.println(" --mode <headers|metadata>");
|
||||
out.println(" --xml <path-to-metadata.xml> ");
|
||||
out.println(" --xsd <path-to-metadata.xsd>");
|
||||
out.println(" --output <output-file-or-directory>");
|
||||
}
|
||||
|
||||
private static String consumeOption(String option, List<String> argList) throws Exception {
|
||||
int index = argList.indexOf(option);
|
||||
if (index >= 0 && index <= argList.size() - 2) {
|
||||
String result = argList.get(index + 1);
|
||||
argList.remove(index);
|
||||
argList.remove(index);
|
||||
return result;
|
||||
}
|
||||
throw new IllegalArgumentException("missing option " + option);
|
||||
}
|
||||
|
||||
public static void main(String... args) throws Exception {
|
||||
if (args.length != 3) {
|
||||
System.err.println("Incorrect number of command line arguments.");
|
||||
System.err.println("Usage:");
|
||||
System.err.println("java GenerateJfrFiles[.java] <path-to-metadata.xml> <path-to-metadata.xsd> <output-directory>");
|
||||
System.exit(1);
|
||||
}
|
||||
try {
|
||||
List<String> argList = new ArrayList<>();
|
||||
argList.addAll(Arrays.asList(args));
|
||||
String mode = consumeOption("--mode", argList);
|
||||
String output = consumeOption("--output", argList);
|
||||
String xml = consumeOption("--xml", argList);
|
||||
String xsd = consumeOption("--xsd", argList);
|
||||
if (!argList.isEmpty()) {
|
||||
throw new IllegalArgumentException("unknown option " + argList);
|
||||
}
|
||||
OutputMode outputMode = OutputMode.valueOf(mode);
|
||||
File xmlFile = new File(xml);
|
||||
File xsdFile = new File(xsd);
|
||||
File metadataXml = new File(args[0]);
|
||||
File metadataSchema = new File(args[1]);
|
||||
File outputDirectory = new File(args[2]);
|
||||
|
||||
Metadata metadata = new Metadata(xmlFile, xsdFile);
|
||||
Metadata metadata = new Metadata(metadataXml, metadataSchema);
|
||||
metadata.verify();
|
||||
metadata.wireUpTypes();
|
||||
|
||||
if (outputMode == OutputMode.headers) {
|
||||
File outputDir = new File(output);
|
||||
printJfrEventIdsHpp(metadata, new File(outputDir, "jfrEventIds.hpp"));
|
||||
printJfrTypesHpp(metadata, new File(outputDir, "jfrTypes.hpp"));
|
||||
printJfrPeriodicHpp(metadata, new File(outputDir, "jfrPeriodic.hpp"));
|
||||
printJfrEventControlHpp(metadata, new File(outputDir, "jfrEventControl.hpp"));
|
||||
printJfrEventClassesHpp(metadata, new File(outputDir, "jfrEventClasses.hpp"));
|
||||
}
|
||||
TypeCounter typeCounter = new TypeCounter();
|
||||
printJfrEventIdsHpp(metadata, typeCounter, outputDirectory);
|
||||
printJfrTypesHpp(metadata, typeCounter, outputDirectory);
|
||||
printJfrPeriodicHpp(metadata, outputDirectory);
|
||||
printJfrEventControlHpp(metadata, typeCounter, outputDirectory);
|
||||
printJfrEventClassesHpp(metadata, outputDirectory);
|
||||
|
||||
if (outputMode == OutputMode.metadata) {
|
||||
File outputFile = new File(output);
|
||||
try (var b = new DataOutputStream(
|
||||
new BufferedOutputStream(
|
||||
new FileOutputStream(outputFile)))) {
|
||||
metadata.persist(b);
|
||||
}
|
||||
}
|
||||
System.exit(0);
|
||||
} catch (IllegalArgumentException iae) {
|
||||
System.err.println();
|
||||
System.err.println("GenerateJfrFiles: " + iae.getMessage());
|
||||
System.err.println();
|
||||
printUsage(System.err);
|
||||
System.err.println();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
static class TypeCounter {
|
||||
final static long RESERVED_EVENT_COUNT = 2;
|
||||
long typeId = -1;
|
||||
long eventId = -1;
|
||||
long eventCount = 0;
|
||||
String firstTypeName;
|
||||
String lastTypeName;
|
||||
String firstEventName;
|
||||
String lastEventname;
|
||||
|
||||
public long nextEventId(String name) {
|
||||
eventCount++;
|
||||
if (eventId == -1) {
|
||||
eventId = firstEventId();
|
||||
firstEventName = lastEventname = name;
|
||||
return eventId;
|
||||
}
|
||||
lastEventname = name;
|
||||
return ++eventId;
|
||||
}
|
||||
|
||||
public long nextTypeId(String typeName) {
|
||||
if (typeId == -1) {
|
||||
lastTypeName = firstTypeName = typeName;
|
||||
typeId = lastEventId();
|
||||
}
|
||||
lastTypeName = typeName;
|
||||
return ++typeId;
|
||||
}
|
||||
|
||||
public long firstEventId() {
|
||||
return RESERVED_EVENT_COUNT;
|
||||
}
|
||||
|
||||
public long lastEventId() {
|
||||
return eventId == -1 ? firstEventId() : eventId;
|
||||
}
|
||||
|
||||
public long eventCount() {
|
||||
return eventCount;
|
||||
}
|
||||
|
||||
public String firstTypeName() {
|
||||
return firstTypeName;
|
||||
}
|
||||
|
||||
public String lastTypeName() {
|
||||
return lastTypeName;
|
||||
}
|
||||
|
||||
public String firstEventName() {
|
||||
return firstEventName;
|
||||
}
|
||||
|
||||
public String lastEventName() {
|
||||
return lastEventname;
|
||||
}
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
static class XmlType {
|
||||
@@ -137,99 +121,28 @@ public class GenerateJfrFiles {
|
||||
final String parameterType;
|
||||
final String javaType;
|
||||
final boolean unsigned;
|
||||
final String contentType;
|
||||
|
||||
XmlType(String name, String fieldType, String parameterType, String javaType, String contentType,
|
||||
boolean unsigned) {
|
||||
XmlType(String name, String fieldType, String parameterType, String javaType, boolean unsigned) {
|
||||
this.name = name;
|
||||
this.fieldType = fieldType;
|
||||
this.parameterType = parameterType;
|
||||
this.javaType = javaType;
|
||||
this.unsigned = unsigned;
|
||||
this.contentType = contentType;
|
||||
}
|
||||
}
|
||||
|
||||
static class XmlContentType {
|
||||
final String name;
|
||||
final String annotation;
|
||||
|
||||
XmlContentType(String name, String annotation) {
|
||||
this.name = name;
|
||||
this.annotation = annotation;
|
||||
}
|
||||
}
|
||||
|
||||
static class TypeElement {
|
||||
List<FieldElement> fields = new ArrayList<>();
|
||||
String name;
|
||||
String javaType;
|
||||
String label = "";
|
||||
String description = "";
|
||||
String category = "";
|
||||
boolean thread;
|
||||
boolean stackTrace;
|
||||
boolean startTime;
|
||||
String period = "";
|
||||
boolean cutoff;
|
||||
boolean experimental;
|
||||
long id;
|
||||
boolean isEvent;
|
||||
boolean isRelation;
|
||||
boolean supportStruct = false;
|
||||
String commitState;
|
||||
public boolean primitive;
|
||||
|
||||
public void persist(DataOutputStream pos) throws IOException {
|
||||
pos.writeInt(fields.size());
|
||||
for (FieldElement field : fields) {
|
||||
field.persist(pos);
|
||||
}
|
||||
pos.writeUTF(javaType);
|
||||
pos.writeUTF(label);
|
||||
pos.writeUTF(description);
|
||||
pos.writeUTF(category);
|
||||
pos.writeBoolean(thread);
|
||||
pos.writeBoolean(stackTrace);
|
||||
pos.writeBoolean(startTime);
|
||||
pos.writeUTF(period);
|
||||
pos.writeBoolean(cutoff);
|
||||
pos.writeBoolean(experimental);
|
||||
pos.writeLong(id);
|
||||
pos.writeBoolean(isEvent);
|
||||
pos.writeBoolean(isRelation);
|
||||
}
|
||||
String fieldType;
|
||||
String parameterType;
|
||||
boolean supportStruct;
|
||||
}
|
||||
|
||||
static class Metadata {
|
||||
static class TypeCounter {
|
||||
final long first;
|
||||
long last = -1;
|
||||
long count = 0;
|
||||
long id = -1;
|
||||
|
||||
TypeCounter(long startId) {
|
||||
this.first = startId;
|
||||
}
|
||||
|
||||
long next() {
|
||||
id = (id == -1) ? first : id + 1;
|
||||
count++;
|
||||
last = id;
|
||||
return id;
|
||||
}
|
||||
}
|
||||
|
||||
static int RESERVED_EVENT_COUNT = 2;
|
||||
final Map<String, TypeElement> types = new LinkedHashMap<>();
|
||||
final Map<String, XmlType> xmlTypes = new LinkedHashMap<>();
|
||||
final Map<String, XmlContentType> xmlContentTypes = new LinkedHashMap<>();
|
||||
int lastEventId;
|
||||
private TypeCounter eventCounter;
|
||||
private TypeCounter typeCounter;
|
||||
|
||||
Metadata(File metadataXml, File metadataSchema)
|
||||
throws ParserConfigurationException, SAXException, FileNotFoundException, IOException {
|
||||
Metadata(File metadataXml, File metadataSchema) throws ParserConfigurationException, SAXException, FileNotFoundException, IOException {
|
||||
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
|
||||
SAXParserFactory factory = SAXParserFactory.newInstance();
|
||||
factory.setSchema(schemaFactory.newSchema(metadataSchema));
|
||||
@@ -237,19 +150,16 @@ public class GenerateJfrFiles {
|
||||
sp.parse(metadataXml, new MetadataHandler(this));
|
||||
}
|
||||
|
||||
public void persist(DataOutputStream pos) throws IOException {
|
||||
pos.writeInt(types.values().size());
|
||||
for (TypeElement t : types.values()) {
|
||||
t.persist(pos);
|
||||
}
|
||||
}
|
||||
|
||||
List<TypeElement> getEvents() {
|
||||
return getList(t -> t.isEvent);
|
||||
List<EventElement> getEvents() {
|
||||
return getList(t -> t.getClass() == EventElement.class);
|
||||
}
|
||||
|
||||
List<TypeElement> getEventsAndStructs() {
|
||||
return getList(t -> t.isEvent || t.supportStruct);
|
||||
return getList(t -> t.getClass() == EventElement.class || t.supportStruct);
|
||||
}
|
||||
|
||||
List<TypeElement> getTypesAndStructs() {
|
||||
return getList(t -> t.getClass() == TypeElement.class || t.supportStruct);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@@ -263,25 +173,24 @@ public class GenerateJfrFiles {
|
||||
return result;
|
||||
}
|
||||
|
||||
List<TypeElement> getPeriodicEvents() {
|
||||
return getList(t -> t.isEvent && !t.period.isEmpty());
|
||||
List<EventElement> getPeriodicEvents() {
|
||||
return getList(t -> t.getClass() == EventElement.class && ((EventElement) t).periodic);
|
||||
}
|
||||
|
||||
List<TypeElement> getTypes() {
|
||||
return getList(t -> !t.isEvent);
|
||||
return getList(t -> t.getClass() == TypeElement.class);
|
||||
}
|
||||
|
||||
List<TypeElement> getStructs() {
|
||||
return getList(t -> !t.isEvent && t.supportStruct);
|
||||
return getList(t -> t.getClass() == TypeElement.class && t.supportStruct);
|
||||
}
|
||||
|
||||
void verify() {
|
||||
void verify() {
|
||||
for (TypeElement t : types.values()) {
|
||||
for (FieldElement f : t.fields) {
|
||||
if (!xmlTypes.containsKey(f.typeName)) { // ignore primitives
|
||||
if (!types.containsKey(f.typeName)) {
|
||||
throw new IllegalStateException("Could not find definition of type '" + f.typeName
|
||||
+ "' used by " + t.name + "#" + f.name);
|
||||
throw new IllegalStateException("Could not find definition of type '" + f.typeName + "' used by " + t.name + "#" + f.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -289,96 +198,26 @@ public class GenerateJfrFiles {
|
||||
}
|
||||
|
||||
void wireUpTypes() {
|
||||
// Add Java primitives
|
||||
for (var t : xmlTypes.entrySet()) {
|
||||
String name = t.getKey();
|
||||
XmlType xmlType = t.getValue();
|
||||
// Excludes Thread and Class
|
||||
if (!types.containsKey(name)) {
|
||||
// Excludes u8, u4, u2, u1, Ticks and Ticksspan
|
||||
if (!xmlType.javaType.isEmpty() && !xmlType.unsigned) {
|
||||
TypeElement te = new TypeElement();
|
||||
te.name = name;
|
||||
te.javaType = xmlType.javaType;
|
||||
te.primitive = true;
|
||||
types.put(te.name, te);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Setup Java fully qualified names
|
||||
for (TypeElement t : types.values()) {
|
||||
if (t.isEvent) {
|
||||
t.javaType = "jdk." + t.name;
|
||||
} else {
|
||||
XmlType xmlType = xmlTypes.get(t.name);
|
||||
if (xmlType != null && !xmlType.javaType.isEmpty()) {
|
||||
t.javaType = xmlType.javaType;
|
||||
} else {
|
||||
t.javaType = "jdk.types." + t.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Setup content type, annotation, constant pool etc. for fields.
|
||||
for (TypeElement t : types.values()) {
|
||||
for (FieldElement f : t.fields) {
|
||||
TypeElement type = types.get(f.typeName);
|
||||
XmlType xmlType = xmlTypes.get(f.typeName);
|
||||
if (type == null) {
|
||||
if (xmlType == null) {
|
||||
throw new IllegalStateException("Unknown type");
|
||||
}
|
||||
if (f.contentType.isEmpty()) {
|
||||
f.contentType = xmlType.contentType;
|
||||
}
|
||||
String javaType = xmlType.javaType;
|
||||
type = types.get(javaType);
|
||||
Objects.requireNonNull(type);
|
||||
}
|
||||
if (type.primitive) {
|
||||
f.constantPool = false;
|
||||
}
|
||||
|
||||
if (xmlType != null) {
|
||||
f.unsigned = xmlType.unsigned;
|
||||
}
|
||||
|
||||
if (f.struct) {
|
||||
f.constantPool = false;
|
||||
type.supportStruct = true;
|
||||
}
|
||||
f.type = type;
|
||||
XmlContentType xmlContentType = xmlContentTypes.get(f.contentType);
|
||||
if (xmlContentType == null) {
|
||||
f.annotations = "";
|
||||
} else {
|
||||
f.annotations = xmlContentType.annotation;
|
||||
}
|
||||
if (!f.relation.isEmpty()) {
|
||||
f.relation = "jdk.types." + f.relation;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Low numbers for event so most of them
|
||||
// can fit in one byte with compressed integers
|
||||
eventCounter = new TypeCounter(RESERVED_EVENT_COUNT);
|
||||
for (TypeElement t : getEvents()) {
|
||||
t.id = eventCounter.next();
|
||||
}
|
||||
typeCounter = new TypeCounter(eventCounter.last + 1);
|
||||
for (TypeElement t : getTypes()) {
|
||||
t.id = typeCounter.next();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String getName(long id) {
|
||||
for (TypeElement t : types.values()) {
|
||||
if (t.id == id) {
|
||||
return t.name;
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException("Unexpected id " + id );
|
||||
}
|
||||
static class EventElement extends TypeElement {
|
||||
String representation;
|
||||
boolean thread;
|
||||
boolean stackTrace;
|
||||
boolean startTime;
|
||||
boolean periodic;
|
||||
boolean cutoff;
|
||||
String commitState;
|
||||
}
|
||||
|
||||
static class FieldElement {
|
||||
@@ -386,36 +225,12 @@ public class GenerateJfrFiles {
|
||||
TypeElement type;
|
||||
String name;
|
||||
String typeName;
|
||||
boolean constantPool = true;
|
||||
public String transition;
|
||||
public String contentType;
|
||||
private String label;
|
||||
private String description;
|
||||
private String relation;
|
||||
private boolean experimental;
|
||||
private boolean unsigned;
|
||||
private boolean array;
|
||||
private String annotations;
|
||||
public boolean struct;
|
||||
boolean struct;
|
||||
|
||||
FieldElement(Metadata metadata) {
|
||||
this.metadata = metadata;
|
||||
}
|
||||
|
||||
public void persist(DataOutputStream pos) throws IOException {
|
||||
pos.writeUTF(name);
|
||||
pos.writeUTF(type.javaType);
|
||||
pos.writeUTF(label);
|
||||
pos.writeUTF(description);
|
||||
pos.writeBoolean(constantPool);
|
||||
pos.writeBoolean(array);
|
||||
pos.writeBoolean(unsigned);
|
||||
pos.writeUTF(annotations);
|
||||
pos.writeUTF(transition);
|
||||
pos.writeUTF(relation);
|
||||
pos.writeBoolean(experimental);
|
||||
}
|
||||
|
||||
String getParameterType() {
|
||||
if (struct) {
|
||||
return "const JfrStruct" + typeName + "&";
|
||||
@@ -447,75 +262,50 @@ public class GenerateJfrFiles {
|
||||
final Metadata metadata;
|
||||
FieldElement currentField;
|
||||
TypeElement currentType;
|
||||
|
||||
MetadataHandler(Metadata metadata) {
|
||||
this.metadata = metadata;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(SAXParseException e) throws SAXException {
|
||||
throw e;
|
||||
throw e;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startElement(String uri, String localName, String qName, Attributes attributes)
|
||||
throws SAXException {
|
||||
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
|
||||
switch (qName) {
|
||||
case "XmlContentType":
|
||||
String n = attributes.getValue("name"); // mandatory
|
||||
String a = attributes.getValue("annotation"); // mandatory
|
||||
metadata.xmlContentTypes.put(n, new XmlContentType(n, a));
|
||||
break;
|
||||
case "XmlType":
|
||||
String name = attributes.getValue("name"); // mandatory
|
||||
String parameterType = attributes.getValue("parameterType"); // mandatory
|
||||
String fieldType = attributes.getValue("fieldType"); // mandatory
|
||||
String javaType = getString(attributes, "javaType");
|
||||
String contentType = getString(attributes, "contentType");
|
||||
String name = attributes.getValue("name");
|
||||
String parameterType = attributes.getValue("parameterType");
|
||||
String fieldType = attributes.getValue("fieldType");
|
||||
String javaType = attributes.getValue("javaType");
|
||||
boolean unsigned = getBoolean(attributes, "unsigned", false);
|
||||
metadata.xmlTypes.put(name,
|
||||
new XmlType(name, fieldType, parameterType, javaType, contentType, unsigned));
|
||||
metadata.xmlTypes.put(name, new XmlType(name, fieldType, parameterType, javaType, unsigned));
|
||||
break;
|
||||
case "Relation":
|
||||
case "Type":
|
||||
case "Event":
|
||||
currentType = new TypeElement();
|
||||
currentType.name = attributes.getValue("name"); // mandatory
|
||||
currentType.label = getString(attributes, "label");
|
||||
currentType.description = getString(attributes, "description");
|
||||
currentType.category = getString(attributes, "category");
|
||||
currentType.experimental = getBoolean(attributes, "experimental", false);
|
||||
currentType.thread = getBoolean(attributes, "thread", false);
|
||||
currentType.stackTrace = getBoolean(attributes, "stackTrace", false);
|
||||
currentType.startTime = getBoolean(attributes, "startTime", true);
|
||||
currentType.period = getString(attributes, "period");
|
||||
currentType.cutoff = getBoolean(attributes, "cutoff", false);
|
||||
currentType.commitState = getString(attributes, "commitState");
|
||||
currentType.isEvent = "Event".equals(qName);
|
||||
currentType.isRelation = "Relation".equals(qName);
|
||||
currentType.name = attributes.getValue("name");
|
||||
break;
|
||||
case "Event":
|
||||
EventElement eventType = new EventElement();
|
||||
eventType.name = attributes.getValue("name");
|
||||
eventType.thread = getBoolean(attributes, "thread", false);
|
||||
eventType.stackTrace = getBoolean(attributes, "stackTrace", false);
|
||||
eventType.startTime = getBoolean(attributes, "startTime", true);
|
||||
eventType.periodic = attributes.getValue("period") != null;
|
||||
eventType.cutoff = getBoolean(attributes, "cutoff", false);
|
||||
eventType.commitState = attributes.getValue("commitState");
|
||||
currentType = eventType;
|
||||
break;
|
||||
case "Field":
|
||||
currentField = new FieldElement(metadata);
|
||||
currentField.name = attributes.getValue("name"); // mandatory
|
||||
currentField.typeName = attributes.getValue("type"); // mandatory
|
||||
currentField.label = getString(attributes, "label");
|
||||
currentField.description = getString(attributes, "description");
|
||||
currentField.contentType = getString(attributes, "contentType");
|
||||
currentField.struct = getBoolean(attributes, "struct", false);
|
||||
currentField.array = getBoolean(attributes, "array", false);
|
||||
currentField.transition = getString(attributes, "transition");
|
||||
currentField.relation = getString(attributes, "relation");
|
||||
currentField.experimental = getBoolean(attributes, "experimental", false);
|
||||
currentField.name = attributes.getValue("name");
|
||||
currentField.typeName = attributes.getValue("type");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static String getString(Attributes attributes, String name) {
|
||||
String value = attributes.getValue(name);
|
||||
return value != null ? value : "";
|
||||
}
|
||||
|
||||
private static boolean getBoolean(Attributes attributes, String name, boolean defaultValue) {
|
||||
private boolean getBoolean(Attributes attributes, String name, boolean defaultValue) {
|
||||
String value = attributes.getValue(name);
|
||||
return value == null ? defaultValue : Boolean.valueOf(value);
|
||||
}
|
||||
@@ -537,11 +327,10 @@ public class GenerateJfrFiles {
|
||||
}
|
||||
}
|
||||
|
||||
static class Printer implements Closeable {
|
||||
static class Printer implements AutoCloseable {
|
||||
final PrintStream out;
|
||||
|
||||
Printer(File outputFile) throws FileNotFoundException {
|
||||
out = new PrintStream(new BufferedOutputStream(new FileOutputStream(outputFile)));
|
||||
Printer(File outputDirectory, String filename) throws FileNotFoundException {
|
||||
out = new PrintStream(new BufferedOutputStream(new FileOutputStream(new File(outputDirectory, filename))));
|
||||
write("/* AUTOMATICALLY GENERATED FILE - DO NOT EDIT */");
|
||||
write("");
|
||||
}
|
||||
@@ -552,13 +341,13 @@ public class GenerateJfrFiles {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
public void close() throws Exception {
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
|
||||
private static void printJfrPeriodicHpp(Metadata metadata, File outputFile) throws Exception {
|
||||
try (var out = new Printer(outputFile)) {
|
||||
private static void printJfrPeriodicHpp(Metadata metadata, File outputDirectory) throws Exception {
|
||||
try (Printer out = new Printer(outputDirectory, "jfrPeriodic.hpp")) {
|
||||
out.write("#ifndef JFRFILES_JFRPERIODICEVENTSET_HPP");
|
||||
out.write("#define JFRFILES_JFRPERIODICEVENTSET_HPP");
|
||||
out.write("");
|
||||
@@ -572,7 +361,7 @@ public class GenerateJfrFiles {
|
||||
out.write(" static void requestEvent(JfrEventId id) {");
|
||||
out.write(" switch(id) {");
|
||||
out.write(" ");
|
||||
for (TypeElement e : metadata.getPeriodicEvents()) {
|
||||
for (EventElement e : metadata.getPeriodicEvents()) {
|
||||
out.write(" case Jfr" + e.name + "Event:");
|
||||
out.write(" request" + e.name + "();");
|
||||
out.write(" break;");
|
||||
@@ -585,7 +374,7 @@ public class GenerateJfrFiles {
|
||||
out.write("");
|
||||
out.write(" private:");
|
||||
out.write("");
|
||||
for (TypeElement e : metadata.getPeriodicEvents()) {
|
||||
for (EventElement e : metadata.getPeriodicEvents()) {
|
||||
out.write(" static void request" + e.name + "(void);");
|
||||
out.write("");
|
||||
}
|
||||
@@ -596,8 +385,8 @@ public class GenerateJfrFiles {
|
||||
}
|
||||
}
|
||||
|
||||
private static void printJfrEventControlHpp(Metadata metadata, File outputFile) throws Exception {
|
||||
try (var out = new Printer(outputFile)) {
|
||||
private static void printJfrEventControlHpp(Metadata metadata, TypeCounter typeCounter, File outputDirectory) throws Exception {
|
||||
try (Printer out = new Printer(outputDirectory, "jfrEventControl.hpp")) {
|
||||
out.write("#ifndef JFRFILES_JFR_NATIVE_EVENTSETTING_HPP");
|
||||
out.write("#define JFRFILES_JFR_NATIVE_EVENTSETTING_HPP");
|
||||
out.write("");
|
||||
@@ -637,8 +426,8 @@ public class GenerateJfrFiles {
|
||||
}
|
||||
}
|
||||
|
||||
private static void printJfrEventIdsHpp(Metadata metadata, File outputFile) throws Exception {
|
||||
try (var out = new Printer(outputFile)) {
|
||||
private static void printJfrEventIdsHpp(Metadata metadata, TypeCounter typeCounter, File outputDirectory) throws Exception {
|
||||
try (Printer out = new Printer(outputDirectory, "jfrEventIds.hpp")) {
|
||||
out.write("#ifndef JFRFILES_JFREVENTIDS_HPP");
|
||||
out.write("#define JFRFILES_JFREVENTIDS_HPP");
|
||||
out.write("");
|
||||
@@ -649,28 +438,23 @@ public class GenerateJfrFiles {
|
||||
out.write(" JfrMetadataEvent = 0,");
|
||||
out.write(" JfrCheckpointEvent = 1,");
|
||||
for (TypeElement t : metadata.getEvents()) {
|
||||
out.write(" " + jfrEventId(t.name) + " = " + t.id + ",");
|
||||
String name = "Jfr" + t.name +"Event";
|
||||
out.write(" " + name + " = " + typeCounter.nextEventId(name) + ",");
|
||||
}
|
||||
out.write("};");
|
||||
out.write("typedef enum JfrEventId JfrEventId;");
|
||||
out.write("");
|
||||
String first = metadata.getName(metadata.eventCounter.first);
|
||||
String last = metadata.getName(metadata.eventCounter.last);
|
||||
out.write("static const JfrEventId FIRST_EVENT_ID = " + jfrEventId(first) + ";");
|
||||
out.write("static const JfrEventId LAST_EVENT_ID = " + jfrEventId(last) + ";");
|
||||
out.write("static const int NUMBER_OF_EVENTS = " + metadata.eventCounter.count + ";");
|
||||
out.write("static const int NUMBER_OF_RESERVED_EVENTS = " + Metadata.RESERVED_EVENT_COUNT + ";");
|
||||
out.write("static const JfrEventId FIRST_EVENT_ID = " + typeCounter.firstEventName() + ";");
|
||||
out.write("static const JfrEventId LAST_EVENT_ID = " + typeCounter.lastEventName() + ";");
|
||||
out.write("static const int NUMBER_OF_EVENTS = " + typeCounter.eventCount() + ";");
|
||||
out.write("static const int NUMBER_OF_RESERVED_EVENTS = " + TypeCounter.RESERVED_EVENT_COUNT + ";");
|
||||
out.write("#endif // INCLUDE_JFR");
|
||||
out.write("#endif // JFRFILES_JFREVENTIDS_HPP");
|
||||
}
|
||||
}
|
||||
|
||||
private static String jfrEventId(String name) {
|
||||
return "Jfr" + name + "Event";
|
||||
}
|
||||
|
||||
private static void printJfrTypesHpp(Metadata metadata, File outputFile) throws Exception {
|
||||
try (var out = new Printer(outputFile)) {
|
||||
private static void printJfrTypesHpp(Metadata metadata, TypeCounter typeCounter, File outputDirectory) throws Exception {
|
||||
try (Printer out = new Printer(outputDirectory, "jfrTypes.hpp")) {
|
||||
out.write("#ifndef JFRFILES_JFRTYPES_HPP");
|
||||
out.write("#define JFRFILES_JFRTYPES_HPP");
|
||||
out.write("");
|
||||
@@ -681,27 +465,36 @@ public class GenerateJfrFiles {
|
||||
out.write("#include \"memory/allocation.hpp\"");
|
||||
out.write("");
|
||||
out.write("enum JfrTypeId {");
|
||||
Map<String, XmlType> javaTypes = new LinkedHashMap<>();
|
||||
for (var t : metadata.xmlTypes.entrySet()) {
|
||||
String name = t.getKey();
|
||||
XmlType xmlType = t.getValue();
|
||||
if (xmlType.javaType != null && !xmlType.unsigned) {
|
||||
String typeName = "TYPE_" + name.toUpperCase();
|
||||
long typeId = typeCounter.nextTypeId(typeName);
|
||||
out.write(" " + typeName + " = " + typeId + ",");
|
||||
javaTypes.put(name, xmlType);
|
||||
}
|
||||
}
|
||||
for (TypeElement type : metadata.getTypes()) {
|
||||
out.write(" " + jfrTypeId(type.name) + " = " + type.id + ",");
|
||||
String name = type.name;
|
||||
if (!javaTypes.containsKey(name)) {
|
||||
String typeName = "TYPE_" + name.toUpperCase();
|
||||
long typeId = typeCounter.nextTypeId(typeName);
|
||||
out.write(" " + typeName + " = " + typeId + ",");
|
||||
}
|
||||
}
|
||||
out.write("};");
|
||||
out.write("");
|
||||
String first = metadata.getName(metadata.typeCounter.first);
|
||||
String last = metadata.getName(metadata.typeCounter.last);
|
||||
out.write("static const JfrTypeId FIRST_TYPE_ID = " + jfrTypeId(first) + ";");
|
||||
out.write("static const JfrTypeId LAST_TYPE_ID = " + jfrTypeId(last) + ";");
|
||||
out.write("static const JfrTypeId FIRST_TYPE_ID = " + typeCounter.firstTypeName() + ";");
|
||||
out.write("static const JfrTypeId LAST_TYPE_ID = " + typeCounter.lastTypeName() + ";");
|
||||
|
||||
out.write("");
|
||||
out.write("class JfrType : public AllStatic {");
|
||||
out.write(" public:");
|
||||
out.write(" static jlong name_to_id(const char* type_name) {");
|
||||
|
||||
Map<String, XmlType> javaTypes = new LinkedHashMap<>();
|
||||
for (XmlType xmlType : metadata.xmlTypes.values()) {
|
||||
if (!xmlType.javaType.isEmpty()) {
|
||||
javaTypes.put(xmlType.javaType, xmlType);
|
||||
}
|
||||
}
|
||||
for (XmlType xmlType : javaTypes.values()) {
|
||||
for (Entry<String, XmlType> m : javaTypes.entrySet()) {
|
||||
XmlType xmlType = m.getValue();
|
||||
String javaName = xmlType.javaType;
|
||||
String typeName = xmlType.name.toUpperCase();
|
||||
out.write(" if (strcmp(type_name, \"" + javaName + "\") == 0) {");
|
||||
@@ -715,14 +508,11 @@ public class GenerateJfrFiles {
|
||||
out.write("#endif // INCLUDE_JFR");
|
||||
out.write("#endif // JFRFILES_JFRTYPES_HPP");
|
||||
}
|
||||
;
|
||||
}
|
||||
|
||||
private static String jfrTypeId(String name) {
|
||||
return "TYPE_" + name.toUpperCase();
|
||||
}
|
||||
|
||||
private static void printJfrEventClassesHpp(Metadata metadata, File outputFile) throws Exception {
|
||||
try (var out = new Printer(outputFile)) {
|
||||
private static void printJfrEventClassesHpp(Metadata metadata, File outputDirectory) throws Exception {
|
||||
try (Printer out = new Printer(outputDirectory, "jfrEventClasses.hpp")) {
|
||||
out.write("#ifndef JFRFILES_JFREVENTCLASSES_HPP");
|
||||
out.write("#define JFRFILES_JFREVENTCLASSES_HPP");
|
||||
out.write("");
|
||||
@@ -776,7 +566,7 @@ public class GenerateJfrFiles {
|
||||
printType(out, t, empty);
|
||||
out.write("");
|
||||
}
|
||||
for (TypeElement e : metadata.getEvents()) {
|
||||
for (EventElement e : metadata.getEvents()) {
|
||||
printEvent(out, e, empty);
|
||||
out.write("");
|
||||
}
|
||||
@@ -786,83 +576,81 @@ public class GenerateJfrFiles {
|
||||
out.write("struct JfrStruct" + t.name);
|
||||
out.write("{");
|
||||
if (!empty) {
|
||||
out.write(" private:");
|
||||
for (FieldElement f : t.fields) {
|
||||
printField(out, f);
|
||||
}
|
||||
out.write("");
|
||||
out.write(" private:");
|
||||
for (FieldElement f : t.fields) {
|
||||
printField(out, f);
|
||||
}
|
||||
out.write("");
|
||||
}
|
||||
out.write(" public:");
|
||||
for (FieldElement f : t.fields) {
|
||||
printTypeSetter(out, f, empty);
|
||||
printTypeSetter(out, f, empty);
|
||||
}
|
||||
out.write("");
|
||||
if (!empty) {
|
||||
printWriteData(out, t);
|
||||
printWriteData(out, t.fields, null);
|
||||
}
|
||||
out.write("};");
|
||||
out.write("");
|
||||
}
|
||||
|
||||
private static void printEvent(Printer out, TypeElement event, boolean empty) {
|
||||
private static void printEvent(Printer out, EventElement event, boolean empty) {
|
||||
out.write("class Event" + event.name + " : public JfrEvent<Event" + event.name + ">");
|
||||
out.write("{");
|
||||
if (!empty) {
|
||||
out.write(" private:");
|
||||
for (FieldElement f : event.fields) {
|
||||
printField(out, f);
|
||||
}
|
||||
out.write("");
|
||||
out.write(" private:");
|
||||
for (FieldElement f : event.fields) {
|
||||
printField(out, f);
|
||||
}
|
||||
out.write("");
|
||||
}
|
||||
out.write(" public:");
|
||||
if (!empty) {
|
||||
out.write(" static const bool hasThread = " + event.thread + ";");
|
||||
out.write(" static const bool hasStackTrace = " + event.stackTrace + ";");
|
||||
out.write(" static const bool isInstant = " + !event.startTime + ";");
|
||||
out.write(" static const bool hasCutoff = " + event.cutoff + ";");
|
||||
out.write(" static const bool isRequestable = " + !event.period.isEmpty() + ";");
|
||||
out.write(" static const JfrEventId eventId = Jfr" + event.name + "Event;");
|
||||
out.write("");
|
||||
out.write(" static const bool hasThread = " + event.thread + ";");
|
||||
out.write(" static const bool hasStackTrace = " + event.stackTrace + ";");
|
||||
out.write(" static const bool isInstant = " + !event.startTime + ";");
|
||||
out.write(" static const bool hasCutoff = " + event.cutoff + ";");
|
||||
out.write(" static const bool isRequestable = " + event.periodic + ";");
|
||||
out.write(" static const JfrEventId eventId = Jfr" + event.name + "Event;");
|
||||
out.write("");
|
||||
}
|
||||
if (!empty) {
|
||||
out.write(" Event" + event.name + "(EventStartTime timing=TIMED) : JfrEvent<Event" + event.name
|
||||
+ ">(timing) {}");
|
||||
out.write(" Event" + event.name + "(EventStartTime timing=TIMED) : JfrEvent<Event" + event.name + ">(timing) {}");
|
||||
} else {
|
||||
out.write(" Event" + event.name + "(EventStartTime timing=TIMED) {}");
|
||||
out.write(" Event" + event.name + "(EventStartTime timing=TIMED) {}");
|
||||
}
|
||||
out.write("");
|
||||
int index = 0;
|
||||
for (FieldElement f : event.fields) {
|
||||
out.write(" void set_" + f.name + "(" + f.getParameterType() + " " + f.getParameterName() + ") {");
|
||||
if (!empty) {
|
||||
out.write(" this->_" + f.name + " = " + f.getParameterName() + ";");
|
||||
out.write(" DEBUG_ONLY(set_field_bit(" + index++ + "));");
|
||||
out.write(" this->_" + f.name + " = " + f.getParameterName() + ";");
|
||||
out.write(" DEBUG_ONLY(set_field_bit(" + index++ + "));");
|
||||
}
|
||||
out.write(" }");
|
||||
}
|
||||
out.write("");
|
||||
if (!empty) {
|
||||
printWriteData(out, event);
|
||||
out.write("");
|
||||
printWriteData(out, event.fields, event.commitState);
|
||||
out.write("");
|
||||
}
|
||||
out.write(" using JfrEvent<Event" + event.name
|
||||
+ ">::commit; // else commit() is hidden by overloaded versions in this class");
|
||||
out.write(" using JfrEvent<Event" + event.name + ">::commit; // else commit() is hidden by overloaded versions in this class");
|
||||
printConstructor2(out, event, empty);
|
||||
printCommitMethod(out, event, empty);
|
||||
if (!empty) {
|
||||
printVerify(out, event.fields);
|
||||
printVerify(out, event.fields);
|
||||
}
|
||||
out.write("};");
|
||||
}
|
||||
|
||||
private static void printWriteData(Printer out, TypeElement type) {
|
||||
private static void printWriteData(Printer out, List<FieldElement> fields, String commitState) {
|
||||
out.write(" template <typename Writer>");
|
||||
out.write(" void writeData(Writer& w) {");
|
||||
if (("_thread_in_native").equals(type.commitState)) {
|
||||
if (("_thread_in_native").equals(commitState)) {
|
||||
out.write(" // explicit epoch synchronization check");
|
||||
out.write(" JfrEpochSynchronization sync;");
|
||||
}
|
||||
for (FieldElement field : type.fields) {
|
||||
for (FieldElement field : fields) {
|
||||
if (field.struct) {
|
||||
out.write(" _" + field.name + ".writeData(w);");
|
||||
} else {
|
||||
@@ -874,10 +662,9 @@ public class GenerateJfrFiles {
|
||||
|
||||
private static void printTypeSetter(Printer out, FieldElement field, boolean empty) {
|
||||
if (!empty) {
|
||||
out.write(" void set_" + field.name + "(" + field.getParameterType() + " new_value) { this->_" + field.name
|
||||
+ " = new_value; }");
|
||||
out.write(" void set_" + field.name + "(" + field.getParameterType() + " new_value) { this->_" + field.name + " = new_value; }");
|
||||
} else {
|
||||
out.write(" void set_" + field.name + "(" + field.getParameterType() + " new_value) { }");
|
||||
out.write(" void set_" + field.name + "(" + field.getParameterType() + " new_value) { }");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -887,14 +674,13 @@ public class GenerateJfrFiles {
|
||||
out.write(" void verify() const {");
|
||||
int index = 0;
|
||||
for (FieldElement f : fields) {
|
||||
out.write(" assert(verify_field_bit(" + index++
|
||||
+ "), \"Attempting to write an uninitialized event field: %s\", \"_" + f.name + "\");");
|
||||
out.write(" assert(verify_field_bit(" + index++ + "), \"Attempting to write an uninitialized event field: %s\", \"_" + f.name + "\");");
|
||||
}
|
||||
out.write(" }");
|
||||
out.write("#endif");
|
||||
}
|
||||
|
||||
private static void printCommitMethod(Printer out, TypeElement event, boolean empty) {
|
||||
private static void printCommitMethod(Printer out, EventElement event, boolean empty) {
|
||||
if (event.startTime) {
|
||||
StringJoiner sj = new StringJoiner(",\n ");
|
||||
for (FieldElement f : event.fields) {
|
||||
@@ -903,12 +689,12 @@ public class GenerateJfrFiles {
|
||||
out.write("");
|
||||
out.write(" void commit(" + sj.toString() + ") {");
|
||||
if (!empty) {
|
||||
out.write(" if (should_commit()) {");
|
||||
for (FieldElement f : event.fields) {
|
||||
out.write(" set_" + f.name + "(" + f.name + ");");
|
||||
}
|
||||
out.write(" commit();");
|
||||
out.write(" }");
|
||||
out.write(" if (should_commit()) {");
|
||||
for (FieldElement f : event.fields) {
|
||||
out.write(" set_" + f.name + "(" + f.name + ");");
|
||||
}
|
||||
out.write(" commit();");
|
||||
out.write(" }");
|
||||
}
|
||||
out.write(" }");
|
||||
}
|
||||
@@ -929,23 +715,23 @@ public class GenerateJfrFiles {
|
||||
}
|
||||
out.write(" static void commit(" + sj.toString() + ") {");
|
||||
if (!empty) {
|
||||
out.write(" Event" + event.name + " me(UNTIMED);");
|
||||
out.write("");
|
||||
out.write(" if (me.should_commit()) {");
|
||||
if (event.startTime) {
|
||||
out.write(" me.set_starttime(startTicks);");
|
||||
out.write(" me.set_endtime(endTicks);");
|
||||
}
|
||||
for (FieldElement f : event.fields) {
|
||||
out.write(" me.set_" + f.name + "(" + f.name + ");");
|
||||
}
|
||||
out.write(" me.commit();");
|
||||
out.write(" }");
|
||||
out.write(" Event" + event.name + " me(UNTIMED);");
|
||||
out.write("");
|
||||
out.write(" if (me.should_commit()) {");
|
||||
if (event.startTime) {
|
||||
out.write(" me.set_starttime(startTicks);");
|
||||
out.write(" me.set_endtime(endTicks);");
|
||||
}
|
||||
for (FieldElement f : event.fields) {
|
||||
out.write(" me.set_" + f.name + "(" + f.name + ");");
|
||||
}
|
||||
out.write(" me.commit();");
|
||||
out.write(" }");
|
||||
}
|
||||
out.write(" }");
|
||||
}
|
||||
|
||||
private static void printConstructor2(Printer out, TypeElement event, boolean empty) {
|
||||
private static void printConstructor2(Printer out, EventElement event, boolean empty) {
|
||||
if (!event.startTime) {
|
||||
out.write("");
|
||||
out.write("");
|
||||
@@ -958,14 +744,14 @@ public class GenerateJfrFiles {
|
||||
sj.add(f.getParameterType() + " " + f.name);
|
||||
}
|
||||
if (!empty) {
|
||||
out.write(" " + sj.toString() + ") : JfrEvent<Event" + event.name + ">(TIMED) {");
|
||||
out.write(" if (should_commit()) {");
|
||||
for (FieldElement f : event.fields) {
|
||||
out.write(" set_" + f.name + "(" + f.name + ");");
|
||||
}
|
||||
out.write(" }");
|
||||
out.write(" " + sj.toString() + ") : JfrEvent<Event" + event.name + ">(TIMED) {");
|
||||
out.write(" if (should_commit()) {");
|
||||
for (FieldElement f : event.fields) {
|
||||
out.write(" set_" + f.name + "(" + f.name + ");");
|
||||
}
|
||||
out.write(" }");
|
||||
} else {
|
||||
out.write(" " + sj.toString() + ") {");
|
||||
out.write(" " + sj.toString() + ") {");
|
||||
}
|
||||
out.write(" }");
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
void report_error(char const * msg)
|
||||
{
|
||||
LPTSTR lpMsgBuf;
|
||||
LPVOID lpMsgBuf;
|
||||
DWORD dw = GetLastError();
|
||||
|
||||
FormatMessage(
|
||||
|
||||
@@ -90,11 +90,10 @@ $(eval $(call SetupJavaCompilation, BUILD_JDK_MICROBENCHMARK, \
|
||||
TARGET_RELEASE := $(TARGET_RELEASE_NEWJDK_UPGRADED), \
|
||||
SMALL_JAVA := false, \
|
||||
CLASSPATH := $(MICROBENCHMARK_CLASSPATH), \
|
||||
DISABLED_WARNINGS := processing rawtypes cast serial preview, \
|
||||
DISABLED_WARNINGS := processing rawtypes cast serial, \
|
||||
SRC := $(MICROBENCHMARK_SRC), \
|
||||
BIN := $(MICROBENCHMARK_CLASSES), \
|
||||
JAVA_FLAGS := --add-modules jdk.unsupported --limit-modules java.management, \
|
||||
JAVAC_FLAGS := --enable-preview, \
|
||||
))
|
||||
|
||||
$(BUILD_JDK_MICROBENCHMARK): $(JMH_COMPILE_JARS)
|
||||
|
||||
@@ -43,14 +43,12 @@ $(eval $(call SetupJavaCompilation, BUILD_WB_JAR, \
|
||||
|
||||
TARGETS += $(BUILD_WB_JAR)
|
||||
|
||||
# test-lib.jar will contain only hprof classes until JDK-8081381 is resolved
|
||||
$(eval $(call SetupJavaCompilation, BUILD_TEST_LIB_JAR, \
|
||||
TARGET_RELEASE := $(TARGET_RELEASE_NEWJDK_UPGRADED), \
|
||||
SRC := $(TEST_LIB_SOURCE_DIR), \
|
||||
EXCLUDES := jdk/test/lib/containers jdk/test/lib/security, \
|
||||
SRC := $(TEST_LIB_SOURCE_DIR)/jdk/test/lib/hprof, \
|
||||
BIN := $(TEST_LIB_SUPPORT)/test-lib_classes, \
|
||||
HEADERS := $(TEST_LIB_SUPPORT)/test-lib_headers, \
|
||||
JAR := $(TEST_LIB_SUPPORT)/test-lib.jar, \
|
||||
DISABLED_WARNINGS := try deprecation rawtypes unchecked serial cast, \
|
||||
))
|
||||
|
||||
TARGETS += $(BUILD_TEST_LIB_JAR)
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# 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 builds the native component of testlib.
|
||||
# It also covers the test-image part, where the built files are copied to the
|
||||
# test image.
|
||||
################################################################################
|
||||
|
||||
default: all
|
||||
|
||||
include $(SPEC)
|
||||
include MakeBase.gmk
|
||||
include TestFilesCompilation.gmk
|
||||
|
||||
################################################################################
|
||||
# Targets for building the native tests themselves.
|
||||
################################################################################
|
||||
|
||||
BUILD_LIBTEST_NATIVE_SRC := $(TOPDIR)/test/lib
|
||||
|
||||
BUILD_LIBTEST_OUTPUT_DIR := $(OUTPUTDIR)/support/test/lib/native
|
||||
|
||||
BUILD_LIBTEST_IMAGE_DIR := $(TEST_IMAGE_DIR)/lib
|
||||
|
||||
# This evaluation is expensive and should only be done if this target was
|
||||
# explicitly called.
|
||||
ifneq ($(filter build-test-lib-native, $(MAKECMDGOALS)), )
|
||||
$(eval $(call SetupTestFilesCompilation, BUILD_LIBTEST_LIBRARIES, \
|
||||
TYPE := LIBRARY, \
|
||||
SOURCE_DIRS := $(BUILD_LIBTEST_NATIVE_SRC), \
|
||||
OUTPUT_DIR := $(BUILD_LIBTEST_OUTPUT_DIR), \
|
||||
))
|
||||
endif
|
||||
|
||||
build-test-lib-native: $(BUILD_LIBTEST_LIBRARIES)
|
||||
|
||||
################################################################################
|
||||
# Targets for building test-image.
|
||||
################################################################################
|
||||
|
||||
# Copy to testlib test image. We need it in both hotspot and jdk.
|
||||
$(eval $(call SetupCopyFiles, COPY_LIBTEST_NATIVE_TO_HOTSPOT, \
|
||||
SRC := $(BUILD_LIBTEST_OUTPUT_DIR), \
|
||||
DEST := $(TEST_IMAGE_DIR)/hotspot/jtreg/native, \
|
||||
FILES := $(wildcard $(addprefix $(BUILD_LIBTEST_OUTPUT_DIR), /lib/*)), \
|
||||
FLATTEN := true, \
|
||||
))
|
||||
|
||||
$(eval $(call SetupCopyFiles, COPY_LIBTEST_NATIVE_TO_JDK, \
|
||||
SRC := $(BUILD_LIBTEST_OUTPUT_DIR), \
|
||||
DEST := $(TEST_IMAGE_DIR)/jdk/jtreg/native, \
|
||||
FILES := $(wildcard $(addprefix $(BUILD_LIBTEST_OUTPUT_DIR), /lib/*)), \
|
||||
FLATTEN := true, \
|
||||
))
|
||||
|
||||
test-image-lib-native: $(COPY_LIBTEST_NATIVE_TO_HOTSPOT) $(COPY_LIBTEST_NATIVE_TO_JDK)
|
||||
|
||||
all: build-test-lib-native
|
||||
|
||||
.PHONY: default all build-test-lib-native test-image-lib-native
|
||||
@@ -105,7 +105,6 @@ ifeq ($(INCLUDE_GRAAL), true)
|
||||
$(SRC_DIR)/org.graalvm.compiler.nodes.test/src \
|
||||
$(SRC_DIR)/org.graalvm.compiler.options.test/src \
|
||||
$(SRC_DIR)/org.graalvm.compiler.phases.common.test/src \
|
||||
$(SRC_DIR)/org.graalvm.compiler.replacements.jdk10.test/src \
|
||||
$(SRC_DIR)/org.graalvm.compiler.replacements.jdk12.test/src \
|
||||
$(SRC_DIR)/org.graalvm.compiler.replacements.jdk9.test/src \
|
||||
$(SRC_DIR)/org.graalvm.compiler.replacements.test/src \
|
||||
|
||||
@@ -872,8 +872,10 @@ BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exesigtest := -ljvm
|
||||
ifeq ($(call isTargetOs, windows), true)
|
||||
BUILD_HOTSPOT_JTREG_EXECUTABLES_CFLAGS_exeFPRegs := -MT
|
||||
BUILD_HOTSPOT_JTREG_EXCLUDE += exesigtest.c libterminatedThread.c
|
||||
BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exejvm-test-launcher := jvm.lib
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libatExit := jvm.lib
|
||||
else
|
||||
BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exejvm-test-launcher := -ljvm
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libbootclssearch_agent += -lpthread
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libsystemclssearch_agent += -lpthread
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libgetsysprop001 += -lpthread
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# 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 builds the native component of the JTReg tests for testlibrary.
|
||||
# It also covers the test-image part, where the built files are copied to the
|
||||
# test image.
|
||||
################################################################################
|
||||
|
||||
default: all
|
||||
|
||||
include $(SPEC)
|
||||
include MakeBase.gmk
|
||||
include TestFilesCompilation.gmk
|
||||
|
||||
$(eval $(call IncludeCustomExtension, test/JtregNativeLibTest.gmk))
|
||||
|
||||
################################################################################
|
||||
# Targets for building the native tests themselves.
|
||||
################################################################################
|
||||
|
||||
# This might have been added to by a custom extension.
|
||||
BUILD_LIBTEST_JTREG_NATIVE_SRC += $(TOPDIR)/test/lib-test
|
||||
|
||||
BUILD_LIBTEST_JTREG_OUTPUT_DIR := $(OUTPUTDIR)/support/test/lib-test/jtreg/native
|
||||
|
||||
BUILD_LIBTEST_JTREG_IMAGE_DIR := $(TEST_IMAGE_DIR)/lib-test/jtreg
|
||||
|
||||
ifeq ($(call isTargetOs, windows), true)
|
||||
BUILD_LIBTEST_JTREG_EXECUTABLES_LIBS_exejvm-test-launcher := jvm.lib
|
||||
else
|
||||
BUILD_LIBTEST_JTREG_EXECUTABLES_LIBS_exejvm-test-launcher := -ljvm
|
||||
endif
|
||||
|
||||
# This evaluation is expensive and should only be done if this target was
|
||||
# explicitly called.
|
||||
ifneq ($(filter build-test-libtest-jtreg-native, $(MAKECMDGOALS)), )
|
||||
$(eval $(call SetupTestFilesCompilation, BUILD_LIBTEST_JTREG_LIBRARIES, \
|
||||
TYPE := LIBRARY, \
|
||||
SOURCE_DIRS := $(BUILD_LIBTEST_JTREG_NATIVE_SRC), \
|
||||
OUTPUT_DIR := $(BUILD_LIBTEST_JTREG_OUTPUT_DIR), \
|
||||
EXCLUDE := $(BUILD_LIBTEST_JTREG_EXCLUDE), \
|
||||
))
|
||||
|
||||
$(eval $(call SetupTestFilesCompilation, BUILD_LIBTEST_JTREG_EXECUTABLES, \
|
||||
TYPE := PROGRAM, \
|
||||
SOURCE_DIRS := $(BUILD_LIBTEST_JTREG_NATIVE_SRC), \
|
||||
OUTPUT_DIR := $(BUILD_LIBTEST_JTREG_OUTPUT_DIR), \
|
||||
EXCLUDE := $(BUILD_LIBTEST_JTREG_EXCLUDE), \
|
||||
))
|
||||
endif
|
||||
|
||||
build-test-libtest-jtreg-native: $(BUILD_LIBTEST_JTREG_LIBRARIES) $(BUILD_LIBTEST_JTREG_EXECUTABLES)
|
||||
|
||||
################################################################################
|
||||
# Targets for building test-image.
|
||||
################################################################################
|
||||
|
||||
# Copy to lib-test jtreg test image
|
||||
$(eval $(call SetupCopyFiles, COPY_LIBTEST_JTREG_NATIVE, \
|
||||
SRC := $(BUILD_LIBTEST_JTREG_OUTPUT_DIR), \
|
||||
DEST := $(TEST_IMAGE_DIR)/lib-test/jtreg/native, \
|
||||
FILES := $(wildcard $(addprefix $(BUILD_LIBTEST_JTREG_OUTPUT_DIR), /bin/* /lib/*)), \
|
||||
FLATTEN := true, \
|
||||
))
|
||||
|
||||
test-image-libtest-jtreg-native: $(COPY_LIBTEST_JTREG_NATIVE)
|
||||
|
||||
all: build-test-libtest-jtreg-native
|
||||
test-image: test-image-libtest-jtreg-native
|
||||
|
||||
.PHONY: default all build-test-libtest-jtreg-native test-image-libtest-jtreg-native test-image
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2010, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
@@ -388,7 +388,7 @@ OptionPaneDemo.confirmbutton=\u78BA\u8A8D\u30C0\u30A4\u30A2\u30ED\u30B0\u306E\u8
|
||||
OptionPaneDemo.messagebutton=\u30E1\u30C3\u30BB\u30FC\u30B8\u30FB\u30C0\u30A4\u30A2\u30ED\u30B0\u306E\u8868\u793A
|
||||
|
||||
OptionPaneDemo.warningtitle=\u8B66\u544A\u30C0\u30A4\u30A2\u30ED\u30B0\u306E\u4F8B
|
||||
OptionPaneDemo.warningtext=<html><P><font color=black>\u3053\u308C\u306F<font color=red><b>\u7DCA\u6025\u653E\u9001\u30B7\u30B9\u30C6\u30E0</b></font>\u306E\u30C6\u30B9\u30C8\u3067\u3059\u3002<i><b>\u3053\u308C\u306F\u5358\u306A\u308B<br>\u30C6\u30B9\u30C8\u3067\u3059</b></i>\u3002\u30ED\u30FC\u30AB\u30EB\u30FB\u30A4\u30F3\u30C8\u30E9\u30CD\u30C3\u30C8\u306EWeb\u30DE\u30B9\u30BF\u30FC\u304C<br><font color=blue><b>\u9023\u90A6\u653F\u5E9C</b></font>\u304A\u3088\u3073<font color=blue><b>\u5DDE</b></font>\u5F53\u5C40\u3068\u81EA\u4E3B\u7684\u306B\u5354\u529B\u3057\u3001\u7DCA\u6025\u4E8B\u614B\u306E<br>\u767A\u751F\u6642\u306B\u901A\u5831\u3092\u884C\u3046\u305F\u3081\u306B\u3053\u306E\u30B7\u30B9\u30C6\u30E0\u3092\u958B\u767A\u3057\u307E\u3057\u305F\u3002<br>\u5B9F\u969B\u306E\u7DCA\u6025\u6642\u306B\u306F\u3001\u304A\u805E\u304D\u306B\u306A\u3063\u305F\u4FE1\u53F7\u306B\u7D9A\u3044\u3066\u5F53\u5C40\u304B\u3089\u306E<br>\u60C5\u5831\u3001\u30CB\u30E5\u30FC\u30B9\u307E\u305F\u306F\u6307\u793A\u304C\u901A\u77E5\u3055\u308C\u307E\u3059\u3002\u3053\u308C\u3067\u3001<br><font color=red><b>\u7DCA\u6025\u653E\u9001\u30B7\u30B9\u30C6\u30E0</b></font></font>\u306E\u30C6\u30B9\u30C8\u3092<br>\u7D42\u4E86\u3057\u307E\u3059\u3002</P><P><br>\u958B\u767A\u8005\u5411\u3051\u306E\u30CE\u30FC\u30C8: \u3053\u306E\u30C0\u30A4\u30A2\u30ED\u30B0\u306E\u30C7\u30E2\u3067\u306F\u3001\u30C6\u30AD\u30B9\u30C8\u306E\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u306BHTML\u304C\u4F7F\u7528\u3055\u308C\u3066\u3044\u307E\u3059\u3002</P></html>
|
||||
OptionPaneDemo.warningtext=<html><P><font color=black>\u3053\u308C\u306F<font color=red><b>\u7DCA\u6025\u653E\u9001\u30B7\u30B9\u30C6\u30E0</b></font>\u306E\u30C6\u30B9\u30C8\u3067\u3059\u3002<i><b>\u3053\u308C\u306F\u5358\u306A\u308B<br>\u30C6\u30B9\u30C8\u3067\u3059</b></i>\u3002\u30ED\u30FC\u30AB\u30EB\u30FB\u30A4\u30F3\u30C8\u30E9\u30CD\u30C3\u30C8\u306EWeb\u30DE\u30B9\u30BF\u30FC\u304C<br><font color=blue><b>\u9023\u90A6\u653F\u5E9C</b></font>\u304A\u3088\u3073<font color=blue><b>\u5DDE</b></font>\u5F53\u5C40\u3068\u81EA\u4E3B\u7684\u306B\u5354\u529B\u3057\u3001\u7DCA\u6025\u4E8B\u614B\u306E<br>\u767A\u751F\u6642\u306B\u901A\u5831\u3092\u884C\u3046\u305F\u3081\u306B\u3053\u306E\u30B7\u30B9\u30C6\u30E0\u3092\u958B\u767A\u3057\u307E\u3057\u305F\u3002<br>\u5B9F\u969B\u306E\u7DCA\u6025\u6642\u306B\u306F\u3001\u304A\u805E\u304D\u306B\u306A\u3063\u305F\u4FE1\u53F7\u306B\u7D9A\u3044\u3066\u5F53\u5C40\u304B\u3089\u306E<br>\u60C5\u5831\u3001\u30CB\u30E5\u30FC\u30B9\u307E\u305F\u306F\u6307\u793A\u304C\u901A\u77E5\u3055\u308C\u307E\u3059\u3002\u3053\u308C\u3067\u3001<br><font color=red><b>\u7DCA\u6025\u653E\u9001\u30B7\u30B9\u30C6\u30E0</b></font></font>\u306E\u30C6\u30B9\u30C8\u3092<br>\u7D42\u4E86\u3057\u307E\u3059\u3002</P><P><br>\u958B\u767A\u8005\u5411\u3051\u306E\u6CE8\u610F: \u3053\u306E\u30C0\u30A4\u30A2\u30ED\u30B0\u306E\u30C7\u30E2\u3067\u306F\u3001\u30C6\u30AD\u30B9\u30C8\u306E\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u306BHTML\u304C\u4F7F\u7528\u3055\u308C\u3066\u3044\u307E\u3059\u3002</P></html>
|
||||
|
||||
OptionPaneDemo.messagetext=\u74F6\u306B\u5165\u308C\u305F\u30E1\u30C3\u30BB\u30FC\u30B8
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import random
|
||||
|
||||
AARCH64_AS = "as"
|
||||
AARCH64_OBJDUMP = "objdump"
|
||||
AARCH64_OBJCOPY = "objcopy"
|
||||
AARCH64_AS = "<PATH-TO-AS>"
|
||||
AARCH64_OBJDUMP = "<PATH-TO-OBJDUMP>"
|
||||
AARCH64_OBJCOPY = "<PATH-TO-OBJCOPY>"
|
||||
|
||||
class Operand(object):
|
||||
|
||||
@@ -348,7 +348,7 @@ class LogicalImmOp(AddSubImmOp):
|
||||
+ ', #0x%x' % self.immed)
|
||||
|
||||
def cstr(self):
|
||||
return super(AddSubImmOp, self).cstr() + "ll);"
|
||||
return super(AddSubImmOp, self).cstr() + "l);"
|
||||
|
||||
class MultiOp():
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
dnl Copyright (c) 2014, 2020, Red Hat Inc. All rights reserved.
|
||||
dnl Copyright (c) 2014, Red Hat Inc. All rights reserved.
|
||||
dnl DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
dnl
|
||||
dnl This code is free software; you can redistribute it and/or modify it
|
||||
@@ -23,12 +23,12 @@ dnl
|
||||
dnl Process this file with m4 aarch64_ad.m4 to generate the arithmetic
|
||||
dnl and shift patterns patterns used in aarch64.ad.
|
||||
dnl
|
||||
// BEGIN This section of the file is automatically generated. Do not edit --------------
|
||||
dnl
|
||||
define(`ORL2I', `ifelse($1,I,orL2I)')
|
||||
dnl
|
||||
define(`BASE_SHIFT_INSN',
|
||||
`// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
`
|
||||
instruct $2$1_reg_$4_reg(iReg$1NoSp dst,
|
||||
iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
@@ -46,11 +46,9 @@ instruct $2$1_reg_$4_reg(iReg$1NoSp dst,
|
||||
%}
|
||||
|
||||
ins_pipe(ialu_reg_reg_shift);
|
||||
%}
|
||||
')dnl
|
||||
%}')dnl
|
||||
define(`BASE_INVERTED_INSN',
|
||||
`// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
`
|
||||
instruct $2$1_reg_not_reg(iReg$1NoSp dst,
|
||||
iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, imm$1_M1 m1,
|
||||
rFlagsReg cr) %{
|
||||
@@ -70,11 +68,9 @@ dnl into this canonical form.
|
||||
%}
|
||||
|
||||
ins_pipe(ialu_reg_reg);
|
||||
%}
|
||||
')dnl
|
||||
%}')dnl
|
||||
define(`INVERTED_SHIFT_INSN',
|
||||
`// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
`
|
||||
instruct $2$1_reg_$4_not_reg(iReg$1NoSp dst,
|
||||
iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2,
|
||||
immI src3, imm$1_M1 src4, rFlagsReg cr) %{
|
||||
@@ -95,12 +91,9 @@ dnl into this canonical form.
|
||||
%}
|
||||
|
||||
ins_pipe(ialu_reg_reg_shift);
|
||||
%}
|
||||
')dnl
|
||||
%}')dnl
|
||||
define(`NOT_INSN',
|
||||
`// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct reg$1_not_reg(iReg$1NoSp dst,
|
||||
`instruct reg$1_not_reg(iReg$1NoSp dst,
|
||||
iReg$1`'ORL2I($1) src1, imm$1_M1 m1,
|
||||
rFlagsReg cr) %{
|
||||
match(Set dst (Xor$1 src1 m1));
|
||||
@@ -115,8 +108,7 @@ instruct reg$1_not_reg(iReg$1NoSp dst,
|
||||
%}
|
||||
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
')dnl
|
||||
%}')dnl
|
||||
dnl
|
||||
define(`BOTH_SHIFT_INSNS',
|
||||
`BASE_SHIFT_INSN(I, $1, ifelse($2,andr,andw,$2w), $3, $4)
|
||||
@@ -128,7 +120,7 @@ BASE_INVERTED_INSN(L, $1, $2, $3, $4)')dnl
|
||||
dnl
|
||||
define(`BOTH_INVERTED_SHIFT_INSNS',
|
||||
`INVERTED_SHIFT_INSN(I, $1, $2w, $3, $4, ~0, int)
|
||||
INVERTED_SHIFT_INSN(L, $1, $2, $3, $4, ~0l, jlong)')dnl
|
||||
INVERTED_SHIFT_INSN(L, $1, $2, $3, $4, ~0l, long)')dnl
|
||||
dnl
|
||||
define(`ALL_SHIFT_KINDS',
|
||||
`BOTH_SHIFT_INSNS($1, $2, URShift, LSR)
|
||||
@@ -155,10 +147,8 @@ ALL_SHIFT_KINDS(Add, add)
|
||||
ALL_SHIFT_KINDS(Sub, sub)
|
||||
dnl
|
||||
dnl EXTEND mode, rshift_op, src, lshift_count, rshift_count
|
||||
define(`EXTEND', `($2$1 (LShift$1 $3 $4) $5)') dnl
|
||||
define(`BFM_INSN',`// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
|
||||
define(`EXTEND', `($2$1 (LShift$1 $3 $4) $5)')
|
||||
define(`BFM_INSN',`
|
||||
// Shift Left followed by Shift Right.
|
||||
// This idiom is used by the compiler for the i2b bytecode etc.
|
||||
instruct $4$1(iReg$1NoSp dst, iReg$1`'ORL2I($1) src, immI lshift_count, immI rshift_count)
|
||||
@@ -177,8 +167,7 @@ instruct $4$1(iReg$1NoSp dst, iReg$1`'ORL2I($1) src, immI lshift_count, immI rsh
|
||||
%}
|
||||
|
||||
ins_pipe(ialu_reg_shift);
|
||||
%}
|
||||
')
|
||||
%}')
|
||||
BFM_INSN(L, 63, RShift, sbfm)
|
||||
BFM_INSN(I, 31, RShift, sbfmw)
|
||||
BFM_INSN(L, 63, URShift, ubfm)
|
||||
@@ -186,9 +175,7 @@ BFM_INSN(I, 31, URShift, ubfmw)
|
||||
dnl
|
||||
// Bitfield extract with shift & mask
|
||||
define(`BFX_INSN',
|
||||
`// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct $3$1(iReg$1NoSp dst, iReg$1`'ORL2I($1) src, immI rshift, imm$1_bitmask mask)
|
||||
`instruct $3$1(iReg$1NoSp dst, iReg$1`'ORL2I($1) src, immI rshift, imm$1_bitmask mask)
|
||||
%{
|
||||
match(Set dst (And$1 ($2$1 src rshift) mask));
|
||||
// Make sure we are not going to exceed what $3 can do.
|
||||
@@ -198,20 +185,16 @@ instruct $3$1(iReg$1NoSp dst, iReg$1`'ORL2I($1) src, immI rshift, imm$1_bitmask
|
||||
format %{ "$3 $dst, $src, $rshift, $mask" %}
|
||||
ins_encode %{
|
||||
int rshift = $rshift$$constant & $4;
|
||||
intptr_t mask = $mask$$constant;
|
||||
long mask = $mask$$constant;
|
||||
int width = exact_log2$6(mask+1);
|
||||
__ $3(as_Register($dst$$reg),
|
||||
as_Register($src$$reg), rshift, width);
|
||||
%}
|
||||
ins_pipe(ialu_reg_shift);
|
||||
%}
|
||||
')
|
||||
%}')
|
||||
BFX_INSN(I, URShift, ubfxw, 31, int)
|
||||
BFX_INSN(L, URShift, ubfx, 63, long, _long)
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
|
||||
// We can use ubfx when extending an And with a mask when we know mask
|
||||
// is positive. We know that because immI_bitmask guarantees it.
|
||||
instruct ubfxIConvI2L(iRegLNoSp dst, iRegIorL2I src, immI rshift, immI_bitmask mask)
|
||||
@@ -224,7 +207,7 @@ instruct ubfxIConvI2L(iRegLNoSp dst, iRegIorL2I src, immI rshift, immI_bitmask m
|
||||
format %{ "ubfx $dst, $src, $rshift, $mask" %}
|
||||
ins_encode %{
|
||||
int rshift = $rshift$$constant & 31;
|
||||
intptr_t mask = $mask$$constant;
|
||||
long mask = $mask$$constant;
|
||||
int width = exact_log2(mask+1);
|
||||
__ ubfx(as_Register($dst$$reg),
|
||||
as_Register($src$$reg), rshift, width);
|
||||
@@ -232,81 +215,50 @@ instruct ubfxIConvI2L(iRegLNoSp dst, iRegIorL2I src, immI rshift, immI_bitmask m
|
||||
ins_pipe(ialu_reg_shift);
|
||||
%}
|
||||
|
||||
define(`UBFIZ_INSN', `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
|
||||
define(`UBFIZ_INSN',
|
||||
// We can use ubfiz when masking by a positive number and then left shifting the result.
|
||||
// We know that the mask is positive because imm$1_bitmask guarantees it.
|
||||
instruct $3$1$8(iReg$2NoSp dst, iReg$1`'ORL2I($1) src, immI lshift, $7 mask)
|
||||
`instruct $2$1(iReg$1NoSp dst, iReg$1`'ORL2I($1) src, immI lshift, imm$1_bitmask mask)
|
||||
%{
|
||||
ifelse($8,,
|
||||
match(Set dst (LShift$1 (And$1 src mask) lshift));,
|
||||
match(Set dst ($8 (LShift$1 (And$1 src mask) lshift)));)
|
||||
ifelse($8,,
|
||||
predicate(($6(n->in(1)->in(2)->get_$5() + 1) + (n->in(2)->get_int() & $4)) <= ($4 + 1));,
|
||||
predicate(($6(n->in(1)->in(1)->in(2)->get_$5() + 1) + (n->in(1)->in(2)->get_int() & $4)) <= 31);)
|
||||
match(Set dst (LShift$1 (And$1 src mask) lshift));
|
||||
predicate((exact_log2$5(n->in(1)->in(2)->get_$4() + 1) + (n->in(2)->get_int() & $3)) <= ($3 + 1));
|
||||
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "$3 $dst, $src, $lshift, $mask" %}
|
||||
format %{ "$2 $dst, $src, $lshift, $mask" %}
|
||||
ins_encode %{
|
||||
int lshift = $lshift$$constant & $4;
|
||||
intptr_t mask = $mask$$constant;
|
||||
int width = $6(mask+1);
|
||||
__ $3(as_Register($dst$$reg),
|
||||
int lshift = $lshift$$constant & $3;
|
||||
long mask = $mask$$constant;
|
||||
int width = exact_log2$5(mask+1);
|
||||
__ $2(as_Register($dst$$reg),
|
||||
as_Register($src$$reg), lshift, width);
|
||||
%}
|
||||
ins_pipe(ialu_reg_shift);
|
||||
%}
|
||||
')
|
||||
UBFIZ_INSN(I, I, ubfizw, 31, int, exact_log2, immI_bitmask)
|
||||
UBFIZ_INSN(L, L, ubfiz, 63, long, exact_log2_long, immL_bitmask)
|
||||
UBFIZ_INSN(I, L, ubfizw, 31, int, exact_log2, immI_bitmask, ConvI2L)
|
||||
UBFIZ_INSN(L, I, ubfiz, 63, long, exact_log2_long, immL_positive_bitmaskI, ConvL2I)
|
||||
%}')
|
||||
UBFIZ_INSN(I, ubfizw, 31, int)
|
||||
UBFIZ_INSN(L, ubfiz, 63, long, _long)
|
||||
|
||||
define(`BFX1_INSN', `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
|
||||
// If there is a convert $1 to $2 block between and And$1 and a LShift$2, we can also match ubfiz
|
||||
instruct ubfiz$1Conv$3$9(iReg$2NoSp dst, iReg$1`'ORL2I($1) src, immI lshift, $8 mask)
|
||||
// If there is a convert I to L block between and AndI and a LShiftL, we can also match ubfiz
|
||||
instruct ubfizIConvI2L(iRegLNoSp dst, iRegIorL2I src, immI lshift, immI_bitmask mask)
|
||||
%{
|
||||
match(Set dst (LShift$2 (Conv$3 (And$1 src mask)) lshift));
|
||||
predicate(($4(n->in(1)->in(1)->in(2)->$5() + 1) + (n->in(2)->get_int() & $6)) <= $7);
|
||||
match(Set dst (LShiftL (ConvI2L (AndI src mask)) lshift));
|
||||
predicate((exact_log2(n->in(1)->in(1)->in(2)->get_int() + 1) + (n->in(2)->get_int() & 63)) <= (63 + 1));
|
||||
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "ubfiz $dst, $src, $lshift, $mask" %}
|
||||
ins_encode %{
|
||||
int lshift = $lshift$$constant & $6;
|
||||
intptr_t mask = $mask$$constant;
|
||||
int lshift = $lshift$$constant & 63;
|
||||
long mask = $mask$$constant;
|
||||
int width = exact_log2(mask+1);
|
||||
__ ubfiz(as_Register($dst$$reg),
|
||||
as_Register($src$$reg), lshift, width);
|
||||
%}
|
||||
ins_pipe(ialu_reg_shift);
|
||||
%}
|
||||
')dnl
|
||||
BFX1_INSN(I, L, I2L, exact_log2, get_int, 63, (63 + 1), immI_bitmask)
|
||||
BFX1_INSN(L, I, L2I, exact_log2_long, get_long, 31, 31, immL_positive_bitmaskI, x)
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
|
||||
// Can skip int2long conversions after AND with small bitmask
|
||||
instruct ubfizIConvI2LAndI(iRegLNoSp dst, iRegI src, immI_bitmask msk)
|
||||
%{
|
||||
match(Set dst (ConvI2L (AndI src msk)));
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "ubfiz $dst, $src, 0, exact_log2($msk + 1) " %}
|
||||
ins_encode %{
|
||||
__ ubfiz(as_Register($dst$$reg), as_Register($src$$reg), 0, exact_log2($msk$$constant + 1));
|
||||
%}
|
||||
ins_pipe(ialu_reg_shift);
|
||||
%}
|
||||
// Rotations
|
||||
|
||||
|
||||
// Rotations dnl
|
||||
define(`EXTRACT_INSN',`
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct extr$3$1(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, immI lshift, immI rshift, rFlagsReg cr)
|
||||
define(`EXTRACT_INSN',
|
||||
`instruct extr$3$1(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, immI lshift, immI rshift, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst ($3$1 (LShift$1 src1 lshift) (URShift$1 src2 rshift)));
|
||||
predicate(0 == (((n->in(1)->in(2)->get_int() & $2) + (n->in(2)->in(2)->get_int() & $2)) & $2));
|
||||
@@ -325,10 +277,9 @@ EXTRACT_INSN(L, 63, Or, extr)
|
||||
EXTRACT_INSN(I, 31, Or, extrw)
|
||||
EXTRACT_INSN(L, 63, Add, extr)
|
||||
EXTRACT_INSN(I, 31, Add, extrw)
|
||||
define(`ROL_EXPAND', `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
|
||||
define(`ROL_EXPAND', `
|
||||
// $2 expander
|
||||
|
||||
instruct $2$1_rReg(iReg$1NoSp dst, iReg$1 src, iRegI shift, rFlagsReg cr)
|
||||
%{
|
||||
effect(DEF dst, USE src, USE shift);
|
||||
@@ -341,12 +292,10 @@ instruct $2$1_rReg(iReg$1NoSp dst, iReg$1 src, iRegI shift, rFlagsReg cr)
|
||||
rscratch1);
|
||||
%}
|
||||
ins_pipe(ialu_reg_reg_vshift);
|
||||
%}
|
||||
')
|
||||
define(`ROR_EXPAND', `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
|
||||
%}')dnl
|
||||
define(`ROR_EXPAND', `
|
||||
// $2 expander
|
||||
|
||||
instruct $2$1_rReg(iReg$1NoSp dst, iReg$1 src, iRegI shift, rFlagsReg cr)
|
||||
%{
|
||||
effect(DEF dst, USE src, USE shift);
|
||||
@@ -358,10 +307,8 @@ instruct $2$1_rReg(iReg$1NoSp dst, iReg$1 src, iRegI shift, rFlagsReg cr)
|
||||
as_Register($shift$$reg));
|
||||
%}
|
||||
ins_pipe(ialu_reg_reg_vshift);
|
||||
%}
|
||||
')dnl
|
||||
define(ROL_INSN, `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
%}')dnl
|
||||
define(ROL_INSN, `
|
||||
instruct $3$1_rReg_Var_C$2(iReg$1NoSp dst, iReg$1 src, iRegI shift, immI$2 c$2, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (Or$1 (LShift$1 src shift) (URShift$1 src (SubI c$2 shift))));
|
||||
@@ -369,10 +316,8 @@ instruct $3$1_rReg_Var_C$2(iReg$1NoSp dst, iReg$1 src, iRegI shift, immI$2 c$2,
|
||||
expand %{
|
||||
$3$1_rReg(dst, src, shift, cr);
|
||||
%}
|
||||
%}
|
||||
')dnl
|
||||
define(ROR_INSN, `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
%}')dnl
|
||||
define(ROR_INSN, `
|
||||
instruct $3$1_rReg_Var_C$2(iReg$1NoSp dst, iReg$1 src, iRegI shift, immI$2 c$2, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (Or$1 (URShift$1 src shift) (LShift$1 src (SubI c$2 shift))));
|
||||
@@ -380,8 +325,7 @@ instruct $3$1_rReg_Var_C$2(iReg$1NoSp dst, iReg$1 src, iRegI shift, immI$2 c$2,
|
||||
expand %{
|
||||
$3$1_rReg(dst, src, shift, cr);
|
||||
%}
|
||||
%}
|
||||
')dnl
|
||||
%}')dnl
|
||||
ROL_EXPAND(L, rol, rorv)
|
||||
ROL_EXPAND(I, rol, rorvw)
|
||||
ROL_INSN(L, _64, rol)
|
||||
@@ -398,8 +342,6 @@ ROR_INSN(I, 0, ror)
|
||||
// Add/subtract (extended)
|
||||
dnl ADD_SUB_EXTENDED(mode, size, add node, shift node, insn, shift type, wordsize
|
||||
define(`ADD_SUB_CONV', `
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct $3Ext$1(iReg$2NoSp dst, iReg$2`'ORL2I($2) src1, iReg$1`'ORL2I($1) src2, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst ($3$2 src1 (ConvI2L src2)));
|
||||
@@ -412,12 +354,10 @@ instruct $3Ext$1(iReg$2NoSp dst, iReg$2`'ORL2I($2) src1, iReg$1`'ORL2I($1) src2,
|
||||
%}
|
||||
ins_pipe(ialu_reg_reg);
|
||||
%}')dnl
|
||||
ADD_SUB_CONV(I,L,Add,add,sxtw)
|
||||
ADD_SUB_CONV(I,L,Sub,sub,sxtw)
|
||||
ADD_SUB_CONV(I,L,Add,add,sxtw);
|
||||
ADD_SUB_CONV(I,L,Sub,sub,sxtw);
|
||||
dnl
|
||||
define(`ADD_SUB_EXTENDED', `
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct $3Ext$1_$6(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, immI_`'eval($7-$2) lshift, immI_`'eval($7-$2) rshift, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst ($3$1 src1 EXTEND($1, $4, src2, lshift, rshift)));
|
||||
@@ -429,7 +369,7 @@ instruct $3Ext$1_$6(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) sr
|
||||
as_Register($src2$$reg), ext::$6);
|
||||
%}
|
||||
ins_pipe(ialu_reg_reg);
|
||||
%}')dnl
|
||||
%}')
|
||||
ADD_SUB_EXTENDED(I,16,Add,RShift,add,sxth,32)
|
||||
ADD_SUB_EXTENDED(I,8,Add,RShift,add,sxtb,32)
|
||||
ADD_SUB_EXTENDED(I,8,Add,URShift,add,uxtb,32)
|
||||
@@ -439,8 +379,7 @@ ADD_SUB_EXTENDED(L,8,Add,RShift,add,sxtb,64)
|
||||
ADD_SUB_EXTENDED(L,8,Add,URShift,add,uxtb,64)
|
||||
dnl
|
||||
dnl ADD_SUB_ZERO_EXTEND(mode, size, add node, insn, shift type)
|
||||
define(`ADD_SUB_ZERO_EXTEND', `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
define(`ADD_SUB_ZERO_EXTEND', `
|
||||
instruct $3Ext$1_$5_and(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, imm$1_$2 mask, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst ($3$1 src1 (And$1 src2 mask)));
|
||||
@@ -452,8 +391,7 @@ instruct $3Ext$1_$5_and(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1
|
||||
as_Register($src2$$reg), ext::$5);
|
||||
%}
|
||||
ins_pipe(ialu_reg_reg);
|
||||
%}
|
||||
')
|
||||
%}')
|
||||
dnl
|
||||
ADD_SUB_ZERO_EXTEND(I,255,Add,addw,uxtb)
|
||||
ADD_SUB_ZERO_EXTEND(I,65535,Add,addw,uxth)
|
||||
@@ -468,8 +406,7 @@ ADD_SUB_ZERO_EXTEND(L,65535,Sub,sub,uxth)
|
||||
ADD_SUB_ZERO_EXTEND(L,4294967295,Sub,sub,uxtw)
|
||||
dnl
|
||||
dnl ADD_SUB_ZERO_EXTEND_SHIFT(mode, size, add node, insn, ext type)
|
||||
define(`ADD_SUB_EXTENDED_SHIFT', `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
define(`ADD_SUB_EXTENDED_SHIFT', `
|
||||
instruct $3Ext$1_$6_shift(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, immIExt lshift2, immI_`'eval($7-$2) lshift1, immI_`'eval($7-$2) rshift1, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst ($3$1 src1 (LShift$1 EXTEND($1, $4, src2, lshift1, rshift1) lshift2)));
|
||||
@@ -481,8 +418,7 @@ instruct $3Ext$1_$6_shift(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I(
|
||||
as_Register($src2$$reg), ext::$6, ($lshift2$$constant));
|
||||
%}
|
||||
ins_pipe(ialu_reg_reg_shift);
|
||||
%}
|
||||
')
|
||||
%}')
|
||||
dnl $1 $2 $3 $4 $5 $6 $7
|
||||
ADD_SUB_EXTENDED_SHIFT(L,8,Add,RShift,add,sxtb,64)
|
||||
ADD_SUB_EXTENDED_SHIFT(L,16,Add,RShift,add,sxth,64)
|
||||
@@ -499,8 +435,7 @@ ADD_SUB_EXTENDED_SHIFT(I,8,Sub,RShift,subw,sxtb,32)
|
||||
ADD_SUB_EXTENDED_SHIFT(I,16,Sub,RShift,subw,sxth,32)
|
||||
dnl
|
||||
dnl ADD_SUB_CONV_SHIFT(mode, add node, insn, ext type)
|
||||
define(`ADD_SUB_CONV_SHIFT', `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
define(`ADD_SUB_CONV_SHIFT', `
|
||||
instruct $2ExtI_shift(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iRegIorL2I src2, immIExt lshift, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst ($2$1 src1 (LShiftL (ConvI2L src2) lshift)));
|
||||
@@ -512,14 +447,13 @@ instruct $2ExtI_shift(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iRegIorL2I src2, i
|
||||
as_Register($src2$$reg), ext::$4, ($lshift$$constant));
|
||||
%}
|
||||
ins_pipe(ialu_reg_reg_shift);
|
||||
%}
|
||||
')dnl
|
||||
ADD_SUB_CONV_SHIFT(L,Add,add,sxtw)
|
||||
ADD_SUB_CONV_SHIFT(L,Sub,sub,sxtw)
|
||||
%}')
|
||||
dnl
|
||||
ADD_SUB_CONV_SHIFT(L,Add,add,sxtw);
|
||||
ADD_SUB_CONV_SHIFT(L,Sub,sub,sxtw);
|
||||
dnl
|
||||
dnl ADD_SUB_ZERO_EXTEND(mode, size, add node, insn, ext type)
|
||||
define(`ADD_SUB_ZERO_EXTEND_SHIFT', `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
define(`ADD_SUB_ZERO_EXTEND_SHIFT', `
|
||||
instruct $3Ext$1_$5_and_shift(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, imm$1_$2 mask, immIExt lshift, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst ($3$1 src1 (LShift$1 (And$1 src2 mask) lshift)));
|
||||
@@ -531,8 +465,8 @@ instruct $3Ext$1_$5_and_shift(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'OR
|
||||
as_Register($src2$$reg), ext::$5, ($lshift$$constant));
|
||||
%}
|
||||
ins_pipe(ialu_reg_reg_shift);
|
||||
%}
|
||||
')dnl
|
||||
%}')
|
||||
dnl
|
||||
dnl $1 $2 $3 $4 $5
|
||||
ADD_SUB_ZERO_EXTEND_SHIFT(L,255,Add,add,uxtb)
|
||||
ADD_SUB_ZERO_EXTEND_SHIFT(L,65535,Add,add,uxth)
|
||||
@@ -548,4 +482,4 @@ dnl
|
||||
ADD_SUB_ZERO_EXTEND_SHIFT(I,255,Sub,subw,uxtb)
|
||||
ADD_SUB_ZERO_EXTEND_SHIFT(I,65535,Sub,subw,uxth)
|
||||
dnl
|
||||
|
||||
// END This section of the file is automatically generated. Do not edit --------------
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user