From 500e8cc5d9b1e8cd1fd7e77b3418f13f11f0effe Mon Sep 17 00:00:00 2001 From: Uwe Schindler <uwe@thetaphi.de> Date: Sat, 24 Sep 2022 01:31:44 +0200 Subject: [PATCH] Update to ASM 9.3 to support Java 19 bytecode; use fork=true for all java tasks (security manager). This closes #204 (#205) --- build.xml | 6 +- ivy.xml | 4 +- src/main/docs/bundled-signatures.html | 6 +- .../de/thetaphi/forbiddenapis/AsmUtils.java | 2 +- .../signatures/jdk-deprecated-19.txt | 645 ++++++++++++++++++ .../signatures/jdk-internal-19.txt | 10 + .../signatures/jdk-unsafe-19.txt | 19 + 7 files changed, 684 insertions(+), 8 deletions(-) create mode 100644 src/main/resources/de/thetaphi/forbiddenapis/signatures/jdk-deprecated-19.txt create mode 100644 src/main/resources/de/thetaphi/forbiddenapis/signatures/jdk-internal-19.txt create mode 100644 src/main/resources/de/thetaphi/forbiddenapis/signatures/jdk-unsafe-19.txt diff --git a/build.xml b/build.xml index c4af7a2..769cc08 100644 --- a/build.xml +++ b/build.xml @@ -66,6 +66,7 @@ <equals arg1="${-cleaned.specification.version}" arg2="16"/> <equals arg1="${-cleaned.specification.version}" arg2="17"/> <equals arg1="${-cleaned.specification.version}" arg2="18"/> + <equals arg1="${-cleaned.specification.version}" arg2="19"/> </or> </condition> @@ -163,6 +164,7 @@ <equals arg1="${build.java.runtime}" arg2="16"/> <equals arg1="${build.java.runtime}" arg2="17"/> <equals arg1="${build.java.runtime}" arg2="18"/> + <equals arg1="${build.java.runtime}" arg2="19"/> </or> </condition> @@ -354,7 +356,7 @@ <target name="-get-cli-help" depends="compile" unless="cli-help"> <local name="-cli-help"/> <java classname="${cli-classname}" classpathref="path.main-run" - failonerror="true" fork="false" outputproperty="-cli-help"> + failonerror="true" fork="true" outputproperty="-cli-help"> <arg value="--help"/> </java> <!-- fix the line endings & command line (cannot be done in java task directly! --> @@ -690,7 +692,7 @@ <target name="generate-internal" depends="compile-tools" description="Generates internal API signature lists for current JDK"> <mkdir dir="${signatures.dir}"/> <property name="internal.output.file" location="${signatures.dir}/jdk-internal-${build.java.runtime}.txt"/> - <java classpathref="path.tools-run" classname="de.thetaphi.forbiddenapis.InternalApiGen" fork="false"> + <java classpathref="path.tools-run" classname="de.thetaphi.forbiddenapis.InternalApiGen" fork="true"> <arg value="${build.java.runtime}"/> <arg file="${internal.output.file}"/> </java> diff --git a/ivy.xml b/ivy.xml index f2fcade..734c117 100644 --- a/ivy.xml +++ b/ivy.xml @@ -17,7 +17,7 @@ <!DOCTYPE ivy-module [ <!ENTITY maven.version "2.0"> <!ENTITY gradle.version "3.4"> - <!ENTITY asm.version "9.2"> + <!ENTITY asm.version "9.3"> <!ENTITY jarjar.asm.version "5.2"> ]> <ivy-module version="2.0"> @@ -52,7 +52,7 @@ --> <dependency org="org.codehaus.plexus" name="plexus-utils" rev="1.1" conf="build,bundle"/> <dependency org="commons-cli" name="commons-cli" rev="1.3.1" conf="build,bundle"/> - <dependency org="org.apache.ant" name="ant-antunit" rev="1.3" conf="test"/> + <dependency org="org.apache.ant" name="ant-antunit" rev="1.4.1" conf="test"/> <dependency org="ant-contrib" name="ant-contrib" rev="1.0b3" conf="test"/> <dependency org="junit" name="junit" rev="4.12" conf="test"/> <dependency org="org.hamcrest" name="hamcrest-core" rev="1.3" conf="test"/> diff --git a/src/main/docs/bundled-signatures.html b/src/main/docs/bundled-signatures.html index b7a9a3c..64e2fc7 100644 --- a/src/main/docs/bundled-signatures.html +++ b/src/main/docs/bundled-signatures.html @@ -29,14 +29,14 @@ <h1>Bundled Signatures Documentation</h1> <li><strong><tt>jdk-unsafe-*</tt>:</strong> Signatures of "unsafe" methods that use default charset, default locale, or default timezone. For server applications it is very stupid to call those methods, as the results will definitely not what the user wants -(for Java <tt>*</tt> = 1.7, 1.8, 9,..., 18; Ant / Maven / Gradle automatically add the compile Java version).</li> +(for Java <tt>*</tt> = 1.7, 1.8, 9,..., 19; Ant / Maven / Gradle automatically add the compile Java version).</li> <li><strong><tt>jdk-deprecated-*</tt>:</strong> This disallows all deprecated -methods from the JDK (for Java <tt>*</tt> = 1.7, 1.8, 9,..., 18; Ant / Maven / Gradle automatically add the compile Java version).</li> +methods from the JDK (for Java <tt>*</tt> = 1.7, 1.8, 9,..., 19; Ant / Maven / Gradle automatically add the compile Java version).</li> <li><strong><tt>jdk-internal-*</tt>:</strong> Lists all internal packages of the JDK as of <code>Security.getProperty("package.access")</code>. Calling those methods will always trigger security manager and is completely forbidden from Java 9 on -(for Java <tt>*</tt> = 1.7, 1.8, 9,..., 18; Ant / Maven / Gradle automatically add the compile Java version, <em>since forbiddenapis v2.1</em>).</li> +(for Java <tt>*</tt> = 1.7, 1.8, 9,..., 19; Ant / Maven / Gradle automatically add the compile Java version, <em>since forbiddenapis v2.1</em>).</li> <li><strong><tt>jdk-non-portable</tt>:</strong> Signatures of all non-portable (like <code>com.sun.management.HotSpotDiagnosticMXBean</code>) or internal runtime APIs (like <code>sun.misc.Unsafe</code>). This is a superset of <tt>jdk-internal</tt>.<br> diff --git a/src/main/java/de/thetaphi/forbiddenapis/AsmUtils.java b/src/main/java/de/thetaphi/forbiddenapis/AsmUtils.java index f402d09..6411cf9 100644 --- a/src/main/java/de/thetaphi/forbiddenapis/AsmUtils.java +++ b/src/main/java/de/thetaphi/forbiddenapis/AsmUtils.java @@ -179,7 +179,7 @@ private static byte[] readStream(final InputStream in) throws IOException { @SuppressWarnings("unused") public static ClassReader readAndPatchClass(InputStream in) throws IOException { final byte[] bytecode = readStream(in); - if (false) patchClassMajorVersion(bytecode, Opcodes.V17 + 1, Opcodes.V17); + if (false) patchClassMajorVersion(bytecode, Opcodes.V19 + 1, Opcodes.V19); return new ClassReader(bytecode); } diff --git a/src/main/resources/de/thetaphi/forbiddenapis/signatures/jdk-deprecated-19.txt b/src/main/resources/de/thetaphi/forbiddenapis/signatures/jdk-deprecated-19.txt new file mode 100644 index 0000000..6560162 --- /dev/null +++ b/src/main/resources/de/thetaphi/forbiddenapis/signatures/jdk-deprecated-19.txt @@ -0,0 +1,645 @@ +# This file contains API signatures extracted from the rt.jar / jimage file shipped with the class library of Oracle's Java Runtime Environment. +# It is provided here for reference, but can easily regenerated by executing from the source folder of forbidden-apis: +# $ ant generate-deprecated + +# This file contains all public, deprecated API signatures in Java version 19 (extracted from build 19). + +@ignoreUnresolvable +@defaultMessage Deprecated in Java 19 + +java.applet.Applet +java.applet.AppletContext +java.applet.AppletStub +java.applet.AudioClip +java.awt.AWTEvent#<init>(java.awt.Event) +java.awt.AWTKeyStroke#registerSubclass(java.lang.Class) +java.awt.BorderLayout#addLayoutComponent(java.lang.String,java.awt.Component) +java.awt.CardLayout#addLayoutComponent(java.lang.String,java.awt.Component) +java.awt.CheckboxGroup#getCurrent() +java.awt.CheckboxGroup#setCurrent(java.awt.Checkbox) +java.awt.Choice#countItems() +java.awt.Component#action(java.awt.Event,java.lang.Object) +java.awt.Component#bounds() +java.awt.Component#deliverEvent(java.awt.Event) +java.awt.Component#disable() +java.awt.Component#enable() +java.awt.Component#enable(boolean) +java.awt.Component#gotFocus(java.awt.Event,java.lang.Object) +java.awt.Component#handleEvent(java.awt.Event) +java.awt.Component#hide() +java.awt.Component#inside(int,int) +java.awt.Component#isFocusTraversable() +java.awt.Component#keyDown(java.awt.Event,int) +java.awt.Component#keyUp(java.awt.Event,int) +java.awt.Component#layout() +java.awt.Component#locate(int,int) +java.awt.Component#location() +java.awt.Component#lostFocus(java.awt.Event,java.lang.Object) +java.awt.Component#minimumSize() +java.awt.Component#mouseDown(java.awt.Event,int,int) +java.awt.Component#mouseDrag(java.awt.Event,int,int) +java.awt.Component#mouseEnter(java.awt.Event,int,int) +java.awt.Component#mouseExit(java.awt.Event,int,int) +java.awt.Component#mouseMove(java.awt.Event,int,int) +java.awt.Component#mouseUp(java.awt.Event,int,int) +java.awt.Component#move(int,int) +java.awt.Component#nextFocus() +java.awt.Component#postEvent(java.awt.Event) +java.awt.Component#preferredSize() +java.awt.Component#reshape(int,int,int,int) +java.awt.Component#resize(int,int) +java.awt.Component#resize(java.awt.Dimension) +java.awt.Component#show() +java.awt.Component#show(boolean) +java.awt.Component#size() +java.awt.ComponentOrientation#getOrientation(java.util.ResourceBundle) +java.awt.Container#countComponents() +java.awt.Container#deliverEvent(java.awt.Event) +java.awt.Container#insets() +java.awt.Container#layout() +java.awt.Container#locate(int,int) +java.awt.Container#minimumSize() +java.awt.Container#preferredSize() +java.awt.Cursor#predefined +java.awt.Dialog#hide() +java.awt.Dialog#show() +java.awt.Event +java.awt.FontMetrics#getMaxDecent() +java.awt.Frame#CROSSHAIR_CURSOR +java.awt.Frame#DEFAULT_CURSOR +java.awt.Frame#E_RESIZE_CURSOR +java.awt.Frame#HAND_CURSOR +java.awt.Frame#MOVE_CURSOR +java.awt.Frame#NE_RESIZE_CURSOR +java.awt.Frame#NW_RESIZE_CURSOR +java.awt.Frame#N_RESIZE_CURSOR +java.awt.Frame#SE_RESIZE_CURSOR +java.awt.Frame#SW_RESIZE_CURSOR +java.awt.Frame#S_RESIZE_CURSOR +java.awt.Frame#TEXT_CURSOR +java.awt.Frame#WAIT_CURSOR +java.awt.Frame#W_RESIZE_CURSOR +java.awt.Frame#getCursorType() +java.awt.Frame#setCursor(int) +java.awt.Graphics#finalize() +java.awt.Graphics#getClipRect() +java.awt.List#addItem(java.lang.String) +java.awt.List#addItem(java.lang.String,int) +java.awt.List#allowsMultipleSelections() +java.awt.List#clear() +java.awt.List#countItems() +java.awt.List#delItem(int) +java.awt.List#delItems(int,int) +java.awt.List#isSelected(int) +java.awt.List#minimumSize() +java.awt.List#minimumSize(int) +java.awt.List#preferredSize() +java.awt.List#preferredSize(int) +java.awt.List#setMultipleSelections(boolean) +java.awt.Menu#countItems() +java.awt.MenuBar#countMenus() +java.awt.MenuComponent#postEvent(java.awt.Event) +java.awt.MenuContainer#postEvent(java.awt.Event) +java.awt.MenuItem#disable() +java.awt.MenuItem#enable() +java.awt.MenuItem#enable(boolean) +java.awt.Polygon#getBoundingBox() +java.awt.Polygon#inside(int,int) +java.awt.PrintJob#finalize() +java.awt.Rectangle#inside(int,int) +java.awt.Rectangle#move(int,int) +java.awt.Rectangle#reshape(int,int,int,int) +java.awt.Rectangle#resize(int,int) +java.awt.ScrollPane#layout() +java.awt.Scrollbar#getLineIncrement() +java.awt.Scrollbar#getPageIncrement() +java.awt.Scrollbar#getVisible() +java.awt.Scrollbar#setLineIncrement(int) +java.awt.Scrollbar#setPageIncrement(int) +java.awt.TextArea#appendText(java.lang.String) +java.awt.TextArea#insertText(java.lang.String,int) +java.awt.TextArea#minimumSize() +java.awt.TextArea#minimumSize(int,int) +java.awt.TextArea#preferredSize() +java.awt.TextArea#preferredSize(int,int) +java.awt.TextArea#replaceText(java.lang.String,int,int) +java.awt.TextField#minimumSize() +java.awt.TextField#minimumSize(int) +java.awt.TextField#preferredSize() +java.awt.TextField#preferredSize(int) +java.awt.TextField#setEchoCharacter(char) +java.awt.Toolkit#getFontList() +java.awt.Toolkit#getFontMetrics(java.awt.Font) +java.awt.Toolkit#getMenuShortcutKeyMask() +java.awt.Window#applyResourceBundle(java.lang.String) +java.awt.Window#applyResourceBundle(java.util.ResourceBundle) +java.awt.Window#hide() +java.awt.Window#postEvent(java.awt.Event) +java.awt.Window#reshape(int,int,int,int) +java.awt.Window#show() +java.awt.datatransfer.DataFlavor#equals(java.lang.String) +java.awt.datatransfer.DataFlavor#normalizeMimeType(java.lang.String) +java.awt.datatransfer.DataFlavor#normalizeMimeTypeParameter(java.lang.String,java.lang.String) +java.awt.datatransfer.DataFlavor#plainTextFlavor +java.awt.event.InputEvent#ALT_GRAPH_MASK +java.awt.event.InputEvent#ALT_MASK +java.awt.event.InputEvent#BUTTON1_MASK +java.awt.event.InputEvent#BUTTON2_MASK +java.awt.event.InputEvent#BUTTON3_MASK +java.awt.event.InputEvent#CTRL_MASK +java.awt.event.InputEvent#META_MASK +java.awt.event.InputEvent#SHIFT_MASK +java.awt.event.InputEvent#getModifiers() +java.awt.event.KeyEvent#<init>(java.awt.Component,int,long,int,int) +java.awt.event.KeyEvent#getKeyModifiersText(int) +java.awt.event.KeyEvent#setModifiers(int) +java.awt.image.renderable.RenderContext#concetenateTransform(java.awt.geom.AffineTransform) +java.awt.image.renderable.RenderContext#preConcetenateTransform(java.awt.geom.AffineTransform) +java.beans.AppletInitializer +java.beans.Beans#instantiate(java.lang.ClassLoader,java.lang.String,java.beans.beancontext.BeanContext,java.beans.AppletInitializer) +java.io.ByteArrayOutputStream#toString(int) +java.io.DataInputStream#readLine() +java.io.File#toURL() +java.io.LineNumberInputStream +java.io.ObjectInputStream#readLine() +java.io.ObjectOutputStream$PutField#write(java.io.ObjectOutput) +java.io.StreamTokenizer#<init>(java.io.InputStream) +java.io.StringBufferInputStream +java.io.WriteAbortedException#detail +java.lang.Boolean#<init>(boolean) +java.lang.Boolean#<init>(java.lang.String) +java.lang.Byte#<init>(byte) +java.lang.Byte#<init>(java.lang.String) +java.lang.Character#<init>(char) +java.lang.Character#isJavaLetter(char) +java.lang.Character#isJavaLetterOrDigit(char) +java.lang.Character#isSpace(char) +java.lang.Character$UnicodeBlock#SURROGATES_AREA +java.lang.Class#newInstance() +java.lang.ClassLoader#defineClass(byte[],int,int) +java.lang.ClassLoader#getPackage(java.lang.String) +java.lang.Compiler +java.lang.Double#<init>(double) +java.lang.Double#<init>(java.lang.String) +java.lang.Enum#finalize() +java.lang.Float#<init>(double) +java.lang.Float#<init>(float) +java.lang.Float#<init>(java.lang.String) +java.lang.Integer#<init>(int) +java.lang.Integer#<init>(java.lang.String) +java.lang.Long#<init>(java.lang.String) +java.lang.Long#<init>(long) +java.lang.Object#finalize() +java.lang.Package#getPackage(java.lang.String) +java.lang.Runtime#exec(java.lang.String) +java.lang.Runtime#exec(java.lang.String,java.lang.String[]) +java.lang.Runtime#exec(java.lang.String,java.lang.String[],java.io.File) +java.lang.Runtime#runFinalization() +java.lang.Runtime$Version#major() +java.lang.Runtime$Version#minor() +java.lang.Runtime$Version#security() +java.lang.SecurityManager +java.lang.Short#<init>(java.lang.String) +java.lang.Short#<init>(short) +java.lang.String#<init>(byte[],int) +java.lang.String#<init>(byte[],int,int,int) +java.lang.String#getBytes(int,int,byte[],int) +java.lang.System#getSecurityManager() +java.lang.System#runFinalization() +java.lang.System#setSecurityManager(java.lang.SecurityManager) +java.lang.Thread#checkAccess() +java.lang.Thread#countStackFrames() +java.lang.Thread#getId() +java.lang.Thread#resume() +java.lang.Thread#stop() +java.lang.Thread#suspend() +java.lang.ThreadGroup#allowThreadSuspension(boolean) +java.lang.ThreadGroup#checkAccess() +java.lang.ThreadGroup#destroy() +java.lang.ThreadGroup#isDaemon() +java.lang.ThreadGroup#isDestroyed() +java.lang.ThreadGroup#resume() +java.lang.ThreadGroup#setDaemon(boolean) +java.lang.ThreadGroup#stop() +java.lang.ThreadGroup#suspend() +java.lang.invoke.MethodHandles$Lookup#hasPrivateAccess() +java.lang.management.MemoryMXBean#getObjectPendingFinalizationCount() +java.lang.ref.Reference#isEnqueued() +java.lang.reflect.AccessibleObject#<init>() +java.lang.reflect.AccessibleObject#isAccessible() +java.lang.reflect.Proxy#getProxyClass(java.lang.ClassLoader,java.lang.Class[]) +java.math.BigDecimal#ROUND_CEILING +java.math.BigDecimal#ROUND_DOWN +java.math.BigDecimal#ROUND_FLOOR +java.math.BigDecimal#ROUND_HALF_DOWN +java.math.BigDecimal#ROUND_HALF_EVEN +java.math.BigDecimal#ROUND_HALF_UP +java.math.BigDecimal#ROUND_UNNECESSARY +java.math.BigDecimal#ROUND_UP +java.math.BigDecimal#divide(java.math.BigDecimal,int) +java.math.BigDecimal#divide(java.math.BigDecimal,int,int) +java.math.BigDecimal#setScale(int,int) +java.net.DatagramSocket#setDatagramSocketImplFactory(java.net.DatagramSocketImplFactory) +java.net.DatagramSocketImpl#getTTL() +java.net.DatagramSocketImpl#setTTL(byte) +java.net.HttpURLConnection#HTTP_SERVER_ERROR +java.net.MulticastSocket#getInterface() +java.net.MulticastSocket#getLoopbackMode() +java.net.MulticastSocket#getTTL() +java.net.MulticastSocket#joinGroup(java.net.InetAddress) +java.net.MulticastSocket#leaveGroup(java.net.InetAddress) +java.net.MulticastSocket#send(java.net.DatagramPacket,byte) +java.net.MulticastSocket#setInterface(java.net.InetAddress) +java.net.MulticastSocket#setLoopbackMode(boolean) +java.net.MulticastSocket#setTTL(byte) +java.net.ServerSocket#setSocketFactory(java.net.SocketImplFactory) +java.net.Socket#<init>(java.lang.String,int,boolean) +java.net.Socket#<init>(java.net.InetAddress,int,boolean) +java.net.Socket#setSocketImplFactory(java.net.SocketImplFactory) +java.net.URLConnection#getDefaultRequestProperty(java.lang.String) +java.net.URLConnection#setDefaultRequestProperty(java.lang.String,java.lang.String) +java.net.URLDecoder#decode(java.lang.String) +java.net.URLEncoder#encode(java.lang.String) +java.net.URLStreamHandler#setURL(java.net.URL,java.lang.String,java.lang.String,int,java.lang.String,java.lang.String) +java.rmi.RMISecurityException +java.rmi.RMISecurityManager +java.rmi.ServerRuntimeException +java.rmi.dgc.VMID#isUnique() +java.rmi.registry.RegistryHandler +java.rmi.server.LoaderHandler +java.rmi.server.LogStream +java.rmi.server.Operation +java.rmi.server.RMIClassLoader#getSecurityContext(java.lang.ClassLoader) +java.rmi.server.RMIClassLoader#loadClass(java.lang.String) +java.rmi.server.RemoteCall +java.rmi.server.RemoteRef#done(java.rmi.server.RemoteCall) +java.rmi.server.RemoteRef#invoke(java.rmi.server.RemoteCall) +java.rmi.server.RemoteRef#newCall(java.rmi.server.RemoteObject,java.rmi.server.Operation[],int,long) +java.rmi.server.RemoteRef#serialVersionUID +java.rmi.server.RemoteStub +java.rmi.server.ServerRef +java.rmi.server.Skeleton +java.rmi.server.SkeletonMismatchException +java.rmi.server.SkeletonNotFoundException +java.rmi.server.SocketSecurityException +java.rmi.server.UnicastRemoteObject#exportObject(java.rmi.Remote) +java.security.AccessControlContext +java.security.AccessControlException +java.security.AccessController +java.security.AuthProvider#<init>(java.lang.String,double,java.lang.String) +java.security.Certificate +java.security.DomainCombiner +java.security.Identity +java.security.IdentityScope +java.security.Key#serialVersionUID +java.security.Policy +java.security.Policy$Parameters +java.security.PolicySpi +java.security.PrivateKey#serialVersionUID +java.security.Provider#<init>(java.lang.String,double,java.lang.String) +java.security.Provider#getVersion() +java.security.PublicKey#serialVersionUID +java.security.Security#getAlgorithmProperty(java.lang.String,java.lang.String) +java.security.Signature#getParameter(java.lang.String) +java.security.Signature#setParameter(java.lang.String,java.lang.Object) +java.security.SignatureSpi#engineGetParameter(java.lang.String) +java.security.SignatureSpi#engineSetParameter(java.lang.String,java.lang.Object) +java.security.Signer +java.security.cert.X509CRL#getIssuerDN() +java.security.cert.X509CRLSelector#addIssuerName(java.lang.String) +java.security.cert.X509CertSelector#getIssuerAsString() +java.security.cert.X509CertSelector#getSubjectAsString() +java.security.cert.X509CertSelector#setIssuer(java.lang.String) +java.security.cert.X509CertSelector#setSubject(java.lang.String) +java.security.cert.X509Certificate#getIssuerDN() +java.security.cert.X509Certificate#getSubjectDN() +java.security.interfaces.DSAPrivateKey#serialVersionUID +java.security.interfaces.DSAPublicKey#serialVersionUID +java.security.interfaces.ECPrivateKey#serialVersionUID +java.security.interfaces.ECPublicKey#serialVersionUID +java.security.interfaces.RSAMultiPrimePrivateCrtKey#serialVersionUID +java.security.interfaces.RSAPrivateCrtKey#serialVersionUID +java.security.interfaces.RSAPrivateKey#serialVersionUID +java.security.interfaces.RSAPublicKey#serialVersionUID +java.security.spec.PSSParameterSpec#<init>(int) +java.security.spec.PSSParameterSpec#DEFAULT +java.sql.CallableStatement#getBigDecimal(int,int) +java.sql.Date#<init>(int,int,int) +java.sql.Date#getHours() +java.sql.Date#getMinutes() +java.sql.Date#getSeconds() +java.sql.Date#setHours(int) +java.sql.Date#setMinutes(int) +java.sql.Date#setSeconds(int) +java.sql.DriverManager#getLogStream() +java.sql.DriverManager#setLogStream(java.io.PrintStream) +java.sql.PreparedStatement#setUnicodeStream(int,java.io.InputStream,int) +java.sql.ResultSet#getBigDecimal(int,int) +java.sql.ResultSet#getBigDecimal(java.lang.String,int) +java.sql.ResultSet#getUnicodeStream(int) +java.sql.ResultSet#getUnicodeStream(java.lang.String) +java.sql.Time#<init>(int,int,int) +java.sql.Time#getDate() +java.sql.Time#getDay() +java.sql.Time#getMonth() +java.sql.Time#getYear() +java.sql.Time#setDate(int) +java.sql.Time#setMonth(int) +java.sql.Time#setYear(int) +java.sql.Timestamp#<init>(int,int,int,int,int,int,int) +java.util.Date#<init>(int,int,int) +java.util.Date#<init>(int,int,int,int,int) +java.util.Date#<init>(int,int,int,int,int,int) +java.util.Date#<init>(java.lang.String) +java.util.Date#UTC(int,int,int,int,int,int) +java.util.Date#getDate() +java.util.Date#getDay() +java.util.Date#getHours() +java.util.Date#getMinutes() +java.util.Date#getMonth() +java.util.Date#getSeconds() +java.util.Date#getTimezoneOffset() +java.util.Date#getYear() +java.util.Date#parse(java.lang.String) +java.util.Date#setDate(int) +java.util.Date#setHours(int) +java.util.Date#setMinutes(int) +java.util.Date#setMonth(int) +java.util.Date#setSeconds(int) +java.util.Date#setYear(int) +java.util.Date#toGMTString() +java.util.Date#toLocaleString() +java.util.Locale#<init>(java.lang.String) +java.util.Locale#<init>(java.lang.String,java.lang.String) +java.util.Locale#<init>(java.lang.String,java.lang.String,java.lang.String) +java.util.Observable +java.util.Observer +java.util.Properties#save(java.io.OutputStream,java.lang.String) +java.util.concurrent.Executors#privilegedCallable(java.util.concurrent.Callable) +java.util.concurrent.Executors#privilegedCallableUsingCurrentClassLoader(java.util.concurrent.Callable) +java.util.concurrent.Executors#privilegedThreadFactory() +java.util.concurrent.ThreadPoolExecutor#finalize() +java.util.concurrent.atomic.AtomicBoolean#weakCompareAndSet(boolean,boolean) +java.util.concurrent.atomic.AtomicInteger#weakCompareAndSet(int,int) +java.util.concurrent.atomic.AtomicIntegerArray#weakCompareAndSet(int,int,int) +java.util.concurrent.atomic.AtomicLong#weakCompareAndSet(long,long) +java.util.concurrent.atomic.AtomicLongArray#weakCompareAndSet(int,long,long) +java.util.concurrent.atomic.AtomicReference#weakCompareAndSet(java.lang.Object,java.lang.Object) +java.util.concurrent.atomic.AtomicReferenceArray#weakCompareAndSet(int,java.lang.Object,java.lang.Object) +java.util.jar.Attributes$Name#EXTENSION_INSTALLATION +java.util.jar.Attributes$Name#IMPLEMENTATION_URL +java.util.jar.Attributes$Name#IMPLEMENTATION_VENDOR_ID +java.util.logging.LogManager#checkAccess() +java.util.logging.LogManager#getLoggingMXBean() +java.util.logging.LogRecord#getThreadID() +java.util.logging.LogRecord#setMillis(long) +java.util.logging.LogRecord#setThreadID(int) +java.util.logging.Logger#global +java.util.logging.Logger#logrb(java.util.logging.Level,java.lang.String,java.lang.String,java.lang.String,java.lang.String) +java.util.logging.Logger#logrb(java.util.logging.Level,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.Object) +java.util.logging.Logger#logrb(java.util.logging.Level,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.Object[]) +java.util.logging.Logger#logrb(java.util.logging.Level,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.Throwable) +java.util.logging.LoggingMXBean +javax.accessibility.AccessibleResourceBundle +javax.crypto.SecretKey#serialVersionUID +javax.crypto.interfaces.DHPrivateKey#serialVersionUID +javax.crypto.interfaces.DHPublicKey#serialVersionUID +javax.crypto.interfaces.PBEKey#serialVersionUID +javax.crypto.spec.OAEPParameterSpec#DEFAULT +javax.imageio.spi.ImageReaderSpi#STANDARD_INPUT_TYPE +javax.imageio.spi.ImageWriterSpi#STANDARD_OUTPUT_TYPE +javax.imageio.spi.ServiceRegistry#finalize() +javax.imageio.stream.FileCacheImageInputStream#finalize() +javax.imageio.stream.FileImageInputStream#finalize() +javax.imageio.stream.FileImageOutputStream#finalize() +javax.imageio.stream.ImageInputStreamImpl#finalize() +javax.imageio.stream.MemoryCacheImageInputStream#finalize() +javax.lang.model.util.AbstractAnnotationValueVisitor6#<init>() +javax.lang.model.util.AbstractAnnotationValueVisitor7#<init>() +javax.lang.model.util.AbstractElementVisitor6#<init>() +javax.lang.model.util.AbstractElementVisitor7#<init>() +javax.lang.model.util.AbstractTypeVisitor6#<init>() +javax.lang.model.util.AbstractTypeVisitor7#<init>() +javax.lang.model.util.ElementKindVisitor6#<init>() +javax.lang.model.util.ElementKindVisitor6#<init>(java.lang.Object) +javax.lang.model.util.ElementKindVisitor7#<init>() +javax.lang.model.util.ElementKindVisitor7#<init>(java.lang.Object) +javax.lang.model.util.ElementScanner6#<init>() +javax.lang.model.util.ElementScanner6#<init>(java.lang.Object) +javax.lang.model.util.ElementScanner7#<init>() +javax.lang.model.util.ElementScanner7#<init>(java.lang.Object) +javax.lang.model.util.SimpleAnnotationValueVisitor6#<init>() +javax.lang.model.util.SimpleAnnotationValueVisitor6#<init>(java.lang.Object) +javax.lang.model.util.SimpleAnnotationValueVisitor7#<init>() +javax.lang.model.util.SimpleAnnotationValueVisitor7#<init>(java.lang.Object) +javax.lang.model.util.SimpleElementVisitor6#<init>() +javax.lang.model.util.SimpleElementVisitor6#<init>(java.lang.Object) +javax.lang.model.util.SimpleElementVisitor7#<init>() +javax.lang.model.util.SimpleElementVisitor7#<init>(java.lang.Object) +javax.lang.model.util.SimpleTypeVisitor6#<init>() +javax.lang.model.util.SimpleTypeVisitor6#<init>(java.lang.Object) +javax.lang.model.util.SimpleTypeVisitor7#<init>() +javax.lang.model.util.SimpleTypeVisitor7#<init>(java.lang.Object) +javax.lang.model.util.TypeKindVisitor6#<init>() +javax.lang.model.util.TypeKindVisitor6#<init>(java.lang.Object) +javax.lang.model.util.TypeKindVisitor7#<init>() +javax.lang.model.util.TypeKindVisitor7#<init>(java.lang.Object) +javax.management.AttributeValueExp#<init>() +javax.management.AttributeValueExp#setMBeanServer(javax.management.MBeanServer) +javax.management.DefaultLoaderRepository +javax.management.MBeanServer#deserialize(java.lang.String,byte[]) +javax.management.MBeanServer#deserialize(java.lang.String,javax.management.ObjectName,byte[]) +javax.management.MBeanServer#deserialize(javax.management.ObjectName,byte[]) +javax.management.StringValueExp#setMBeanServer(javax.management.MBeanServer) +javax.management.ValueExp#setMBeanServer(javax.management.MBeanServer) +javax.management.loading.DefaultLoaderRepository +javax.management.monitor.CounterMonitor#getDerivedGauge() +javax.management.monitor.CounterMonitor#getDerivedGaugeTimeStamp() +javax.management.monitor.CounterMonitor#getThreshold() +javax.management.monitor.CounterMonitor#setThreshold(java.lang.Number) +javax.management.monitor.CounterMonitorMBean#getDerivedGauge() +javax.management.monitor.CounterMonitorMBean#getDerivedGaugeTimeStamp() +javax.management.monitor.CounterMonitorMBean#getThreshold() +javax.management.monitor.CounterMonitorMBean#setThreshold(java.lang.Number) +javax.management.monitor.GaugeMonitor#getDerivedGauge() +javax.management.monitor.GaugeMonitor#getDerivedGaugeTimeStamp() +javax.management.monitor.GaugeMonitorMBean#getDerivedGauge() +javax.management.monitor.GaugeMonitorMBean#getDerivedGaugeTimeStamp() +javax.management.monitor.Monitor#alreadyNotified +javax.management.monitor.Monitor#dbgTag +javax.management.monitor.Monitor#getObservedObject() +javax.management.monitor.Monitor#setObservedObject(javax.management.ObjectName) +javax.management.monitor.MonitorMBean#getObservedObject() +javax.management.monitor.MonitorMBean#setObservedObject(javax.management.ObjectName) +javax.management.monitor.StringMonitor#getDerivedGauge() +javax.management.monitor.StringMonitor#getDerivedGaugeTimeStamp() +javax.management.monitor.StringMonitorMBean#getDerivedGauge() +javax.management.monitor.StringMonitorMBean#getDerivedGaugeTimeStamp() +javax.management.openmbean.OpenType#ALLOWED_CLASSNAMES +javax.management.relation.RoleStatus#<init>() +javax.management.remote.rmi.RMIIIOPServerImpl +javax.naming.Context#APPLET +javax.naming.Name#serialVersionUID +javax.naming.directory.Attribute#serialVersionUID +javax.net.ssl.HandshakeCompletedEvent#getPeerCertificateChain() +javax.net.ssl.SSLSession#getPeerCertificateChain() +javax.security.auth.Subject#doAs(javax.security.auth.Subject,java.security.PrivilegedAction) +javax.security.auth.Subject#doAs(javax.security.auth.Subject,java.security.PrivilegedExceptionAction) +javax.security.auth.Subject#doAsPrivileged(javax.security.auth.Subject,java.security.PrivilegedAction,java.security.AccessControlContext) +javax.security.auth.Subject#doAsPrivileged(javax.security.auth.Subject,java.security.PrivilegedExceptionAction,java.security.AccessControlContext) +javax.security.auth.Subject#getSubject(java.security.AccessControlContext) +javax.security.auth.SubjectDomainCombiner +javax.security.cert.Certificate +javax.security.cert.CertificateEncodingException +javax.security.cert.CertificateException +javax.security.cert.CertificateExpiredException +javax.security.cert.CertificateNotYetValidException +javax.security.cert.CertificateParsingException +javax.security.cert.X509Certificate +javax.sql.rowset.BaseRowSet#setUnicodeStream(int,java.io.InputStream,int) +javax.sql.rowset.CachedRowSet#COMMIT_ON_ACCEPT_CHANGES +javax.swing.AbstractButton#getLabel() +javax.swing.AbstractButton#setLabel(java.lang.String) +javax.swing.FocusManager#disableSwingFocusManager() +javax.swing.FocusManager#isFocusManagerEnabled() +javax.swing.ImageIcon#component +javax.swing.ImageIcon#tracker +javax.swing.InputVerifier#shouldYieldFocus(javax.swing.JComponent) +javax.swing.JApplet +javax.swing.JComponent#disable() +javax.swing.JComponent#enable() +javax.swing.JComponent#getNextFocusableComponent() +javax.swing.JComponent#hide() +javax.swing.JComponent#isManagingFocus() +javax.swing.JComponent#requestDefaultFocus() +javax.swing.JComponent#reshape(int,int,int,int) +javax.swing.JComponent#setNextFocusableComponent(java.awt.Component) +javax.swing.JComponent$AccessibleJComponent#accessibleFocusHandler +javax.swing.JComponent$AccessibleJComponent$AccessibleFocusHandler +javax.swing.JInternalFrame#getMenuBar() +javax.swing.JInternalFrame#setMenuBar(javax.swing.JMenuBar) +javax.swing.JList#getSelectedValues() +javax.swing.JMenuBar#getComponentAtIndex(int) +javax.swing.JPasswordField#getText() +javax.swing.JPasswordField#getText(int,int) +javax.swing.JPopupMenu#getComponentAtIndex(int) +javax.swing.JRootPane#getMenuBar() +javax.swing.JRootPane#setMenuBar(javax.swing.JMenuBar) +javax.swing.JTable#createScrollPaneForTable(javax.swing.JTable) +javax.swing.JTable#sizeColumnsToFit(boolean) +javax.swing.JViewport#backingStore +javax.swing.JViewport#isBackingStoreEnabled() +javax.swing.JViewport#setBackingStoreEnabled(boolean) +javax.swing.KeyStroke#getKeyStroke(char,boolean) +javax.swing.RepaintManager#addDirtyRegion(java.applet.Applet,int,int,int,int) +javax.swing.ScrollPaneLayout#getViewportBorderBounds(javax.swing.JScrollPane) +javax.swing.SwingUtilities#findFocusOwner(java.awt.Component) +javax.swing.plaf.TextUI#getToolTipText(javax.swing.text.JTextComponent,java.awt.Point) +javax.swing.plaf.TextUI#modelToView(javax.swing.text.JTextComponent,int) +javax.swing.plaf.TextUI#modelToView(javax.swing.text.JTextComponent,int,javax.swing.text.Position$Bias) +javax.swing.plaf.TextUI#viewToModel(javax.swing.text.JTextComponent,java.awt.Point) +javax.swing.plaf.TextUI#viewToModel(javax.swing.text.JTextComponent,java.awt.Point,javax.swing.text.Position$Bias[]) +javax.swing.plaf.basic.BasicDesktopPaneUI#closeKey +javax.swing.plaf.basic.BasicDesktopPaneUI#maximizeKey +javax.swing.plaf.basic.BasicDesktopPaneUI#minimizeKey +javax.swing.plaf.basic.BasicDesktopPaneUI#navigateKey +javax.swing.plaf.basic.BasicDesktopPaneUI#navigateKey2 +javax.swing.plaf.basic.BasicDirectoryModel#intervalAdded(javax.swing.event.ListDataEvent) +javax.swing.plaf.basic.BasicDirectoryModel#intervalRemoved(javax.swing.event.ListDataEvent) +javax.swing.plaf.basic.BasicDirectoryModel#lt(java.io.File,java.io.File) +javax.swing.plaf.basic.BasicInternalFrameUI#openMenuKey +javax.swing.plaf.basic.BasicMenuItemUI$MouseInputHandler +javax.swing.plaf.basic.BasicScrollPaneUI$HSBChangeListener +javax.swing.plaf.basic.BasicScrollPaneUI$PropertyChangeHandler +javax.swing.plaf.basic.BasicScrollPaneUI$VSBChangeListener +javax.swing.plaf.basic.BasicScrollPaneUI$ViewportChangeHandler +javax.swing.plaf.basic.BasicSplitPaneUI#createKeyboardDownRightListener() +javax.swing.plaf.basic.BasicSplitPaneUI#createKeyboardEndListener() +javax.swing.plaf.basic.BasicSplitPaneUI#createKeyboardHomeListener() +javax.swing.plaf.basic.BasicSplitPaneUI#createKeyboardResizeToggleListener() +javax.swing.plaf.basic.BasicSplitPaneUI#createKeyboardUpLeftListener() +javax.swing.plaf.basic.BasicSplitPaneUI#dividerResizeToggleKey +javax.swing.plaf.basic.BasicSplitPaneUI#downKey +javax.swing.plaf.basic.BasicSplitPaneUI#endKey +javax.swing.plaf.basic.BasicSplitPaneUI#getDividerBorderSize() +javax.swing.plaf.basic.BasicSplitPaneUI#homeKey +javax.swing.plaf.basic.BasicSplitPaneUI#keyboardDownRightListener +javax.swing.plaf.basic.BasicSplitPaneUI#keyboardEndListener +javax.swing.plaf.basic.BasicSplitPaneUI#keyboardHomeListener +javax.swing.plaf.basic.BasicSplitPaneUI#keyboardResizeToggleListener +javax.swing.plaf.basic.BasicSplitPaneUI#keyboardUpLeftListener +javax.swing.plaf.basic.BasicSplitPaneUI#leftKey +javax.swing.plaf.basic.BasicSplitPaneUI#rightKey +javax.swing.plaf.basic.BasicSplitPaneUI#upKey +javax.swing.plaf.basic.BasicTabbedPaneUI#downKey +javax.swing.plaf.basic.BasicTabbedPaneUI#leftKey +javax.swing.plaf.basic.BasicTabbedPaneUI#rightKey +javax.swing.plaf.basic.BasicTabbedPaneUI#upKey +javax.swing.plaf.basic.BasicTextUI#modelToView(javax.swing.text.JTextComponent,int) +javax.swing.plaf.basic.BasicTextUI#modelToView(javax.swing.text.JTextComponent,int,javax.swing.text.Position$Bias) +javax.swing.plaf.basic.BasicTextUI#viewToModel(javax.swing.text.JTextComponent,java.awt.Point) +javax.swing.plaf.basic.BasicTextUI#viewToModel(javax.swing.text.JTextComponent,java.awt.Point,javax.swing.text.Position$Bias[]) +javax.swing.plaf.basic.BasicToolBarUI#createFloatingFrame(javax.swing.JToolBar) +javax.swing.plaf.basic.BasicToolBarUI#downKey +javax.swing.plaf.basic.BasicToolBarUI#leftKey +javax.swing.plaf.basic.BasicToolBarUI#rightKey +javax.swing.plaf.basic.BasicToolBarUI#upKey +javax.swing.plaf.metal.MetalComboBoxUI#editablePropertyChanged(java.beans.PropertyChangeEvent) +javax.swing.plaf.metal.MetalComboBoxUI#removeListeners() +javax.swing.plaf.metal.MetalComboBoxUI$MetalComboPopup +javax.swing.plaf.metal.MetalFileChooserUI$FileRenderer +javax.swing.plaf.metal.MetalFileChooserUI$SingleClickListener +javax.swing.plaf.metal.MetalScrollPaneUI#uninstallListeners(javax.swing.JScrollPane) +javax.swing.plaf.multi.MultiTextUI#modelToView(javax.swing.text.JTextComponent,int) +javax.swing.plaf.multi.MultiTextUI#modelToView(javax.swing.text.JTextComponent,int,javax.swing.text.Position$Bias) +javax.swing.plaf.multi.MultiTextUI#viewToModel(javax.swing.text.JTextComponent,java.awt.Point) +javax.swing.plaf.multi.MultiTextUI#viewToModel(javax.swing.text.JTextComponent,java.awt.Point,javax.swing.text.Position$Bias[]) +javax.swing.table.TableColumn#disableResizedPosting() +javax.swing.table.TableColumn#enableResizedPosting() +javax.swing.table.TableColumn#resizedPostingDisableCount +javax.swing.text.DefaultTextUI +javax.swing.text.JTextComponent#modelToView(int) +javax.swing.text.JTextComponent#viewToModel(java.awt.Point) +javax.swing.text.LabelView#getFontMetrics() +javax.swing.text.PasswordView#drawEchoCharacter(java.awt.Graphics,int,int,char) +javax.swing.text.PasswordView#drawSelectedText(java.awt.Graphics,int,int,int,int) +javax.swing.text.PasswordView#drawUnselectedText(java.awt.Graphics,int,int,int,int) +javax.swing.text.PlainView#drawLine(int,java.awt.Graphics,int,int) +javax.swing.text.PlainView#drawSelectedText(java.awt.Graphics,int,int,int,int) +javax.swing.text.PlainView#drawUnselectedText(java.awt.Graphics,int,int,int,int) +javax.swing.text.TableView#createTableCell(javax.swing.text.Element) +javax.swing.text.TableView$TableCell +javax.swing.text.Utilities#drawTabbedText(javax.swing.text.Segment,int,int,java.awt.Graphics,javax.swing.text.TabExpander,int) +javax.swing.text.Utilities#getBreakLocation(javax.swing.text.Segment,java.awt.FontMetrics,int,int,javax.swing.text.TabExpander,int) +javax.swing.text.Utilities#getPositionAbove(javax.swing.text.JTextComponent,int,int) +javax.swing.text.Utilities#getPositionBelow(javax.swing.text.JTextComponent,int,int) +javax.swing.text.Utilities#getTabbedTextOffset(javax.swing.text.Segment,java.awt.FontMetrics,int,int,javax.swing.text.TabExpander,int) +javax.swing.text.Utilities#getTabbedTextOffset(javax.swing.text.Segment,java.awt.FontMetrics,int,int,javax.swing.text.TabExpander,int,boolean) +javax.swing.text.Utilities#getTabbedTextWidth(javax.swing.text.Segment,java.awt.FontMetrics,int,javax.swing.text.TabExpander,int) +javax.swing.text.View#modelToView(int,java.awt.Shape) +javax.swing.text.View#viewToModel(float,float,java.awt.Shape) +javax.swing.text.WrappedPlainView#drawLine(int,int,java.awt.Graphics,int,int) +javax.swing.text.WrappedPlainView#drawSelectedText(java.awt.Graphics,int,int,int,int) +javax.swing.text.WrappedPlainView#drawUnselectedText(java.awt.Graphics,int,int,int,int) +javax.swing.text.html.FormView#RESET +javax.swing.text.html.FormView#SUBMIT +javax.swing.text.html.HTMLEditorKit$InsertHTMLTextAction#insertAtBoundry(javax.swing.JEditorPane,javax.swing.text.html.HTMLDocument,int,javax.swing.text.Element,java.lang.String,javax.swing.text.html.HTML$Tag,javax.swing.text.html.HTML$Tag) +javax.swing.tree.DefaultTreeSelectionModel#notifyPathChange(java.util.Vector,javax.swing.tree.TreePath) +javax.tools.StandardJavaFileManager#getJavaFileObjectsFromPaths(java.lang.Iterable) +javax.tools.ToolProvider#getSystemToolClassLoader() +javax.xml.stream.XMLEventFactory#newInstance(java.lang.String,java.lang.ClassLoader) +javax.xml.stream.XMLInputFactory#newInstance(java.lang.String,java.lang.ClassLoader) +javax.xml.stream.XMLOutputFactory#newInstance(java.lang.String,java.lang.ClassLoader) +org.ietf.jgss.GSSContext#acceptSecContext(java.io.InputStream,java.io.OutputStream) +org.ietf.jgss.GSSContext#getMIC(java.io.InputStream,java.io.OutputStream,org.ietf.jgss.MessageProp) +org.ietf.jgss.GSSContext#initSecContext(java.io.InputStream,java.io.OutputStream) +org.ietf.jgss.GSSContext#unwrap(java.io.InputStream,java.io.OutputStream,org.ietf.jgss.MessageProp) +org.ietf.jgss.GSSContext#verifyMIC(java.io.InputStream,java.io.InputStream,org.ietf.jgss.MessageProp) +org.ietf.jgss.GSSContext#wrap(java.io.InputStream,java.io.OutputStream,org.ietf.jgss.MessageProp) +org.xml.sax.AttributeList +org.xml.sax.DocumentHandler +org.xml.sax.HandlerBase +org.xml.sax.Parser +org.xml.sax.helpers.AttributeListImpl +org.xml.sax.helpers.ParserFactory +org.xml.sax.helpers.XMLReaderFactory diff --git a/src/main/resources/de/thetaphi/forbiddenapis/signatures/jdk-internal-19.txt b/src/main/resources/de/thetaphi/forbiddenapis/signatures/jdk-internal-19.txt new file mode 100644 index 0000000..23f641c --- /dev/null +++ b/src/main/resources/de/thetaphi/forbiddenapis/signatures/jdk-internal-19.txt @@ -0,0 +1,10 @@ +# This file contains API signatures that are marked as internal in Java. +# It is provided here for reference, but can easily regenerated by executing from the source folder of forbidden-apis: +# $ ant generate-internal + +# This file contains all internal packages listed in Security.getProperty("package.access") of Java version 19 (extracted from build 19). + +@defaultMessage non-public internal runtime class in Java 19 + +sun.misc.** +sun.reflect.** diff --git a/src/main/resources/de/thetaphi/forbiddenapis/signatures/jdk-unsafe-19.txt b/src/main/resources/de/thetaphi/forbiddenapis/signatures/jdk-unsafe-19.txt new file mode 100644 index 0000000..1e2bcb7 --- /dev/null +++ b/src/main/resources/de/thetaphi/forbiddenapis/signatures/jdk-unsafe-19.txt @@ -0,0 +1,19 @@ +# (C) Copyright Uwe Schindler (Generics Policeman) and others. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# These methods and classes should not be used by server classes (unsafe, no charset, no locale,...): + +# We only include 18 for now. +# TODO: Scan Java 19 API for additional locale/charset/... violations! +@includeBundled jdk-unsafe-18